diff --git a/aef6db-stepper/ComponentListing/a5cbb429-b363-4b8b-b07a-a2b1026120b0.json b/aef6db-stepper/ComponentListing/a5cbb429-b363-4b8b-b07a-a2b1026120b0.json new file mode 100644 index 00000000..5ce2901a --- /dev/null +++ b/aef6db-stepper/ComponentListing/a5cbb429-b363-4b8b-b07a-a2b1026120b0.json @@ -0,0 +1,83 @@ +{ + "data": { + "meta": { + "adoptsFrom": { + "name": "ComponentListing", + "module": "@cardstack/catalog/catalog-app/listing/listing" + } + }, + "type": "card", + "attributes": { + "name": "Stepper UI", + "summary": "The Stepper component provides a multi-step flow shell for first-run wizards, onboarding journeys, and setup checklists — a guideline book that walks the user through what to fill in, in what order, before they start using an app. It renders a vertical step rail (numbered dots, checkmark done states, active ring, connector lines) beside the active step's content pane, closed out by a Back / Skip / Next action bar built from boxel-ui Button. The host supplies step definitions and per-step content through named blocks while the component owns the step state machine: gating Next on per-step isComplete wired to host state, MUI-style optional steps that surface a Skip button, onStepChange enter hooks for lazy loading, and optional rail click-to-jump. It supports an inline bordered-card mode and a modal mode (scrim plus centered card) for first-run experiences, a header with kicker, title, and an outlined-circle close button, and a fully replaceable actions block. Theming is driven by the linked theme: every color, font, and radius resolves --stepper-* override knob, then theme semantic token (the --primary / --primary-foreground pair drives the accent fills, their on-fill content, and the Next button), then neutral Boxel-token defaults — link a Theme card or Brand Guide and the whole stepper restyles with no stepper-specific work.", + "cardInfo": { + "name": "Stepper UI", + "notes": null, + "summary": null, + "cardThumbnailURL": null + } + }, + "relationships": { + "skills": { + "links": { + "self": null + } + }, + "tags.0": { + "links": { + "self": "../../Tag/card" + } + }, + "license": { + "links": { + "self": null + } + }, + "specs.0": { + "links": { + "self": "../Spec/stepper" + } + }, + "specs.1": { + "links": { + "self": "../Spec/stepper-playground-example" + } + }, + "specs.2": { + "links": { + "self": "../../Spec/code-snippet" + } + }, + "images.0": { + "links": { + "self": "../Screenshots/c76678a0-a2ee-4142-a3d7-a9f537df7c52-d5ab6927.png" + } + }, + "publisher": { + "links": { + "self": null + } + }, + "examples.0": { + "links": { + "self": "../example/StepperPlayground/c76678a0-a2ee-4142-a3d7-a9f537df7c52" + } + }, + "categories.0": { + "links": { + "self": "../../Category/ui-components-design" + } + }, + "cardInfo.theme": { + "links": { + "self": null + } + }, + "cardInfo.cardThumbnail": { + "links": { + "self": "../Screenshots/c76678a0-a2ee-4142-a3d7-a9f537df7c52-d5ab6927.png" + } + } + } + } +} diff --git a/aef6db-stepper/Screenshots/c76678a0-a2ee-4142-a3d7-a9f537df7c52-d5ab6927.png b/aef6db-stepper/Screenshots/c76678a0-a2ee-4142-a3d7-a9f537df7c52-d5ab6927.png new file mode 100644 index 00000000..00d4267f Binary files /dev/null and b/aef6db-stepper/Screenshots/c76678a0-a2ee-4142-a3d7-a9f537df7c52-d5ab6927.png differ diff --git a/aef6db-stepper/Spec/stepper-playground-example.json b/aef6db-stepper/Spec/stepper-playground-example.json new file mode 100644 index 00000000..91947b3e --- /dev/null +++ b/aef6db-stepper/Spec/stepper-playground-example.json @@ -0,0 +1,45 @@ +{ + "data": { + "meta": { + "adoptsFrom": { + "name": "Spec", + "module": "@cardstack/base/spec" + } + }, + "type": "card", + "attributes": { + "ref": { + "name": "StepperPlayground", + "module": "../example/stepper-playground-example" + }, + "readMe": "## Stepper Playground\n\nA config explorer for ``. Live preview on top, knobs for `@modal` (inline vs scrim + centered card) and `@allowStepJump` below it, then the generated invocation and the full API reference. Colors, fonts, and radius come from the linked theme (cardInfo.theme) via the semantic tokens (`--primary` / `--primary-foreground`, `--foreground`, `--muted`, `--card`, `--border`, `--radius`, `--font-sans`) — link a different Theme card and the whole stepper restyles with no stepper-specific work.\n\nThe live 4-step demo's completion gating is REAL: step 1 completes when you type a name, step 2 when you pick a workspace — exactly how a product wires `isComplete` to its own state. Step 3 sets `optional: true` so a Skip button appears (MUI-style); the steps before it are linear. The last step shows the `@finishLabel` / `@onFinish` primary button, and an event line above the stage prints every `onStepChange` / `onClose` / `onFinish` as it fires.\n\nThis is the **teaching example** for the Stepper API — the generated-code panel prints the exact invocation for the current knob combination.", + "cardInfo": { + "name": null, + "notes": null, + "summary": null, + "cardThumbnailURL": null + }, + "specType": "card", + "cardTitle": "Stepper Playground", + "cardDescription": "A live config explorer for — modal and step-jump knobs over a real gated 4-step demo that follows the linked theme, with the generated invocation printed alongside. The teaching example for the Stepper API.", + "containedExamples": [] + }, + "relationships": { + "cardInfo.theme": { + "links": { + "self": null + } + }, + "linkedExamples.0": { + "links": { + "self": "../example/StepperPlayground/c76678a0-a2ee-4142-a3d7-a9f537df7c52" + } + }, + "cardInfo.cardThumbnail": { + "links": { + "self": null + } + } + } + } +} diff --git a/aef6db-stepper/Spec/stepper.json b/aef6db-stepper/Spec/stepper.json new file mode 100644 index 00000000..2014bc9b --- /dev/null +++ b/aef6db-stepper/Spec/stepper.json @@ -0,0 +1,45 @@ +{ + "data": { + "meta": { + "adoptsFrom": { + "name": "Spec", + "module": "@cardstack/base/spec" + } + }, + "type": "card", + "attributes": { + "ref": { + "name": "default", + "module": "../stepper" + }, + "readMe": "## Stepper\n\nA general multi-step flow shell — the \"guideline book\" that walks a user through a journey (a first-run wizard, an onboarding flow, a setup checklist) *before* they start using an app. Two-pane layout: a vertical step rail on the left (numbered dots, ✓ done state, active ring, connector lines) and the active step's content on the right, closed out by a Back / Skip / Next action bar built from boxel-ui `