Popover
Floating content anchored to a trigger — inline settings, pickers and forms. Because it carries real content it earns a larger, slower arrival than a tooltip: scale 0.96 to 1 with opacity over 443ms on the panel spring, plus an 8px slide out of the trigger's edge. No blur — at this size the scale alone is enough of a materialise cue. It leaves toward 0.98 in 160ms.
import { Popover, PopoverTrigger, PopoverContent, PopoverHeader, PopoverTitle, PopoverDescription } from "@pestoui/core"Run settings
Origin-aware unfold
side and align together pick the corner the panel unfolds from. The transform-origin is derived from where the panel actually landed relative to its trigger, not declared as a fixed corner in CSS — open each of the six and the growth starts next to the button every time. That measurement is the whole point: when a panel has to flip or shift to stay on screen, a hardcoded origin would suddenly be on the wrong side and the panel would appear to unfold away from the control that opened it.
Panel spring vs press spring
Two springs, two jobs. Press and hold the left button: the press spring compresses it to 0.97 and back in 170ms with 0.4% overshoot — small enough to be felt under the finger rather than watched. The panel uses the panel spring instead: 443ms, firmly overdamped, zero overshoot. Bounce scales with area, so the wobble that gives a 40px control some life reads as cheap on a 288px surface, and it costs a second settle the reader has to wait out before the content is still enough to read. Note the second button does not compress at all: a trigger that scaled would drag the panel anchored to it, so the press scale is suppressed on any control that owns an overlay.
Props
Pesto UI · 117 documented components