shadcn.io is not affiliated with official shadcn/ui
Horizontal Icons Stepper Block for Radix UI
A four-stage manuscript submission in hairline cells with an icon in each indicator, where Continue checks the stage and names what is missing.
Installation
Overview
Put a picture in every step, with this horizontal icon stepper for React with Radix UI. Four hairline cells under a plus-marked frame hold a Steps line whose indicators are lucide icons: a page for Manuscript, a pen for Cover note, a shield for Rights and a paper plane for Send. The open cell is tinted, and a finished stage swaps its icon for the check. Each stage has one real field: a title in an Input and a genre in a Select; a cover note in a Textarea with a character count; a Checkbox for first publication rights; and a read-back. Continue checks the stage first, says what is missing in the status line and in the space under the fields, and moves focus to it. It is the block's one Shine Button, and the last stage ends on "Sent in this demo". For submission, application and request flows.
FAQ
What does Continue check?
Stage one needs a title and a genre, the cover note needs at least 40 characters (the cap is 400), and the rights stage needs its box ticked. The rules are in problemOf, one function that returns the field to focus and the message. A refused press keeps the button pressable, writes the message to the polite status line and to a reserved slot under the fields, and focuses the field, so nothing moves.
How do I change the icons?
StageIcon returns the icon for each stage by its place in the list; swap any lucide icon there. The indicator keeps its size, so any icon at the catalog's icon size fits. When a stage is complete the catalog shows its check in place of the icon.
What stays local, and how do I send it for real?
The fields live in one entry object in component state, and nothing is sent: the last stage ends on "Sent in this demo". In your app, post entry from advance when the person presses the last button, show the request's state with the button's loading state, and put the reply in the final panel.
Can I jump ahead by pressing a cell?
Only to a stage you have already reached. Pressing a cell ahead of the current one runs the same check as Continue on the stage you are on, so a stage can't be skipped; pressing an earlier cell is free.