import { cva, type VariantProps } from 'class-variance-authority' import type { ComponentProps } from 'react' import { Button } from '~/components/ui/button' import { Input } from '~/components/ui/input' import { cn } from '~/lib/utils' function InputGroup({ className, ...props }: ComponentProps<'div'>) { return (
[data-align=inline-end]]:[&>input]:pr-1.5 has-[>[data-align=inline-start]]:[&>input]:pl-1.5', className, )} data-slot="input-group" role="group" {...props} /> ) } const inputGroupAddonVariants = cva( "flex h-auto cursor-pointer select-none items-center justify-center gap-2 py-2 font-medium text-muted-foreground text-sm group-data-[disabled=true]/input-group:opacity-50 [&>svg:not([class*='size-'])]:size-4", { variants: { align: { 'inline-start': 'order-first pl-3 has-[>button]:-ml-1', 'inline-end': 'order-last pr-3 has-[>button]:-mr-1', }, }, defaultVariants: { align: 'inline-start', }, }, ) function InputGroupAddon({ className, align = 'inline-start', ...props }: ComponentProps<'div'> & VariantProps) { return (
{ if ((e.target as HTMLElement).closest('button')) return e.currentTarget.parentElement?.querySelector('input')?.focus() }} role="group" {...props} /> ) } function InputGroupText({ className, ...props }: ComponentProps<'span'>) { return ( ) } function InputGroupInput({ className, ...props }: ComponentProps<'input'>) { return ( ) } function InputGroupButton({ className, type = 'button', variant = 'ghost', ...props }: ComponentProps) { return (