Checkout Progress
motiq/checkout-progressFreeComponent
An app-controlled multi-step checkout progress/orchestration surface (not a payment processor) — current + completed + editable steps, per-step validation + blocked reasons, async step save, return-to-previous, error/progress summaries, sticky order-summary slot, and optional guest/account modes. Never collects or processes payment; no fake processing progress.
Live preview
live · rendered by the registry
Rendered by motiq on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://www.motiq.dev/r/checkout-progress.jsonSource
1"use client";23import * as React from "react";4import { motion, AnimatePresence, type Transition } from "motion/react";56import { cn } from "@/lib/utils";7import {8 useReducedMotion,9 useAsyncStatus,10 statusVars,11 type StatusTone,12} from "@/lib/motiq";1314/* --------------------------------------------------------------------------15 * CheckoutProgress — a presentation + orchestration surface for an app-owned,16 * multi-STEP checkout flow (Cart → Customer details → Delivery → Billing →17 * Payment → Review → Confirmation, or whatever steps the app defines). It shows18 * where the shopper is, which steps are done and editable, which step needs19 * attention, and drives navigation between steps.20 *21 * It is NOT a payment processor, a cart, or a full checkout page: it never22 * collects card data, prices an order, charges anything, or talks to a payment23 * provider. The host application owns every fact — the steps, their validity,24 * blocked reasons, the order summary, and the actual save/submit work — and25 * hands them in. The "Payment" step here is just another step whose completion26 * the app reports; a real card field / payment element is the app's own27 * `children` for that step, rendered through `renderStep`.28 *29 * What earns its keep over a row of numbered circles: editable completed steps30 * (jump back to change an earlier answer), per-step validation with an error31 * summary that links to the offending step, an app-owned blocked-step reason, an32 * honest async "saving" state for a step (no fabricated progress bar), a33 * checkout-level lifecycle (editing → validating → submitting → processing →34 * completed | failed | cancelled), a sticky order-summary integration slot, a35 * mobile compact summary, and fully controlled navigation callbacks.36 *37 * Accessibility: an ordered <ol> of steps with `aria-current="step"` on the38 * active one; status is always conveyed by icon + text, never colour alone;39 * blocked/invalid reasons are exposed to assistive tech; an error summary40 * receives focus on an invalid advance; focus moves to the active step's41 * heading after every step change; Previous/Next/Save are real keyboard-operable42 * <button>s; ≥44px touch targets; a polite live region announces transitions;43 * and under prefers-reduced-motion every transition renders in its final state.44 * Clean-room original.45 * ----------------------------------------------------------------------- */4647// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from motiq
All 100 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| Activity Streamactivity-stream | motiq | Components | Free | 1 dep | |
| Adaptive Safe-Zone Gridadaptive-safe-zone-grid | motiq | Components | Free | no deps | |
| Agent Run Timelineagent-run-timeline | motiq | Components | Free | 1 dep | |
| AI Response Streamai-response-stream | motiq | Components | Free | 1 dep | |
| Animated Accordionanimated-accordion | motiq | Components | Free | 2 deps | |
| Animated Buttonanimated-button | motiq | Components | Free | 1 dep | |
| Animated Dialoganimated-dialog | motiq | Components | Free | 2 deps | |
| Animated Gridanimated-grid | motiq | Components | Free | 2 deps |
