> ## Documentation Index
> Fetch the complete documentation index at: https://api.fanvue.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# ProgressBar

> A horizontal progress indicator with optional title, completion percentage, step count, and helper text.

```tsx theme={null}
import { ProgressBar, ProgressBarItem, ProgressBarSteps } from "@fanvue/ui";
import type {
  ProgressBarItemProps,
  ProgressBarItemSize,
  ProgressBarItemVariant,
  ProgressBarProps,
  ProgressBarSize,
  ProgressBarStepsProps,
  ProgressBarVariant,
} from "@fanvue/ui";
```

## Examples

## Default

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-progressbar--default&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="220" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ProgressBar — Default" />
</Frame>

```tsx theme={null}
import { ProgressBar } from "@fanvue/ui";

<ProgressBar className="w-[300px]" value={60} />
```

## With Completion

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-progressbar--with-completion&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="220" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ProgressBar — With Completion" />
</Frame>

```tsx theme={null}
import { ProgressBar } from "@fanvue/ui";

<ProgressBar
  className="w-[300px]"
  value={50}
  title="Upload Progress"
  showCompletion
/>
```

## All Variants

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-progressbar--all-variants&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="220" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ProgressBar — All Variants" />
</Frame>

```tsx theme={null}
import { ProgressBar } from "@fanvue/ui";

<div className="flex flex-col gap-6">
  {(["default", "brand", "mono", "generic", "neutral"] as const).map((variant) => (
    <div key={variant} className="flex flex-col gap-2">
      <span className="typography-description-12px-semibold text-content-tertiary">
        {variant}
      </span>
      <ProgressBar className="w-[300px]" value={60} variant={variant} />
      <ProgressBar className="w-[300px]" value={60} variant={variant} size="small" />
    </div>
  ))}
</div>
```

## Full Featured

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-progressbar--full-featured&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="220" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ProgressBar — Full Featured" />
</Frame>

```tsx theme={null}
import { InfoCircleIcon, ProgressBar } from "@fanvue/ui";

<ProgressBar
  className="w-[300px]"
  value={75}
  title="Profile Setup"
  showCompletion
  stepsLabel="6/8 steps"
  helperLeft="Almost there!"
  helperRight="75% complete"
  leftIcon={<InfoCircleIcon className="size-4" />}
/>
```

## With Steps

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-progressbar--with-steps&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="220" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ProgressBar — With Steps" />
</Frame>

```tsx theme={null}
import { ProgressBar } from "@fanvue/ui";

<ProgressBar
  className="w-[300px]"
  value={25}
  title="Profile Completion"
  stepsLabel="2/8 steps"
/>
```

## ProgressBarSteps — Brand

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-progressbarsteps--brand&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="220" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ProgressBarSteps — Brand" />
</Frame>

```tsx theme={null}
import { ProgressBarSteps } from "@fanvue/ui";

<ProgressBarSteps className="w-[300px]" steps={4} value={1} variant="brand" />
```

## ProgressBarSteps — Brand Small

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-progressbarsteps--brand-small&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="220" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ProgressBarSteps — Brand Small" />
</Frame>

```tsx theme={null}
import { ProgressBarSteps } from "@fanvue/ui";

<ProgressBarSteps
  className="w-[300px]"
  steps={4}
  value={1}
  variant="brand"
  size="small"
/>
```

## ProgressBarSteps — Mono

<Frame>
  <iframe src={"https://main--697a1b6dd4dad73ee9c0e5f5.chromatic.com/iframe.html?id=components-progressbarsteps--mono&viewMode=story&shortcuts=false&singleStory=true&globals=theme:light"} width="100%" height="220" style={{border: "none", borderRadius: "8px"}} loading="lazy" title="ProgressBarSteps — Mono" />
</Frame>

```tsx theme={null}
import { ProgressBarSteps } from "@fanvue/ui";

<ProgressBarSteps className="w-[300px]" steps={4} value={1} variant="mono" />
```

