{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "progress",
  "title": "Ninaero progress",
  "dependencies": [
    "@base-ui/react@^1.9.0",
    "cn@^0.4.0"
  ],
  "registryDependencies": [
    "https://ninaero.pages.dev/r/theme.json",
    "https://ninaero.pages.dev/r/sound-provider.json"
  ],
  "files": [
    {
      "path": "registry/ninaero/ui/progress.tsx",
      "content": "\"use client\";\n\nimport { Progress as ProgressPrimitive } from \"@base-ui/react/progress\";\nimport { cn } from \"cn\";\nimport { useEffect, useRef } from \"react\";\n\nimport { useControlSound } from \"./sound-feedback\";\n\nfunction Progress({\n  className,\n  children,\n  value,\n  max = 100,\n  sound = true,\n  ...props\n}: ProgressPrimitive.Root.Props & { sound?: boolean }) {\n  const { play } = useControlSound(sound);\n  const previous = useRef({ value, max });\n  useEffect(() => {\n    const before = previous.current;\n    previous.current = { value, max };\n    if (before.max === max && value === max && before.value !== max) play(\"complete\");\n  }, [value, max, play]);\n\n  return (\n    <ProgressPrimitive.Root\n      value={value}\n      max={max}\n      data-slot=\"progress\"\n      className={cn(\"flex flex-wrap gap-3\", className)}\n      {...props}\n    >\n      {children}\n      <ProgressTrack>\n        <ProgressIndicator />\n      </ProgressTrack>\n    </ProgressPrimitive.Root>\n  );\n}\n\nfunction ProgressTrack({ className, ...props }: ProgressPrimitive.Track.Props) {\n  return (\n    <ProgressPrimitive.Track\n      className={cn(\n        \"relative flex h-1 w-full items-center overflow-x-hidden rounded-full bg-muted\",\n        className,\n      )}\n      data-slot=\"progress-track\"\n      {...props}\n    />\n  );\n}\n\nfunction ProgressIndicator({ className, ...props }: ProgressPrimitive.Indicator.Props) {\n  return (\n    <ProgressPrimitive.Indicator\n      data-slot=\"progress-indicator\"\n      className={cn(\"h-full bg-primary transition-all\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction ProgressLabel({ className, ...props }: ProgressPrimitive.Label.Props) {\n  return (\n    <ProgressPrimitive.Label\n      className={cn(\"text-sm font-medium\", className)}\n      data-slot=\"progress-label\"\n      {...props}\n    />\n  );\n}\n\nfunction ProgressValue({ className, ...props }: ProgressPrimitive.Value.Props) {\n  return (\n    <ProgressPrimitive.Value\n      className={cn(\"ml-auto text-sm text-muted-foreground tabular-nums\", className)}\n      data-slot=\"progress-value\"\n      {...props}\n    />\n  );\n}\n\nexport { Progress, ProgressTrack, ProgressIndicator, ProgressLabel, ProgressValue };\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}