# Glass menu

A glass action menu whose trigger morphs into the panel, with a highlight pill that glides between rows, one in-place submenu, and full keyboard support.

- ID: `glass-menu`
- Import: `animui/glass-menu`
- Category: Special
- Runtime exports: `GlassMenu`
- Declaration: `types/pro/glass-menu.d.ts`
- Type provenance: reconstructed-from-docs-and-runtime
- Related: dropdown-menu, orbit-menu, morph-nav

```tsx
import { GlassMenu } from 'animui/glass-menu';
```

This import example is not a complete render recipe: read the declaration below and its local references for required props, data, callbacks and provider context. Use `animui info glass-menu` to resolve the local declaration graph. Global setup is in `llms.txt`.

```ts
/** Reconstructed from saved Arc documentation and runtime binding evidence; original TypeScript source was unavailable. */
import type { ComponentType, ReactNode, CSSProperties, Ref, ButtonHTMLAttributes, HTMLAttributes, ReactElement } from 'react';

export interface GlassMenuGroup { label?: string; items: { id: string; label: string; icon?: ReactNode; disabled?: boolean; onSelect?: () => void }[]; }
export interface GlassMenuProps {
  groups: GlassMenuGroup[];
  children: ReactNode;
  label?: string;
  triggerLabel?: string;
  open?: boolean;
  defaultOpen?: boolean;
  onOpenChange?: (open: boolean) => void;
  onSelect?: (id: string, item: GlassMenuItem) => void;
  align?: "start" | "end";
  width?: number;
  className?: string;
  style?: CSSProperties;
}

export interface GlassMenuItem {
  id: string;
  label: string;
  icon?: ReactNode;
  shortcut?: string;
  checked?: boolean;
  danger?: boolean;
  disabled?: boolean;
  items?: GlassMenuItem[];
  keepOpen?: boolean;
}

export declare const GlassMenu: ComponentType<GlassMenuProps>;

export default GlassMenu;
```
