Everything core ships for showing "how far along": the progress bar (with an optional caption row), the progress ring and the stacked bar. Play with the bar in the playground first, then compare the shapes below.

Playground

Generated markup

                

Progress bar: sizes

Progress bar: variants, striped, animated

Progress bar: theme palette (color-1 … color-9)

Progress bar with caption (pa-progress-group)

Storage Used 65%
Quota 6.5 / 10 GB
Upload 89%
Caption above a stacked bar (does it fit?) 153 / 256 GB

Progress ring

35%
72% CPU
94% Uptime
18% Disk free

Stacked bar (a breakdown, not a progress)

Hot (45%) Warm (30%) Cool (15%) Cold (10%)

Effects: indeterminate, shimmer, glow, flow

Indeterminate — unknown duration ("Connecting…")
Shimmer — known value, light sweeps over the fill62%
Glow — the fill breathes ("still working")48%
Gradient flow — colour travels along the fill80%
Existing: animated stripes (for comparison)70%

Phases (red → orange → yellow → green)

A phase = a colour + the value it starts at. The list lives in one CSS variable on the bar (--pa-progress-phases), written as ordinary gradient stops — so the colours are visible in the markup and any colour works: a role (var(--pc-danger-color)), a palette slot (var(--pc-palette-3)) or your own CSS variable — the yellow here is --our-yellow, defined by the app (this page), not by the framework. Mode smooth blends the stops, zoned writes them with hard edges, value paints the whole fill with the colour of the phase the value is in (that one is wrapper logic — CSS can't compare numbers; here a small script stands in for the wrapper).

Result
Component call (svelte)

                            
Component call (keen)

                        
Generated HTML

                        

Fixed examples

Health, smooth35%
Health, smooth95%
Health, zoned (0–40 / 40–70 / 70–100)85%
Disk usage, zoned + reversed (more is worse)88%
Palette phases, smooth (color-1 → color-4)80%
Value mode — 55% is in the warning phase → existing class55%

Segmented bar (one value, N blocks)

Profile completion3 of 5
Password strengthGood
Segmented + shimmer, 10 blocks7 / 10

Vertical bar

Same pa-progress block plus --vertical: the fill grows from the bottom (--value is the height). Sizes set the bar's thickness; the length comes from --pa-progress-length (default 12rem). Every other modifier still applies — variants, palette, striped / animated, phases (bottom → top, like a thermometer).

xs
sm
default
lg
animated
color-5
phased
segmented
Level meter (7 bars, live)

Experimental

The steppers below use core's pa-steps, shipped as experimental — class names and markup may still change. The long form with a sticky stepper lives on its own page now: Surfaces → Sections (pa-sections).

Multi-step form (stepper + segmented bar)

  1. 1Account
  2. 2Profile
  3. 3Billing
  4. 4Confirm
Same progress as a segmented bar

Vertical stepper as a status block (CNC job)

  1. 1
    Starting
  2. 2
    Homing axes
  3. 3
    Cutting
  4. 4
    Cleaning
  5. 5
    Finished

A read-only block: the machine reports which phase it is in. Done phases get a check, the running one pulses, a fault turns the step red with the reason underneath.

Type / for commands, : to search a category, or just start typing

Settings

Press Ctrl+K to preview the palette.
Body text size. All elements scale proportionally.

John Doe

Administrator
  • Dashboard
  • Forms
  • Tables
  • Data Grid