Skip to content

feat: app shell — activity bar + primary sidebar panel switching (#14)#30

Merged
andrewchumchal merged 3 commits into
devfrom
feat/app-shell
May 19, 2026
Merged

feat: app shell — activity bar + primary sidebar panel switching (#14)#30
andrewchumchal merged 3 commits into
devfrom
feat/app-shell

Conversation

@andrewchumchal
Copy link
Copy Markdown
Contributor

Closes #14

What's in this PR

New

  • ActivityBar — 48px icon strip (Chats / Personas / Marketplace). Active icon toggles sidebar; different icon switches panel + opens sidebar.
  • MarketplaceSidebarPanel — Unified marketplace search with @mcp / @provider prefix detection, type pills (All / Providers / MCP), and direct install.

Changed

  • App.tsx — New root layout with resizable sidebar (oc-sidebar-width in localStorage, 160–520px drag handle). Panel switching renders the correct sidebar content.
  • Sidebar — Removed <aside> wrapper + bottom Settings button (App.tsx owns the wrapper now).
  • TopBar — Removed pl-[80px] macOS hack (ActivityBar handles traffic light clearance).
  • uiStoreactivePanel added and persisted to localStorage (oc-active-panel).

Bug fixes

  • PersonasPaneltext-whitetext-slate-100 throughout so light mode works via the slate CSS inversion.
  • MarketplaceSidebarPanel — Badge colors use dark: variants; EntryIcon gets a border in light mode to prevent white-on-white.

Acceptance criteria

  • Activity bar with Chats / Personas / Marketplace icons
  • Panel switching + sidebar toggle
  • Active panel persists across restarts
  • macOS traffic light clearance
  • Resizable sidebar
  • Light mode correct in both new panels

Unlocks

#15 · #17 · #18 · #28 · #29

… search

- Add ActivityBar component (48px): Chats, Personas, Marketplace icons + Settings gear
- Add activePanel state to uiStore (chats | personas | marketplace)
- Clicking active icon toggles sidebar; clicking another icon switches panel
- Sidebar content (Chats) extracted from outer <aside> wrapper - App.tsx provides it
- Remove sidebarOpen guard and bottom settings button from Sidebar
- Marketplace panel rebuilt as unified search: @mcp / @Provider prefix support,
  All|Providers|MCP type pills, combined flat list with kind badge + direct install
- PersonasPanel wrapped in scrollable container in sidebar
- macOS: pt-8 on sidebar <aside> and activity bar to clear traffic lights
- TopBar: remove sidebarOpen-based pl-[80px] macOS hack (activity bar handles it)

Closes #14
Drag the right edge of the sidebar to resize. Width persisted to
localStorage (key: oc-sidebar-width). Bounds: 160–520px, default 240px.
Blue accent line appears on hover over the resize handle.
- PersonasPanel: replace text-white with text-slate-100 throughout so
  slate CSS inversion handles light/dark automatically; keep text-white
  only on blue buttons and colored avatar circles
- MarketplaceSidebarPanel: badge colors use dark: variants for light
  mode (indigo/teal/amber/green); EntryIcon adds border in light mode
  to prevent white-on-white
- uiStore: persist activePanel to localStorage (oc-active-panel) so
  selected sidebar panel survives app restarts
@andrewchumchal andrewchumchal merged commit 5a71024 into dev May 19, 2026
@andrewchumchal andrewchumchal deleted the feat/app-shell branch May 19, 2026 02:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

feat: app shell — activity bar + primary sidebar panel switching

1 participant