Popover v0.1.0 Overlay

Non-modal floating panel anchored to its trigger (floating-ui positioning with flip/shift).

import { Popover } from "latticeui-react";

Examples

Filter popover

Show code
<Popover.Root placement="bottom-start">
  <Popover.Trigger>Open filters</Popover.Trigger>
  <Popover.Content>
    <Popover.Title>Filters</Popover.Title>
    <Checkbox label="Only active" defaultChecked />
    <Checkbox label="Include archived" />
    <Popover.Close />
  </Popover.Content>
</Popover.Root>

Anatomy

These data-part attributes are a versioned public API - style and test against them; they will not change in a minor release.

PartElementStable selector
triggerbutton[data-scope="popover"][data-part="trigger"]
positionerdiv[data-scope="popover"][data-part="positioner"]
contentdiv[role=dialog][data-scope="popover"][data-part="content"]
titleh3[data-scope="popover"][data-part="title"]
arrowdiv[data-scope="popover"][data-part="arrow"]
closebutton[data-scope="popover"][data-part="close"]

Props

PropTypeDefaultDescription
Root.defaultOpenboolean
Root.onOpenChange(open: boolean) => void
Root.placementPlacement (floating-ui)"bottom"

Accessibility

Roles: dialog (non-modal)

KeyAction
Escapecloses and refocuses trigger

Styling

Override styles by targeting the stable selectors below from any unlayered CSS - it always beats the library's @layer latticeui styles, no !important needed.

[data-scope="popover"][data-part="content"] {
  /* your overrides */
}

State attributes: data-state=open