{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "number-field",
  "title": "Number Field",
  "description": "A formatted numeric input with range constraints, precise stepping, and complete keyboard control.",
  "dependencies": [
    "@base-ui/react",
    "lucide-react"
  ],
  "files": [
    {
      "path": "registry/rivetui/components/number-field/number-field.tsx",
      "content": "\"use client\";\n\nimport { NumberField as NumberFieldPrimitive } from \"@base-ui/react/number-field\";\nimport { Minus, Plus } from \"lucide-react\";\nimport type * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nfunction NumberField({ className, ...props }: NumberFieldPrimitive.Root.Props) {\n  return (\n    <NumberFieldPrimitive.Root\n      data-slot=\"number-field\"\n      className={cn(\"group/number-field grid w-full gap-2\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction NumberFieldLabel({\n  children,\n  className,\n  htmlFor,\n  ...props\n}: React.ComponentProps<\"label\">) {\n  return (\n    <label\n      htmlFor={htmlFor}\n      data-slot=\"number-field-label\"\n      className={cn(\n        \"w-fit font-mono text-[0.6875rem] font-medium uppercase leading-none tracking-[0.14em] text-foreground group-data-disabled/number-field:opacity-50\",\n        className,\n      )}\n      {...props}\n    >\n      {children}\n    </label>\n  );\n}\n\nfunction NumberFieldGroup({ className, ...props }: NumberFieldPrimitive.Group.Props) {\n  return (\n    <NumberFieldPrimitive.Group\n      data-slot=\"number-field-group\"\n      className={cn(\n        \"flex h-10 w-full min-w-0 items-stretch overflow-hidden border border-input bg-background outline-none transition-[background-color,border-color,box-shadow,color,opacity] duration-100 has-[input:focus-visible]:border-ring has-[input:focus-visible]:ring-2 has-[input:focus-visible]:ring-ring/40 data-invalid:border-destructive data-invalid:has-[input:focus-visible]:border-destructive data-invalid:has-[input:focus-visible]:ring-destructive/25 data-disabled:cursor-not-allowed data-disabled:bg-muted data-disabled:text-muted-foreground data-disabled:opacity-60 motion-reduce:transition-none\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction NumberFieldInput({ className, ...props }: NumberFieldPrimitive.Input.Props) {\n  return (\n    <NumberFieldPrimitive.Input\n      data-slot=\"number-field-input\"\n      className={cn(\n        \"h-full min-w-0 flex-1 bg-transparent px-3 text-center text-sm tabular-nums outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction NumberFieldDecrement({\n  \"aria-label\": ariaLabel = \"Decrease value\",\n  children,\n  className,\n  ...props\n}: NumberFieldPrimitive.Decrement.Props) {\n  return (\n    <NumberFieldPrimitive.Decrement\n      data-slot=\"number-field-decrement\"\n      aria-label={ariaLabel}\n      className={cn(\n        \"grid w-10 shrink-0 cursor-pointer place-items-center border-r border-input bg-background text-muted-foreground outline-none transition-[background-color,box-shadow,color,opacity] duration-100 hover:bg-muted hover:text-foreground focus-visible:z-10 focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-40 motion-reduce:transition-none\",\n        className,\n      )}\n      {...props}\n    >\n      {children ?? <Minus className=\"size-3.5\" aria-hidden=\"true\" />}\n    </NumberFieldPrimitive.Decrement>\n  );\n}\n\nfunction NumberFieldIncrement({\n  \"aria-label\": ariaLabel = \"Increase value\",\n  children,\n  className,\n  ...props\n}: NumberFieldPrimitive.Increment.Props) {\n  return (\n    <NumberFieldPrimitive.Increment\n      data-slot=\"number-field-increment\"\n      aria-label={ariaLabel}\n      className={cn(\n        \"grid w-10 shrink-0 cursor-pointer place-items-center border-l border-input bg-background text-muted-foreground outline-none transition-[background-color,box-shadow,color,opacity] duration-100 hover:bg-muted hover:text-foreground focus-visible:z-10 focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-ring/40 disabled:cursor-not-allowed disabled:bg-muted disabled:opacity-40 motion-reduce:transition-none\",\n        className,\n      )}\n      {...props}\n    >\n      {children ?? <Plus className=\"size-3.5\" aria-hidden=\"true\" />}\n    </NumberFieldPrimitive.Increment>\n  );\n}\n\nexport {\n  NumberField,\n  NumberFieldDecrement,\n  NumberFieldGroup,\n  NumberFieldIncrement,\n  NumberFieldInput,\n  NumberFieldLabel,\n};\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}