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.

Specimen
Motion capture of the mounted demo, recorded by the harness. No audio track.
Harness screenshot of ruixen-invert-tabs at 375 pixels wide
Harness screenshot at 375 pixels wide. This viewport scrolled sideways.
Harness screenshot of ruixen-invert-tabs at 768 pixels wide
Harness screenshot at 768 pixels wide. No horizontal overflow recorded.
Harness screenshot of ruixen-invert-tabs at 1440 pixels wide
Harness screenshot at 1440 pixels wide. No horizontal overflow recorded.

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.

Harness measurements recorded for ruixen-invert-tabs
BuildOK
MountOK
Console errors0
Uncaught page errors0
Horizontal overflowflagged at 375
Axe critical0
Axe serious1
Axe moderate0
Axe minor0
Gzip marginal59.7 KB (125.1 KB build, 65.4 KB baseline)
Bare modeOK
Provider requiredNO
Demo usedwritten 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

Installation record for ruixen-invert-tabs
Declared dependenciesmotion
Missing on installnone
Bare installbuilds and mounts without the shadcn-style helpers
Providerno 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.

Alternatives

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.