Table Seating Planner: listing UX fixes (setup wizard, print, undo/redo, in-place edits)#657
Conversation
linear: https://linear.app/cardstack/issue/CS-12106 ## summary: UX fixes from the PM UX evaluation (CS-11949): - Surface visible Undo/Redo buttons in the canvas toolbar, wired to the existing undo/redo stacks and disabled via undoDepth/redoDepth. The ⌘Z / ⇧⌘Z shortcuts already existed; this adds the missing visible affordance ("No redo/undo action"). - Dedupe the guest rail header: drop the redundant standalone total and the "All guests seated" banner (and the now-unused getter/CSS), keeping one "Guests · X of Y seated" line + progress bar ("sidebar information seems duplicate"). Action-hierarchy styling and Boxel Button/theme reuse are intentionally left to the UI refactor (CS-12101).
linear: https://linear.app/cardstack/issue/CS-12106 ## summary: Rename the user-facing seat-status terminology from "Seated" to "Assigned" (a guest is assigned to a table), per the PM UX evaluation (CS-11949). Covers the guest-rail header, the inspector progress label, the table popover, the embedded/fitted stat, the table.gts heading, and the related "unseated" → "unassigned" wording in confirm dialogs + the save-snapshot tooltip. Code identifiers (seatedCount, seatedGuests, etc.) are left unchanged.
linear: https://linear.app/cardstack/issue/CS-12106 ## summary: Add two printable wedding-stationery card types produced from the seating plan (PM UX evaluation, CS-11949: "Place Card, Table Card for wedding"): - PlaceCard (place-card.gts): links a Guest and shows their name, table, and event title in a themed, print-sized card (isolated + fitted formats). - TableCard (table-card.gts): a large table name/number sign with the event title. Both use --pc-*/--tc-* design tokens defaulting to the burgundy/gold theme. Adds example instances (PlaceCard/andy, PlaceCard/nana, TableCard/rose) and wires them into the CardListing examples.
… table names linear: https://linear.app/cardstack/issue/CS-12106 ## summary: Replace the standalone PlaceCard/TableCard CardDefs with print views driven by the existing seating data, and add printing: - Add card-views.gts (PlaceCardView / TableCardView) — shared, container-query-sized stationery visuals. - "Print cards" toolbar button prints every table's card + its guests' place cards; a per-table print button in the table popover prints a single table. Uses the browser print dialog (Save as PDF). - Remove place-card.gts / table-card.gts CardDefs and their example instances, and revert the CardListing example wiring — a TableCard/PlaceCard would only duplicate Table (contained field) and Guest (already a card), so cards are rendered as views instead of stored, keeping the planner->containsMany(Table)->linksToMany(Guest) schema referentially safe. - Default new-table name is now "<Shape> Table <n>" using a global index (e.g. "Round Table 1", "Oval Table 2").
…ge-source editor linear: https://linear.app/cardstack/issue/CS-12106 ## summary: - Add a first-run setup wizard (setup-wizard.gts) shown only on a brand-new planner: a two-pane modal (left vertical stepper, right step content) covering event details, guests, and a "start from a template" step that previews saved layouts with the LayoutPreview SVG (or start blank). Full-bleed with a small margin; per-step validation gates Next; closes via ✕ / Start blank / applying a template. The planner owns template application (applyTemplateFromWizard) and shows the wizard via showWizard (decided once at construction so typing in it never dismisses it). - Make the Guest isolated view in-place editable (name input, category chips, VIP toggle) reusing the edit-format actions. - Redesign the shared ImageSourceField edit template (image-source-editor.gts) to be compact and modern with a segmented File/URL control and a themeable --image-source-accent (no hardcoded purple).
…/redo, unified print, right-click popover linear: https://linear.app/cardstack/issue/CS-12106 ## summary: Setup wizard (setup-wizard.gts): two-pane layout (left vertical stepper, right content) over 4 steps — event details, hosts, guests, and "start from a template" (each template shown with its LayoutPreview SVG) or start blank. Per-step validation gates Next; Skip advances; ✕/Start blank close. Icon-led steps. Planner (tsp.gts): - Undo/redo moved off the toolbar to a canvas top-right pill (curved arrows, gold hover, greyed when unavailable). - Print consolidated into one Print button that opens a popover with two options: place & table cards, or the seating chart. Cards mode paginates across pages (fixed card sizes, break-inside:avoid, un-clipped print container); chart mode renders the whole layout as one scaled overview page (printMode toggle). - Right-click a table opens its edit popover; right-click a fixture selects it (inspector edit). - Host/guest removal now matches by id (not reference) so store-proxy identity mismatches don't leave/re-add an item.
…/onAddGuests) for lint:types
Staging Submissions PreviewThis PR's content is pushed to the staging submissions realm: https://realms-staging.stack.cards/submissions/ Changed listings: Changed folders:
Updated at 2026-07-16 08:52:56 UTC for commit |
…heir Specs to the listing linear: https://linear.app/cardstack/issue/CS-12106 ## summary: - Move setup-wizard.gts and card-views.gts (both Glimmer UI components) from the listing root into components/, matching the convention there (tsp, layout-preview, fixture-glyph, seating-plan-popover). Fix up imports. - Add Spec instances for the new component modules and link them in the CardListing specs, matching this listing's pattern of one Spec per module: setup-wizard (default), card-views PlaceCardView, card-views TableCardView.
There was a problem hiding this comment.
Pull request overview
This PR applies a set of listing-quality UX improvements to the Table Seating Planner catalog listing, including a first-run setup wizard, improved printing flows, and several in-place editing and terminology updates (“Seated” → “Assigned”). It also modernizes the shared ImageSourceField editor UI and introduces shared card view components/specs to keep print output and card rendering consistent.
Changes:
- Add a first-run, multi-step setup wizard component and wire it into the planner’s isolated view.
- Add print modes (cards vs chart), a print popover, and shared
PlaceCardView/TableCardViewcomponents plus corresponding Spec entries. - Update guest isolated view to be in-place editable (name/category/VIP), add right-click affordances, and standardize “Assigned” terminology across UI copy.
Reviewed changes
Copilot reviewed 10 out of 10 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| fields/image-source/components/image-source-editor.gts | Redesign the image source editor UI (segmented File/URL control, compact preview/empty states, themeable accent). |
| 41e20f-wedding-table-seating-planner/table.gts | Rename “Seated” section heading to “Assigned”. |
| 41e20f-wedding-table-seating-planner/Spec/39355975-9e51-49d1-9b77-88bcdb7c5feb.json | Add Spec entry for TableCardView component. |
| 41e20f-wedding-table-seating-planner/Spec/10c3938c-b579-45cc-a849-4811b0fbc16b.json | Add Spec entry for PlaceCardView component. |
| 41e20f-wedding-table-seating-planner/Spec/039f23ea-f61a-4a68-a322-6ff5acb17bf7.json | Add Spec entry for SetupWizard component. |
| 41e20f-wedding-table-seating-planner/guest.gts | Make guest isolated view editable (name input, category chips, VIP toggle) and add associated styling. |
| 41e20f-wedding-table-seating-planner/components/tsp.gts | Integrate wizard, add print sheet + print popover, relocate undo/redo to canvas pill, add contextmenu behaviors, adjust naming and removal-by-id logic, and update “assigned” terminology. |
| 41e20f-wedding-table-seating-planner/components/setup-wizard.gts | Introduce the new 4-step first-run setup wizard UI and logic. |
| 41e20f-wedding-table-seating-planner/components/card-views.gts | Add shared place/table card rendering components for in-app/print single-source-of-truth. |
| 41e20f-wedding-table-seating-planner/CardListing/6241aa1f-0a8a-45f3-9b8b-57ac600070c4.json | Register new component specs in the listing. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
The compact editor rework rode along with the seating-planner UX branch but is an independent field-UI concern; it comes out of this branch so it can be designed and reviewed on its own.
Listing-quality UX fixes for the Table Seating Planner catalog listing, from the PM UX evaluation.
linear: https://linear.app/cardstack/issue/CS-12106
What's in here
setup-wizard.gts) — two-pane modal (left vertical stepper, right content) shown only on a brand-new planner, over 4 steps: event details → hosts → guests → start from a template. Each template is previewed with its realLayoutPreviewSVG; or start blank. Per-step validation gates Next; Skip advances; ✕ / Start blank / picking a template close it. Decided once at construction so typing inside it never dismisses it.break-inside: avoid, un-clipped print container) or the seating chart (whole layout on one scaled overview page).printModetoggle; per-table print supported.card-views.gts) — sharedPlaceCardView/TableCardViewrender both in-app and in the print sheet (single source of truth); no redundant stored CardDefs.<Shape> Table <n>(global index).ImageSourceFieldedit redesigned compact + modern (segmented File/URL control, themeable--image-source-accent).id(not reference) to avoid store-proxy identity mismatches.Passes
lint:js+lint:hbs+lint:types.Not in this PR (follow-ups)
Buttontiers) — tracked under the UI refactor CS-12101.linksToManyitem can reappear after save — looks like a platform-side persistence bug, not this listing.