Wave
Markup where the component goes, CSS in your stylesheet. No JavaScript.
Paste into Claude, ChatGPT or Cursor after filling in {{USER_STACK}}, {{USER_STYLING}} and {{USER_CONSTRAINTS}}. Neutral keeps the greys you see here; Match my project asks the model to map them onto your own colour tokens.
Install with shadcn
Needs a free account token. Get a token
npx shadcn@latest add @movin/checkbox-waveAbout this component
Ticking sends a ripple along the label: each letter hops and brightens a beat after the one before it, as if the tick's landing ran through the words.
- Dependencies
- None
- Difficulty
- Beginner
- Reduced motion
- Respected
- Theme
- Light and dark
- Follows page color-scheme
Triggers3
- Click
- State change
- Delay stagger
Techniques6
- Text animation
- Keyframes
- Stagger
- CSS variables
- SVG
- stroke-dashoffset
Accessibility
Keyboard and screen readers
A native checkbox inside a <label>, so Space toggles it and the label names it; the split letters are aria-hidden and a visually hidden copy of the label carries the name. :focus-visible on the input outlines the box.
Reduced motion
The letters only brighten.
Use it in anything you build, commercial and client work included. Licence