Skip to content
bref / ui

Svelte components, simply.

Star

Progress

Show determinate or indeterminate progress, with an optional controlled seek control.

Usage

Svelte
<Progress label="Upload progress" value={0.4} />

Playground

Live preview

40% complete

Settings

Appearance
State
View generated code
Svelte
<script>
	import { Progress } from 'bref-ui';
	let value = $state(0.4);
</script>

<div dir="ltr">
	<Progress label={'Upload progress'} size="medium" {value} disabled={false} />
</div>

States and sizes

0 / 0.5 / 1
small
medium
large

Seekable progress

No native input or change event yet. Submit to read the native range value.

The form's reset handler prevents the native reset and restores the controlled value.

Current: 0.35 (35%). Drag, tap, or use Arrow, Home, and End keys.

Svelte
<Progress label="Playback position" {value} onSeek={(next) => (value = next)} />

Direction and disabled state

Right-to-left playback: 0.35

Disabled seek control

Props and accessibility

Component props
PropTypeRequiredDefaultDescription
labelstringNo—Optional accessible name of the indicator or seek control.
valuenumberNoOmittedNormalized value from 0 to 1. Omit for indeterminate progress.
onSeek(value: number) => voidNoOmittedMakes progress seekable and emits normalized values on edits.
disabledbooleanNofalseDisables the seek control when present.
sizeBaseSizeNomediumTrack thickness: small, medium, or large.

The indicator uses a native progress element with a fixed maximum of 1. Seekable progress exposes a native range control. Add a label or an external label association when an accessible name is needed. Native attributes and events forward to the progress indicator, or to the range control when seeking, including aria-valuetext and aria-controls . Indeterminate progress omits its value. No live region repeats value changes. The fill uses the primary theme color. Reduced motion leaves a visible, stationary segment for indeterminate progress.