Popover Primitive
Popover is a Starwind Runtime primitive in the presence-floating-overlay contract family.
Anatomy
Use the Astro primitive adapter to render Popover anatomy with the Runtime wiring included.
---import { Popover } from "@starwind-ui/astro/popover";---
<Popover.Root> <Popover.Trigger>Open popover</Popover.Trigger> <Popover.Backdrop /> <Popover.Positioner> <Popover.Popup> <Popover.Title>Popover title</Popover.Title> <Popover.Description>Popover description</Popover.Description> <Popover.Close>Close</Popover.Close> <Popover.Arrow /> </Popover.Popup> </Popover.Positioner></Popover.Root>Use the React primitive adapter when Popover state participates in React rendering.
import { Popover } from "@starwind-ui/react/popover";
export function Example() { return ( <Popover.Root> <Popover.Trigger>Open popover</Popover.Trigger> <Popover.Backdrop /> <Popover.Positioner> <Popover.Popup> <Popover.Title>Popover title</Popover.Title> <Popover.Description>Popover description</Popover.Description> <Popover.Close>Close</Popover.Close> <Popover.Arrow /> </Popover.Popup> </Popover.Positioner> </Popover.Root> );}Render the Popover data-sw-* contract yourself, then initialize createPopover.
<div data-sw-popover> <button data-sw-popover-trigger type="button" aria-haspopup="dialog">Open popover</button> <div data-sw-popover-backdrop hidden></div> <div data-sw-popover-positioner> <div data-sw-popover-popup role="dialog" tabindex="-1" hidden> <h2 data-sw-popover-title>Popover title</h2> <p data-sw-popover-description>Popover description</p> <button data-sw-popover-close type="button">Close</button> <div data-sw-popover-arrow></div> </div> </div></div>
<script type="module"> import { createPopover } from "@starwind-ui/runtime/popover";
const root = document.querySelector("[data-sw-popover]"); if (root) { createPopover(root); }</script>Floating Behavior
| Fact | Value |
|---|---|
| Anchor part | trigger |
| Positioner part | positioner |
| Popup part | popup |
| Portal part | portal |
| Option props | side, align, sideOffset, avoidCollisions |
API Reference
Root
The main element that owns the Popover Runtime instance.
- Default element
- div
- Discovery hook
- data-sw-popover
- Role
- -
Props
open boolean -
- Description
- Controls whether Popover is open.
- Kind
- control
- Targets
- root
- Full type
- boolean
defaultOpen boolean false
- Description
- Sets whether Popover starts open.
- Kind
- control
- Targets
- root
- Full type
- boolean
closeOnEscape boolean true
- Description
- Closes Popover when Escape is pressed.
- Kind
- option
- Targets
- -
- Full type
- boolean
closeOnOutsideInteract boolean true
- Description
- Closes Popover when the user interacts outside it.
- Kind
- option
- Targets
- -
- Full type
- boolean
modal boolean false
- Description
- Makes Popover behave as a modal overlay.
- Kind
- option
- Targets
- -
- Full type
- boolean
openOnHover boolean false
- Description
- Configures the open on hover option for the Root part.
- Kind
- option
- Targets
- -
- Full type
- boolean
closeDelay number 200
- Description
- Sets how long Popover waits before closing.
- Kind
- option
- Targets
- root
- Full type
- number
onCloseComplete (open: boolean, details: PopoverCloseCompleteDetails) => void -
- Description
- Runs after Popover has finished closing.
- Kind
- callback
- Targets
- -
- Full type
- (open: boolean, details: PopoverCloseCompleteDetails) => void
onOpenChange (open: boolean, details: PopoverOpenChangeDetails) => void -
- Description
- Runs when Popover opens or closes.
- Kind
- callback
- Targets
- -
- Full type
- (open: boolean, details: PopoverOpenChangeDetails) => void
Events
openChange onOpenChange open: boolean
- Description
- Fires when Popover opens or closes.
- DOM event
- starwind:open-change
- Details type
- PopoverOpenChangeDetails
- Timing
- before-state-commit
- Cancelable
- Yes
closeComplete onCloseComplete open: boolean
- Description
- Fires after Popover has finished closing.
- DOM event
- starwind:close-complete
- Details type
- PopoverCloseCompleteDetails
- Timing
- after-state-commit
- Cancelable
- No
State
open boolean open / defaultOpen
- Description
- Tracks whether Popover is open.
- Initial attribute
- data-default-open
- Runtime getter
- getOpen
- Runtime setter
- setOpen
- State control support
- React supports controlled and default state with open and defaultOpen props. Runtime/HTML reads initial state from data-default-open, emits starwind:open-change and starwind:close-complete, and updates with setOpen. Astro adapters render initial/default state, but do not expose reactive controlled-state props for this state.
Data Attributes
Runtime hooks
State
Metadata
Trigger
The control that opens, closes, or targets the Popover content.
- Default element
- button
- Discovery hook
- data-sw-popover-trigger
- Role
- -
Props
asChild boolean -
- Description
- Merges behavior onto your child element instead of rendering the default Trigger element.
- Kind
- rendering
- Targets
- trigger
- Full type
- boolean
Data Attributes
Runtime hooks
State
Metadata
Portal
Moves Popover overlay content to the document body when needed.
- Default element
- div
- Discovery hook
- data-sw-popover-portal
- Role
- -
Data Attributes
Runtime hooks
Positioner
Positions the Popover content relative to its trigger.
- Default element
- div
- Discovery hook
- data-sw-popover-positioner
- Role
- -
Props
side "top" | "right" | "bottom" | "left" "bottom"
- Description
- Sets the preferred side for Popover content.
- Kind
- option
- Targets
- positioner, popup
- Full type
- "top" | "right" | "bottom" | "left"
align "start" | "center" | "end" "center"
- Description
- Sets how Popover content aligns to its trigger.
- Kind
- option
- Targets
- positioner, popup
- Full type
- "start" | "center" | "end"
sideOffset number 4
- Description
- Sets the distance between Popover content and its trigger.
- Kind
- option
- Targets
- positioner, popup
- Full type
- number
avoidCollisions boolean true
- Description
- Allows Popover content to shift or flip to stay visible.
- Kind
- option
- Targets
- positioner, popup
- Full type
- boolean
Data Attributes
Runtime hooks
State
Metadata
Popup
The floating content container for Popover.
- Default element
- div
- Discovery hook
- data-sw-popover-popup
- Role
- dialog
Props
side "top" | "right" | "bottom" | "left" "bottom"
- Description
- Sets the preferred side for Popover content.
- Kind
- option
- Targets
- positioner, popup
- Full type
- "top" | "right" | "bottom" | "left"
align "start" | "center" | "end" "center"
- Description
- Sets how Popover content aligns to its trigger.
- Kind
- option
- Targets
- positioner, popup
- Full type
- "start" | "center" | "end"
sideOffset number 4
- Description
- Sets the distance between Popover content and its trigger.
- Kind
- option
- Targets
- positioner, popup
- Full type
- number
avoidCollisions boolean true
- Description
- Allows Popover content to shift or flip to stay visible.
- Kind
- option
- Targets
- positioner, popup
- Full type
- boolean
Data Attributes
Runtime hooks
State
Metadata
Arrow
The arrow element that visually points to the trigger.
- Default element
- div
- Discovery hook
- data-sw-popover-arrow
- Role
- -
Data Attributes
Runtime hooks
Backdrop
The backdrop shown behind the Popover overlay.
- Default element
- div
- Discovery hook
- data-sw-popover-backdrop
- Role
- -
Data Attributes
Runtime hooks
State
Title
The accessible title for Popover.
- Default element
- h2
- Discovery hook
- data-sw-popover-title
- Role
- -
Data Attributes
Runtime hooks
Description
Supporting description text for Popover.
- Default element
- p
- Discovery hook
- data-sw-popover-description
- Role
- -
Data Attributes
Runtime hooks
Close
A control that closes Popover.
- Default element
- button
- Discovery hook
- data-sw-popover-close
- Role
- -
Data Attributes
Runtime hooks
Viewport
The visible viewport for Popover content.
- Default element
- div
- Discovery hook
- data-sw-popover-viewport
- Role
- -
Data Attributes
Runtime hooks
Runtime API
- Factory
createPopover- Import
@starwind-ui/runtime/popover- Root hook
- root
data-sw-popover - Option props
- closeOnEscape, closeOnOutsideInteract, defaultOpen, modal, onCloseComplete, onOpenChange, open, openOnHover
Option Lifecycles
| Option | Lifecycle |
|---|---|
| closeOnEscape | constructor-only |
| closeOnOutsideInteract | constructor-only |
| defaultOpen | constructor-only |
| modal | constructor-only |
| onCloseComplete | constructor-only |
| onOpenChange | constructor-only |
| open | setter-backed |
| openOnHover | constructor-only |