Skip to content

Settings redesign: grouped rail + sub-tabbed dense pages#268

Closed
adibhanna wants to merge 1 commit into
mainfrom
feat/settings-redesign
Closed

Settings redesign: grouped rail + sub-tabbed dense pages#268
adibhanna wants to merge 1 commit into
mainfrom
feat/settings-redesign

Conversation

@adibhanna

Copy link
Copy Markdown
Contributor

What & why

The settings modal had grown overwhelming: 9 flat nav items (with jargon like MCP/CLI/Keymap sitting at the same level as Appearance), each carrying a 2-line description, plus a few very dense pages (Vault ~25 controls, Editor ~24). This reorganizes the experience — without removing a single setting or changing how anything persists.

Changes

Grouped rail. The 9 categories are grouped into Look & feel · Editing · Vault · System, each item now an icon + short label. Descriptions move out of the rail and onto the page header. An empty query renders the grouped rail; typing switches to the flat search-results list.

Sub-tabbed dense pages. The two heaviest pages become focused in-page sub-tabs:

  • Vault → Location · Notes · System
  • Editor → Vim · Search · Writing · Quick capture

Existing <Section>s are spliced into sub-tabs — no control is moved or rewritten.

Search-jump into sub-tabs. Clicking a search result now opens the sub-tab that owns it, then scrolls to and highlights the setting.

Keymap left as-is — its sticky live-filter + grouped list is already the right pattern for 50+ shortcuts; sub-tabs would only fragment that search. The lighter pages (Appearance, Typography, Templates, MCP, CLI, About) were already clean.

Guardrails (verified)

  • No setting removed — control / search-anchor / binding counts are identical to main: 70 settingId, 22 settingsSearchTargetProps, 20 ToggleRow, 9 SegmentedRow, 16 TextInputRow, 3 SelectRow, 26 <Section>, 59 onChange.
  • config.toml intact — every onChange/persist binding is preserved untouched, so anything a user hand-wrote into ~/.config/zennotes/config.toml still loads and round-trips (PORTABLE_PREF_KEYS controls all unchanged).
  • Typecheck (app-core) ✓ · app-core tests (580 passing) ✓ · driven the real build over CDP to confirm the rail, both sub-tabbed pages, and search-jump render and behave correctly.

Notes

  • The diff keeps the file's existing hand-formatted style. The repo has no prettier config, and running prettier would reformat ~1k unrelated lines in this file alone — so I kept the diff focused on the actual structural changes.
  • Scoped to SettingsModal.tsx only.

Reorganize the settings modal so it stops feeling overwhelming — without removing any setting or changing how anything persists.

- Rail: group the 9 categories into Look & feel / Editing / Vault / System, each with an icon + short label; descriptions move out of the rail onto the page header. Empty query shows the grouped rail; typing switches to flat search results.

- Dense pages -> focused in-page sub-tabs: Vault (Location / Notes / System) and Editor (Vim / Search / Writing / Quick capture). Existing sections are spliced into sub-tabs with no control moved or rewritten.

- Search now opens the sub-tab that owns a result before scrolling to and highlighting it.

- Keymap left as-is: its sticky live-filter + grouped list already suits 50+ shortcuts; sub-tabs would fragment that search.

Verified: control / search-anchor / onChange counts are identical to before, so no setting was dropped and every store + config.toml binding is preserved. Typecheck + app-core tests pass.
@adibhanna

Copy link
Copy Markdown
Contributor Author

Folded into the v2.8.0 release PR #269 (release/v2.8.0 -> main), which carries this settings work plus the performance pass. Closing in favor of the single release PR.

@adibhanna adibhanna closed this Jun 25, 2026
@adibhanna
adibhanna deleted the feat/settings-redesign branch June 25, 2026 14:12
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.

1 participant