apps/docs/content/docs/en/react/migration/(components)/progress.mdx
Progress has been renamed to ProgressBar in v3.
In v2, Progress was a single component configured with props:
import { Progress } from "@heroui/react";
export default function App() {
return (
<Progress label="Loading..." value={60} />
);
}
In v3, ProgressBar uses a compound component pattern:
import { ProgressBar, Label } from "@heroui/react";
export default function App() {
return (
<ProgressBar value={60}>
<Label>Loading...</Label>
<ProgressBar.Output />
<ProgressBar.Track>
<ProgressBar.Fill />
</ProgressBar.Track>
</ProgressBar>
);
}
v2: Single Progress component with all parts rendered internally
v3: Compound components: ProgressBar, ProgressBar.Output, ProgressBar.Track, ProgressBar.Fill, plus external Label
v2: default, primary, secondary, success, warning, danger
v3: default, accent, success, warning, danger
| v2 Prop | v3 Equivalent | Notes |
|---|---|---|
value | value | Same |
minValue | minValue | Same |
maxValue | maxValue | Same |
isIndeterminate | isIndeterminate | Same |
formatOptions | formatOptions | Same |
size | size | Same (sm, md, lg) |
color | color | primary → accent, secondary removed |
label | - | Use Label component |
valueLabel | valueLabel | Same |
showValueLabel | - | Include or omit ProgressBar.Output |
radius | - | Removed (use Tailwind CSS) |
isStriped | - | Removed (use Tailwind CSS on ProgressBar.Fill) |
isDisabled | - | Removed |
disableAnimation | - | Removed |
classNames | - | Use className on individual compound components |
<Tabs items={["v2", "v3"]}> <Tab value="v2"> ```tsx import { Progress } from "@heroui/react";
<Progress label="Loading..." value={60} color="primary" />
```
<ProgressBar value={60} color="accent">
<Label>Loading...</Label>
<ProgressBar.Output />
<ProgressBar.Track>
<ProgressBar.Fill />
</ProgressBar.Track>
</ProgressBar>
```
<Tabs items={["v2", "v3"]}>
<Tab value="v2">
tsx <Progress isIndeterminate aria-label="Loading..." size="sm" />
</Tab>
<Tab value="v3">
tsx <ProgressBar isIndeterminate aria-label="Loading..." size="sm"> <ProgressBar.Track> <ProgressBar.Fill /> </ProgressBar.Track> </ProgressBar>
</Tab>
</Tabs>
<Tabs items={["v2", "v3"]}>
<Tab value="v2">
tsx <Progress aria-label="Loading..." value={70} />
</Tab>
<Tab value="v3">
tsx <ProgressBar aria-label="Loading..." value={70}> <ProgressBar.Track> <ProgressBar.Fill /> </ProgressBar.Track> </ProgressBar>
</Tab>
</Tabs>
<Tabs items={["v2", "v3"]}>
<Tab value="v2">
tsx <Progress label="Budget" formatOptions={{ style: "currency", currency: "USD" }} maxValue={10000} value={4000} />
</Tab>
<Tab value="v3">
tsx <ProgressBar formatOptions={{ style: "currency", currency: "USD" }} maxValue={10000} value={4000} > <Label>Budget</Label> <ProgressBar.Output /> <ProgressBar.Track> <ProgressBar.Fill /> </ProgressBar.Track> </ProgressBar>
</Tab>
</Tabs>
classNames Prop<Progress
classNames={{
base: "custom-base",
track: "custom-track",
indicator: "custom-fill",
label: "custom-label",
value: "custom-value",
}}
/>
className Props<ProgressBar className="custom-base" value={60}>
<Label className="custom-label">Loading</Label>
<ProgressBar.Output className="custom-value" />
<ProgressBar.Track className="custom-track">
<ProgressBar.Fill className="custom-fill" />
</ProgressBar.Track>
</ProgressBar>
ProgressBar (Root)
├── Label (optional)
├── ProgressBar.Output (optional, formatted value display)
└── ProgressBar.Track
└── ProgressBar.Fill
Progress → ProgressBarProgressBar.Output, ProgressBar.Track, ProgressBar.Fill)label prop → Label componentshowValueLabel prop → include or omit ProgressBar.Outputprimary → accent, secondary removedradius, isStriped, isDisabled, disableAnimation → use Tailwind CSSclassName on individual compound components