Measured entry
ruixen-checkbox-indeterminate
checkboxunclassifiedmotion on file
A client-side React checkbox for checked, unchecked, and mixed states, with animated check and minus marks plus controlled or uncontrolled state. It ships as a shadcn registry TSX file styled with Tailwind utilities and depends on Motion, React, and a local cn class-merging helper.



Measured
Every value below was written by the harness on the run that produced the frames above. None of it is derived from the prose.
| Build | OK |
|---|---|
| Mount | OK |
| Console errors | 0 |
| Uncaught page errors | 0 |
| Horizontal overflow | clean at 375, 768, 1440 |
| Axe critical | 0 |
| Axe serious | 0 |
| Axe moderate | 0 |
| Axe minor | 0 |
| Gzip marginal | 71.9 KB (137.4 KB build, 65.5 KB baseline) |
| Bare mode | FAIL |
| Provider required | NO |
| Demo used | written from the component source API |
What the harness recorded
BARE BUILD
✗ Build failed in 737ms error during build: [vite:load-fallback] Could not load <sandbox>re-3fe3cefb7c98/src/lib/utils (imported by src/cut/components/ruixen/checkbox-indeterminate.tsx): ENOENT: no such file or directory, open '<sandbox>re-3fe3cefb7c98/src/lib/utils'
Verdict
A focused, accessible choice for hierarchical selection, with clean controlled-state support and restrained animation. It needs a shadcn-style setup and brings meaningful Motion overhead, so it fits best where that stack is already present.
Use it if
- You need a select-all control that visibly represents a partially selected child set.
- Your app already uses Tailwind, a shadcn-style cn helper, and Motion.
- You want one component that supports controlled state, uncontrolled state, labels, and disabled behavior.
Skip it if
- You only need a standard binary checkbox and do not want an animation dependency.
- Your design system avoids Tailwind utility classes or repository path aliases.
- You need a headless primitive with no bundled visual treatment.
- You require mixed state to follow custom click semantics instead of changing directly to checked.
Install
| Declared dependencies | motion, clsx, tailwind-merge |
|---|---|
| Missing on install | none |
| Bare install | fails once the shadcn-style helpers are removed, so it needs that setup |
| Provider | no provider required in the harness |
In a non-shadcn project, add Tailwind processing, configure the source path alias, create a cn helper backed by clsx and tailwind-merge, install Motion, and ensure the file is compiled as a client-side React component.
Source and credit
This page is a review, not a copy. The component source lives with its author and this site does not republish it. Read the license before you use anything.
Author repository
github.com/ruixenui/ruixen.comAlternatives
Other published entries for the checkbox pattern, ordered by what they measured: mounts first, then clean axe scans, then bare-mode passes, then the smaller bundle.
- neu-checkboxneumorphism
- Renders
- YES
- A11y
- 0
- Gzip
- 17.9KB
- Bare
- pass
- Prov
- NO
- clay-checkboxclaymorphism
- Renders
- YES
- A11y
- 0
- Gzip
- 18.2KB
- Bare
- pass
- Prov
- NO
- shadcn-checkboxunclassified
- Renders
- YES
- A11y
- 0
- Gzip
- 18.4KB
- Bare
- fail
- Prov
- NO
- originui-comp-132minimal-flat
- Renders
- YES
- A11y
- 0
- Gzip
- 32.5KB
- Bare
- fail
- Prov
- NO
- originui-comp-135minimal-flat
- Renders
- YES
- A11y
- 0
- Gzip
- 32.5KB
- Bare
- fail
- Prov
- NO
- originui-comp-140minimal-flat
- Renders
- YES
- A11y
- 0
- Gzip
- 32.5KB
- Bare
- fail
- Prov
- NO