App shell
Shell Menus
Menus opened from the sidebar bottom bar: workspace switcher, help / what’s new, and Library · Trash.
Usage
- Use these ready-made menus in the sidebar bottom bar: workspace switching, help, and the apps / trash launcher.
- Pass your data (workspaces, releases, trash entries) and handlers; the menus own their layout and keyboard behaviour.
- Don’t rebuild them from
Menuparts unless you need different items; keep one menu per trigger.
Installation
Install the package (React 19):
terminal
terminal
terminal
Import the styles once, in your app entry or root layout:
/src/main.tsx
Use it anywhere inside your app's <Theme> (see Installation):
/src/ShellMenusExample.tsx
Examples
Trash list
Pages in Trash for over 30 days will be automatically deleted
Composition
anatomy
API Reference
WorkspaceMenu
| Prop | Type | Default |
|---|---|---|
children | ReactElement | |
email | string | |
workspaces | Workspace[] | |
currentId | string | |
onSelect | (id: string) => void | |
onNewWorkspace | () => void | |
onSettings | () => void | |
onInvite | () => void | |
onUpgrade | () => void | |
onAddAccount | () => void | |
onLogOut | () => void | |
open | boolean | |
onOpenChange | (open: boolean) => void |
HelpMenu
| Prop | Type | Default |
|---|---|---|
children | ReactElement | |
releases | ReleaseNote[] | [] |
onDocs | () => void | |
onSupport | () => void | |
onRelease | (id: string) => void | |
onAllReleases | () => void | |
more | ReactNode | Keyboard shortcuts, Send feedback |
AppsMenu
| Prop | Type | Default |
|---|---|---|
children | ReactElement | |
trash | TrashEntry[] | [] |
onLibrary | () => void | |
onTemplates | () => void | |
onImport | () => void | |
onRestore | (id: string) => void | |
onDelete | (id: string) => void |
TrashMenu
| Prop | Type | Default |
|---|---|---|
items | TrashEntry[] | |
onOpen | (id: string) => void | |
onRestore | (id: string) => void | |
onDelete | (id: string) => void | |
className | string |
Accessibility
- Built on the
Menucomponent (Radix DropdownMenu): Enter/Space/ArrowDown open from the trigger, arrows move, ArrowRight opens submenus (More, Trash), Escape closes and returns focus. - Trash is a labelled list; each row has an open button plus "Restore <page>" and "Delete <page> from Trash" buttons.
- Workspaces are a labelled radio group (
menuitemradio): the current workspace is announced as checked; choosing one callsonSelect.
© 2026 Motion. Internal documentation.