feat(ui): hold header rows and page sections to rearrange or hide them #1
Reference in New Issue
Block a user
Delete Branch "navbar-hold"
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?
Summary
Hold-to-rearrange was already in the app, but only for a handful of lists, and nothing could be hidden. This adds the stash — drop an item on the popover to bench it, drag its tag back to restore it — and extends the gesture to the places that were still fixed: every header icon-button row, and the Project / Service / Settings page bodies.
Which places were picked came from a form (
ask-form): the bottom navbar tabs and the already-reorderable lists were explicitly left alone; the four new areas below are what was asked for.Key changes
HoldEditablefork. The app carried its own 767-line copy, frozen before the stash existed.@gabvdl/ui's is a strict superset, so the nine call sites now import it and the fork is gone.useListArrangement(lib/listOrder.ts) —useListOrder's other half: which entries are benched. Persisted server-side in a newlistStashesbag besidelistOrders, reconciled the same way (unknown ids dropped, unknown-to-the-save entries slotted rather than benched).HeaderActions— a header's icon-button row, reorderable and stashable. Wired into the conversation header (interrupt · expand-all · visibility · details), the drawer header, and the page headers on Notifications home, All conversations, Notifications and Goals.SectionStack— a page's stack of sections, same gesture. Wired into Project (10 sections), Service (12) and Settings (4).@gabvdl/ui0.30.3 — fixes the stash popover for groups taller than the viewport (see below). Published to verdaccio; the design-system commit is pushed to both remotes.Key decisions
HeaderActionsaddspinnedfor controls whose absence would strand the user — a back link, the drawer's mobile close,Interrupton a live session.@gabvdl/uinow clips the anchor to the viewport, flips to the other side when the chosen one is against an edge, and pins the popover inside the viewport when the group fills it.md:hidden: adisplay:noneslot measures zero, which would leave the drag a dead gap to hit.Changelog
Added
Changed
@gabvdl/ui0.30.3).Removed
HoldEditable, in favour of the design-system component.Test notes
tsc --noEmitandvite buildclean;build:mockserved and driven with Playwright.Screenshots
View command line instructions
Checkout
From your project repository, check out a new branch and test the changes.