Logo

Component Blueprint

X: 1280 · Y: 720 · Grid: 8px

Progress

Accessible progress indicators with determinate, indeterminate, labeled, controlled, custom styling, and RTL patterns.

01 Hero Preview

Grid: 8px · Scale: 1:1

Seven of ten release checks have completed.

70%

02 Usage

TS

import { FrProgressModule } from '@frame-ui-ng/components/progress';

HTML

<div frProgress aria-label="Sync progress" [value]="42">
  <div frProgressIndicator></div>
</div>

03 Examples

Basic

Use a determinate progress bar when the completion value is known.

Component Sheet

Grid: 8px · Scale: 1:1

With Field

Pair progress with Field primitives when the bar needs a label, helper copy, or visible value.

Component Sheet

Grid: 8px · Scale: 1:1

Seven of ten release checks have completed.

70%

Controlled

Bind the value to a signal when progress changes from user actions, polling, or async work.

Component Sheet

Grid: 8px · Scale: 1:1

Import queue55%

Indeterminate

Pass a null value when work is active but no reliable completion percentage is available yet.

Component Sheet

Grid: 8px · Scale: 1:1

Preparing previewWorking

RTL

The indicator follows logical inline direction, so the bar fills correctly inside RTL layouts.

Component Sheet

Grid: 8px · Scale: 1:1

اكتملت معظم خطوات التحضير.

٦٦٪

04 Custom Styling

Override progress tokens on the root or an ancestor to tune bar height, track color, fill treatment, border, radius, and motion locally.

Component Sheet

Grid: 8px · Scale: 1:1

Storage budget82%

05 Token Inspector

Hover the field wrapper, label, helper text, value, progress root, or indicator to inspect the tokens behind the full labeled progress pattern.

64%

Four files are still waiting to be processed.

06 Design Tokens

Use these CSS custom properties to tune progress track sizing, surfaces, indicator styling, transition timing, and indeterminate animation behavior.

SCSS

--frame-progress-height: 0.5rem;
--frame-progress-width: 100%;
--frame-progress-radius: var(--frame-radius-sm);
--frame-progress-bg: var(--frame-accent);
--frame-progress-border: transparent;
--frame-progress-shadow: none;
--frame-progress-indicator-bg: var(--frame-primary);
--frame-progress-indicator-radius: inherit;
--frame-progress-indicator-shadow: none;
--frame-progress-transition-duration: 300ms;
--frame-progress-transition-easing: cubic-bezier(0.16, 1, 0.3, 1);
--frame-progress-indeterminate-size: 35%;
--frame-progress-indeterminate-duration: 1.25s;