## Props

## ProgressBar

A horizontal progress indicator with optional title, completion percentage, step count, and helper text. The bar colour reflects progress when using the `"default"` variant.

<ParamField path="value" type="number" required>
  Current progress value, clamped to 0–100.
</ParamField>

<ParamField path="ariaLabel" type="string" default="Progress">
  Accessible label for the `progressbar` role.
</ParamField>

<ParamField path="ariaValueText" type="string">
  Human-readable text alternative for the current value (e.g. "Step 3 of 5").
</ParamField>

<ParamField path="helperLeft" type="ReactNode">
  Helper content at the bottom-left of the bar.
</ParamField>

<ParamField path="helperRight" type="ReactNode">
  Helper content at the bottom-right of the bar.
</ParamField>

<ParamField path="leftIcon" type="ReactNode">
  Icon shown at the bottom-left before the helper text.
</ParamField>

<ParamField path="showCompletion" type="boolean" default="false">
  Whether to display the completion percentage above the track.
</ParamField>

<ParamField path="size" type="&#x22;small&#x22; | &#x22;default&#x22; | &#x22;medium&#x22;" default="default">
  Track height — `"default"` (12px), `"medium"` (8px) or `"small"` (6px).
</ParamField>

<ParamField path="stepsLabel" type="ReactNode">
  Steps label shown at the top-right (e.g. `"2/8 steps"`).
</ParamField>

<ParamField path="title" type="ReactNode">
  Title content shown at the top-left of the bar.
</ParamField>

<ParamField path="variant" type="&#x22;neutral&#x22; | &#x22;default&#x22; | &#x22;brand&#x22; | &#x22;mono&#x22; | &#x22;sky&#x22; | &#x22;generic&#x22;" default="default">
  Colour mode. Prefer `"brand"` or `"mono"` (V2); `"default"`/`"generic"`/`"neutral"` are legacy.
</ParamField>

## ProgressBarItem

A single rounded segment used to compose a stepped progress indicator. Render a row of these (see `ProgressBarSteps`) to represent discrete steps.

<ParamField path="active" type="boolean" default="false">
  Whether this item is filled (completed).
</ParamField>

<ParamField path="size" type="&#x22;small&#x22; | &#x22;default&#x22;" default="default">
  Pill thickness — `"default"` (8px) or `"small"` (4px).
</ParamField>

<ParamField path="variant" type="&#x22;brand&#x22; | &#x22;mono&#x22;" default="brand">
  Colour mode.
</ParamField>

## ProgressBarSteps

A segmented (stepped) progress indicator built from `ProgressBarItem` pills. Fills the first `value` of `steps` segments.

<ParamField path="steps" type="number" required>
  Total number of steps (segments). Values below 1 are treated as 1.
</ParamField>

<ParamField path="value" type="number" required>
  Number of completed steps, clamped to `0`–`steps`.
</ParamField>

<ParamField path="ariaLabel" type="string" default="Progress">
  Accessible label for the `progressbar` role.
</ParamField>

<ParamField path="ariaValueText" type="string">
  Human-readable text alternative for the current value (e.g. "Step 2 of 4").
</ParamField>

<ParamField path="size" type="&#x22;small&#x22; | &#x22;default&#x22;" default="default">
  Pill thickness — `"default"` (8px) or `"small"` (4px).
</ParamField>

<ParamField path="variant" type="&#x22;brand&#x22; | &#x22;mono&#x22;" default="brand">
  Colour mode.
</ParamField>

## Exported types

Also exported from `@fanvue/ui`: `ProgressBarItemProps`, `ProgressBarItemSize`, `ProgressBarItemVariant`, `ProgressBarProps`, `ProgressBarSize`, `ProgressBarStepsProps`, `ProgressBarVariant`.

***

**Setup:** [Installation](/docs/ui/installation) · [Theming](/docs/ui/theming)
