inlinefalse
booleanRenders the panel in place, always open, with no scrim or hotkey. The keyboard hints hide when the panel is narrower than 440px.
open / defaultOpen / onOpenChange–
boolean / boolean / (open) => voidControlled or uncontrolled open state (overlay mode).
query / defaultQuery / onQueryChange–
string / string / (q) => voidControlled or uncontrolled query.
page / defaultPage / onPageChange–
string[] / string[] / (page: string[]) => voidThe nested page as the path of entered item ids (e.g. ["theme"]; [] is the root). Uncontrolled pages reset to defaultPage on open; a controlled page is left to you, so you can open straight into one.
onActiveChange–
(item | null, { ask }) => voidThe row under the lens changed (arrow keys, pointer or new results): use it for a preview pane. item is null for the Ask row (ask: true) or when nothing is active or the palette closes.
onThemeChange–
(theme: "system" | "dark" | "light") => voidCalled when a theme option is picked (the default Change theme… page). Wire it to your site theme; the palette itself only retints when theme is uncontrolled.
filtermatchCommand
(query, item) => { score; idx } | nullSwap the matcher (also called with an empty query: return a match to show the item). Higher scores rank first within a group; idx lists title characters to highlight.
triggertrue
boolean | ReactNode | ({ open, setOpen, toggle }) => ReactNodeOverlay mode: the Search Lumen… ⌘K well that opens it. false hides it (open it from your own button, a sidebar or the hotkey); a node replaces it (wire its onClick yourself); a function receives { open, setOpen, toggle }.
hotkeytrue
booleanOverlay mode: ⌘K / Ctrl+K toggles the palette (document keydown). Ignores events another handler already preventDefault-ed. Pass false when something else owns ⌘K.
width640
number | stringPanel width. Overlay: min(width, 100vw − 32px). Inline: the max width (the panel fills its container up to it).
height392
number | stringMax height of the results list before it scrolls; the list still animates to fit shorter results.
breakpoint720
numberViewport width (px) below which layout="auto" turns the overlay into the phone bottom sheet.
layout"auto"
"auto" | "desktop" | "mobile"auto uses the phone bottom sheet (drag to dismiss) below breakpoint.
portaltrue
booleanOverlay mode: render into a portal so no parent clips it.
portalContainerdocument.body
HTMLElement | nullOverlay mode: the portal target, e.g. your modal root or a shadow-root host.
zIndex60
numberOverlay mode: z-index of the fixed layer (scrim and panel).
autoFocustrue
booleanOverlay mode: focus the input when the palette opens.
modalautoFocus
booleanOverlay mode: aria-modal and focus kept inside the panel. Follows autoFocus unless set, so autoFocus={false} alone gives a non-modal panel.
motion"full"
"full" | "subtle" | "off"full: the designed motion. subtle: calm curve, shorter, no staggers. off: instant. prefers-reduced-motion is always respected.
soundtrue
boolean | "subtle"true plays Lumen cues when a GlassSoundProvider enables sound; false silences this instance; "subtle" plays at 55%. Without a provider nothing plays and the audio engine never loads.
theme"system"
"system" | "dark" | "light"system follows a .dark / .light class or data-theme on an ancestor, else the OS.
className / style / ref–
string / CSSProperties / Ref<HTMLDivElement>The component root: the wrapper in inline mode, the dialog panel in overlay mode. Other HTML attributes (id, data-*, aria-*, on* handlers) land there too; aria-label names the dialog (default labels.dialog).
triggerClassName / contentClassName–
string / stringClass names for the default trigger well, and for the glass panel in both modes.
placeholder / askLabel–
string / stringDeprecated aliases for labels.placeholder and labels.ask; still work.
CSS variables–
CSSSet on the root or any ancestor: --glass-good, --glass-good-text, --glass-bad (metric tones and the check; -dark / -light suffixes per theme), --glass-accent, --glass-command-top (overlay panel top, default 14vh), --glass-safe-bottom (phone sheet safe area). The glass surface uses the family --lg-* tokens.