refactor(desktop): migrate experimental settings onto the design system

Merged
CH
9d ago
+15-6

D32 of the design-system migration (Desktop stack, base feature/desktop-d30-plan-template-editor, #3409; D31 has no PR, it is covered by D82).

What

Settings › Experimental (apps/desktop/src/renderer/settings/experimental-page.tsx) moves onto @luke/ui:

  • Each experiment's card is SettingsSection, replacing the desktop's SettingsGroup.
  • The signed-out note is the caption Text in the subtle tone, replacing a .settings-note paragraph.

These parts were already on the design system and are unchanged:

  • the switch rows (SwitchRow over SettingsRow/Switch)
  • Video calls' Avatar row (the shared schema rows from F40)
  • the empty state (EmptyState)

Send feedback stays an inline press among the row's description words. The barrel has no inline-link button, and a quiet Button there would be a redesign. Its .settings-detail-act rule is shared with Coding agents' Fast access link.

No caller here imported @luke/ui/compat. No selector became unused: SettingsGroup, .settings-card and .settings-note still have other callers.

Visible changes

None. At 1280×840 the before and after captures match pixel for pixel in both themes, for the populated page and the signed-out note.

Tests

  • experimental-page.test.ts keeps all six behaviour tests: the switch writes, Send feedback per experiment, the empty state, the signed-out note, and Video calls' avatar showing and hiding. The one change is in "Video calls off": it counted cards by the retired .settings-card class and now counts the cards' sections.
  • pnpm check:affected exits 0.

Evidence

Captured on Linux with headless Chrome at 1280×840, using #3405's method. A throwaway, uncommitted test rendered the real ExperimentalPage inside SettingsPage, with Video calls and Factory on. That markup was framed with the built desktop stylesheet.

LightDark
Before
After
Signed out (after)

The empty state isn't captured. Every build ships experiments, so no fixture reaches it, and this PR doesn't touch it.

Not verified on a Mac

  • glyph and type rendering in SF Pro
  • the page's scroll and drag strip in the real window

🤖 Generated with Claude Code


Open workspace in Conductor