UIPackage
Menu

Framework

Change language

Boilerplate repo

Progress

progressui

Linear progress bar — determinate or indeterminate. Two visual densities (slim, default), four tones, and an optional inline percentage label.

Also available for React ->

Installation

$npx shadcn-vue@latest add https://uipkge.dev/r/vue/progress.json
Named registry:npx shadcn-vue@latest add @uipkge/progressInstalls to:app/components/ui/progress/

Examples

Loading interactive previews…

Props

NameType / ValuesDefaultRequired
classHTMLAttributes['class']optional

npm dependencies

Used by

Files installed (2)

  • app/components/ui/progress/Progress.vue1.3 kB
    <script setup lang="ts">
    import type { ProgressRootProps } from 'reka-ui'
    import type { HTMLAttributes } from 'vue'
    import { computed } from 'vue'
    import { reactiveOmit } from '@vueuse/core'
    import { ProgressIndicator, ProgressRoot } from 'reka-ui'
    import { cn } from '@/lib/utils'
    
    const props = withDefaults(defineProps<ProgressRootProps & { class?: HTMLAttributes['class'] }>(), {
      modelValue: 0,
    })
    
    const delegatedProps = reactiveOmit(props, 'class')
    
    // Clamp so out-of-range modelValue cannot push the indicator past the track.
    const clampedValue = computed(() => Math.min(100, Math.max(0, props.modelValue ?? 0)))
    </script>
    
    <template>
      <ProgressRoot
        data-uipkge
        data-slot="progress"
        v-bind="delegatedProps"
        :model-value="clampedValue"
        :aria-label="$attrs['aria-label'] !== undefined || $attrs['aria-labelledby'] !== undefined ? undefined : 'Progress'"
        :class="cn('bg-primary/20 relative h-2 w-full overflow-hidden rounded-full', props.class)"
      >
        <ProgressIndicator
          data-uipkge
          data-slot="progress-indicator"
          class="bg-primary h-full w-full flex-1 transition-transform duration-500 ease-out motion-reduce:transition-none"
          :style="`transform: translateX(-${100 - clampedValue}%);`"
        />
      </ProgressRoot>
    </template>
    
  • app/components/ui/progress/index.ts0.1 kB

Raw manifest:https://uipkge.dev/r/vue/progress.json