Progress

Accessible progress bar with size and variant options for visual feedback on task completion.

Preview

Basic progress

import { Progress } from '@/registry/ui-kit/tailwind-progress/react'

function Example() {
  return <Progress value={60} />
}

Component API

PropDefaultDescription
ProgressProgress bar with value (0-100), size (sm/md/lg), and variant (default/success/warning/danger).

Source Code

"use client";

import React from "react";

interface ProgressProps {
  value: number;
  size?: "sm" | "md" | "lg";
  variant?: "default" | "success" | "warning" | "danger";
  className?: string;
}

const sizeMap: Record<string, string> = {
  sm: "h-1.5",
  md: "h-2.5",
  lg: "h-4",
};

const variantMap: Record<string, string> = {
  default: "bg-indigo-600",
  success: "bg-emerald-500",
  warning: "bg-amber-500",
  danger: "bg-rose-500",
};

export function Progress({
  value,
  size = "md",
  variant = "default",
  className = "",
}: ProgressProps) {
  const clamped = Math.max(0, Math.min(100, value));

  return (
    <div
      className={`w-full overflow-hidden rounded-full bg-zinc-100 dark:bg-zinc-800 ${sizeMap[size]} ${className}`}
      role="progressbar"
      aria-valuenow={clamped}
      aria-valuemin={0}
      aria-valuemax={100}
    >
      <div
        className={`rounded-full transition-all duration-500 ${sizeMap[size]} ${variantMap[variant]}`}
        style={{ width: `${clamped}%` }}
      />
    </div>
  );
}