{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "textarea",
  "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/textarea/textarea.tsx",
      "content": "import * as React from \"react\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport \"./textarea.css\"\n\n/* ------------------------------------------------------------------ */\n/*  CVA                                                                */\n/* ------------------------------------------------------------------ */\n\nconst textareaVariants = cva(\n  \"textarea-base flex w-full text-content-note font-regular resize-y\",\n  {\n    variants: {\n      variant: {\n        default: \"\",\n        destructive: \"textarea-destructive\",\n      },\n      size: {\n        sm: \"min-h-[6.25rem] p-[var(--layout-padding-md)] rounded-[var(--layout-radius-lg)] text-content-note\",\n        md: \"min-h-[8.125rem] p-[var(--layout-padding-md)] rounded-[var(--layout-radius-lg)] text-content-note\",\n        lg: \"min-h-[10.375rem] p-[var(--layout-padding-lg)] rounded-[var(--layout-radius-xl)] text-content-body\",\n      },\n    },\n    defaultVariants: {\n      variant: \"default\",\n      size: \"md\",\n    },\n  }\n)\n\nconst textareaHintVariants = cva(\"textarea-hint text-content-note\", {\n  variants: {\n    variant: {\n      default: \"\",\n      destructive: \"textarea-hint-destructive\",\n    },\n  },\n  defaultVariants: {\n    variant: \"default\",\n  },\n})\n\n/* ------------------------------------------------------------------ */\n/*  Textarea                                                           */\n/* ------------------------------------------------------------------ */\n\nfunction Textarea({\n  className,\n  variant,\n  size,\n  ...props\n}: React.ComponentProps<\"textarea\"> &\n  VariantProps<typeof textareaVariants>) {\n  return (\n    <textarea\n      data-slot=\"textarea\"\n      aria-invalid={variant === \"destructive\" || undefined}\n      className={cn(textareaVariants({ variant, size, className }))}\n      {...props}\n    />\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  TextareaField                                                      */\n/*  @deprecated Use <Field> from '@/components/ui/field' instead.      */\n/* ------------------------------------------------------------------ */\n\n/** @deprecated Use `<Field>` from `@/components/ui/field` instead. */\nfunction TextareaField({\n  className,\n  children,\n  ...props\n}: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      data-slot=\"textarea-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/*  TextareaLabel                                                      */\n/*  @deprecated Use <FieldLabel> from '@/components/ui/field' instead.  */\n/* ------------------------------------------------------------------ */\n\n/** @deprecated Use `<FieldLabel>` from `@/components/ui/field` instead. */\nfunction TextareaLabel({\n  className,\n  required,\n  children,\n  ...props\n}: React.ComponentProps<\"label\"> & { required?: boolean }) {\n  return (\n    <label\n      data-slot=\"textarea-label\"\n      className={cn(\n        \"textarea-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=\"textarea-label-asterisk\">*</span>}\n    </label>\n  )\n}\n\n/* ------------------------------------------------------------------ */\n/*  TextareaHint                                                       */\n/*  @deprecated Use <FieldDescription> + <FieldError> instead.         */\n/* ------------------------------------------------------------------ */\n\n/** @deprecated Use `<FieldDescription>` + `<FieldError>` from `@/components/ui/field` instead. */\nfunction TextareaHint({\n  className,\n  variant,\n  children,\n  ...props\n}: React.ComponentProps<\"p\"> & VariantProps<typeof textareaHintVariants>) {\n  return (\n    <p\n      data-slot=\"textarea-hint\"\n      className={cn(textareaHintVariants({ variant, className }))}\n      {...props}\n    >\n      {children}\n    </p>\n  )\n}\n\nexport {\n  Textarea,\n  TextareaField,\n  TextareaLabel,\n  TextareaHint,\n  textareaVariants,\n  textareaHintVariants,\n}\n",
      "type": "registry:ui"
    },
    {
      "path": "registry/new-york/ui/textarea/textarea.css",
      "content": "/* ================================================================\n * TEXTAREA — Styles\n * Structure (flex, padding, radius, min-height) lives in textarea.tsx via cva.\n * Theming (colors, borders, focus ring) lives here via tokens.\n * ================================================================ */\n\n/* --------------------------------\n * Base\n * -------------------------------- */\n.textarea-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  .textarea-base {\n    transition:\n      border-color 150ms ease,\n      box-shadow 150ms ease;\n  }\n}\n\n/* --------------------------------\n * Placeholder\n * -------------------------------- */\n.textarea-base::placeholder {\n  color: var(--text-base-moderate);\n}\n\n/* --------------------------------\n * Focus\n * -------------------------------- */\n.textarea-base:focus-visible {\n  outline: none;\n  box-shadow: 0 0 0 2px var(--shadow-brand-moderate);\n}\n\n/* --------------------------------\n * Disabled\n * -------------------------------- */\n.textarea-base:disabled {\n  background: var(--background-disabled);\n  color: var(--text-disabled);\n  border-color: var(--border-disabled);\n  cursor: not-allowed;\n  resize: none;\n}\n\n.textarea-base:disabled::placeholder {\n  color: var(--text-disabled);\n}\n\n/* --------------------------------\n * Destructive variant\n * -------------------------------- */\n.textarea-destructive {\n  border-color: var(--border-danger-strong);\n}\n\n.textarea-destructive:focus-visible {\n  box-shadow: 0 0 0 2px var(--shadow-danger-moderate);\n}\n\n/* --------------------------------\n * Textarea — Field error (auto-propagated via data-field-error)\n * -------------------------------- */\n.textarea-base[data-field-error] {\n  border-color: var(--border-danger-strong);\n}\n\n.textarea-base[data-field-error]:focus-visible {\n  box-shadow: 0 0 0 2px var(--shadow-danger-moderate);\n}\n\n/* --------------------------------\n * TextareaLabel\n * -------------------------------- */\n.textarea-label {\n  color: var(--text-base-strong);\n}\n\n.textarea-label-asterisk {\n  color: var(--text-danger-moderate);\n}\n\n/* --------------------------------\n * TextareaHint\n * -------------------------------- */\n.textarea-hint {\n  color: var(--text-base-moderate);\n}\n\n.textarea-hint-destructive {\n  color: var(--text-danger-moderate);\n}\n",
      "type": "registry:ui"
    }
  ]
}