feat(templates): add the inline wizard page template - #5797
Open
ernestt wants to merge 2 commits into
Open
Conversation
The third wizard shape, and the only one that keeps every step on the page. Steps stack in one column inside a vertical Stepper and expand in place; finished ones collapse back to a single row carrying their result and a way back in. That earns its keep when later steps depend on earlier ones, because the decision that broke something stays legible while you fix it. The flow is a continuous integration setup, chosen because it has a shape the other wizards cannot show: two steps of human setup, three that run themselves, and a review. The automatic steps advance on a timer and report progress in place through a nested Stepper — a sequence with a position in it, which is what Stepper already draws, so the connector fills check by check for free. The nested one runs `on-track` where the parent is separated: the parent rail marks how far down the form you are, this one is the run itself, and a thread should pass through its beads. The failure is reachable rather than decorative. End-to-end tests ask for 4 GB and the small runner has 2 GB, so turning that job on without sizing the runner up halts the trial run. The step that caused it is four rows up, still legible, one click from being fixed — which is the argument for this layout. Rubric 97/100 (A). The single custom declaration is a -28px inline-start pull on the nested Stepper, aligning its track under the parent indicator; there is no prop for that today. Co-authored-by: Cursor <cursoragent@cursor.com>
ernestt
requested review from
cixzhang,
imdreamrunner and
josephfarina
as code owners
August 31, 2026 22:23
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
PR Analysis Report📚 Storybook PreviewView Storybook for this PR 🧪 Sandbox PreviewView Sandbox for this PR No new or modified components detected. Bundle Size SummaryNo component packages changed. Accessibility AuditStatus: No accessibility violations detected. Generated by PR Enrichment workflow | Storybook | Sandbox | View full report |
The template doc declares `category: 'Form - Wizard Inline'`, which is not a member of the TemplateCategory union on main, so `typecheck:template-docs` failed the build-storybook job. Co-authored-by: Cursor <cursoragent@cursor.com>
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.
Sixth and last of the wizard family, and the only one that keeps every step on the page. Siblings: #5660, #5664, #5672.
Steps stack in one column inside a vertical
Stepperand expand in place. A finished step collapses back to a single row carrying its result and a way back in, so the whole flow stays readable at once. That earns its keep when later steps depend on earlier ones — the decision that broke something stays on screen while you fix it.The fixture is a continuous integration setup, picked because it has a shape the other wizards cannot show: two steps of human setup, three that run themselves, then a review.
Steps that run themselves
The automatic steps advance on a timer and report progress in place through a nested
Stepper. Sub-checks are a sequence with a position in it, which is whatStepperalready draws, so the connector fills check by check for free — noProgressBarsaying the same thing in a second visual language next to a line already built to say it. No core changes were needed: the running check usesStep's documented customindicatorslot with aSpinner.The nested stepper runs
on-trackwhere the parent stays separated, because the two lines mean different things. The parent's rail marks how far down the form you are; this one is the run itself, threading through each check as it lands, and a thread should pass through its beads.The tick is 800ms, sized to clear one full turn of the
Spinner(730ms at the default motion scale) — a check that resolves mid-rotation reads as a stutter rather than as work that finished.The failure is reachable
End-to-end tests ask for 4 GB and the small runner has 2 GB, so turning that job on without sizing the runner up halts the trial run. Nothing is hard-coded:
memoryGBlives on the job, so the message can name both numbers, and the outcome is derived from the pipeline as it currently stands.This is the layout arguing for itself. The step that caused the failure is four rows up, still legible, one click from being fixed. The banner offers one action and it is not a retry — running the same pipeline on the same runner again has only one possible outcome.
Going back into an earlier step throws away every automatic result from there on. They were computed against inputs that are now open for editing, and a green check above an edited field is a lie.
Review, and narrow
Collapsed rows hold one line down to 520px — the summary is
maxLines={1}inside a fillingStackItem, and the link never wraps.Accessibility
The automatic steps advance without anyone asking, which is a change of context. Focus deliberately stays put and a polite live region reports the hand-off instead — only on the transitions that matter, since a live region that fires constantly is worse than none.
Rows are clickable for navigation, so the "Edit" and "Run again" affordances are
Text, notButton: a clickableSteprenders its label row as a<button>, and a control nested inside one is neither valid HTML nor separately pressable. The row is the control. Runner choice is aRadioListrather than a card grid, so three mutually exclusive options announce as one choice.Rubric
97/100 — A.
Zero raw HTML elements, zero raw SVG, no images,
Layoutroot, single page. The three points come off Custom CSS for one declaration: a -28px inline-start pull on the nestedStepperso its track lands under the parent's indicator rather than 24px inside it. There is no prop for that today.Known limitation
Stepkeeps the flex min-width floor on its vertical body, its clickable button row, and its content slot — onlyiconLabelRowreleases it. Below roughly 500px that meansendContentand the step's children widen the row instead of shrinking inside it, so the column overflows horizontally. Releasingmin-widthon those three resolves it completely and nothing inside refuses to shrink. Not fixed here, since this PR is a template and the fix belongs in core.Test plan
prettier --checkandeslintclean on all three filespnpm -F docsite typecheckpasses;tsc --listFilesconfirms it reachespage.tsxMade with Cursor