{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "input-group",
  "title": "Input Group",
  "description": "An input with leading and trailing affixes inside one container.",
  "registryDependencies": [
    "https://guillermo-rebolledo.github.io/materialcn/r/input.json",
    "https://guillermo-rebolledo.github.io/materialcn/r/materialcn-theme.json",
    "https://guillermo-rebolledo.github.io/materialcn/r/utils.json"
  ],
  "files": [
    {
      "path": "src/components/ui/input-group.tsx",
      "content": "import type * as React from \"react\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Input } from \"./input\"\n\nconst interactiveElementSelector = [\n  \"a\",\n  \"button\",\n  \"input\",\n  \"select\",\n  \"textarea\",\n  \"[contenteditable]\",\n  '[role=\"button\"]',\n  '[role=\"link\"]',\n  '[tabindex]:not([tabindex=\"-1\"])',\n].join(\",\")\n\nfunction focusInputGroupControl(\n  addon: HTMLDivElement,\n  eventTarget: EventTarget | null,\n) {\n  if (\n    eventTarget instanceof HTMLElement &&\n    eventTarget.closest(interactiveElementSelector)\n  ) {\n    return\n  }\n\n  const group = addon.closest('[data-slot=\"input-group\"]')\n  const control = group?.querySelector<HTMLInputElement | HTMLTextAreaElement>(\n    '[data-slot=\"input-group-control\"]',\n  )\n  control?.focus()\n}\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n  return (\n    <div\n      {...props}\n      role=\"group\"\n      data-slot=\"input-group\"\n      className={cn(\n        \"group/input-group relative flex w-full min-w-0 items-center outline-none\",\n        className,\n      )}\n    />\n  )\n}\n\nfunction InputGroupAddon({\n  align = \"inline-start\",\n  className,\n  onClick,\n  ...props\n}: React.ComponentProps<\"div\"> & {\n  align?: \"inline-start\" | \"inline-end\" | \"block-start\" | \"block-end\"\n}) {\n  return (\n    <div\n      {...props}\n      role=\"group\"\n      data-align={align}\n      data-slot=\"input-group-addon\"\n      className={cn(\n        \"flex shrink-0 items-center justify-center gap-2 text-muted-foreground\",\n        align === \"inline-start\" && \"order-first\",\n        align === \"inline-end\" && \"order-last\",\n        align === \"block-start\" && \"order-first w-full\",\n        align === \"block-end\" && \"order-last w-full\",\n        className,\n      )}\n      onClick={(event) => {\n        onClick?.(event)\n        if (event.defaultPrevented) return\n        focusInputGroupControl(event.currentTarget, event.target)\n      }}\n    />\n  )\n}\n\nfunction InputGroupInput({\n  className,\n  ...props\n}: React.ComponentProps<\"input\">) {\n  return (\n    <Input\n      {...props}\n      data-slot=\"input-group-control\"\n      className={cn(\n        \"min-w-0 flex-1 rounded-none border-0 bg-transparent shadow-none focus-visible:border-0 focus-visible:shadow-none\",\n        className,\n      )}\n    />\n  )\n}\n\nfunction InputGroupTextarea({\n  className,\n  ...props\n}: React.ComponentProps<\"textarea\">) {\n  return (\n    <textarea\n      {...props}\n      data-slot=\"input-group-control\"\n      className={cn(\n        \"field-sizing-content min-h-24 min-w-0 flex-1 resize-y bg-transparent px-4 py-3 text-m3-body-lg text-foreground outline-none placeholder:text-muted-foreground disabled:cursor-not-allowed disabled:text-muted-foreground/38\",\n        className,\n      )}\n    />\n  )\n}\n\nexport { InputGroup, InputGroupAddon, InputGroupInput, InputGroupTextarea }\n",
      "type": "registry:ui"
    }
  ],
  "categories": [
    "forms"
  ],
  "type": "registry:ui"
}