Getting Started
App Providerglobal.d.tsThemesTypes
cn(...args)Text ParserUnits Converters
AnchorAvatarBreadcrumbBurgerButtonCardCarouselCheckerCodeColor PickerCommandConfettiCopyButtonDouble Helix WordsFloating IndicatorGroupHighlight TextIndicatorInputKbdLabelLoaderPaginationPassword RequirementPolymorphic SlotProgressProseRatingRunning AreaScroll AreaSheetsSkeletonSliderStackSvgTableTabsTextareaTimelineTimesToasterTooltipTyping WordsTypography
useClickOutsideuseClipboarduseDeviceInfouseDialoguseDidUpdateuseDirectionuseDisclosureuseDocumentTitleuseDocumentVisibilityuseElementInfouseEyeDropperuseFetchuseFullscreenuseGeoLocationuseHotkeysuseHoveruseIduseImagePopupuseInputStateuseIntersectionuseIntervaluseIsomorphicEffectuseListStateuseLocalStorageuseMeasureScrollbaruseMediaQueryuseMergedRefuseMouseuseMoveuseMutationObserveruseNetworkuseOpenStateuseOrientationuseOSusePaginationusePWAInstalleruseRandomColorsuseReducedMotionuseReloaduseResizeObserveruseScrollIntoViewuseStateHistoryuseTimeoutuseTouchuseTriggeruseUncontrolleduseValidatedStateuseViewportSizeuseWindowEventuseWindowScroll
Docs
Web
Components
Progress
Polymorphic Slot

A dynamic slot component for rendering flexible and customizable child elements.

Prose

A content wrapper that applies beautiful and readable typographic styling to its children.


Edit this page on GitHub
  • Started
  • Utilities
  • Configuration
  • Components
  • Hooks
  • Examples
  • Github
  • Contributing
⌘+J

© 2025 oeri rights MIT


Designed in Earth-616

Built by oeri

Progress

A flexible progress bar component that visually indicates task completion and supports multiple sections for complex progress tracking.

Usage

Basic usage example to quickly see how the Progress works.

Details
Address
Important
"use client";
import React from "react";
import { Progress, type ProgressProps } from "@/ui/progress";

export function ProgressDemo() {
  const [progress, setProgress] = React.useState({ details: 0, address: 0, important: 0, animated: true });

  React.useEffect(() => {
    const timer = setTimeout(() => setProgress(p => ({ ...p, details: 35, address: 28, important: 25 })), 500);
    return () => clearTimeout(timer);
  }, []);

  React.useEffect(() => {
    const timer = setTimeout(() => setProgress(p => ({ ...p, animated: false })), 2850);
    return () => clearTimeout(timer);
  }, []);

  return (
    <Progress size={16} transitionDuration={2000} animated={progress.animated} classNames={{ root: "m-auto max-w-2xl", label: "text-white" }}>
      <Progress.Section value={progress.details} color="#0c8599">
        <Progress.Label label="Details" />
      </Progress.Section>
      <Progress.Section value={progress.address} color="#c2255c">
        <Progress.Label label="Address" />
      </Progress.Section>
      <Progress.Section value={progress.important} label="Important" color="#e8590c" />
    </Progress>
  );
}

Properties

Interactive configurator to explore customization options for the Progress component.

Size
Value
Color
"use client";
import React from "react";
import { Progress, type ProgressProps } from "@/ui/progress";

export function ProgressDemo(props: ProgressProps) {
  return <Progress value={20} color="#3b82f6" />;
}

API References

type ProgressState = "complete" | "indeterminate" | "loading";

Attributes

Data AttributesValuesAnnotation
["data-state"]ProgressStateavailable on Root & Section
["data-value"]Current valueavailable on Root & Section
["data-min"]Min valueavailable on Root & Section
["data-max"]Max valueavailable on Root & Section
["data-striped"]"true" | undefinedavailable on Section
["data-animated"]"true" | undefinedavailable on Section
Aria AttributesValuesAnnotation
["aria-label"]label propavailable on Section
["aria-valuemin"]Min valueavailable on Section
["aria-valuemax"]Max valueavailable on Section
["aria-valuenow"]Current valueavailable on Section
["aria-valuetext"]Current value + "%"available on Section

Styles API

Styles APITypeDefaultAnnotation
classNames?Partial<Record<Selector, string>>undefined---
styles?Partial<Record<Selector, CSSProperties>>undefined---

Props API

Props APITypeDefaultAnnotation
valuenumber---Value of the progress
color?Color | ((value: number) => Color)---Key of colors or any valid CSS value
striped?booleanfalseDetermines whether the section should have stripes
animated?booleanfalseDetermines whether the sections stripes should be animated, if set, striped prop is ignored.
size?(string & {}) | numberControls track height.
round?(string & {}) | number9999pxKey of radius or any valid CSS value to set border-radius.
transitionDuration?number100Controls sections width transition duration, value is specified in ms.

Source Codes

Full working code example, including necessary markup and styles. You can copy and paste this code directly to start using the component immediately.

progress.tsx