managarten/apps-archived/memoro/apps/mobile/docs/features/menus-zeego.md
Till-JS 61d181fbc2 chore: archive inactive projects to apps-archived/
Move inactive projects out of active workspace:
- bauntown (community website)
- maerchenzauber (AI story generation)
- memoro (voice memo app)
- news (news aggregation)
- nutriphi (nutrition tracking)
- reader (reading app)
- uload (URL shortener)
- wisekeep (AI wisdom extraction)

Update CLAUDE.md documentation:
- Add presi to active projects
- Document archived projects section
- Update workspace configuration

Archived apps can be re-activated by moving back to apps/

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-29 07:03:59 +01:00

28 KiB
Raw Permalink Blame History

Getting Started Install Zeego Start by installing Zeego:

yarn add zeego For upgrading from Zeego 2 to Zeego 3, see the upgrade guide.

Install peer dependencies A note for monorepo users: install these in the directory of your native app, not in the root of the monorepo.

The following exact versions must be installed. Please reference the compatibility table for the versions that work with your setup.

iOS Dependencies yarn yarn add react-native-ios-context-menu@3.1.0 react-native-ios-utilities@5.1.2 npm npm i
react-native-ios-context-menu@3.1.0
react-native-ios-utilities@5.1.2
--legacy-peer-deps Android Dependencies yarn yarn add @react-native-menu/menu@1.2.2 npm npm i @react-native-menu/menu@1.2.2 --legacy-peer-deps Compatibility Table Given a Zeego version (start there), see the dependencies to the right that it is compatible with.

Zeego React Native New Arch Expo SDK react-native-menu react-native-ios-context-menu react-native-ios-utilities 3 0.76 or 0.77 (optional) 52+ 1.2.2 3.1.0 5.1.2 2 0.74 51, 50, 49* 1.0.2 2.5.1 4.5.3 *For Expo SDK 49 or lower, click here Frameworks Expo Expo users need to use a custom development client, since Zeego uses native code.

After installing Zeego and its peer dependencies, you'll need to rebuild your custom development client:

expo run:ios -d tip To install your dev client on your iPhone, make sure it's plugged in to your Mac. If it doesn't show up, you may need to run expo prebuild -p ios, open ios/YourApp.xcworspace in XCode, and make sure your Apple team is properly set up.

After the development client build is complete, you can run your app in dev mode:

npx expo start --dev-client If your app is on the App Store, you'll need to deploy a new build too:

eas build --platform ios --autosubmit Zeego will not work with Expo Go.

If you aren't familiar with how Expo works / what custom development clients are, I recommend using EAS (Expo's hosted build service.) As long as you eas build, it will work.

Solito/Next.js You need to add zeego to your transpilePackages in next.config.js.

// next.config.js module.exports = { transpilePackages: ['zeego'], } Vanilla React Native Run pod install in your ios folder.

Usage Here we'll look at a quick overview of what it looks like to use Zeego.

For a full overview of using custom styles and components, see the styling guide.

  1. Create your primitives Create a file for your primitives, and create each component.

Here, you can add custom styles and interactions. To keep your styles and components consistent, add them all in this file and re-export them.

If you've used Radix UI before, this will look familiar.

// design-system/dropdown-menu.tsx import * as DropdownMenu from 'zeego/dropdown-menu' export const DropdownMenuRoot = DropdownMenu.Root export const DropdownMenuContent = DropdownMenu.Content // notice that we're using the create() function export const DropdownMenuItem = DropdownMenu.create( (props: React.ComponentProps) => ( <DropdownMenu.Item {...props} style={{ height: 34 }} /> ), 'Item' ) // ...see "Full code samples" below to see the rest of the file Notice that the DropdownMenuItem is wrapped with create(). This is a requirement for custom components.

Full code samples Full dropdown-menu.tsx file Full context-menu.tsx file 2. Build a menu Build a menu using the primitives you created.

import { Text } from 'react-native' import { DropdownMenuRoot, DropdownMenuContent, DropdownMenuTrigger, DropdownMenuItem, DropdownMenuItemTitle, } from '@/design-system/dropdown-menu' function Menu() { return ( Open Dropdown Menu Fernando Rojo ) } 3. Add styles All Zeego primitives ship unstyled. See the styling guide use your own styles & build custom components.

The styles will apply on web, but other than the Trigger component, your iOS and Android apps will style using the native menu components.

You should make a habit of applying the styles in your primitive file we made above to keep your app's feel consistent.

  1. Why the boilerplate? You might look at step 1 and think, wait, why do I need to have such a big file to use this library?

The reality is, you don't need to, but you should. By wrapping third-party dependencies in one place and styling them yourself, you own the code more closely. It will allow for consumption of those files to be elegant.

If it looks overwhelming, don't worry. You can just copy-paste and continue.

Dropdown Menu import * as DropdownMenu from 'zeego/dropdown-menu' A menu component anchored to a button pressed by a user.

Platform behavior Web: Uses Radix UI's unstyled Dropdown Menu component iOS & Android: Uses each platform's built-in native menu component Features Zeego's menu includes Radix UI's features:

Can be controlled or uncontrolled. Supports submenus with configurable reading direction. Supports items, labels, & groups of items. Supports checkable items (single or multiple) with an optional indeterminate state. Supports modal and non-modal modes. Customize the side, alignment, offsets, collision handling. Optionally render a pointing arrow. Focus is fully managed. Full keyboard navigation. Typeahead support. Dismissing and layering behavior is highly customizable. Plus other unique ones:

SF Symbols on iOS with color customization Android system icons Images on menu items (remote images coming soon) Installation Make sure you've followed the getting started guide.

Usage import * as DropdownMenu from 'zeego/dropdown-menu' export function MyMenu() { return ( <DropdownMenu.Root> <DropdownMenu.Trigger>