ClipSpacesClipSpaces Docs
Back to app

All releases

Unreleased (branch `refactor/shadcn-design-system`) — internal

Fixed

  • Dark mode is properly dark. The dark theme now sits on a near-black #090909 app background with a coherent surface ramp (surface #161616, elevated #202020); the shadcn --sd-* bridge channels were updated to match, so every primitive follows.
  • No more white focus outline on the Settings modal & menus. Portalled Radix content (Dialog / DropdownMenu / Select / ContextMenu / Sheet) now sets focus:outline-none, removing the browser's default focus ring that rendered white under color-scheme: dark. The Settings modal additionally skips auto-focusing its first nav tab on open (onOpenAutoFocus prevented), since Chrome painted that button's white :focus-visible outline as a stray ring around the modal; the nav tabs now carry a themed focus-visible:ring for keyboard users.
  • Token-usage meter no longer flashes blank. While /api/ai/usage loads, the meter shows a shaped Skeleton (new components/ui/skeleton.tsx) that mirrors its final layout.
  • Tips & shortcuts popover no longer has empty-state onboarding annotations bleeding through it — the canvas controls cluster now stacks above the onboarding overlay.
  • Clip AI model switcher shows a "Loading model…" chip while credentials resolve (was a blank slot), and no longer offers models you can't run: on the shared host key it lists only the funded base model (paid presets would 402); with your own key it lists that provider's presets.

Changed

  • Design-system migration, Phase 2 (chrome), auth surfaces: the sign-in form (EmailOtpForm) now uses shadcn Input + Button (Google/outline, Send/Verify/primary); AuthButton's sign-in pill and sign-out use Button; ThemeToggle is a Button icon. Bespoke bits (the avatar chip, the anchored sign-in popover tied to the sign-in-prompt context) are unchanged.
  • AI chat redesigned on the shadcn message look. Assistant replies now sit in a left-aligned bg-muted bubble (briefing badge + Thoughts ride above it, token/action meta inside); the user's turns are a right-aligned bg-primary bubble in primary-foreground. Both chat surfaces (the compact popover and the full-screen agent view) share the treatment. The send buttons (the labelled "Send ⌘↵" and the round ↑) move to shadcn primary tokens with a clean muted disabled state. The agent-run walkthrough (meta lines + live board mini-view) keeps its distinct style.
  • Design-system migration, Phase 4 (Phosphor → Lucide): replaced @phosphor-icons/react with Lucide across the whole app and removed the dependency. 108 distinct icons over 39 files swapped via a collision-aware codemod (curated name map — GearSixSettings, MagnifyingGlassSearch, TrashTrash2, CircleNotchLoaderCircle, ArrowSquareOutExternalLink, …; every Phosphor weight prop dropped; only aliasing where a Lucide name would collide with next/link/next/image). Lucide ships no brand marks, so the ~9 *Logo glyphs now come from the new local components/BrandIcons.tsx (official simple-icons art via icones.js.org, offline). Bespoke canvas artwork (ToolIcons, ShapeGlyph) untouched. tsc + pnpm build green.
  • Design-system migration, Phase 5 (settings surfaces): swept the remaining inline style={{…}} in SettingsModal, AIModelsSection, and ConnectorsSection over to Tailwind utility classes (helpers Heading/Row/GroupLabel/AccentPicker/DangerZone, and the AIModelsSection / ConnectorsSection presentational shells). Only genuinely data-driven styles (dynamic swatch/bar/ icon colors, per-item active borders) stay inline; app CSS vars with no shadcn bridge token use arbitrary values (text-[var(--text-2)]) so the look is byte-identical. Typecheck + build green.
  • Design-system migration, Phase 3c–3d (Settings on shadcn primitives): the Plans tab is now Card + Badge + Button; Privacy uses a Button link. The Clip AI model editor (AIModelsSection) runs on Input/Label/Select/Switch/ToggleGroup with Button actions, and Connectors connect/disconnect/export/expander controls + the "Soon" badge are now Button/Badge. Leaf-level swaps only — all controlled state and APIs are unchanged (the react-hook-form rewrite was deliberately deferred as higher-risk). Typecheck + build green. See docs/SHADCN_MIGRATION.md.