{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "meter",
  "title": "Meter",
  "description": "Read-only meter gauge with soft-rect value fill tween on Base UI Meter.",
  "dependencies": [
    "@base-ui/react",
    "motion"
  ],
  "registryDependencies": [
    "@atroui/utils",
    "@atroui/motion"
  ],
  "files": [
    {
      "path": "registry/default/ui/meter.tsx",
      "content": "\"use client\"\n\nimport * as React from \"react\"\nimport { Meter as MeterPrimitive } from \"@base-ui/react/meter\"\nimport { motion, useReducedMotion } from \"motion/react\"\n\nimport { fillTween } from \"@/lib/motion\"\nimport { cn } from \"@/lib/utils\"\n\nfunction withoutDomAnimationHandlers<T extends Record<string, unknown>>(\n  props: T\n) {\n  const {\n    onAnimationStart: _onAnimationStart,\n    onDrag: _onDrag,\n    onDragStart: _onDragStart,\n    onDragEnd: _onDragEnd,\n    ...rest\n  } = props\n  return rest\n}\n\nfunction Meter({\n  className,\n  children,\n  ...props\n}: MeterPrimitive.Root.Props) {\n  return (\n    <MeterPrimitive.Root\n      data-slot=\"meter\"\n      className={cn(\"flex w-full flex-col gap-1.5\", className)}\n      {...props}\n    >\n      {children}\n    </MeterPrimitive.Root>\n  )\n}\n\nfunction MeterLabel({ className, ...props }: MeterPrimitive.Label.Props) {\n  return (\n    <MeterPrimitive.Label\n      data-slot=\"meter-label\"\n      className={cn(\"text-sm font-medium text-foreground\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction MeterValue({ className, ...props }: MeterPrimitive.Value.Props) {\n  return (\n    <MeterPrimitive.Value\n      data-slot=\"meter-value\"\n      className={cn(\"text-xs tabular-nums text-muted-foreground\", className)}\n      {...props}\n    />\n  )\n}\n\nfunction MeterTrack({ className, ...props }: MeterPrimitive.Track.Props) {\n  return (\n    <MeterPrimitive.Track\n      data-slot=\"meter-track\"\n      className={cn(\n        \"relative h-1.5 w-full overflow-hidden rounded-[var(--radius)] bg-muted\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\n/**\n * Soft-rect meter fill — value width tweens with `fillTween`.\n * Read-only gauge (not task progress); no spring bounce.\n */\nfunction MeterIndicator({\n  className,\n  render,\n  ...props\n}: MeterPrimitive.Indicator.Props) {\n  const reduce = useReducedMotion()\n\n  return (\n    <MeterPrimitive.Indicator\n      data-slot=\"meter-indicator\"\n      className={cn(\"h-full rounded-[var(--radius)] bg-primary\", className)}\n      render={\n        render ??\n        ((htmlProps) => {\n          const width = (htmlProps.style as React.CSSProperties | undefined)\n            ?.width\n          if (reduce || typeof width !== \"string\") {\n            return <div {...htmlProps} />\n          }\n          return (\n            <motion.div\n              {...withoutDomAnimationHandlers(\n                htmlProps as Record<string, unknown>\n              )}\n              initial={false}\n              animate={{ width }}\n              transition={fillTween}\n            />\n          )\n        })\n      }\n      {...props}\n    />\n  )\n}\n\nexport { Meter, MeterIndicator, MeterLabel, MeterTrack, MeterValue }\n",
      "type": "registry:ui",
      "target": "components/ui/meter.tsx"
    }
  ],
  "type": "registry:ui"
}