The Drawer component renders its children inside an Overlay Drawer and puts a dimmer over the rest of the screen. Functionality based on the Dialog radix component, which already allows for: defaultOpen (uncontrolled), open (controlled) and onOpenChange props.

In addition to the radix component props, the Drawer also accepts a position property and positions its opening/closing pattern based on one of the 4 window sides: top, right, bottom or left.

Position

position="top" | "right" | "bottom" | "left" (default: "left")

<Drawer position="left">
  <Drawer.Trigger asChild><Button>Open the drawer</Button></Drawer.Trigger>
  <Drawer.Content>
    <Drawer.Header>
      <div className="flex items-center justify-between">
        <Text>Header</Text>
        <Drawer.Close />
      </div>
    </Drawer.Header>
    <Drawer.Main>
      <div className="h-3/2 bg-(--base-2)">
        <Text>Main</Text>
      </div>
    </Drawer.Main>
    <Drawer.Footer>
      <Text>Footer</Text>
    </Drawer.Footer>
  </Drawer.Content>
</Drawer>

API Reference

Drawer
PropTypeDefaultRequired
defaultOpen
boolean
--
modal
boolean
--
onOpenChange
(open: boolean) => void
--
open
boolean
--
position
"left" | "right" | "top" | "bottom"
--
Drawer.Close
PropTypeDefaultRequired
appearance
"simple" | "outline" | "solid" | Partial<Record<Breakpoint, "simple" | "outline" | "solid">>
--
asJSX.IntrinsicElements--
hasTooltip
boolean
--
href
string
--
isRounded
boolean
--
labelstring-
onClick
MouseEventHandler<HTMLElement>
--
size
Partial<Record<Breakpoint, "xs" | "sm" | "md" | "lg">> | "xs" | "sm" | "md" | "lg"
--
theme
"neutral" | "primary" | "primaryDark" | "success" | "warning" | "danger" | "white" | Partial<Record<Breakpoint, "neutral" | "primary" | "primaryDark" | "success" | "warning" | "danger" | "white">>
--
tooltipSide
"left" | "right" | "top" | "bottom"
--
Drawer.Content
PropTypeDefaultRequired
asJSX.IntrinsicElements--
asChild
boolean
--
forceMount
true
--
onCloseAutoFocus
(event: Event) => void
--
onEscapeKeyDown
(event: KeyboardEvent) => void
--
onFocusOutside
(event: FocusOutsideEvent) => void
--
onInteractOutside
(event: FocusOutsideEvent | PointerDownOutsideEvent) => void
--
onOpenAutoFocus
(event: Event) => void
--
onPointerDownOutside
(event: PointerDownOutsideEvent) => void
--
position
"left" | "right" | "top" | "bottom"
--
size
"xs" | "sm" | "md" | "lg" | "xl" | "2xl" | "3xl"
--
Drawer.Header
PropTypeDefaultRequired
asJSX.IntrinsicElements--
Drawer.Main
PropTypeDefaultRequired
asJSX.IntrinsicElements--
Drawer.Footer
PropTypeDefaultRequired
asJSX.IntrinsicElements--
Drawer.Trigger
PropTypeDefaultRequired
asChild
boolean
--