{ "$schema": "https://ui.shadcn.com/schema/registry-item.json", "name": "input-group", "title": "Input Group", "description": "Composable input group with addons, buttons and text. Terminal aesthetic.", "dependencies": [ "class-variance-authority" ], "registryDependencies": [ "utils", "input", "theme-catppuccin-mocha", "font-jetbrains-mono" ], "files": [ { "path": "registry/ui/input-group.tsx", "content": "import * as React from \"react\";\nimport { cva, type VariantProps } from \"class-variance-authority\";\nimport { cn } from \"@/lib/utils\";\n\nfunction InputGroup({ className, ...props }: React.ComponentProps<\"div\">) {\n\treturn (\n\t\t\n\t);\n}\n\nconst inputGroupAddonVariants = cva(\n\t\"flex items-center whitespace-nowrap text-foreground1 [&_svg]:size-4 [&_svg]:shrink-0\",\n\t{\n\t\tvariants: {\n\t\t\talign: {\n\t\t\t\t\"inline-start\": \"order-first pl-3\",\n\t\t\t\t\"inline-end\": \"order-last pr-3\",\n\t\t\t\t\"block-start\": \"order-first w-full justify-center bg-background3 py-1 px-3\",\n\t\t\t\t\"block-end\": \"order-last w-full justify-center bg-background3 py-1 px-3\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: { align: \"inline-start\" },\n\t},\n);\n\ninterface InputGroupAddonProps\n\textends React.ComponentProps<\"div\">,\n\t\tVariantProps {}\n\nfunction InputGroupAddon({\n\tclassName,\n\talign,\n\tchildren,\n\t...props\n}: InputGroupAddonProps) {\n\tconst ref = React.useRef(null);\n\n\tconst handleClick = () => {\n\t\tconst control = ref.current?.closest(\"[data-slot=input-group]\")?.querySelector(\n\t\t\t\"[data-slot=input-group-control]\",\n\t\t) as HTMLInputElement | HTMLTextAreaElement | null;\n\t\tcontrol?.focus();\n\t};\n\n\treturn (\n\t\t\n\t\t\t{children}\n\t\t\n\t);\n}\n\nconst inputGroupButtonVariants = cva(\n\t\"inline-flex items-center justify-center gap-2 whitespace-nowrap select-none font-mono outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:bg-muted disabled:text-foreground2 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0\",\n\t{\n\t\tvariants: {\n\t\t\tsize: {\n\t\t\t\txs: \"px-2 py-0.5 text-xs\",\n\t\t\t\t\"icon-xs\": \"size-5\",\n\t\t\t\tsm: \"px-2 py-1 text-sm\",\n\t\t\t\t\"icon-sm\": \"size-6\",\n\t\t\t},\n\t\t\tvariant: {\n\t\t\t\tdefault:\n\t\t\t\t\t\"bg-background3 text-foreground active:brightness-110\",\n\t\t\t\tghost:\n\t\t\t\t\t\"bg-transparent text-foreground1 active:bg-background3 active:text-foreground\",\n\t\t\t},\n\t\t},\n\t\tdefaultVariants: { size: \"xs\", variant: \"ghost\" },\n\t},\n);\n\ninterface InputGroupButtonProps\n\textends React.ComponentProps<\"button\">,\n\t\tVariantProps {}\n\nfunction InputGroupButton({\n\tclassName,\n\tsize,\n\tvariant,\n\t...props\n}: InputGroupButtonProps) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction InputGroupText({ className, ...props }: React.ComponentProps<\"span\">) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction InputGroupInput({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"input\">) {\n\treturn (\n\t\t\n\t);\n}\n\nfunction InputGroupTextarea({\n\tclassName,\n\t...props\n}: React.ComponentProps<\"textarea\">) {\n\treturn (\n\t\t\n\t);\n}\n\nexport {\n\tInputGroup,\n\tInputGroupAddon,\n\tInputGroupButton,\n\tInputGroupText,\n\tInputGroupInput,\n\tInputGroupTextarea,\n\tinputGroupAddonVariants,\n\tinputGroupButtonVariants,\n};\n", "type": "registry:ui" } ], "type": "registry:ui" }