Popover
Popover composes Base UI’s popover primitives for compact floating panels tied to a consumer-owned trigger element.
import { Button, Popover, Skeleton } from "density-base-ui";
export default function PopoverExample() {
return (
<Popover
trigger={
<Button type="button" emphasis="primary">
Show metrics
</Button>
}
title="Sprint health"
subtitle="Velocity is steady and review time is down 18% this week."
closeLabel="Close"
dismissable
>
<Skeleton style={{ height: "5rem", width: "100%" }} />
</Popover>
);
}Dismiss control
Set dismissable to add a Close control alongside a text Close action when one is provided.
import { Button, Popover, Skeleton } from "density-base-ui";
export default function PopoverDismissableExample() {
return (
<Popover
dismissable
trigger={<Button>Show metrics</Button>}
title="Sprint health"
>
<Skeleton style={{ height: "3rem", width: "12rem" }} />
</Popover>
);
}Size
import { Button, Popover, Skeleton, View } from "density-base-ui";
export default function PopoverSizeExample() {
return (
<View gap="md" orientation="horizontal" padding={false} wrap>
<Popover
size="2xs"
trigger={<Button type="button">2xs</Button>}
title="2xs popover"
subtitle="Compact overlay content."
>
<Skeleton />
</Popover>
<Popover
size="xs"
trigger={<Button type="button">xs</Button>}
title="xs popover"
subtitle="Compact overlay content."
>
<Skeleton />
</Popover>
<Popover
size="sm"
trigger={<Button type="button">sm</Button>}
title="sm popover"
subtitle="Compact overlay content."
>
<Skeleton />
</Popover>
<Popover
size="md"
trigger={<Button type="button">md</Button>}
title="md popover"
subtitle="Compact overlay content."
>
<Skeleton />
</Popover>
<Popover
size="lg"
trigger={<Button type="button">lg</Button>}
title="lg popover"
subtitle="Compact overlay content."
>
<Skeleton />
</Popover>
<Popover
size="xl"
trigger={<Button type="button">xl</Button>}
title="xl popover"
subtitle="Compact overlay content."
>
<Skeleton />
</Popover>
<Popover
size="2xl"
trigger={<Button type="button">2xl</Button>}
title="2xl popover"
subtitle="Compact overlay content."
>
<Skeleton />
</Popover>
<Popover
size="3xl"
trigger={<Button type="button">3xl</Button>}
title="3xl popover"
subtitle="Compact overlay content."
>
<Skeleton />
</Popover>
</View>
);
}Padding
import { Button, Popover, Skeleton, View } from "density-base-ui";
export default function PopoverPaddingExample() {
return (
<View gap="md" orientation="horizontal" padding={false} wrap>
<Popover padding={false} trigger={<Button type="button">None</Button>}>
<Skeleton />
</Popover>
<Popover
trigger={<Button type="button">Padding enabled</Button>}
title="Padding enabled"
subtitle="Popover content with padding."
>
<Skeleton />
</Popover>
</View>
);
}| Prop | Values | Required | Default | Behavior | Description |
|---|---|---|---|---|---|
children | (React.ReactNode | import("@base-ui/react/utils/popups/popupStoreUtils").PayloadChildRenderFunction<unknown>) & React.ReactNode | Not required | — | — | The content of the popover. This can be a regular React node or a render function that receives the `payload` of the active trigger. |
closeLabel | React.ReactNode | Not required | — | — | — |
dismissable | false, true | Not required | false | — | — |
padding | false, true | Not required | true | Attribute: data-dn-padding | — |
size | 2xs, xs, sm, md, lg, xl, 2xl, 3xl | Not required | — | Attribute: data-dn-size | — |
subtitle | React.ReactNode | Not required | — | — | — |
title | React.ReactNode | Not required | — | — | — |
trigger | React.ReactElement<unknown, string | React.JSXElementConstructor<any>> | Required | — | — | — |
This component also accepts props from native APIs. They are passed through and intentionally kept out of this focused Density API table.