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 (
)
}
export { InputGroup, InputGroupAddon, InputGroupButton, InputGroupInput, InputGroupText }