Progress

Visual indicators for task completion, loading states, and multi-step processes.

Linear Progress

Basic Progress

Progress with Label

Property Upload 75%

Progress Sizes

Progress Colors

Primary 60%
Success 100%
Warning 45%
Error 25%

Striped & Animated

Circular Progress

Circular Variants

60%
75%
90%

Step Progress

Property Listing Process

Basic Info
Photos
3
Details
4
Pricing
5
Review

Real Estate Use Cases

Property Upload Progress

Uploading photos... 8 of 12

Lead Conversion Funnel

Initial Contact 100%
Property Viewing 75%
Offer Made 40%
Deal Closed 25%

Implementation Guide

HTML Structure

<!-- Linear Progress -->
<div class="lyd-progress">
    <div class="lyd-progress-linear">
        <div class="lyd-progress-bar" style="width: 60%"></div>
    </div>
</div>

<!-- Progress with Label -->
<div class="lyd-progress-wrapper">
    <div class="lyd-progress-header">
        <span class="lyd-progress-label">Loading...</span>
        <span class="lyd-progress-percent">60%</span>
    </div>
    <div class="lyd-progress-linear">
        <div class="lyd-progress-bar" style="width: 60%"></div>
    </div>
</div>

<!-- Step Progress -->
<div class="lyd-progress-steps">
    <div class="lyd-progress-steps-line" style="width: 50%"></div>
    <div class="lyd-progress-step completed">
        <div class="lyd-progress-step-dot">✓</div>
        <span class="lyd-progress-step-label">Step 1</span>
    </div>
    <!-- More steps... -->
</div>

React/Next.js Component

// components/Progress.tsx
interface ProgressProps {
  value: number;
  max?: number;
  label?: string;
  variant?: 'primary' | 'success' | 'warning' | 'error';
  size?: 'small' | 'medium' | 'large';
  striped?: boolean;
  animated?: boolean;
  showPercent?: boolean;
}

export const Progress = ({
  value,
  max = 100,
  label,
  variant = 'primary',
  size = 'medium',
  striped = false,
  animated = false,
  showPercent = false
}: ProgressProps) => {
  const percentage = Math.min(100, Math.max(0, (value / max) * 100));
  const sizeClass = size === 'small' ? 'small' : size === 'large' ? 'large' : '';
  const stripedClass = striped ? 'striped' : '';
  const animatedClass = animated ? 'animated' : '';
  
  return (
    <div className="lyd-progress-wrapper">
      {(label || showPercent) && (
        <div className="lyd-progress-header">
          {label && <span className="lyd-progress-label">{label}</span>}
          {showPercent && <span className="lyd-progress-percent">{percentage.toFixed(0)}%</span>}
        </div>
      )}
      <div className={`lyd-progress-linear ${sizeClass}`}>
        <div 
          className={`lyd-progress-bar ${variant} ${stripedClass} ${animatedClass}`}
          style={{ width: `${percentage}%` }}
        />
      </div>
    </div>
  );
};

API Reference

Class Description
.lyd-progress Base progress container
.lyd-progress-linear Linear progress track
.lyd-progress-bar Progress bar fill
.lyd-progress-circular Circular progress container
.lyd-progress-steps Step progress container
.lyd-progress-step Individual step
.small, .large Size variants
.striped Striped pattern
.animated Animated stripes
.success, .warning, .error Color variants