Override prop

Pass mobile-only props through the drawer or popover prop. className merges, state callbacks compose and every other prop replaces.

You tune the mobile side through the override prop, named after the mobile side of the pair: drawer={{...}} on DialogDrawer, SheetDrawer and PopoverDrawer, popover={{...}} on TooltipPopover. It exists on the root and on every part that has a mobile counterpart, and is typed 1:1 on your installed mobile component (your Drawer, built on Base UI or Vaul, or your Popover), so you need no casts.

At 768px and up: a Dialog up to md:max-w-lg wide.

Merge rules

The merge rules are the same for all four pairs. Only the prop name changes:

  • className merges as cn(shared, mobile): the shared class still applies below the breakpoint, and the mobile one wins on conflicts.
  • State callbacks compose: for the root's state callbacks (onOpenChange, onOpenChangeComplete), the shared handler runs first, then the mobile one.
  • Every other prop replaces the shared value below the breakpoint.

Native defaults

Outside the override prop, each side keeps its native defaults. A shared prop you set is forwarded to both sides, except the desktop-only props each page lists. Nothing is mapped between the two APIs for you, with one exception: SheetDrawer passes the Sheet's side to the drawer edge (see The drawer edge). A PopoverDrawer therefore opens its drawer from the bottom, wherever the Popover is placed.

On this page