import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react'
import { cn } from '@/lib/utils'
export interface IconButtonProps extends Omit, 'children'> {
variant?: 'primary' | 'secondary' | 'tertiary'
intent?: 'default' | 'danger' | 'neutral'
size?: 'default' | 'large' | 'compact' | 'small' | 'xsmall'
shape?: 'circle' | 'square'
icon: ReactNode
'aria-label': string
}
const variantIntentStyles: Record> = {
primary: {
default: 'bg-button-default text-white hover:bg-button-default/90 active:bg-button-default/80',
danger: 'bg-button-danger text-white hover:bg-button-danger/90 active:bg-button-danger/80',
neutral: 'bg-button-neutral text-white hover:bg-button-neutral/90 active:bg-button-neutral/80',
},
secondary: {
default:
'border-2 border-button-default text-button-default hover:bg-button-default/5 active:bg-button-default/10',
danger:
'border-2 border-button-danger text-button-danger hover:bg-button-danger/5 active:bg-button-danger/10',
neutral:
'border-2 border-button-neutral text-button-neutral hover:bg-button-neutral/5 active:bg-button-neutral/10',
},
tertiary: {
default: 'text-button-default hover:bg-button-default/5 active:bg-button-default/10',
danger: 'text-button-danger hover:bg-button-danger/5 active:bg-button-danger/10',
neutral: 'text-button-neutral hover:bg-button-neutral/5 active:bg-button-neutral/10',
},
}
const sizeStyles: Record = {
large: 'size-14',
default: 'size-12',
compact: 'size-10',
small: 'size-8',
xsmall: 'size-6',
}
const iconSizeStyles: Record = {
large: 'size-6',
default: 'size-6',
compact: 'size-[18px]',
small: 'size-4',
xsmall: 'size-3.5',
}
export const IconButton = forwardRef(
(
{
variant = 'primary',
intent = 'default',
size = 'default',
shape = 'circle',
icon,
disabled,
className,
...props
},
ref,
) => {
return (
)
},
)
IconButton.displayName = 'IconButton'