Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Numbered Onboarding Steps Banner Block for React

An interactive five-step setup checklist as a card in card: Start completes the next step and the button moves down a row, with a live count and an All set state.

Framework
UI library

Preview

Preview width

Installation

Part of Pro
Pro unlocks the code and one-line install of every Pro button and text effect, plus the MCP for your AI editor.
Have Pro already? Sign in to open it.Opens here as soon as you're Pro.

Overview

A numbered onboarding checklist banner for React with Base UI, for the first minutes in a new product. A muted shell with + marks on its corners wraps a raised panel: a header with "Setup checklist" and a live "3 / 5 done", then an ordered list of five rows, each 40 px tall. A finished step shows a filled check and a struck-through title; the others show their number, and only the next step carries a ghost Start button. Pressing it completes the step, the button moves down a row and focus goes with it. After the last step the header says "All set". It's built from Button and Guides, and it follows your theme.

FAQ

How do I change the steps and the starting point?

Edit STEPS, the titles in order, and INITIAL, how many are done when the page loads (3 here, so the demo shows a checklist already under way). A step is done when its index is below the count, so the list can only be finished in order.

How do I make Start do something?

The start handler only adds one to the count. Put your real work there: open the step's page, call your API, then raise the count when it succeeds. If the steps are completed elsewhere, drive done from your user's progress instead of the button.

Where does keyboard focus go after Start?

The button you pressed is replaced by the next row's, so focus moves to that Start button, and Tab carries on from there. After the last step there is no button, so focus goes to a line that only screen readers see ("All five steps are done."), and Start over appears in the header.

What do screen readers hear?

The count is a polite live region: pressing Start announces "4 / 5 done", and finishing announces "All set". Each row says its state in words ("Done: Create a workspace", "Next: Run a first build"), the current step is marked aria-current="step", and the Start button's name includes its step ("Start: Run a first build").

Why is it a fixed height?

Every row is 40 px and the header is 48 px in every state, so completing a step, the count changing to "All set" and the Start over button all happen without moving the page. Keep titles to one line: they truncate rather than wrap.

How does it fit on a phone?

The card shrinks to the screen, with titles of about 20 characters or fewer fitting beside the Start button at 320 pixels. In a right-to-left layout the number moves to the start and the button to the end of each row.

  • Pro

    Numbered Steps Banner

    Numbered lists

    A setup tracker for a workspace tool: four numbered steps in a row joined by a line, finished ones checked, the current one ringed, and a Resume button under it.

  • Pro

    Expandable Timeline Banner

    Disclosures and tabs

    A parcel notice for a tracking product as a disclosure: a header that names the current stage and its step, and a vertical four-step timeline when opened.

  • Pro

    A weekly digest band for a product-updates tool: a quiet title and count, then three numbered announcements on hairlines, each row one link with a trailing arrow.

  • Pro

    A setting callout for an uptime monitor: a card in card with a bell icon, a heading and a sentence, and an Off or On label beside a switch that rewrites the sentence and lights a status dot.

  • Pro

    An acknowledge-once callout for a newsletter platform: a card in card with an info icon, a heading, one sentence and a footer whose checkbox rewrites the outline button from Got it to Dismiss permanently.

  • Pro

    An export job in one row for an invoicing tool: a thin progress bar with its percentage and seconds left that fills once and turns into a Download button, with Cancel and Run again.