{"name":"number-field","type":"registry:ui","files":[{"path":"number-field.tsx","type":"registry:ui","content":"\"use client\"\n\nimport * as React from \"react\"\nimport { NumberField as NumberFieldPrimitive } from \"@base-ui-components/react/number-field\"\nimport { Minus as MinusIcon, Plus as PlusIcon } from \"honestui/icons\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Label } from \"@/components/ui/label\"\n\nconst NumberFieldContext = React.createContext<{\n  fieldId: string\n} | null>(null)\n\nfunction NumberField({\n  id,\n  className,\n  size = \"default\",\n  ...props\n}: NumberFieldPrimitive.Root.Props & {\n  size?: \"sm\" | \"default\" | \"lg\"\n}) {\n  const generatedId = React.useId()\n  const fieldId = id ?? generatedId\n\n  return (\n    <NumberFieldContext.Provider value={{ fieldId }}>\n      <NumberFieldPrimitive.Root\n        id={fieldId}\n        className={cn(\n          \"flex flex-col items-start gap-[var(--hui-space-2)]\",\n          className\n        )}\n        data-slot=\"number-field\"\n        data-size={size}\n        {...props}\n      />\n    </NumberFieldContext.Provider>\n  )\n}\n\nfunction NumberFieldGroup({\n  className,\n  ...props\n}: NumberFieldPrimitive.Group.Props) {\n  return (\n    <NumberFieldPrimitive.Group\n      className={cn(\n        \"inline-flex items-center\",\n        className\n      )}\n      data-slot=\"number-field-group\"\n      {...props}\n    />\n  )\n}\n\nfunction NumberFieldDecrement({\n  className,\n  ...props\n}: NumberFieldPrimitive.Decrement.Props) {\n  return (\n    <NumberFieldPrimitive.Decrement\n      className={cn(\n        \"relative flex size-[var(--hui-space-7)] shrink-0 cursor-pointer items-center justify-center rounded-s-[var(--hui-radius-1)] border-[0.5px] border-[var(--hui-color-border-base-tertiary)] bg-[var(--hui-color-background-base-secondary)] p-0 text-[var(--hui-color-foreground-base-primary)] [transition:var(--hui-transition-interactive)] hover:bg-[var(--hui-color-background-base-primary-hover)] focus-visible:[outline:var(--hui-focus-ring)] focus-visible:outline-offset-[var(--hui-focus-ring-offset-inset-border)] not-data-disabled:active:bg-[var(--hui-color-background-neutral-secondary)] data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50 pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      data-slot=\"number-field-decrement\"\n      {...props}\n    >\n      <MinusIcon />\n    </NumberFieldPrimitive.Decrement>\n  )\n}\n\nfunction NumberFieldIncrement({\n  className,\n  ...props\n}: NumberFieldPrimitive.Increment.Props) {\n  return (\n    <NumberFieldPrimitive.Increment\n      className={cn(\n        \"relative flex size-[var(--hui-space-7)] shrink-0 cursor-pointer items-center justify-center rounded-e-[var(--hui-radius-1)] border-[0.5px] border-[var(--hui-color-border-base-tertiary)] bg-[var(--hui-color-background-base-secondary)] p-0 text-[var(--hui-color-foreground-base-primary)] [transition:var(--hui-transition-interactive)] hover:bg-[var(--hui-color-background-base-primary-hover)] focus-visible:[outline:var(--hui-focus-ring)] focus-visible:outline-offset-[var(--hui-focus-ring-offset-inset-border)] not-data-disabled:active:bg-[var(--hui-color-background-neutral-secondary)] data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50 pointer-coarse:after:absolute pointer-coarse:after:size-full pointer-coarse:after:min-h-11 pointer-coarse:after:min-w-11 [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4\",\n        className\n      )}\n      data-slot=\"number-field-increment\"\n      {...props}\n    >\n      <PlusIcon />\n    </NumberFieldPrimitive.Increment>\n  )\n}\n\nfunction NumberFieldInput({\n  className,\n  ...props\n}: NumberFieldPrimitive.Input.Props) {\n  return (\n    <NumberFieldPrimitive.Input\n      className={cn(\n        \"h-[var(--hui-space-7)] min-w-0 flex-[1_0_0] border-[0.5px] border-[var(--hui-color-border-base-tertiary)] bg-[var(--hui-color-background-base-primary)] px-[var(--hui-space-2)] text-center text-[var(--hui-color-foreground-base-primary)] tabular-nums outline-none [font-family:var(--hui-font-body)] [font-size:var(--hui-font-size-small)] [font-weight:var(--hui-font-weight-regular)] [letter-spacing:var(--hui-letter-spacing-small)] [line-height:var(--hui-line-height-small)] [transition:var(--hui-transition-interactive)] focus:border-[var(--hui-color-border-accent-emphasis)] focus:bg-[var(--hui-color-background-base-primary)] data-disabled:pointer-events-none data-disabled:cursor-not-allowed data-disabled:opacity-50 data-invalid:border-[var(--hui-color-border-danger-emphasis)] data-invalid:focus:border-[var(--hui-color-border-danger-emphasis-hover)]\",\n        className\n      )}\n      data-slot=\"number-field-input\"\n      {...props}\n    />\n  )\n}\n\nfunction NumberFieldScrubArea({\n  className,\n  label,\n  ...props\n}: NumberFieldPrimitive.ScrubArea.Props & {\n  label: string\n}) {\n  const context = React.useContext(NumberFieldContext)\n\n  if (!context) {\n    throw new Error(\n      \"NumberFieldScrubArea must be used within a NumberField component for accessibility.\"\n    )\n  }\n\n  return (\n    <NumberFieldPrimitive.ScrubArea\n      className={cn(\"flex cursor-ew-resize\", className)}\n      data-slot=\"number-field-scrub-area\"\n      {...props}\n    >\n      <Label htmlFor={context.fieldId} className=\"cursor-ew-resize\">\n        {label}\n      </Label>\n      <NumberFieldPrimitive.ScrubAreaCursor className=\"drop-shadow-[0_1px_1px_var(--hui-color-overlay-black-a7)] filter\">\n        <CursorGrowIcon />\n      </NumberFieldPrimitive.ScrubAreaCursor>\n    </NumberFieldPrimitive.ScrubArea>\n  )\n}\n\nfunction CursorGrowIcon(props: React.ComponentProps<\"svg\">) {\n  return (\n    <svg\n      width=\"26\"\n      height=\"14\"\n      viewBox=\"0 0 24 14\"\n      fill=\"black\"\n      stroke=\"white\"\n      xmlns=\"http://www.w3.org/2000/svg\"\n      {...props}\n    >\n      <path d=\"M19.5 5.5L6.49737 5.51844V2L1 6.9999L6.5 12L6.49737 8.5L19.5 8.5V12L25 6.9999L19.5 2V5.5Z\" />\n    </svg>\n  )\n}\n\nexport {\n  NumberField,\n  NumberFieldScrubArea,\n  NumberFieldDecrement,\n  NumberFieldIncrement,\n  NumberFieldGroup,\n  NumberFieldInput,\n}\n","target":"components/ui/number-field.tsx"}],"dependencies":["@base-ui-components/react","honestui"],"registryDependencies":["https://www.honestui.com/r/label.json"]}