V1.0

Base Components

Progress Bar

A progress bar is a simple chart that can be used to show how complete something is.

Create a progress-bar.tsx file and paste the following code into it.

/components/ui/progress-bar.tsx
// AlignUI ProgressBar v0.0.0
 
import * as React from 'react';
 
import { tv, type VariantProps } from '@/utils/tv';
 
export const progressBarVariants = tv({
  slots: {
    root: 'h-1.5 w-full rounded-full bg-bg-soft-200',
    progress: 'h-full rounded-full transition-all duration-300 ease-out',
  },
  variants: {
    color: {
      blue: {
        progress: 'bg-information-base',
      },
      red: {
        progress: 'bg-error-base',
      },
      orange: {
        progress: 'bg-warning-base',
      },
      green: {
        progress: 'bg-success-base',
      },
    },
  },
  defaultVariants: {
    color: 'blue',
  },
});
 
type ProgressBarRootProps = React.HTMLAttributes<HTMLDivElement> &
  VariantProps<typeof progressBarVariants> & {
    value?: number;
    max?: number;
  };
 
const ProgressBarRoot = React.forwardRef<HTMLDivElement, ProgressBarRootProps>(
  ({ className, color, value = 0, max = 100, ...rest }, forwardedRef) => {
    const { root, progress } = progressBarVariants({ color });
    const safeValue = Math.min(max, Math.max(value, 0));
 
    return (
      <div ref={forwardedRef} className={root({ class: className })} {...rest}>
        <div
          className={progress()}
          style={{
            width: `${(safeValue / max) * 100}%`,
          }}
          aria-valuenow={value}
          aria-valuemax={max}
          role='progressbar'
        />
      </div>
    );
  },
);
ProgressBarRoot.displayName = 'ProgressBarRoot';
 
export { ProgressBarRoot as Root };

Update the import paths to match your project setup.

Examples

Color

With Label

80%

Advanced

Data Storage80%
to unlock unlimited date storage.

API Reference

ProgressBar.Root

The main component of the ProgressBar. It displays the progress with a colored bar inside a container. This component is based on the <div> element and supports all of its props and adds:

PropTypeDefault
color
"blue"|"red"|"orange"|"green"
"blue"
value
number
max
number
© 2024 AlignUI Design System. All rights reserved.