Skip to content

Table Seating Planner: listing UX fixes (setup wizard, print, undo/redo, in-place edits)#657

Merged
lucaslyl merged 14 commits into
mainfrom
cs-12106-tsp-ux
Jul 16, 2026
Merged

Table Seating Planner: listing UX fixes (setup wizard, print, undo/redo, in-place edits)#657
lucaslyl merged 14 commits into
mainfrom
cs-12106-tsp-ux

Conversation

@lucaslyl

@lucaslyl lucaslyl commented Jul 15, 2026

Copy link
Copy Markdown
Contributor

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

  • First-run setup wizard (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 real LayoutPreview SVG; 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.
  • Undo / redo — moved off the toolbar to a canvas top-right pill (curved-arrow boxel icons, gold hover, greyed when unavailable). ⌘Z / ⇧⌘Z already existed; this adds the visible affordance.
  • Sidebar dedup — the roster's triplicated "seated" status collapsed to one "X of Y" line + bar.
  • "Seated" → "Assigned" terminology across the UI.
  • Print — one Print button opens a popover with two options: place & table cards (paginate across pages — fixed card sizes, break-inside: avoid, un-clipped print container) or the seating chart (whole layout on one scaled overview page). printMode toggle; per-table print supported.
  • Place / table card views (card-views.gts) — shared PlaceCardView / TableCardView render both in-app and in the print sheet (single source of truth); no redundant stored CardDefs.
  • Guest isolated view is now in-place editable (name, category chips, VIP toggle).
  • Right-click a table opens its edit popover; right-click a fixture selects it (inspector edit).
  • Default new-table name<Shape> Table <n> (global index).
  • ImageSourceField edit redesigned compact + modern (segmented File/URL control, themeable --image-source-accent).
  • Host/guest removal matches by id (not reference) to avoid store-proxy identity mismatches.

Passes lint:js + lint:hbs + lint:types.

Not in this PR (follow-ups)

  • Action hierarchy toolbar restyle (Boxel Button tiers) — tracked under the UI refactor CS-12101.
  • A host/store-layer issue where removing a linksToMany item can reappear after save — looks like a platform-side persistence bug, not this listing.

lucaslyl added 8 commits July 15, 2026 13:21
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.
@github-actions

github-actions Bot commented Jul 16, 2026

Copy link
Copy Markdown

Staging Submissions Preview

This PR's content is pushed to the staging submissions realm: https://realms-staging.stack.cards/submissions/

Changed listings:

Changed folders:

  • 41e20f-wedding-table-seating-planner/

Updated at 2026-07-16 08:52:56 UTC for commit 39b3c59. Shared realm: content reflects whichever PR pushed last.

@lucaslyl lucaslyl changed the title Cs 12106 tsp ux Table Seating Planner: listing UX fixes (setup wizard, print, undo/redo, in-place edits) Jul 16, 2026
@lucaslyl
lucaslyl marked this pull request as ready for review July 16, 2026 02:57
@lucaslyl
lucaslyl requested a review from a team July 16, 2026 03:00
…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.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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/TableCardView components 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.

Comment thread fields/image-source/components/image-source-editor.gts Outdated
Comment thread 41e20f-wedding-table-seating-planner/guest.gts
Comment thread 41e20f-wedding-table-seating-planner/guest.gts
Comment thread 41e20f-wedding-table-seating-planner/components/tsp.gts
lucaslyl and others added 4 commits July 16, 2026 16:07
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>
@lucaslyl lucaslyl self-assigned this Jul 16, 2026
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.
@lucaslyl
lucaslyl merged commit 6a10a25 into main Jul 16, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants