KQ-577 · TAP/RIPPLE

Tap Ripple

A press ripple that starts where the press did. On pointerdown a disc is placed under the finger and expands on a tween over durations.slow — a spreading front, not a landing, so it never springs — sized from the press point to the furthest corner so it always covers the surface, and it fades on the exit ease when the press is let go. Enter and Space ripple from the centre because a keyboard press has no point to start from, and the wrapper clones the button rather than boxing it, so role, label, disabled state and handlers are exactly what the caller wrote.

KQ-577 · TAP/RIPPLE

Pressed None

Install

One command — the source lands in your repo. Or copy it from the Code tab.

$ pnpm dlx shadcn@latest add @kinetiq/tap-ripple

Props

color
string
default
Ripple colour, used at full strength. Left out, the disc is currentColor at 16%.
duration
number
default 400
Expansion in milliseconds; the fade on release runs on the base tween regardless.
children
React.ReactElement
default
The button. It is cloned, not wrapped: it keeps its own classes, handlers and semantics.