{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "progress-linear",
  "title": "Progress Linear",
  "description": "A shadcn-style progress linear component built with Ark UI primitives.",
  "dependencies": ["@ark-ui/react"],
  "files": [
    {
      "path": "src/components/ui/progress-linear.tsx",
      "content": "\"use client\";\n\nimport {\n  Progress as ProgressPrimitive,\n  useProgress,\n  useProgressContext,\n} from \"@ark-ui/react/progress\";\nimport type { ReactNode } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nexport { useProgress, useProgressContext };\n\nexport type ProgressLinearRootProps = ProgressPrimitive.RootProps;\n\nexport const ProgressLinearRoot = ({\n  className,\n  ...props\n}: ProgressLinearRootProps) => (\n  <ProgressPrimitive.Root\n    className={cn(\n      \"group/progress-linear flex w-full flex-col gap-2\",\n      className,\n    )}\n    data-slot=\"progress-linear\"\n    {...props}\n  />\n);\n\nexport type ProgressLinearRootProviderProps =\n  ProgressPrimitive.RootProviderProps;\n\nexport const ProgressLinearRootProvider = ({\n  className,\n  ...props\n}: ProgressLinearRootProviderProps) => (\n  <ProgressPrimitive.RootProvider\n    className={cn(\n      \"group/progress-linear flex w-full flex-col gap-2\",\n      className,\n    )}\n    data-slot=\"progress-linear-root-provider\"\n    {...props}\n  />\n);\n\nexport type ProgressLinearLabelProps = ProgressPrimitive.LabelProps;\n\nexport const ProgressLinearLabel = ({\n  className,\n  ...props\n}: ProgressLinearLabelProps) => (\n  <ProgressPrimitive.Label\n    className={cn(\n      \"font-medium text-foreground text-sm leading-none\",\n      className,\n    )}\n    data-slot=\"progress-linear-label\"\n    {...props}\n  />\n);\n\nexport type ProgressLinearValueTextProps = ProgressPrimitive.ValueTextProps;\n\nexport const ProgressLinearValueText = ({\n  className,\n  ...props\n}: ProgressLinearValueTextProps) => (\n  <ProgressPrimitive.ValueText\n    className={cn(\"tabular-nums text-foreground text-sm\", className)}\n    data-slot=\"progress-linear-value-text\"\n    {...props}\n  />\n);\n\nexport type ProgressLinearTrackProps = ProgressPrimitive.TrackProps;\n\nexport const ProgressLinearTrack = ({\n  className,\n  ...props\n}: ProgressLinearTrackProps) => (\n  <ProgressPrimitive.Track\n    className={cn(\n      \"relative w-full overflow-hidden rounded-full bg-muted\",\n      \"data-[orientation=vertical]:h-44 data-[orientation=vertical]:w-2.5 data-[orientation=vertical]:shrink-0\",\n      className,\n    )}\n    data-slot=\"progress-linear-track\"\n    {...props}\n  />\n);\n\nexport type ProgressLinearRangeProps = ProgressPrimitive.RangeProps;\n\nexport const ProgressLinearRange = ({\n  className,\n  ...props\n}: ProgressLinearRangeProps) => (\n  <ProgressPrimitive.Range\n    className={cn(\n      \"rounded-full bg-primary transition-[width,height] duration-300 ease-out\",\n      \"data-[orientation=horizontal]:h-full\",\n      \"data-[orientation=vertical]:w-full\",\n      \"data-[state=indeterminate]:min-h-[30%] data-[state=indeterminate]:min-w-[30%] data-[state=indeterminate]:motion-safe:animate-pulse\",\n      className,\n    )}\n    data-slot=\"progress-linear-range\"\n    {...props}\n  />\n);\n\nexport type ProgressLinearViewProps = ProgressPrimitive.ViewProps;\n\nexport const ProgressLinearView = ({\n  className,\n  ...props\n}: ProgressLinearViewProps) => (\n  <ProgressPrimitive.View\n    className={cn(className)}\n    data-slot=\"progress-linear-view\"\n    {...props}\n  />\n);\n\nexport type ProgressLinearContextProps = ProgressPrimitive.ContextProps;\n\nexport const ProgressLinearContext = ({\n  children,\n}: ProgressLinearContextProps) => (\n  <ProgressPrimitive.Context>{children}</ProgressPrimitive.Context>\n);\n\nconst trackSizeClass = {\n  lg: \"h-3\",\n  md: \"h-2\",\n  sm: \"h-1\",\n} as const;\n\nexport type ProgressLinearProps = Omit<\n  ProgressLinearRootProps,\n  \"children\" | \"className\"\n> & {\n  children?: ReactNode;\n  className?: string;\n  label?: ReactNode;\n  rangeClassName?: string;\n  showValueText?: boolean;\n  size?: keyof typeof trackSizeClass;\n  trackClassName?: string;\n  valueTextClassName?: string;\n};\n\nexport const ProgressLinear = ({\n  children,\n  className,\n  label,\n  rangeClassName,\n  showValueText = false,\n  size = \"md\",\n  trackClassName,\n  valueTextClassName,\n  orientation,\n  ...rootProps\n}: ProgressLinearProps) => {\n  const trackSize =\n    orientation === \"vertical\" ? undefined : trackSizeClass[size];\n\n  return (\n    <ProgressLinearRoot\n      className={className}\n      orientation={orientation}\n      {...rootProps}\n    >\n      {children ?? (\n        <>\n          {label != null || showValueText ? (\n            <div className=\"flex items-center justify-between gap-2\">\n              {label != null ? (\n                <ProgressLinearLabel className=\"truncate\">\n                  {label}\n                </ProgressLinearLabel>\n              ) : (\n                <span aria-hidden className=\"min-w-0 shrink\" />\n              )}\n              {showValueText ? (\n                <ProgressLinearValueText\n                  className={cn(\n                    \"shrink-0 text-muted-foreground text-xs\",\n                    valueTextClassName,\n                  )}\n                />\n              ) : null}\n            </div>\n          ) : null}\n          <ProgressLinearTrack className={cn(trackSize, trackClassName)}>\n            <ProgressLinearRange className={rangeClassName} />\n          </ProgressLinearTrack>\n        </>\n      )}\n    </ProgressLinearRoot>\n  );\n};\n",
      "type": "registry:ui",
      "target": "src/components/ui/progress-linear.tsx"
    }
  ],
  "type": "registry:ui"
}
