shadcn.io is not affiliated with official shadcn/ui
Onboarding Welcome Dialog Block for React
A project planner's empty workspace with a four-step welcome dialog shown open that you can leave and resume: named dots as a tablist, a progress line, Back and Next, and a header button that reads Resume welcome, step 2 of 4.
Installation
Overview
Greet a new workspace without trapping anyone in a tour, with this welcome dialog for React with Base UI. It opens from Your workspace in Slatewright, a project planner: the page's header holds an outline Start welcome Button, and the app, a sidebar with a Help item beside an empty state that says no projects yet, is drawn under a soft scrim inside a hairline frame with a plus mark on each corner. The Dialog has four steps, Welcome, Your boards, Shortcuts and Invite, each a small drawn tile, a title and two lines. Named dots, a Tabs list, count them: each is a tab named like Step 2 of 4: Your boards, with a hairline Progress line under them, Back, a ghost Skip for now and the only Shine Button, Next, which reads Open my workspace on the last step. Closing at any point keeps your place, so the header button reads Resume welcome (step 2 of 4); finishing turns it into Welcome complete and the drawn empty state into Workspace ready. For preview the dialog is drawn open in place when the page loads; the header button opens the real Dialog.
FAQ
Why is the dialog already open, and what do I keep?
So you can see it without a click. On load the dialog is a copy drawn in place over the app: a native dialog element that isn't modal, so nothing is trapped, hidden or focused, and the page around the preview keeps working. The Start welcome button opens the real Dialog, modal, with its focus trap, Escape and focus return, and the copy stays closed until a reload. Both show the same WelcomeFields component and share the block's state, so the step you reached in the copy is the step the real one opens on. In your app keep the Dialog and drop the copy: the "in-place" state, the scrim and the dialog element inside the frame.
How does it remember where I was?
The step is part of the block's state and closing the dialog does not reset it. Close it on step 2 with the close button, Escape or Skip for now, and the header button reads Resume welcome (step 2 of 4); open it and you are on step 2. Finishing sets a done flag: the button reads Welcome complete, and opening it again starts over from step 1. In your app save the step with the user's profile so the welcome resumes on another device too.
What does Skip for now do?
It asks nothing. It closes the dialog, keeps your place and says where the welcome lives: "You can open this again from Help." The drawn workspace behind it repeats that under its empty state and rings its Help item. Nothing is stored in the demo; your app would remember the skip so it does not open the welcome by itself again.
How do the dots work?
They are a tab list: the arrow keys move between them and choose a step, Tab moves on to the panel and the buttons, and each dot is named by its step, such as Step 3 of 4: Shortcuts, with the count and the title also written beside them. The finished steps are drawn half solid and the current one solid. All four panels sit in one place, three of them unseen, so the dialog keeps its height whichever step shows.
What stays local in the demo, and how do I wire it up?
All of it. The steps, their words and the drawn tiles are typed here, and the place, the finished flag and the skip live in the block's state. In your app load the steps from your content, save progress on each step, and mark the welcome done on the last one.
Is it accessible from the keyboard?
Yes. The real dialog is named Welcome to Slatewright, focus starts inside and stays there until it closes, and Escape and the close button return focus to the header button. Next, Back and Skip for now are ordinary buttons, Back is quiet on the first step and says so when pressed, and a polite message announces each step. The trigger is passed to DialogTrigger through render, and the dialog is controlled with open and onOpenChange. The copy shown on load moves no focus; Escape inside it and its close button close it and put focus on the button.
Related
- Pro
Welcome Dialog Onboarding
Welcome and toursA planning board's first-run welcome: a dialog shown open over a drawn three-lane board, with a greeting, three things to try first, Start the tour and Explore on my own, and a Replay welcome button that opens the real dialog.
- Pro
Welcome Slides Carousel Onboarding
Welcome and toursA whole-screen intro for a bookkeeping app: four slides in a carousel, each a greyscale drawing over its title and sentence, named dots, Previous and Next, Skip, and a last slide where Next becomes Get started.
- Pro
Product Tour Onboarding
Welcome and toursA four-stop product tour over a drawn analytics dashboard: a coachmark points at the metrics, the segments, the report and the settings one at a time, with the part lit and the rest dimmed, and a Replay tour button that starts the real Tour.
- Pro
Setup Checklist Onboarding
ChecklistsA contract tool's get-started guide as a setup panel: six steps in a single-open accordion with one button in the open step, a count that follows what you finish, a menu that hides completed steps or the guide, and a pill that opens it again.
- Pro
Guided Walkthrough Onboarding
Welcome and toursA learn-by-doing walkthrough in a framed window: a drawn design-review app beside a docked guide of four tasks, where the control for the current task is ringed and doing it, by click or by key, opens the next.
- Pro
Streak Tracker Dialog
Time and schedulingA habit app's list with a daily check-in dialog shown open: a flame and the days in a row, a five-week calendar with this week's days large, milestones at 7, 14 and 30, and a check-in that moves the number.