{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "components-progress",
  "type": "registry:component",
  "title": "Progress",
  "description": "A determinate or indeterminate bar in the caller's scale",
  "author": "sudo-kw <https://github.com/sudo-kw>",
  "dependencies": [
    "@gpuix/native@0.11.0",
    "@gpuix/react@0.11.0",
    "react@^19.2.4"
  ],
  "registryDependencies": [
    "https://gpuixui.sudokw.com/gpuix-primitives.json"
  ],
  "files": [
    {
      "path": "packages/components/src/progress.tsx",
      "target": "@ui/gpuixui/components/progress.tsx",
      "type": "registry:component",
      "content": "/** @jsxImportSource @gpuix/react */\nimport {\n  Progress as PrimitiveProgress,\n  ProgressIndicator,\n  ProgressLabel,\n  ProgressTrack,\n  ProgressValue,\n  type ProgressIndicatorProps,\n  type ProgressLabelProps,\n  type ProgressProps as PrimitiveProgressProps,\n  type ProgressTrackProps,\n  type ProgressValueProps,\n} from \"../primitives/progress.js\";\nimport type { ReactNode } from \"react\";\nimport { progressShare } from \"./progress/logic.js\";\n\nexport { ProgressIndicator, ProgressLabel, ProgressTrack, ProgressValue };\nexport type {\n  ProgressIndicatorProps,\n  ProgressLabelProps,\n  ProgressTrackProps,\n  ProgressValueProps,\n};\n\nexport interface ProgressProps extends Omit<\n  PrimitiveProgressProps,\n  \"value\" | \"buffer\" | \"children\"\n> {\n  readonly value?: number | null;\n\n  readonly max?: number;\n\n  readonly children?: ReactNode;\n}\n\nexport const Progress = ({\n  value,\n  max = 100,\n  children,\n  ...rest\n}: ProgressProps) => (\n  <PrimitiveProgress {...rest} value={progressShare(value, max)}>\n    {children}\n    <ProgressTrack>\n      <ProgressIndicator />\n    </ProgressTrack>\n  </PrimitiveProgress>\n);\n\nexport const progressMeta = {\n  name: \"Progress\",\n  tier: 1,\n  status: \"done\",\n  gpuixSupport: \"partial\",\n  limitations: [\n    \"No `aria-valuenow`/`aria-valuemin`/`aria-valuemax`: the share and its maximum are announced through `aria-valuetext`\",\n    \"The indeterminate segment is a discrete step, not a smooth sweep\",\n    \"The runtime's motion container animates opacity and size only, so there is no buffered segment in this surface\",\n  ],\n  docs: \"docs/progress.mdx\",\n  example: \"examples/progress.example.tsx\",\n  testFile: \"src/behaviour/progress.test.tsx\",\n} as const;\n"
    },
    {
      "path": "packages/components/src/progress/logic.ts",
      "target": "@ui/gpuixui/components/progress/logic.ts",
      "type": "registry:lib",
      "content": "const measurement = (value: unknown): number | undefined =>\n  typeof value === \"number\" && Number.isFinite(value) ? value : undefined;\n\nconst DEFAULT_MAX = 100;\n\nexport const progressShare = (\n  value: unknown,\n  max: unknown,\n): number | undefined => {\n  const share = measurement(value);\n  if (share === undefined) return undefined;\n  const stated = measurement(max);\n  const top = stated !== undefined && stated > 0 ? stated : DEFAULT_MAX;\n  return Math.min(100, Math.max(0, (share / top) * 100));\n};\n"
    }
  ],
  "docs": "[Progress](https://gpuixui.sudokw.com/components/progress) — These are GPUix native components: the files render through GPUix's reconciler against `@gpuix/react`, not the DOM, and need the per-platform `@gpuix/native` binding. The CLI installs the `@gpuixui/*` runtime the components import as registry items, so the copied tree resolves on its own; wrap it in `ThemeProvider` before it renders.",
  "meta": {
    "url": "/components/progress",
    "kind": "component",
    "runtime": "gpuix",
    "registry": "gpuixui"
  }
}