feat(web/ui5+ui7): migrate 12 components to @bytelyst/ui primitives
Finishes UI5 and kicks off UI7 by migrating the remaining form-heavy
components plus the note-detail right-rail panels. Drops legacy class
matches from 92 → 67 (-25) and raw interactive controls from 38 → 25
(-13). Ratchet baseline updated to the new floor.
Components migrated:
UI5 finish:
- NoteEditor.tsx — surface-card wrapper → Card, title input → Input,
Tiptap editor className updated to use border + bg classes instead
of input-shell. Toolbar buttons left as raw (intentional, tightly
styled icon controls).
- SmartActionsPanel.tsx — result panel surface-muted → Tailwind
bg-[var(--nl-surface-muted)] utility.
- ArtifactPanel.tsx — section→Card, badge→Badge, all three input-shell
inputs/selects/textareas→Input/Select/Textarea, surface-muted form
shell + per-artifact row → Tailwind bg-utility, raw <button> Open
→ Button.
- CommandPalette.tsx — surface-card command sheet → Tailwind layered
classes, search input → Input (now ref-forwarded), kind badge → Badge.
UI7 component pass:
- MetadataPanel.tsx — section→Card, tag badge→Badge.
- LinkedNotesPanel.tsx — section→Card, surface-muted link row →
Tailwind bg-utility with hover state.
- PalaceStats.tsx — section→Card, inline styles → Tailwind utilities.
- ExtractedTasksPanel.tsx — surface-muted row → Tailwind.
- NoteVersionsPanel.tsx — all three section/surface-card variants →
Card + raw button → preserved (interactive disclosure).
- Pagination.tsx — raw <button> Previous/Next → Button, surface-muted
→ built-in secondary variant.
- TaskReviewPanel.tsx — full migration: section→Card, badge→Badge,
input-shell + textarea + raw button → Input/Textarea/Button.
- SurveyBanner.tsx — survey answer input-shell → Input.
Adapter changes:
- web/src/components/ui/Primitives.tsx — Input and Textarea now use
React.forwardRef so callers like CommandPalette can attach refs.
Verified:
- pnpm --filter @notelett/web run typecheck: passes
- pnpm --filter @notelett/web test: 96/96 still pass
- pnpm run audit:ui:ratchet: at new baseline (25/67/0/0)
- pnpm run audit:ui: legacy class matches now in dashboard / search /
workspaces / notes-detail / palace / chat pages (UI6/UI7 page targets)