Adds a tile/list view toggle to the Notebooks page, addressing the navigation pain of large notebook collections.
Tile view (default, unchanged): the existing visual card grid.
List view: compact rows showing notebook name, description, source/note counts, and last updated โ easier to scan when you have many notebooks.
A segmented toggle (grid/list icons) in the page header switches between modes.
The preference is persisted via a Zustand store (notebook-view-storage) so it survives reloads and is shared by both the active and archived lists.
Frontend-only โ no API changes. NotebookResponse already exposes source_count, note_count, updated, name, and description.
Changes
New notebook-view-store.ts (persisted Zustand store).
New NotebookRow.tsx โ compact row variant reusing the card's click-to-open / archive / delete behavior.
NotebookList.tsx renders the grid or the row list based on the store.
Toggle control added to notebooks/page.tsx header.
New notebooks.tileView / notebooks.listView keys translated across all 14 locales.
CHANGELOG updated under [Unreleased].
Verification
tsc --noEmit clean, npm run lint 0 errors, locale parity test 14/14.
Verified locally with Playwright: toggling switches layouts, the active button highlights, and the list-view selection persists across a full page reload.
Summary
Adds a tile/list view toggle to the Notebooks page, addressing the navigation pain of large notebook collections.
notebook-view-storage) so it survives reloads and is shared by both the active and archived lists.Frontend-only โ no API changes.
NotebookResponsealready exposessource_count,note_count,updated,name, anddescription.Changes
notebook-view-store.ts(persisted Zustand store).NotebookRow.tsxโ compact row variant reusing the card's click-to-open / archive / delete behavior.NotebookList.tsxrenders the grid or the row list based on the store.notebooks/page.tsxheader.notebooks.tileView/notebooks.listViewkeys translated across all 14 locales.[Unreleased].Verification
tsc --noEmitclean,npm run lint0 errors, locale parity test 14/14.Closes #885