Anchored floating panel on Radix Popover — free-form content near its trigger.
Anatomy
[ Filters ] ← trigger (asChild — pass a focusable element) ┌────────────────┐ │ panel (w-64, │ ← surface-bright, chip radius, │ children) │ raised shadow, z-raised └────────────────┘
Props
| Prop | Type | Default | Notes | |||
|---|---|---|---|---|---|---|
trigger | ReactNode | — | Rendered asChild — must be focusable. | |||
children | ReactNode | — | Panel content. | |||
align | "start" | "center" \ | "end"` | "start" | ||
side | "top" | "right" \ | "bottom" \ | "left"` | "bottom" | |
className | string | — | Merged onto the panel (e.g. w-80). |
Motion
Panel fades in via the animate-in fade-in-0 preset (150ms). No exit
animation — dismissal is instant by design (same as Menu).
A11y
Radix wiring: trigger gets aria-haspopup="dialog" + aria-expanded;
focus moves into the panel on open and returns to the trigger on close;
Escape dismisses. Don't put critical-path actions *only* inside a
popover — it's an enhancement surface.