import type { ComputedRef, Ref } from 'vue'; import { useContextFactory } from '@robonen/vue'; export type ProgressState = 'indeterminate' | 'loading' | 'complete'; export interface ProgressContext { /** Resolved (validated/clamped) value; `null` when indeterminate. */ value: Ref; /** Resolved (validated) maximum. */ max: Ref; /** Derived progress state. */ state: Ref; /** Completion ratio in `[0, 1]`, or `null` when indeterminate. */ progress: ComputedRef; /** Completion percentage in `[0, 100]`, or `null` when indeterminate. */ percentage: ComputedRef; } const ctx = useContextFactory('ProgressContext'); export const provideProgressContext = ctx.provide; export const useProgressContext = ctx.inject;