progress
lyse/progressFreeComponent
lyse publishes no description for this item.
Live preview
live · rendered by the registry
Rendered by lyse on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://ui.getlyse.com/r/progress.jsonSource
1import * as React from "react"2import { cva, type VariantProps } from "class-variance-authority"34import { cn } from "@/lib/utils"5import "./progress.css"67const progressItemVariants = cva(8 "progress-item-base flex-[1_0_0] min-w-0",9 {10 variants: {11 size: {12 sm: "h-1.5",13 md: "h-2",14 },15 position: {16 left: "",17 middle: "",18 right: "",19 },20 },21 compoundVariants: [22 { size: "sm", position: "left", className: "rounded-l-[var(--layout-radius-xs)]" },23 { size: "sm", position: "right", className: "rounded-r-[var(--layout-radius-xs)]" },24 { size: "md", position: "left", className: "rounded-l-[var(--layout-radius-sm)]" },25 { size: "md", position: "right", className: "rounded-r-[var(--layout-radius-sm)]" },26 ],27 defaultVariants: {28 size: "md",29 position: "middle",30 },31 }32)3334function ProgressItem({35 className,36 size,37 position,38 active = false,39 ...props40}: Omit<React.ComponentProps<"div">, "active"> &41 VariantProps<typeof progressItemVariants> & {42 active?: boolean43 }) {44 return (45 <div46 data-slot="progress-item"47 className={cn(48 progressItemVariants({ size, position, className }),49 active ? "progress-item-active" : "progress-item-inactive"50 )}51 {...props}52 />53 )54}5556const progressIndicatorVariants = cva(57 "flex w-full",58 {59 variants: {60 labelPosition: {61 none: "items-center",62 right: "items-center gap-[var(--layout-gap-lg)]",63 bottom: "flex-col items-end gap-[var(--layout-gap-md)]",64 },65 },66 defaultVariants: {67 labelPosition: "none",68 },69 }70)7172function ProgressIndicator({73 className,74 value = 0,75 steps = 5,76 size = "md",77 labelPosition = "none",78 label = "Progress",79 ...props80}: Omit<React.ComponentProps<"div">, "value"> &81 VariantProps<typeof progressIndicatorVariants> & {82 value?: number83 steps?: number84 size?: "sm" | "md"85 label?: string86 }) {87 const clampedValue = Math.max(0, Math.min(100, value))88 const safeSteps = Math.max(1, steps)89 const activeSteps = Math.round((clampedValue / 100) * safeSteps)9091 const getPosition = (index: number): "left" | "middle" | "right" => {92 if (activeSteps === 0 || activeSteps === safeSteps) return "middle"93 if (index === activeSteps - 1) return "right"94 if (index === activeSteps) return "left"95 return "middle"96 }9798 return (99 <div100 data-slot="progress-indicator"101// … truncated
What it pulls in
npm packages
Other registry items
Files it writes
More from lyse
All 33 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| action-cardaction-card | lyse | Components | Free | no deps · 2 files | |
| alertalert | lyse | Components | Free | 2 deps · 2 files | |
| alert-dialogalert-dialog | lyse | Components | Free | 2 deps · 2 files | |
| avataravatar | lyse | Components | Free | 3 deps · 2 files | |
| badgebadge | lyse | Components | Free | 1 dep · 2 files | |
| banner-infobanner-info | lyse | Components | Free | 2 deps · 2 files | |
| breadcrumbbreadcrumb | lyse | Components | Free | 2 deps · 2 files | |
| buttonbutton | lyse | Components | Free | 2 deps · 2 files |
