Group layers by board, zoom-to-board navigation, and all-boards export - #9
Merged
Merged
Conversation
…igation - Fix the layers panel boards rail: the canvas board caption reused the sidebar's .ox-board-label class, absolutely positioning the rail's board names over the header/thumbnails. The caption is now .ox-board-caption. - Clicking a board (rail or toolbar select) now navigates: new viewport.fitTo(rect) zooms + centers the board (with caption headroom); layoutBoards bakes the vertical-centering y so Stage and fitTo share it. - Group the LAYERS tree by board: per-board collapsible sections with sticky headers (name + count). The active board's group auto-expands and the others collapse on board switch; manual expand/collapse overrides are latched per selection so canvas DOM churn and stale selections can't defeat them, and they reset when the board id sequence changes (delete/duplicate/reorder). Cross-board canvas selections force their group open and scroll into view (clear of the stuck header via scroll-margin). Single-board designs keep the flat list. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…bar board dropdown
- Remove the toolbar "Active board" SelectMenu — the layers panel's boards
rail now owns board switching (same focusBoard path), so the dropdown was
a duplicate control with worse affordance.
- Its remaining job (saying which board Export targets) moves into the
Export menu: on multi-board designs items name the active board
("PNG — Cover"), and a second section exports every board — "PDF — all
boards" (one page per board via exportPdfPages) and "PNG/SVG — all boards
(.zip)" (exportZip via fflate; entries named NN-label).
- Compress PDF rasters (jsPDF compress + FAST addImage): a 4-board PDF
drops from 56 MB (raw pixels) to 0.4 MB, lossless. Applies to the
single-board PDF too, which now shares the multi-page path.
- Pre-bundle jspdf/fflate in dev so a first export can't trigger a
mid-session "new dependency" page reload.
- Cap dropdown popovers (max-width + label ellipsis): menu labels now carry
user content (board names), which must not stretch the menu across the
viewport.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Owner
Author
|
Codex review (
No findings to act on — leaving the PR as-is for merge. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two commits reworking multi-board UX in the editor:
Layers panel (63b34f4)
.ox-board-label) collided with the sidebar's board-name class, absolutely positioning the rail's names over the header/thumbnails. The caption is now.ox-board-caption.viewport.fitTo(rect)zooms + centers that board (with headroom for its caption).Toolbar + export (39c5c01)
exportPdfPages) and "PNG/SVG — all boards (.zip)" (exportZipvia fflate, entries namedNN-label).compress+FAST): a 4-board PDF drops from 56 MB (raw pixels) to 0.4 MB, lossless; the single-board PDF shares the same path.jspdf/fflatein dev so a first export can't trigger a mid-session page reload; cap dropdown popovers (max-width + label ellipsis) since menu labels now carry user content.Verification
window.__ox.lint()clean.01-cover…04-outroentries; PDF has 4 pages with correct per-board page boxes; current-board PNG still downloads.npm run typecheck+npx tsc --noEmit -p apps/demopass.🤖 Generated with Claude Code