Measured entry
ruixen-invert-tabs
tabsunclassifiedmotion on file
A client-side pill tab selector distributed as a shadcn registry component. It embeds its own theme styles, animates the active marker with motion, measures buttons with ResizeObserver, and can play a Web Audio tick. It depends on React, browser APIs, and the motion package, with no provider or shared utility required.



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 | flagged at 375 |
| Axe critical | 0 |
| Axe serious | 1 |
| Axe moderate | 0 |
| Axe minor | 0 |
| Gzip marginal | 59.7 KB (125.1 KB build, 65.4 KB baseline) |
| Bare mode | OK |
| Provider required | NO |
| Demo used | written from the component source API |
Verdict
A polished interaction for roomy filter bars, and it builds and mounts without framework scaffolding. Do not ship it unchanged: the default set overflows on narrow screens, the muted labels fail contrast checks, and the markup lacks full tab semantics.
Use it if
- You need a compact filter or view switcher with a spring-animated active pill.
- Your labels fit on one line at the narrowest supported viewport.
- You can audit the theme colors and adjust them to meet your contrast requirements.
- Optional click audio suits the product, or you are comfortable disabling it through the sound prop.
Skip it if
- The control must wrap or adapt cleanly on narrow screens without custom layout work.
- You need passing text contrast from the component as shipped.
- You need a complete accessible tab pattern with tab roles, panel relationships, and arrow-key navigation.
- Adding the motion dependency is not justified for a small view selector.
Install
| Declared dependencies | motion |
|---|---|
| Missing on install | none |
| Bare install | builds and mounts without the shadcn-style helpers |
| Provider | no provider required in the harness |
In a non-shadcn project, copy the client component into your component directory and install motion. Ensure React renders it in the browser so ResizeObserver and Web Audio are available. No provider or shared utility layer is needed; add responsive containment, accessible semantics, and corrected theme colors in your app.
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 tabs pattern, ordered by what they measured: mounts first, then clean axe scans, then bare-mode passes, then the smaller bundle.
- tripled-native-tabs-carbonminimal-flat
- Renders
- YES
- A11y
- 0
- Gzip
- 69.9KB
- Bare
- pass
- Prov
- NO
- shadcn-tabsunclassified
- Renders
- YES
- A11y
- 0
- Gzip
- 22.4KB
- Bare
- fail
- Prov
- NO
- neobrutalism-paginationbrutalism
- Renders
- YES
- A11y
- 0
- Gzip
- 28.0KB
- Bare
- fail
- Prov
- NO
- shadcn-paginationunclassified
- Renders
- YES
- A11y
- 0
- Gzip
- 28.1KB
- Bare
- fail
- Prov
- NO
- originui-comp-109minimal-flat
- Renders
- YES
- A11y
- 0
- Gzip
- 35.1KB
- Bare
- fail
- Prov
- NO
- originui-comp-110minimal-flat
- Renders
- YES
- A11y
- 0
- Gzip
- 35.1KB
- Bare
- fail
- Prov
- NO