{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "input",
  "type": "registry:ui",
  "dependencies": [
    "class-variance-authority"
  ],
  "registryDependencies": [
    "https://ui.getlyse.com/r/lyse-tokens.json",
    "https://ui.getlyse.com/r/field.json"
  ],
  "files": [
    {
      "path": "registry/new-york/ui/input/input.tsx",
      "content": "import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport \"./input.css\"\n\n/* ------------------------------------------------------------------ */\n/*  CVA                                                                */\n/* ------------------------------------------------------------------ */\n\nconst inputVariants = cva(\n  \"input-base flex items-center overflow-hidden w-full\",\n  {\n    variants: {\n      variant: {\n        default: \"\",\n        destructive: \"input-destructive\",\n      },\n      size: {\n        sm: \"h-[var(--layout-size-lg)] gap-[var(--layout-gap-sm)] px-[var(--layout-padding-md)] rounded-[var(--layout-radius-lg)] text-content-note [&_svg]:h-[var(--layout-size-xs)] [&_svg]:w-[var(--layout-size-xs)]\",\n        md: \"h-[var(--layout-size-xl)] gap-[var(--layout-gap-sm)] px-[var(--layout-padding-md)] rounded-[var(--layout-radius-lg)] text-content-note [&_svg]:h-[var(--layout-size-xs)] [&_svg]:w-[var(--layout-size-xs)]\",\n        lg: \"h-[var(--layout-size-2xl)] gap-[var(--layout-gap-md)] px-[var(--layout-padding-lg)] rounded-[var(--layout-radius-xl)] text-content-body [&_svg]:h-[var(--layout-size-sm)] [&_svg]:w-[var(--layout-size-sm)]\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"md\",\n    },\n  }\n)\n\nconst inputHintVariants = cva(\"input-hint text-content-note\", {\n  variants: {\n    variant: {\n      default: \"\",\n      destructive: \"input-hint-destructive\",\n    },\n  },\n  defaultVariants: {\n    variant: \"default\",\n  },\n})\n\n/* ------------------------------------------------------------------ */\n/*  Input                                                              */\n/* ------------------------------------------------------------------ */\n\nfunction Input({\n  className,\n  variant,\n  size,\n  leading,\n  trailing,\n  disabled,\n  ref,\n  ...props\n}: Omit<React.ComponentProps<\"input\">, \"size\"> &\n  VariantProps<typeof inputVariants> & {\n    leading?: React.ReactNode\n    trailing?: React.ReactNode\n  }) {\n  return (\n    <div\n      data-slot=\"input\"\n      data-disabled={disabled || undefined}\n      className={cn(inputVariants({ variant, size, className }))}\n    >\n      {leading && (\n        <span\n          data-slot=\"input-leading\"\n          className=\"input-leading shrink-0 flex items-center\"\n        >\n          {leading}\n        </span>\n      )}\n      <input\n        ref={ref}\n        disabled={disabled}\n        aria-invalid={variant === \"destructive\" || undefined}\n        className=\"input-native flex-1 min-w-0 bg-transparent outline-none\"\n        {...props}\n      />\n      {trailing && (\n        <span\n          data-slot=\"input-trailing\"\n          className=\"input-trailing shrink-0 flex items-center\"\n        >\n          {trailing}\n        </span>\n      )}\n    </div>\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  InputField                                                         */\n/*  @deprecated Use <Field> from '@/components/ui/field' instead.      */\n/* ------------------------------------------------------------------ */\n\n/** @deprecated Use `<Field>` from `@/components/ui/field` instead. */\nfunction InputField({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"input-field\"\n      className={cn(\n        \"flex flex-col gap-[var(--layout-gap-md)] w-full\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n    </div>\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  InputLabel                                                         */\n/*  @deprecated Use <FieldLabel> from '@/components/ui/field' instead.  */\n/* ------------------------------------------------------------------ */\n\n/** @deprecated Use `<FieldLabel>` from `@/components/ui/field` instead. */\nfunction InputLabel({\n  className,\n  required,\n  children,\n  ...props\n}: React.ComponentProps<\"label\"> & { required?: boolean }) {\n  return (\n    <label\n      data-slot=\"input-label\"\n      className={cn(\n        \"input-label inline-flex items-center gap-[var(--layout-gap-xs)] text-content-note font-accent\",\n        className\n      )}\n      {...props}\n    >\n      {children}\n      {required && <span className=\"input-label-asterisk\">*</span>}\n    </label>\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  InputHint                                                          */\n/*  @deprecated Use <FieldDescription> + <FieldError> instead.         */\n/* ------------------------------------------------------------------ */\n\n/** @deprecated Use `<FieldDescription>` + `<FieldError>` from `@/components/ui/field` instead. */\nfunction InputHint({\n  className,\n  variant,\n  children,\n  ...props\n}: React.ComponentProps<\"p\"> & VariantProps<typeof inputHintVariants>) {\n  return (\n    <p\n      data-slot=\"input-hint\"\n      className={cn(inputHintVariants({ variant, className }))}\n      {...props}\n    >\n      {children}\n    </p>\n  )\n}\n\nexport {\n  Input,\n  InputField,\n  InputLabel,\n  InputHint,\n  inputVariants,\n  inputHintVariants,\n}\n",
      "type": "registry:ui"
    },
    {
      "path": "registry/new-york/ui/input/input.css",
      "content": "/* ================================================================\n * INPUT — Styles\n * Structure (flex, gap, padding, radius) lives in input.tsx via cva.\n * Theming (colors, borders, focus ring) lives here via tokens.\n * ================================================================ */\n\n/* --------------------------------\n * Input — base container\n * -------------------------------- */\n.input-base {\n  background: var(--background-neutral-faint-default);\n  border: var(--layout-border-thin) solid var(--border-default);\n  color: var(--text-base-strong);\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  .input-base {\n    transition:\n      border-color 150ms ease,\n      box-shadow 150ms ease;\n  }\n}\n\n.input-base:focus-within {\n  outline: none;\n  box-shadow: 0 0 0 2px var(--shadow-brand-moderate);\n}\n\n/* --------------------------------\n * Input — native input element\n * -------------------------------- */\n.input-native {\n  color: inherit;\n  font: inherit;\n}\n\n.input-native::placeholder {\n  color: var(--text-base-moderate);\n}\n\n/* --------------------------------\n * Input — disabled\n * -------------------------------- */\n.input-base[data-disabled] {\n  background: var(--background-disabled);\n  border-color: var(--border-disabled);\n  color: var(--text-disabled);\n  cursor: not-allowed;\n  pointer-events: none;\n}\n\n.input-base[data-disabled] .input-native::placeholder {\n  color: var(--text-disabled);\n}\n\n/* --------------------------------\n * Input — leading / trailing icons\n * -------------------------------- */\n.input-leading {\n  color: var(--icon-neutral-moderate);\n}\n\n.input-trailing {\n  color: var(--icon-neutral-moderate);\n}\n\n.input-base[data-disabled] .input-leading,\n.input-base[data-disabled] .input-trailing {\n  color: var(--text-disabled);\n}\n\n/* --------------------------------\n * Input — destructive variant\n * -------------------------------- */\n.input-destructive {\n  border-color: var(--border-danger-strong);\n}\n\n.input-destructive:focus-within {\n  box-shadow: 0 0 0 2px var(--shadow-danger-moderate);\n}\n\n.input-destructive .input-trailing {\n  color: var(--icon-danger-moderate);\n}\n\n/* --------------------------------\n * Input — Field error (auto-propagated via data-field-error)\n * -------------------------------- */\n.input-base:has([data-field-error]) {\n  border-color: var(--border-danger-strong);\n}\n\n.input-base:has([data-field-error]):focus-within {\n  box-shadow: 0 0 0 2px var(--shadow-danger-moderate);\n}\n\n.input-base:has([data-field-error]) .input-trailing {\n  color: var(--icon-danger-moderate);\n}\n\n/* --------------------------------\n * InputLabel\n * -------------------------------- */\n.input-label {\n  color: var(--text-base-strong);\n}\n\n.input-label-asterisk {\n  color: var(--text-danger-moderate);\n}\n\n/* --------------------------------\n * InputHint\n * -------------------------------- */\n.input-hint {\n  color: var(--text-base-moderate);\n}\n\n.input-hint-destructive {\n  color: var(--text-danger-moderate);\n}\n\n",
      "type": "registry:ui"
    }
  ]
}