import type { ButtonHTMLAttributes, ReactNode } from 'react'; import { cn } from '../../lib/cn'; export type ButtonVariant = 'primary' | 'navy' | 'secondary' | 'ghost' | 'danger'; export type ButtonSize = 'sm' | 'md' | 'lg'; export interface ButtonProps extends ButtonHTMLAttributes { /** Visual style. @default "primary" */ variant?: ButtonVariant; /** @default "md" */ size?: ButtonSize; iconLeft?: ReactNode; iconRight?: ReactNode; /** Stretch to container width. @default false */ full?: boolean; } const SIZES: Record = { sm: 'h-[34px] px-3.5 text-[13px] rounded-sm', md: 'h-[42px] px-[18px] text-base rounded-md', lg: 'h-[50px] px-6 text-md rounded-md', }; const VARIANTS: Record = { primary: 'bg-sunrise text-white border border-transparent shadow-sunrise', navy: 'bg-navy-900 text-on-navy border border-transparent shadow-sm', secondary: 'bg-card text-strong border border-border-default shadow-xs', ghost: 'bg-transparent text-body border border-transparent', danger: 'bg-ruby-600 text-white border border-transparent shadow-sm', }; /** * Aria primary action button. Sunrise gradient for primary, * solid navy for secondary, quiet ghost for tertiary. */ export function Button({ children, variant = 'primary', size = 'md', iconLeft, iconRight, full = false, className, ...rest }: ButtonProps) { return ( ); }