Rubbing
Markup where the component goes, CSS in your stylesheet, script before </body>. In Vue, Svelte or Angular, call initCbRubbing(el) on the mounted element instead.
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-rubbingAbout this component
Paper laid over a raised tick: rub across it with your pointer and graphite builds up until the tick shows through, like a coin rubbing. Once enough is rubbed the box is checked; a click or Space does the whole rub for you.
- Dependencies
- None
- Difficulty
- Advanced
- Reduced motion
- Respected
- Theme
- Light and dark
- Follows page color-scheme
Triggers3
- Click
- State change
- Mouse tracking
Techniques4
- SVG
- Event position
- Mouse tracking
- CSS transition
Accessibility
Keyboard and screen readers
A native checkbox inside a <label>, so Space toggles it and the visible label names it, and rubbing is only an extra way in; :focus-visible on the input outlines the paper.
Reduced motion
The sweep is instant.
Use it in anything you build, commercial and client work included. Licence