Files
convert-ui/components/ui/Progress.tsx

34 lines
945 B
TypeScript
Raw Normal View History

import * as React from 'react';
import { cn } from '@/lib/utils/cn';
export interface ProgressProps {
value: number;
max?: number;
className?: string;
showLabel?: boolean;
}
const Progress = React.forwardRef<HTMLDivElement, ProgressProps>(
({ value, max = 100, className, showLabel = false }, ref) => {
const percentage = Math.min(Math.max((value / max) * 100, 0), 100);
return (
<div ref={ref} className={cn('w-full', className)}>
<div className="relative h-4 w-full overflow-hidden rounded-full bg-secondary">
<div
className="h-full bg-primary transition-all duration-300 ease-in-out"
style={{ width: `${percentage}%` }}
/>
</div>
{showLabel && (
<div className="mt-1 text-xs text-muted-foreground text-right">{Math.round(percentage)}%</div>
)}
</div>
);
}
);
Progress.displayName = 'Progress';
export { Progress };