Overlays
Glass Menu
A dropdown menu on glass with shortcuts, checkbox and radio items, and submenus.
pnpm dlx shadcn@4.14.1 add @glassyui/glass-menunpx shadcn@4.14.1 add @glassyui-native/glass-menuPreview
Demos ready. Update 0.
This preview runs the React version. In an app, iOS 26 and later draw the React Native version with the system’s own Liquid Glass. See it on a phone.
Installation
First add the exact @glassyui mapping to components.json as shown in Getting Started. Then run the pinned item command:
pnpm dlx shadcn@4.14.1 add @glassyui/glass-menuWhat this installs11 files, 2 packages
Direct registry declarations
These values belong to @glassyui/glass-menu itself in registry.json.
Package dependencies
@radix-ui/react-dropdown-menuclsx
Registry dependencies
@glassyui/glass-panel
File targets
components/glassyui/glass-menu.tsx
Complete installed closure
This follows every namespaced registry dependency recursively and de-duplicates the packages and target files installed with this item.
Package dependencies
@radix-ui/react-dropdown-menuclsx
Installed files
components/glassyui/glass-menu.tsxcomponents/glassyui/glass-panel.tsxcomponents/glassyui/glass-surface.tsxcomponents/glassyui/lib/merge-refs.tscomponents/glassyui/lib/refraction-map.tscomponents/glassyui/lib/use-refraction-filter.tsxcomponents/glassyui/lib/scene-context.tscomponents/glassyui/glass-provider.tsxcomponents/glassyui/liquid-filters.tsxcomponents/glassyui/lib/preferences.tscomponents/glassyui/styles/liquid.css
First add the @glassyui-native mapping to components.json as shown in the Expo guide. Then add the component and match its packages to your Expo SDK:
npx shadcn@4.14.1 add @glassyui-native/glass-menunpx expo install --fixUsage
import { GlassMenu, GlassMenuContent, GlassMenuItem, GlassMenuShortcut, GlassMenuTrigger } from "@/components/glassyui/glass-menu";
export function MenuDemo() {
return (
<GlassMenu>
<GlassMenuTrigger>Edit</GlassMenuTrigger>
<GlassMenuContent>
<GlassMenuItem>
Undo <GlassMenuShortcut>⌘Z</GlassMenuShortcut>
</GlassMenuItem>
<GlassMenuItem tone="destructive">Delete</GlassMenuItem>
</GlassMenuContent>
</GlassMenu>
);
}import { useState } from 'react';
import { GlassButton } from '@/components/glassyui/glass-button';
import {
GlassMenu,
GlassMenuCheckboxItem,
GlassMenuContent,
GlassMenuItem,
GlassMenuSeparator,
GlassMenuTrigger,
} from '@/components/glassyui/glass-menu';
export default function MenuExample() {
const [pinned, setPinned] = useState(false);
return (
<GlassMenu>
<GlassMenuTrigger>
<GlassButton>Options</GlassButton>
</GlassMenuTrigger>
<GlassMenuContent>
<GlassMenuItem onSelect={() => setPinned(false)}>Duplicate</GlassMenuItem>
<GlassMenuCheckboxItem checked={pinned} onCheckedChange={setPinned}>
Pin to top
</GlassMenuCheckboxItem>
<GlassMenuSeparator />
<GlassMenuItem tone="destructive">Delete</GlassMenuItem>
</GlassMenuContent>
</GlassMenu>
);
}
This example also uses Glass Button. Install everything it uses:
npx shadcn@4.14.1 add @glassyui-native/glass-menu @glassyui-native/glass-buttonExamples
<GlassMenuContent>
<GlassMenuLabel>View</GlassMenuLabel>
<GlassMenuCheckboxItem checked={showGrid} onCheckedChange={setShowGrid}>
Show grid
</GlassMenuCheckboxItem>
<GlassMenuSeparator />
<GlassMenuSub>
<GlassMenuSubTrigger>Sort by</GlassMenuSubTrigger>
<GlassMenuSubContent>
<GlassMenuRadioGroup value={sort} onValueChange={setSort}>
<GlassMenuRadioItem value="name">Name</GlassMenuRadioItem>
<GlassMenuRadioItem value="date">Date</GlassMenuRadioItem>
</GlassMenuRadioGroup>
</GlassMenuSubContent>
</GlassMenuSub>
</GlassMenuContent>API
The React Native version takes the same props under React Native’s names: onPress for onClick and style for className. The Expo guide lists what else differs.
GlassMenuRadix DropdownMenu root. Non-modal by default, so the page keeps its scroll; pass modal to lock it.
GlassMenuTriggerRadix trigger primitive.
GlassMenuContentPortal-backed glass panel. sideOffset defaults to 8.
GlassMenuItemMenu item with inset and tone (default or destructive) options.
GlassMenuCheckboxItem / GlassMenuRadioItemStateful items with a check or dot indicator.
GlassMenuGroup / GlassMenuRadioGroupRadix grouping primitives.
GlassMenuLabel / GlassMenuSeparatorSection label and hairline divider.
GlassMenuShortcutRight-aligned keyboard shortcut hint.
GlassMenuSub / GlassMenuSubTrigger / GlassMenuSubContentNested submenu with a chevron trigger.
Notes
Keyboard
Radix handles arrow keys, typeahead, Escape, and submenu opening with the right arrow key.
Right to left
Indents, shortcuts, and the submenu chevron use logical properties and flip in right-to-left layouts.
Accessibility
Keep the Radix-backed semantics intact and preserve visible labels, focus states, and keyboard operation when copying the source.
Performance
Use provider quality preferences for dense app screens. Reserve strong refraction for hero or showcase surfaces.