feat(ui): back Button/Badge/Progress/Segmented with shadcn (prop APIs preserved) (#799)

Migrate four OmniVoice UI primitives onto shadcn/ui foundations while keeping
their exact legacy prop APIs, so no call site changes.

- Button: thin wrapper over src/components/ui/button.tsx. Extends the shadcn
  CVA with the OmniVoice variants (primary/subtle/softGhost/danger/chip[+Active]/
  preset[+Active]/iconBtn[+Active]) + sizes (omniSm/omniMd/chip/preset/iconSm/
  iconMd), styled via palette token utilities. Maps variant/size/iconSize/active/
  loading/leading/trailing/block/ref. Each variant sets an explicit border
  (transparent where needed) since the app ships Tailwind without Preflight.
- Badge: new src/components/ui/badge.tsx; CVA carries the tones (neutral/brand/
  success/warn/danger/info/violet) + xs/sm sizes. Wrapper maps tone->variant and
  keeps the ui-badge / ui-badge__dot hooks so the Header --pulse animation works.
- Progress: new src/components/ui/progress.tsx (on @radix-ui/react-progress) with
  indicatorClassName + indeterminate support. Wrapper keeps per-tone gradients,
  sizes, shimmer overlay, and the ui-progress / has-shimmer / is-indeterminate
  hooks (residual.css keyframes unchanged).
- Segmented: new toggle.tsx + toggle-group.tsx (adds @radix-ui/react-toggle). The
  `seg` toggle variant reproduces the segmented look; wrapper preserves the
  items/value/onChange/size API.

residual.css: drop the obsolete .ui-seg__opt:focus-visible rule (focus now falls
through to the global ring). Badge pulse + Progress shimmer/indeterminate rules
kept (still needed).

Visual baselines: Badge/Progress/Segmented render byte-identical to before;
only Button baselines updated (shadcn markup differs in padding/radius, palette-
coherent across default/midnight/catppuccin). All gates pass: oxlint, oxfmt, tsc,
vite build, vitest (641), test:visual (48), bun install --frozen-lockfile.

Co-authored-by: mergetest <test@local>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Palash Debnath
2026-06-30 21:31:49 +05:30
committed by GitHub
co-authored by mergetest Claude Opus 4.8
parent 836d69178c
commit 86b30ece98
15 changed files with 392 additions and 219 deletions
+1
View File
@@ -28,6 +28,7 @@
"@radix-ui/react-slider": "^1.4.1",
"@radix-ui/react-slot": "^1.3.0",
"@radix-ui/react-tabs": "^1.1.15",
"@radix-ui/react-toggle": "^1.1.12",
"@radix-ui/react-toggle-group": "^1.1.13",
"@radix-ui/react-tooltip": "^1.2.10",
"@tailwindcss/vite": "^4.3.1",