Skip to content
shadcn.io

shadcn.io is not affiliated with official shadcn/ui

Circle Indicators Stepper Block for Radix UI

A music-theory course in four module cells with a progress ring each, where ticking lessons moves the ring and the course total, and modules open in any order.

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

Show how far along each part is, with this ring stepper for React with Radix UI. A plus-marked frame holds a Steps strip of four hairline cells for the modules of a course (Rhythm, Scales, Chords and Form). Each cell is a Circular Progress ring in foreground tones with the module number in its middle, which turns into a check at 100%, and under it the title and "3 of 5". The open module's five lessons are Checkbox rows; ticking one moves its ring and the course total at the top, "7 of 20 lessons", which is worked out from the ticks. Modules open in any order, so done is drawn per module rather than by position. "Next module" is the block's one Shine Button, and the last press shows a summary. On a phone the rings sit two by two. For courses, onboarding checklists and multi-part tasks.

FAQ

How do I change the modules and lessons?

Edit MODULES: each has an id, a title, an intro and its list of lessons. The rings, the counts, the total and the closing summary are all derived from the lessons and the ticks array. START is what the student has ticked when the page opens: put their saved progress there, or empty it.

Why does the ring not follow the step?

Because a student can do the modules in any order, so a finished module is one with all its lessons ticked, not one before the open step. The block uses the Steps parts for the tabs, keys and panels, and draws the ring and check itself; the catalog's own indicator would show a check for every module before the open one.

What stays local?

The ticks are component state and are lost on reload; nothing is sent to a teacher. The closing panel says so. To make it real, send the key of each tick to your API from toggle and read the saved set into START (or the initial state).

What does a screen reader hear?

The rings are decorative. Each cell is a button named by its module title, with its count ("3 of 5") read next to it, and the polite status line reads "Module 2 of 4: Scales, 3 of 5 lessons" and updates as you tick, so the effect of a tick is heard. Lessons are checkboxes with their own labels.

How does the keyboard work?

The cells are one tab stop on the open module. Arrow keys move between the modules, Home and End jump to the ends and Enter or Space opens the focused one; nothing is disabled, because the order is free. Focus goes to the module's heading after you move.

How does it look on a phone?

The four rings sit two by two, then the lessons of the open module as full-width rows, and the foot stays pinned with Back and Next module.