Feat v0.4.6 sidebar restructure
All checks were successful
CI/CD / detect-changes (pull_request) Successful in 4s
CI/CD / test-frontend (pull_request) Successful in 5s
CI/CD / test-go-pg (pull_request) Successful in 2m33s
CI/CD / test-sqlite (pull_request) Successful in 2m58s
CI/CD / build-and-deploy (pull_request) Successful in 1m16s

Restructure the notes sidebar with a two-tab header (Notes / Outline)
and relocate the document outline from the editor-side panel into the
sidebar's Outline tab with active heading tracking.

- Add SidebarTabs component with Notes/Outline tabs; Outline disabled
  when no note is selected
- Add SidebarOutline component with nested heading hierarchy
  (H1→H2→H3), depth indentation, and click-to-scroll
- Add RAF-throttled scroll listener for active heading highlighting
  based on scroll position (preview getBoundingClientRect / CM6 viewport)
- Lift headings, scrollToHeading, and activeHeadingIdx state to NotesApp
  via EditorPane callback props
- Remove old DocumentOutline component and .doc-outline CSS
- Auto-reset to Notes tab when active note is deleted
- Bump notes package to v0.7.0

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-03-29 21:16:31 +00:00
parent 6fbac0a33f
commit d5984f4762
6 changed files with 240 additions and 111 deletions

View File

@@ -2,6 +2,36 @@
All notable changes to Switchboard Core are documented here.
## v0.4.6 — Sidebar Restructure
### Added
- **Sidebar tabs**: Two-tab header ("Notes" / "Outline") replaces the static
sidebar header. Notes tab contains folder tree, tag filter, search, and note
list. Outline tab shows the document heading tree for the active note.
Outline tab disabled (grayed) when no note is selected.
- **Sidebar outline**: Document outline relocated from editor-side panel into
the sidebar's Outline tab. Nested heading hierarchy (H1→H2→H3) with depth
indentation via `padding-left`. Click heading scrolls to it in both preview
and CM6 editor modes.
- **Active heading tracking**: Scroll listener (RAF-throttled) highlights the
current heading in the sidebar outline based on scroll position. Uses
`getBoundingClientRect()` in preview/split mode and CM6 viewport line in
edit mode.
### Changed
- Notes package version bumped from 0.6.0 to 0.7.0.
- `EditorPane` exposes headings, scroll function, and active heading index to
parent via callback props (`onHeadingsChange`, `scrollToHeadingRef`,
`onActiveHeadingChange`).
- Sidebar auto-resets to Notes tab when active note is deleted.
### Removed
- Old `DocumentOutline` component and `.doc-outline` CSS styles (replaced by
sidebar outline).
## v0.4.5 — Editor Modes + Document Outline
### Added