Popover
Popover shows rich contextual content attached to a trigger.
@duskmoon-dev/components/popover Usage
When to use
- Use it when supporting content should stay attached to a trigger or task context.
- Prefer controlled open state when the surrounding workflow needs to react to dismissal.
Implementation notes
Features
Documents trigger, placement, and open-state patterns for content rendered above the page.
Highlights controlled state and close callbacks where overlays expose them.
Popover is most often configured through `title`, `content`, `placement`, `trigger`.
Renders title/content when hover opens and closes
Feature Demos
Feature demos are authored for the component page, then supplemented with behavior scenarios from the component test coverage.
Basic usage
Import the component stylesheet and Popover from its package subpath, then render it with the core props.
import "@duskmoon-dev/components/styles.css";
import { Popover } from "@duskmoon-dev/components/popover";
export function Example() {
return (<Popover
title="DuskMoon"
content="Popover content"
placement="bottom"
open
>
Hover target
</Popover>);
} Renders title/content when hover opens and closes
test-backedPopover scenario from the component test coverage: renders title/content when hover opens and closes.
import "@duskmoon-dev/components/styles.css";
import { Popover } from "@duskmoon-dev/components/popover";
export function PopoverRendersTitleContentWhenDemo() {
return (<Popover
title="DuskMoon"
content="Popover content"
placement="bottom"
open
>
Hover target
</Popover>);
} Supports destroy-on-hide behavior
test-backedPopover scenario from the component test coverage: supports destroy-on-hide behavior.
import "@duskmoon-dev/components/styles.css";
import { Popover } from "@duskmoon-dev/components/popover";
export function PopoverSupportsDestroyOnHideDemo() {
return (<Popover
title="DuskMoon"
content="Popover content"
placement="bottom"
open
>
Hover target
</Popover>);
} Supports controlled open state
test-backedPopover scenario from the component test coverage: supports controlled open state.
import "@duskmoon-dev/components/styles.css";
import { Popover } from "@duskmoon-dev/components/popover";
export function PopoverSupportsControlledOpenStateDemo() {
return (<Popover
title="DuskMoon"
content="Popover content"
placement="bottom"
open
>
Hover target
</Popover>);
} Theme aware
Docs previews inherit the DuskMoon data-theme value. Use the header switch to compare light and dark rendering.
<div data-theme="sunshine">
<Popover
title="DuskMoon"
content="Popover content"
placement="bottom"
open
>
Hover target
</Popover>
</div>
<div data-theme="moonlight">
<Popover
title="DuskMoon"
content="Popover content"
placement="bottom"
open
>
Hover target
</Popover>
</div> API
The API reference below lists every parsed exported type or interface for Popover. Start with `title`, `content`, `placement`, `trigger` for common usage.
packages/components/src/components/popover/Popover.types.ts
Scenarios: packages/components/src/components/popover/Popover.test.tsx | Prop | Type | Required | Description |
|---|---|---|---|
title | ReactNode | No | title configures Popover. |
content | ReactNode | No | content configures Popover. |
placement | PopoverPlacement | No | placement configures Popover. |
trigger | PopoverTrigger | No | trigger configures Popover. |
open | boolean | No | open configures Popover. |
defaultOpen | boolean | No | defaultOpen configures Popover. |
arrow | boolean | No | arrow configures Popover. |
destroyTooltipOnHide | boolean | No | destroyTooltipOnHide configures Popover. |
onOpenChange | (open: boolean) => void | No | onOpenChange configures Popover. |
children | ReactNode | Yes | children configures Popover. |
"top" | "bottom" | "left" | "right" "hover" | "focus" | "click" | "contextmenu"