{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "input",
  "type": "registry:ui",
  "title": "Input",
  "description": "Text input built on Base UI, Field-aware.",
  "dependencies": [
    "@base-ui/react"
  ],
  "registryDependencies": [
    "https://seamui.dev/r/utils.json"
  ],
  "files": [
    {
      "path": "registry/seam/ui/input.tsx",
      "content": "import type * as React from \"react\"\nimport { Input as BaseInput } from \"@base-ui/react/input\"\n\nimport { cn } from \"@/lib/utils\"\n\nfunction Input({\n  className,\n  variant = \"default\",\n  ...props\n}: React.ComponentProps<typeof BaseInput> & {\n  /**\n   * default — the debossed entry well.\n   * ghost   — naked inline field, for editing in place inside a toolbar or a\n   *           table cell. Mirrors SelectTrigger's variant of the same name.\n   */\n  variant?: \"default\" | \"ghost\"\n}) {\n  return (\n    <BaseInput\n      data-slot=\"input\"\n      className={cn(\n        // The file-input line-height fills the content box (leading-7.5 =\n        // 30px = h-10 minus border and py-1 — the three are coupled): text\n        // inputs center their own text, but a file input's button + filename\n        // row is normal inline flow, which top-aligns; flex/items-center and\n        // align-content are both ignored inside its internals. Resizing a\n        // file input means overriding this leading with the same\n        // `[&[type=file]]:leading-*` variant.\n        \"flex h-10 w-full min-w-0 rounded-md squircle border py-1 text-sm outline-none [&[type=file]]:leading-7.5\",\n        // debossed — the field is carved into the surface (inset well shadow).\n        variant === \"default\" &&\n          \"border-border/60 bg-muted px-3.5 shadow-well focus-visible:border-ring\",\n        // no well and no stroke until you touch it — the border stays in the\n        // box model (transparent) so focus doesn't shift the layout.\n        variant === \"ghost\" &&\n          \"border-transparent bg-transparent px-2 hover:bg-muted/50\",\n        \"placeholder:text-muted-foreground selection:bg-primary selection:text-primary-foreground\",\n        \"focus-visible:ring-2 focus-visible:ring-ring/50\",\n        \"disabled:pointer-events-none disabled:opacity-50\",\n        // Both hooks, like Textarea: Base UI's Field sets `data-invalid`, while\n        // a plain <Input aria-invalid> is what you write outside a Field.\n        \"aria-invalid:border-destructive aria-invalid:ring-destructive/30 data-[invalid]:border-destructive data-[invalid]:ring-destructive/30\",\n        \"file:border-0 file:bg-transparent file:text-sm file:font-medium\",\n        className\n      )}\n      {...props}\n    />\n  )\n}\n\nexport { Input }\n",
      "type": "registry:ui",
      "target": "components/ui/input.tsx"
    }
  ]
}