SlideoutMenu

React slide-in navigation panel with a header, grouped items, current-page links, and a footer, using real nav and list semantics. Side flips in RTL.

SlideoutMenu is a nav panel with a header, grouped items, and a footer. Unlike Drawer it uses real list and link semantics; side flips with direction.

When to use

Use SlideoutMenu for app-level navigation on mobile or in a compact header: sections of a portal, account links, and language or sign-out actions. Group items and keep the top level short.

For secondary flows with forms, use Drawer. For persistent desktop navigation, use Sidebar.

Examples

Grouped navigation

Current-page links

White surface (Arabic)

Props

Props declared by SlideoutMenu. Native attributes of the underlying element pass through.

<SlideoutMenu>

PropTypeDefaultDescription
childrenReactNode
openboolean
defaultOpenboolean
onOpenChange(open: boolean) => void
modalboolean

<SlideoutMenuTrigger>

PropTypeDefaultDescription
asChildboolean

<SlideoutMenuClose>

PropTypeDefaultDescription
asChildboolean

<SlideoutMenuContent>

PropTypeDefaultDescription
side"start" | "end"
background"white" | "gray"
forceMounttrueUsed to force mounting when more control is needed. Useful when controlling animation with React animation libraries.
onOpenAutoFocus(event: Event) => voidEvent handler called when auto-focusing on open. Can be prevented.
onCloseAutoFocus(event: Event) => voidEvent handler called when auto-focusing on close. Can be prevented.
deferPointerDownOutsidebooleanWhen true, a 'pointerdown' event outside of the layered element will wait for the interaction's click event before dispatching, allowing third-party code to stop propagation of later events and cancel dismissal.
onEscapeKeyDown(event: KeyboardEvent) => voidEvent handler called when the escape key is down. Can be prevented.
onPointerDownOutside(event: PointerDownOutsideEvent) => voidEvent handler called when the a pointerdown event happens outside of the DismissableLayer. Can be prevented.
onFocusOutside(event: FocusOutsideEvent) => voidEvent handler called when the focus moves outside of the DismissableLayer. Can be prevented.
onInteractOutside(event: PointerDownOutsideEvent | FocusOutsideEvent) => voidEvent handler called when an interaction happens outside the DismissableLayer. Specifically, when a pointerdown event happens outside or focus moves outside of it. Can be prevented.
asChildboolean

<SlideoutMenuHeader>

PropTypeDefaultDescription
iconreact.ReactNodeOptional featured icon, shown in a 32px brand-tinted disc before the title.
showCloseButtonbooleanRender the close (X) button. Defaults to true.
closeLabelstringLocalized aria-label for the close button. Defaults to "Close".

<SlideoutMenuTitle>

PropTypeDefaultDescription
asChildboolean

<SlideoutMenuDescription>

PropTypeDefaultDescription
asChildboolean

<SlideoutMenuGroup>

PropTypeDefaultDescription
labelreact.ReactNodeSection heading rendered above the list (SDGA "Group Label").

<SlideoutMenuItem>

PropTypeDefaultDescription
asChildbooleanRender as the child element (e.g. an <a> or router <Link>).
iconreact.ReactNodeLeading 24px icon.
trailingreact.ReactNodeTrailing slot - counter text, an icon button, a check, a Tag, etc.
activebooleanMarks the current page - sets aria-current="page" and the active style.
level1 | 2SDGA Nav Drawer level: 2 indents the row under its parent (40px). Defaults to 1.
expandedbooleanSDGA Nav Drawer "Parent (Sub-menu)": renders a rotating chevron in the trailing slot and sets aria-expanded. Render the level-2 rows after this item while it is expanded.

Accessibility

The panel renders a <nav> with a real list of links, so screen readers expose it as a navigation landmark. The current page is marked with aria-current="page", and separators use role="separator".

The close button and trigger have accessible names, and the panel opens from the inline start so it matches the reading direction.