feat(settings): inline settings tree in sidenav + flyout on collapsed rail; drop settings submenu column #1104
Labels
No labels
area:agents
area:dashboard
area:database
area:design
area:design-review
area:flows
area:infra
area:meta
area:security
area:sessions
area:webhook
area:workdir
security
type:bug
type:chore
type:meta
type:user-story
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
charles/claude-hooks#1104
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
User story
As an operator, I want the Settings section to surface its inner tree inside the main sidenav — auto-expanded inline on
/settings/*when the sidenav is expanded, and as a flyout when the sidenav is collapsed — so that the dashboard uses one nav column instead of two stacked ones, and section nav is discoverable in both rail modes.Background
After nav-v2 (#1090) shipped, visiting
/settingsstill renders a dedicated left column (SettingsGroupedNav) for section nav. Result: two stacked left columns (main sidenav + settings submenu), narrow content area, redundant hierarchy. Decision (operator review 2026-05-11): drop the settings page submenu, move section nav into the main sidenav with two behaviours — inline tree when expanded, flyout when collapsed.Behaviour summary
Expanded sidenav + route matches
/settings/*:NAV_GROUPS: GENERAL → General / Appearance / Voice input; AGENTS → Agent types / Agent config; FORGES → Service config / Repos / Labels; DATA → Secrets.Expanded sidenav + non-settings route:
⚙icon (no tree).Collapsed sidenav (rail mode, any route):
Settings page (
/settings,/settings/*):SettingsGroupedNavleft column.Settings › <Group> › <Leaf>.Acceptance criteria
Shared data
NAV_GROUPSextracted fromapps/web/src/routes/settings.tsx(lines 45–73) into a new moduleapps/web/src/lib/settings-nav.ts.NavGroup+NavItemtypes co-located in the shared module.SettingsGroupedNav,SettingsSideNavinapps/web/src/components/settings-side-nav.tsx, any sub-route side nav) import from the shared module — no duplicated lists.Sidenav inline tree (expanded mode)
apps/web/src/components/sidebar-nav.tsxrenders Settings as an expandable section when route matches/settings*and sidenav is not collapsed.NAV_GROUPS.Sidenav flyout (collapsed mode)
data-nav="collapsed"is set on<html>, clicking the Settings rail icon opens a Base UI Menu flyout.@base-ui-components/react/menu— no new dependency.navigate(to)then closes the flyout.Settings page
apps/web/src/routes/settings.tsxno longer rendersSettingsGroupedNav.Settings › <Group> › <Leaf>(active group + leaf derived from current sub-route;/settingsroot showsSettings › General)./settings).SettingsGroupedNavcomponent deleted if no remaining consumers./settings/service.tsx) updated: drop any in-pageSettingsSideNavthat now duplicates the sidenav tree, OR keep it only where the sub-route has its own deeper sub-tree not covered byNAV_GROUPS— document the decision in the PR description.Mobile / small viewport
/settings/*, tree renders inline (same as expanded mode).Tests
sidebar-nav: route/settings/appearance+ expanded → tree renders + Appearance leaf is active.sidebar-nav: route/board+ expanded → no settings tree visible.sidebar-nav: collapsed + click Settings icon → flyout appears with leaves; leaf click navigates + closes flyout.routes/settings:SettingsGroupedNavnot present in DOM; breadcrumb shows correct trail for sub-routes.Manual QA
mdbreakpoint while on/settings/*— drawer/inline tree handover is clean.just qapasses (typecheck + lint + format).Out of scope
NAV_GROUPScontent — keep the current groups; structural changes belong to #36.References
docs/specs/nav-consolidation.mdapps/web/src/components/sidebar-nav.tsx(lines 30–304; collapsed state viauseNavCollapsed()at line 39;data-navattribute on<html>)apps/web/src/routes/settings.tsx(NAV_GROUPSlines 45–73,SettingsGroupedNavlines 93–187)apps/web/src/components/settings-side-nav.tsxapps/web/src/components/avatar-menu.tsxapps/web/src/components/tooltip.tsx/settings/*when expanded) + breadcrumb-only header on the settings page.