Crucible

Buoy

Floating action button that springs open an arc of glass bubble actions — buoyant overshoot with a bottom-up stagger, asynchronous idle bob, liquid squash on toggle, and a single coral accent on the active bubble. Full menu-button keyboard support with Escape to close.

motionfree

Installation

CLI

npx shadcn@latest add @crucible/buoy

Manual — install dependencies, then copy the source

npm install motion

Props

PropTypeDefaultDescription
itemsBuoyItem[]a sample set of fourAction bubbles, in arc order.
openbooleanControlled open state.
defaultOpenbooleanfalseInitial open state when uncontrolled.
onOpenChange(open: boolean) => voidFires whenever the menu opens or closes, controlled or not.
radiusnumber92Distance from the button center to each bubble center, in px.
arc[number, number][150, 30] (fanned overhead)Arc the bubbles fan across, as [fromDeg, toDeg] — 0° points right, 90° straight up.
accentColorstring"#ff8a73" (coral)Accent fill for the hovered/focused bubble — the set's single warm note.
labelstring"Quick actions"Accessible name for the toggle button and menu.
Also accepts all props of Omit<React.ComponentPropsWithoutRef<"div">, "onClick">they pass through to the underlying element.

Honors prefers-reduced-motion with a designed static fallback, and passes className through.