8.0k

Progress

Displays an indicator showing the completion progress of a task, typically displayed as a progress bar.

Docs API Reference

Epicenter

Local-first, open source apps

Special Sponsor
<script lang="ts">
	import { onMount } from "svelte";
	import { Progress } from "$lib/components/ui/progress/index.js";
 
	let value = $state(13);
 
	onMount(() => {
		const timer = setTimeout(() => (value = 66), 500);
		return () => clearTimeout(timer);
	});
</script>
 
<Progress {value} max={100} class="w-[60%]" />

Installation

pnpm dlx shadcn-svelte@latest add progress

Usage

<script lang="ts">
  import { Progress } from "$lib/components/ui/progress/index.js";
</script>
<Progress value={33} />

Label

Use a Field component to add a label to the progress bar.

<script lang="ts">
	import * as Field from "$lib/components/ui/field/index.js";
	import { Progress } from "$lib/components/ui/progress/index.js";
</script>
 
<Field.Field class="w-full max-w-sm">
	<Field.Label for="progress-upload" class="w-full">
		<span>Upload progress</span>
		<span class="ml-auto font-normal text-muted-foreground tabular-nums">56%</span>
	</Field.Label>
	<Progress value={56} id="progress-upload" />
</Field.Field>

Controlled

A progress bar that can be controlled by a slider.

<script lang="ts">
	import { Progress } from "$lib/components/ui/progress/index.js";
	import { Slider } from "$lib/components/ui/slider/index.js";
 
	let value = $state(50);
</script>
 
<div class="flex w-full max-w-sm flex-col gap-4">
	<Progress {value} />
	<Slider type="single" bind:value min={0} max={100} step={1} />
</div>