Skip to content

Progress

The Progress component displays the current progress of an operation or task, helping users understand the processing status.

Basic Usage

Use v-model for two-way binding, or :value for a static value. Default max=100.

vue
<!-- Static value -->
<TProgress :value="75" />

<!-- Two-way binding -->
<TProgress v-model:value="progVal" showLabel />

Colors

Set the progress bar color via the color prop. Supports all Tabler preset colors.

vue
<TProgress :value="75" color="primary" />
<TProgress :value="60" color="success" />
<TProgress :value="45" color="danger" />
<TProgress :value="30" color="warning" />
<TProgress :value="90" color="info" />

Show Label

Enable the showLabel prop to display the percentage text on the progress bar.

vue
<TProgress :value="68" showLabel />

Striped

Enable the striped prop to add a striped animation effect to the progress bar.

vue
<TProgress :value="50" striped showLabel />

Indeterminate

Use the indeterminate prop to show a continuous loading animation when progress is unknown.

vue
<TProgress indeterminate />

Sizes

Use the sm prop for small height (default height is normal).

vue
<TProgress :value="75" sm showLabel />
<TProgress :value="75" showLabel />

Native Element

Enable the native prop to render as a native HTML <progress> element, suitable for scenarios requiring the browser's built-in progress bar.

vue
<TProgress :value="50" native />

Multiple Bars

Nest multiple <TProgressBar> child components inside <TProgress> to create segmented progress bars.

vue
<TProgress>
  <TProgressBar :value="30" color="primary" />
  <TProgressBar :value="50" color="success" />
  <TProgressBar :value="10" color="danger" />
</TProgress>

TProgressBar also supports striped, showLabel, and other props.

vue
<TProgress>
  <TProgressBar :value="40" color="primary" striped showLabel />
  <TProgressBar :value="25" color="warning" />
  <TProgressBar :value="20" color="success" showLabel />
</TProgress>

Programmatic Control

Use step to control how much each call to advance() increases the progress, and initial to set the starting position. Call reset() to return to the initial value. Listen for the @complete event to react when progress reaches max.

advance() and reset() directly modify the v-model binding — no manual event handling needed.

Show Code
vue
<script setup>
const progRef = ref()
const progVal = ref(10)

function onComplete() {
  console.log('Progress reached 100%!')
}
</script>

<template>
  <TProgress ref="progRef" v-model:value="progVal" :initial="10" :step="15" showLabel @complete="onComplete" />
  <t-button @click="progRef?.advance()">Advance (+15)</t-button>
  <t-button @click="progRef?.reset()">Reset</t-button>
</template>

API

TProgress Props

PropDescriptionTypeDefault
v-model:valueCurrent progress value (0–max)number0
maxMaximum valuenumber100
smWhether to use small heightbooleanfalse
colorProgress bar colorTablerColor'primary'
stripedWhether to show striped animationbooleanfalse
indeterminateWhether to show indeterminate (looping) statebooleanfalse
nativeWhether to render as native <progress> elementbooleanfalse
showLabelWhether to show the percentage labelbooleanfalse
stepStep value for advance()number10
initialStarting position, reset() returns to thisnumber0

TProgress Methods

Call via template ref.

MethodReturnsDescription
advance()Increases progress by step, emits @complete when reaching max
reset()Resets progress to initial
currentnumberReactive ref to the current progress value

TProgress Events

EventDescription
@completeEmitted when progress reaches max

TProgress Slots

SlotDescription
defaultUsed to pass multiple <TProgressBar> components for segmented progress.

TProgressBar Props

PropDescriptionTypeDefault
valueCurrent progress value (0–max)numberRequired
maxMaximum valuenumber100
colorProgress bar colorTablerColor'primary'
stripedWhether to show striped animationbooleanfalse
indeterminateWhether to show indeterminate statebooleanfalse
showLabelWhether to show the percentage labelbooleanfalse