import { forwardRef, type ButtonHTMLAttributes, type ReactNode } from 'react'; import { cn } from './cn'; import { variants } from './variants'; import { focusRing, motionColors } from './tokens'; export type IconButtonTone = 'ghost' | 'surface' | 'danger'; export type IconButtonSize = 'xs' | 'sm' | 'md' | 'lg'; export const iconButtonStyles = variants({ base: cn('inline-flex items-center justify-center disabled:cursor-not-allowed disabled:opacity-50', focusRing, motionColors), variants: { tone: { ghost: 'text-soft hover:bg-accent-wash hover:text-accent', surface: 'border border-line bg-surface text-foreground hover:bg-accent-wash hover:text-accent', danger: 'text-danger hover:bg-danger-wash', }, size: { xs: 'h-5 w-5 rounded-sm text-xs', sm: 'h-7 w-7 rounded-md text-xs', md: 'h-8 w-8 rounded-md text-sm', lg: 'h-10 w-10 rounded-lg text-base', }, }, defaults: { tone: 'ghost', size: 'md', }, }); export const IconButton = forwardRef & { children: ReactNode; tone?: IconButtonTone; size?: IconButtonSize; }>(function IconButton({ className, children, tone = 'ghost', size = 'md', type = 'button', ...props }, ref) { return ( ); });