{
  "$schema": "https://ui.shadcn.com/schema/registry-item.json",
  "name": "input-group",
  "registryDependencies": [
    "@fulldev/button",
    "@fulldev/dropdown-menu",
    "@fulldev/input",
    "@fulldev/textarea"
  ],
  "files": [
    {
      "path": "src/components/ui/input-group/input-group.astro",
      "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"div\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<div\n  data-slot=\"input-group\"\n  role=\"group\"\n  class={cn(\n    \"group/input-group border-input has-[[data-slot=input-group-control]:focus-visible]:border-ring has-[[data-slot=input-group-control]:focus-visible]:ring-ring/50 has-[[data-slot][aria-invalid=true]]:border-destructive has-[[data-slot][aria-invalid=true]]:ring-destructive/20 dark:bg-input/30 dark:has-[[data-slot][aria-invalid=true]]:ring-destructive/40 relative flex h-9 w-full min-w-0 items-center rounded-md border shadow-xs transition-[color,box-shadow] outline-none in-data-[slot=combobox-content]:focus-within:border-inherit in-data-[slot=combobox-content]:focus-within:ring-0 has-[[data-slot=input-group-control]:focus-visible]:ring-3 has-[[data-slot][aria-invalid=true]]:ring-3 has-[>[data-align=block-end]]:h-auto has-[>[data-align=block-end]]:flex-col has-[>[data-align=block-start]]:h-auto has-[>[data-align=block-start]]:flex-col has-[>textarea]:h-auto has-[>[data-align=inline-end]]:[&>[data-slot=input-group-control]]:pr-1.5 has-[>[data-align=inline-start]]:[&>[data-slot=input-group-control]]:pl-1.5 has-[>[data-align=block-end]]:[&>input]:pt-3 has-[>[data-align=block-start]]:[&>input]:pb-3\",\n    className\n  )}\n  {...props}\n>\n  <slot />\n</div>\n\n<script>\n  if (!document.documentElement.dataset.inputGroupBound) {\n    document.documentElement.dataset.inputGroupBound = \"true\"\n\n    document.addEventListener(\"click\", (event) => {\n      const target = event.target\n\n      if (!(target instanceof Element)) return\n\n      const addon = target.closest('[data-slot=\"input-group-addon\"]')\n      if (!(addon instanceof HTMLElement)) return\n\n      if (\n        target.closest(\n          \"a, button, input, textarea, select, option, summary, [role='button']\"\n        )\n      ) {\n        return\n      }\n\n      const group = addon.closest('[data-slot=\"input-group\"]')\n      const control = group?.querySelector('[data-slot=\"input-group-control\"]')\n\n      if (control instanceof HTMLElement) {\n        control.focus()\n      }\n    })\n  }\n</script>\n",
      "type": "registry:ui"
    },
    {
      "path": "src/components/ui/input-group/input-group-addon.astro",
      "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\n\nconst variants = cva(\n  \"text-muted-foreground flex h-auto cursor-text items-center justify-center gap-2 py-1.5 text-sm font-medium select-none group-data-[disabled=true]/input-group:opacity-50 [&>kbd]:rounded-[calc(var(--radius)-5px)] [&>svg:not([class*='size-'])]:size-4\",\n  {\n    variants: {\n      align: {\n        \"inline-start\":\n          \"order-first pl-2 has-[>a]:-ml-1 has-[>button]:-ml-1 has-[>kbd]:ml-[-0.15rem]\",\n        \"inline-end\":\n          \"order-last pr-2 has-[>a]:-mr-1 has-[>button]:-mr-1 has-[>kbd]:mr-[-0.15rem]\",\n        \"block-start\":\n          \"order-first w-full justify-start px-2.5 pt-2 group-has-[>input]/input-group:pt-2 [.border-b]:pb-2\",\n        \"block-end\":\n          \"order-last w-full justify-start px-2.5 pb-2 group-has-[>input]/input-group:pb-2 [.border-t]:pt-2\",\n      },\n    },\n    defaultVariants: {\n      align: \"inline-start\",\n    },\n  }\n)\n\ntype Props = HTMLAttributes<\"div\"> & VariantProps<typeof variants>\n\nconst { class: className, align = \"inline-start\", ...props } = Astro.props\n---\n\n<div\n  role=\"group\"\n  data-slot=\"input-group-addon\"\n  data-align={align}\n  class={cn(variants({ align }), className)}\n  {...props}\n>\n  <slot />\n</div>\n",
      "type": "registry:ui"
    },
    {
      "path": "src/components/ui/input-group/input-group-button.astro",
      "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\nimport { cva, type VariantProps } from \"class-variance-authority\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Button, type ButtonVariantProps } from \"@/components/ui/button\"\n\nconst variants = cva(\"flex items-center gap-2 text-sm shadow-none\", {\n  variants: {\n    size: {\n      xs: \"h-6 gap-1 rounded-[calc(var(--radius)-5px)] px-1.5 [&>svg:not([class*='size-'])]:size-3.5\",\n      sm: \"\",\n      \"icon-xs\": \"size-6 rounded-[calc(var(--radius)-5px)] p-0 has-[>svg]:p-0\",\n      \"icon-sm\": \"size-8 p-0 has-[>svg]:p-0\",\n    },\n  },\n  defaultVariants: {\n    size: \"xs\",\n  },\n})\n\ntype Props = VariantProps<typeof variants> &\n  HTMLAttributes<\"button\"> &\n  HTMLAttributes<\"a\"> & {\n    type?: \"button\" | \"submit\" | \"reset\"\n    variant?: ButtonVariantProps[\"variant\"]\n  }\n\nconst {\n  class: className,\n  type = \"button\",\n  variant = \"ghost\",\n  size = \"xs\",\n  ...props\n} = Astro.props\n\nconst isLink = \"href\" in Astro.props\n---\n\n<Button\n  data-size={size}\n  type={isLink ? undefined : type}\n  variant={variant}\n  size={size}\n  class={cn(variants({ size }), className)}\n  {...props}\n>\n  <slot />\n</Button>\n",
      "type": "registry:ui"
    },
    {
      "path": "src/components/ui/input-group/input-group-input.astro",
      "content": "---\nimport type { ComponentProps } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Input } from \"@/components/ui/input\"\n\ntype Props = ComponentProps<typeof Input>\n\nconst {\n  class: className,\n  \"data-slot\": dataSlot = \"input-group-control\",\n  ...props\n} = Astro.props\n---\n\n<Input\n  data-slot={dataSlot}\n  class={cn(\n    \"h-full flex-1 rounded-none border-0 bg-transparent shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent\",\n    className\n  )}\n  {...props}\n/>\n",
      "type": "registry:ui"
    },
    {
      "path": "src/components/ui/input-group/input-group-text.astro",
      "content": "---\nimport type { HTMLAttributes } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\n\ntype Props = HTMLAttributes<\"span\">\n\nconst { class: className, ...props } = Astro.props\n---\n\n<span\n  data-slot=\"input-group-text\"\n  class={cn(\n    \"text-muted-foreground flex items-center gap-2 text-sm [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4\",\n    className\n  )}\n  {...props}\n>\n  <slot />\n</span>\n",
      "type": "registry:ui"
    },
    {
      "path": "src/components/ui/input-group/input-group-textarea.astro",
      "content": "---\nimport type { ComponentProps } from \"astro/types\"\n\nimport { cn } from \"@/lib/utils\"\nimport { Textarea } from \"@/components/ui/textarea\"\n\ntype Props = ComponentProps<typeof Textarea>\n\nconst { class: className, ...props } = Astro.props\n---\n\n<Textarea\n  data-slot=\"input-group-control\"\n  class={cn(\n    \"flex-1 resize-none rounded-none border-0 bg-transparent py-2 shadow-none ring-0 focus-visible:ring-0 aria-invalid:ring-0 dark:bg-transparent\",\n    className\n  )}\n  {...props}\n/>\n",
      "type": "registry:ui"
    },
    {
      "path": "src/components/ui/input-group/index.ts",
      "content": "export { default as InputGroup } from \"./input-group.astro\"\nexport { default as InputGroupAddon } from \"./input-group-addon.astro\"\nexport { default as InputGroupButton } from \"./input-group-button.astro\"\nexport { default as InputGroupInput } from \"./input-group-input.astro\"\nexport { default as InputGroupText } from \"./input-group-text.astro\"\nexport { default as InputGroupTextarea } from \"./input-group-textarea.astro\"\n",
      "type": "registry:ui"
    }
  ],
  "type": "registry:ui"
}