Skip to main content
You are viewing Pre-Alpha documentation.
Vuetify0 Logo
Theme
Mode
Palettes
Accessibility
Vuetify One
Sign in to Vuetify One

Access premium tools across the Vuetify ecosystem — Bin, Play, Studio, and more.

Not a subscriber? See what's included

createProgress

A composable for tracking progress across one or more segments, with percentage computation and indeterminate state detection.


IntermediateApr 6, 2026

Usage

The createProgress composable creates a progress instance backed by createModel. Each segment registers as a model ticket with a ShallowRef<number> value. The total, percent, and indeterminate state are computed reactively from all registered segments.

ts
import { createProgress } from '@vuetify/v0'

const progress = createProgress({ max: 100 })

// Register segments
const first = progress.register(50)
const second = progress.register(25)

progress.total.value    // 75
progress.percent.value  // 75
progress.isIndeterminate.value // false

// Update a segment
first.value.value = 80
progress.total.value    // 105 → clamped to 100
progress.percent.value  // 100

// Convert raw value to percentage
progress.fromValue(50)  // 50

// Unregister
first.unregister()
progress.total.value    // 25

Architecture

createProgress extends createModel with sum-based aggregation:

Progress Architecture

Use controls to zoom and pan. Click outside or press Escape to close.

Progress Architecture

Each segment is a model ticket whose value is a ShallowRef<number>. All segments stay selected (multiple: true, enroll: true) so selectedValues always reflects the full set. The total sums all segment values and clamps to [min, max]. The percent normalizes the total to 0–100.

Reactivity

PropertyReactiveNotes
segmentsComputed — sorted list of registered segment tickets
selectedValuesComputed — array of current segment values
totalComputed — sum of segment values, clamped to [min, max]
percentComputed — total as percentage of range
isIndeterminateComputed — true when no segments or all values are 0
Tip

Segment values are ShallowRef Each ticket’s value is a ShallowRef<number>. Updating it (ticket.value.value = 80) triggers recomputation of total and percent automatically.

Examples

File Upload Tracker

Demonstrates standalone createProgress usage — no component needed. Each uploaded file registers a segment and simulates progress via a timer.

FileRole
useUpload.tsComposable — wraps createProgress with file-upload semantics
upload.vueDemo — add files and watch individual + aggregate progress
Idle

API Reference

The following API details are for the createProgress composable.

Functions

createProgress

(options?: ProgressOptions) => ProgressContext

Creates a progress instance with model-based segment tracking.

createProgressContext

(_options?: ProgressContextOptions) => ContextTrinity<ProgressContext>

Creates a progress context for dependency injection.

useProgress

(namespace?: string) => ProgressContext

Returns the current progress instance from context.

Options

value

number | undefined

min

number | undefined

max

number | undefined

Properties

collection

ReadonlyMap<ID, E>

The collection of tickets in the registry

size

number

The number of tickets in the registry

selectedIds

Reactive<Set<ID>>

Set of currently selected ticket IDs

selectedItems

ComputedRef<Set<E>>

Computed Set of selected ticket instances

selectedValues

ComputedRef<Set<E["value"] extends Ref<infer U, infer U> ? U : E["value"]>>

Computed Set of selected ticket values

disabled

MaybeRefOrGetter<boolean>

Disabled state for the entire model instance

min

number

max

number

segments

ComputedRef<ProgressTicket[]>

total

Readonly<Ref<number, number>>

percent

Readonly<Ref<number, number>>

isIndeterminate

Readonly<Ref<boolean, boolean>>

Methods

clear

() => void

Clear the entire registry

has

(id: ID) => boolean

Check if a ticket exists by ID

keys

() => readonly ID[]

Get all registered IDs

browse

(value: E["value"]) => ID[] | undefined

Browse for an ID(s) by value

lookup

(index: number) => ID | undefined

lookup a ticket by index number

get

(id: ID) => E | undefined

Get a ticket by ID

upsert

(id: ID, ticket?: Partial<Z>, event?: string) => E

Update or insert a ticket by ID

values

() => readonly E[]

Get all values of registered tickets

entries

() => readonly [ID, E][]

Get all entries of registered tickets

unregister

(id: ID) => void

Unregister a ticket by ID

reindex

() => void

Reset the index directory and update all tickets

move

(id: ID, toIndex: number) => E | undefined

Seek for a ticket based on direction and optional predicate

seek

(direction?: "first" | "last", from?: number, predicate?: (ticket) => boolean) => E | undefined

on

<K extends Extensible<RegistryEventName>>(event: K, cb: EventHandler<E, K>) => void

Listen for registry events

off

<K extends Extensible<RegistryEventName>>(event: K, cb: EventHandler<E, K>) => void

Stop listening for registry events

emit

<K extends Extensible<RegistryEventName>>(event: K, data: EventPayload<E, K>) => void

Emit an event with data

dispose

() => void

Clears the registry and removes all listeners

onboard

(registrations: Partial<Z & RegistryTicket>[]) => E[]

Onboard multiple tickets at once

offboard

(ids: ID[]) => void

Offboard multiple tickets at once

batch

<R>(fn: () => R) => R

Execute operations in a batch, deferring cache invalidation and event emission until complete

reset

() => void

Reset selection state without destroying the registry

select

(id: ID) => void

Select a ticket by ID

unselect

(id: ID) => void

Unselect a ticket by ID

toggle

(id: ID) => void

Toggle a ticket's selection state

selected

(id: ID) => boolean

Check if a ticket is currently selected

apply

(values: unknown[], options?: { multiple?) => void

Apply external values to the model

register

(registration?: Partial<Z>) => E

Register a new ticket

fromValue

(value: number) => number
Was this page helpful?

© 2016-1970 Vuetify, LLC
Ctrl+/