Layout gaps, overlays and merges
11. Layout gaps and shared sections
Section titled “11. Layout gaps and shared sections”No screen in this doc needs a new page layout. These are the places where the closed set needs a variant or a shared section:
FlowLayoutneeds adialogpresentation besidespage. It is used by New transfer (A3), Start count (A4), Add item (A5), Add device + enrollment (A13), Send announcement (A7). Proposal: the same stepper/footer contract rendered insideModal. Single-step dialogs simply hide the stepper.ScanWorkbenchshared section (not a layout). Camera frame + paste/search field + Resolve/Find + result panel + recent list. It is used insideListLayout(staff Scanner, Member cards › Scan),DetailLayout(Stocktake session),FlowLayout(Self-checkout scan step) andKioskLayout(Scanner page, Event check-in station). It wraps the existingQrScanner. Proposed home:components/ui/ScanWorkbench.tsx, ≤200 lines, withResultPanel(success / warn / danger + “Next” + optional “Undo”) split out.DetailLayoutdrawer presentation. Container detail (B3), Device detail (A13), Warranty manage (A10), Procurement edit (A5) and Organized event (A11, alreadyEventDrawer) open as side drawers. This assumes the restyledDetailDrawercan hostDetailLayoutslots (back → close, tabs, body). If the core spec defines drawers differently, follow it.AppShellno-workspace mode for the superadmin makerspace picker (D4) and global routes (Organizations, Platform dashboard) before a space is chosen. The sidebar shows only global items and the switcher reads “Choose a space”. This needsStaffApp’s gate order to render the picker inside the shell. That touchesshell-contracts.md§1A (gate order), so raise it with the shell owner. Fallback:CenteredCardLayoutwide variant.CenteredCardLayoutwide variant (max-width ~ 720 px) for card grids that sit outside any shell (D4 fallback, G11 archived payments if the deployment shell is not used).- Static offline page (I4) cannot consume layouts. It mirrors
KioskLayoutby hand inoffline.css. This is a constraint for the token phase, not a layout gap.
12. Batch J — Overlays and global chrome (no page layout)
Section titled “12. Batch J — Overlays and global chrome (no page layout)”J1. Command palette
Section titled “J1. Command palette”- Component
staff/CommandPalette.tsx. Keep: name “Search and commands”, Ctrl/⌘K, combobox/listbox semantics, dialog-stack guard. - Change: the trigger moves to the sidebar top as a search-looking field “Search or jump to…” with a
⌘Khint (PLAN §3.4). Results are grouped with small headers: Go to (tabs), Create (quick-create commands), Results (entity hits, with entity-type icon and tab name as meta). Each item has a leading icon; the selected item uses the active-pill style. Footer hint: “↑↓ to move · Enter to open · Esc to close”. - States: searching: “Searching…” (live) · none: “No matches for ‘{q}’.” · search error: “Search isn’t available right now. You can still jump to pages.”
J2. Job tray
Section titled “J2. Job tray”- Component
components/ui/JobTray.tsx(jobStore). Today it is a<details>strip under the header. - Change: a compact pill pinned at the bottom of the sidebar (above the user chip): “2 jobs
running” with a spinner. Clicking opens a popover list. Each job has a label, a status pill (Queued /
Building / Ready / Failed), “Open” (to its source panel), and “Dismiss”. When a job finishes: toast “Your
export is ready.” with “Download”/“Open”. Keep the
aria-livesummary. - States: check error: row text “Couldn’t check progress.” + “Retry”.
J3. Setup checklist
Section titled “J3. Setup checklist”- Component
staff/SetupChecklist.tsx(setupChecklistState.ts). Shown on Dashboard to space managers. - Change (coordinate with the core Dashboard spec): a callout card (P5) at the top of Home: “Finish setting up {space} — 3 of 5 done” + progress bar + the next undone step as the action link (“Set opening hours →”). It expands to the full list (Done ✓ / To do rows linking to their tabs) and a “Hide” control that persists per browser (unchanged).
J4. Shared dialogs restyled once
Section titled “J4. Shared dialogs restyled once”- Payment Settlement / Refund / Amend (A1), Category delete, Restrict requester (A9), Reissue/Revoke card (A12), Device revoke + enrollment (A13), Bulk-import mapping (now a step, E1), Create QR batch (E2), Org link change (C5), Reset email template (B1). All follow: title as a question or verb (“Revoke this card?”), one sentence of consequence, then Cancel (outline) + verb button (danger tint when destructive). Required-reason fields autofocus.
13. Cross-cutting merges and moves (summary)
Section titled “13. Cross-cutting merges and moves (summary)”| Move | From → to | Why | Needs |
|---|---|---|---|
| Telegram chat ID / bot token | API access → Makerspace settings › Notifications/Integrations | not an API-client concern | core settings owner |
| Broadcast composer | pinned above inbox → “Send announcement” dialog on Notifications | one primary; inbox is the job | — |
| Stocktake policy & schedules | top of Stocktake → More › “Count policy and schedule” drawer | config ≠ daily work | — |
| Suppressions | below delivery log → tab “Suppressed addresses” | one list per view | — |
| Space packs | Makerspace settings → stays (core); referenced from Create makerspace step 3 | — | core settings owner |
| Usage & limits | own tab → optionally Settings › Plan & usage | fewer admin tabs | owner decision |
| Member directory | Account tab → own member nav item | it’s community, not account | memberTabs change, owner decision |
| Member account (2 pages) | /member/account + account-portal tab → one cross-linked area |
user sees one “account” | — |
| Platform settings (3 stacked panels) | → sub-nav sections | — | — |
| Accountability (4 stacked panels) | → tabs | — | — |
| Member cards (4 stacked sections) | → tabs | — | — |
| QR tools (3 stacked forms) | → batch list + batch detail with segmented “Add labels” | — | — |
| Organizations select + pager | → org cards index + org settings sub-nav | reference organiser workspace | — |
| Dead code | panels/EmailLogPanel.tsx (exported, not routed) |
— | separate cleanup |
Part of UX spec: long-tail screens (Space Works UX across all of SpaceWorks), published from docs/ux-screens-longtail.md. Edit it there.