Home

mweinbach / agent-coworker

publicmweinbach/agent-coworker
Overview Code History Branches Pull requestsIssuesInsights
main
HomeOverview Code PRsIssues

Migrate desktop UI to shadcn and document usage rules (#100)

5 months ago

cebd3a2
Authored
Max Weinbach5/2/2026, 2:03:43 PM
* chore: swap desktop HeroUI dependencies for Radix

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* refactor: migrate desktop UI wrappers to shadcn

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* fix: stabilize shadcn wrapper test behavior

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* style: format migrated shadcn wrappers

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* shadcn setup

* fix button placement

* fix: satisfy biome checks

* fix: address desktop component review comments

* fix: restore select interaction behavior

* fix: address remaining desktop ui review comments

* fix: address follow-up desktop ui review comments

* fix: use tokenized scroll shadow color

* fix: style disabled desktop buttons

* fix: propagate disabled select form state

* fix: address follow-up desktop component comments

* fix: restore select listbox semantics

* fix: restore menubar close animation

* fix: address collapsible review comments

* fix: render checkbox indicator conditionally

* fix: forward dialog trigger child props

* fix: address desktop trigger review feedback

* fix: address desktop overlay review feedback

* fix: forward disabled state for collapsible triggers

* test: format desktop overlay tests

* fix: address desktop review follow-ups

* test: format tooltip component

* fix: gate dialog tab trap to topmost dialog

* fix: constrain desktop popup positioning

* fix: block disabled asChild button activation

* fix: harden desktop button and select keyboard behavior

* fix: harden desktop trigger defaults

* fix: restore tooltip aria semantics

* fix: address desktop control review feedback

* fix: close desktop select on focus leave

* test: cover select focus leave close

* fix: harden desktop asChild guards

* fix: preserve asChild button class overrides

* fix: open desktop select with trigger arrows

* fix: ignore disabled collapsible trigger clicks

* fix: harden desktop dialog and tooltip controls

* fix: stop disabled desktop trigger clicks

* fix: restore dialog focus only on close

* fix: address desktop component review feedback

* fix: restore desktop CI checks

* fix: harden button asChild edge cases

* fix: tighten desktop component prop ownership

* fix: clean up component prop overrides

* fix: preserve select focus after option selection

* fix: tighten trigger accessibility semantics

* fix: avoid invalid disabled trigger attrs

* fix: preserve trigger tab order props

* fix: clear dialog restore timer on unmount

* fix: align kbd group prop type

* fix: preserve desktop trigger wrapper props

* fix: keep desktop dialogs reachable in small windows

* fix: foreground desktop window on dev launch

* fix: tighten desktop popup activation and notices

* fix: stop expanding MCP rows from edit button

* new

* chore: normalize desktop shadcn components

* fix: raise desktop portal layers

* chore: swap desktop HeroUI dependencies for Radix

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* refactor: migrate desktop UI wrappers to shadcn

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* fix: stabilize shadcn wrapper test behavior

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* style: format migrated shadcn wrappers

Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>

* shadcn setup

* fix button placement

* fix: satisfy biome checks

* fix: address desktop component review comments

* fix: restore select interaction behavior

* fix: address remaining desktop ui review comments

* fix: address follow-up desktop ui review comments

* fix: use tokenized scroll shadow color

* fix: style disabled desktop buttons

* fix: propagate disabled select form state

* fix: address follow-up desktop component comments

* fix: restore select listbox semantics

* fix: restore menubar close animation

* fix: address collapsible review comments

* fix: render checkbox indicator conditionally

* fix: forward dialog trigger child props

* fix: address desktop trigger review feedback

* fix: address desktop overlay review feedback

* fix: forward disabled state for collapsible triggers

* test: format desktop overlay tests

* fix: address desktop review follow-ups

* test: format tooltip component

* fix: gate dialog tab trap to topmost dialog

* fix: constrain desktop popup positioning

* fix: block disabled asChild button activation

* fix: harden desktop button and select keyboard behavior

* fix: harden desktop trigger defaults

* fix: restore tooltip aria semantics

* fix: address desktop control review feedback

* fix: close desktop select on focus leave

* test: cover select focus leave close

* fix: harden desktop asChild guards

* fix: preserve asChild button class overrides

* fix: open desktop select with trigger arrows

* fix: ignore disabled collapsible trigger clicks

* fix: harden desktop dialog and tooltip controls

* fix: stop disabled desktop trigger clicks

* fix: restore dialog focus only on close

* fix: address desktop component review feedback

* fix: restore desktop CI checks

* fix: harden button asChild edge cases

* fix: tighten desktop component prop ownership

* fix: clean up component prop overrides

* fix: preserve select focus after option selection

* fix: tighten trigger accessibility semantics

* fix: avoid invalid disabled trigger attrs

* fix: preserve trigger tab order props

* fix: clear dialog restore timer on unmount

* fix: align kbd group prop type

* fix: preserve desktop trigger wrapper props

* fix: keep desktop dialogs reachable in small windows

* fix: foreground desktop window on dev launch

* fix: tighten desktop popup activation and notices

* fix: stop expanding MCP rows from edit button

* new

* chore: normalize desktop shadcn components

* fix: raise desktop portal layers

* Update select.tsx

* fix: stabilize ci dependency cache

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Max Weinbach <mweinbach@users.noreply.github.com>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>

Parent4f86aea

121 files changed
  • .github/workflows/ci.yml+0−4
  • AGENTS.md+12−1
  • CLAUDE.md+10−0
  • GEMINI.md+7−0
  • apps/desktop/AGENTS.md+9−5
  • apps/desktop/GEMINI.md+11−0
  • apps/desktop/electron.vite.config.ts+1−0
  • apps/desktop/electron/ipc/window.ts+1−1
apps/desktop/electron/main.ts
+3
−7
  • apps/desktop/electron/preload.ts+0−1
  • apps/desktop/electron/services/quickChatController.ts+4−15
  • apps/desktop/electron/services/windowActivation.ts+28−0
  • apps/desktop/electron/services/windowChrome/darwin.ts+1−1
  • apps/desktop/electron/services/windowChrome/linux.ts+1−2
  • apps/desktop/electron/services/windowChrome/platformChrome.ts+1−1
  • apps/desktop/electron/services/windowChrome/win32.ts+1−2
  • apps/desktop/package.json+24−8
  • apps/desktop/src/App.tsx+24−16
  • apps/desktop/src/components/ui/accordion.tsx+64−0
  • apps/desktop/src/components/ui/alert-dialog.tsx+196−0
  • apps/desktop/src/components/ui/alert.tsx+66−0
  • apps/desktop/src/components/ui/aspect-ratio.tsx+11−0
  • apps/desktop/src/components/ui/avatar.tsx+107−0
  • apps/desktop/src/components/ui/badge.tsx+40−49
  • apps/desktop/src/components/ui/breadcrumb.tsx+109−0
  • apps/desktop/src/components/ui/button-group.tsx+83−0
  • apps/desktop/src/components/ui/button.tsx+53−169
  • apps/desktop/src/components/ui/calendar.tsx+218−0
  • apps/desktop/src/components/ui/card.tsx+47−47
  • apps/desktop/src/components/ui/carousel.tsx+241−0
  • apps/desktop/src/components/ui/chart.tsx+372−0
  • apps/desktop/src/components/ui/checkbox.tsx+21−37
  • apps/desktop/src/components/ui/collapsible.tsx+16−136
  • apps/desktop/src/components/ui/combobox.tsx+310−0
  • apps/desktop/src/components/ui/command.tsx+184−0
  • apps/desktop/src/components/ui/context-menu.tsx+252−0
  • apps/desktop/src/components/ui/dialog.tsx+100−456
  • apps/desktop/src/components/ui/direction.tsx+22−0
  • apps/desktop/src/components/ui/drawer.tsx+133−0
  • apps/desktop/src/components/ui/dropdown-menu.tsx+257−0
  • apps/desktop/src/components/ui/empty.tsx+104−0
  • apps/desktop/src/components/ui/field.tsx+248−0
  • apps/desktop/src/components/ui/form.tsx+165−0
  • apps/desktop/src/components/ui/hover-card.tsx+42−0
  • apps/desktop/src/components/ui/input-group.tsx+168−0
  • apps/desktop/src/components/ui/input-otp.tsx+77−0
  • apps/desktop/src/components/ui/input.tsx+18−24
  • apps/desktop/src/components/ui/item.tsx+193−0
  • apps/desktop/src/components/ui/kbd.tsx+28−0
  • apps/desktop/src/components/ui/label.tsx+22−0
  • apps/desktop/src/components/ui/menubar.tsx+276−0
  • apps/desktop/src/components/ui/native-select.tsx+62−0
  • apps/desktop/src/components/ui/navigation-menu.tsx+168−0
  • apps/desktop/src/components/ui/pagination.tsx+127−0
  • apps/desktop/src/components/ui/popover.tsx+87−0
  • apps/desktop/src/components/ui/progress.tsx+31−0
  • apps/desktop/src/components/ui/radio-group.tsx+43−0
  • apps/desktop/src/components/ui/resizable.tsx+53−0
  • apps/desktop/src/components/ui/scroll-area.tsx+56−0
  • apps/desktop/src/components/ui/scroll-shadow.tsx+121−6
  • apps/desktop/src/components/ui/select.tsx+130−174
  • apps/desktop/src/components/ui/separator.tsx+26−0
  • apps/desktop/src/components/ui/sheet.tsx+143−0
  • apps/desktop/src/components/ui/sidebar.tsx+724−0
  • apps/desktop/src/components/ui/skeleton.tsx+13−0
  • apps/desktop/src/components/ui/slider.tsx+61−0
  • apps/desktop/src/components/ui/sonner.tsx+40−0
  • apps/desktop/src/components/ui/spinner.tsx+16−0
  • apps/desktop/src/components/ui/switch.tsx+23−35
  • apps/desktop/src/components/ui/table.tsx+116−0
  • apps/desktop/src/components/ui/tabs.tsx+89−0
  • apps/desktop/src/components/ui/textarea.tsx+8−10
  • apps/desktop/src/components/ui/toggle-group.tsx+83−0
  • apps/desktop/src/components/ui/toggle.tsx+47−0
  • apps/desktop/src/components/ui/tooltip.tsx+40−68
  • apps/desktop/src/hooks/use-mobile.ts+19−0
  • apps/desktop/src/lib/nativeDisabled.ts+15−0
  • apps/desktop/src/lib/react-ref.ts+26−0
  • apps/desktop/src/lib/useDesktopPlatform.ts+1−4
  • apps/desktop/src/main.tsx+4−1
  • apps/desktop/src/main.web.tsx+4−1
  • apps/desktop/src/styles.css+60−1
  • apps/desktop/src/styles/platform/shared.css+1−1
  • apps/desktop/src/styles/theme-bridge.css+1−1
  • apps/desktop/src/ui/ChatView.tsx+1−1
  • apps/desktop/src/ui/chat/a2ui/A2uiSurfaceDock.tsx+1−1
  • apps/desktop/src/ui/file-explorer/WorkspaceFileExplorer.tsx+2−2
  • apps/desktop/src/ui/layout/AppTopBar.tsx+2−7
  • apps/desktop/src/ui/layout/ContextSidebarResizer.tsx+1−1
  • apps/desktop/src/ui/layout/MessageBarResizer.tsx+1−1
  • apps/desktop/src/ui/layout/PlatformTopBarChrome.tsx+7−1
  • apps/desktop/src/ui/layout/SidebarResizer.tsx+1−1
  • apps/desktop/src/ui/plugins/InstallPluginDialog.tsx+26−5
  • apps/desktop/src/ui/research/ResearchSettingsPopover.tsx+1−1
  • apps/desktop/src/ui/settings/pages/McpServersPage.tsx+17−1
  • apps/desktop/src/ui/settings/pages/ProvidersPage.tsx+23−10
  • apps/desktop/src/ui/settings/pages/UsagePage.tsx+1−1
  • apps/desktop/test/app-notifications-window-modes.test.tsx+111−0
  • apps/desktop/test/button-component.test.tsx+28−37
  • apps/desktop/test/collapsible-component.test.tsx+52−0
  • apps/desktop/test/desktop-platform.test.ts+1−6
  • apps/desktop/test/developer-page.test.tsx+0−1
  • apps/desktop/test/dialog-component.test.tsx+30−370
  • apps/desktop/test/file-preview-modal.test.tsx+3−3
  • apps/desktop/test/helpers/mockDesktopCommands.ts+14−0
  • apps/desktop/test/input-group-component.test.tsx+49−0
  • apps/desktop/test/jsdomHarness.ts+96−31
  • apps/desktop/test/mcp-servers-page.test.tsx+78−0
  • apps/desktop/test/plugins-catalog-page.test.ts+18−48
  • apps/desktop/test/quick-chat-controller.test.ts+3−0
  • apps/desktop/test/select-component.test.tsx+60−0
  • apps/desktop/test/token-compliance.test.ts+2−0
  • apps/desktop/test/token-consumers.test.tsx+55−17
  • apps/desktop/test/tooltip-component.test.tsx+54−0
  • apps/desktop/test/window-activation.test.ts+53−0
  • apps/desktop/test/workspaces-page.test.ts+32−27
  • apps/desktop/vite.config.web.ts+1−0
  • bun.lock+235−71
  • package.json+3−1
  • src/mcp/configRegistry.ts+1−1
  • test/mobile.theme-tokens.test.ts+15−3