Size
Use different sizes for context-appropriate indicators.
Color
Change the track and indicator colour using utility classes or custom CSS variables to match your design system.
Centered Content
Place content in the center of the circular progress if needed (for example, a numeric value).
Indeterminate
Use a null value to enable indeterminate mode.
Format
Use the format prop to customize the output of the ValueText component. Options include:
percentage(default)decimal(0.0 - 1.0)- Custom - via the Intl API .
 
Custom Value Text
Provide a custom renderer for the ValueText if you need to show a different layout or label.
API Reference
Root
flex flex-col gap-2 data-[orientation=horizontal]:w-full data-[orientation=vertical]:items-center| Prop | Default | Type | 
|---|---|---|
ids | — | Partial<{ root: string; track: string; label: string; circle: string; }> | undefined The ids of the elements in the progress bar. Useful for composition.  | 
value | — | number | null | undefined The controlled value of the progress bar.  | 
defaultValue | 50 | number | null | undefined The initial value of the progress bar when rendered. Use when you don't need to control the value of the progress bar.  | 
min | 0 | number | undefined The minimum allowed value of the progress bar.  | 
max | 100 | number | undefined The maximum allowed value of the progress bar.  | 
translations | — | IntlTranslations | undefined The localized messages to use.  | 
onValueChange | — | ((details: ValueChangeDetails) => void) | undefined Callback fired when the value changes.  | 
formatOptions | { style: "percent" } | NumberFormatOptions | undefined The options to use for formatting the value.  | 
locale | "en-US" | string | undefined The locale to use for formatting the value.  | 
dir | "ltr" | "ltr" | "rtl" | undefined The document's text/writing direction.  | 
getRootNode | — | (() => ShadowRoot | Node | Document) | undefined A root node to correctly resolve document in custom environments. E.x.: Iframes, Electron.  | 
orientation | "horizontal" | "horizontal" | "vertical" | undefined The orientation of the element.  | 
element | — | ((attributes: HTMLAttributes<"div">) => Element) | undefined Render the element yourself  | 
Provider
| Prop | Default | Type | 
|---|---|---|
value | — | ProgressApi<PropTypes> | 
element | — | ((attributes: HTMLAttributes<"div">) => Element) | undefined Render the element yourself  | 
Context
| Prop | Default | Type | 
|---|---|---|
children | — | (progress: ProgressApi<PropTypes>) => ReactNode | 
Label
whitespace-nowrap| Prop | Default | Type | 
|---|---|---|
element | — | ((attributes: HTMLAttributes<"div">) => Element) | undefined Render the element yourself  | 
ValueText
| Prop | Default | Type | 
|---|---|---|
element | — | ((attributes: HTMLAttributes<"span">) => Element) | undefined Render the element yourself  | 
Track
bg-surface-200-800 rounded-base overflow-hidden data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-2 data-[orientation=vertical]:w-2 data-[orientation=vertical]:h-[100px]| Prop | Default | Type | 
|---|---|---|
element | — | ((attributes: HTMLAttributes<"div">) => Element) | undefined Render the element yourself  | 
Range
h-full bg-surface-950-50 rounded-base data-[orientation=horizontal]:transition-[width] data-[orientation=horizontal]:data-[state=indeterminate]:animate-progress-linear-indeterminate-horizontal data-[orientation=vertical]:transition-[height] data-[orientation=vertical]:data-[state=indeterminate]:animate-progress-linear-indeterminate-vertical| Prop | Default | Type | 
|---|---|---|
element | — | ((attributes: HTMLAttributes<"div">) => Element) | undefined Render the element yourself  | 
Circle
| Prop | Default | Type | 
|---|---|---|
element | — | ((attributes: HTMLAttributes<"svg">) => Element) | undefined Render the element yourself  | 
CircleTrack
stroke-surface-200-800| Prop | Default | Type | 
|---|---|---|
element | — | ((attributes: HTMLAttributes<"circle">) => Element) | undefined Render the element yourself  | 
CircleRange
stroke-primary-500 transition-[stroke-dashoffset] ease-in-out data-[state=indeterminate]:animate-progress-circular-indeterminate| Prop | Default | Type | 
|---|---|---|
element | — | ((attributes: HTMLAttributes<"circle">) => Element) | undefined Render the element yourself  | 
Root
flex flex-col gap-2 data-[orientation=horizontal]:w-full data-[orientation=vertical]:items-center| Prop | Default | Type | 
|---|---|---|
ids | — | Partial<{ root: string; track: string; label: string; circle: string; }> | undefined The ids of the elements in the progress bar. Useful for composition.  | 
value | — | number | null | undefined The controlled value of the progress bar.  | 
defaultValue | 50 | number | null | undefined The initial value of the progress bar when rendered. Use when you don't need to control the value of the progress bar.  | 
min | 0 | number | undefined The minimum allowed value of the progress bar.  | 
max | 100 | number | undefined The maximum allowed value of the progress bar.  | 
translations | — | IntlTranslations | undefined The localized messages to use.  | 
onValueChange | — | ((details: ValueChangeDetails) => void) | undefined Callback fired when the value changes.  | 
formatOptions | { style: "percent" } | NumberFormatOptions | undefined The options to use for formatting the value.  | 
locale | "en-US" | string | undefined The locale to use for formatting the value.  | 
dir | "ltr" | "ltr" | "rtl" | undefined The document's text/writing direction.  | 
getRootNode | — | (() => ShadowRoot | Node | Document) | undefined A root node to correctly resolve document in custom environments. E.x.: Iframes, Electron.  | 
orientation | "horizontal" | "horizontal" | "vertical" | undefined The orientation of the element.  | 
element | — | Snippet<[HTMLAttributes<"div">]> | undefined Render the element yourself  | 
Provider
| Prop | Default | Type | 
|---|---|---|
value | — | () => ProgressApi<PropTypes> | 
element | — | Snippet<[HTMLAttributes<"div">]> | undefined Render the element yourself  | 
Context
| Prop | Default | Type | 
|---|---|---|
children | — | Snippet<[() => ProgressApi<PropTypes>]> | 
Label
whitespace-nowrap| Prop | Default | Type | 
|---|---|---|
element | — | Snippet<[HTMLAttributes<"div">]> | undefined Render the element yourself  | 
ValueText
| Prop | Default | Type | 
|---|---|---|
element | — | Snippet<[HTMLAttributes<"span">]> | undefined Render the element yourself  | 
Track
bg-surface-200-800 rounded-base overflow-hidden data-[orientation=horizontal]:w-full data-[orientation=horizontal]:h-2 data-[orientation=vertical]:w-2 data-[orientation=vertical]:h-[100px]| Prop | Default | Type | 
|---|---|---|
element | — | Snippet<[HTMLAttributes<"div">]> | undefined Render the element yourself  | 
Range
h-full bg-surface-950-50 rounded-base data-[orientation=horizontal]:transition-[width] data-[orientation=horizontal]:data-[state=indeterminate]:animate-progress-linear-indeterminate-horizontal data-[orientation=vertical]:transition-[height] data-[orientation=vertical]:data-[state=indeterminate]:animate-progress-linear-indeterminate-vertical| Prop | Default | Type | 
|---|---|---|
element | — | Snippet<[HTMLAttributes<"div">]> | undefined Render the element yourself  | 
Circle
| Prop | Default | Type | 
|---|---|---|
element | — | Snippet<[HTMLAttributes<"svg">]> | undefined Render the element yourself  | 
CircleTrack
stroke-surface-200-800| Prop | Default | Type | 
|---|---|---|
element | — | Snippet<[HTMLAttributes<"circle">]> | undefined Render the element yourself  | 
CircleRange
stroke-primary-500 transition-[stroke-dashoffset] ease-in-out data-[state=indeterminate]:animate-progress-circular-indeterminate| Prop | Default | Type | 
|---|---|---|
element | — | Snippet<[HTMLAttributes<"circle">]> | undefined Render the element yourself  |