Component vault
Components move DISCOVERED → REVIEWING → APPROVED, and only verified licences can reach APPROVED. Quality is scored on eight dimensions — GitHub stars are deliberately not one of them.
APPROVED
12Button
actionInput
input- License
- first-party (yours)
- Source
- first-party
- Framework
- React 19 + Tailwind v4
- Dependencies
- none
- Code
- src/components/ui/input.tsx
- A11y
- Label association required, error via aria-invalid + aria-describedby, 44px height
- Motion
- none (focus ring instant)
| visual | 4/5 |
|---|---|
| accessibility | 5/5 |
| responsive | 5/5 |
| performance | 5/5 |
| dependencyWeight | 5/5 |
| customizability | 5/5 |
| documentation | 4/5 |
| licenseConfidence | 5/5 |
Border-width never changes between states; helper slot reserves 1lh to prevent shift.
Panel
layout- License
- first-party (yours)
- Source
- first-party
- Framework
- React 19 + Tailwind v4
- Dependencies
- none
- Code
- src/components/ui/panel.tsx
- A11y
- Semantic section + labelled heading; never nests inside another panel
- Motion
- none
| visual | 5/5 |
|---|---|
| accessibility | 5/5 |
| responsive | 5/5 |
| performance | 5/5 |
| dependencyWeight | 5/5 |
| customizability | 4/5 |
| documentation | 4/5 |
| licenseConfidence | 5/5 |
The anti-card: one surface level, hairline border, no shadow.
Stat Tile
data- License
- first-party (yours)
- Source
- first-party
- Framework
- React 19 + Tailwind v4
- Dependencies
- none
- Code
- src/components/ui/stat-tile.tsx
- A11y
- Value + label association; trend has text, not color alone
- Motion
- count-up once (optional, reduced-motion safe)
| visual | 5/5 |
|---|---|
| accessibility | 5/5 |
| responsive | 5/5 |
| performance | 5/5 |
| dependencyWeight | 5/5 |
| customizability | 4/5 |
| documentation | 4/5 |
| licenseConfidence | 5/5 |
Renders an explicit '— metric to confirm' state instead of fabricating numbers.
Status Badge
display- License
- first-party (yours)
- Source
- first-party
- Framework
- React 19 + Tailwind v4
- Dependencies
- none
- Code
- src/components/ui/status-badge.tsx
- A11y
- Never color-only: every badge carries a text label (and optional shape)
- Motion
- status-pulse for live states only
| visual | 5/5 |
|---|---|
| accessibility | 5/5 |
| responsive | 5/5 |
| performance | 5/5 |
| dependencyWeight | 5/5 |
| customizability | 5/5 |
| documentation | 4/5 |
| licenseConfidence | 5/5 |
Data Table
data- License
- first-party (yours)
- Source
- first-party
- Framework
- React 19 + Tailwind v4
- Dependencies
- none
- Code
- src/components/ui/data-table.tsx
- A11y
- Real <table> semantics, scope on headers, caption support, row focus
- Motion
- hover-reveal-actions
| visual | 5/5 |
|---|---|
| accessibility | 5/5 |
| responsive | 4/5 |
| performance | 4/5 |
| dependencyWeight | 5/5 |
| customizability | 4/5 |
| documentation | 4/5 |
| licenseConfidence | 5/5 |
Overflow container scrolls; page body never does.
Command Palette
overlay- License
- first-party (yours) — pattern studied from Raycast
- Source
- first-party
- Framework
- React 19 + Tailwind v4
- Dependencies
- none
- Code
- src/components/command-palette.tsx
- A11y
- role=dialog + aria-modal, listbox semantics, focus trap, Esc closes, arrow navigation
- Motion
- instant filter, ≤150ms panel fade
| visual | 5/5 |
|---|---|
| accessibility | 5/5 |
| responsive | 4/5 |
| performance | 5/5 |
| dependencyWeight | 5/5 |
| customizability | 4/5 |
| documentation | 4/5 |
| licenseConfidence | 5/5 |
Written first-party rather than adopting cmdk, so the dependency stays at zero.
Empty State
feedback- License
- first-party (yours)
- Source
- first-party
- Framework
- React 19 + Tailwind v4
- Dependencies
- none
- Code
- src/components/ui/empty-state.tsx
- A11y
- Heading + explanation + one primary action; no decorative-only illustration
- Motion
- none
| visual | 4/5 |
|---|---|
| accessibility | 5/5 |
| responsive | 5/5 |
| performance | 5/5 |
| dependencyWeight | 5/5 |
| customizability | 5/5 |
| documentation | 4/5 |
| licenseConfidence | 5/5 |
Field Row
input- License
- first-party (yours)
- Source
- first-party
- Framework
- React 19 + Tailwind v4
- Dependencies
- none
- Code
- src/components/ui/field-row.tsx
- A11y
- Label + description + error wired via ids; error announced politely
- Motion
- none
| visual | 4/5 |
|---|---|
| accessibility | 5/5 |
| responsive | 5/5 |
| performance | 5/5 |
| dependencyWeight | 5/5 |
| customizability | 5/5 |
| documentation | 4/5 |
| licenseConfidence | 5/5 |
Tabs
navigation- License
- first-party (yours)
- Source
- first-party
- Framework
- React 19 + Tailwind v4
- Dependencies
- none
- Code
- src/components/ui/tabs.tsx
- A11y
- role=tablist/tab/tabpanel, roving tabindex, arrow keys, no scroll-jump
- Motion
- none (instant panel swap)
| visual | 4/5 |
|---|---|
| accessibility | 5/5 |
| responsive | 5/5 |
| performance | 5/5 |
| dependencyWeight | 5/5 |
| customizability | 4/5 |
| documentation | 4/5 |
| licenseConfidence | 5/5 |
shadcn Dialog (Radix)
overlay- License
- MIT
- Source
- shadcn/ui (VERIFIED_OPEN_SOURCE)
- Framework
- React + Radix + Tailwind
- Dependencies
- @radix-ui/react-dialog
- A11y
- Radix handles focus trap, aria-modal, Esc, scroll lock
- Motion
- fade + 2% scale, reduced-motion safe when configured
| visual | 4/5 |
|---|---|
| accessibility | 5/5 |
| responsive | 5/5 |
| performance | 4/5 |
| dependencyWeight | 3/5 |
| customizability | 5/5 |
| documentation | 5/5 |
| licenseConfidence | 5/5 |
Approved for projects that already carry Radix; Forge itself stays dependency-free.
shadcn Select (Radix)
input- License
- MIT
- Source
- shadcn/ui (VERIFIED_OPEN_SOURCE)
- Framework
- React + Radix + Tailwind
- Dependencies
- @radix-ui/react-select
- A11y
- Full listbox semantics + typeahead from Radix
- Motion
- content fade
| visual | 4/5 |
|---|---|
| accessibility | 5/5 |
| responsive | 4/5 |
| performance | 4/5 |
| dependencyWeight | 3/5 |
| customizability | 5/5 |
| documentation | 5/5 |
| licenseConfidence | 5/5 |
Prefer native <select> on UTILITARIAN contracts.
REVIEWING
121st.dev hero blocks (various)
layout- License
- per-author — verify individually
- Source
- 21st.dev (REFERENCE_ONLY)
- Framework
- React + Tailwind
- Dependencies
- varies
- A11y
- unverified per component
- Motion
- varies (often violates house motion rules)
| visual | 4/5 |
|---|---|
| accessibility | 2/5 |
| responsive | 3/5 |
| performance | 3/5 |
| dependencyWeight | 2/5 |
| customizability | 4/5 |
| documentation | 3/5 |
| licenseConfidence | 2/5 |
Discovery source only. Each candidate needs its author license checked before APPROVED.
DISCOVERED
1FeralUI physics elements
display- License
- not stated
- Source
- FeralUI (LICENSE_UNCLEAR)
- Framework
- React
- Dependencies
- unknown
- A11y
- unverified
- Motion
- physics-driven (expressive)
| visual | 4/5 |
|---|---|
| accessibility | 2/5 |
| responsive | 2/5 |
| performance | 2/5 |
| dependencyWeight | 2/5 |
| customizability | 3/5 |
| documentation | 2/5 |
| licenseConfidence | 1/5 |
LICENSE_UNCLEAR → cannot be approved. Study only for PLAYFUL motion voice.
REJECTED
1complete-shelf 3D book viewer
media- License
- none found
- Source
- complete-shelf (MengTo) (REFERENCE_ONLY)
- Framework
- Three.js
- Dependencies
- three
- A11y
- HTML controls layered over WebGL (good pattern)
- Motion
- deterministic camera transitions
| visual | 5/5 |
|---|---|
| accessibility | 4/5 |
| responsive | 4/5 |
| performance | 3/5 |
| dependencyWeight | 2/5 |
| customizability | 3/5 |
| documentation | 3/5 |
| licenseConfidence | 1/5 |
REJECTED for reuse — no LICENSE file means all rights reserved. Kept as a reference study.