{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "field",
  "title": "Field",
  "description": "A field component.",
  "registryDependencies": [
    "@cubby-ui/input"
  ],
  "files": [
    {
      "path": "registry/default/field/field.tsx",
      "content": "\"use client\";\n\nimport * as React from \"react\";\nimport { Field as BaseField } from \"@base-ui/react/field\";\n\nimport { cn } from \"@/lib/utils\";\nimport { inputVariants } from \"@/registry/default/input/input\";\n\nfunction Field({ className, ...props }: BaseField.Root.Props) {\n  return (\n    <BaseField.Root\n      data-slot=\"field\"\n      className={cn(\"space-y-2\", className)}\n      {...props}\n    />\n  );\n}\n\nfunction FieldLabel({ className, ...props }: BaseField.Label.Props) {\n  return (\n    <BaseField.Label\n      data-slot=\"field-label\"\n      className={cn(\n        \"text-foreground flex items-center gap-2 text-sm leading-5 font-medium select-none\",\n        \"data-disabled:pointer-events-none data-disabled:opacity-60\",\n        \"data-invalid:text-destructive\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction FieldControl({ className, ...props }: BaseField.Control.Props) {\n  return (\n    <BaseField.Control\n      data-slot=\"field-control\"\n      className={cn(inputVariants(), className)}\n      {...props}\n    />\n  );\n}\n\nfunction FieldDescription({\n  className,\n  ...props\n}: BaseField.Description.Props) {\n  return (\n    <BaseField.Description\n      data-slot=\"field-description\"\n      className={cn(\n        \"text-muted-foreground text-sm data-disabled:opacity-60\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction FieldError({ className, ...props }: BaseField.Error.Props) {\n  return (\n    <BaseField.Error\n      data-slot=\"field-error\"\n      className={cn(\n        \"text-destructive text-sm\",\n        // In a FieldErrorSlot: fades in and out; on a swap the old error\n        // hides at once. Set here, not on the slot, to keep `:has()` cheap.\n        \"[[data-slot=field-error-slot]>&]:transition-opacity [[data-slot=field-error-slot]>&]:duration-140 motion-reduce:[[data-slot=field-error-slot]>&]:transition-none\",\n        \"[[data-slot=field-error-slot]>&[data-ending-style]]:opacity-0 [[data-slot=field-error-slot]>&[data-starting-style]]:opacity-0\",\n        \"[[data-slot=field-error-slot]:has(>[data-slot=field-error]:not([data-ending-style]))>&[data-ending-style]]:hidden\",\n        \"[[data-slot=field-error-slot]:has(>[data-slot=field-error][data-ending-style])>&[data-starting-style]]:opacity-100\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction FieldErrorSlot({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"field-error-slot\"\n      className={cn(\n        \"-mt-2 grid h-0 overflow-clip [interpolate-size:allow-keywords] *:col-start-1 *:row-start-1\",\n        \"ease-out-expo transition-[height,margin-top] duration-140 motion-reduce:transition-none\",\n        \"has-[[data-slot=field-error]:not([data-ending-style])]:mt-0 has-[[data-slot=field-error]:not([data-ending-style])]:h-auto\",\n        className,\n      )}\n      {...props}\n    />\n  );\n}\n\nfunction FieldItem({ className, ...props }: BaseField.Item.Props) {\n  return (\n    <BaseField.Item\n      data-slot=\"field-item\"\n      className={cn(\"flex items-center gap-3\", className)}\n      {...props}\n    />\n  );\n}\n\nconst FieldValidity = BaseField.Validity;\n\nexport {\n  Field,\n  FieldLabel,\n  FieldControl,\n  FieldDescription,\n  FieldError,\n  FieldErrorSlot,\n  FieldItem,\n  FieldValidity,\n};\n",
      "type": "registry:ui",
      "target": "components/ui/cubby-ui/field.tsx"
    }
  ],
  "type": "registry:ui"
}