omverse-ui 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/cn.ts","../src/components/Icon/Icon.tsx","../src/components/Button/Button.variants.ts","../src/components/Button/Button.tsx","../src/components/IconButton/IconButton.variants.ts","../src/components/IconButton/IconButton.tsx","../src/components/Input/Input.variants.ts","../src/components/Input/Input.tsx","../src/components/Badge/Badge.variants.ts","../src/components/Badge/Badge.tsx","../src/components/Avatar/Avatar.variants.ts","../src/components/Avatar/Avatar.tsx","../src/components/Chip/Chip.variants.ts","../src/components/Chip/Chip.tsx","../src/components/Checkbox/Checkbox.variants.ts","../src/components/Checkbox/Checkbox.tsx","../src/components/Radio/Radio.variants.ts","../src/components/Radio/Radio.tsx","../src/components/Switch/Switch.variants.ts","../src/components/Switch/Switch.tsx","../src/components/Select/Select.variants.ts","../src/components/Select/Select.tsx","../src/components/Tooltip/Tooltip.variants.ts","../src/components/Tooltip/Tooltip.tsx","../src/components/Spinner/Spinner.variants.ts","../src/components/Spinner/Spinner.tsx","../src/components/Card/Card.variants.ts","../src/components/Card/Card.tsx","../src/components/Dialog/Dialog.variants.ts","../src/components/Dialog/Dialog.tsx","../src/components/Toast/Toast.variants.ts","../src/components/Toast/Toast.store.ts","../src/components/Toast/Toast.tsx","../src/components/Tabs/Tabs.variants.ts","../src/components/Tabs/Tabs.tsx","../src/components/Accordion/Accordion.variants.ts","../src/components/Accordion/Accordion.tsx","../src/components/Progress/Progress.variants.ts","../src/components/Progress/Progress.tsx","../src/components/DropdownMenu/DropdownMenu.variants.ts","../src/components/DropdownMenu/DropdownMenu.tsx","../src/components/Popover/Popover.variants.ts","../src/components/Popover/Popover.tsx","../src/components/DatePicker/DatePicker.tsx","../src/components/Slider/Slider.variants.ts","../src/components/Slider/Slider.tsx","../src/components/Breadcrumb/Breadcrumb.variants.ts","../src/components/Breadcrumb/Breadcrumb.tsx","../src/components/Pagination/Pagination.variants.ts","../src/components/Pagination/Pagination.tsx","../src/components/Navbar/Navbar.tsx","../src/components/Stepper/Stepper.tsx","../src/components/Divider/Divider.variants.ts","../src/components/Divider/Divider.tsx"],"names":["ChevronDownFilled","cva","forwardRef","jsx","jsxs","Spinner","useState","Fragment","Badge","useId","useRef","useEffect","useCallback","Tooltip","toast","createPortal","iconMap","createContext","useContext"],"mappings":"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","file":"index.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { extendTailwindMerge } from \"tailwind-merge\";\n\nconst twMerge = extendTailwindMerge({\n extend: {\n classGroups: {\n // Design-system typography scale — these are font-size utilities, not colors.\n // Without this, tailwind-merge treats text-label-lg as conflicting with\n // text-on-primary and silently drops the color class.\n \"font-size\": [\n \"text-display-lg\",\n \"text-display-md\",\n \"text-display-sm\",\n \"text-headline-lg\",\n \"text-headline-md\",\n \"text-headline-sm\",\n \"text-title-lg\",\n \"text-title-md\",\n \"text-title-sm\",\n \"text-body-lg\",\n \"text-body-md\",\n \"text-body-sm\",\n \"text-label-lg\",\n \"text-label-md\",\n \"text-label-sm\",\n ],\n // Semantic color tokens — these are text-color utilities.\n // Registering them ensures they conflict with each other (correct) but\n // not with the font-size group above (also correct).\n \"text-color\": [\n // Primary\n \"text-primary\",\n \"text-on-primary\",\n \"text-primary-container\",\n \"text-on-primary-container\",\n\n // Secondary\n \"text-secondary\",\n \"text-on-secondary\",\n \"text-secondary-container\",\n \"text-on-secondary-container\",\n \"text-secondary-container-hover\",\n \"text-secondary-container-active\",\n\n // Surfaces\n \"text-background\",\n \"text-surface\",\n \"text-surface-variant\",\n \"text-surface-container-low\",\n \"text-surface-container\",\n \"text-surface-container-high\",\n\n // Text semantic\n \"text-text-primary\",\n \"text-text-secondary\",\n \"text-text-disabled\",\n \"text-on-surface\",\n \"text-on-surface-variant\",\n\n // Borders\n \"text-border\",\n \"text-outline\",\n \"text-outline-variant\",\n\n // Success\n \"text-success\",\n \"text-on-success\",\n \"text-success-container\",\n \"text-on-success-container\",\n\n // Warning\n \"text-warning\",\n \"text-on-warning\",\n \"text-warning-container\",\n \"text-on-warning-container\",\n\n // Error\n \"text-error\",\n \"text-on-error\",\n \"text-error-container\",\n \"text-on-error-container\",\n\n // Info\n \"text-info\",\n \"text-on-info\",\n \"text-info-container\",\n \"text-on-info-container\",\n\n // Ring\n \"text-ring\",\n ],\n },\n },\n});\n\n/**\n * Merges Tailwind classes intelligently — later classes override earlier ones\n * even when they target the same property (e.g. `px-2` vs `px-4`).\n *\n * Configured with design-system font-size and text-color groups so the custom\n * typography scale (text-label-lg, text-body-md, …) and semantic color tokens\n * (text-on-primary, text-on-surface, …) are never treated as conflicting.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","import { forwardRef } from 'react';\nimport {\n ChevronDown,\n ChevronRight,\n ChevronLeft,\n ChevronUp,\n Check,\n X,\n Search,\n ArrowRight,\n ArrowLeft,\n Plus,\n Minus,\n AlertCircle,\n Info,\n CheckCircle,\n Pencil,\n Settings,\n Bookmark,\n Heart,\n Star,\n Bell,\n Trash2,\n Download,\n Upload,\n Share2,\n MoreHorizontal,\n MoreVertical,\n RefreshCw,\n Eye,\n EyeOff,\n Mail,\n Lock,\n Play,\n ChevronDown as ChevronDownFilled,\n FileText,\n CreditCard,\n Users,\n Rocket,\n MessageSquare,\n} from 'lucide-react';\nimport { cva, type VariantProps } from 'class-variance-authority';\nimport { cn } from '../../utils/cn';\n\n/**\n * Size scale for icons. Tied to the design system's spacing scale so\n * icons always sit cleanly with text of the same scale.\n */\nconst iconVariants = cva('shrink-0', {\n variants: {\n size: {\n sm: 'size-4', // 16px — pairs with label-md / body-sm\n md: 'size-5', // 20px — pairs with label-lg / body-md\n lg: 'size-6', // 24px — pairs with title-md / body-lg\n xl: 'size-8', // 32px — standalone icons\n },\n },\n defaultVariants: { size: 'md' },\n});\n\n/**\n * The design system's icon registry. Keys are design-system names (kebab-case);\n * values are the current icon source. When custom Figma icons are ready, swap\n * the right-hand side here — every component using <Icon /> updates automatically.\n */\nconst iconMap = {\n 'chevron-down': ChevronDown,\n 'chevron-up': ChevronUp,\n 'chevron-left': ChevronLeft,\n 'chevron-right': ChevronRight,\n check: Check,\n close: X,\n search: Search,\n 'arrow-right': ArrowRight,\n 'arrow-left': ArrowLeft,\n plus: Plus,\n minus: Minus,\n 'alert-circle': AlertCircle,\n info: Info,\n 'check-circle': CheckCircle,\n 'edit': Pencil,\n 'settings': Settings,\n 'bookmark': Bookmark,\n 'heart': Heart,\n 'star': Star,\n 'bell': Bell,\n 'trash': Trash2,\n 'download': Download,\n 'upload': Upload,\n 'share': Share2,\n 'dots': MoreHorizontal,\n 'dots-vertical': MoreVertical,\n 'refresh': RefreshCw,\n 'eye': Eye,\n 'eye-off': EyeOff,\n 'mail': Mail,\n 'lock': Lock,\n 'play': Play,\n 'file-text': FileText,\n 'credit-card': CreditCard,\n 'users': Users,\n 'rocket': Rocket,\n 'message-square': MessageSquare,\n\n 'chevron-down-filled': ChevronDownFilled,\n} as const;\n\nexport type IconName = keyof typeof iconMap;\n\nexport interface IconProps extends VariantProps<typeof iconVariants> {\n /** Design system name of the icon to render. */\n name: IconName;\n className?: string;\n /**\n * Provide a label to make the icon meaningful to screen readers.\n * Omit for purely decorative icons (icon next to text).\n */\n 'aria-label'?: string;\n /**\n * Renders the icon as a solid/filled shape instead of the default stroke outline.\n * Sets fill=\"currentColor\" and strokeWidth=0 on the underlying SVG.\n * Use for toggle-on states — bookmarks, likes, stars, bells, etc.\n */\n filled?: boolean;\n}\n\n/**\n * Icon — the only component allowed to know about the underlying icon source.\n *\n * Every other component imports from here, not from `lucide-react` directly.\n * This indirection is what makes swapping to custom Figma icons a one-file change.\n */\nexport const Icon = forwardRef<SVGSVGElement, IconProps>(\n ({ name, size, className, 'aria-label': ariaLabel, filled, ...props }, ref) => {\n const Component = iconMap[name];\n const isDecorative = !ariaLabel;\n\n return (\n <Component\n ref={ref}\n className={cn(iconVariants({ size }), className)}\n aria-label={ariaLabel}\n aria-hidden={isDecorative || undefined}\n role={isDecorative ? undefined : 'img'}\n fill={filled ? 'currentColor' : 'none'}\n strokeWidth={filled ? 0 : 2}\n {...props}\n />\n );\n }\n);\n\nIcon.displayName = 'Icon';\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Button visual variants.\n *\n * Design intent (M3-inspired, extended):\n * - `filled` — highest emphasis; single primary CTA per screen\n * - `tonal` — medium-high emphasis; secondary primary actions\n * - `outlined` — medium emphasis; alternative or cancel actions\n * - `text` — lowest named emphasis; tertiary / inline use\n * - `elevated` — filled surface lifted above tonal backgrounds\n * - `ghost` — near-invisible; toolbars, icon-adjacent, dense UIs\n * - `destructive` — irreversible actions (delete, revoke, leave)\n */\nexport const buttonVariants = cva(\n [\n 'inline-flex items-center justify-center gap-2',\n 'font-medium whitespace-nowrap select-none',\n // `transition` (not `transition-colors`) covers opacity too — needed for\n // gradient buttons whose hover uses opacity rather than a bg-color shift.\n 'transition duration-short ease-standard',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-surface',\n 'disabled:pointer-events-none disabled:opacity-40',\n 'motion-reduce:transition-none',\n ],\n {\n variants: {\n variant: {\n filled: [\n 'bg-primary text-on-primary',\n 'hover:bg-primary/90',\n 'active:bg-primary/80',\n ],\n tonal: [\n 'bg-secondary-container text-on-secondary-container',\n // Precomputed M3 state layers — avoids opacity-based bg which can\n // reduce text contrast by sharing an opacity channel with the color.\n 'hover:bg-secondary-container-hover hover:text-on-secondary-container',\n 'active:bg-secondary-container-active',\n ],\n outlined: [\n 'border border-outline bg-transparent text-primary',\n 'hover:bg-primary/[0.08]',\n 'active:bg-primary/[0.12]',\n ],\n text: [\n 'bg-transparent text-primary',\n 'hover:bg-primary/[0.08]',\n 'active:bg-primary/[0.12]',\n ],\n elevated: [\n 'bg-surface-container-low text-primary shadow-sm',\n // Background stays fixed — changing to surface-container drops dark-mode\n // contrast below WCAG AA (3.2:1). Elevation increase via shadow alone is\n // the M3-correct hover indicator for elevated buttons.\n 'hover:shadow-md',\n 'active:shadow-sm',\n ],\n // Intentionally low presence — sits on surfaces without drawing focus\n ghost: [\n 'bg-transparent text-on-surface',\n 'hover:bg-on-surface/[0.08]',\n 'active:bg-on-surface/[0.12]',\n ],\n destructive: [\n 'bg-error text-on-error',\n 'hover:bg-error/90',\n 'active:bg-error/80',\n ],\n },\n size: {\n // xs/sm are intentionally sub-44px — for dense UIs (toolbars, table rows)\n // where touch is not the primary input. Avoid in touch-primary contexts.\n xs: 'h-7 px-2.5 text-label-md',\n sm: 'h-8 px-3 text-label-md',\n md: 'h-10 px-5 text-label-lg',\n lg: 'h-12 px-6 text-label-lg',\n xl: 'h-14 px-8 text-label-lg',\n },\n shape: {\n // pill = default per M3; rounded suits cards and sheet-bottom contexts\n pill: 'rounded-full',\n rounded: 'rounded-xl', // --radius-xl = 1.5rem (24px) from design tokens\n },\n },\n defaultVariants: {\n variant: 'filled',\n size: 'md',\n shape: 'pill',\n },\n }\n);\n\nexport type ButtonVariantProps = VariantProps<typeof buttonVariants>;\n","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cn } from '../../utils/cn';\nimport { Icon, type IconName, type IconProps } from '../Icon';\nimport { buttonVariants, type ButtonVariantProps } from './Button.variants';\n\n/** Maps button size to the icon size that aligns with the button's type scale. */\nfunction getIconSize(size: ButtonVariantProps['size']): NonNullable<IconProps['size']> {\n if (size === 'xs' || size === 'sm') return 'sm'; // 16px — pairs with label-md\n if (size === 'xl') return 'lg'; // 24px — pairs with xl height\n return 'md'; // 20px — default for md/lg/null\n}\n\nexport interface ButtonProps\n extends ComponentPropsWithoutRef<'button'>,\n ButtonVariantProps {\n /**\n * Renders the first child element with button props merged onto it.\n * Use to wrap a router `<Link>` while keeping button styling and a11y.\n * Do NOT combine with `leadingIcon` / `trailingIcon` — Radix Slot cannot\n * merge props onto a React.Fragment; place icons inside the child instead.\n */\n asChild?: boolean;\n /**\n * Shows a loading spinner and disables interaction. Preserves layout to\n * prevent content reflow. Sets `aria-busy` for assistive technology.\n */\n loading?: boolean;\n /**\n * Replaces the button label while `loading` is true.\n * Pass an empty string to show only the spinner with no label.\n */\n loadingText?: string;\n /**\n * Swaps the leading icon to a checkmark to confirm a completed action.\n * If no leading icon was present, a checkmark is prepended to the label.\n * The trailing icon is hidden while success is active to reduce noise.\n * Parent controls the duration — set back to false to restore original state.\n * For icon-only buttons, also set `aria-label` on the button for a11y.\n */\n success?: boolean;\n /**\n * Applies a blue→purple gradient background. Only takes effect on `filled`\n * and `destructive` variants; silently ignored on all others.\n * Hover/active states use opacity instead of background-color shifts because\n * a CSS gradient (background-image) is not affected by background-color changes.\n */\n gradient?: boolean;\n /**\n * Icon rendered before the label. Accepts any design-system icon name.\n * Always decorative — the label text is the accessible name.\n */\n leadingIcon?: IconName;\n /**\n * Icon rendered after the label. Accepts any design-system icon name.\n * Always decorative — the label text is the accessible name.\n */\n trailingIcon?: IconName;\n /**\n * Stretches the button to its container's full width.\n * When both `leadingIcon` and `trailingIcon` are present the icons are\n * pushed to the edges with the label centred between them (`justify-between`).\n */\n fullWidth?: boolean;\n}\n\n/**\n * Button — the primary interactive control of the design system.\n *\n * Seven variants covering the full emphasis spectrum, five sizes, two\n * shapes, optional gradient treatment, leading/trailing icon slots,\n * full-width edge-spread layout, loading and success state management,\n * and the `asChild` composition pattern for wrapping router links.\n *\n * Design rationale: variant choice drives perceived importance in the UI\n * hierarchy. Use `filled` for the single primary action per screen,\n * `ghost` for low-attention actions in toolbars, and `destructive` only\n * for irreversible paths — never as a general-purpose danger colour.\n *\n * @see {@link https://m3.material.io/components/buttons/overview}\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n variant,\n size,\n shape,\n asChild,\n loading,\n loadingText,\n success,\n gradient,\n fullWidth,\n leadingIcon,\n trailingIcon,\n disabled,\n children,\n ...props\n },\n ref\n ) => {\n const Component = asChild ? Slot : 'button';\n const isDisabled = disabled || loading;\n\n // Gradient is restricted to solid-fill variants where it sits on an opaque\n // background. `variant ?? 'filled'` mirrors CVA's defaultVariants so an\n // unset variant still gets the gradient when gradient={true}.\n const effectiveVariant = variant ?? 'filled';\n const showGradient =\n gradient &&\n (effectiveVariant === 'filled' || effectiveVariant === 'destructive');\n\n // Success: swap the leading icon to a checkmark and hide the trailing icon.\n const effectiveLeadingIcon: IconName | undefined = success ? 'check' : leadingIcon;\n\n const iconSize = getIconSize(size);\n\n // Edge-spread only applies when the button is full-width and has both icon\n // slots filled. Transient states (loading/success) collapse back to centred\n // because the leading icon changes and trailingIcon is hidden.\n const spreadIcons =\n !!fullWidth && !!leadingIcon && !!trailingIcon && !loading && !success;\n\n return (\n <Component\n ref={ref}\n className={cn(\n buttonVariants({ variant, size, shape }),\n showGradient &&\n // from-primary (#2563EB blue) → to-secondary (#7C3AED purple)\n // both are existing @theme tokens — no raw colour values here.\n 'bg-gradient-to-r from-primary to-secondary hover:opacity-90 active:opacity-80',\n fullWidth && 'w-full',\n spreadIcons && 'justify-between',\n className\n )}\n disabled={isDisabled}\n aria-busy={loading || undefined}\n {...props}\n >\n {loading ? (\n <>\n <Spinner />\n {loadingText !== undefined ? loadingText : children}\n </>\n ) : (\n <>\n {effectiveLeadingIcon && (\n <Icon name={effectiveLeadingIcon} size={iconSize} />\n )}\n {spreadIcons ? (\n <span className=\"flex-1 text-center\">{children}</span>\n ) : (\n children\n )}\n {trailingIcon && !success && (\n <Icon name={trailingIcon} size={iconSize} />\n )}\n </>\n )}\n </Component>\n );\n }\n);\n\nButton.displayName = 'Button';\n\n/** CSS-border spinner — inherits `currentColor` so it adapts to any variant. */\nfunction Spinner() {\n return (\n <span\n aria-hidden=\"true\"\n className=\"inline-block size-4 animate-spin rounded-full border-2 border-current border-r-transparent motion-reduce:animate-none\"\n />\n );\n}\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * IconButton variants — CVA configuration.\n *\n * Design intent:\n * - filled → highest emphasis, primary action\n * - tonal → medium-high, secondary action\n * - outlined → medium emphasis\n * - standard → low emphasis, toolbars, inline actions\n * - ghost → subtle, barely visible until hover\n * - destructive → delete / danger actions\n *\n * All variants use semantic tokens only — never raw hex or palette steps.\n * State layers follow M3 spec: hover=8%, focus=12%, pressed=12%.\n */\nexport const iconButtonVariants = cva(\n [\n // Layout\n 'inline-flex items-center justify-center',\n 'relative flex-shrink-0',\n\n // Motion\n 'transition-all duration-short ease-standard',\n 'hover:-translate-y-px active:translate-y-px',\n 'motion-reduce:transition-none motion-reduce:hover:translate-y-0 motion-reduce:active:translate-y-0',\n\n // Focus\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n\n // Disabled\n 'disabled:pointer-events-none disabled:opacity-40',\n\n // Ensure minimum touch target via pseudo element\n 'before:absolute before:inset-0 before:min-w-[44px] before:min-h-[44px] before:content-[\"\"] before:-translate-x-1/2 before:-translate-y-1/2 before:left-1/2 before:top-1/2',\n ],\n {\n variants: {\n variant: {\n filled: [\n 'bg-primary text-on-primary',\n 'hover:bg-primary/90 hover:shadow-md',\n 'active:bg-primary/80 active:shadow-none',\n ],\n tonal: [\n 'bg-secondary-container text-on-secondary-container',\n 'hover:bg-secondary-container-hover hover:text-on-secondary-container',\n 'active:bg-secondary-container-active active:text-on-secondary-container',\n ],\n outlined: [\n 'border-[1.5px] border-primary bg-transparent text-primary',\n 'hover:bg-primary/[0.08]',\n 'active:bg-primary/[0.12]',\n ],\n standard: [\n 'bg-transparent text-primary',\n 'hover:bg-primary/[0.08]',\n 'active:bg-primary/[0.12]',\n 'hover:translate-y-0 active:translate-y-0',\n ],\n ghost: [\n 'border-[1.5px] border-outline bg-transparent text-on-surface-variant',\n 'hover:bg-surface-variant hover:text-on-surface hover:border-outline',\n 'active:bg-surface-container',\n 'hover:translate-y-0 active:translate-y-0',\n ],\n destructive: [\n 'bg-error text-on-error',\n 'hover:bg-error/90 hover:shadow-md',\n 'active:bg-error/80 active:shadow-none',\n ],\n },\n\n size: {\n xs: 'size-6 [&_svg]:size-3.5 [&_i]:text-sm',\n sm: 'size-8 [&_svg]:size-4 [&_i]:text-base',\n md: 'size-10 [&_svg]:size-5 [&_i]:text-xl',\n lg: 'size-12 [&_svg]:size-6 [&_i]:text-2xl',\n xl: 'size-14 [&_svg]:size-7 [&_i]:text-3xl',\n },\n\n shape: {\n circle: 'rounded-full',\n square: '', // radius set per size via compound variants below\n },\n\n // FAB mode — adds elevation shadow\n fab: {\n true: 'shadow-lg hover:shadow-xl active:shadow-md',\n },\n\n // Gradient — only meaningful on filled/destructive\n gradient: {\n true: '',\n },\n },\n\n compoundVariants: [\n // Square shape radii per size — kept well under 25% of button width so the\n // shape reads as square, not circular. Our --radius-* tokens are large\n // (xl=24px, 2xl=32px), so we deliberately use xs/sm/md here.\n { shape: 'square', size: 'xs', class: 'rounded-xs' }, // 4px / 24px = 17%\n { shape: 'square', size: 'sm', class: 'rounded-sm' }, // 8px / 32px = 25%\n { shape: 'square', size: 'md', class: 'rounded-sm' }, // 8px / 40px = 20%\n { shape: 'square', size: 'lg', class: 'rounded-md' }, // 12px / 48px = 25%\n { shape: 'square', size: 'xl', class: 'rounded-md' }, // 12px / 56px = 21%\n\n // Gradient filled\n {\n variant: 'filled',\n gradient: true,\n class: [\n 'bg-gradient-to-br from-primary to-secondary border-0',\n 'hover:shadow-lg hover:shadow-primary/30',\n 'active:shadow-none',\n ],\n },\n\n // Gradient destructive\n {\n variant: 'destructive',\n gradient: true,\n class: 'bg-gradient-to-br from-error to-error/70',\n },\n\n // FAB square shape — lg/xl FABs are ~48-56px; rounded-lg (16px) keeps\n // the squarer silhouette while still feeling elevated/premium.\n { fab: true, shape: 'square', class: 'rounded-lg' },\n ],\n\n defaultVariants: {\n variant: 'filled',\n size: 'md',\n shape: 'circle',\n },\n }\n);\n\nexport type IconButtonVariantProps = VariantProps<typeof iconButtonVariants>;","import {\n forwardRef,\n useState,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { iconButtonVariants, type IconButtonVariantProps } from './IconButton.variants';\nimport { Icon, type IconName } from '../Icon';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface IconButtonProps\n extends Omit<ComponentPropsWithoutRef<'button'>, 'children'>,\n IconButtonVariantProps {\n /**\n * The icon to display. Uses the design system's Icon component.\n * Never import lucide-react directly in consuming components.\n */\n icon: IconName;\n\n /**\n * Accessible label — required. Describes the action to screen readers.\n * When badge is a number, include the count in the label:\n * aria-label=\"5 notifications\"\n */\n 'aria-label': string;\n\n /**\n * Toggle mode — button has pressed/unpressed state.\n * Use for bookmarks, likes, stars, and other binary actions.\n */\n toggle?: boolean;\n\n /**\n * Controlled pressed state for toggle mode.\n * If omitted, the component manages its own state (uncontrolled).\n */\n pressed?: boolean;\n\n /**\n * Callback fired when pressed state changes in toggle mode.\n */\n onPressedChange?: (pressed: boolean) => void;\n\n /**\n * Icon to show when toggle is pressed.\n * If omitted, the same icon is used for both states.\n *\n * @example\n * <IconButton icon=\"bookmark\" pressedIcon=\"bookmark\" toggle />\n */\n pressedIcon?: IconName;\n\n /**\n * Badge displayed on the icon button.\n * - `true` → red dot only\n * - `number` → shows the number (capped at 99+)\n *\n * @example\n * <IconButton icon=\"bell\" badge={5} aria-label=\"5 notifications\" />\n */\n badge?: boolean | number;\n\n /**\n * Shows a tooltip with the aria-label text on hover and focus.\n * Defaults to true — set to false to disable.\n */\n tooltip?: boolean;\n\n /**\n * Shows a loading spinner instead of the icon.\n * Disables interaction and announces aria-busy.\n */\n loading?: boolean;\n\n /**\n * Applies a brand gradient background.\n * Only meaningful on filled and destructive variants.\n */\n gradient?: boolean;\n\n /**\n * FAB (floating action button) mode.\n * Adds elevation shadow. Pair with size=\"xl\" and shape=\"square\".\n */\n fab?: boolean;\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * IconButton — an icon-only interactive control.\n *\n * Features beyond M3:\n * - toggle mode with pressed/unpressed state and aria-pressed\n * - badge (dot or number, capped at 99+)\n * - built-in tooltip (no extra library)\n * - loading state with spinner\n * - gradient variant\n * - FAB mode with elevation\n * - 44×44px minimum touch target on ALL sizes via pseudo element\n * - aria-label is TypeScript-required (no silent a11y failures)\n *\n * @example\n * // Basic\n * <IconButton icon=\"search\" aria-label=\"Search\" />\n *\n * // Toggle\n * <IconButton icon=\"bookmark\" toggle pressed={saved} onPressedChange={setSaved} aria-label=\"Save\" />\n *\n * // Badge\n * <IconButton icon=\"bell\" badge={5} aria-label=\"5 notifications\" />\n *\n * // FAB\n * <IconButton icon=\"plus\" variant=\"filled\" size=\"xl\" shape=\"square\" fab aria-label=\"Add new\" />\n *\n * // Gradient\n * <IconButton icon=\"plus\" variant=\"filled\" gradient aria-label=\"Add\" />\n */\nexport const IconButton = forwardRef<HTMLButtonElement, IconButtonProps>(\n (\n {\n // variant props\n variant,\n size = 'md',\n shape = 'circle',\n fab,\n gradient,\n\n // icon\n icon,\n\n // toggle\n toggle = false,\n pressed: controlledPressed,\n onPressedChange,\n pressedIcon,\n\n // badge\n badge,\n\n // states\n tooltip = true,\n loading = false,\n disabled,\n\n // rest\n className,\n 'aria-label': ariaLabel,\n ...props\n },\n ref\n ) => {\n // Internal toggle state (uncontrolled mode)\n const [internalPressed, setInternalPressed] = useState(false);\n\n // Resolve pressed state — controlled takes priority\n const isPressed = toggle\n ? controlledPressed !== undefined\n ? controlledPressed\n : internalPressed\n : undefined;\n\n function handleClick(e: React.MouseEvent<HTMLButtonElement>) {\n if (toggle) {\n const next = !isPressed;\n setInternalPressed(next);\n onPressedChange?.(next);\n }\n props.onClick?.(e);\n }\n\n // Resolve icon — use pressedIcon when toggled on\n const resolvedIcon = toggle && isPressed && pressedIcon ? pressedIcon : icon;\n // Fill the icon when pressed and no explicit pressedIcon overrides it\n const iconFilled = toggle && !!isPressed && !pressedIcon;\n\n return (\n <span\n className=\"relative inline-flex\"\n style={{ isolation: 'isolate' }}\n >\n <button\n ref={ref}\n className={cn(\n iconButtonVariants({ variant, size, shape, fab, gradient }),\n // Toggle pressed styles\n toggle && isPressed && 'bg-secondary-container text-on-secondary-container',\n className\n )}\n disabled={disabled || loading}\n aria-label={ariaLabel}\n aria-pressed={toggle ? isPressed : undefined}\n aria-busy={loading || undefined}\n onClick={handleClick}\n {...props}\n >\n {loading ? <Spinner /> : (\n <Icon name={resolvedIcon} aria-hidden filled={iconFilled || undefined} />\n )}\n\n {/* Badge */}\n {badge !== undefined && badge !== false && !loading && (\n <Badge value={badge} />\n )}\n </button>\n\n {/* Tooltip */}\n {tooltip && !loading && (\n <Tooltip label={ariaLabel} />\n )}\n </span>\n );\n }\n);\n\nIconButton.displayName = 'IconButton';\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction resolveBadgeLabel(badge?: boolean | number): string | null {\n if (!badge) return null;\n if (badge === true) return null; // dot only\n return badge > 99 ? '99+' : String(badge);\n}\n\n/**\n * Badge — notification indicator on the button.\n * Dot only when value is true, number when value is a number.\n */\nfunction Badge({ value }: { value: boolean | number }) {\n const label = resolveBadgeLabel(value);\n\n if (!label) {\n // Dot only\n return (\n <span\n aria-hidden=\"true\"\n className=\"absolute top-0.5 right-0.5 size-2 rounded-full bg-error border-2 border-background\"\n />\n );\n }\n\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'absolute -top-1 -right-1',\n 'min-w-[18px] h-[18px] px-1',\n 'rounded-full bg-error text-on-error',\n 'text-[9px] font-semibold leading-none',\n 'flex items-center justify-center',\n 'border-2 border-background',\n )}\n >\n {label}\n </span>\n );\n}\n\n/**\n * Tooltip — shown on hover and focus via CSS group peer pattern.\n * Uses aria-label text. No JS, no library, no portal needed.\n */\nfunction Tooltip({ label }: { label: string }) {\n return (\n <span\n role=\"tooltip\"\n className={cn(\n 'pointer-events-none absolute bottom-[calc(100%+6px)] left-1/2 -translate-x-1/2 z-50',\n 'rounded-md bg-on-surface text-surface text-label-sm px-2 py-1 whitespace-nowrap',\n 'opacity-0 scale-95',\n 'transition-all duration-instant ease-standard',\n 'peer-hover:opacity-100 peer-hover:scale-100',\n 'peer-focus-visible:opacity-100 peer-focus-visible:scale-100',\n // CSS-only approach using :has on parent\n 'group-hover/ibtn:opacity-100 group-hover/ibtn:scale-100',\n 'group-focus-visible/ibtn:opacity-100 group-focus-visible/ibtn:scale-100',\n )}\n >\n {label}\n <span\n aria-hidden=\"true\"\n className=\"absolute top-full left-1/2 -translate-x-1/2 border-4 border-transparent border-t-on-surface\"\n />\n </span>\n );\n}\n\n/**\n * Spinner — loading indicator that inherits color from parent.\n */\nfunction Spinner() {\n return (\n <span\n aria-hidden=\"true\"\n className=\"inline-block size-[1em] rounded-full border-2 border-current border-r-transparent animate-spin motion-reduce:animate-none\"\n />\n );\n}","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Input variants — CVA configuration.\n *\n * Design intent:\n * - outlined → default, clean bordered input\n * - filled → tonal background with bottom border only\n * - floating → label animates up on focus/fill\n *\n * State layers follow M3 spec.\n * All tokens are semantic — never raw hex or palette steps.\n */\n\nexport const inputWrapperVariants = cva(\n [\n 'relative flex items-center w-full',\n 'transition-all duration-short ease-standard',\n // border-width is NOT in the base — filled uses border-b only, so each\n // variant owns its own border declaration to avoid shorthand/longhand conflicts.\n ],\n {\n variants: {\n variant: {\n outlined: [\n 'border-[1.5px] border-outline bg-background rounded-md',\n 'focus-within:border-primary focus-within:shadow-[0_0_0_3px] focus-within:shadow-primary/10',\n ],\n filled: [\n // No base border-width to fight — Tailwind preflight already resets all\n // borders to 0. border-b-[2px] is the only border declaration needed.\n 'bg-surface-variant border-b-[2px] border-outline rounded-md',\n 'focus-within:border-b-primary focus-within:bg-primary-container/10',\n ],\n floating: [\n 'border-[1.5px] border-outline bg-background rounded-md',\n 'focus-within:border-primary focus-within:shadow-[0_0_0_3px] focus-within:shadow-primary/10',\n ],\n },\n size: {\n sm: 'min-h-9',\n md: 'min-h-11',\n lg: 'min-h-[52px]',\n },\n state: {\n default: '',\n error: [\n // border-b-error covers the filled underline; border-error covers outlined/floating.\n // Both are kept by tailwind-merge (different groups) — whichever side has width shows.\n 'border-error border-b-error',\n 'focus-within:border-error focus-within:border-b-error focus-within:shadow-error/10',\n ],\n success: [\n 'border-success border-b-success',\n 'focus-within:border-success focus-within:border-b-success focus-within:shadow-success/10',\n ],\n disabled: [\n 'bg-surface border-outline border-b-outline opacity-50 cursor-not-allowed pointer-events-none',\n ],\n readonly: [\n 'bg-surface border-outline border-b-outline cursor-default',\n ],\n },\n },\n defaultVariants: {\n variant: 'outlined',\n size: 'md',\n state: 'default',\n },\n }\n);\n\nexport const inputElementVariants = cva(\n [\n 'flex-1 min-w-0 bg-transparent border-none outline-none',\n 'text-text-primary placeholder:text-text-disabled',\n 'disabled:cursor-not-allowed',\n 'read-only:cursor-default',\n ],\n {\n variants: {\n size: {\n sm: 'px-3 py-1.5 text-body-sm',\n md: 'px-3 py-2.5 text-body-md',\n lg: 'px-4 py-3.5 text-body-lg',\n },\n variant: {\n outlined: '',\n filled: '',\n floating: '',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'outlined',\n },\n }\n);\n\nexport const floatingLabelVariants = cva(\n [\n 'absolute left-3 pointer-events-none select-none',\n 'transition-all duration-short ease-standard',\n 'text-text-disabled bg-background px-0.5',\n ],\n {\n variants: {\n floating: {\n true: 'top-0 text-label-sm text-primary font-medium -translate-y-1/2',\n false: 'top-1/2 text-body-md -translate-y-1/2',\n },\n state: {\n default: '',\n error: 'text-error',\n success: 'text-success',\n disabled: 'text-text-disabled',\n readonly: 'text-text-secondary',\n },\n },\n defaultVariants: {\n floating: false,\n state: 'default',\n },\n }\n);\n\nexport type InputWrapperVariantProps = VariantProps<typeof inputWrapperVariants>;\nexport type InputElementVariantProps = VariantProps<typeof inputElementVariants>;","import {\n forwardRef,\n useState,\n useId,\n useCallback,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon, type IconName } from '../Icon';\nimport {\n inputWrapperVariants,\n inputElementVariants,\n floatingLabelVariants,\n} from './Input.variants';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\ntype InputState = 'default' | 'error' | 'success' | 'disabled' | 'readonly';\n\nexport interface InputProps\n extends Omit<ComponentPropsWithoutRef<'input'>, 'size' | 'prefix'> {\n /**\n * Visual variant of the input.\n * - `outlined` → bordered input (default)\n * - `filled` → tonal background, bottom border only\n * - `floating` → label animates up on focus/fill\n */\n variant?: 'outlined' | 'filled' | 'floating';\n\n /**\n * Size of the input.\n * - `sm` → 36px height\n * - `md` → 44px height (default)\n * - `lg` → 52px height\n */\n size?: 'sm' | 'md' | 'lg';\n\n /** Label displayed above (or floating inside) the input. */\n label?: string;\n\n /** Marks field as required — adds * indicator and aria-required. */\n required?: boolean;\n\n /** Adds \"(optional)\" tag next to the label. */\n optional?: boolean;\n\n /** Helper text shown below the input in default state. */\n helperText?: string;\n\n /** Error state — red border + error icon. */\n error?: boolean;\n\n /** Error message shown below the input when error=true. Replaces helperText. */\n errorText?: string;\n\n /** Success state — green border + success icon. */\n success?: boolean;\n\n /** Success message shown below the input when success=true. Replaces helperText. */\n successText?: string;\n\n /** Loading state — spinner in trailing slot (async validation). */\n loading?: boolean;\n\n /** Icon displayed before the input. */\n leadingIcon?: IconName;\n\n /** Icon displayed after the input. */\n trailingIcon?: IconName;\n\n /**\n * Shows a clear (×) button when the input has a value.\n * Fires onChange with empty value when clicked.\n */\n clearable?: boolean;\n\n /**\n * Auto-adds a password visibility toggle button.\n * Only meaningful when type=\"password\".\n */\n passwordToggle?: boolean;\n\n /** Text displayed before the input (e.g. \"https://\", \"$\"). */\n prefix?: ReactNode;\n\n /** Text displayed after the input (e.g. \"USD\", \".com\"). */\n suffix?: ReactNode;\n\n /**\n * Maximum character count.\n * When combined with showCount, displays a counter below.\n */\n maxLength?: number;\n\n /** Shows character count below the input. Requires maxLength. */\n showCount?: boolean;\n\n /**\n * Renders a multiline textarea instead of a single-line input.\n */\n textarea?: boolean;\n\n /** Number of initial rows for textarea. Default: 3 */\n rows?: number;\n\n /**\n * Shows a copy button in the trailing slot.\n * Best combined with readOnly.\n */\n copyable?: boolean;\n\n /** Additional className for the outer wrapper. */\n wrapperClassName?: string;\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Input / TextField — the primary text input control.\n *\n * Features beyond M3:\n * - 3 variants: outlined, filled, floating label\n * - 3 sizes: sm, md, lg\n * - error, success, disabled, readonly, loading states\n * - leadingIcon, trailingIcon, clearable, passwordToggle\n * - prefix / suffix text slots\n * - character count with maxLength\n * - textarea mode with auto-resize\n * - copyable mode with \"Copied!\" feedback\n * - full accessibility: aria-describedby, aria-invalid, aria-required,\n * aria-readonly, aria-busy, aria-live announcements\n *\n * @example\n * // Basic\n * <Input label=\"Email\" placeholder=\"you@example.com\" />\n *\n * // Error state\n * <Input label=\"Email\" error errorText=\"Invalid email\" leadingIcon=\"mail\" />\n *\n * // Password\n * <Input label=\"Password\" type=\"password\" passwordToggle />\n *\n * // With prefix/suffix\n * <Input label=\"Website\" prefix=\"https://\" suffix=\".com\" />\n *\n * // Character count\n * <Input label=\"Bio\" maxLength={150} showCount />\n *\n * // Copyable API key\n * <Input label=\"API Key\" value=\"sk-xxxx\" readOnly copyable />\n *\n * // Textarea\n * <Input label=\"Message\" textarea rows={4} maxLength={500} showCount />\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n (\n {\n variant = 'outlined',\n size = 'md',\n label,\n required,\n optional,\n helperText,\n error,\n errorText,\n success,\n successText,\n loading,\n leadingIcon,\n trailingIcon,\n clearable,\n passwordToggle,\n prefix,\n suffix,\n maxLength,\n showCount,\n textarea,\n rows = 3,\n copyable,\n wrapperClassName,\n className,\n disabled,\n readOnly,\n value,\n defaultValue,\n onChange,\n placeholder,\n type = 'text',\n id: providedId,\n ...props\n },\n ref\n ) => {\n // Auto-generate unique IDs for a11y\n const autoId = useId();\n const id = providedId ?? autoId;\n const helperId = `${id}-helper`;\n const errorId = `${id}-error`;\n\n // Internal state\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const [showPassword, setShowPassword] = useState(false);\n const [copied, setCopied] = useState(false);\n\n // Resolve controlled vs uncontrolled value\n const resolvedValue = value !== undefined ? value : internalValue;\n const hasValue = String(resolvedValue).length > 0;\n const charCount = String(resolvedValue).length;\n\n // Resolve state\n const inputState: InputState = disabled\n ? 'disabled'\n : readOnly\n ? 'readonly'\n : error\n ? 'error'\n : success\n ? 'success'\n : 'default';\n\n // Floating label is active when focused OR has value\n // (CSS handles focus via focus-within, we handle has-value via JS)\n const isFloating = variant === 'floating' && hasValue;\n\n function handleChange(e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) {\n if (value === undefined) {\n setInternalValue(e.target.value);\n }\n onChange?.(e as React.ChangeEvent<HTMLInputElement>);\n }\n\n function handleClear() {\n const syntheticEvent = {\n target: { value: '' },\n } as React.ChangeEvent<HTMLInputElement>;\n if (value === undefined) setInternalValue('');\n onChange?.(syntheticEvent);\n }\n\n const handleCopy = useCallback(async () => {\n try {\n await navigator.clipboard.writeText(String(resolvedValue));\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch {\n // Clipboard API not available\n }\n }, [resolvedValue]);\n\n // Resolve input type\n const resolvedType = passwordToggle\n ? showPassword ? 'text' : 'password'\n : type;\n\n // Resolve helper content\n const helperContent = error\n ? errorText\n : success\n ? successText\n : helperText;\n\n const helperState = error ? 'error' : success ? 'success' : 'default';\n\n // Resolve describedby\n const describedBy = [\n helperContent ? (error ? errorId : helperId) : null,\n ]\n .filter(Boolean)\n .join(' ') || undefined;\n\n // Shared input props\n const sharedInputProps = {\n id,\n value: resolvedValue,\n onChange: handleChange,\n disabled,\n readOnly,\n maxLength,\n placeholder: variant === 'floating' ? undefined : placeholder,\n 'aria-required': required || undefined,\n 'aria-invalid': error ? true : undefined,\n 'aria-readonly': readOnly || undefined,\n 'aria-busy': loading || undefined,\n 'aria-describedby': describedBy,\n };\n\n const iconSize = size === 'sm' ? 'sm' : size === 'lg' ? 'md' : 'sm';\n\n return (\n <div className={cn('flex flex-col gap-1.5 w-full', wrapperClassName)}>\n\n {/* Label row */}\n {label && (\n <div className=\"flex items-center justify-between gap-2\">\n <label\n htmlFor={id}\n className={cn(\n 'text-label-lg text-text-secondary',\n error && 'text-error',\n success && 'text-success',\n disabled && 'opacity-50',\n )}\n >\n {label}\n {required && (\n <span className=\"text-error ml-0.5\" aria-hidden=\"true\">*</span>\n )}\n </label>\n {optional && (\n <span className=\"text-label-sm text-text-disabled\">(optional)</span>\n )}\n </div>\n )}\n\n {/* Input wrapper */}\n <div\n className={cn(\n inputWrapperVariants({ variant, size, state: inputState }),\n 'group',\n )}\n >\n {/* Floating label */}\n {variant === 'floating' && label && (\n <span\n className={cn(\n floatingLabelVariants({\n floating: isFloating,\n state: inputState,\n }),\n // Focus-within handled via CSS\n 'group-focus-within:top-0 group-focus-within:text-label-sm group-focus-within:-translate-y-1/2',\n !isFloating && 'group-focus-within:text-primary group-focus-within:font-medium',\n )}\n aria-hidden=\"true\"\n >\n {label}\n {required && <span className=\"text-error ml-0.5\">*</span>}\n </span>\n )}\n\n {/* Prefix text */}\n {prefix && (\n <span className={cn(\n 'flex items-center self-stretch pl-3 pr-2',\n 'text-text-secondary text-body-md',\n 'border-r border-outline bg-surface-variant',\n 'rounded-l-[10px]',\n )}>\n {prefix}\n </span>\n )}\n\n {/* Leading icon */}\n {leadingIcon && (\n <span className=\"pl-3 flex items-center text-text-secondary\">\n <Icon name={leadingIcon} size={iconSize} aria-hidden />\n </span>\n )}\n\n {/* Input element */}\n {textarea ? (\n <textarea\n {...(sharedInputProps as React.TextareaHTMLAttributes<HTMLTextAreaElement>)}\n rows={rows}\n className={cn(\n inputElementVariants({ size, variant }),\n 'resize-none leading-relaxed self-stretch',\n !leadingIcon && 'pl-3',\n className,\n )}\n ref={ref as React.Ref<HTMLTextAreaElement>}\n />\n ) : (\n <input\n {...sharedInputProps}\n type={resolvedType}\n ref={ref}\n className={cn(\n inputElementVariants({ size, variant }),\n !leadingIcon && !prefix && 'pl-3',\n className,\n )}\n {...props}\n />\n )}\n\n {/* Trailing slot — priority: loading > error/success icon > clearable > passwordToggle > copyable > trailingIcon */}\n <div className=\"flex items-center pr-2 gap-1 flex-shrink-0\">\n {loading && (\n <span aria-hidden=\"true\">\n <Spinner />\n </span>\n )}\n\n {!loading && error && (\n <Icon name=\"alert-circle\" size={iconSize} className=\"text-error\" aria-hidden />\n )}\n\n {!loading && success && (\n <Icon name=\"check-circle\" size={iconSize} className=\"text-success\" aria-hidden />\n )}\n\n {!loading && !error && !success && clearable && hasValue && (\n <button\n type=\"button\"\n onClick={handleClear}\n aria-label=\"Clear input\"\n className=\"flex items-center text-text-secondary hover:text-text-primary transition-colors duration-instant rounded-full p-0.5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Icon name=\"close\" size={iconSize} aria-hidden />\n </button>\n )}\n\n {!loading && passwordToggle && (\n <button\n type=\"button\"\n onClick={() => setShowPassword(v => !v)}\n aria-label={showPassword ? 'Hide password' : 'Show password'}\n className=\"flex items-center text-text-secondary hover:text-text-primary transition-colors duration-instant rounded-full p-0.5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n >\n <Icon name={showPassword ? 'eye-off' : 'eye'} size={iconSize} aria-hidden />\n </button>\n )}\n\n {!loading && copyable && (\n <>\n <button\n type=\"button\"\n onClick={handleCopy}\n aria-label={copied ? 'Copied!' : 'Copy to clipboard'}\n className={cn(\n 'flex items-center gap-1 px-2 py-1 rounded-md',\n 'text-label-sm text-text-secondary',\n 'border border-outline bg-surface',\n 'hover:bg-surface-variant hover:text-text-primary',\n 'transition-all duration-instant',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n >\n <Icon name={copied ? 'check' : 'info'} size=\"sm\" aria-hidden />\n {copied ? 'Copied!' : 'Copy'}\n </button>\n {/* Live region for screen readers */}\n <span aria-live=\"polite\" className=\"sr-only\">\n {copied ? 'Copied to clipboard' : ''}\n </span>\n </>\n )}\n\n {!loading && trailingIcon && !error && !success && !clearable && !passwordToggle && !copyable && (\n <span className=\"flex items-center text-text-secondary\">\n <Icon name={trailingIcon} size={iconSize} aria-hidden />\n </span>\n )}\n </div>\n\n {/* Suffix text */}\n {suffix && (\n <span className={cn(\n 'flex items-center self-stretch pr-3 pl-2',\n 'text-text-secondary text-body-md',\n 'border-l border-outline bg-surface-variant',\n 'rounded-r-[10px]',\n )}>\n {suffix}\n </span>\n )}\n </div>\n\n {/* Helper / error / success row */}\n {(helperContent || (showCount && maxLength)) && (\n <div className=\"flex items-center justify-between gap-2\">\n {helperContent && (\n <p\n id={error ? errorId : helperId}\n aria-live={error ? 'assertive' : 'polite'}\n className={cn(\n 'text-body-sm flex items-center gap-1',\n helperState === 'error' && 'text-error',\n helperState === 'success' && 'text-success',\n helperState === 'default' && 'text-text-secondary',\n )}\n >\n {error && <Icon name=\"alert-circle\" size=\"sm\" aria-hidden />}\n {success && <Icon name=\"check-circle\" size=\"sm\" aria-hidden />}\n {helperContent}\n </p>\n )}\n {showCount && maxLength && (\n <p\n aria-live=\"polite\"\n className={cn(\n 'text-body-sm ml-auto tabular-nums',\n charCount >= maxLength * 0.9\n ? charCount >= maxLength\n ? 'text-error'\n : 'text-warning'\n : 'text-text-disabled',\n )}\n >\n {charCount} / {maxLength}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction Spinner() {\n return (\n <span\n aria-hidden=\"true\"\n className=\"inline-block size-4 rounded-full border-2 border-outline border-t-primary animate-spin motion-reduce:animate-none\"\n />\n );\n}","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Badge variants — CVA configuration.\n *\n * Design intent:\n * - filled → solid background, highest visibility\n * - tonal → soft background, medium visibility\n * - outlined → bordered, minimal fill\n * - ghost → no border, no fill, text only\n */\nexport const badgeVariants = cva(\n [\n 'inline-flex items-center justify-center gap-1',\n 'font-medium whitespace-nowrap',\n 'transition-colors duration-short ease-standard',\n ],\n {\n variants: {\n variant: {\n filled: '',\n tonal: '',\n outlined: 'border-[1.5px] bg-transparent',\n ghost: 'bg-transparent',\n },\n color: {\n default: '',\n secondary: '',\n success: '',\n warning: '',\n error: '',\n info: '',\n },\n size: {\n sm: 'h-5 px-1.5 text-label-sm rounded-full',\n md: 'h-6 px-2 text-label-md rounded-full',\n lg: 'h-7 px-2.5 text-label-lg rounded-full',\n },\n },\n compoundVariants: [\n // Filled + colors\n { variant: 'filled', color: 'default', class: 'bg-primary text-on-primary' },\n { variant: 'filled', color: 'secondary', class: 'bg-secondary text-on-secondary' },\n { variant: 'filled', color: 'success', class: 'bg-success text-on-success' },\n { variant: 'filled', color: 'warning', class: 'bg-warning text-on-warning' },\n { variant: 'filled', color: 'error', class: 'bg-error text-on-error' },\n { variant: 'filled', color: 'info', class: 'bg-info text-on-info' },\n\n // Tonal + colors\n { variant: 'tonal', color: 'default', class: 'bg-primary-container text-on-primary-container' },\n { variant: 'tonal', color: 'secondary', class: 'bg-secondary-container text-on-secondary-container' },\n { variant: 'tonal', color: 'success', class: 'bg-success-container text-on-success-container' },\n { variant: 'tonal', color: 'warning', class: 'bg-warning-container text-on-warning-container' },\n { variant: 'tonal', color: 'error', class: 'bg-error-container text-on-error-container' },\n { variant: 'tonal', color: 'info', class: 'bg-info-container text-on-info-container' },\n\n // Outlined + colors\n { variant: 'outlined', color: 'default', class: 'border-primary text-primary' },\n { variant: 'outlined', color: 'secondary', class: 'border-secondary text-secondary' },\n { variant: 'outlined', color: 'success', class: 'border-success text-success' },\n { variant: 'outlined', color: 'warning', class: 'border-warning text-warning' },\n { variant: 'outlined', color: 'error', class: 'border-error text-error' },\n { variant: 'outlined', color: 'info', class: 'border-info text-info' },\n\n // Ghost + colors\n { variant: 'ghost', color: 'default', class: 'text-primary' },\n { variant: 'ghost', color: 'secondary', class: 'text-secondary' },\n { variant: 'ghost', color: 'success', class: 'text-success' },\n { variant: 'ghost', color: 'warning', class: 'text-warning' },\n { variant: 'ghost', color: 'error', class: 'text-error' },\n { variant: 'ghost', color: 'info', class: 'text-info' },\n ],\n defaultVariants: {\n variant: 'filled',\n color: 'default',\n size: 'md',\n },\n }\n);\n\nexport const dotVariants = cva(\n ['rounded-full flex-shrink-0'],\n {\n variants: {\n color: {\n default: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n info: 'bg-info',\n },\n size: {\n sm: 'size-1.5',\n md: 'size-2',\n lg: 'size-2.5',\n },\n },\n defaultVariants: {\n color: 'default',\n size: 'md',\n },\n }\n);\n\nexport type BadgeVariantProps = VariantProps<typeof badgeVariants>;","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { badgeVariants, dotVariants, type BadgeVariantProps } from './Badge.variants';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface BadgeProps\n extends ComponentPropsWithoutRef<'span'>,\n BadgeVariantProps {\n /**\n * Visual style of the badge.\n * - `filled` → solid background (default)\n * - `tonal` → soft container background\n * - `outlined` → border only, no fill\n * - `ghost` → text only, no border or fill\n */\n variant?: 'filled' | 'tonal' | 'outlined' | 'ghost';\n\n /**\n * Color of the badge.\n * Maps to your design system semantic tokens.\n */\n color?: 'default' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n\n /**\n * Size of the badge.\n */\n size?: 'sm' | 'md' | 'lg';\n\n /**\n * Shows a dot indicator instead of text.\n * When true, children and count are ignored.\n */\n dot?: boolean;\n\n /**\n * Displays a number. Automatically capped at 99+.\n * Ignored when dot=true.\n */\n count?: number;\n\n /**\n * Adds an animated pulse ring around the dot.\n * Only works when dot=true. Useful for live/active indicators.\n */\n pulse?: boolean;\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Badge — a small label for status, counts, and categories.\n *\n * Features beyond M3:\n * - 4 variants × 6 colors = 24 combinations\n * - dot mode for minimal indicators\n * - pulse animation for live/active status\n * - count mode with 99+ cap\n *\n * @example\n * // Label\n * <Badge color=\"success\">Active</Badge>\n *\n * // Count\n * <Badge color=\"error\" count={5} />\n *\n * // Live indicator\n * <Badge color=\"success\" dot pulse />\n *\n * // Tonal status\n * <Badge variant=\"tonal\" color=\"warning\">Pending</Badge>\n */\nexport const Badge = forwardRef<HTMLSpanElement, BadgeProps>(\n (\n {\n variant,\n color = 'default',\n size = 'md',\n dot = false,\n count,\n pulse = false,\n className,\n children,\n ...props\n },\n ref\n ) => {\n // Dot mode — ignore children and count\n if (dot) {\n return (\n <span\n ref={ref}\n className={cn('relative inline-flex', className)}\n {...props}\n >\n <span className={cn(dotVariants({ color, size }))}>\n {pulse && (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'absolute inset-0 rounded-full animate-ping opacity-75',\n color === 'default' && 'bg-primary',\n color === 'secondary' && 'bg-secondary',\n color === 'success' && 'bg-success',\n color === 'warning' && 'bg-warning',\n color === 'error' && 'bg-error',\n color === 'info' && 'bg-info',\n )}\n />\n )}\n </span>\n </span>\n );\n }\n\n // Resolve content\n const content = count !== undefined\n ? count > 99 ? '99+' : String(count)\n : children;\n\n return (\n <span\n ref={ref}\n className={cn(badgeVariants({ variant, color, size }), className)}\n {...props}\n >\n {content}\n </span>\n );\n }\n);\n\nBadge.displayName = 'Badge';","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Avatar variants — CVA configuration.\n *\n * Design intent:\n * - shape: circle (default) or square (rounded)\n * - size: xs to 2xl\n * - variant: image, initials, icon, fallback\n */\nexport const avatarVariants = cva(\n [\n 'relative inline-flex items-center justify-center',\n 'font-medium select-none flex-shrink-0',\n 'transition-all duration-short ease-standard',\n ],\n {\n variants: {\n size: {\n xs: 'size-6 text-label-sm',\n sm: 'size-8 text-label-md',\n md: 'size-10 text-label-lg',\n lg: 'size-12 text-title-sm',\n xl: 'size-16 text-title-md',\n '2xl': 'size-20 text-title-lg',\n },\n shape: {\n circle: 'rounded-full',\n square: '',\n },\n color: {\n default: 'bg-primary-container text-on-primary-container',\n secondary: 'bg-secondary-container text-on-secondary-container',\n success: 'bg-success-container text-on-success-container',\n warning: 'bg-warning-container text-on-warning-container',\n error: 'bg-error-container text-on-error-container',\n info: 'bg-info-container text-on-info-container',\n },\n },\n compoundVariants: [\n // Square radii per size — kept ≤ 25% of the avatar's dimension so squares\n // never collapse into circles (token --radius-* values are large).\n { shape: 'square', size: 'xs', class: 'rounded-xs' }, // 4px / 24px = 17%\n { shape: 'square', size: 'sm', class: 'rounded-sm' }, // 8px / 32px = 25%\n { shape: 'square', size: 'md', class: 'rounded-sm' }, // 8px / 40px = 20%\n { shape: 'square', size: 'lg', class: 'rounded-md' }, // 12px / 48px = 25%\n { shape: 'square', size: 'xl', class: 'rounded-lg' }, // 16px / 64px = 25%\n { shape: 'square', size: '2xl', class: 'rounded-xl' }, // 24px / 80px = 30%\n ],\n defaultVariants: {\n size: 'md',\n shape: 'circle',\n color: 'default',\n },\n }\n);\n\nexport const avatarStatusVariants = cva(\n [\n 'absolute rounded-full border-2 border-background',\n ],\n {\n variants: {\n status: {\n online: 'bg-success',\n offline: 'bg-text-disabled',\n busy: 'bg-error',\n away: 'bg-warning',\n },\n size: {\n xs: 'size-2 -bottom-0.5 -right-0.5',\n sm: 'size-2.5 -bottom-0.5 -right-0.5',\n md: 'size-3 -bottom-0.5 -right-0.5',\n lg: 'size-3.5 -bottom-0.5 -right-0.5',\n xl: 'size-4 -bottom-0.5 -right-0.5',\n '2xl': 'size-5 -bottom-0.5 -right-0.5',\n },\n },\n defaultVariants: {\n status: 'online',\n size: 'md',\n },\n }\n);\n\nexport type AvatarVariantProps = VariantProps<typeof avatarVariants>;\nexport type AvatarStatusVariantProps = VariantProps<typeof avatarStatusVariants>;","import {\n forwardRef,\n useState,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon } from '../Icon';\nimport {\n avatarVariants,\n avatarStatusVariants,\n type AvatarVariantProps,\n} from './Avatar.variants';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface AvatarProps\n extends Omit<ComponentPropsWithoutRef<'span'>, 'color'>,\n AvatarVariantProps {\n /**\n * Image URL. When provided, renders an img element.\n * Automatically falls back to initials or icon on error.\n */\n src?: string;\n\n /**\n * Alt text for the image. Required when src is provided.\n */\n alt?: string;\n\n /**\n * Full name or display name.\n * Used to generate initials when no image is available.\n * Also used as aria-label when no alt is provided.\n *\n * @example \"John Doe\" → \"JD\"\n */\n name?: string;\n\n /**\n * Online status indicator shown as a colored dot.\n * - `online` → green\n * - `offline` → gray\n * - `busy` → red\n * - `away` → amber\n */\n status?: 'online' | 'offline' | 'busy' | 'away';\n\n /**\n * Shape of the avatar.\n * - `circle` → fully rounded (default)\n * - `square` → rounded corners, size-appropriate radius\n */\n shape?: 'circle' | 'square';\n\n /**\n * Background color for initials/icon fallback.\n */\n color?: 'default' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n\n /**\n * Size of the avatar.\n */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n /**\n * Clickable — adds hover/focus styles and role=\"button\".\n */\n clickable?: boolean;\n}\n\n// ─── Component ───────────────────────────────────────────────────────────────\n\n/**\n * Avatar — displays a user's profile image, initials, or icon fallback.\n *\n * Features beyond M3:\n * - 6 sizes: xs to 2xl\n * - circle and square shapes\n * - online status indicator (online, offline, busy, away)\n * - smart initials generation from name\n * - image error fallback to initials → icon\n * - 6 background colors for initials\n * - clickable mode with focus ring\n * - AvatarGroup for stacked avatars\n *\n * @example\n * // Image\n * <Avatar src=\"/photo.jpg\" alt=\"John Doe\" name=\"John Doe\" />\n *\n * // Initials\n * <Avatar name=\"John Doe\" color=\"secondary\" />\n *\n * // With status\n * <Avatar name=\"Jane Smith\" status=\"online\" />\n *\n * // Clickable\n * <Avatar name=\"John Doe\" clickable onClick={openProfile} />\n */\nexport const Avatar = forwardRef<HTMLSpanElement, AvatarProps>(\n (\n {\n src,\n alt,\n name,\n status,\n shape = 'circle',\n color = 'default',\n size = 'md',\n clickable = false,\n className,\n onClick,\n ...props\n },\n ref\n ) => {\n const [imgError, setImgError] = useState(false);\n\n const initials = name ? getInitials(name) : null;\n const ariaLabel = alt ?? name ?? 'Avatar';\n const showImage = src && !imgError;\n\n return (\n <span\n ref={ref}\n role={clickable ? 'button' : undefined}\n tabIndex={clickable ? 0 : undefined}\n aria-label={ariaLabel}\n onClick={onClick}\n onKeyDown={clickable ? (e) => {\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onClick?.(e as unknown as React.MouseEvent<HTMLSpanElement>);\n }\n } : undefined}\n className={cn(\n avatarVariants({ size, shape, color }),\n clickable && [\n 'cursor-pointer',\n 'hover:ring-2 hover:ring-primary hover:ring-offset-2 hover:ring-offset-background',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n ],\n className,\n )}\n {...props}\n >\n {showImage ? (\n <img\n src={src}\n alt={alt ?? name ?? 'Avatar'}\n className=\"size-full object-cover rounded-[inherit] overflow-hidden\"\n onError={() => setImgError(true)}\n />\n ) : initials ? (\n <span aria-hidden=\"true\" className=\"rounded-[inherit] overflow-hidden\">{initials}</span>\n ) : (\n <Icon\n name=\"info\"\n size={size === 'xs' || size === 'sm' ? 'sm' : 'md'}\n aria-hidden\n />\n )}\n\n {/* Status indicator */}\n {status && (\n <span\n aria-label={`Status: ${status}`}\n className={cn(avatarStatusVariants({ status, size }))}\n />\n )}\n </span>\n );\n }\n);\n\nAvatar.displayName = 'Avatar';\n\n// ─── AvatarGroup ─────────────────────────────────────────────────────────────\n\nexport interface AvatarGroupProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Maximum number of avatars to show before collapsing to a count.\n */\n max?: number;\n\n /**\n * Size passed to all child Avatar components.\n */\n size?: AvatarProps['size'];\n}\n\n/**\n * AvatarGroup — stacks multiple avatars with overlap and a count overflow.\n *\n * @example\n * <AvatarGroup max={4}>\n * <Avatar name=\"John Doe\" />\n * <Avatar name=\"Jane Smith\" />\n * <Avatar name=\"Bob Lee\" />\n * <Avatar name=\"Alice Wang\" />\n * <Avatar name=\"Tom Jones\" />\n * </AvatarGroup>\n */\nexport const AvatarGroup = forwardRef<HTMLDivElement, AvatarGroupProps>(\n ({ max = 4, size = 'md', className, children, ...props }, ref) => {\n const childArray = Array.isArray(children) ? children : [children];\n const visible = childArray.slice(0, max);\n const overflow = childArray.length - max;\n\n return (\n <div\n ref={ref}\n className={cn('flex items-center', className)}\n {...props}\n >\n {visible.map((child, i) => (\n <span\n key={i}\n className=\"ring-2 ring-background rounded-full -ml-2 first:ml-0\"\n >\n {child}\n </span>\n ))}\n {overflow > 0 && (\n <span\n className={cn(\n avatarVariants({ size, shape: 'circle', color: 'default' }),\n '-ml-2 ring-2 ring-background text-label-sm',\n )}\n aria-label={`${overflow} more`}\n >\n +{overflow}\n </span>\n )}\n </div>\n );\n }\n);\n\nAvatarGroup.displayName = 'AvatarGroup';\n\n// ─── Helpers ─────────────────────────────────────────────────────────────────\n\n/**\n * Generates initials from a full name.\n * \"John Doe\" → \"JD\"\n * \"Alice\" → \"A\"\n * \"John Michael Doe\" → \"JD\" (first + last only)\n */\nfunction getInitials(name: string): string {\n const parts = name.trim().split(/\\s+/);\n if (parts.length === 1) return (parts[0]?.[0] ?? '').toUpperCase();\n return (\n (parts[0]?.[0] ?? '').toUpperCase() +\n (parts[parts.length - 1]?.[0] ?? '').toUpperCase()\n );\n}","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Chip variants — CVA configuration.\n *\n * Design intent:\n * - outlined → default, bordered, low fill\n * - filled → solid tonal background\n * - tonal → soft container color\n * - elevated → white with shadow\n *\n * Selected state changes color based on variant + color combination.\n * All tokens are semantic — never raw hex or palette steps.\n */\nexport const chipVariants = cva(\n [\n 'inline-flex items-center justify-center gap-1.5',\n 'font-medium whitespace-nowrap select-none',\n 'cursor-pointer border-[1.5px]',\n 'transition-all duration-short ease-standard',\n 'hover:-translate-y-px active:translate-y-0',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:pointer-events-none disabled:opacity-40',\n 'motion-reduce:transition-none motion-reduce:hover:translate-y-0',\n ],\n {\n variants: {\n variant: {\n outlined: 'bg-transparent border-outline text-on-surface hover:bg-surface-variant',\n filled: 'bg-surface-variant border-transparent text-on-surface hover:bg-surface-container',\n tonal: 'bg-secondary-container border-transparent text-on-secondary-container hover:bg-secondary-container/80',\n elevated: 'bg-background border-transparent text-on-surface shadow-sm hover:shadow-md',\n },\n color: {\n default: '',\n secondary: '',\n success: '',\n warning: '',\n error: '',\n info: '',\n },\n size: {\n sm: 'h-[26px] px-2.5 text-label-sm rounded-full',\n md: 'h-8 px-3 text-label-md rounded-full',\n lg: 'h-10 px-4 text-label-lg rounded-full',\n },\n selected: {\n true: '',\n false: '',\n },\n },\n\n compoundVariants: [\n // outlined + selected + colors\n { variant: 'outlined', selected: true, color: 'default', class: 'bg-primary-container border-primary text-on-primary-container' },\n { variant: 'outlined', selected: true, color: 'secondary', class: 'bg-secondary-container border-secondary text-on-secondary-container' },\n { variant: 'outlined', selected: true, color: 'success', class: 'bg-success-container border-success text-on-success-container' },\n { variant: 'outlined', selected: true, color: 'warning', class: 'bg-warning-container border-warning text-on-warning-container' },\n { variant: 'outlined', selected: true, color: 'error', class: 'bg-error-container border-error text-on-error-container' },\n { variant: 'outlined', selected: true, color: 'info', class: 'bg-info-container border-info text-on-info-container' },\n\n // filled + selected + colors\n { variant: 'filled', selected: true, color: 'default', class: 'bg-primary border-transparent text-on-primary' },\n { variant: 'filled', selected: true, color: 'secondary', class: 'bg-secondary border-transparent text-on-secondary' },\n { variant: 'filled', selected: true, color: 'success', class: 'bg-success border-transparent text-on-success' },\n { variant: 'filled', selected: true, color: 'warning', class: 'bg-warning border-transparent text-on-warning' },\n { variant: 'filled', selected: true, color: 'error', class: 'bg-error border-transparent text-on-error' },\n { variant: 'filled', selected: true, color: 'info', class: 'bg-info border-transparent text-on-info' },\n\n // tonal + selected\n { variant: 'tonal', selected: true, color: 'default', class: 'bg-secondary border-transparent text-on-secondary' },\n { variant: 'tonal', selected: true, color: 'success', class: 'bg-success border-transparent text-on-success' },\n { variant: 'tonal', selected: true, color: 'warning', class: 'bg-warning border-transparent text-on-warning' },\n { variant: 'tonal', selected: true, color: 'error', class: 'bg-error border-transparent text-on-error' },\n\n // elevated + selected\n { variant: 'elevated', selected: true, color: 'default', class: 'bg-primary-container text-on-primary-container shadow-sm' },\n ],\n\n defaultVariants: {\n variant: 'outlined',\n color: 'default',\n size: 'md',\n selected: false,\n },\n }\n);\n\nexport type ChipVariantProps = VariantProps<typeof chipVariants>;","import {\n forwardRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon, type IconName } from '../Icon';\nimport { chipVariants, type ChipVariantProps } from './Chip.variants';\n\n// ─── Chip ────────────────────────────────────────────────────────────────────\n\nexport interface ChipProps\n extends Omit<ComponentPropsWithoutRef<'button'>, 'color'>,\n ChipVariantProps {\n /**\n * Visual variant of the chip.\n */\n variant?: 'outlined' | 'filled' | 'tonal' | 'elevated';\n\n /**\n * Color applied when chip is selected.\n */\n color?: 'default' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n\n /** Size of the chip. */\n size?: 'sm' | 'md' | 'lg';\n\n /**\n * Controlled selected state.\n * If omitted, chip manages its own state (uncontrolled).\n */\n selected?: boolean;\n\n /**\n * Callback fired when selected state changes.\n */\n onSelectedChange?: (selected: boolean) => void;\n\n /**\n * Icon displayed before the label.\n * Hidden when loading=true (replaced by spinner).\n */\n leadingIcon?: IconName;\n\n /**\n * Shows a checkmark when selected instead of leadingIcon.\n * Default: true for filter chips.\n */\n showCheckOnSelect?: boolean;\n\n /**\n * Shows a colored dot before the label.\n * Useful for status indication.\n */\n colorDot?: string;\n\n /**\n * Avatar image URL shown before the label.\n * Useful for people chips.\n */\n avatarSrc?: string;\n\n /** Alt text for the avatar image. */\n avatarAlt?: string;\n\n /**\n * Badge count shown after the label.\n */\n badgeCount?: number;\n\n /**\n * Shows a remove (×) button after the label.\n * Fires onRemove when clicked.\n */\n removable?: boolean;\n\n /**\n * Callback fired when the remove button is clicked.\n */\n onRemove?: () => void;\n\n /**\n * Shows a loading spinner — disables interaction.\n * Useful for async filter actions.\n */\n loading?: boolean;\n}\n\n/**\n * Chip — a compact interactive element for filters, tags, and selections.\n *\n * Features beyond M3:\n * - 4 variants × 6 colors\n * - controlled + uncontrolled toggle state\n * - checkmark on select (filter chip behavior)\n * - avatar, colorDot, badgeCount slots\n * - removable with onRemove callback\n * - loading state with spinner\n *\n * @example\n * // Filter chip (uncontrolled)\n * <Chip showCheckOnSelect>Design</Chip>\n *\n * // Input chip (removable)\n * <Chip removable onRemove={() => remove(id)}>john@example.com</Chip>\n *\n * // With badge\n * <Chip badgeCount={12} leadingIcon=\"star\">Starred</Chip>\n *\n * // Color\n * <Chip color=\"success\" selected>Active</Chip>\n *\n * // Loading\n * <Chip loading>Applying...</Chip>\n */\nexport const Chip = forwardRef<HTMLButtonElement, ChipProps>(\n (\n {\n variant,\n color = 'default',\n size = 'md',\n selected: controlledSelected,\n onSelectedChange,\n leadingIcon,\n showCheckOnSelect = true,\n colorDot,\n avatarSrc,\n avatarAlt,\n badgeCount,\n removable,\n onRemove,\n loading = false,\n disabled,\n className,\n children,\n onClick,\n ...props\n },\n ref\n ) => {\n const [internalSelected, setInternalSelected] = useState(false);\n\n const isSelected = controlledSelected !== undefined\n ? controlledSelected\n : internalSelected;\n\n function handleClick(e: React.MouseEvent<HTMLButtonElement>) {\n const next = !isSelected;\n if (controlledSelected === undefined) setInternalSelected(next);\n onSelectedChange?.(next);\n onClick?.(e);\n }\n\n const iconSize = size === 'sm' ? 'sm' : 'sm';\n\n return (\n <button\n ref={ref}\n type=\"button\"\n disabled={disabled || loading}\n aria-pressed={isSelected}\n aria-busy={loading || undefined}\n className={cn(\n chipVariants({ variant, color, size, selected: isSelected }),\n className,\n )}\n onClick={handleClick}\n {...props}\n >\n {/* Leading slot — priority: loading > check > avatar > colorDot > icon */}\n {loading ? (\n <Spinner />\n ) : isSelected && showCheckOnSelect && !avatarSrc ? (\n <Icon name=\"check\" size={iconSize} aria-hidden />\n ) : avatarSrc ? (\n <ChipAvatar src={avatarSrc} alt={avatarAlt ?? ''} />\n ) : colorDot ? (\n <span\n aria-hidden=\"true\"\n className=\"size-2 rounded-full flex-shrink-0\"\n style={{ background: colorDot }}\n />\n ) : leadingIcon ? (\n <Icon name={leadingIcon} size={iconSize} aria-hidden />\n ) : null}\n\n {/* Label */}\n {children}\n\n {/* Badge count */}\n {badgeCount !== undefined && (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'inline-flex items-center justify-center',\n 'min-w-[18px] h-[18px] px-1 rounded-full',\n 'text-[10px] font-semibold',\n 'bg-black/10',\n isSelected && 'bg-white/20',\n )}\n >\n {badgeCount > 99 ? '99+' : badgeCount}\n </span>\n )}\n\n {/* Remove button */}\n {removable && !loading && (\n <button\n type=\"button\"\n aria-label=\"Remove\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove?.();\n }}\n className={cn(\n 'inline-flex items-center justify-center',\n 'size-4 rounded-full flex-shrink-0',\n 'bg-black/10 hover:bg-black/20',\n 'transition-colors duration-instant',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n )}\n >\n <Icon name=\"close\" size=\"sm\" aria-hidden />\n </button>\n )}\n </button>\n );\n }\n);\n\nChip.displayName = 'Chip';\n\n// ─── ChipGroup ────────────────────────────────────────────────────────────────\n\nexport interface ChipGroupProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {\n /**\n * Selection mode.\n * - `single` → only one chip selected at a time (like radio)\n * - `multi` → multiple chips can be selected (like checkbox)\n */\n mode?: 'single' | 'multi';\n\n /**\n * Controlled selected values.\n */\n value?: string[];\n\n /**\n * Callback fired when selection changes.\n */\n onChange?: (value: string[]) => void;\n\n /**\n * Maximum number of chips to show before collapsing.\n * Shows \"+ X more\" button when exceeded.\n */\n max?: number;\n\n /** Size passed to all child Chip components. */\n size?: ChipProps['size'];\n\n /** Variant passed to all child Chip components. */\n variant?: ChipProps['variant'];\n\n /** Children must be Chip components with a value prop. */\n children: ReactNode;\n}\n\n/**\n * ChipGroup — manages selection state for a group of chips.\n *\n * Features beyond M3:\n * - single and multi select modes\n * - controlled and uncontrolled\n * - overflow collapse with \"+ X more\" button\n *\n * @example\n * // Single select\n * <ChipGroup mode=\"single\" value={[filter]} onChange={v => setFilter(v[0])}>\n * <Chip value=\"all\">All</Chip>\n * <Chip value=\"design\">Design</Chip>\n * </ChipGroup>\n *\n * // Multi select\n * <ChipGroup mode=\"multi\" value={tags} onChange={setTags}>\n * <Chip value=\"react\">React</Chip>\n * <Chip value=\"ts\">TypeScript</Chip>\n * </ChipGroup>\n */\nexport const ChipGroup = forwardRef<HTMLDivElement, ChipGroupProps>(\n (\n {\n mode = 'multi',\n value: controlledValue,\n onChange,\n max,\n size,\n variant,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState<string[]>([]);\n const [expanded, setExpanded] = useState(false);\n\n const selected = controlledValue ?? internalValue;\n\n function handleSelect(chipValue: string) {\n let next: string[];\n if (mode === 'single') {\n next = selected.includes(chipValue) ? [] : [chipValue];\n } else {\n next = selected.includes(chipValue)\n ? selected.filter(v => v !== chipValue)\n : [...selected, chipValue];\n }\n if (!controlledValue) setInternalValue(next);\n onChange?.(next);\n }\n\n const childArray = Array.isArray(children) ? children : [children];\n const visible = max && !expanded ? childArray.slice(0, max) : childArray;\n const overflowCount = max ? childArray.length - max : 0;\n\n return (\n <div\n ref={ref}\n role={mode === 'single' ? 'radiogroup' : 'group'}\n className={cn('flex flex-wrap gap-2 items-center', className)}\n {...props}\n >\n {visible.map((child: any, i) => {\n if (!child) return null;\n const chipValue = child.props?.value ?? String(i);\n const isSelected = selected.includes(chipValue);\n return (\n <child.type\n key={chipValue}\n {...child.props}\n size={size ?? child.props?.size}\n variant={variant ?? child.props?.variant}\n selected={isSelected}\n onSelectedChange={() => handleSelect(chipValue)}\n />\n );\n })}\n\n {/* Overflow button */}\n {max && !expanded && overflowCount > 0 && (\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n className={cn(\n 'inline-flex items-center gap-1',\n 'h-8 px-3 rounded-full',\n 'border-[1.5px] border-dashed border-outline',\n 'bg-transparent text-text-secondary text-label-md',\n 'hover:bg-surface-variant hover:text-text-primary',\n 'transition-all duration-short',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n >\n + {overflowCount} more\n <Icon name=\"chevron-down\" size=\"sm\" aria-hidden />\n </button>\n )}\n\n {/* Collapse button */}\n {max && expanded && overflowCount > 0 && (\n <button\n type=\"button\"\n onClick={() => setExpanded(false)}\n className={cn(\n 'inline-flex items-center gap-1',\n 'h-8 px-3 rounded-full',\n 'border-[1.5px] border-dashed border-outline',\n 'bg-transparent text-text-secondary text-label-md',\n 'hover:bg-surface-variant hover:text-text-primary',\n 'transition-all duration-short',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n )}\n >\n Show less\n <Icon name=\"chevron-up\" size=\"sm\" aria-hidden />\n </button>\n )}\n </div>\n );\n }\n);\n\nChipGroup.displayName = 'ChipGroup';\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction ChipAvatar({ src, alt }: { src: string; alt: string }) {\n return (\n <span className=\"size-5 rounded-full overflow-hidden flex-shrink-0 -ml-1\">\n <img src={src} alt={alt} className=\"size-full object-cover\" />\n </span>\n );\n}\n\nfunction Spinner() {\n return (\n <span\n aria-hidden=\"true\"\n className=\"inline-block size-3.5 rounded-full border-2 border-current border-r-transparent animate-spin motion-reduce:animate-none flex-shrink-0\"\n />\n );\n}","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Checkbox variants — CVA configuration.\n */\nexport const checkboxVariants = cva(\n [\n 'relative flex-shrink-0',\n 'border-[2px]',\n 'flex items-center justify-center',\n 'transition-all duration-short ease-standard',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:cursor-not-allowed disabled:opacity-40',\n // NO rounded class here at all\n ],\n {\n variants: {\n size: {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n },\n shape: {\n // Both empty — radius set ONLY via compound variants below\n square: '',\n circle: '',\n },\n color: {\n default: '',\n secondary: '',\n success: '',\n warning: '',\n error: '',\n info: '',\n },\n checked: {\n true: '',\n false: 'bg-background border-outline hover:border-primary',\n },\n indeterminate: {\n true: '',\n false: '',\n },\n isError: {\n true: 'border-error',\n false: '',\n },\n },\n\n compoundVariants: [\n // ── SHAPE + SIZE (must come LAST to win) ──────────────────\n // Square — typical checkbox corners\n { shape: 'square', size: 'sm', class: 'rounded-[3px]' },\n { shape: 'square', size: 'md', class: 'rounded-[4px]' },\n { shape: 'square', size: 'lg', class: 'rounded-[5px]' },\n\n // Circle\n { shape: 'circle', size: 'sm', class: 'rounded-full' },\n { shape: 'circle', size: 'md', class: 'rounded-full' },\n { shape: 'circle', size: 'lg', class: 'rounded-full' },\n\n // ── CHECKED + COLORS ──────────────────────────────────────\n { checked: true, color: 'default', class: 'bg-primary border-primary' },\n { checked: true, color: 'secondary', class: 'bg-secondary border-secondary' },\n { checked: true, color: 'success', class: 'bg-success border-success' },\n { checked: true, color: 'warning', class: 'bg-warning border-warning' },\n { checked: true, color: 'error', class: 'bg-error border-error' },\n { checked: true, color: 'info', class: 'bg-info border-info' },\n\n // ── INDETERMINATE + COLORS ────────────────────────────────\n { indeterminate: true, color: 'default', class: 'bg-primary border-primary' },\n { indeterminate: true, color: 'secondary', class: 'bg-secondary border-secondary' },\n { indeterminate: true, color: 'success', class: 'bg-success border-success' },\n { indeterminate: true, color: 'warning', class: 'bg-warning border-warning' },\n { indeterminate: true, color: 'error', class: 'bg-error border-error' },\n { indeterminate: true, color: 'info', class: 'bg-info border-info' },\n\n // ── ERROR UNCHECKED ───────────────────────────────────────\n { checked: false, indeterminate: false, isError: true, class: 'border-error hover:border-error' },\n ],\n\n defaultVariants: {\n size: 'md',\n shape: 'square',\n color: 'default',\n checked: false,\n indeterminate: false,\n isError: false,\n },\n }\n);\n\nexport const checkboxCardVariants = cva(\n [\n 'flex items-start gap-3 p-4 rounded-xl border-[1.5px] cursor-pointer',\n 'transition-all duration-short ease-standard',\n 'hover:border-primary hover:bg-primary-container/20',\n 'focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2',\n ],\n {\n variants: {\n checked: {\n true: 'border-primary bg-primary-container/20',\n false: 'border-outline bg-background',\n },\n isError: {\n true: 'border-error bg-error-container/20 hover:border-error',\n false: '',\n },\n },\n defaultVariants: {\n checked: false,\n isError: false,\n },\n }\n);\n\nexport type CheckboxVariantProps = VariantProps<typeof checkboxVariants>;","import {\n forwardRef,\n useState,\n useId,\n useEffect,\n useRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon } from '../Icon';\nimport {\n checkboxVariants,\n checkboxCardVariants,\n type CheckboxVariantProps,\n} from './Checkbox.variants';\n\n// ─── Types ───────────────────────────────────────────────────────────────────\n\nexport interface CheckboxProps\n extends Omit<ComponentPropsWithoutRef<'input'>, 'size' | 'color' | 'type'>,\n Pick<CheckboxVariantProps, 'size' | 'shape' | 'color'> {\n /**\n * Label text shown next to the checkbox.\n */\n label?: ReactNode;\n\n /**\n * Helper text shown below the label.\n */\n helperText?: string;\n\n /**\n * Marks the checkbox as required — adds * to label.\n */\n required?: boolean;\n\n /**\n * Error state — red border.\n */\n error?: boolean;\n\n /**\n * Error message shown below the label when error=true.\n */\n errorText?: string;\n\n /**\n * Indeterminate state — shows a dash instead of checkmark.\n * Used for \"select all\" parent checkboxes.\n */\n indeterminate?: boolean;\n\n /**\n * Card style — wraps the checkbox in a bordered card.\n * Useful for plan selection, feature toggles, etc.\n */\n card?: boolean;\n\n /**\n * Description shown inside the card below the label.\n * Only used when card=true.\n */\n description?: string;\n\n /**\n * Size of the checkbox.\n */\n size?: 'sm' | 'md' | 'lg';\n\n /**\n * Shape of the checkbox.\n * - `square` → rounded corners (default)\n * - `circle` → fully rounded\n */\n shape?: 'square' | 'circle';\n\n /**\n * Color of the checkbox when checked.\n */\n color?: 'default' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n}\n\n// ─── Checkbox ─────────────────────────────────────────────────────────────────\n\n/**\n * Checkbox — a binary input control.\n *\n * Features beyond M3:\n * - 6 colors\n * - 3 sizes\n * - square and circle shapes\n * - indeterminate state (auto-managed by CheckboxGroup)\n * - card style with description\n * - helper text, error text, required indicator\n * - controlled + uncontrolled\n *\n * @example\n * // Basic\n * <Checkbox label=\"Accept terms\" required />\n *\n * // With helper\n * <Checkbox label=\"Email notifications\" helperText=\"We'll send you updates\" />\n *\n * // Error\n * <Checkbox label=\"Accept terms\" error errorText=\"You must accept the terms\" />\n *\n * // Card style\n * <Checkbox label=\"Pro plan\" description=\"$12/month\" card />\n *\n * // Color\n * <Checkbox label=\"Success\" color=\"success\" defaultChecked />\n */\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n label,\n helperText,\n required,\n error = false,\n errorText,\n indeterminate = false,\n card = false,\n description,\n size = 'md',\n shape = 'square',\n color = 'default',\n disabled,\n checked: controlledChecked,\n defaultChecked,\n onChange,\n className,\n id: providedId,\n ...props\n },\n ref\n ) => {\n const autoId = useId();\n const id = providedId ?? autoId;\n const inputRef = useRef<HTMLInputElement>(null);\n\n // Merge refs\n const mergedRef = (node: HTMLInputElement | null) => {\n inputRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n };\n\n // Internal state for uncontrolled\n const [internalChecked, setInternalChecked] = useState(defaultChecked ?? false);\n const isChecked = controlledChecked !== undefined ? controlledChecked : internalChecked;\n\n // Set indeterminate via DOM (can't be done via HTML attr)\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n if (controlledChecked === undefined) {\n setInternalChecked(e.target.checked);\n }\n onChange?.(e);\n }\n\n const iconSize = size === 'sm' ? 'sm' : size === 'lg' ? 'md' : 'sm';\n\n const checkboxEl = (\n <div className=\"relative flex-shrink-0\">\n <input\n ref={mergedRef}\n id={id}\n type=\"checkbox\"\n checked={isChecked}\n disabled={disabled}\n required={required}\n aria-invalid={error || undefined}\n aria-describedby={errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined}\n onChange={handleChange}\n className=\"sr-only peer\"\n {...props}\n />\n <div\n className={cn(\n checkboxVariants({\n size,\n shape,\n color,\n checked: isChecked || indeterminate,\n indeterminate,\n isError: error,\n }),\n )}\n aria-hidden=\"true\"\n >\n {indeterminate ? (\n <span className={cn(\n 'bg-on-primary rounded-full',\n size === 'sm' ? 'w-2 h-0.5' : size === 'lg' ? 'w-3 h-0.5' : 'w-2.5 h-0.5',\n )} />\n ) : isChecked ? (\n <Icon\n name=\"check\"\n size={iconSize}\n className=\"text-on-primary\"\n aria-hidden\n />\n ) : null}\n </div>\n </div>\n );\n\n // Card variant\n if (card) {\n return (\n <label\n htmlFor={id}\n className={cn(\n checkboxCardVariants({ checked: isChecked, isError: error }),\n disabled && 'opacity-40 cursor-not-allowed pointer-events-none',\n className,\n )}\n >\n {checkboxEl}\n <div className=\"flex-1 min-w-0\">\n {label && (\n <p className={cn(\n 'text-label-lg text-text-primary',\n error && 'text-error',\n )}>\n {label}\n {required && <span className=\"text-error ml-0.5\" aria-hidden>*</span>}\n </p>\n )}\n {description && (\n <p className=\"text-body-sm text-text-secondary mt-0.5\">{description}</p>\n )}\n {error && errorText && (\n <p id={`${id}-error`} className=\"text-body-sm text-error mt-1 flex items-center gap-1\">\n <Icon name=\"alert-circle\" size=\"sm\" aria-hidden />\n {errorText}\n </p>\n )}\n </div>\n </label>\n );\n }\n\n // Default variant\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <label\n htmlFor={id}\n className={cn(\n 'flex items-start gap-2.5 cursor-pointer',\n disabled && 'opacity-40 cursor-not-allowed',\n )}\n >\n {checkboxEl}\n {label && (\n <div className=\"flex flex-col gap-0.5 pt-px\">\n <span className={cn(\n 'text-label-lg text-text-primary leading-snug',\n error && 'text-error',\n )}>\n {label}\n {required && <span className=\"text-error ml-0.5\" aria-hidden>*</span>}\n </span>\n {helperText && !error && (\n <span id={`${id}-helper`} className=\"text-body-sm text-text-secondary\">\n {helperText}\n </span>\n )}\n </div>\n )}\n </label>\n\n {error && errorText && (\n <p\n id={`${id}-error`}\n className=\"text-body-sm text-error flex items-center gap-1 ml-[calc(1.25rem+10px)]\"\n >\n <Icon name=\"alert-circle\" size=\"sm\" aria-hidden />\n {errorText}\n </p>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n\n// ─── CheckboxGroup ────────────────────────────────────────────────────────────\n\nexport interface CheckboxGroupProps extends Omit<ComponentPropsWithoutRef<'fieldset'>, 'onChange'> {\n /**\n * Legend / group label shown above the checkboxes.\n */\n legend?: string;\n\n /**\n * Controlled selected values.\n */\n value?: string[];\n\n /**\n * Callback fired when selection changes.\n */\n onChange?: (value: string[]) => void;\n\n /**\n * Shows a \"select all\" parent checkbox with auto indeterminate state.\n */\n selectAll?: boolean;\n\n /**\n * Label for the select all checkbox.\n */\n selectAllLabel?: string;\n\n /**\n * Color applied to all child checkboxes.\n */\n color?: CheckboxProps['color'];\n\n /**\n * Size applied to all child checkboxes.\n */\n size?: CheckboxProps['size'];\n\n /** Children must be Checkbox components with a value prop. */\n children: ReactNode;\n}\n\n/**\n * CheckboxGroup — manages a group of checkboxes with optional select-all.\n *\n * Features beyond M3:\n * - auto-managed indeterminate state on select-all parent\n * - controlled + uncontrolled\n * - accessible fieldset + legend\n *\n * @example\n * <CheckboxGroup\n * legend=\"Permissions\"\n * selectAll\n * selectAllLabel=\"All permissions\"\n * value={selected}\n * onChange={setSelected}\n * >\n * <Checkbox value=\"read\" label=\"Read\" />\n * <Checkbox value=\"write\" label=\"Write\" />\n * <Checkbox value=\"delete\" label=\"Delete\" />\n * </CheckboxGroup>\n */\nexport const CheckboxGroup = forwardRef<HTMLFieldSetElement, CheckboxGroupProps>(\n (\n {\n legend,\n value: controlledValue,\n onChange,\n selectAll = false,\n selectAllLabel = 'Select all',\n color,\n size,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState<string[]>([]);\n const selected = controlledValue ?? internalValue;\n\n const childArray = (Array.isArray(children) ? children : [children]).filter(Boolean) as any[];\n const allValues = childArray.map((c: any) => c?.props?.value).filter(Boolean) as string[];\n\n const allSelected = allValues.length > 0 && allValues.every(v => selected.includes(v));\n const someSelected = allValues.some(v => selected.includes(v)) && !allSelected;\n\n function handleSelectAll() {\n const next = allSelected ? [] : allValues;\n if (!controlledValue) setInternalValue(next);\n onChange?.(next);\n }\n\n function handleChildChange(childValue: string, checked: boolean) {\n const next = checked\n ? [...selected, childValue]\n : selected.filter(v => v !== childValue);\n if (!controlledValue) setInternalValue(next);\n onChange?.(next);\n }\n\n return (\n <fieldset\n ref={ref}\n className={cn('border-none p-0 m-0 flex flex-col gap-3', className)}\n {...props}\n >\n {legend && (\n <legend className=\"text-label-lg text-text-primary font-medium mb-1\">\n {legend}\n </legend>\n )}\n\n {selectAll && (\n <>\n <Checkbox\n label={selectAllLabel}\n checked={allSelected}\n indeterminate={someSelected}\n color={color}\n size={size}\n onChange={handleSelectAll}\n />\n <div className=\"w-full h-px bg-outline-variant\" aria-hidden />\n </>\n )}\n\n <div className={cn('flex flex-col gap-3', selectAll && 'pl-2')}>\n {childArray.map((child: any, i) => {\n if (!child) return null;\n const childValue = child.props?.value ?? String(i);\n const isChecked = selected.includes(childValue);\n return (\n <child.type\n key={childValue}\n {...child.props}\n color={color ?? child.props?.color}\n size={size ?? child.props?.size}\n checked={isChecked}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => {\n handleChildChange(childValue, e.target.checked);\n child.props?.onChange?.(e);\n }}\n />\n );\n })}\n </div>\n </fieldset>\n );\n }\n);\n\nCheckboxGroup.displayName = 'CheckboxGroup';","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Radio variants — CVA configuration.\n *\n * Design intent:\n * - Always circular (radio buttons are always round by convention)\n * - 6 colors matching design system semantic tokens\n * - 3 sizes\n * - 3 display styles: default, card, button, segmented\n */\nexport const radioVariants = cva(\n [\n 'relative flex-shrink-0 rounded-full',\n 'border-2 border-outline bg-background',\n 'flex items-center justify-center',\n 'transition-all duration-short ease-standard',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n ],\n {\n variants: {\n size: {\n sm: 'size-4',\n md: 'size-5',\n lg: 'size-6',\n },\n color: {\n default: '',\n secondary: '',\n success: '',\n warning: '',\n error: '',\n info: '',\n },\n selected: {\n true: '',\n false: 'hover:border-primary',\n },\n isError: {\n true: 'border-error',\n false: '',\n },\n },\n\n compoundVariants: [\n // Selected + colors — border color\n { selected: true, color: 'default', class: 'border-primary' },\n { selected: true, color: 'secondary', class: 'border-secondary' },\n { selected: true, color: 'success', class: 'border-success' },\n { selected: true, color: 'warning', class: 'border-warning' },\n { selected: true, color: 'error', class: 'border-error' },\n { selected: true, color: 'info', class: 'border-info' },\n ],\n\n defaultVariants: {\n size: 'md',\n color: 'default',\n selected: false,\n isError: false,\n },\n }\n);\n\nexport const radioDotVariants = cva(\n ['rounded-full transition-all duration-short ease-standard'],\n {\n variants: {\n size: {\n sm: 'size-2',\n md: 'size-2.5',\n lg: 'size-3',\n },\n color: {\n default: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n info: 'bg-info',\n },\n },\n defaultVariants: {\n size: 'md',\n color: 'default',\n },\n }\n);\n\nexport const radioCardVariants = cva(\n [\n 'flex items-start gap-3 p-4 rounded-xl border-[1.5px] cursor-pointer w-full',\n 'transition-all duration-short ease-standard',\n 'hover:border-primary hover:bg-primary-container/20',\n 'focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2',\n ],\n {\n variants: {\n selected: {\n true: 'border-primary bg-primary-container/20',\n false: 'border-outline bg-background',\n },\n isError: {\n true: 'border-error bg-error-container/20 hover:border-error',\n false: '',\n },\n },\n defaultVariants: {\n selected: false,\n isError: false,\n },\n }\n);\n\nexport const radioButtonVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'border-[1.5px] border-outline',\n 'font-medium cursor-pointer',\n 'transition-all duration-short ease-standard',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-40',\n ],\n {\n variants: {\n size: {\n sm: 'h-8 px-3 text-label-sm rounded-full',\n md: 'h-9 px-4 text-label-md rounded-full',\n lg: 'h-11 px-6 text-label-lg rounded-full',\n },\n selected: {\n true: 'bg-primary border-primary text-on-primary',\n false: 'bg-transparent text-on-surface-variant hover:border-primary hover:text-primary hover:bg-primary-container/20',\n },\n },\n defaultVariants: {\n size: 'md',\n selected: false,\n },\n }\n);\n\nexport const radioSegmentedVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'font-medium cursor-pointer rounded-lg',\n 'transition-all duration-short ease-standard',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:pointer-events-none disabled:opacity-40',\n ],\n {\n variants: {\n size: {\n sm: 'h-7 px-3 text-label-sm',\n md: 'h-8 px-4 text-label-md',\n lg: 'h-10 px-5 text-label-lg',\n },\n selected: {\n true: 'bg-background text-text-primary shadow-sm',\n false: 'bg-transparent text-text-secondary hover:text-text-primary',\n },\n },\n defaultVariants: {\n size: 'md',\n selected: false,\n },\n }\n);\n\nexport type RadioVariantProps = VariantProps<typeof radioVariants>;","import {\n forwardRef,\n useId,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon } from '../Icon';\nimport {\n radioVariants,\n radioDotVariants,\n radioCardVariants,\n radioButtonVariants,\n radioSegmentedVariants,\n type RadioVariantProps,\n} from './Radio.variants';\n\n// ─── Radio ────────────────────────────────────────────────────────────────────\n\nexport interface RadioProps\n extends Omit<ComponentPropsWithoutRef<'input'>, 'size' | 'color' | 'type'>,\n Pick<RadioVariantProps, 'size' | 'color'> {\n /** Label shown next to the radio. */\n label?: ReactNode;\n\n /** Helper text shown below the label. */\n helperText?: string;\n\n /** Error state — red border. */\n error?: boolean;\n\n /** Error message shown below the label. */\n errorText?: string;\n\n /**\n * Card style — wraps in a bordered card.\n * Useful for plan/option selection.\n */\n card?: boolean;\n\n /**\n * Description shown inside the card below the label.\n * Only used when card=true.\n */\n description?: string;\n\n /**\n * Badge shown in the top-right of the card.\n * Only used when card=true.\n */\n badge?: string;\n\n /** Whether this radio is selected. */\n checked?: boolean;\n\n /** Size of the radio button. */\n size?: 'sm' | 'md' | 'lg';\n\n /** Color when selected. */\n color?: 'default' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n}\n\n/**\n * Radio — a single radio button option.\n *\n * Always used inside RadioGroup. Supports default, card,\n * button, and segmented display styles via RadioGroup's `display` prop.\n *\n * Features beyond M3:\n * - 6 colors\n * - 3 sizes\n * - card style with badge\n * - helper text + error text\n * - button and segmented styles via RadioGroup\n *\n * @example\n * <RadioGroup value={plan} onChange={setPlan}>\n * <Radio value=\"pro\" label=\"Pro\" description=\"$12/month\" card badge=\"Popular\" />\n * <Radio value=\"team\" label=\"Team\" description=\"$49/month\" card />\n * </RadioGroup>\n */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n label,\n helperText,\n error = false,\n errorText,\n card = false,\n description,\n badge,\n size = 'md',\n color = 'default',\n checked = false,\n disabled,\n className,\n id: providedId,\n ...props\n },\n ref\n ) => {\n const autoId = useId();\n const id = providedId ?? autoId;\n\n const radioCircle = (\n <div className=\"relative flex-shrink-0\">\n <input\n ref={ref}\n id={id}\n type=\"radio\"\n checked={checked}\n disabled={disabled}\n aria-invalid={error || undefined}\n aria-describedby={\n errorText ? `${id}-error` : helperText ? `${id}-helper` : undefined\n }\n className=\"sr-only peer\"\n {...props}\n />\n <div\n className={cn(\n radioVariants({ size, color, selected: checked, isError: error }),\n )}\n aria-hidden=\"true\"\n >\n {checked && (\n <span className={cn(radioDotVariants({ size, color }))} />\n )}\n </div>\n </div>\n );\n\n // Card variant\n if (card) {\n return (\n <label\n htmlFor={id}\n className={cn(\n radioCardVariants({ selected: checked, isError: error }),\n disabled && 'opacity-40 cursor-not-allowed pointer-events-none',\n className,\n )}\n >\n {radioCircle}\n <div className=\"flex-1 min-w-0\">\n <div className=\"flex items-start justify-between gap-2\">\n <p className={cn(\n 'text-label-lg text-text-primary',\n error && 'text-error',\n )}>\n {label}\n </p>\n {badge && (\n <span className=\"text-label-sm bg-primary text-on-primary px-2 py-0.5 rounded-full flex-shrink-0\">\n {badge}\n </span>\n )}\n </div>\n {description && (\n <p className=\"text-body-sm text-text-secondary mt-0.5\">{description}</p>\n )}\n {error && errorText && (\n <p id={`${id}-error`} className=\"text-body-sm text-error mt-1 flex items-center gap-1\">\n <Icon name=\"alert-circle\" size=\"sm\" aria-hidden />\n {errorText}\n </p>\n )}\n </div>\n </label>\n );\n }\n\n // Default variant\n return (\n <div className={cn('flex flex-col gap-1', className)}>\n <label\n htmlFor={id}\n className={cn(\n 'flex items-start gap-2.5 cursor-pointer',\n disabled && 'opacity-40 cursor-not-allowed',\n )}\n >\n {radioCircle}\n {label && (\n <div className=\"flex flex-col gap-0.5 pt-px\">\n <span className={cn(\n 'text-label-lg text-text-primary leading-snug',\n error && 'text-error',\n )}>\n {label}\n </span>\n {helperText && !error && (\n <span id={`${id}-helper`} className=\"text-body-sm text-text-secondary\">\n {helperText}\n </span>\n )}\n </div>\n )}\n </label>\n {error && errorText && (\n <p\n id={`${id}-error`}\n className=\"text-body-sm text-error flex items-center gap-1 ml-[calc(1.25rem+10px)]\"\n >\n <Icon name=\"alert-circle\" size=\"sm\" aria-hidden />\n {errorText}\n </p>\n )}\n </div>\n );\n }\n);\n\nRadio.displayName = 'Radio';\n\n// ─── RadioGroup ───────────────────────────────────────────────────────────────\n\nexport interface RadioGroupProps extends Omit<ComponentPropsWithoutRef<'fieldset'>, 'onChange'> {\n /** Legend shown above the group. */\n legend?: string;\n\n /** Controlled selected value. */\n value?: string;\n\n /** Callback fired when selection changes. */\n onChange?: (value: string) => void;\n\n /**\n * Display style of the radio group.\n * - `default` → standard radio circles with labels\n * - `card` → bordered cards (overrides Radio card prop)\n * - `button` → pill-shaped buttons\n * - `segmented` → segmented control (tab-like)\n */\n display?: 'default' | 'card' | 'button' | 'segmented';\n\n /**\n * Layout direction.\n * - `vertical` → stacked (default)\n * - `horizontal` → side by side\n */\n direction?: 'vertical' | 'horizontal';\n\n /** Error state for the entire group. */\n error?: boolean;\n\n /** Error message shown below the group. */\n errorText?: string;\n\n /** Color applied to all child radios. */\n color?: RadioProps['color'];\n\n /** Size applied to all child radios. */\n size?: RadioProps['size'];\n\n /** Children must be Radio components with a value prop. */\n children: ReactNode;\n}\n\n/**\n * RadioGroup — manages a group of radio buttons.\n *\n * Features beyond M3:\n * - 4 display styles: default, card, button, segmented\n * - vertical and horizontal layouts\n * - controlled state management\n * - accessible fieldset + legend + radiogroup role\n *\n * @example\n * // Default\n * <RadioGroup value={gender} onChange={setGender} direction=\"horizontal\">\n * <Radio value=\"male\" label=\"Male\" />\n * <Radio value=\"female\" label=\"Female\" />\n * <Radio value=\"other\" label=\"Other\" />\n * </RadioGroup>\n *\n * // Button style\n * <RadioGroup value={billing} onChange={setBilling} display=\"button\">\n * <Radio value=\"monthly\" label=\"Monthly\" />\n * <Radio value=\"yearly\" label=\"Yearly\" />\n * </RadioGroup>\n *\n * // Segmented\n * <RadioGroup value={view} onChange={setView} display=\"segmented\">\n * <Radio value=\"day\" label=\"Day\" />\n * <Radio value=\"week\" label=\"Week\" />\n * <Radio value=\"month\" label=\"Month\" />\n * </RadioGroup>\n */\nexport const RadioGroup = forwardRef<HTMLFieldSetElement, RadioGroupProps>(\n (\n {\n legend,\n value,\n onChange,\n display = 'default',\n direction = 'vertical',\n error = false,\n errorText,\n color,\n size,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const childArray = (Array.isArray(children) ? children : [children]).filter(Boolean) as any[];\n const groupId = useId();\n\n function renderChild(child: any, i: number) {\n if (!child) return null;\n const childValue = child.props?.value ?? String(i);\n const isSelected = value === childValue;\n\n const commonProps = {\n key: childValue,\n checked: isSelected,\n color: color ?? child.props?.color,\n size: size ?? child.props?.size,\n name: groupId,\n onChange: () => onChange?.(childValue),\n };\n\n // Button style\n if (display === 'button') {\n return (\n <label\n key={childValue}\n className={cn(\n radioButtonVariants({\n size: size ?? child.props?.size ?? 'md',\n selected: isSelected,\n }),\n child.props?.disabled && 'opacity-40 pointer-events-none',\n )}\n >\n <input\n type=\"radio\"\n value={childValue}\n checked={isSelected}\n disabled={child.props?.disabled}\n name={groupId}\n onChange={() => onChange?.(childValue)}\n className=\"sr-only\"\n />\n {child.props?.label ?? child.props?.children}\n </label>\n );\n }\n\n // Segmented style\n if (display === 'segmented') {\n return (\n <label\n key={childValue}\n className={cn(\n radioSegmentedVariants({\n size: size ?? child.props?.size ?? 'md',\n selected: isSelected,\n }),\n child.props?.disabled && 'opacity-40 pointer-events-none',\n )}\n >\n <input\n type=\"radio\"\n value={childValue}\n checked={isSelected}\n disabled={child.props?.disabled}\n name={groupId}\n onChange={() => onChange?.(childValue)}\n className=\"sr-only\"\n />\n {child.props?.label ?? child.props?.children}\n </label>\n );\n }\n\n // Card style — pass card=true to each child\n if (display === 'card') {\n return (\n <child.type\n {...child.props}\n {...commonProps}\n card\n error={error}\n />\n );\n }\n\n // Default style\n return (\n <child.type\n {...child.props}\n {...commonProps}\n error={error}\n />\n );\n }\n\n // Segmented wrapper\n if (display === 'segmented') {\n return (\n <fieldset ref={ref} className={cn('border-none p-0 m-0', className)} {...props}>\n {legend && (\n <legend className=\"text-label-lg text-text-primary font-medium mb-2\">{legend}</legend>\n )}\n <div\n role=\"radiogroup\"\n className=\"inline-flex bg-surface-variant rounded-xl p-1 gap-1\"\n >\n {childArray.map(renderChild)}\n </div>\n </fieldset>\n );\n }\n\n return (\n <fieldset\n ref={ref}\n role=\"radiogroup\"\n className={cn('border-none p-0 m-0 flex flex-col gap-1', className)}\n {...props}\n >\n {legend && (\n <legend className={cn(\n 'text-label-lg font-medium mb-2',\n error ? 'text-error' : 'text-text-primary',\n )}>\n {legend}\n </legend>\n )}\n\n <div className={cn(\n 'flex gap-3',\n direction === 'vertical' ? 'flex-col' : 'flex-row flex-wrap',\n display === 'button' && 'flex-row flex-wrap',\n )}>\n {childArray.map(renderChild)}\n </div>\n\n {error && errorText && (\n <p className=\"text-body-sm text-error flex items-center gap-1 mt-1\">\n <Icon name=\"alert-circle\" size=\"sm\" aria-hidden />\n {errorText}\n </p>\n )}\n </fieldset>\n );\n }\n);\n\nRadioGroup.displayName = 'RadioGroup';","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Switch variants — CVA configuration.\n *\n * Design intent:\n * - Track changes color when on\n * - Thumb slides from left to right\n * - 6 colors, 3 sizes\n * - Optional icon inside thumb\n */\nexport const switchTrackVariants = cva(\n [\n 'relative inline-flex flex-shrink-0 rounded-full border-2',\n 'transition-all duration-medium ease-standard',\n 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n 'disabled:cursor-not-allowed disabled:opacity-40',\n ],\n {\n variants: {\n size: {\n sm: 'w-9 h-5',\n md: 'w-11 h-6',\n lg: 'w-[52px] h-7',\n },\n checked: {\n true: '',\n false: 'bg-surface-container-high border-outline',\n },\n color: {\n default: '',\n secondary: '',\n success: '',\n warning: '',\n error: '',\n info: '',\n },\n },\n\n compoundVariants: [\n // On + colors\n { checked: true, color: 'default', class: 'bg-primary border-primary' },\n { checked: true, color: 'secondary', class: 'bg-secondary border-secondary' },\n { checked: true, color: 'success', class: 'bg-success border-success' },\n { checked: true, color: 'warning', class: 'bg-warning border-warning' },\n { checked: true, color: 'error', class: 'bg-error border-error' },\n { checked: true, color: 'info', class: 'bg-info border-info' },\n ],\n\n defaultVariants: {\n size: 'md',\n checked: false,\n color: 'default',\n },\n }\n);\n\nexport const switchThumbVariants = cva(\n [\n 'absolute rounded-full',\n 'flex items-center justify-center',\n 'transition-all duration-medium ease-standard',\n 'shadow-sm',\n ],\n {\n variants: {\n size: {\n sm: 'size-3.5 top-[1px]',\n md: 'size-[18px] top-[1px]',\n lg: 'size-[22px] top-[1px]',\n },\n checked: {\n true: 'bg-on-primary',\n false: 'bg-on-surface-variant',\n },\n },\n\n compoundVariants: [\n // Thumb position — off (left)\n { checked: false, size: 'sm', class: 'left-[1px]' },\n { checked: false, size: 'md', class: 'left-[1px]' },\n { checked: false, size: 'lg', class: 'left-[1px]' },\n\n // Thumb position — on (right)\n { checked: true, size: 'sm', class: 'left-[17px]' },\n { checked: true, size: 'md', class: 'left-[21px]' },\n { checked: true, size: 'lg', class: 'left-[25px]' },\n ],\n\n defaultVariants: {\n size: 'md',\n checked: false,\n },\n }\n);\n\nexport const switchCardVariants = cva(\n [\n 'flex items-center justify-between gap-4',\n 'p-4 rounded-xl border-[1.5px] cursor-pointer w-full text-left',\n 'transition-all duration-short ease-standard',\n 'hover:border-primary hover:bg-primary-container/10',\n 'focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2',\n ],\n {\n variants: {\n checked: {\n true: 'border-primary bg-primary-container/10',\n false: 'border-outline bg-background',\n },\n },\n defaultVariants: {\n checked: false,\n },\n }\n);\n\nexport type SwitchTrackVariantProps = VariantProps<typeof switchTrackVariants>;","import {\n forwardRef,\n useState,\n useId,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon, type IconName } from '../Icon';\nimport {\n switchTrackVariants,\n switchThumbVariants,\n switchCardVariants,\n type SwitchTrackVariantProps,\n} from './Switch.variants';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface SwitchProps\n extends Omit<ComponentPropsWithoutRef<'input'>, 'size' | 'color' | 'type'>,\n Pick<SwitchTrackVariantProps, 'size' | 'color'> {\n /**\n * Label shown next to the switch.\n */\n label?: ReactNode;\n\n /**\n * Helper text shown below the label.\n */\n helperText?: string;\n\n /**\n * Position of the label relative to the switch.\n * - `right` → label after switch (default)\n * - `left` → label before switch, switch pinned right\n */\n labelPosition?: 'left' | 'right';\n\n /**\n * Icon shown inside the thumb when switch is ON.\n * Disappears when switch is off.\n */\n checkedIcon?: IconName;\n\n /**\n * Icon shown inside the thumb when switch is OFF.\n */\n uncheckedIcon?: IconName;\n\n /**\n * Card style — wraps switch in a bordered card.\n * Label becomes the card title, helperText becomes description.\n */\n card?: boolean;\n\n /**\n * Whether the switch is on.\n * If omitted, component manages its own state (uncontrolled).\n */\n checked?: boolean;\n\n /** Default checked state for uncontrolled usage. */\n defaultChecked?: boolean;\n\n /** Size of the switch. */\n size?: 'sm' | 'md' | 'lg';\n\n /** Color of the track when on. */\n color?: 'default' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\n}\n\n// ─── Switch ───────────────────────────────────────────────────────────────────\n\n/**\n * Switch — an on/off toggle control.\n *\n * Use Switch (not Checkbox) when the action takes effect immediately\n * without requiring form submission.\n *\n * Features beyond M3:\n * - 6 colors\n * - 3 sizes\n * - icon inside thumb (on and off states)\n * - label left or right position\n * - card style with title + description\n * - controlled + uncontrolled\n *\n * @example\n * // Basic\n * <Switch label=\"Dark mode\" />\n *\n * // With icon\n * <Switch label=\"Wi-Fi\" checkedIcon=\"wifi\" color=\"success\" />\n *\n * // Label left\n * <Switch label=\"Notifications\" labelPosition=\"left\" />\n *\n * // Card style\n * <Switch label=\"Email notifications\" helperText=\"Get updates via email\" card />\n *\n * // Controlled\n * <Switch checked={enabled} onChange={e => setEnabled(e.target.checked)} />\n */\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n (\n {\n label,\n helperText,\n labelPosition = 'right',\n checkedIcon,\n uncheckedIcon,\n card = false,\n size = 'md',\n color = 'default',\n checked: controlledChecked,\n defaultChecked = false,\n disabled,\n onChange,\n className,\n id: providedId,\n ...props\n },\n ref\n ) => {\n const autoId = useId();\n const id = providedId ?? autoId;\n\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const isChecked = controlledChecked !== undefined\n ? controlledChecked\n : internalChecked;\n\n function handleChange(e: React.ChangeEvent<HTMLInputElement>) {\n if (controlledChecked === undefined) {\n setInternalChecked(e.target.checked);\n }\n onChange?.(e);\n }\n\n const iconSize = size === 'lg' ? 'sm' : 'sm';\n const currentIcon = isChecked ? checkedIcon : uncheckedIcon;\n\n // Card style\n if (card) {\n return (\n <label\n htmlFor={id}\n className={cn(\n switchCardVariants({ checked: isChecked }),\n disabled && 'opacity-40 cursor-not-allowed pointer-events-none',\n className,\n )}\n >\n <div className=\"flex-1 min-w-0\">\n {label && (\n <p className=\"text-label-lg text-text-primary\">{label}</p>\n )}\n {helperText && (\n <p className=\"text-body-sm text-text-secondary mt-0.5\">{helperText}</p>\n )}\n </div>\n <div className=\"relative flex-shrink-0\">\n <input\n ref={ref}\n id={id}\n type=\"checkbox\"\n role=\"switch\"\n checked={isChecked}\n disabled={disabled}\n aria-checked={isChecked}\n onChange={handleChange}\n className=\"sr-only peer\"\n {...props}\n />\n <div\n className={cn(switchTrackVariants({ size, checked: isChecked, color }))}\n aria-hidden=\"true\"\n >\n <div className={cn(switchThumbVariants({ size, checked: isChecked }))}>\n {currentIcon && (\n <Icon\n name={currentIcon}\n size={iconSize}\n className={cn(\n 'transition-colors duration-short',\n isChecked ? 'text-primary' : 'text-on-surface-variant',\n color === 'secondary' && isChecked && 'text-secondary',\n color === 'success' && isChecked && 'text-success',\n color === 'warning' && isChecked && 'text-warning',\n color === 'error' && isChecked && 'text-error',\n color === 'info' && isChecked && 'text-info',\n )}\n aria-hidden\n />\n )}\n </div>\n </div>\n </div>\n </label>\n );\n }\n\n // Default style — label wraps both input and visual track so clicking\n // anywhere (text or thumb) toggles the switch.\n return (\n <label\n htmlFor={id}\n className={cn(\n 'flex items-center gap-3 cursor-pointer',\n labelPosition === 'left' && 'justify-between',\n disabled && 'opacity-40 cursor-not-allowed pointer-events-none',\n className,\n )}\n >\n {labelPosition === 'left' && label && (\n <div className=\"flex flex-col gap-0.5 flex-1\">\n <span className=\"text-label-lg text-text-primary\">{label}</span>\n {helperText && (\n <span className=\"text-body-sm text-text-secondary\">{helperText}</span>\n )}\n </div>\n )}\n\n <div className=\"relative flex-shrink-0\">\n <input\n ref={ref}\n id={id}\n type=\"checkbox\"\n role=\"switch\"\n checked={isChecked}\n disabled={disabled}\n aria-checked={isChecked}\n onChange={handleChange}\n className=\"sr-only peer\"\n {...props}\n />\n <div\n className={cn(switchTrackVariants({ size, checked: isChecked, color }))}\n aria-hidden=\"true\"\n >\n <div className={cn(switchThumbVariants({ size, checked: isChecked }))}>\n {currentIcon && (\n <Icon\n name={currentIcon}\n size={iconSize}\n className={cn(\n 'transition-colors duration-short',\n isChecked ? 'text-primary' : 'text-on-surface-variant',\n color === 'secondary' && isChecked && 'text-secondary',\n color === 'success' && isChecked && 'text-success',\n color === 'warning' && isChecked && 'text-warning',\n color === 'error' && isChecked && 'text-error',\n color === 'info' && isChecked && 'text-info',\n )}\n aria-hidden\n />\n )}\n </div>\n </div>\n </div>\n\n {labelPosition === 'right' && label && (\n <div className=\"flex flex-col gap-0.5\">\n <span className=\"text-label-lg text-text-primary\">{label}</span>\n {helperText && (\n <span className=\"text-body-sm text-text-secondary\">{helperText}</span>\n )}\n </div>\n )}\n </label>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Select variants — CVA configuration.\n *\n * Design intent:\n * - Trigger matches Input styling for visual consistency\n * - Dropdown has elevation-3 shadow\n * - Options have hover/selected/disabled states\n */\nexport const selectTriggerVariants = cva(\n [\n 'relative flex items-center gap-2 w-full',\n 'border-[1.5px] bg-background',\n 'cursor-pointer select-none',\n 'transition-all duration-short ease-standard',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background',\n ],\n {\n variants: {\n size: {\n sm: 'min-h-9 px-3 rounded text-body-sm',\n md: 'min-h-11 px-3 rounded-md text-body-md',\n lg: 'min-h-[52px] px-4 rounded-md text-body-lg',\n },\n state: {\n default: 'border-outline hover:border-on-surface-variant text-text-primary',\n open: 'border-primary ring-2 ring-primary/10 text-text-primary',\n error: 'border-error hover:border-error text-text-primary',\n disabled:'border-outline bg-surface opacity-50 cursor-not-allowed text-text-disabled',\n },\n },\n defaultVariants: {\n size: 'md',\n state: 'default',\n },\n }\n);\n\nexport const selectOptionVariants = cva(\n [\n 'flex items-center gap-2 w-full px-2.5 py-2 rounded',\n 'text-body-md cursor-pointer',\n 'transition-colors duration-instant ease-standard',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n ],\n {\n variants: {\n state: {\n default: 'text-text-primary hover:bg-surface-variant',\n selected: 'bg-primary-container text-on-primary-container font-medium hover:bg-primary-container/80',\n disabled: 'text-text-disabled cursor-not-allowed opacity-50',\n focused: 'bg-surface-variant text-text-primary',\n },\n },\n defaultVariants: {\n state: 'default',\n },\n }\n);\n\nexport type SelectTriggerVariantProps = VariantProps<typeof selectTriggerVariants>;\nexport type SelectOptionVariantProps = VariantProps<typeof selectOptionVariants>;","import {\n forwardRef,\n useState,\n useId,\n useRef,\n useEffect,\n useCallback,\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon } from '../Icon';\nimport {\n selectTriggerVariants,\n selectOptionVariants,\n} from './Select.variants';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface SelectOption {\n /** Unique value for this option. */\n value: string;\n /** Display label. */\n label: string;\n /** Optional description shown below label. */\n description?: string;\n /** Avatar image URL. */\n avatarSrc?: string;\n /** Avatar alt text. */\n avatarAlt?: string;\n /** Leading icon. */\n icon?: string;\n /** Whether this option is disabled. */\n disabled?: boolean;\n}\n\nexport interface SelectOptionGroup {\n /** Group label shown above options. */\n label: string;\n /** Options in this group. */\n options: SelectOption[];\n}\n\nexport interface SelectProps\n extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {\n /** Label shown above the select. */\n label?: string;\n\n /** Placeholder shown when no value selected. */\n placeholder?: string;\n\n /** Helper text shown below the select. */\n helperText?: string;\n\n /** Marks field as required. */\n required?: boolean;\n\n /** Error state. */\n error?: boolean;\n\n /** Error message shown below. */\n errorText?: string;\n\n /** Flat list of options. Use optionGroups for grouped options. */\n options?: SelectOption[];\n\n /** Grouped options. Takes priority over options. */\n optionGroups?: SelectOptionGroup[];\n\n /** Controlled value (single select). */\n value?: string;\n\n /** Controlled values (multi select). */\n values?: string[];\n\n /** Callback for single select. */\n onChange?: (value: string) => void;\n\n /** Callback for multi select. */\n onChangeMulti?: (values: string[]) => void;\n\n /** Enables multi-select mode. */\n multi?: boolean;\n\n /** Shows a search input inside the dropdown. */\n searchable?: boolean;\n\n /** Placeholder for the search input. */\n searchPlaceholder?: string;\n\n /** Shows a clear button when a value is selected. */\n clearable?: boolean;\n\n /** Disables the select. */\n disabled?: boolean;\n\n /** Size of the select trigger. */\n size?: 'sm' | 'md' | 'lg';\n\n /** Maximum number of items to show in multi mode before showing count. */\n maxDisplay?: number;\n}\n\n// ─── Select ───────────────────────────────────────────────────────────────────\n\n/**\n * Select — a fully custom dropdown selector.\n *\n * Features beyond M3:\n * - searchable options with highlight\n * - option groups with labels\n * - multi-select with chip display\n * - avatar options with description\n * - clearable\n * - disabled options\n * - full keyboard navigation (arrows, enter, escape, home, end)\n * - 3 sizes\n * - WCAG AA accessible\n *\n * @example\n * // Single\n * <Select label=\"Department\" options={options} value={dept} onChange={setDept} />\n *\n * // Multi\n * <Select label=\"Tags\" options={options} multi values={tags} onChangeMulti={setTags} />\n *\n * // Searchable\n * <Select label=\"Country\" options={countries} searchable />\n *\n * // Grouped\n * <Select label=\"Location\" optionGroups={groups} />\n */\nexport const Select = forwardRef<HTMLDivElement, SelectProps>(\n (\n {\n label,\n placeholder = 'Select...',\n helperText,\n required,\n error = false,\n errorText,\n options = [],\n optionGroups,\n value,\n values = [],\n onChange,\n onChangeMulti,\n multi = false,\n searchable = false,\n searchPlaceholder = 'Search...',\n clearable = false,\n disabled = false,\n size = 'md',\n maxDisplay = 3,\n className,\n id: providedId,\n ...props\n },\n _ref\n ) => {\n const autoId = useId();\n const id = providedId ?? autoId;\n const listboxId = `${id}-listbox`;\n\n const [open, setOpen] = useState(false);\n const [search, setSearch] = useState('');\n const [focusedIndex, setFocusedIndex] = useState(-1);\n\n const triggerRef = useRef<HTMLButtonElement>(null);\n const searchRef = useRef<HTMLInputElement>(null);\n const containerRef = useRef<HTMLDivElement>(null);\n\n // Flatten all options\n const allOptions = optionGroups\n ? optionGroups.flatMap(g => g.options)\n : options;\n\n // Filter by search\n const filteredOptions = search\n ? allOptions.filter(o =>\n o.label.toLowerCase().includes(search.toLowerCase()) ||\n o.description?.toLowerCase().includes(search.toLowerCase())\n )\n : allOptions;\n\n // Filter groups by search\n const filteredGroups = optionGroups\n ? optionGroups\n .map(g => ({\n ...g,\n options: search\n ? g.options.filter(o =>\n o.label.toLowerCase().includes(search.toLowerCase())\n )\n : g.options,\n }))\n .filter(g => g.options.length > 0)\n : null;\n\n // Resolve display label\n const selectedOption = allOptions.find(o => o.value === value);\n const selectedOptions = allOptions.filter(o => values.includes(o.value));\n\n // Close on outside click\n useEffect(() => {\n function handleClickOutside(e: MouseEvent) {\n if (containerRef.current && !containerRef.current.contains(e.target as Node)) {\n setOpen(false);\n setSearch('');\n }\n }\n if (open) document.addEventListener('mousedown', handleClickOutside);\n return () => document.removeEventListener('mousedown', handleClickOutside);\n }, [open]);\n\n // Focus search on open\n useEffect(() => {\n if (open && searchable) {\n setTimeout(() => searchRef.current?.focus(), 50);\n }\n }, [open, searchable]);\n\n function handleToggle() {\n if (disabled) return;\n setOpen(v => !v);\n setFocusedIndex(-1);\n setSearch('');\n }\n\n function handleSelect(option: SelectOption) {\n if (option.disabled) return;\n\n if (multi) {\n const next = values.includes(option.value)\n ? values.filter(v => v !== option.value)\n : [...values, option.value];\n onChangeMulti?.(next);\n } else {\n onChange?.(option.value);\n setOpen(false);\n setSearch('');\n triggerRef.current?.focus();\n }\n }\n\n function handleClear(e: React.MouseEvent) {\n e.stopPropagation();\n if (multi) onChangeMulti?.([]);\n else onChange?.('');\n }\n\n function handleRemoveChip(val: string, e: React.MouseEvent) {\n e.stopPropagation();\n onChangeMulti?.(values.filter(v => v !== val));\n }\n\n const flatFiltered = filteredGroups\n ? filteredGroups.flatMap(g => g.options)\n : filteredOptions;\n\n const handleKeyDown = useCallback((e: KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n switch (e.key) {\n case 'Enter':\n case ' ':\n if (!open) { setOpen(true); break; }\n if (focusedIndex >= 0 && flatFiltered[focusedIndex]) {\n handleSelect(flatFiltered[focusedIndex]!);\n }\n e.preventDefault();\n break;\n case 'Escape':\n setOpen(false);\n setSearch('');\n triggerRef.current?.focus();\n break;\n case 'ArrowDown':\n e.preventDefault();\n if (!open) setOpen(true);\n setFocusedIndex(i => Math.min(i + 1, flatFiltered.length - 1));\n break;\n case 'ArrowUp':\n e.preventDefault();\n setFocusedIndex(i => Math.max(i - 1, 0));\n break;\n case 'Home':\n e.preventDefault();\n setFocusedIndex(0);\n break;\n case 'End':\n e.preventDefault();\n setFocusedIndex(flatFiltered.length - 1);\n break;\n case 'Tab':\n setOpen(false);\n setSearch('');\n break;\n }\n }, [open, focusedIndex, flatFiltered, disabled]);\n\n const hasValue = multi ? values.length > 0 : !!value;\n const triggerState = disabled ? 'disabled' : error ? 'error' : open ? 'open' : 'default';\n\n const iconSize = size === 'sm' ? 'sm' : 'md';\n\n return (\n <div\n ref={containerRef}\n className={cn('relative flex flex-col gap-1.5 w-full', className)}\n onKeyDown={handleKeyDown}\n {...props}\n >\n {/* Label */}\n {label && (\n <label\n htmlFor={id}\n className={cn(\n 'text-label-lg',\n error ? 'text-error' : 'text-text-secondary',\n disabled && 'opacity-50',\n )}\n >\n {label}\n {required && <span className=\"text-error ml-0.5\" aria-hidden>*</span>}\n </label>\n )}\n\n {/* Trigger */}\n <button\n ref={triggerRef}\n id={id}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n aria-controls={listboxId}\n aria-required={required}\n aria-invalid={error || undefined}\n aria-disabled={disabled}\n disabled={disabled}\n onClick={handleToggle}\n className={cn(selectTriggerVariants({ size, state: triggerState }))}\n >\n {/* Multi chips */}\n {multi && values.length > 0 ? (\n <div className=\"flex flex-wrap gap-1 flex-1 py-1\">\n {selectedOptions.slice(0, maxDisplay).map(opt => (\n <span\n key={opt.value}\n className=\"inline-flex items-center gap-1 h-6 px-2 rounded-full bg-secondary-container text-on-secondary-container text-label-sm\"\n >\n {opt.label}\n <span\n role=\"button\"\n aria-label={`Remove ${opt.label}`}\n onClick={(e) => handleRemoveChip(opt.value, e)}\n className=\"hover:opacity-70 cursor-pointer\"\n >\n <Icon name=\"close\" size=\"sm\" aria-hidden />\n </span>\n </span>\n ))}\n {values.length > maxDisplay && (\n <span className=\"inline-flex items-center h-6 px-2 rounded-full bg-surface-container text-text-secondary text-label-sm\">\n +{values.length - maxDisplay} more\n </span>\n )}\n </div>\n ) : (\n /* Single value or placeholder */\n <span className={cn('flex-1 text-left truncate', !hasValue && 'text-text-disabled')}>\n {hasValue\n ? selectedOption?.label ?? placeholder\n : placeholder}\n </span>\n )}\n\n {/* Clear button */}\n {clearable && hasValue && !disabled && (\n <span\n role=\"button\"\n aria-label=\"Clear selection\"\n onClick={handleClear}\n className=\"text-text-secondary hover:text-text-primary transition-colors flex-shrink-0\"\n >\n <Icon name=\"close\" size={iconSize} aria-hidden />\n </span>\n )}\n\n {/* Chevron */}\n <Icon\n name=\"chevron-down\"\n size={iconSize}\n aria-hidden\n className={cn(\n 'flex-shrink-0 text-text-secondary transition-transform duration-short',\n open && 'rotate-180',\n )}\n />\n </button>\n\n {/* Dropdown */}\n {open && (\n <div\n id={listboxId}\n role=\"listbox\"\n aria-multiselectable={multi}\n aria-label={label ?? placeholder}\n className={cn(\n 'absolute top-full left-0 right-0 z-50 mt-1',\n 'bg-background border-[1.5px] border-outline rounded-md',\n 'shadow-lg overflow-hidden',\n )}\n >\n {/* Search */}\n {searchable && (\n <div className=\"flex items-center gap-2 px-3 py-2 border-b border-outline-variant\">\n <Icon name=\"search\" size=\"sm\" className=\"text-text-secondary flex-shrink-0\" aria-hidden />\n <input\n ref={searchRef}\n type=\"text\"\n value={search}\n onChange={e => { setSearch(e.target.value); setFocusedIndex(-1); }}\n placeholder={searchPlaceholder}\n className=\"flex-1 bg-transparent border-none outline-none text-body-md text-text-primary placeholder:text-text-disabled\"\n aria-label=\"Search options\"\n />\n {search && (\n <button\n type=\"button\"\n onClick={() => setSearch('')}\n className=\"text-text-secondary hover:text-text-primary\"\n aria-label=\"Clear search\"\n >\n <Icon name=\"close\" size=\"sm\" aria-hidden />\n </button>\n )}\n </div>\n )}\n\n {/* Options */}\n <div className=\"max-h-56 overflow-y-auto p-1\">\n {filteredGroups ? (\n filteredGroups.map((group, gi) => (\n <div key={group.label}>\n {gi > 0 && <div className=\"h-px bg-outline-variant my-1\" />}\n <p className=\"px-2.5 py-1 text-label-sm text-text-disabled uppercase tracking-wider\">\n {group.label}\n </p>\n {group.options.map(option => (\n <OptionItem\n key={option.value}\n option={option}\n isSelected={multi ? values.includes(option.value) : value === option.value}\n isFocused={flatFiltered.indexOf(option) === focusedIndex}\n multi={multi}\n onSelect={handleSelect}\n />\n ))}\n </div>\n ))\n ) : filteredOptions.length > 0 ? (\n filteredOptions.map((option, i) => (\n <OptionItem\n key={option.value}\n option={option}\n isSelected={multi ? values.includes(option.value) : value === option.value}\n isFocused={i === focusedIndex}\n multi={multi}\n onSelect={handleSelect}\n />\n ))\n ) : (\n <p className=\"px-3 py-6 text-center text-body-sm text-text-disabled\">\n No options found\n </p>\n )}\n </div>\n </div>\n )}\n\n {/* Helper / error */}\n {(helperText || (error && errorText)) && (\n <p className={cn(\n 'text-body-sm flex items-center gap-1',\n error ? 'text-error' : 'text-text-secondary',\n )}>\n {error && <Icon name=\"alert-circle\" size=\"sm\" aria-hidden />}\n {error ? errorText : helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nSelect.displayName = 'Select';\n\n// ─── OptionItem ───────────────────────────────────────────────────────────────\n\ninterface OptionItemProps {\n option: SelectOption;\n isSelected: boolean;\n isFocused: boolean;\n multi: boolean;\n onSelect: (option: SelectOption) => void;\n}\n\nfunction OptionItem({ option, isSelected, isFocused, multi, onSelect }: OptionItemProps) {\n const state = option.disabled ? 'disabled' : isSelected ? 'selected' : isFocused ? 'focused' : 'default';\n\n return (\n <div\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n onClick={() => onSelect(option)}\n className={cn(selectOptionVariants({ state }))}\n >\n {/* Avatar */}\n {option.avatarSrc && (\n <span className=\"size-6 rounded-full overflow-hidden flex-shrink-0\">\n <img src={option.avatarSrc} alt={option.avatarAlt ?? option.label} className=\"size-full object-cover\" />\n </span>\n )}\n\n {/* Content */}\n <span className=\"flex flex-col flex-1 min-w-0\">\n <span className=\"truncate\">{option.label}</span>\n {option.description && (\n <span className=\"text-body-sm text-text-secondary truncate\">{option.description}</span>\n )}\n </span>\n\n {/* Check */}\n {isSelected && (\n <Icon name=\"check\" size=\"sm\" className=\"flex-shrink-0 text-primary\" aria-hidden />\n )}\n\n {/* Multi checkbox indicator */}\n {multi && !isSelected && (\n <span className=\"size-4 rounded flex-shrink-0 border-[1.5px] border-outline\" aria-hidden />\n )}\n </div>\n );\n}","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Tooltip variants — CVA configuration.\n *\n * Design intent:\n * - dark → default, high contrast, works on any background\n * - light → for dark backgrounds\n * - primary → brand colored, for promotional hints\n */\nexport const tooltipVariants = cva(\n [\n 'absolute z-50 pointer-events-none',\n 'px-2.5 py-1.5 rounded-lg',\n 'text-label-sm whitespace-nowrap',\n 'shadow-md',\n 'animate-in fade-in-0 zoom-in-95',\n ],\n {\n variants: {\n variant: {\n dark: 'bg-on-surface text-surface',\n light: 'bg-background text-text-primary border border-outline shadow-lg',\n primary: 'bg-primary text-on-primary',\n },\n position: {\n top: 'bottom-[calc(100%+8px)] left-1/2 -translate-x-1/2',\n bottom: 'top-[calc(100%+8px)] left-1/2 -translate-x-1/2',\n left: 'right-[calc(100%+8px)] top-1/2 -translate-y-1/2',\n right: 'left-[calc(100%+8px)] top-1/2 -translate-y-1/2',\n },\n },\n defaultVariants: {\n variant: 'dark',\n position: 'top',\n },\n }\n);\n\nexport const tooltipArrowVariants = cva(\n ['absolute border-[5px] border-transparent pointer-events-none'],\n {\n variants: {\n variant: {\n dark: '',\n light: '',\n primary: '',\n },\n position: {\n top: 'top-full left-1/2 -translate-x-1/2',\n bottom: 'bottom-full left-1/2 -translate-x-1/2',\n left: 'left-full top-1/2 -translate-y-1/2',\n right: 'right-full top-1/2 -translate-y-1/2',\n },\n },\n compoundVariants: [\n // Dark arrows\n { variant: 'dark', position: 'top', class: 'border-t-on-surface' },\n { variant: 'dark', position: 'bottom', class: 'border-b-on-surface' },\n { variant: 'dark', position: 'left', class: 'border-l-on-surface' },\n { variant: 'dark', position: 'right', class: 'border-r-on-surface' },\n // Light arrows\n { variant: 'light', position: 'top', class: 'border-t-outline' },\n { variant: 'light', position: 'bottom', class: 'border-b-outline' },\n { variant: 'light', position: 'left', class: 'border-l-outline' },\n { variant: 'light', position: 'right', class: 'border-r-outline' },\n // Primary arrows\n { variant: 'primary', position: 'top', class: 'border-t-primary' },\n { variant: 'primary', position: 'bottom', class: 'border-b-primary' },\n { variant: 'primary', position: 'left', class: 'border-l-primary' },\n { variant: 'primary', position: 'right', class: 'border-r-primary' },\n ],\n defaultVariants: {\n variant: 'dark',\n position: 'top',\n },\n }\n);\n\nexport type TooltipVariantProps = VariantProps<typeof tooltipVariants>;","import {\n forwardRef,\n useState,\n useRef,\n useId,\n useCallback,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n tooltipVariants,\n tooltipArrowVariants,\n type TooltipVariantProps,\n} from './Tooltip.variants';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface TooltipProps\n extends Omit<ComponentPropsWithoutRef<'div'>, 'content'>,\n TooltipVariantProps {\n /**\n * The element that triggers the tooltip.\n * Wrap any element — button, icon, disabled button, etc.\n */\n children: ReactNode;\n\n /**\n * Tooltip content — string for simple text, ReactNode for rich tooltips.\n */\n content: ReactNode;\n\n /**\n * Position of the tooltip relative to the trigger.\n * @default 'top'\n */\n position?: 'top' | 'bottom' | 'left' | 'right';\n\n /**\n * Visual variant.\n * - `dark` → dark background, light text (default)\n * - `light` → white background, dark text, border\n * - `primary` → brand color background\n */\n variant?: 'dark' | 'light' | 'primary';\n\n /**\n * Keyboard shortcut shown inside the tooltip.\n * Renders in a monospace badge.\n *\n * @example\n * <Tooltip content=\"Save\" shortcut=\"⌘S\">...</Tooltip>\n */\n shortcut?: string;\n\n /**\n * Delay in ms before the tooltip appears.\n * @default 0\n */\n delay?: number;\n\n /**\n * Whether the tooltip is disabled (never shows).\n */\n disabled?: boolean;\n\n /**\n * Max width for rich tooltips with long content.\n * @default 'none' (whitespace-nowrap)\n */\n maxWidth?: number;\n\n /**\n * Title for rich tooltips — shown in bold above content.\n */\n title?: string;\n\n /**\n * Action link text for rich tooltips.\n */\n actionLabel?: string;\n\n /**\n * Callback when the action link is clicked.\n */\n onAction?: () => void;\n}\n\n// ─── Tooltip ──────────────────────────────────────────────────────────────────\n\n/**\n * Tooltip — contextual information shown on hover and focus.\n *\n * Features beyond M3:\n * - 3 variants: dark, light, primary\n * - 4 positions: top, bottom, left, right\n * - keyboard shortcut display\n * - rich tooltip with title + description + action\n * - configurable show delay\n * - works on disabled elements (wraps in span)\n * - shows on hover AND focus (keyboard accessible)\n *\n * @example\n * // Simple\n * <Tooltip content=\"Delete item\">\n * <IconButton icon=\"trash\" aria-label=\"Delete\" />\n * </Tooltip>\n *\n * // With shortcut\n * <Tooltip content=\"Save document\" shortcut=\"⌘S\">\n * <Button>Save</Button>\n * </Tooltip>\n *\n * // Rich\n * <Tooltip\n * title=\"Design tokens\"\n * content=\"Tokens are the atomic values that define your system.\"\n * actionLabel=\"Learn more\"\n * onAction={() => navigate('/docs')}\n * maxWidth={200}\n * >\n * <Icon name=\"info\" />\n * </Tooltip>\n *\n * // On disabled element\n * <Tooltip content=\"You need permission to do this\">\n * <Button disabled>Delete</Button>\n * </Tooltip>\n */\nexport const Tooltip = forwardRef<HTMLDivElement, TooltipProps>(\n (\n {\n children,\n content,\n position = 'top',\n variant = 'dark',\n shortcut,\n delay = 0,\n disabled = false,\n maxWidth,\n title,\n actionLabel,\n onAction,\n className,\n ...props\n },\n ref\n ) => {\n const [visible, setVisible] = useState(false);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const tooltipId = useId();\n\n const show = useCallback(() => {\n if (disabled) return;\n if (delay > 0) {\n timerRef.current = setTimeout(() => setVisible(true), delay);\n } else {\n setVisible(true);\n }\n }, [disabled, delay]);\n\n const hide = useCallback(() => {\n if (timerRef.current) clearTimeout(timerRef.current);\n setVisible(false);\n }, []);\n\n const isRich = !!(title || actionLabel || maxWidth);\n\n return (\n <div\n ref={ref}\n className={cn('relative inline-flex', className)}\n onMouseEnter={show}\n onMouseLeave={hide}\n onFocusCapture={show}\n onBlurCapture={hide}\n {...props}\n >\n {/* Trigger */}\n <span\n aria-describedby={visible ? tooltipId : undefined}\n className=\"inline-flex\"\n >\n {children}\n </span>\n\n {/* Tooltip bubble */}\n {visible && (\n <div\n id={tooltipId}\n role=\"tooltip\"\n className={cn(\n tooltipVariants({ variant, position }),\n isRich && 'whitespace-normal',\n )}\n style={maxWidth ? { width: maxWidth, minWidth: 'unset' } : undefined}\n >\n {/* Rich tooltip layout */}\n {title && (\n <p className=\"font-semibold text-label-md mb-1\">{title}</p>\n )}\n\n {/* Content */}\n <span className={cn(\n 'inline-flex items-center gap-1.5',\n title && 'text-body-sm opacity-80 font-normal',\n )}>\n {content}\n {shortcut && !isRich && (\n <kbd className={cn(\n 'inline-flex items-center justify-center',\n 'h-[18px] px-1.5 rounded',\n 'font-mono text-[10px]',\n 'bg-white/15 border border-white/20',\n )}>\n {shortcut}\n </kbd>\n )}\n </span>\n\n {/* Action */}\n {actionLabel && (\n <button\n type=\"button\"\n onClick={onAction}\n className=\"mt-2 text-label-sm text-primary-container hover:underline block pointer-events-auto\"\n >\n {actionLabel} →\n </button>\n )}\n\n {/* Arrow */}\n <span\n aria-hidden=\"true\"\n className={cn(tooltipArrowVariants({ variant, position }))}\n />\n </div>\n )}\n </div>\n );\n }\n);\n\nTooltip.displayName = 'Tooltip';","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Spinner variants — CVA configuration.\n *\n * 9 variants:\n * circular, ring, dots, bars, dual, pulse, ripple, gradient, skeleton\n *\n * 6 sizes: xs, sm, md, lg, xl, 2xl\n * 6 colors: default, secondary, success, warning, error, white\n */\nexport const spinnerVariants = cva(\n ['flex-shrink-0'],\n {\n variants: {\n variant: {\n circular: 'rounded-full border-solid animate-spin',\n ring: 'rounded-full border-solid animate-spin',\n dots: 'flex items-center gap-1.5',\n bars: 'flex items-end gap-[3px]',\n dual: 'relative rounded-full',\n pulse: 'rounded-full animate-pulse',\n ripple: 'relative',\n gradient: 'relative rounded-full',\n skeleton: 'rounded-md',\n },\n size: {\n xs: '',\n sm: '',\n md: '',\n lg: '',\n xl: '',\n '2xl': '',\n },\n color: {\n default: 'text-primary',\n secondary: 'text-secondary',\n success: 'text-success',\n warning: 'text-warning',\n error: 'text-error',\n white: 'text-white',\n },\n },\n\n compoundVariants: [\n // Circular — single border spinner\n { variant: 'circular', size: 'xs', class: 'size-3.5 border-[2px] border-current border-r-transparent' },\n { variant: 'circular', size: 'sm', class: 'size-[18px] border-[2px] border-current border-r-transparent' },\n { variant: 'circular', size: 'md', class: 'size-6 border-[3px] border-current border-r-transparent' },\n { variant: 'circular', size: 'lg', class: 'size-8 border-[3px] border-current border-r-transparent' },\n { variant: 'circular', size: 'xl', class: 'size-11 border-[4px] border-current border-r-transparent' },\n { variant: 'circular', size: '2xl', class: 'size-14 border-[4px] border-current border-r-transparent' },\n\n // Ring — track + colored top\n { variant: 'ring', size: 'xs', class: 'size-3.5 border-[2px] border-outline border-t-current' },\n { variant: 'ring', size: 'sm', class: 'size-[18px] border-[2px] border-outline border-t-current' },\n { variant: 'ring', size: 'md', class: 'size-6 border-[3px] border-outline border-t-current' },\n { variant: 'ring', size: 'lg', class: 'size-8 border-[3px] border-outline border-t-current' },\n { variant: 'ring', size: 'xl', class: 'size-11 border-[4px] border-outline border-t-current' },\n { variant: 'ring', size: '2xl', class: 'size-14 border-[4px] border-outline border-t-current' },\n\n // Pulse dot\n { variant: 'pulse', size: 'xs', class: 'size-3.5 bg-current' },\n { variant: 'pulse', size: 'sm', class: 'size-[18px] bg-current' },\n { variant: 'pulse', size: 'md', class: 'size-6 bg-current' },\n { variant: 'pulse', size: 'lg', class: 'size-8 bg-current' },\n { variant: 'pulse', size: 'xl', class: 'size-11 bg-current' },\n { variant: 'pulse', size: '2xl', class: 'size-14 bg-current' },\n\n // Dual, ripple, gradient — size via inline style in component\n { variant: 'dual', size: 'xs', class: 'size-3.5' },\n { variant: 'dual', size: 'sm', class: 'size-[18px]' },\n { variant: 'dual', size: 'md', class: 'size-6' },\n { variant: 'dual', size: 'lg', class: 'size-8' },\n { variant: 'dual', size: 'xl', class: 'size-11' },\n { variant: 'dual', size: '2xl', class: 'size-14' },\n\n { variant: 'ripple', size: 'xs', class: 'size-3.5' },\n { variant: 'ripple', size: 'sm', class: 'size-[18px]' },\n { variant: 'ripple', size: 'md', class: 'size-6' },\n { variant: 'ripple', size: 'lg', class: 'size-8' },\n { variant: 'ripple', size: 'xl', class: 'size-11' },\n { variant: 'ripple', size: '2xl', class: 'size-14' },\n\n { variant: 'gradient', size: 'xs', class: 'size-3.5' },\n { variant: 'gradient', size: 'sm', class: 'size-[18px]' },\n { variant: 'gradient', size: 'md', class: 'size-6' },\n { variant: 'gradient', size: 'lg', class: 'size-8' },\n { variant: 'gradient', size: 'xl', class: 'size-11' },\n { variant: 'gradient', size: '2xl', class: 'size-14' },\n ],\n\n defaultVariants: {\n variant: 'circular',\n size: 'md',\n color: 'default',\n },\n }\n);\n\nexport type SpinnerVariantProps = VariantProps<typeof spinnerVariants>;","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport { spinnerVariants, type SpinnerVariantProps } from './Spinner.variants';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface SpinnerProps\n extends ComponentPropsWithoutRef<'div'>,\n SpinnerVariantProps {\n /**\n * Visual style of the spinner.\n * - `circular` → single border spin (default)\n * - `ring` → track + colored top border\n * - `dots` → three pulsing dots\n * - `bars` → four bouncing bars\n * - `dual` → two rings spinning opposite directions\n * - `pulse` → breathing dot\n * - `ripple` → expanding rings (radar effect)\n * - `gradient` → conic gradient spin\n * - `skeleton` → shimmer placeholder (pass width/height via className)\n */\n variant?: 'circular' | 'ring' | 'dots' | 'bars' | 'dual' | 'pulse' | 'ripple' | 'gradient' | 'skeleton';\n\n /**\n * Size of the spinner.\n */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl' | '2xl';\n\n /**\n * Color of the spinner.\n */\n color?: 'default' | 'secondary' | 'success' | 'warning' | 'error' | 'white';\n\n /**\n * Label shown next to or below the spinner.\n */\n label?: string;\n\n /**\n * Position of the label relative to the spinner.\n * @default 'bottom'\n */\n labelPosition?: 'top' | 'bottom' | 'left' | 'right';\n\n /**\n * Covers a parent element with a semi-transparent overlay.\n * Parent must have position: relative.\n */\n overlay?: boolean;\n}\n\n// ─── Spinner ──────────────────────────────────────────────────────────────────\n\n/**\n * Spinner — loading indicator with 9 variants.\n *\n * Features beyond M3:\n * - 9 variants: circular, ring, dots, bars, dual, pulse, ripple, gradient, skeleton\n * - 6 sizes: xs to 2xl\n * - 6 colors\n * - label with position control\n * - overlay mode for covering content\n * - skeleton variant for content placeholders\n * - respects prefers-reduced-motion\n *\n * @example\n * // Basic\n * <Spinner />\n * <Spinner variant=\"dots\" color=\"secondary\" />\n *\n * // With label\n * <Spinner label=\"Loading...\" labelPosition=\"right\" />\n *\n * // Overlay\n * <div style={{ position: 'relative' }}>\n * <YourContent />\n * <Spinner overlay label=\"Please wait...\" />\n * </div>\n *\n * // Skeleton\n * <Spinner variant=\"skeleton\" className=\"h-4 w-32\" />\n */\nexport const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(\n (\n {\n variant = 'circular',\n size = 'md',\n color = 'default',\n label,\n labelPosition = 'bottom',\n overlay = false,\n className,\n ...props\n },\n ref\n ) => {\n const spinnerEl = renderSpinner(variant, size, color, className);\n\n const labelEl = label && (\n <span className={cn(\n 'text-label-md text-text-secondary',\n size === 'xs' || size === 'sm' ? 'text-label-sm' : '',\n )}>\n {label}\n </span>\n );\n\n const isRow = labelPosition === 'left' || labelPosition === 'right';\n\n const content = (\n <div\n className={cn(\n 'inline-flex items-center',\n isRow ? 'flex-row gap-2.5' : 'flex-col gap-2',\n labelPosition === 'left' && 'flex-row-reverse',\n labelPosition === 'top' && 'flex-col-reverse',\n !label && 'inline-flex',\n )}\n >\n {spinnerEl}\n {labelEl}\n </div>\n );\n\n if (overlay) {\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label ?? 'Loading'}\n aria-live=\"polite\"\n className=\"absolute inset-0 z-50 flex items-center justify-center bg-background/70 backdrop-blur-[2px] rounded-[inherit]\"\n {...props}\n >\n {content}\n </div>\n );\n }\n\n return (\n <div\n ref={ref}\n role=\"status\"\n aria-label={label ?? 'Loading'}\n aria-live=\"polite\"\n className=\"inline-flex\"\n {...props}\n >\n {content}\n <span className=\"sr-only\">{label ?? 'Loading'}</span>\n </div>\n );\n }\n);\n\nSpinner.displayName = 'Spinner';\n\n// ─── Skeleton ─────────────────────────────────────────────────────────────────\n\nexport interface SkeletonProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Shape of the skeleton.\n * - `text` → rounded rectangle (default)\n * - `circle` → circle shape\n * - `card` → taller rectangle for cards\n */\n shape?: 'text' | 'circle' | 'card';\n}\n\n/**\n * Skeleton — shimmer placeholder shown while content loads.\n *\n * @example\n * // Text line\n * <Skeleton className=\"h-4 w-48\" />\n *\n * // Avatar\n * <Skeleton shape=\"circle\" className=\"size-10\" />\n *\n * // Card\n * <Skeleton shape=\"card\" className=\"h-32 w-full\" />\n */\nexport const Skeleton = forwardRef<HTMLDivElement, SkeletonProps>(\n ({ shape = 'text', className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n aria-hidden=\"true\"\n className={cn(\n 'animate-pulse bg-surface-container',\n shape === 'circle' ? 'rounded-full' : shape === 'card' ? 'rounded-xl' : 'rounded-md',\n className,\n )}\n {...props}\n />\n );\n }\n);\n\nSkeleton.displayName = 'Skeleton';\n\n// ─── Internal render helpers ──────────────────────────────────────────────────\n\nfunction renderSpinner(\n variant: SpinnerProps['variant'],\n size: SpinnerProps['size'],\n color: SpinnerProps['color'],\n className?: string,\n) {\n const base = spinnerVariants({ variant, size, color });\n\n switch (variant) {\n case 'dots':\n return (\n <div className={cn(base, className)} aria-hidden>\n {[0, 1, 2].map(i => (\n <span\n key={i}\n className={cn(\n 'rounded-full bg-current',\n size === 'xs' || size === 'sm' ? 'size-1' : size === 'lg' || size === 'xl' || size === '2xl' ? 'size-2.5' : 'size-2',\n 'animate-pulse',\n )}\n style={{ animationDelay: `${i * 0.2}s` }}\n />\n ))}\n </div>\n );\n\n case 'bars':\n return (\n <div className={cn(base, className)} aria-hidden style={{ height: size === 'xs' ? 14 : size === 'sm' ? 18 : size === 'md' ? 24 : size === 'lg' ? 32 : size === 'xl' ? 44 : 56 }}>\n {[0, 1, 2, 3].map((i) => (\n <span\n key={i}\n className={cn(\n 'bg-current rounded-sm',\n size === 'xs' || size === 'sm' ? 'w-[3px]' : 'w-1',\n )}\n style={{\n height: '100%',\n animation: 'spinnerBars 1s ease-in-out infinite',\n animationDelay: `${i * 0.15}s`,\n transform: 'scaleY(0.4)',\n transformOrigin: 'bottom',\n }}\n />\n ))}\n <style>{`\n @keyframes spinnerBars {\n 0%, 100% { transform: scaleY(0.4); }\n 50% { transform: scaleY(1); }\n }\n `}</style>\n </div>\n );\n\n case 'dual':\n return (\n <div className={cn(base, className)} aria-hidden>\n <span\n className=\"absolute inset-0 rounded-full border-[3px] border-transparent border-t-current animate-spin\"\n style={{ animationDuration: '0.8s' }}\n />\n <span\n className=\"absolute rounded-full border-[3px] border-transparent border-b-secondary animate-spin\"\n style={{\n inset: '3px',\n animationDuration: '0.6s',\n animationDirection: 'reverse',\n }}\n />\n </div>\n );\n\n case 'ripple':\n return (\n <div className={cn(base, className)} aria-hidden>\n {[0, 1].map(i => (\n <span\n key={i}\n className=\"absolute inset-0 rounded-full border-2 border-current\"\n style={{\n animation: 'spinnerRipple 1.5s ease-out infinite',\n animationDelay: `${i * 0.6}s`,\n }}\n />\n ))}\n <style>{`\n @keyframes spinnerRipple {\n 0% { transform: scale(0.5); opacity: 1; }\n 100% { transform: scale(2); opacity: 0; }\n }\n `}</style>\n </div>\n );\n\n case 'gradient':\n return (\n <div className={cn(base, className)} aria-hidden style={{ position: 'relative' }}>\n <span\n className=\"absolute inset-0 rounded-full animate-spin\"\n style={{\n background: 'conic-gradient(from 0deg, #2563EB, #7C3AED, transparent)',\n animationDuration: '0.8s',\n }}\n />\n <span\n className=\"absolute bg-background rounded-full\"\n style={{ inset: '3px' }}\n />\n </div>\n );\n\n case 'skeleton':\n return (\n <div\n className={cn(\n 'animate-pulse bg-surface-container rounded-md',\n className,\n )}\n aria-hidden\n />\n );\n\n default:\n return <div className={cn(base, className)} aria-hidden />;\n }\n}","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Card variants — CVA configuration.\n *\n * Base variants: elevated, filled, outlined, ghost, gradient, glass\n * All interactive states handled via compound variants.\n */\nexport const cardVariants = cva(\n [\n 'relative overflow-hidden',\n 'transition-all duration-medium ease-standard',\n ],\n {\n variants: {\n variant: {\n elevated: [\n 'bg-surface-container-low',\n 'shadow-elevation-1',\n ],\n filled: [\n 'bg-surface-container',\n ],\n outlined: [\n 'bg-background',\n 'border-[1.5px] border-outline',\n ],\n ghost: [\n 'bg-transparent',\n 'border-[1.5px] border-dashed border-outline',\n ],\n gradient: [\n 'bg-gradient-to-br from-primary to-secondary',\n 'text-on-primary',\n ],\n glass: [\n 'bg-white/10 backdrop-blur-md',\n 'border border-white/20',\n 'text-white',\n ],\n },\n radius: {\n none: 'rounded-none',\n sm: 'rounded-lg',\n md: 'rounded-xl',\n lg: 'rounded-2xl',\n full: 'rounded-3xl',\n },\n interactive: {\n true: 'cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n false: '',\n },\n selected: {\n true: '',\n false: '',\n },\n },\n\n compoundVariants: [\n // Elevated interactive\n { variant: 'elevated', interactive: true, class: 'hover:-translate-y-0.5 hover:shadow-elevation-2 active:translate-y-0 active:shadow-elevation-1' },\n // Outlined interactive\n { variant: 'outlined', interactive: true, class: 'hover:border-primary hover:bg-primary-container/10 active:bg-primary-container/20' },\n // Ghost interactive\n { variant: 'ghost', interactive: true, class: 'hover:border-primary hover:bg-primary-container/10' },\n // Filled interactive\n { variant: 'filled', interactive: true, class: 'hover:bg-surface-container-high active:bg-surface-container-high' },\n // Gradient interactive\n { variant: 'gradient', interactive: true, class: 'hover:shadow-lg hover:shadow-primary/25 hover:-translate-y-0.5' },\n // Glass interactive\n { variant: 'glass', interactive: true, class: 'hover:bg-white/20 active:bg-white/15' },\n\n // Selected states\n { variant: 'outlined', selected: true, class: 'border-primary bg-primary-container/10' },\n { variant: 'elevated', selected: true, class: 'ring-2 ring-primary ring-offset-2 ring-offset-background' },\n { variant: 'filled', selected: true, class: 'ring-2 ring-primary ring-offset-2 ring-offset-background' },\n { variant: 'ghost', selected: true, class: 'border-primary border-solid bg-primary-container/10' },\n ],\n\n defaultVariants: {\n variant: 'elevated',\n radius: 'md',\n interactive: false,\n selected: false,\n },\n }\n);\n\nexport type CardVariantProps = VariantProps<typeof cardVariants>;","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { cardVariants, type CardVariantProps } from './Card.variants';\n\n// ─── Card (base) ─────────────────────────────────────────────────────────────\n\nexport interface CardProps\n extends ComponentPropsWithoutRef<'div'>,\n CardVariantProps {\n /**\n * Visual style of the card.\n * - `elevated` → shadow, lifts on hover (default)\n * - `filled` → tonal surface background\n * - `outlined` → border, highlights on hover\n * - `ghost` → dashed border, minimal\n * - `gradient` → brand gradient background\n * - `glass` → frosted glass, use on colored backgrounds\n */\n variant?: 'elevated' | 'filled' | 'outlined' | 'ghost' | 'gradient' | 'glass';\n\n /** Border radius of the card. */\n radius?: 'none' | 'sm' | 'md' | 'lg' | 'full';\n\n /** Adds hover/focus/active interactive states. */\n interactive?: boolean;\n\n /** Shows a selected ring or border. */\n selected?: boolean;\n\n /**\n * Renders the card as a button element for better semantics\n * when the entire card is clickable.\n */\n asButton?: boolean;\n}\n\n/**\n * Card — a surface container for grouping related content.\n *\n * Features beyond M3:\n * - 6 variants: elevated, filled, outlined, ghost, gradient, glass\n * - interactive mode with hover/focus/active states\n * - selected state\n * - asButton for fully clickable cards\n * - radius control\n * - composable with CardHeader, CardBody, CardFooter, CardMedia\n *\n * @example\n * // Basic\n * <Card>\n * <CardBody>\n * <p>Content here</p>\n * </CardBody>\n * </Card>\n *\n * // Interactive outlined\n * <Card variant=\"outlined\" interactive onClick={handleClick}>\n * <CardBody>Click me</CardBody>\n * </Card>\n *\n * // Gradient\n * <Card variant=\"gradient\">\n * <CardBody>\n * <h3>Featured</h3>\n * </CardBody>\n * </Card>\n *\n * // Glass (use on colored background)\n * <div className=\"bg-gradient-to-br from-primary to-secondary p-8\">\n * <Card variant=\"glass\">\n * <CardBody>Glass card</CardBody>\n * </Card>\n * </div>\n */\nexport const Card = forwardRef<HTMLDivElement, CardProps>(\n (\n {\n variant,\n radius,\n interactive,\n selected,\n asButton = false,\n className,\n children,\n onClick,\n ...props\n },\n ref\n ) => {\n if (asButton) {\n return (\n <button\n type=\"button\"\n className={cn(\n cardVariants({ variant, radius, interactive: true, selected }),\n 'w-full text-left',\n className,\n )}\n onClick={(e) => onClick?.(e as unknown as React.MouseEvent<HTMLDivElement>)}\n {...(props as React.ComponentPropsWithoutRef<'button'>)}\n >\n {children}\n </button>\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n cardVariants({ variant, radius, interactive: interactive ?? !!onClick, selected }),\n className,\n )}\n onClick={onClick}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCard.displayName = 'Card';\n\n// ─── CardMedia ────────────────────────────────────────────────────────────────\n\nexport interface CardMediaProps extends ComponentPropsWithoutRef<'div'> {\n /** Image source URL. */\n src?: string;\n /** Image alt text. */\n alt?: string;\n /** Height of the media area. Default: 160px */\n height?: number;\n /** Gradient overlay on the image. */\n overlay?: boolean;\n /** Content shown over the overlay. */\n overlayContent?: ReactNode;\n}\n\n/**\n * CardMedia — image area at the top of a card.\n * Shows an image or a placeholder if no src provided.\n */\nexport const CardMedia = forwardRef<HTMLDivElement, CardMediaProps>(\n ({ src, alt, height, overlay, overlayContent, className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('relative w-full overflow-hidden bg-surface-container flex-shrink-0', className)}\n style={height ? { height } : { height: '100%' }}\n {...props}\n >\n {src ? (\n <img src={src} alt={alt ?? ''} className=\"w-full h-full object-cover\" />\n ) : (\n <div className=\"w-full h-full bg-gradient-to-br from-primary-container to-secondary-container flex items-center justify-center\">\n {children}\n </div>\n )}\n {overlay && (\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/70 via-black/20 to-transparent\" />\n )}\n {overlayContent && (\n <div className=\"absolute inset-0 flex flex-col justify-end p-4 text-white\">\n {overlayContent}\n </div>\n )}\n </div>\n );\n }\n);\n\nCardMedia.displayName = 'CardMedia';\n\n// ─── CardHeader ───────────────────────────────────────────────────────────────\n\nexport interface CardHeaderProps extends Omit<ComponentPropsWithoutRef<'div'>, 'title'> {\n /** Main title. */\n title?: ReactNode;\n /** Subtitle shown below title. */\n subtitle?: ReactNode;\n /** Element shown on the right side (badge, menu, icon). */\n action?: ReactNode;\n /** Avatar or icon shown on the left. */\n avatar?: ReactNode;\n}\n\n/**\n * CardHeader — title area with optional subtitle, action, and avatar.\n */\nexport const CardHeader = forwardRef<HTMLDivElement, CardHeaderProps>(\n ({ title, subtitle, action, avatar, className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn('flex items-start gap-3 px-4 pt-4', className)}\n {...props}\n >\n {avatar && <div className=\"flex-shrink-0\">{avatar}</div>}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <p className=\"text-title-md text-text-primary font-semibold truncate\">{title}</p>\n )}\n {subtitle && (\n <p className=\"text-body-sm text-text-secondary mt-0.5 truncate\">{subtitle}</p>\n )}\n {children}\n </div>\n {action && <div className=\"flex-shrink-0 ml-auto\">{action}</div>}\n </div>\n );\n }\n);\n\nCardHeader.displayName = 'CardHeader';\n\n// ─── CardBody ─────────────────────────────────────────────────────────────────\n\nexport interface CardBodyProps extends ComponentPropsWithoutRef<'div'> {\n /** Remove default padding. */\n noPadding?: boolean;\n}\n\n/**\n * CardBody — main content area of the card.\n */\nexport const CardBody = forwardRef<HTMLDivElement, CardBodyProps>(\n ({ noPadding, className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(!noPadding && 'px-4 py-3', className)}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardBody.displayName = 'CardBody';\n\n// ─── CardFooter ───────────────────────────────────────────────────────────────\n\nexport interface CardFooterProps extends ComponentPropsWithoutRef<'div'> {\n /** Adds a top border separator. */\n divider?: boolean;\n}\n\n/**\n * CardFooter — bottom area for actions and metadata.\n */\nexport const CardFooter = forwardRef<HTMLDivElement, CardFooterProps>(\n ({ divider, className, children, ...props }, ref) => {\n return (\n <div\n ref={ref}\n className={cn(\n 'flex items-center gap-2 px-4 py-3',\n divider && 'border-t border-outline-variant',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nCardFooter.displayName = 'CardFooter';\n\n// ─── CardFlip ─────────────────────────────────────────────────────────────────\n\nexport interface CardFlipProps extends ComponentPropsWithoutRef<'div'> {\n /** Content shown on the front of the card. */\n front: ReactNode;\n /** Content shown on the back of the card. */\n back: ReactNode;\n /** Height of the flip card. */\n height?: number;\n /** Flip direction. */\n direction?: 'horizontal' | 'vertical';\n}\n\n/**\n * CardFlip — 3D flip card that reveals back content on hover.\n */\nexport const CardFlip = forwardRef<HTMLDivElement, CardFlipProps>(\n ({ front, back, height = 160, direction = 'horizontal', className, ...props }, ref) => {\n const rotateBack = direction === 'horizontal' ? 'rotateY(180deg)' : 'rotateX(180deg)';\n const rotateAxis = direction === 'horizontal' ? 'rotateY(180deg)' : 'rotateX(180deg)';\n\n return (\n <div\n ref={ref}\n className={cn('group relative', className)}\n style={{ height, perspective: '600px' }}\n {...props}\n >\n <div\n className=\"relative w-full h-full transition-transform duration-500 ease-standard\"\n style={{\n transformStyle: 'preserve-3d',\n }}\n >\n {/* Front */}\n <div\n className=\"absolute inset-0 rounded-xl overflow-hidden bg-primary-container text-on-primary-container p-4 flex flex-col justify-center\"\n style={{ backfaceVisibility: 'hidden' }}\n >\n {front}\n </div>\n {/* Back */}\n <div\n className=\"absolute inset-0 rounded-xl overflow-hidden bg-primary text-on-primary p-4 flex flex-col justify-center\"\n style={{ backfaceVisibility: 'hidden', transform: rotateBack }}\n >\n {back}\n </div>\n\n <style>{`\n .group:hover > div {\n transform: ${rotateAxis};\n }\n `}</style>\n </div>\n </div>\n );\n }\n);\n\nCardFlip.displayName = 'CardFlip';","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Dialog variants — CVA configuration.\n *\n * Positions: center, bottom (drawer), left, right (side panel)\n * Sizes: xs, sm, md, lg, fullscreen\n */\nexport const dialogOverlayVariants = cva(\n [\n 'fixed inset-0 z-50',\n 'flex items-center justify-center',\n 'bg-black/50 backdrop-blur-[2px]',\n 'transition-opacity duration-medium ease-standard',\n ],\n {\n variants: {\n position: {\n center: 'items-center justify-center',\n bottom: 'items-end justify-center',\n left: 'items-stretch justify-start',\n right: 'items-stretch justify-end',\n },\n },\n defaultVariants: {\n position: 'center',\n },\n }\n);\n\nexport const dialogPanelVariants = cva(\n [\n 'relative bg-background',\n 'flex flex-col',\n 'shadow-elevation-5',\n 'transition-all duration-medium ease-standard',\n 'focus-visible:outline-none',\n 'max-h-[90vh]',\n ],\n {\n variants: {\n size: {\n xs: 'w-full max-w-xs',\n sm: 'w-full max-w-sm',\n md: 'w-full max-w-md',\n lg: 'w-full max-w-2xl',\n fullscreen: 'w-screen h-screen max-h-screen',\n },\n position: {\n center: 'rounded-2xl mx-4',\n bottom: 'rounded-t-2xl w-full max-w-none mx-0',\n left: 'rounded-r-2xl h-full max-h-none w-80',\n right: 'rounded-l-2xl h-full max-h-none w-80',\n },\n },\n defaultVariants: {\n size: 'md',\n position: 'center',\n },\n }\n);\n\nexport type DialogOverlayVariantProps = VariantProps<typeof dialogOverlayVariants>;\nexport type DialogPanelVariantProps = VariantProps<typeof dialogPanelVariants>;","import {\n forwardRef,\n useEffect,\n useRef,\n useId,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/cn';\nimport { Icon } from '../Icon';\nimport {\n dialogOverlayVariants,\n dialogPanelVariants,\n type DialogPanelVariantProps,\n} from './Dialog.variants';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface DialogProps extends DialogPanelVariantProps {\n /** Whether the dialog is open. */\n open: boolean;\n\n /** Called when dialog should close (ESC, backdrop click, close button). */\n onClose: () => void;\n\n /**\n * Dialog type — affects icon and color scheme.\n * - `default` → neutral (default)\n * - `destructive` → red, for dangerous actions\n * - `success` → green, for confirmations\n * - `warning` → amber, for caution\n * - `info` → blue, for information\n */\n type?: 'default' | 'destructive' | 'success' | 'warning' | 'info';\n\n /**\n * Position of the dialog.\n * - `center` → centered modal (default)\n * - `bottom` → bottom drawer/sheet\n * - `left` → left side panel\n * - `right` → right side panel\n */\n position?: 'center' | 'bottom' | 'left' | 'right';\n\n /** Dialog size (only applies to center position). */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'fullscreen';\n\n /** Title shown in the dialog header. */\n title?: string;\n\n /** Subtitle shown below the title. */\n subtitle?: string;\n\n /** Emoji or icon shown above the title. */\n icon?: string;\n\n /** Hero image shown at the top of the dialog (above header). */\n imageSrc?: string;\n\n /** Alt text for the hero image. */\n imageAlt?: string;\n\n /** Height of the hero image. Default: 160px */\n imageHeight?: number;\n\n /** Shows a close button in the top-right corner. */\n showCloseButton?: boolean;\n\n /** Close when clicking the backdrop. Default: true */\n closeOnBackdrop?: boolean;\n\n /** Close on Escape key. Default: true */\n closeOnEscape?: boolean;\n\n /** Footer content — usually action buttons. */\n footer?: ReactNode;\n\n /** Shows a divider between body and footer. */\n footerDivider?: boolean;\n\n /** Additional className for the panel. */\n panelClassName?: string;\n\n /** Children = dialog body content. */\n children?: ReactNode;\n}\n\n// ─── Dialog ───────────────────────────────────────────────────────────────────\n\n/**\n * Dialog — a modal overlay that demands user attention.\n *\n * Features beyond M3:\n * - 5 types: default, destructive, success, warning, info\n * - 4 positions: center, bottom drawer, left/right side panel\n * - 5 sizes: xs, sm, md, lg, fullscreen\n * - hero image header\n * - focus trap + escape + backdrop close\n * - scroll lock on open\n * - portal rendering (outside DOM tree)\n * - composable with DialogHeader, DialogBody, DialogFooter\n *\n * @example\n * // Basic\n * <Dialog open={open} onClose={() => setOpen(false)} title=\"Hello\">\n * <DialogBody>Content here</DialogBody>\n * </Dialog>\n *\n * // Destructive\n * <Dialog\n * open={open} onClose={() => setOpen(false)}\n * type=\"destructive\"\n * title=\"Delete account?\"\n * icon=\"🗑️\"\n * footer={\n * <>\n * <Button variant=\"text\" onClick={() => setOpen(false)}>Cancel</Button>\n * <Button variant=\"destructive\" onClick={handleDelete}>Delete</Button>\n * </>\n * }\n * >\n * <DialogBody>This cannot be undone.</DialogBody>\n * </Dialog>\n *\n * // Bottom drawer\n * <Dialog open={open} onClose={() => setOpen(false)} position=\"bottom\" title=\"Share\">\n * <DialogBody>...</DialogBody>\n * </Dialog>\n */\nexport const Dialog = forwardRef<HTMLDivElement, DialogProps>(\n (\n {\n open,\n onClose,\n type = 'default',\n position = 'center',\n size = 'md',\n title,\n subtitle,\n icon,\n imageSrc,\n imageAlt,\n imageHeight = 160,\n showCloseButton = true,\n closeOnBackdrop = true,\n closeOnEscape = true,\n footer,\n footerDivider = true,\n panelClassName,\n children,\n },\n ref\n ) => {\n const panelRef = useRef<HTMLDivElement>(null);\n const titleId = useId();\n const descId = useId();\n\n // Scroll lock\n useEffect(() => {\n if (open) {\n document.body.style.overflow = 'hidden';\n } else {\n document.body.style.overflow = '';\n }\n return () => { document.body.style.overflow = ''; };\n }, [open]);\n\n // Focus trap\n useEffect(() => {\n if (!open) return;\n const panel = panelRef.current;\n if (!panel) return;\n\n const focusable = panel.querySelectorAll<HTMLElement>(\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\n );\n const first = focusable[0];\n const last = focusable[focusable.length - 1];\n\n first?.focus();\n\n function handleTab(e: globalThis.KeyboardEvent) {\n if (e.key !== 'Tab') return;\n if (e.shiftKey) {\n if (document.activeElement === first) {\n e.preventDefault();\n last?.focus();\n }\n } else {\n if (document.activeElement === last) {\n e.preventDefault();\n first?.focus();\n }\n }\n }\n\n document.addEventListener('keydown', handleTab);\n return () => document.removeEventListener('keydown', handleTab);\n }, [open]);\n\n // Escape key\n useEffect(() => {\n if (!open || !closeOnEscape) return;\n function handleEscape(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') onClose();\n }\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [open, closeOnEscape, onClose]);\n\n if (!open) return null;\n\n const typeConfig = {\n default: { iconBg: 'bg-surface-container', iconColor: 'text-text-primary' },\n destructive: { iconBg: 'bg-error-container', iconColor: 'text-error' },\n success: { iconBg: 'bg-success-container', iconColor: 'text-success' },\n warning: { iconBg: 'bg-warning-container', iconColor: 'text-warning' },\n info: { iconBg: 'bg-primary-container', iconColor: 'text-primary' },\n }[type];\n\n // Bottom drawer handle\n const showHandle = position === 'bottom';\n\n return createPortal(\n <div\n role=\"presentation\"\n className={cn(dialogOverlayVariants({ position }))}\n onClick={closeOnBackdrop ? (e) => { if (e.target === e.currentTarget) onClose(); } : undefined}\n aria-hidden=\"false\"\n >\n <div\n ref={(node) => {\n panelRef.current = node;\n if (typeof ref === 'function') ref(node);\n else if (ref) ref.current = node;\n }}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={title ? titleId : undefined}\n aria-describedby={descId}\n className={cn(\n dialogPanelVariants({ size, position }),\n panelClassName,\n )}\n tabIndex={-1}\n >\n {/* Drawer handle */}\n {showHandle && (\n <div className=\"flex justify-center pt-3 pb-1\">\n <div className=\"w-9 h-1 rounded-full bg-outline\" />\n </div>\n )}\n\n {/* Hero image */}\n {imageSrc && (\n <div className=\"relative flex-shrink-0 rounded-t-2xl overflow-hidden\" style={{ height: imageHeight }}>\n <img src={imageSrc} alt={imageAlt ?? ''} className=\"w-full h-full object-cover\" />\n <div className=\"absolute inset-0 bg-gradient-to-t from-black/60 to-transparent\" />\n {showCloseButton && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close\"\n className=\"absolute top-3 right-3 size-8 rounded-lg bg-black/30 hover:bg-black/50 text-white flex items-center justify-center transition-colors\"\n >\n <Icon name=\"close\" size=\"sm\" aria-hidden />\n </button>\n )}\n {title && (\n <div className=\"absolute bottom-0 left-0 right-0 p-5 text-white\">\n <h2 id={titleId} className=\"text-title-lg font-semibold\">{title}</h2>\n {subtitle && <p className=\"text-body-sm opacity-80 mt-0.5\">{subtitle}</p>}\n </div>\n )}\n </div>\n )}\n\n {/* Header */}\n {!imageSrc && (title || icon || showCloseButton) && (\n <div className=\"flex items-start gap-3 px-6 pt-6 flex-shrink-0\">\n {icon && (\n <div className={cn('size-10 rounded-xl flex items-center justify-center text-xl flex-shrink-0', typeConfig.iconBg)}>\n {icon}\n </div>\n )}\n <div className=\"flex-1 min-w-0\">\n {title && (\n <h2 id={titleId} className=\"text-title-lg text-text-primary font-semibold\">\n {title}\n </h2>\n )}\n {subtitle && (\n <p className=\"text-body-sm text-text-secondary mt-0.5\">{subtitle}</p>\n )}\n </div>\n {showCloseButton && !imageSrc && (\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close dialog\"\n className=\"size-8 rounded-lg bg-surface-variant hover:bg-surface-container flex items-center justify-center flex-shrink-0 transition-colors\"\n >\n <Icon name=\"close\" size=\"sm\" aria-hidden />\n </button>\n )}\n </div>\n )}\n\n {/* Body */}\n <div id={descId} className=\"flex-1 overflow-y-auto\">\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <>\n {footerDivider && <div className=\"h-px bg-outline-variant flex-shrink-0\" />}\n <div className=\"flex items-center justify-end gap-2 px-6 py-4 flex-shrink-0\">\n {footer}\n </div>\n </>\n )}\n </div>\n </div>,\n document.body\n );\n }\n);\n\nDialog.displayName = 'Dialog';\n\n// ─── DialogBody ───────────────────────────────────────────────────────────────\n\nexport interface DialogBodyProps extends ComponentPropsWithoutRef<'div'> {\n noPadding?: boolean;\n}\n\n/**\n * DialogBody — scrollable content area of the dialog.\n */\nexport const DialogBody = forwardRef<HTMLDivElement, DialogBodyProps>(\n ({ noPadding, className, children, ...props }, ref) => (\n <div\n ref={ref}\n className={cn(!noPadding && 'px-6 py-4', 'text-body-md text-text-secondary', className)}\n {...props}\n >\n {children}\n </div>\n )\n);\n\nDialogBody.displayName = 'DialogBody';\n\n// ─── CommandPalette ───────────────────────────────────────────────────────────\n\nexport interface CommandItem {\n id: string;\n label: string;\n icon?: string;\n shortcut?: string;\n group?: string;\n onSelect: () => void;\n}\n\nexport interface CommandPaletteProps {\n open: boolean;\n onClose: () => void;\n items: CommandItem[];\n placeholder?: string;\n}\n\n/**\n * CommandPalette — ⌘K style search and navigation.\n *\n * @example\n * <CommandPalette\n * open={open}\n * onClose={() => setOpen(false)}\n * items={commands}\n * />\n */\nexport function CommandPalette({ open, onClose, items, placeholder = 'Search commands...' }: CommandPaletteProps) {\n useEffect(() => {\n function handleKey(e: globalThis.KeyboardEvent) {\n if ((e.metaKey || e.ctrlKey) && e.key === 'k') {\n e.preventDefault();\n }\n if (e.key === 'Escape') onClose();\n }\n document.addEventListener('keydown', handleKey);\n return () => document.removeEventListener('keydown', handleKey);\n }, [onClose]);\n\n if (!open) return null;\n\n const groups = items.reduce<Record<string, CommandItem[]>>((acc, item) => {\n const group = item.group ?? 'General';\n if (!acc[group]) acc[group] = [];\n acc[group]!.push(item);\n return acc;\n }, {});\n\n return createPortal(\n <div\n className=\"fixed inset-0 z-50 flex items-start justify-center pt-[15vh] bg-black/50 backdrop-blur-[2px]\"\n onClick={(e) => { if (e.target === e.currentTarget) onClose(); }}\n >\n <div className=\"w-full max-w-lg bg-background rounded-2xl shadow-elevation-5 overflow-hidden mx-4\">\n {/* Search */}\n <div className=\"flex items-center gap-3 px-4 py-3.5 border-b border-outline-variant\">\n <Icon name=\"search\" size=\"md\" className=\"text-text-secondary flex-shrink-0\" aria-hidden />\n <input\n autoFocus\n type=\"text\"\n placeholder={placeholder}\n className=\"flex-1 bg-transparent border-none outline-none text-body-lg text-text-primary placeholder:text-text-disabled\"\n aria-label=\"Search commands\"\n />\n <kbd className=\"text-label-sm font-mono bg-surface-variant px-2 py-0.5 rounded text-text-secondary\">\n ESC\n </kbd>\n </div>\n\n {/* Results */}\n <div className=\"max-h-72 overflow-y-auto p-2\">\n {Object.entries(groups).map(([group, groupItems]) => (\n <div key={group}>\n <p className=\"px-2.5 py-1.5 text-label-sm text-text-disabled uppercase tracking-wider\">\n {group}\n </p>\n {groupItems.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => { item.onSelect(); onClose(); }}\n className=\"w-full flex items-center gap-3 px-3 py-2.5 rounded-xl hover:bg-primary-container/20 text-left transition-colors group\"\n >\n {item.icon && (\n <span className=\"size-7 rounded-lg bg-surface-variant group-hover:bg-primary-container flex items-center justify-center text-sm flex-shrink-0 transition-colors\">\n {item.icon}\n </span>\n )}\n <span className=\"flex-1 text-body-md text-text-primary\">{item.label}</span>\n {item.shortcut && (\n <kbd className=\"text-label-sm font-mono bg-surface-variant px-2 py-0.5 rounded text-text-secondary\">\n {item.shortcut}\n </kbd>\n )}\n </button>\n ))}\n </div>\n ))}\n </div>\n\n {/* Footer hints */}\n <div className=\"flex items-center gap-4 px-4 py-2.5 border-t border-outline-variant\">\n {[['↑↓', 'navigate'], ['↵', 'select'], ['ESC', 'close']].map(([key, hint]) => (\n <span key={key} className=\"flex items-center gap-1.5 text-label-sm text-text-disabled\">\n <kbd className=\"font-mono bg-surface-variant px-1.5 py-0.5 rounded text-[10px]\">{key}</kbd>\n {hint}\n </span>\n ))}\n </div>\n </div>\n </div>,\n document.body\n );\n}","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Toast variants — CVA configuration.\n *\n * Types: default, success, error, warning, info, loading, gradient, glass\n * Positions: 6 positions\n */\nexport const toastVariants = cva(\n [\n 'relative flex items-start gap-3',\n 'w-[360px] rounded-lg',\n 'pointer-events-auto select-none',\n 'transition-all duration-medium ease-standard',\n 'overflow-hidden',\n ],\n {\n variants: {\n type: {\n default: ['bg-[#111827] text-white', 'border border-white/8', 'shadow-lg shadow-black/20', 'px-4 py-3.5'],\n success: ['bg-white text-text-primary', 'border border-[#D1FAE5]', 'shadow-md shadow-success/8', 'px-4 py-3.5'],\n error: ['bg-white text-text-primary', 'border border-[#FEE2E2]', 'shadow-md shadow-error/8', 'px-4 py-3.5'],\n warning: ['bg-white text-text-primary', 'border border-[#FEF3C7]', 'shadow-md shadow-warning/8', 'px-4 py-3.5'],\n info: ['bg-white text-text-primary', 'border border-[#DBEAFE]', 'shadow-md shadow-primary/8', 'px-4 py-3'],\n loading: ['bg-white text-text-primary', 'border border-outline', 'shadow-md', 'px-4 py-3.5'],\n gradient: ['bg-gradient-to-r from-primary to-secondary text-white', 'border-0', 'shadow-lg shadow-primary/25', 'px-4 py-3.5'],\n glass: ['bg-white/10 backdrop-blur-md text-white', 'border border-white/20', 'shadow-lg', 'px-4 py-3.5'],\n },\n },\n defaultVariants: {\n type: 'default',\n },\n }\n);\n\nexport const toastProgressVariants = cva(\n ['absolute bottom-0 left-0 h-[3px] rounded-full'],\n {\n variants: {\n type: {\n default: 'bg-white/40',\n success: 'bg-success',\n error: 'bg-error',\n warning: 'bg-warning',\n info: 'bg-primary',\n loading: 'bg-primary',\n gradient: 'bg-white/40',\n glass: 'bg-white/40',\n },\n },\n defaultVariants: {\n type: 'default',\n },\n }\n);\n\nexport const toastIconVariants = cva(\n ['flex-shrink-0 flex items-center justify-center'],\n {\n variants: {\n type: {\n default: 'size-8 rounded-lg bg-white/10 text-white',\n success: 'size-8 rounded-lg bg-success/10 text-success',\n error: 'size-8 rounded-lg bg-error/10 text-error',\n warning: 'size-8 rounded-lg bg-warning/10 text-warning',\n info: 'size-8 rounded-lg bg-primary/10 text-primary',\n loading: '',\n gradient: 'size-8 rounded-lg bg-white/15 text-white',\n glass: 'size-8 rounded-lg bg-white/15 text-white',\n },\n },\n defaultVariants: {\n type: 'default',\n },\n }\n);\n\nexport type ToastVariantProps = VariantProps<typeof toastVariants>;\nexport type ToastType = 'default' | 'success' | 'error' | 'warning' | 'info' | 'loading' | 'gradient' | 'glass';\n\nexport type ToastPosition =\n | 'top-left'\n | 'top-center'\n | 'top-right'\n | 'bottom-left'\n | 'bottom-center'\n | 'bottom-right';\n\nexport const positionClasses: Record<ToastPosition, string> = {\n 'top-left': 'top-4 left-4',\n 'top-center': 'top-4 left-1/2 -translate-x-1/2',\n 'top-right': 'top-4 right-4',\n 'bottom-left': 'bottom-4 left-4',\n 'bottom-center': 'bottom-4 left-1/2 -translate-x-1/2',\n 'bottom-right': 'bottom-4 right-4',\n};","import type { ReactNode } from 'react';\nimport type { ToastType } from './Toast.variants';\n\n// ─── Toast data model ─────────────────────────────────────────────────────────\n\nexport interface ToastAction {\n label: string;\n onClick: () => void;\n variant?: 'primary' | 'ghost';\n}\n\nexport interface ToastData {\n id: string;\n type: ToastType;\n title: string;\n description?: string;\n duration?: number; // ms, 0 = persistent\n progress?: number; // 0-100 for progress toasts\n showProgress?: boolean; // show auto-dismiss progress bar\n actions?: ToastAction[];\n avatarSrc?: string;\n avatarName?: string;\n imageSrc?: string;\n icon?: ReactNode;\n dismissible?: boolean;\n onDismiss?: () => void;\n createdAt: number;\n}\n\nexport interface ToastOptions extends Omit<ToastData, 'id' | 'createdAt' | 'type'> {\n id?: string;\n type?: ToastType;\n}\n\n// ─── Store ────────────────────────────────────────────────────────────────────\n\ntype Listener = () => void;\n\nclass ToastStore {\n private toasts: ToastData[] = [];\n private listeners: Set<Listener> = new Set();\n private maxToasts = 5;\n\n subscribe(listener: Listener) {\n this.listeners.add(listener);\n return () => this.listeners.delete(listener);\n }\n\n private notify() {\n this.listeners.forEach(l => l());\n }\n\n getToasts() {\n return this.toasts;\n }\n\n add(options: ToastOptions): string {\n const id = options.id ?? `toast-${Date.now()}-${Math.random().toString(36).slice(2)}`;\n\n // If toast with same id exists, update it\n const existing = this.toasts.findIndex(t => t.id === id);\n if (existing !== -1) {\n this.toasts[existing] = {\n ...this.toasts[existing]!,\n ...options,\n id,\n createdAt: this.toasts[existing]!.createdAt,\n };\n this.notify();\n return id;\n }\n\n const toast: ToastData = {\n id,\n type: options.type ?? 'default',\n title: options.title,\n description: options.description,\n duration: options.duration ?? 4000,\n showProgress: options.showProgress ?? true,\n actions: options.actions,\n avatarSrc: options.avatarSrc,\n avatarName: options.avatarName,\n imageSrc: options.imageSrc,\n icon: options.icon,\n dismissible: options.dismissible ?? true,\n onDismiss: options.onDismiss,\n progress: options.progress,\n createdAt: Date.now(),\n };\n\n // Enforce max toasts\n if (this.toasts.length >= this.maxToasts) {\n this.toasts = this.toasts.slice(-(this.maxToasts - 1));\n }\n\n this.toasts = [...this.toasts, toast];\n this.notify();\n return id;\n }\n\n update(id: string, options: Partial<ToastOptions>) {\n this.toasts = this.toasts.map(t =>\n t.id === id ? { ...t, ...options } : t\n );\n this.notify();\n }\n\n dismiss(id: string) {\n const toast = this.toasts.find(t => t.id === id);\n toast?.onDismiss?.();\n this.toasts = this.toasts.filter(t => t.id !== id);\n this.notify();\n }\n\n dismissAll() {\n this.toasts.forEach(t => t.onDismiss?.());\n this.toasts = [];\n this.notify();\n }\n\n setMaxToasts(max: number) {\n this.maxToasts = max;\n }\n}\n\nexport const toastStore = new ToastStore();\n\n// ─── toast() API ──────────────────────────────────────────────────────────────\n\nfunction addToast(options: ToastOptions): string {\n return toastStore.add(options);\n}\n\n/**\n * toast — the main API for showing toasts.\n *\n * @example\n * toast('Hello world')\n * toast.success('Saved!')\n * toast.error('Failed!', { description: 'Check your connection' })\n * toast.promise(fetch('/api'), { loading: 'Loading...', success: 'Done!', error: 'Failed' })\n * toast.update(id, { progress: 75 })\n * toast.dismiss(id)\n * toast.dismissAll()\n */\nexport const toast = Object.assign(\n (title: string, options?: Partial<ToastOptions>) =>\n addToast({ title, type: 'default', ...options }),\n {\n success: (title: string, options?: Partial<ToastOptions>) =>\n addToast({ title, type: 'success', ...options }),\n\n error: (title: string, options?: Partial<ToastOptions>) =>\n addToast({ title, type: 'error', ...options }),\n\n warning: (title: string, options?: Partial<ToastOptions>) =>\n addToast({ title, type: 'warning', ...options }),\n\n info: (title: string, options?: Partial<ToastOptions>) =>\n addToast({ title, type: 'info', ...options }),\n\n loading: (title: string, options?: Partial<ToastOptions>) =>\n addToast({ title, type: 'loading', duration: 0, dismissible: false, ...options }),\n\n gradient: (title: string, options?: Partial<ToastOptions>) =>\n addToast({ title, type: 'gradient', ...options }),\n\n /**\n * Rich toast with avatar and multiple actions.\n */\n rich: (options: ToastOptions) => addToast(options),\n\n /**\n * Progress toast — update progress with toast.update(id, { progress: 75 }).\n */\n progress: (title: string, options?: Partial<ToastOptions>) =>\n addToast({ title, type: 'info', duration: 0, progress: 0, dismissible: false, ...options }),\n\n /**\n * Promise toast — shows loading, then success or error.\n *\n * @example\n * toast.promise(saveData(), {\n * loading: 'Saving...',\n * success: 'Saved successfully!',\n * error: 'Failed to save'\n * })\n */\n promise: <T>(\n promise: Promise<T>,\n messages: {\n loading: string;\n success: string | ((data: T) => string);\n error: string | ((err: unknown) => string);\n },\n options?: Partial<ToastOptions>\n ): Promise<T> => {\n const id = addToast({\n title: messages.loading,\n type: 'loading',\n duration: 0,\n dismissible: false,\n ...options,\n });\n\n promise\n .then((data) => {\n const title = typeof messages.success === 'function'\n ? messages.success(data)\n : messages.success;\n toastStore.update(id, { title, type: 'success', duration: 4000, dismissible: true });\n })\n .catch((err) => {\n const title = typeof messages.error === 'function'\n ? messages.error(err)\n : messages.error;\n toastStore.update(id, { title, type: 'error', duration: 4000, dismissible: true });\n });\n\n return promise;\n },\n\n /**\n * Update an existing toast by id.\n */\n update: (id: string, options: Partial<ToastOptions>) =>\n toastStore.update(id, options),\n\n /**\n * Dismiss a toast by id.\n */\n dismiss: (id: string) => toastStore.dismiss(id),\n\n /**\n * Dismiss all toasts.\n */\n dismissAll: () => toastStore.dismissAll(),\n }\n);","import {\n useEffect,\n useState,\n useSyncExternalStore,\n useCallback,\n type CSSProperties,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/cn';\nimport { Icon } from '../Icon';\nimport { Avatar } from '../Avatar';\nimport {\n toastVariants,\n toastProgressVariants,\n toastIconVariants,\n positionClasses,\n type ToastPosition,\n} from './Toast.variants';\nimport { toastStore, type ToastData } from './Toast.store';\n\n// ─── Toaster ──────────────────────────────────────────────────────────────────\n\nexport interface ToasterProps {\n /**\n * Position of the toast stack.\n * @default 'bottom-right'\n */\n position?: ToastPosition;\n\n /**\n * Maximum number of toasts visible at once.\n * @default 5\n */\n maxToasts?: number;\n\n /**\n * Whether to expand all toasts or collapse into a stack.\n * @default false (collapsed)\n */\n expand?: boolean;\n\n /**\n * Gap between toasts in pixels.\n * @default 8\n */\n gap?: number;\n}\n\n/**\n * Toaster — renders the toast stack. Place once at the root of your app.\n *\n * @example\n * // In App.tsx or main layout\n * <Toaster position=\"bottom-right\" />\n *\n * // Then anywhere in your app\n * import { toast } from './components/Toast';\n * toast.success('Saved!')\n */\nexport function Toaster({\n position = 'bottom-right',\n maxToasts = 5,\n expand = false,\n gap = 8,\n}: ToasterProps) {\n const toasts = useSyncExternalStore(\n (cb) => toastStore.subscribe(cb),\n () => toastStore.getToasts(),\n () => [],\n );\n\n const [hovered, setHovered] = useState(false);\n const isExpanded = expand || hovered;\n const isTop = position.startsWith('top');\n\n useEffect(() => {\n toastStore.setMaxToasts(maxToasts);\n }, [maxToasts]);\n\n if (!toasts.length) return null;\n\n return createPortal(\n <div\n className={cn(\n 'fixed z-[9999] flex flex-col pointer-events-none w-[360px]',\n positionClasses[position],\n isTop ? 'flex-col' : 'flex-col-reverse',\n )}\n style={{ gap: isExpanded ? gap : 0 }}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n aria-live=\"polite\"\n aria-label=\"Notifications\"\n >\n {toasts.map((toast, index) => {\n const reversedIndex = toasts.length - 1 - index;\n const offset = isExpanded ? 0 : reversedIndex * 8;\n const scale = 1;\n const opacity = reversedIndex > 3 ? 0 : 1;\n\n return (\n <ToastItem\n key={toast.id}\n toast={toast}\n style={{\n transform: isTop\n ? `scale(${scale}) translateY(${-offset}px)`\n : `scale(${scale}) translateY(${offset}px)`,\n opacity,\n zIndex: index + 1,\n transformOrigin: isTop ? 'top center' : 'bottom center',\n transition: 'all 300ms cubic-bezier(0.2, 0, 0, 1)',\n }}\n paused={hovered}\n />\n );\n })}\n </div>,\n document.body\n );\n}\n\n// ─── ToastItem ────────────────────────────────────────────────────────────────\n\ninterface ToastItemProps {\n toast: ToastData;\n style?: CSSProperties;\n paused?: boolean;\n}\n\nfunction ToastItem({ toast, style, paused }: ToastItemProps) {\n const [visible, setVisible] = useState(false);\n\n // Animate in\n useEffect(() => {\n requestAnimationFrame(() => setVisible(true));\n }, []);\n\n // Auto-dismiss via CSS animation end\n useEffect(() => {\n if (!toast.duration || toast.duration === 0 || paused) return;\n const timer = setTimeout(() => toastStore.dismiss(toast.id), toast.duration);\n return () => clearTimeout(timer);\n }, [toast.id, toast.duration, paused]);\n\n const dismiss = useCallback(() => {\n toastStore.dismiss(toast.id);\n }, [toast.id]);\n\n const iconMap = {\n success: <Icon name=\"check-circle\" size=\"sm\" aria-hidden />,\n error: <Icon name=\"alert-circle\" size=\"sm\" aria-hidden />,\n warning: <Icon name=\"alert-circle\" size=\"sm\" aria-hidden />,\n info: <Icon name=\"info\" size=\"sm\" aria-hidden />,\n loading: <Spinner />,\n default: <Icon name=\"bell\" size=\"sm\" className=\"text-white/70\" aria-hidden />,\n gradient: null,\n glass: null,\n };\n\n const hasAvatar = !!(toast.avatarSrc || toast.avatarName);\n const hasImage = toast.imageSrc;\n const hasActions = toast.actions && toast.actions.length > 0;\n\n return (\n <div\n className={cn(\n 'pointer-events-auto',\n 'transition-all duration-medium ease-standard',\n visible ? 'opacity-100 translate-y-0' : 'opacity-0 translate-y-2',\n )}\n style={style}\n role=\"alert\"\n aria-live=\"polite\"\n >\n {/* Image side panel */}\n {hasImage ? (\n <div className={cn(toastVariants({ type: toast.type }), 'p-0 flex-row gap-0')}>\n <div className=\"w-16 flex-shrink-0 bg-surface-container flex items-center justify-center text-2xl\">\n <img src={toast.imageSrc} alt=\"\" className=\"w-full h-full object-cover\" />\n </div>\n <div className=\"flex-1 p-3\">\n <p className=\"text-label-lg font-semibold text-text-primary\">{toast.title}</p>\n {toast.description && (\n <p className=\"text-body-sm text-text-secondary mt-0.5\">{toast.description}</p>\n )}\n {hasActions && (\n <div className=\"flex gap-2 mt-2\">\n {toast.actions!.map(action => (\n <button\n key={action.label}\n type=\"button\"\n onClick={() => { action.onClick(); dismiss(); }}\n className={cn(\n 'text-label-sm font-semibold px-3 py-1 rounded-lg transition-colors',\n action.variant === 'ghost'\n ? 'text-text-secondary hover:bg-surface-variant'\n : 'bg-primary text-on-primary hover:bg-primary/90',\n )}\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n </div>\n {toast.dismissible && (\n <button\n type=\"button\"\n onClick={dismiss}\n aria-label=\"Dismiss\"\n className=\"self-start p-2 opacity-50 hover:opacity-100 transition-opacity\"\n >\n <Icon name=\"close\" size=\"sm\" aria-hidden />\n </button>\n )}\n </div>\n ) : (\n <div className={cn(toastVariants({ type: toast.type }), 'flex-col gap-0')}>\n <div className=\"flex items-center gap-3 w-full\">\n {/* Avatar */}\n {hasAvatar && (\n <div className=\"relative flex-shrink-0\">\n <Avatar\n src={toast.avatarSrc}\n name={toast.avatarName}\n size=\"sm\"\n />\n </div>\n )}\n\n {/* Icon */}\n {!hasAvatar && toast.icon && (\n <div className={cn(toastIconVariants({ type: toast.type }))}>\n {toast.icon}\n </div>\n )}\n {!hasAvatar && !toast.icon && toast.type !== 'gradient' && toast.type !== 'glass' && (\n <div className={cn(toastIconVariants({ type: toast.type }))}>\n {iconMap[toast.type]}\n </div>\n )}\n\n {/* Content */}\n <div className=\"flex-1 min-w-0\">\n <p className={cn(\n 'text-label-lg font-semibold leading-snug',\n toast.type === 'default' || toast.type === 'gradient' || toast.type === 'glass'\n ? 'text-white'\n : 'text-text-primary',\n )}>\n {toast.title}\n </p>\n {toast.description && (\n <p className={cn(\n 'text-body-sm mt-0.5 leading-snug',\n toast.type === 'default' || toast.type === 'gradient' || toast.type === 'glass'\n ? 'text-white/70'\n : 'text-text-secondary',\n )}>\n {toast.description}\n </p>\n )}\n </div>\n\n {/* Close button */}\n {toast.dismissible && (\n <button\n type=\"button\"\n onClick={dismiss}\n aria-label=\"Dismiss notification\"\n className={cn(\n 'flex-shrink-0 size-5 flex items-center justify-center rounded-md',\n 'opacity-50 hover:opacity-100 transition-opacity',\n 'focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring',\n toast.type === 'default' || toast.type === 'gradient' || toast.type === 'glass'\n ? 'text-white hover:bg-white/10'\n : 'text-text-secondary hover:bg-surface-variant',\n )}\n >\n <Icon name=\"close\" size=\"sm\" aria-hidden />\n </button>\n )}\n </div>\n\n {/* Progress bar (file upload etc) */}\n {toast.progress !== undefined && (\n <div className=\"mt-1.5 h-1 w-full bg-black/10 rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-current rounded-full transition-all duration-short\"\n style={{ width: `${toast.progress}%` }}\n />\n </div>\n )}\n\n {/* Action buttons */}\n {hasActions && (\n <div className=\"flex gap-2 mt-2.5 ml-0\">\n {toast.actions!.map(action => (\n <button\n key={action.label}\n type=\"button\"\n onClick={() => { action.onClick(); dismiss(); }}\n className={cn(\n 'text-label-sm font-semibold px-3 py-1.5 rounded-lg transition-colors',\n action.variant === 'ghost'\n ? 'opacity-60 hover:opacity-100'\n : toast.type === 'default' || toast.type === 'gradient' || toast.type === 'glass'\n ? 'bg-white/15 hover:bg-white/25 text-current'\n : 'text-primary hover:bg-primary-container/30',\n )}\n >\n {action.label}\n </button>\n ))}\n </div>\n )}\n\n {/* Auto-dismiss progress bar */}\n {toast.showProgress && (toast.duration ?? 0) > 0 && (\n <div\n className={cn(toastProgressVariants({ type: toast.type }))}\n style={{\n width: '100%',\n animationName: paused ? 'none' : 'toastProgress',\n animationDuration: `${toast.duration}ms`,\n animationTimingFunction: 'linear',\n animationFillMode: 'forwards',\n transformOrigin: 'left',\n }}\n />\n )}\n </div>\n )}\n </div>\n );\n}\n\n// ─── Spinner ──────────────────────────────────────────────────────────────────\n\nfunction Spinner() {\n return (\n <span\n aria-hidden=\"true\"\n className=\"inline-block size-4 rounded-full border-2 border-current border-r-transparent animate-spin motion-reduce:animate-none flex-shrink-0\"\n />\n );\n}","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Tabs variants — CVA configuration.\n *\n * Variants: underline, pill, filled, bordered, card, floating, line, bubble, gradient\n * Orientations: horizontal, vertical\n */\nexport const tabsListVariants = cva(\n ['flex', 'flex-nowrap', 'transition-all duration-short ease-standard'],\n {\n variants: {\n variant: {\n underline: 'border-b-2 border-outline gap-0',\n pill: 'bg-surface-variant p-1 rounded-xl gap-1',\n filled: 'gap-1',\n bordered: 'border-[1.5px] border-outline rounded-xl overflow-hidden gap-0',\n card: 'gap-2',\n floating: 'bg-background shadow-elevation-2 p-1 rounded-xl gap-1',\n line: 'flex-col border-l-2 border-outline gap-0',\n bubble: 'gap-1.5',\n gradient: 'bg-surface-variant p-1 rounded-xl gap-1',\n },\n orientation: {\n horizontal: 'flex-row',\n vertical: 'flex-col',\n },\n },\n compoundVariants: [\n { variant: 'underline', orientation: 'vertical', class: 'border-b-0 border-r-2 flex-col' },\n { variant: 'line', orientation: 'horizontal', class: 'flex-row border-l-0 border-b-2' },\n ],\n defaultVariants: {\n variant: 'underline',\n orientation: 'horizontal',\n },\n }\n);\n\nexport const tabTriggerVariants = cva(\n [\n 'relative inline-flex items-center justify-center gap-2 flex-shrink-0',\n 'font-medium whitespace-nowrap select-none cursor-pointer',\n 'transition-all duration-short ease-standard',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-40',\n ],\n {\n variants: {\n variant: {\n underline: [\n 'px-4 py-2.5 text-label-lg text-text-secondary',\n 'border-b-2 border-transparent -mb-[2px]',\n 'hover:text-primary',\n 'data-[state=active]:text-primary data-[state=active]:border-primary',\n ],\n pill: [\n 'px-4 py-1.5 text-label-md text-text-secondary rounded-lg',\n 'hover:text-text-primary',\n 'data-[state=active]:bg-background data-[state=active]:text-text-primary data-[state=active]:shadow-sm',\n ],\n filled: [\n 'px-4 py-2 text-label-md text-text-secondary rounded-lg',\n 'hover:bg-surface-variant hover:text-text-primary',\n 'data-[state=active]:bg-primary-container data-[state=active]:text-on-primary-container',\n ],\n bordered: [\n 'flex-1 px-4 py-2 text-label-md text-text-secondary',\n 'border-r border-outline last:border-r-0',\n 'hover:bg-surface-variant',\n 'data-[state=active]:bg-primary data-[state=active]:text-on-primary',\n ],\n card: [\n 'flex-col px-5 py-3 text-label-md text-text-secondary rounded-xl',\n 'border-[1.5px] border-outline bg-surface',\n 'hover:border-primary hover:bg-primary-container/10 hover:text-primary',\n 'data-[state=active]:border-primary data-[state=active]:bg-background data-[state=active]:text-primary data-[state=active]:shadow-md',\n ],\n floating: [\n 'px-4 py-2 text-label-md text-text-secondary rounded-lg',\n 'hover:text-text-primary',\n 'data-[state=active]:bg-primary data-[state=active]:text-on-primary data-[state=active]:shadow-md',\n ],\n line: [\n 'px-4 py-2 text-label-md text-text-secondary',\n 'border-l-2 border-transparent -ml-[2px]',\n 'hover:bg-surface-variant hover:text-text-primary',\n 'data-[state=active]:border-primary data-[state=active]:bg-primary-container/20 data-[state=active]:text-primary',\n ],\n bubble: [\n 'px-4 py-1.5 text-label-md text-text-secondary rounded-full',\n 'border-[1.5px] border-transparent',\n 'hover:border-outline hover:text-text-primary',\n 'data-[state=active]:bg-secondary-container data-[state=active]:text-on-secondary-container data-[state=active]:border-secondary',\n ],\n gradient: [\n 'px-4 py-1.5 text-label-md text-text-secondary rounded-lg',\n 'hover:text-text-primary',\n 'data-[state=active]:bg-gradient-to-r data-[state=active]:from-primary data-[state=active]:to-secondary data-[state=active]:text-on-primary data-[state=active]:shadow-md',\n ],\n },\n size: {\n sm: 'text-label-sm',\n md: '',\n lg: 'text-label-lg',\n },\n },\n defaultVariants: {\n variant: 'underline',\n size: 'md',\n },\n }\n);\n\nexport type TabsListVariantProps = VariantProps<typeof tabsListVariants>;\nexport type TabTriggerVariantProps = VariantProps<typeof tabTriggerVariants>;","import {\n forwardRef,\n useState,\n createContext,\n useContext,\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon, type IconName } from '../Icon';\nimport {\n tabsListVariants,\n tabTriggerVariants,\n type TabsListVariantProps,\n type TabTriggerVariantProps,\n} from './Tabs.variants';\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface TabsContextValue {\n activeTab: string;\n setActiveTab: (id: string) => void;\n variant: TabsListVariantProps['variant'];\n orientation: TabsListVariantProps['orientation'];\n size: TabTriggerVariantProps['size'];\n}\n\nconst TabsContext = createContext<TabsContextValue>({\n activeTab: '',\n setActiveTab: () => {},\n variant: 'underline',\n orientation: 'horizontal',\n size: 'md',\n});\n\n// ─── Tabs (root) ──────────────────────────────────────────────────────────────\n\nexport interface TabsProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Default active tab value (uncontrolled).\n */\n defaultValue?: string;\n\n /**\n * Controlled active tab value.\n */\n value?: string;\n\n /**\n * Callback when active tab changes.\n */\n onValueChange?: (value: string) => void;\n\n /**\n * Visual variant.\n * - `underline` → M3 primary style, bottom border indicator\n * - `pill` → segmented control, filled active tab\n * - `filled` → tonal background on active\n * - `bordered` → button group style\n * - `card` → each tab is a card with icon\n * - `floating` → elevated pill with shadow\n * - `line` → left border indicator (sidebar style)\n * - `bubble` → pill outline that fills on active\n * - `gradient` → brand gradient on active tab\n */\n variant?: TabsListVariantProps['variant'];\n\n /**\n * Tab orientation.\n * - `horizontal` → tabs in a row (default)\n * - `vertical` → tabs in a column (sidebar style)\n */\n orientation?: 'horizontal' | 'vertical';\n\n /**\n * Size of the tab labels.\n */\n size?: TabTriggerVariantProps['size'];\n}\n\n/**\n * Tabs — a navigation component for switching between views.\n *\n * Features beyond M3:\n * - 9 variants: underline, pill, filled, bordered, card, floating, line, bubble, gradient\n * - horizontal and vertical orientations\n * - badge counts on tabs\n * - icons in tabs\n * - subtitle below tab label\n * - scrollable overflow\n * - step/wizard tab style\n * - full keyboard navigation (arrows, home, end)\n * - controlled + uncontrolled\n *\n * @example\n * <Tabs defaultValue=\"overview\">\n * <TabsList>\n * <TabsTrigger value=\"overview\">Overview</TabsTrigger>\n * <TabsTrigger value=\"analytics\">Analytics</TabsTrigger>\n * </TabsList>\n * <TabsContent value=\"overview\">Overview content</TabsContent>\n * <TabsContent value=\"analytics\">Analytics content</TabsContent>\n * </Tabs>\n */\nexport const Tabs = forwardRef<HTMLDivElement, TabsProps>(\n (\n {\n defaultValue,\n value: controlledValue,\n onValueChange,\n variant = 'underline',\n orientation = 'horizontal',\n size = 'md',\n className,\n children,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const activeTab = controlledValue ?? internalValue;\n\n function setActiveTab(id: string) {\n if (!controlledValue) setInternalValue(id);\n onValueChange?.(id);\n }\n\n return (\n <TabsContext.Provider value={{ activeTab, setActiveTab, variant, orientation, size }}>\n <div\n ref={ref}\n className={cn(\n 'flex',\n orientation === 'vertical' ? 'flex-row gap-4' : 'flex-col',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n </TabsContext.Provider>\n );\n }\n);\n\nTabs.displayName = 'Tabs';\n\n// ─── TabsList ─────────────────────────────────────────────────────────────────\n\nexport interface TabsListProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Allow horizontal scrolling when tabs overflow.\n */\n scrollable?: boolean;\n}\n\n/**\n * TabsList — the container for tab triggers.\n */\nexport const TabsList = forwardRef<HTMLDivElement, TabsListProps>(\n ({ scrollable, className, children, ...props }, ref) => {\n const { variant, orientation } = useContext(TabsContext);\n\n function handleKeyDown(e: KeyboardEvent<HTMLDivElement>) {\n const tabs = Array.from(\n e.currentTarget.querySelectorAll<HTMLButtonElement>('[role=\"tab\"]:not([disabled])')\n );\n const current = tabs.findIndex(t => t === document.activeElement);\n\n const isHorizontal = orientation === 'horizontal';\n const next = isHorizontal ? 'ArrowRight' : 'ArrowDown';\n const prev = isHorizontal ? 'ArrowLeft' : 'ArrowUp';\n\n if (e.key === next) {\n e.preventDefault();\n tabs[(current + 1) % tabs.length]?.focus();\n } else if (e.key === prev) {\n e.preventDefault();\n tabs[(current - 1 + tabs.length) % tabs.length]?.focus();\n } else if (e.key === 'Home') {\n e.preventDefault();\n tabs[0]?.focus();\n } else if (e.key === 'End') {\n e.preventDefault();\n tabs[tabs.length - 1]?.focus();\n }\n }\n\n return (\n <div\n ref={ref}\n role=\"tablist\"\n aria-orientation={orientation ?? undefined}\n onKeyDown={handleKeyDown}\n className={cn(\n tabsListVariants({ variant, orientation }),\n scrollable && orientation === 'horizontal' && [\n 'overflow-x-auto',\n 'overflow-y-hidden',\n 'flex-nowrap',\n 'min-w-0',\n 'w-full',\n '[&::-webkit-scrollbar]:hidden',\n '[scrollbar-width:none]',\n ],\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nTabsList.displayName = 'TabsList';\n\n// ─── TabsTrigger ──────────────────────────────────────────────────────────────\n\nexport interface TabsTriggerProps extends ComponentPropsWithoutRef<'button'> {\n /**\n * Unique value identifying this tab.\n */\n value: string;\n\n /**\n * Icon displayed before the label.\n */\n icon?: IconName;\n\n /**\n * Badge count shown after the label.\n * Use 0 to show dot only.\n */\n badge?: number | boolean;\n\n /**\n * Subtitle shown below the label.\n * Useful for dashboard tabs with metrics.\n */\n subtitle?: string;\n}\n\n/**\n * TabsTrigger — an individual tab button.\n */\nexport const TabsTrigger = forwardRef<HTMLButtonElement, TabsTriggerProps>(\n (\n {\n value,\n icon,\n badge,\n subtitle,\n disabled,\n className,\n children,\n onClick,\n ...props\n },\n ref\n ) => {\n const { activeTab, setActiveTab, variant, size } = useContext(TabsContext);\n const isActive = activeTab === value;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n aria-controls={`panel-${value}`}\n id={`tab-${value}`}\n disabled={disabled}\n data-state={isActive ? 'active' : 'inactive'}\n tabIndex={isActive ? 0 : -1}\n onClick={(e) => {\n setActiveTab(value);\n onClick?.(e);\n }}\n className={cn(\n tabTriggerVariants({ variant, size }),\n className,\n )}\n {...props}\n >\n {icon && <Icon name={icon} size=\"sm\" aria-hidden />}\n\n <span className=\"flex flex-col items-center gap-0.5\">\n <span>{children}</span>\n {subtitle && (\n <span className=\"text-label-sm font-normal opacity-60\">{subtitle}</span>\n )}\n </span>\n\n {badge !== undefined && (\n <TabsBadge value={badge} active={isActive} variant={variant} />\n )}\n </button>\n );\n }\n);\n\nTabsTrigger.displayName = 'TabsTrigger';\n\n// ─── TabsContent ──────────────────────────────────────────────────────────────\n\nexport interface TabsContentProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Value matching the TabsTrigger this content belongs to.\n */\n value: string;\n\n /**\n * Keep content in DOM when tab is inactive (default: false).\n * Set to true if you need to preserve state.\n */\n keepMounted?: boolean;\n}\n\n/**\n * TabsContent — the panel shown when its tab is active.\n */\nexport const TabsContent = forwardRef<HTMLDivElement, TabsContentProps>(\n ({ value, keepMounted = false, className, children, ...props }, ref) => {\n const { activeTab } = useContext(TabsContext);\n const isActive = activeTab === value;\n\n if (!isActive && !keepMounted) return null;\n\n return (\n <div\n ref={ref}\n role=\"tabpanel\"\n id={`panel-${value}`}\n aria-labelledby={`tab-${value}`}\n hidden={!isActive}\n tabIndex={0}\n className={cn(\n 'focus-visible:outline-none',\n 'animate-in fade-in-0',\n className,\n )}\n {...props}\n >\n {children}\n </div>\n );\n }\n);\n\nTabsContent.displayName = 'TabsContent';\n\n// ─── StepTabs ─────────────────────────────────────────────────────────────────\n\nexport interface StepTabItem {\n value: string;\n label: string;\n done?: boolean;\n disabled?: boolean;\n}\n\nexport interface StepTabsProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {\n /** Step items. */\n steps: StepTabItem[];\n /** Currently active step value. */\n value: string;\n /** Callback when step is clicked. */\n onChange?: (value: string) => void;\n}\n\n/**\n * StepTabs — wizard/onboarding progress tabs.\n *\n * @example\n * <StepTabs\n * steps={[\n * { value: 'account', label: 'Account', done: true },\n * { value: 'profile', label: 'Profile' },\n * { value: 'plan', label: 'Plan', disabled: true },\n * ]}\n * value=\"profile\"\n * onChange={setStep}\n * />\n */\nexport const StepTabs = forwardRef<HTMLDivElement, StepTabsProps>(\n ({ steps, value, onChange, className, ...props }, ref) => {\n return (\n <div\n ref={ref}\n role=\"tablist\"\n className={cn('flex items-center', className)}\n {...props}\n >\n {steps.map((step, i) => {\n const isActive = step.value === value;\n const isDone = step.done;\n const isLast = i === steps.length - 1;\n\n return (\n <div key={step.value} className=\"flex items-center flex-1 last:flex-none\">\n <button\n type=\"button\"\n role=\"tab\"\n aria-selected={isActive}\n disabled={step.disabled}\n onClick={() => !step.disabled && onChange?.(step.value)}\n className={cn(\n 'flex items-center gap-2 text-label-md font-medium',\n 'transition-colors duration-short',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:cursor-not-allowed disabled:opacity-40',\n isDone ? 'text-success' : isActive ? 'text-primary' : 'text-text-disabled',\n )}\n >\n <span className={cn(\n 'size-7 rounded-full flex items-center justify-center text-label-sm font-bold flex-shrink-0',\n isDone ? 'bg-success text-on-success' :\n isActive ? 'bg-primary text-on-primary' :\n 'bg-surface-container text-text-disabled',\n )}>\n {isDone ? <Icon name=\"check\" size=\"sm\" aria-hidden /> : i + 1}\n </span>\n {step.label}\n </button>\n\n {!isLast && (\n <div className={cn(\n 'flex-1 h-px mx-3',\n isDone ? 'bg-success' : 'bg-outline',\n )} />\n )}\n </div>\n );\n })}\n </div>\n );\n }\n);\n\nStepTabs.displayName = 'StepTabs';\n\n// ─── Internal helpers ─────────────────────────────────────────────────────────\n\nfunction TabsBadge({\n value,\n active,\n variant,\n}: {\n value: number | boolean;\n active: boolean;\n variant: TabsListVariantProps['variant'];\n}) {\n const isDot = value === true || value === 0;\n const isDark = variant === 'bordered' || variant === 'floating' || variant === 'gradient';\n\n if (isDot) {\n return (\n <span\n aria-hidden=\"true\"\n className=\"size-2 rounded-full bg-error flex-shrink-0\"\n />\n );\n }\n\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'inline-flex items-center justify-center min-w-[18px] h-[18px] px-1 rounded-full',\n 'text-[10px] font-semibold flex-shrink-0',\n active && isDark\n ? 'bg-white/20 text-current'\n : active\n ? 'bg-primary/15 text-primary'\n : 'bg-surface-container text-text-secondary',\n )}\n >\n {typeof value === 'number' && value > 99 ? '99+' : value}\n </span>\n );\n}","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Accordion variants — CVA configuration.\n *\n * Variants: default, bordered, filled, card, flush, separated, gradient, plus, numbered, image\n */\nexport const accordionItemVariants = cva(\n ['w-full transition-all duration-short ease-standard'],\n {\n variants: {\n variant: {\n default: 'border-b border-outline-variant',\n bordered: 'border-b border-outline-variant last:border-b-0',\n filled: 'rounded-lg mb-1.5',\n card: 'border-[1.5px] border-outline rounded-lg mb-2 overflow-hidden',\n flush: 'mb-1',\n separated: 'border-[1.5px] border-outline rounded-lg mb-2 overflow-hidden',\n gradient: 'rounded-lg mb-2 overflow-hidden bg-background border-[1.5px] border-outline',\n plus: 'border-b border-outline-variant',\n numbered: 'border-b border-outline-variant',\n image: 'rounded-xl mb-3 overflow-hidden border-[1.5px] border-outline bg-background hover:border-primary/30 hover:shadow-sm',\n },\n open: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n { variant: 'filled', open: true, class: 'bg-primary-container/20' },\n { variant: 'filled', open: false, class: 'bg-surface-variant' },\n { variant: 'card', open: true, class: 'border-primary' },\n { variant: 'separated', open: true, class: 'border-primary shadow-[0_0_0_3px_rgba(37,99,235,0.08)]' },\n { variant: 'gradient', open: true, class: 'border-0 shadow-lg shadow-primary/20' },\n { variant: 'gradient', open: false, class: 'border-[1.5px] border-outline' },\n { variant: 'image', open: true, class: 'border-[1.5px] border-primary shadow-md shadow-primary/10' },\n ],\n defaultVariants: {\n variant: 'default',\n open: false,\n },\n }\n);\n\nexport const accordionTriggerVariants = cva(\n [\n 'w-full flex items-center gap-3',\n 'font-medium cursor-pointer select-none',\n 'transition-all duration-short ease-standard',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'disabled:pointer-events-none disabled:opacity-40',\n ],\n {\n variants: {\n variant: {\n default: 'py-3.5 hover:text-primary',\n bordered: 'px-4 py-3.5 hover:text-primary',\n filled: 'px-4 py-3 rounded-lg hover:text-primary',\n card: 'px-4 py-3.5 hover:text-primary',\n flush: 'py-2.5 rounded-lg hover:bg-surface-variant px-2',\n separated: 'px-4 py-3.5 hover:text-primary',\n gradient: 'px-4 py-3.5 hover:bg-surface-variant',\n plus: 'py-3.5 hover:text-primary',\n numbered: 'py-3.5 hover:text-primary',\n image: 'p-0 w-full text-left hover:bg-transparent',\n },\n open: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n { variant: 'gradient', open: true, class: 'bg-gradient-to-r from-primary via-secondary to-primary bg-[length:200%_100%] text-on-primary px-4 py-4' },\n { variant: 'gradient', open: false, class: 'text-text-primary' },\n ],\n defaultVariants: {\n variant: 'default',\n open: false,\n },\n }\n);\n\nexport const accordionContentVariants = cva(\n ['text-body-md text-text-secondary overflow-hidden transition-all duration-medium ease-standard'],\n {\n variants: {\n variant: {\n default: 'pb-3.5',\n bordered: 'px-4 pb-3.5',\n filled: 'px-4 pb-3.5',\n card: 'px-4 pb-3.5 pt-3 border-t border-outline-variant',\n flush: 'pb-2.5 pl-2',\n separated: 'px-4 pb-3.5',\n gradient: 'px-4 py-4 bg-background border-x-2 border-b-2 border-primary/30 rounded-b-lg',\n plus: 'pb-3.5',\n numbered: 'pb-3.5 pl-10',\n image: 'px-5 pb-5 pt-2',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport type AccordionItemVariantProps = VariantProps<typeof accordionItemVariants>;\nexport type AccordionVariant = 'default' | 'bordered' | 'filled' | 'card' | 'flush' | 'separated' | 'gradient' | 'plus' | 'numbered' | 'image';","import {\n forwardRef,\n useState,\n useRef,\n useEffect,\n createContext,\n useContext,\n useId,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon, type IconName } from '../Icon';\nimport {\n accordionItemVariants,\n accordionTriggerVariants,\n accordionContentVariants,\n type AccordionVariant,\n} from './Accordion.variants';\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface AccordionContextValue {\n openItems: string[];\n toggleItem: (id: string) => void;\n variant: AccordionVariant;\n iconStyle: 'chevron' | 'plus' | 'arrow' | 'none';\n}\n\nconst AccordionContext = createContext<AccordionContextValue>({\n openItems: [],\n toggleItem: () => {},\n variant: 'default',\n iconStyle: 'chevron',\n});\n\n// ─── Accordion (root) ─────────────────────────────────────────────────────────\n\nexport interface AccordionProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Visual variant.\n * - `default` → underline divider between items\n * - `bordered` → full border around the group\n * - `filled` → tonal background on items\n * - `card` → each item is a card\n * - `flush` → no borders, hover highlight\n * - `separated` → separated cards with focus ring\n * - `gradient` → brand gradient header when open\n * - `plus` → FAQ style with +/- icon\n * - `numbered` → step numbers (onboarding)\n * - `image` → image/icon side panel\n */\n variant?: AccordionVariant;\n\n /**\n * Selection mode.\n * - `single` → only one item open at a time (default)\n * - `multiple` → many items can be open simultaneously\n */\n mode?: 'single' | 'multiple';\n\n /**\n * Default open item(s). Use value prop of AccordionItem.\n */\n defaultValue?: string | string[];\n\n /**\n * Controlled open items.\n */\n value?: string | string[];\n\n /**\n * Callback when open items change.\n */\n onValueChange?: (value: string | string[]) => void;\n\n /**\n * Icon style for the expand indicator.\n * - `chevron` → rotating chevron (default)\n * - `plus` → +/- toggle\n * - `arrow` → right arrow\n * - `none` → no icon\n */\n iconStyle?: 'chevron' | 'plus' | 'arrow' | 'none';\n}\n\n/**\n * Accordion — collapsible content sections.\n *\n * Features beyond M3:\n * - 10 variants: default, bordered, filled, card, flush, separated, gradient, plus, numbered, image\n * - single and multiple open modes\n * - 4 icon styles: chevron, plus, arrow, none\n * - badge and subtitle on triggers\n * - icon/image in trigger\n * - nested accordions\n * - smooth height animation\n * - full keyboard navigation\n *\n * @example\n * <Accordion defaultValue=\"item-1\">\n * <AccordionItem value=\"item-1\" title=\"What is this?\">\n * Content here\n * </AccordionItem>\n * <AccordionItem value=\"item-2\" title=\"How does it work?\">\n * More content\n * </AccordionItem>\n * </Accordion>\n */\nexport const Accordion = forwardRef<HTMLDivElement, AccordionProps>(\n (\n {\n variant = 'default',\n mode = 'single',\n defaultValue,\n value: controlledValue,\n onValueChange,\n iconStyle = 'chevron',\n className,\n children,\n ...props\n },\n ref\n ) => {\n const getInitialOpen = () => {\n if (defaultValue) {\n return Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n }\n return [];\n };\n\n const [internalOpen, setInternalOpen] = useState<string[]>(getInitialOpen);\n\n const openItems = controlledValue !== undefined\n ? Array.isArray(controlledValue) ? controlledValue : [controlledValue]\n : internalOpen;\n\n function toggleItem(id: string) {\n let next: string[];\n if (openItems.includes(id)) {\n next = openItems.filter(i => i !== id);\n } else {\n next = mode === 'single' ? [id] : [...openItems, id];\n }\n\n if (!controlledValue) setInternalOpen(next);\n onValueChange?.(mode === 'single' ? (next[0] ?? '') : next);\n }\n\n const wrapperClass =\n variant === 'bordered'\n ? 'border-[1.5px] border-outline rounded-lg overflow-hidden'\n : variant === 'flush'\n ? 'overflow-hidden'\n : '';\n\n return (\n <AccordionContext.Provider value={{ openItems, toggleItem, variant, iconStyle }}>\n <div\n ref={ref}\n className={cn(wrapperClass, className)}\n {...props}\n >\n {children}\n </div>\n </AccordionContext.Provider>\n );\n }\n);\n\nAccordion.displayName = 'Accordion';\n\n// ─── AccordionItem ────────────────────────────────────────────────────────────\n\nexport interface AccordionItemProps extends ComponentPropsWithoutRef<'div'> {\n /** Unique identifier for this item. */\n value: string;\n\n /** Title shown in the trigger button. */\n title: string;\n\n /** Subtitle shown below the title. */\n subtitle?: string;\n\n /** Leading icon in the trigger. */\n icon?: IconName;\n\n /** Background color for the icon container. */\n iconBg?: string;\n\n /** Image/emoji shown in a side panel (for image variant). */\n image?: string;\n\n /** Image description for accessibility. */\n imageAlt?: string;\n\n /** Badge shown in the trigger. */\n badge?: string;\n\n /** Badge color. */\n badgeColor?: 'default' | 'error' | 'success' | 'warning';\n\n /** Step number (for numbered variant). */\n step?: number;\n\n /** Whether this item is disabled. */\n disabled?: boolean;\n\n /** Content shown when open. */\n children?: ReactNode;\n}\n\n/**\n * AccordionItem — a single collapsible section.\n */\nexport const AccordionItem = forwardRef<HTMLDivElement, AccordionItemProps>(\n (\n {\n value,\n title,\n subtitle,\n icon,\n iconBg,\n image,\n imageAlt,\n badge,\n badgeColor = 'default',\n step,\n disabled,\n className,\n children,\n ...props\n },\n ref\n ) => {\n const { openItems, toggleItem, variant, iconStyle } = useContext(AccordionContext);\n const isOpen = openItems.includes(value);\n const triggerId = useId();\n const contentId = useId();\n\n const badgeColorMap = {\n default: 'bg-secondary-container text-on-secondary-container',\n error: 'bg-error-container text-on-error-container',\n success: 'bg-success-container text-on-success-container',\n warning: 'bg-warning-container text-on-warning-container',\n };\n\n // Resolve expand icon\n function renderIcon() {\n if (iconStyle === 'none') return null;\n\n if (iconStyle === 'plus') {\n return (\n <span className={cn(\n 'size-6 rounded-md flex items-center justify-center flex-shrink-0',\n 'transition-colors duration-short',\n isOpen\n ? 'bg-secondary-container text-on-secondary-container'\n : 'bg-surface-container text-text-secondary',\n )}>\n <Icon name={isOpen ? 'minus' : 'plus'} size=\"sm\" aria-hidden />\n </span>\n );\n }\n\n if (iconStyle === 'arrow') {\n return (\n <Icon\n name=\"chevron-right\"\n size=\"sm\"\n aria-hidden\n className={cn(\n 'flex-shrink-0 text-text-secondary transition-transform duration-medium',\n isOpen && 'rotate-90',\n )}\n />\n );\n }\n\n // Default chevron\n return (\n <Icon\n name=\"chevron-down\"\n size=\"sm\"\n aria-hidden\n className={cn(\n 'flex-shrink-0 transition-transform duration-medium',\n isOpen\n ? 'rotate-180 text-primary'\n : 'text-text-secondary',\n variant === 'gradient' && isOpen && 'text-on-primary',\n )}\n />\n );\n }\n\n return (\n <div\n ref={ref}\n className={cn(\n accordionItemVariants({ variant, open: isOpen }),\n className,\n )}\n {...props}\n >\n {/* Trigger */}\n <button\n id={triggerId}\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={contentId}\n disabled={disabled}\n onClick={() => toggleItem(value)}\n className={cn(accordionTriggerVariants({ variant, open: isOpen }))}\n >\n {/* Image variant — icon + title row */}\n {image && variant === 'image' ? (\n <div className=\"flex items-center gap-4 px-5 py-4 w-full\">\n <div className={cn(\n 'size-11 rounded-xl flex items-center justify-center text-2xl flex-shrink-0',\n 'bg-gradient-to-br from-primary-container to-secondary-container',\n )}>\n <span role=\"img\" aria-label={imageAlt ?? image}>{image}</span>\n </div>\n <div className=\"flex flex-col flex-1 min-w-0 text-left\">\n <span className=\"text-label-lg text-text-primary font-semibold\">{title}</span>\n {subtitle && (\n <span className=\"text-body-sm text-text-secondary mt-0.5\">{subtitle}</span>\n )}\n </div>\n <div className=\"flex-shrink-0 mr-1\">\n {renderIcon()}\n </div>\n </div>\n ) : (\n <>\n {/* Step number */}\n {step !== undefined && (\n <span className={cn(\n 'size-7 rounded-full flex items-center justify-center text-label-sm font-bold flex-shrink-0',\n isOpen\n ? 'bg-primary text-on-primary'\n : 'bg-surface-container text-text-secondary',\n )}>\n {step}\n </span>\n )}\n\n {/* Icon */}\n {icon && (\n <span\n className={cn(\n 'size-8 rounded-lg flex items-center justify-center flex-shrink-0',\n iconBg ?? 'bg-surface-container',\n )}\n >\n <Icon name={icon} size=\"sm\" aria-hidden />\n </span>\n )}\n\n {/* Title + subtitle */}\n <span className=\"flex flex-col text-left flex-1 min-w-0\">\n <span className={cn(\n 'text-label-lg leading-snug',\n variant === 'gradient' && isOpen ? 'text-on-primary' : 'text-text-primary',\n )}>\n {title}\n </span>\n {subtitle && (\n <span className={cn(\n 'text-body-sm mt-0.5',\n variant === 'gradient' && isOpen ? 'text-on-primary/70' : 'text-text-secondary',\n )}>\n {subtitle}\n </span>\n )}\n </span>\n\n {/* Badge */}\n {badge && (\n <span className={cn(\n 'text-label-sm px-2 py-0.5 rounded-full flex-shrink-0',\n badgeColorMap[badgeColor],\n )}>\n {badge}\n </span>\n )}\n\n {/* Expand icon */}\n <span>{renderIcon()}</span>\n </>\n )}\n </button>\n\n {/* Content — animated height */}\n <AnimatedContent isOpen={isOpen} id={contentId} labelledBy={triggerId}>\n <div className={cn(accordionContentVariants({ variant }))}>\n {children}\n </div>\n </AnimatedContent>\n </div>\n );\n }\n);\n\nAccordionItem.displayName = 'AccordionItem';\n\n// ─── AnimatedContent ──────────────────────────────────────────────────────────\n\nfunction AnimatedContent({\n isOpen,\n id,\n labelledBy,\n children,\n}: {\n isOpen: boolean;\n id: string;\n labelledBy: string;\n children: ReactNode;\n}) {\n const ref = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number | 'auto'>(isOpen ? 'auto' : 0);\n\n useEffect(() => {\n const el = ref.current;\n if (!el) return;\n\n if (isOpen) {\n const scrollHeight = el.scrollHeight;\n setHeight(scrollHeight);\n const timer = setTimeout(() => setHeight('auto'), 300);\n return () => clearTimeout(timer);\n } else {\n setHeight(el.scrollHeight);\n requestAnimationFrame(() => {\n requestAnimationFrame(() => setHeight(0));\n });\n }\n }, [isOpen]);\n\n return (\n <div\n ref={ref}\n id={id}\n role=\"region\"\n aria-labelledby={labelledBy}\n hidden={!isOpen && height === 0}\n style={{\n height: height === 'auto' ? 'auto' : height,\n overflow: 'hidden',\n transition: 'height 250ms cubic-bezier(0.2, 0, 0, 1)',\n }}\n >\n {children}\n </div>\n );\n}","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Progress variants — CVA configuration.\n *\n * Variants: default, gradient, glow, striped, thin, segmented\n * Colors: default, secondary, success, warning, error, info\n * Sizes: xs, sm, md, lg, xl\n */\nexport const progressTrackVariants = cva(\n ['relative w-full overflow-hidden rounded-full bg-surface-container'],\n {\n variants: {\n size: {\n xs: 'h-1',\n sm: 'h-1.5',\n md: 'h-2',\n lg: 'h-3',\n xl: 'h-4',\n },\n variant: {\n default: '',\n gradient: '',\n glow: 'overflow-visible',\n striped: '',\n thin: '',\n indeterminate: '',\n bubble: '',\n },\n },\n defaultVariants: {\n size: 'md',\n variant: 'default',\n },\n }\n);\n\nexport const progressFillVariants = cva(\n [\n 'h-full rounded-full',\n 'transition-all duration-500 ease-standard',\n ],\n {\n variants: {\n color: {\n default: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n info: 'bg-info',\n },\n variant: {\n default: '',\n gradient: 'bg-gradient-to-r from-primary to-secondary',\n glow: '',\n striped: '',\n thin: '',\n indeterminate: 'animate-[indeterminate_1.5s_ease-in-out_infinite]',\n bubble: '',\n },\n },\n compoundVariants: [\n // Glow colors\n { variant: 'glow', color: 'default', class: 'bg-primary shadow-[0_0_12px_rgba(37,99,235,0.5)]' },\n { variant: 'glow', color: 'secondary', class: 'bg-secondary shadow-[0_0_12px_rgba(124,58,237,0.5)]' },\n { variant: 'glow', color: 'success', class: 'bg-success shadow-[0_0_12px_rgba(16,185,129,0.5)]' },\n { variant: 'glow', color: 'warning', class: 'bg-warning shadow-[0_0_12px_rgba(245,158,11,0.5)]' },\n { variant: 'glow', color: 'error', class: 'bg-error shadow-[0_0_12px_rgba(239,68,68,0.5)]' },\n\n // Striped animation\n {\n variant: 'striped',\n color: 'default',\n class: [\n 'bg-primary',\n 'bg-[repeating-linear-gradient(45deg,transparent,transparent_10px,rgba(255,255,255,0.15)_10px,rgba(255,255,255,0.15)_20px)]',\n 'bg-[length:28px_100%]',\n 'animate-[stripes_1s_linear_infinite]',\n ],\n },\n ],\n defaultVariants: {\n color: 'default',\n variant: 'default',\n },\n }\n);\n\nexport type ProgressTrackVariantProps = VariantProps<typeof progressTrackVariants>;\nexport type ProgressFillVariantProps = VariantProps<typeof progressFillVariants>;\nexport type ProgressColor = 'default' | 'secondary' | 'success' | 'warning' | 'error' | 'info';\nexport type ProgressVariant = 'default' | 'gradient' | 'glow' | 'striped' | 'thin' | 'indeterminate' | 'bubble';","import { forwardRef, type ComponentPropsWithoutRef } from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n progressTrackVariants,\n progressFillVariants,\n type ProgressTrackVariantProps,\n type ProgressColor,\n type ProgressVariant,\n} from './Progress.variants';\n\n// ─── Progress (linear) ────────────────────────────────────────────────────────\n\nexport interface ProgressProps\n extends ComponentPropsWithoutRef<'div'>,\n ProgressTrackVariantProps {\n /**\n * Progress value 0-100.\n * Omit for indeterminate progress.\n */\n value?: number;\n\n /**\n * Visual variant.\n * - `default` → solid fill\n * - `gradient` → brand gradient fill\n * - `glow` → neon glow effect\n * - `striped` → animated diagonal stripes\n * - `thin` → 2px ultra-minimal line\n * - `indeterminate` → unknown progress, bouncing animation\n * - `bubble` → floating value tooltip on fill\n */\n variant?: ProgressVariant;\n\n /**\n * Color of the progress fill.\n */\n color?: ProgressColor;\n\n /**\n * Size (height) of the progress bar.\n */\n size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n /**\n * Label shown above the progress bar.\n */\n label?: string;\n\n /**\n * Value display format.\n * - `percent` → \"65%\"\n * - `fraction` → \"6.5/10\"\n * - `custom` → use valueLabel prop\n * - `none` → hide value\n */\n showValue?: 'percent' | 'fraction' | 'none';\n\n /**\n * Custom value label (used when showValue=\"fraction\" or custom).\n */\n valueLabel?: string;\n\n /**\n * Helper text shown below the bar.\n */\n helperText?: string;\n\n /**\n * Maximum value (default: 100).\n */\n max?: number;\n}\n\n/**\n * Progress — a linear progress indicator.\n *\n * Features beyond M3:\n * - 7 variants: default, gradient, glow, striped, thin, indeterminate, bubble\n * - 6 colors\n * - 5 sizes\n * - label, value display, helper text\n * - bubble tooltip that tracks fill position\n * - full ARIA support\n *\n * @example\n * // Basic\n * <Progress value={65} />\n *\n * // Gradient with label\n * <Progress value={75} variant=\"gradient\" label=\"Profile completion\" showValue=\"percent\" />\n *\n * // Indeterminate\n * <Progress variant=\"indeterminate\" label=\"Loading...\" />\n *\n * // Glow\n * <Progress value={85} variant=\"glow\" color=\"success\" />\n */\nexport const Progress = forwardRef<HTMLDivElement, ProgressProps>(\n (\n {\n value,\n variant = 'default',\n color = 'default',\n size = 'md',\n label,\n showValue = 'none',\n valueLabel,\n helperText,\n max = 100,\n className,\n ...props\n },\n ref\n ) => {\n const pct = value !== undefined ? Math.min(Math.max(value, 0), max) : 0;\n const pctDisplay = Math.round((pct / max) * 100);\n const isIndeterminate = variant === 'indeterminate' || value === undefined;\n\n const displayValue = valueLabel\n ?? (showValue === 'percent' ? `${pctDisplay}%` : undefined);\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5 w-full', className)} {...props}>\n\n {/* Label + value row */}\n {(label || (showValue !== 'none' && displayValue)) && (\n <div className=\"flex items-center justify-between gap-2\">\n {label && (\n <span className=\"text-label-md text-text-primary\">{label}</span>\n )}\n {showValue !== 'none' && displayValue && (\n <span className=\"text-label-sm text-text-secondary tabular-nums\">\n {displayValue}\n </span>\n )}\n </div>\n )}\n\n {/* Track */}\n <div\n role=\"progressbar\"\n aria-valuenow={isIndeterminate ? undefined : pct}\n aria-valuemin={0}\n aria-valuemax={max}\n aria-label={label}\n aria-valuetext={displayValue}\n className={cn(\n progressTrackVariants({ size, variant }),\n variant === 'thin' && 'h-px bg-outline-variant',\n variant === 'bubble' && 'overflow-visible',\n )}\n >\n {/* Bubble variant wrapper */}\n {variant === 'bubble' ? (\n <div\n className={cn(progressFillVariants({ color, variant: 'default' }), 'relative')}\n style={{ width: isIndeterminate ? '100%' : `${pctDisplay}%` }}\n >\n {/* Floating bubble */}\n <div className=\"absolute -top-8 right-0 translate-x-1/2 z-10\">\n <div className=\"bg-on-surface text-surface text-label-sm px-2 py-1 rounded-lg whitespace-nowrap shadow-md\">\n {pctDisplay}%\n </div>\n <div className=\"w-0 h-0 border-l-[5px] border-r-[5px] border-t-[5px] border-l-transparent border-r-transparent border-t-on-surface mx-auto\" />\n </div>\n </div>\n ) : (\n <div\n className={cn(progressFillVariants({ color, variant }))}\n style={{\n width: isIndeterminate ? '40%' : `${pctDisplay}%`,\n }}\n />\n )}\n </div>\n\n {/* Helper text */}\n {helperText && (\n <p className=\"text-body-sm text-text-secondary\">{helperText}</p>\n )}\n </div>\n );\n }\n);\n\nProgress.displayName = 'Progress';\n\n// ─── SegmentedProgress ────────────────────────────────────────────────────────\n\nexport interface SegmentedProgressProps extends ComponentPropsWithoutRef<'div'> {\n /** Total number of segments. */\n total: number;\n /** Number of filled segments. */\n value: number;\n /** Color of filled segments. */\n color?: ProgressColor;\n /** Size of each segment. */\n size?: 'sm' | 'md' | 'lg';\n /** Label shown above. */\n label?: string;\n /** Custom color per segment index. */\n segmentColors?: Partial<Record<number, ProgressColor>>;\n}\n\n/**\n * SegmentedProgress — discrete steps shown as individual pills.\n *\n * @example\n * <SegmentedProgress total={5} value={3} label=\"Step 3 of 5\" />\n */\nexport const SegmentedProgress = forwardRef<HTMLDivElement, SegmentedProgressProps>(\n ({ total, value, color = 'default', size = 'md', label, segmentColors, className, ...props }, ref) => {\n const colorMap: Record<ProgressColor, string> = {\n default: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n info: 'bg-info',\n };\n\n const heightMap = { sm: 'h-1.5', md: 'h-2', lg: 'h-3' };\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5', className)} {...props}>\n {label && (\n <div className=\"flex items-center justify-between\">\n <span className=\"text-label-md text-text-primary\">{label}</span>\n <span className=\"text-label-sm text-text-secondary\">{value} / {total}</span>\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-valuenow={value}\n aria-valuemin={0}\n aria-valuemax={total}\n className=\"flex gap-1\"\n >\n {Array.from({ length: total }).map((_, i) => {\n const segColor = segmentColors?.[i] ?? color;\n const filled = i < value;\n return (\n <div\n key={i}\n className={cn(\n 'flex-1 rounded-full transition-all duration-300',\n heightMap[size],\n filled ? colorMap[segColor] : 'bg-surface-container',\n )}\n style={{ transitionDelay: `${i * 50}ms` }}\n />\n );\n })}\n </div>\n </div>\n );\n }\n);\n\nSegmentedProgress.displayName = 'SegmentedProgress';\n\n// ─── CircularProgress ─────────────────────────────────────────────────────────\n\nexport interface CircularProgressProps extends ComponentPropsWithoutRef<'div'> {\n /** Progress value 0-100. */\n value?: number;\n /** Size in pixels. */\n size?: number;\n /** Stroke width. */\n strokeWidth?: number;\n /** Color of the progress arc. */\n color?: ProgressColor;\n /** Whether to show value in center. */\n showValue?: boolean;\n /** Custom label inside circle. */\n centerLabel?: string;\n /** Use gradient stroke. */\n gradient?: boolean;\n}\n\n/**\n * CircularProgress — a circular progress indicator.\n *\n * @example\n * <CircularProgress value={75} showValue />\n * <CircularProgress value={85} color=\"success\" size={80} />\n */\nexport const CircularProgress = forwardRef<HTMLDivElement, CircularProgressProps>(\n (\n {\n value,\n size = 80,\n strokeWidth = 8,\n color = 'default',\n showValue = true,\n centerLabel,\n gradient = false,\n className,\n ...props\n },\n ref\n ) => {\n const radius = (size - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const pct = value !== undefined ? Math.min(Math.max(value, 0), 100) : 0;\n const offset = circumference - (pct / 100) * circumference;\n const gradientId = `progress-gradient-${Math.random().toString(36).slice(2)}`;\n\n const strokeColorMap: Record<ProgressColor, string> = {\n default: '#2563EB',\n secondary: '#7C3AED',\n success: '#10B981',\n warning: '#F59E0B',\n error: '#EF4444',\n info: '#3B82F6',\n };\n\n const strokeColor = gradient ? `url(#${gradientId})` : strokeColorMap[color];\n\n return (\n <div\n ref={ref}\n className={cn('relative inline-flex items-center justify-center', className)}\n style={{ width: size, height: size }}\n role=\"progressbar\"\n aria-valuenow={pct}\n aria-valuemin={0}\n aria-valuemax={100}\n {...props}\n >\n <svg width={size} height={size} viewBox={`0 0 ${size} ${size}`}>\n {gradient && (\n <defs>\n <linearGradient id={gradientId} x1=\"0%\" y1=\"0%\" x2=\"100%\" y2=\"0%\">\n <stop offset=\"0%\" stopColor=\"#2563EB\" />\n <stop offset=\"100%\" stopColor=\"#7C3AED\" />\n </linearGradient>\n </defs>\n )}\n {/* Track */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n strokeWidth={strokeWidth}\n className=\"stroke-surface-container\"\n />\n {/* Fill */}\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke={strokeColor}\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n style={{\n transformOrigin: `${size / 2}px ${size / 2}px`,\n transform: 'rotate(-90deg)',\n transition: 'stroke-dashoffset 600ms cubic-bezier(0.2,0,0,1)',\n }}\n />\n </svg>\n\n {/* Center content */}\n {(showValue || centerLabel) && (\n <div className=\"absolute inset-0 flex flex-col items-center justify-center\">\n {centerLabel ? (\n <span className=\"text-label-md text-text-primary font-semibold\">{centerLabel}</span>\n ) : (\n <span\n className=\"font-bold text-text-primary tabular-nums\"\n style={{ fontSize: size * 0.2 }}\n >\n {pct}%\n </span>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nCircularProgress.displayName = 'CircularProgress';\n\n// ─── MultiProgress (stacked bar) ─────────────────────────────────────────────\n\nexport interface MultiProgressSegment {\n value: number;\n color: ProgressColor;\n label?: string;\n}\n\nexport interface MultiProgressProps extends ComponentPropsWithoutRef<'div'> {\n /** Array of segments. Values should sum to 100. */\n segments: MultiProgressSegment[];\n /** Size of the bar. */\n size?: 'sm' | 'md' | 'lg';\n /** Show legend below. */\n showLegend?: boolean;\n /** Label shown above. */\n label?: string;\n}\n\n/**\n * MultiProgress — a stacked multi-color progress bar.\n *\n * @example\n * <MultiProgress\n * segments={[\n * { value: 45, color: 'default', label: 'Design' },\n * { value: 30, color: 'secondary', label: 'Dev' },\n * { value: 25, color: 'success', label: 'QA' },\n * ]}\n * showLegend\n * />\n */\nexport const MultiProgress = forwardRef<HTMLDivElement, MultiProgressProps>(\n ({ segments, size = 'md', showLegend, label, className, ...props }, ref) => {\n const colorMap: Record<ProgressColor, string> = {\n default: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n info: 'bg-info',\n };\n\n const dotColorMap: Record<ProgressColor, string> = {\n default: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n info: 'bg-info',\n };\n\n const heightMap = { sm: 'h-1.5', md: 'h-2.5', lg: 'h-3.5' };\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-2', className)} {...props}>\n {label && <span className=\"text-label-md text-text-primary\">{label}</span>}\n <div\n className={cn('flex w-full rounded-full overflow-hidden', heightMap[size])}\n role=\"progressbar\"\n >\n {segments.map((seg, i) => (\n <div\n key={i}\n className={cn(colorMap[seg.color], 'transition-all duration-500')}\n style={{\n width: `${seg.value}%`,\n transitionDelay: `${i * 100}ms`,\n }}\n />\n ))}\n <div className=\"flex-1 bg-surface-container\" />\n </div>\n {showLegend && (\n <div className=\"flex flex-wrap gap-3\">\n {segments.map((seg, i) => (\n <div key={i} className=\"flex items-center gap-1.5\">\n <span className={cn('size-2 rounded-full flex-shrink-0', dotColorMap[seg.color])} />\n <span className=\"text-label-sm text-text-secondary\">\n {seg.label} {seg.value}%\n </span>\n </div>\n ))}\n </div>\n )}\n </div>\n );\n }\n);\n\nMultiProgress.displayName = 'MultiProgress';\n\n","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * DropdownMenu variants — CVA configuration.\n */\nexport const menuVariants = cva(\n [\n 'z-50 min-w-[160px] overflow-hidden rounded-lg p-1',\n 'border shadow-lg',\n 'transition-all duration-short ease-standard',\n 'focus-visible:outline-none',\n ],\n {\n variants: {\n theme: {\n light: 'bg-background border-outline text-text-primary',\n dark: 'bg-on-surface border-surface-variant text-surface',\n },\n },\n defaultVariants: {\n theme: 'light',\n },\n }\n);\n\nexport const menuItemVariants = cva(\n [\n 'relative flex w-full items-center gap-2',\n 'rounded-md px-2.5 py-2',\n 'text-label-md cursor-pointer select-none',\n 'transition-colors duration-instant ease-standard',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n 'disabled:pointer-events-none disabled:opacity-40',\n ],\n {\n variants: {\n theme: {\n light: 'text-text-primary hover:bg-surface-variant',\n dark: 'text-surface hover:bg-white/10',\n },\n intent: {\n default: '',\n danger: '',\n active: '',\n },\n },\n compoundVariants: [\n { theme: 'light', intent: 'danger', class: 'text-error hover:bg-error-container/30' },\n { theme: 'light', intent: 'active', class: 'bg-primary-container/20 text-primary' },\n { theme: 'dark', intent: 'danger', class: 'text-error hover:bg-error/20' },\n { theme: 'dark', intent: 'active', class: 'bg-white/15 text-white' },\n ],\n defaultVariants: {\n theme: 'light',\n intent: 'default',\n },\n }\n);\n\nexport type MenuVariantProps = VariantProps<typeof menuVariants>;\nexport type MenuItemVariantProps = VariantProps<typeof menuItemVariants>;\nexport type MenuTheme = 'light' | 'dark';","import {\n forwardRef,\n useState,\n useRef,\n useEffect,\n createContext,\n useContext,\n type ComponentPropsWithoutRef,\n type ReactNode,\n type KeyboardEvent,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/cn';\nimport { Icon, type IconName } from '../Icon';\nimport { Avatar } from '../Avatar';\nimport {\n menuVariants,\n menuItemVariants,\n type MenuTheme,\n} from './DropdownMenu.variants';\n\n// ─── Context ──────────────────────────────────────────────────────────────────\n\ninterface MenuContextValue {\n close: () => void;\n theme: MenuTheme;\n}\n\nconst MenuContext = createContext<MenuContextValue>({\n close: () => {},\n theme: 'light',\n});\n\n// ─── useMenuPosition ──────────────────────────────────────────────────────────\n\nfunction useMenuPosition(\n triggerRef: React.RefObject<HTMLElement | null>,\n open: boolean,\n align: 'start' | 'end' | 'center',\n side: 'bottom' | 'top' | 'left' | 'right',\n) {\n const [pos, setPos] = useState({ top: 0, left: 0 });\n\n useEffect(() => {\n if (!open || !triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n const gap = 4;\n\n let top = 0;\n let left = 0;\n\n if (side === 'bottom') {\n top = rect.bottom + gap + window.scrollY;\n if (align === 'start') left = rect.left + window.scrollX;\n else if (align === 'end') left = rect.right + window.scrollX;\n else left = rect.left + rect.width / 2 + window.scrollX;\n } else if (side === 'top') {\n top = rect.top - gap + window.scrollY;\n left = rect.left + window.scrollX;\n }\n\n setPos({ top, left });\n }, [open, triggerRef, align, side]);\n\n return pos;\n}\n\n// ─── DropdownMenu ─────────────────────────────────────────────────────────────\n\nexport interface DropdownMenuProps {\n /**\n * The trigger element. Usually a Button or IconButton.\n */\n trigger: ReactNode;\n\n /**\n * Menu content — use MenuItem, MenuSeparator, MenuGroup etc.\n */\n children: ReactNode;\n\n /**\n * Visual theme.\n */\n theme?: MenuTheme;\n\n /**\n * Horizontal alignment of the menu relative to the trigger.\n */\n align?: 'start' | 'end' | 'center';\n\n /**\n * Which side of the trigger to open on.\n */\n side?: 'bottom' | 'top';\n\n /**\n * Whether the menu is open (controlled).\n */\n open?: boolean;\n\n /**\n * Callback when open state changes.\n */\n onOpenChange?: (open: boolean) => void;\n\n /**\n * Min width of the menu.\n */\n minWidth?: number;\n\n className?: string;\n}\n\n/**\n * DropdownMenu — a floating panel of actions triggered by a button.\n *\n * Features beyond M3:\n * - light and dark themes\n * - search filter inside menu\n * - checkbox and radio items\n * - submenu support\n * - header with user info\n * - emoji reactions\n * - color picker\n * - avatar team picker\n * - keyboard navigation (arrows, enter, escape, tab)\n * - portal rendering\n * - close on outside click and escape\n *\n * @example\n * <DropdownMenu trigger={<Button>Options</Button>}>\n * <MenuItem icon=\"edit\" shortcut=\"⌘E\">Edit</MenuItem>\n * <MenuItem icon=\"copy\">Duplicate</MenuItem>\n * <MenuSeparator />\n * <MenuItem icon=\"trash\" intent=\"danger\">Delete</MenuItem>\n * </DropdownMenu>\n */\nexport function DropdownMenu({\n trigger,\n children,\n theme = 'light',\n align = 'start',\n side = 'bottom',\n open: controlledOpen,\n onOpenChange,\n minWidth = 180,\n className,\n}: DropdownMenuProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const isOpen = controlledOpen ?? internalOpen;\n const triggerRef = useRef<HTMLDivElement>(null);\n const menuRef = useRef<HTMLDivElement>(null);\n const pos = useMenuPosition(triggerRef, isOpen, align, side);\n\n function setOpen(val: boolean) {\n if (controlledOpen === undefined) setInternalOpen(val);\n onOpenChange?.(val);\n }\n\n function close() { setOpen(false); }\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen) return;\n function handle(e: MouseEvent) {\n if (\n menuRef.current?.contains(e.target as Node) ||\n triggerRef.current?.contains(e.target as Node)\n ) return;\n close();\n }\n document.addEventListener('mousedown', handle);\n return () => document.removeEventListener('mousedown', handle);\n }, [isOpen]);\n\n // Close on escape\n useEffect(() => {\n if (!isOpen) return;\n function handle(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') close();\n }\n document.addEventListener('keydown', handle);\n return () => document.removeEventListener('keydown', handle);\n }, [isOpen]);\n\n // Keyboard nav inside menu\n function handleMenuKeyDown(e: KeyboardEvent<HTMLDivElement>) {\n const items = Array.from(\n menuRef.current?.querySelectorAll<HTMLElement>('[role=\"menuitem\"]:not([disabled])') ?? []\n );\n const current = items.findIndex(i => i === document.activeElement);\n\n if (e.key === 'ArrowDown') {\n e.preventDefault();\n items[(current + 1) % items.length]?.focus();\n } else if (e.key === 'ArrowUp') {\n e.preventDefault();\n items[(current - 1 + items.length) % items.length]?.focus();\n } else if (e.key === 'Home') {\n e.preventDefault();\n items[0]?.focus();\n } else if (e.key === 'End') {\n e.preventDefault();\n items[items.length - 1]?.focus();\n }\n }\n\n const transformOrigin = align === 'end'\n ? 'top right'\n : align === 'center'\n ? 'top center'\n : 'top left';\n\n const menuLeft = align === 'end'\n ? pos.left\n : align === 'center'\n ? pos.left\n : pos.left;\n\n return (\n <MenuContext.Provider value={{ close, theme }}>\n <div ref={triggerRef} className=\"inline-flex\" style={{ position: 'relative' }}>\n <div onClick={() => setOpen(!isOpen)} className=\"inline-flex\">\n {trigger}\n </div>\n </div>\n\n {isOpen && createPortal(\n <div\n ref={menuRef}\n onKeyDown={handleMenuKeyDown}\n className={cn(\n menuVariants({ theme }),\n 'animate-in fade-in-0 zoom-in-95',\n className,\n )}\n style={{\n position: 'absolute',\n top: pos.top,\n left: menuLeft,\n minWidth,\n transformOrigin,\n zIndex: 9999,\n ...(align === 'end' ? { transform: 'translateX(-100%)' } : {}),\n }}\n role=\"menu\"\n aria-orientation=\"vertical\"\n >\n <div className=\"space-y-0.5\">\n {children}\n </div>\n </div>,\n document.body\n )}\n </MenuContext.Provider>\n );\n}\n\n// ─── MenuItem ─────────────────────────────────────────────────────────────────\n\nexport interface MenuItemProps extends ComponentPropsWithoutRef<'button'> {\n /** Leading icon. */\n icon?: IconName;\n /** Keyboard shortcut label. */\n shortcut?: string;\n /** Danger/destructive style. */\n intent?: 'default' | 'danger' | 'active';\n /** Badge count. */\n badge?: number | string;\n /** Description below the label. */\n description?: string;\n /** Whether to close menu on click. Default: true */\n closeOnClick?: boolean;\n /** Arrow indicating submenu. */\n hasSubmenu?: boolean;\n}\n\n/**\n * MenuItem — a single action in the dropdown menu.\n */\nexport const MenuItem = forwardRef<HTMLButtonElement, MenuItemProps>(\n (\n {\n icon,\n shortcut,\n intent = 'default',\n badge,\n description,\n closeOnClick = true,\n hasSubmenu,\n disabled,\n className,\n children,\n onClick,\n ...props\n },\n ref\n ) => {\n const { close, theme } = useContext(MenuContext);\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"menuitem\"\n disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n onClick={(e) => {\n onClick?.(e);\n if (closeOnClick && !hasSubmenu) close();\n }}\n className={cn(menuItemVariants({ theme, intent }), className)}\n {...props}\n >\n {icon && (\n <Icon\n name={icon}\n size=\"sm\"\n aria-hidden\n className={cn(\n 'flex-shrink-0',\n intent === 'danger' ? 'text-error' :\n intent === 'active' ? 'text-primary' :\n theme === 'dark' ? 'text-surface/60' : 'text-text-secondary',\n )}\n />\n )}\n\n <span className=\"flex flex-col flex-1 min-w-0 text-left\">\n <span className=\"truncate\">{children}</span>\n {description && (\n <span className={cn(\n 'text-body-sm truncate',\n theme === 'dark' ? 'text-surface/50' : 'text-text-secondary',\n )}>\n {description}\n </span>\n )}\n </span>\n\n {badge !== undefined && (\n <span className=\"inline-flex items-center justify-center min-w-[18px] h-[18px] px-1 rounded-full text-[10px] font-semibold bg-error text-on-error flex-shrink-0\">\n {typeof badge === 'number' && badge > 99 ? '99+' : badge}\n </span>\n )}\n\n {shortcut && (\n <span className={cn(\n 'text-label-sm font-mono flex-shrink-0',\n theme === 'dark' ? 'text-surface/40' : 'text-text-disabled',\n )}>\n {shortcut}\n </span>\n )}\n\n {hasSubmenu && (\n <Icon name=\"chevron-right\" size=\"sm\" aria-hidden className=\"flex-shrink-0 text-text-secondary\" />\n )}\n </button>\n );\n }\n);\n\nMenuItem.displayName = 'MenuItem';\n\n// ─── MenuCheckboxItem ─────────────────────────────────────────────────────────\n\nexport interface MenuCheckboxItemProps extends Omit<MenuItemProps, 'intent'> {\n checked?: boolean;\n onCheckedChange?: (checked: boolean) => void;\n}\n\n/**\n * MenuCheckboxItem — a toggleable checkbox item.\n */\nexport const MenuCheckboxItem = forwardRef<HTMLButtonElement, MenuCheckboxItemProps>(\n ({ checked, onCheckedChange, children, closeOnClick = false, ...props }, ref) => {\n return (\n <MenuItem\n ref={ref}\n role=\"menuitemcheckbox\"\n aria-checked={checked}\n closeOnClick={closeOnClick}\n onClick={() => onCheckedChange?.(!checked)}\n intent={checked ? 'active' : 'default'}\n {...props}\n >\n <span className=\"flex items-center gap-2 w-full\">\n <span className={cn(\n 'size-4 flex items-center justify-center flex-shrink-0',\n checked ? 'text-primary' : 'text-transparent',\n )}>\n <Icon name=\"check\" size=\"sm\" aria-hidden />\n </span>\n {children}\n </span>\n </MenuItem>\n );\n }\n);\n\nMenuCheckboxItem.displayName = 'MenuCheckboxItem';\n\n// ─── MenuRadioItem ────────────────────────────────────────────────────────────\n\nexport interface MenuRadioItemProps extends Omit<MenuItemProps, 'intent'> {\n checked?: boolean;\n onSelect?: () => void;\n}\n\n/**\n * MenuRadioItem — a radio selection item.\n */\nexport const MenuRadioItem = forwardRef<HTMLButtonElement, MenuRadioItemProps>(\n ({ checked, onSelect, children, closeOnClick = false, ...props }, ref) => {\n return (\n <MenuItem\n ref={ref}\n role=\"menuitemradio\"\n aria-checked={checked}\n closeOnClick={closeOnClick}\n onClick={onSelect}\n intent={checked ? 'active' : 'default'}\n {...props}\n >\n <span className=\"flex items-center gap-2 w-full\">\n <span className={cn(\n 'size-4 flex items-center justify-center flex-shrink-0',\n )}>\n {checked && (\n <span className=\"size-2 rounded-full bg-primary\" />\n )}\n </span>\n {children}\n </span>\n </MenuItem>\n );\n }\n);\n\nMenuRadioItem.displayName = 'MenuRadioItem';\n\n// ─── MenuSeparator ────────────────────────────────────────────────────────────\n\nexport function MenuSeparator({ className }: { className?: string }) {\n const { theme } = useContext(MenuContext);\n return (\n <div\n role=\"separator\"\n className={cn(\n 'my-1 h-px',\n theme === 'dark' ? 'bg-white/10' : 'bg-outline-variant',\n className,\n )}\n />\n );\n}\n\n// ─── MenuGroup ────────────────────────────────────────────────────────────────\n\nexport function MenuGroup({ label, className, children }: { label?: string; className?: string; children?: ReactNode }) {\n const { theme } = useContext(MenuContext);\n return (\n <div role=\"group\" className={cn('space-y-0.5', className)}>\n {label && (\n <p className={cn(\n 'px-2.5 pt-2 pb-1 text-label-sm uppercase tracking-wider',\n theme === 'dark' ? 'text-surface/40' : 'text-text-disabled',\n )}>\n {label}\n </p>\n )}\n {children}\n </div>\n );\n}\n\n// ─── MenuHeader ───────────────────────────────────────────────────────────────\n\nexport interface MenuHeaderProps {\n name: string;\n email?: string;\n avatarSrc?: string;\n className?: string;\n}\n\n/**\n * MenuHeader — user info shown at the top of profile menus.\n */\nexport function MenuHeader({ name, email, avatarSrc, className }: MenuHeaderProps) {\n const { theme } = useContext(MenuContext);\n return (\n <div className={cn(\n 'flex items-center gap-3 px-3 py-2.5 mb-1',\n 'border-b',\n theme === 'dark' ? 'border-white/10' : 'border-outline-variant',\n className,\n )}>\n {avatarSrc && <Avatar src={avatarSrc} name={name} size=\"sm\" />}\n <div className=\"flex flex-col min-w-0\">\n <span className={cn(\n 'text-label-md font-semibold truncate',\n theme === 'dark' ? 'text-surface' : 'text-text-primary',\n )}>\n {name}\n </span>\n {email && (\n <span className={cn(\n 'text-body-sm truncate',\n theme === 'dark' ? 'text-surface/50' : 'text-text-secondary',\n )}>\n {email}\n </span>\n )}\n </div>\n </div>\n );\n}\n\n// ─── MenuSearch ───────────────────────────────────────────────────────────────\n\nexport interface MenuSearchProps {\n value: string;\n onChange: (value: string) => void;\n placeholder?: string;\n className?: string;\n}\n\n/**\n * MenuSearch — a search input inside the menu.\n */\nexport function MenuSearch({ value, onChange, placeholder = 'Search...', className }: MenuSearchProps) {\n const { theme } = useContext(MenuContext);\n return (\n <div className={cn(\n 'flex items-center gap-2 px-2.5 py-2 mb-1 border-b',\n theme === 'dark' ? 'border-white/10' : 'border-outline-variant',\n className,\n )}>\n <Icon name=\"search\" size=\"sm\" className=\"text-text-secondary flex-shrink-0\" aria-hidden />\n <input\n autoFocus\n type=\"text\"\n value={value}\n onChange={e => onChange(e.target.value)}\n placeholder={placeholder}\n className={cn(\n 'flex-1 bg-transparent border-none outline-none text-body-md',\n theme === 'dark' ? 'text-surface placeholder:text-surface/40' : 'text-text-primary placeholder:text-text-disabled',\n )}\n />\n {value && (\n <button\n type=\"button\"\n onClick={() => onChange('')}\n className=\"text-text-secondary hover:text-text-primary\"\n >\n <Icon name=\"close\" size=\"sm\" aria-hidden />\n </button>\n )}\n </div>\n );\n}\n\n// ─── MenuAvatarItem ───────────────────────────────────────────────────────────\n\nexport interface MenuAvatarItemProps extends Omit<MenuItemProps, 'icon'> {\n name: string;\n avatarSrc?: string;\n role?: string;\n selected?: boolean;\n}\n\n/**\n * MenuAvatarItem — a team member item with avatar.\n */\nexport const MenuAvatarItem = forwardRef<HTMLButtonElement, MenuAvatarItemProps>(\n ({ name, avatarSrc, role: userRole, selected, children, ...props }, ref) => {\n return (\n <MenuItem\n ref={ref}\n intent={selected ? 'active' : 'default'}\n closeOnClick\n {...props}\n >\n <Avatar src={avatarSrc} name={name} size=\"xs\" />\n <span className=\"flex flex-col flex-1 min-w-0 text-left\">\n <span className=\"text-label-md truncate\">{name}</span>\n {userRole && <span className=\"text-body-sm text-text-secondary truncate\">{userRole}</span>}\n </span>\n {selected && <Icon name=\"check\" size=\"sm\" className=\"text-primary flex-shrink-0\" aria-hidden />}\n </MenuItem>\n );\n }\n);\n\nMenuAvatarItem.displayName = 'MenuAvatarItem';\n\n// ─── MenuColorPicker ──────────────────────────────────────────────────────────\n\nexport interface MenuColorPickerProps {\n colors?: string[];\n value?: string;\n onChange?: (color: string) => void;\n className?: string;\n}\n\nconst DEFAULT_COLORS = [\n '#EF4444', '#F59E0B', '#10B981', '#2563EB', '#7C3AED', '#EC4899',\n '#111827', '#6B7280', '#D1D5DB', '#FEF3C7', '#DBEAFE', '#EDE9FE',\n];\n\n/**\n * MenuColorPicker — a color dot grid inside a menu.\n */\nexport function MenuColorPicker({ colors = DEFAULT_COLORS, value, onChange, className }: MenuColorPickerProps) {\n const { close } = useContext(MenuContext);\n return (\n <div className={cn('grid grid-cols-6 gap-1.5 p-2', className)}>\n {colors.map(color => (\n <button\n key={color}\n type=\"button\"\n onClick={() => { onChange?.(color); close(); }}\n className={cn(\n 'size-6 rounded-full transition-transform hover:scale-110 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n value === color && 'ring-2 ring-offset-2 ring-primary',\n )}\n style={{ backgroundColor: color }}\n aria-label={color}\n />\n ))}\n </div>\n );\n}\n\n// ─── MenuEmojiReactions ───────────────────────────────────────────────────────\n\nexport interface MenuEmojiReactionsProps {\n emojis?: string[];\n onReact?: (emoji: string) => void;\n className?: string;\n}\n\nconst DEFAULT_EMOJIS = ['👍', '❤️', '😂', '😮', '😢', '🔥', '➕'];\n\n/**\n * MenuEmojiReactions — a row of emoji reaction buttons.\n */\nexport function MenuEmojiReactions({ emojis = DEFAULT_EMOJIS, onReact, className }: MenuEmojiReactionsProps) {\n const { close } = useContext(MenuContext);\n return (\n <div className={cn('flex gap-1 p-1.5', className)}>\n {emojis.map(emoji => (\n <button\n key={emoji}\n type=\"button\"\n onClick={() => { onReact?.(emoji); close(); }}\n className=\"size-9 rounded-md flex items-center justify-center text-xl hover:bg-surface-variant transition-all hover:scale-125 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring\"\n aria-label={`React with ${emoji}`}\n >\n {emoji}\n </button>\n ))}\n </div>\n );\n}\n\n// ─── ContextMenu ──────────────────────────────────────────────────────────────\n\nexport interface ContextMenuProps {\n children: ReactNode;\n menu: ReactNode;\n theme?: MenuTheme;\n}\n\n/**\n * ContextMenu — shows a menu on right-click.\n *\n * @example\n * <ContextMenu menu={<><MenuItem>Copy</MenuItem><MenuItem>Paste</MenuItem></>}>\n * <div>Right click me</div>\n * </ContextMenu>\n */\nexport function ContextMenu({ children, menu, theme = 'light' }: ContextMenuProps) {\n const [open, setOpen] = useState(false);\n const [pos, setPos] = useState({ x: 0, y: 0 });\n const menuRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (!open) return;\n function handle(e: MouseEvent) {\n if (!menuRef.current?.contains(e.target as Node)) setOpen(false);\n }\n function handleKey(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('mousedown', handle);\n document.addEventListener('keydown', handleKey);\n return () => {\n document.removeEventListener('mousedown', handle);\n document.removeEventListener('keydown', handleKey);\n };\n }, [open]);\n\n function handleContextMenu(e: React.MouseEvent) {\n e.preventDefault();\n setPos({ x: e.clientX + window.scrollX, y: e.clientY + window.scrollY });\n setOpen(true);\n }\n\n return (\n <MenuContext.Provider value={{ close: () => setOpen(false), theme }}>\n <div onContextMenu={handleContextMenu}>\n {children}\n </div>\n {open && createPortal(\n <div\n ref={menuRef}\n className={cn(\n menuVariants({ theme }),\n 'animate-in fade-in-0 zoom-in-95',\n )}\n style={{\n position: 'absolute',\n top: pos.y,\n left: pos.x,\n zIndex: 9999,\n minWidth: 180,\n }}\n role=\"menu\"\n >\n <div className=\"space-y-0.5\">\n {menu}\n </div>\n </div>,\n document.body\n )}\n </MenuContext.Provider>\n );\n}","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Popover variants — CVA configuration.\n */\nexport const popoverVariants = cva(\n [\n 'z-50 rounded-lg border bg-background shadow-lg',\n 'outline-none',\n 'animate-in fade-in-0 zoom-in-95',\n ],\n {\n variants: {\n size: {\n sm: 'w-64 p-3',\n md: 'w-80 p-4',\n lg: 'w-96 p-5',\n auto: 'p-4',\n },\n },\n defaultVariants: {\n size: 'md',\n },\n }\n);\n\nexport type PopoverVariantProps = VariantProps<typeof popoverVariants>;\nexport type PopoverSide = 'top' | 'bottom' | 'left' | 'right';\nexport type PopoverAlign = 'start' | 'center' | 'end';","import {\n useState,\n useRef,\n useEffect,\n type ReactNode,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/cn';\nimport { Icon } from '../Icon';\nimport { popoverVariants, type PopoverVariantProps, type PopoverSide, type PopoverAlign } from './Popover.variants';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface PopoverProps extends PopoverVariantProps {\n /** Trigger element. */\n trigger: ReactNode;\n /** Popover content. */\n children: ReactNode;\n /** Which side to open on. */\n side?: PopoverSide;\n /** Alignment along the side. */\n align?: PopoverAlign;\n /** Show arrow indicator. */\n showArrow?: boolean;\n /** Controlled open state. */\n open?: boolean;\n /** Callback when open changes. */\n onOpenChange?: (open: boolean) => void;\n /** Close on outside click. Default: true */\n closeOnOutside?: boolean;\n /** Close on escape. Default: true */\n closeOnEscape?: boolean;\n /** Additional className for the panel. */\n className?: string;\n /** Offset from trigger in px. */\n offset?: number;\n}\n\n// ─── Popover ──────────────────────────────────────────────────────────────────\n\n/**\n * Popover — a floating interactive panel anchored to a trigger.\n *\n * Unlike Tooltip (read-only) and Dropdown (list of actions),\n * Popover contains rich interactive content like forms, filters,\n * previews, and settings panels.\n *\n * Features:\n * - 4 sides: top, bottom, left, right\n * - 3 alignments: start, center, end\n * - optional arrow indicator\n * - close on outside click + escape\n * - portal rendering\n * - controlled + uncontrolled\n *\n * @example\n * <Popover trigger={<Button>Open</Button>}>\n * <p>Popover content here</p>\n * </Popover>\n */\nexport function Popover({\n trigger,\n children,\n side = 'bottom',\n align = 'start',\n showArrow = true,\n open: controlledOpen,\n onOpenChange,\n closeOnOutside = true,\n closeOnEscape = true,\n size,\n offset = 8,\n className,\n}: PopoverProps) {\n const [internalOpen, setInternalOpen] = useState(false);\n const isOpen = controlledOpen ?? internalOpen;\n const triggerRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const [_arrowPos, _setArrowPos] = useState({ top: 0, left: 0, rotate: '45deg' });\n\n function setOpen(val: boolean) {\n if (controlledOpen === undefined) setInternalOpen(val);\n onOpenChange?.(val);\n }\n\n // Calculate position\n useEffect(() => {\n if (!isOpen || !triggerRef.current) return;\n\n const rect = triggerRef.current.getBoundingClientRect();\n const scrollX = window.scrollX;\n const scrollY = window.scrollY;\n\n let top = 0;\n let left = 0;\n\n if (side === 'bottom') {\n top = rect.bottom + scrollY + offset;\n if (align === 'start') left = rect.left + scrollX;\n else if (align === 'end') left = rect.right + scrollX;\n else left = rect.left + rect.width / 2 + scrollX;\n } else if (side === 'top') {\n top = rect.top + scrollY - offset;\n if (align === 'start') left = rect.left + scrollX;\n else if (align === 'end') left = rect.right + scrollX;\n else left = rect.left + rect.width / 2 + scrollX;\n } else if (side === 'left') {\n left = rect.left + scrollX - offset;\n top = rect.top + scrollY;\n } else if (side === 'right') {\n left = rect.right + scrollX + offset;\n top = rect.top + scrollY;\n }\n\n setPosition({ top, left });\n }, [isOpen, side, align, offset]);\n\n // Close on outside click\n useEffect(() => {\n if (!isOpen || !closeOnOutside) return;\n function handle(e: MouseEvent) {\n if (\n popoverRef.current?.contains(e.target as Node) ||\n triggerRef.current?.contains(e.target as Node)\n ) return;\n setOpen(false);\n }\n document.addEventListener('mousedown', handle);\n return () => document.removeEventListener('mousedown', handle);\n }, [isOpen, closeOnOutside]);\n\n // Close on escape\n useEffect(() => {\n if (!isOpen || !closeOnEscape) return;\n function handle(e: globalThis.KeyboardEvent) {\n if (e.key === 'Escape') setOpen(false);\n }\n document.addEventListener('keydown', handle);\n return () => document.removeEventListener('keydown', handle);\n }, [isOpen, closeOnEscape]);\n\n const transformMap: Record<PopoverSide, Record<PopoverAlign, string>> = {\n bottom: { start: 'translateX(0)', center: 'translateX(-50%)', end: 'translateX(-100%)' },\n top: { start: 'translateX(0) translateY(-100%)', center: 'translateX(-50%) translateY(-100%)', end: 'translateX(-100%) translateY(-100%)' },\n left: { start: 'translateX(-100%)', center: 'translateX(-100%) translateY(-50%)', end: 'translateX(-100%) translateY(-100%)' },\n right: { start: 'translateX(0)', center: 'translateY(-50%)', end: 'translateY(-100%)' },\n };\n\n\n return (\n <>\n <div\n ref={triggerRef}\n className=\"inline-flex\"\n onClick={() => setOpen(!isOpen)}\n >\n {trigger}\n </div>\n\n {isOpen && createPortal(\n <div\n ref={popoverRef}\n role=\"dialog\"\n aria-modal=\"false\"\n className={cn(popoverVariants({ size }), 'border-outline overflow-visible', className)}\n style={{\n position: 'absolute',\n top: position.top,\n left: position.left,\n transform: transformMap[side][align],\n zIndex: 9999,\n }}\n >\n {/* Arrow */}\n {showArrow && (\n <div\n aria-hidden=\"true\"\n className=\"absolute w-4 h-4 bg-background\"\n style={{\n ...(side === 'bottom' && {\n top: -8, left: 20,\n borderTop: '1.5px solid',\n borderLeft: '1.5px solid',\n borderRight: 'none',\n borderBottom: 'none',\n transform: 'rotate(45deg)',\n }),\n ...(side === 'top' && {\n bottom: -8, left: 20,\n borderBottom: '1.5px solid',\n borderRight: '1.5px solid',\n borderTop: 'none',\n borderLeft: 'none',\n transform: 'rotate(45deg)',\n }),\n ...(side === 'left' && {\n right: -8, top: 16,\n borderTop: '1.5px solid',\n borderRight: '1.5px solid',\n borderBottom: 'none',\n borderLeft: 'none',\n transform: 'rotate(45deg)',\n }),\n ...(side === 'right' && {\n left: -8, top: 16,\n borderBottom: '1.5px solid',\n borderLeft: '1.5px solid',\n borderTop: 'none',\n borderRight: 'none',\n transform: 'rotate(45deg)',\n }),\n borderColor: 'var(--color-outline, #E5E7EB)',\n position: 'absolute',\n zIndex: -1,\n }}\n />\n )}\n {children}\n </div>,\n document.body\n )}\n </>\n );\n}\n\n// ─── PopoverHeader ────────────────────────────────────────────────────────────\n\nexport interface PopoverHeaderProps extends ComponentPropsWithoutRef<'div'> {\n title: string;\n description?: string;\n onClose?: () => void;\n}\n\nexport function PopoverHeader({ title, description, onClose, className, ...props }: PopoverHeaderProps) {\n return (\n <div className={cn('flex items-start justify-between gap-3 mb-3', className)} {...props}>\n <div>\n <p className=\"text-label-lg text-text-primary font-semibold\">{title}</p>\n {description && (\n <p className=\"text-body-sm text-text-secondary mt-0.5\">{description}</p>\n )}\n </div>\n {onClose && (\n <button\n type=\"button\"\n onClick={onClose}\n className=\"size-6 flex items-center justify-center rounded-md text-text-secondary hover:bg-surface-variant transition-colors flex-shrink-0\"\n aria-label=\"Close\"\n >\n <Icon name=\"close\" size=\"sm\" aria-hidden />\n </button>\n )}\n </div>\n );\n}\n\n// ─── PopoverFooter ────────────────────────────────────────────────────────────\n\nexport function PopoverFooter({ className, children, ...props }: ComponentPropsWithoutRef<'div'>) {\n return (\n <div\n className={cn('flex items-center justify-end gap-2 mt-4 pt-3 border-t border-outline-variant', className)}\n {...props}\n >\n {children}\n </div>\n );\n}","import {\n useState,\n useRef,\n useEffect,\n forwardRef,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { cn } from '../../utils/cn';\nimport { Icon } from '../Icon';\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nconst MONTHS = ['January','February','March','April','May','June','July','August','September','October','November','December'];\nconst DAYS = ['Su','Mo','Tu','We','Th','Fr','Sa'];\n\nfunction getDaysInMonth(year: number, month: number) {\n return new Date(year, month + 1, 0).getDate();\n}\nfunction getFirstDayOfMonth(year: number, month: number) {\n return new Date(year, month, 1).getDay();\n}\nfunction isSameDay(a: Date, b: Date) {\n return a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate();\n}\nfunction isInRange(date: Date, start: Date | null, end: Date | null) {\n if (!start || !end) return false;\n return date > start && date < end;\n}\nfunction formatDate(date: Date, format = 'MMM DD, YYYY', time?: { hour: string; min: string; ampm: string }) {\n const d = date.getDate().toString().padStart(2, '0');\n const m = (date.getMonth() + 1).toString().padStart(2, '0');\n const mon = MONTHS[date.getMonth()]!.slice(0, 3);\n const y = date.getFullYear();\n let result = format\n .replace('YYYY', y.toString())\n .replace('MMM', mon)\n .replace('MM', m)\n .replace('DD', d);\n if (time) result += ` ${time.hour}:${time.min} ${time.ampm}`;\n return result;\n}\n\nfunction startOfWeek(date: Date) {\n const d = new Date(date);\n d.setDate(d.getDate() - d.getDay());\n return d;\n}\nfunction endOfWeek(date: Date) {\n const d = new Date(date);\n d.setDate(d.getDate() + (6 - d.getDay()));\n return d;\n}\nfunction startOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth(), 1);\n}\nfunction endOfMonth(date: Date) {\n return new Date(date.getFullYear(), date.getMonth() + 1, 0);\n}\n\n// ─── Calendar ─────────────────────────────────────────────────────────────────\n\nexport type CalendarVariant = 'default' | 'dark' | 'gradient' | 'minimal';\n\nexport interface CalendarProps {\n value?: Date | null;\n rangeValue?: [Date | null, Date | null];\n onChange?: (date: Date) => void;\n onRangeChange?: (range: [Date | null, Date | null]) => void;\n mode?: 'single' | 'range';\n minDate?: Date;\n maxDate?: Date;\n disabledDates?: Date[];\n disableWeekends?: boolean;\n showTime?: boolean;\n /** Controlled hour value (lifted from parent). */\n timeHour?: string;\n /** Controlled minute value (lifted from parent). */\n timeMin?: string;\n /** Controlled AM/PM value (lifted from parent). */\n timeAmPm?: 'AM' | 'PM';\n /** Called when user changes time values. */\n onTimeChange?: (time: { hour: string; min: string; ampm: 'AM' | 'PM' }) => void;\n variant?: CalendarVariant;\n presets?: boolean;\n /** For dual month — which month offset to show */\n monthOffset?: number;\n /** For dual month — shared nav handler */\n onPrevMonth?: () => void;\n onNextMonth?: () => void;\n showPrev?: boolean;\n showNext?: boolean;\n className?: string;\n}\n\nexport function Calendar({\n value,\n rangeValue,\n onChange,\n onRangeChange,\n mode = 'single',\n minDate,\n maxDate,\n disabledDates = [],\n disableWeekends = false,\n showTime = false,\n timeHour: timeHourProp,\n timeMin: timeMinProp,\n timeAmPm: timeAmPmProp,\n onTimeChange,\n variant = 'default',\n presets = false,\n monthOffset = 0,\n onPrevMonth,\n onNextMonth,\n showPrev = true,\n showNext = true,\n className,\n}: CalendarProps) {\n const today = new Date();\n const [viewYear, setViewYear] = useState(value?.getFullYear() ?? today.getFullYear());\n const [viewMonth, setViewMonth] = useState((value?.getMonth() ?? today.getMonth()) + monthOffset);\n const [hoverDate, setHoverDate] = useState<Date | null>(null);\n const [internalHour, setInternalHour] = useState('09');\n const [internalMin, setInternalMin] = useState('00');\n const [internalAmPm, setInternalAmPm] = useState<'AM' | 'PM'>('AM');\n const [selectingRange, setSelectingRange] = useState<'start' | 'end'>('start');\n\n const timeHour = timeHourProp !== undefined ? timeHourProp : internalHour;\n const timeMin = timeMinProp !== undefined ? timeMinProp : internalMin;\n const timeAmPm = timeAmPmProp !== undefined ? timeAmPmProp : internalAmPm;\n\n function setTimeHour(h: string) {\n if (onTimeChange) onTimeChange({ hour: h, min: timeMin, ampm: timeAmPm });\n else setInternalHour(h);\n }\n function setTimeMin(m: string) {\n if (onTimeChange) onTimeChange({ hour: timeHour, min: m, ampm: timeAmPm });\n else setInternalMin(m);\n }\n function setTimeAmPm(ap: 'AM' | 'PM') {\n if (onTimeChange) onTimeChange({ hour: timeHour, min: timeMin, ampm: ap });\n else setInternalAmPm(ap);\n }\n\n // Normalize month overflow\n let displayYear = viewYear;\n let displayMonth = viewMonth;\n if (displayMonth > 11) { displayMonth = displayMonth - 12; displayYear += 1; }\n if (displayMonth < 0) { displayMonth = displayMonth + 12; displayYear -= 1; }\n\n const daysInMonth = getDaysInMonth(displayYear, displayMonth);\n const firstDay = getFirstDayOfMonth(displayYear, displayMonth);\n const prevMonthDays = getDaysInMonth(displayYear, displayMonth - 1);\n\n function prevMonth() {\n if (onPrevMonth) { onPrevMonth(); return; }\n if (viewMonth === 0) { setViewMonth(11); setViewYear(y => y - 1); }\n else setViewMonth(m => m - 1);\n }\n\n function nextMonth() {\n if (onNextMonth) { onNextMonth(); return; }\n if (viewMonth === 11) { setViewMonth(0); setViewYear(y => y + 1); }\n else setViewMonth(m => m + 1);\n }\n\n function isDisabled(date: Date) {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n if (disableWeekends && (date.getDay() === 0 || date.getDay() === 6)) return true;\n if (disabledDates.some(d => isSameDay(d, date))) return true;\n return false;\n }\n\n function handleDayClick(date: Date) {\n if (isDisabled(date)) return;\n if (mode === 'single') {\n onChange?.(date);\n } else {\n if (selectingRange === 'start') {\n onRangeChange?.([date, null]);\n setSelectingRange('end');\n } else {\n const [start] = rangeValue ?? [null, null];\n if (start && date < start) {\n onRangeChange?.([date, start]);\n } else {\n onRangeChange?.([start, date]);\n }\n setSelectingRange('start');\n }\n }\n }\n\n function handlePreset(preset: string) {\n const now = new Date();\n if (preset === 'today') onChange?.(now);\n else if (preset === 'tomorrow') {\n const d = new Date(now); d.setDate(d.getDate() + 1); onChange?.(d);\n } else if (preset === 'this-week') {\n onRangeChange?.([startOfWeek(now), endOfWeek(now)]);\n } else if (preset === 'next-week') {\n const next = new Date(now); next.setDate(next.getDate() + 7);\n onRangeChange?.([startOfWeek(next), endOfWeek(next)]);\n } else if (preset === 'this-month') {\n onRangeChange?.([startOfMonth(now), endOfMonth(now)]);\n }\n }\n\n const rangeStart = rangeValue?.[0] ?? null;\n const rangeEnd = rangeValue?.[1] ?? null;\n const effectiveRangeEnd = rangeEnd ?? hoverDate;\n\n // Build cells\n const cells: Array<{ date: Date; isCurrentMonth: boolean }> = [];\n for (let i = firstDay - 1; i >= 0; i--) {\n cells.push({ date: new Date(displayYear, displayMonth - 1, prevMonthDays - i), isCurrentMonth: false });\n }\n for (let d = 1; d <= daysInMonth; d++) {\n cells.push({ date: new Date(displayYear, displayMonth, d), isCurrentMonth: true });\n }\n const remaining = 42 - cells.length;\n for (let d = 1; d <= remaining; d++) {\n cells.push({ date: new Date(displayYear, displayMonth + 1, d), isCurrentMonth: false });\n }\n\n // Variant styles\n const v = {\n default: {\n wrapper: '',\n title: 'text-text-primary',\n nav: 'border border-outline hover:bg-surface-variant text-text-secondary',\n dayName: 'text-text-disabled',\n day: 'text-text-primary hover:bg-surface-variant rounded-md',\n otherDay: 'text-text-disabled',\n today: 'text-primary font-semibold',\n selected: 'bg-primary text-on-primary rounded-md font-semibold',\n rangeStart: 'bg-primary text-on-primary rounded-l-md font-semibold',\n rangeEnd: 'bg-primary text-on-primary rounded-r-md font-semibold',\n inRange: 'bg-primary-container text-on-primary-container rounded-none',\n disabled: 'opacity-30 cursor-not-allowed',\n preset: 'border-outline text-text-secondary hover:border-primary hover:text-primary',\n presetActive: 'bg-primary-container text-primary border-primary',\n timeBorder: 'border-outline-variant',\n timeInput: 'border-outline bg-background text-text-primary',\n },\n dark: {\n wrapper: 'bg-on-surface rounded-lg p-4 overflow-hidden',\n title: 'text-surface',\n nav: 'border-white/20 bg-white/10 text-white hover:bg-white/20',\n dayName: 'text-surface/40',\n day: 'text-surface/80 hover:bg-white/10 rounded-md',\n otherDay: 'text-surface/20',\n today: 'text-blue-400 font-bold',\n selected: 'bg-primary text-on-primary rounded-md font-semibold',\n rangeStart: 'bg-primary text-on-primary rounded-l-md font-semibold',\n rangeEnd: 'bg-primary text-on-primary rounded-r-md font-semibold',\n inRange: 'bg-white/15 text-surface rounded-none',\n disabled: 'opacity-30 cursor-not-allowed',\n preset: 'border-white/20 text-surface/60 hover:border-white/40 hover:text-surface',\n presetActive: 'bg-white/20 text-surface border-white/40',\n timeBorder: 'border-white/10',\n timeInput: 'border-white/20 bg-white/10 text-surface',\n },\n gradient: {\n wrapper: 'bg-gradient-to-br from-primary to-secondary rounded-lg p-4 overflow-hidden',\n title: 'text-white',\n nav: 'border-white/20 bg-white/10 text-white hover:bg-white/20',\n dayName: 'text-white/50',\n day: 'text-white/80 hover:bg-white/15 rounded-md',\n otherDay: 'text-white/20',\n today: 'text-yellow-300 font-bold',\n selected: 'bg-white/90 text-primary rounded-md font-semibold',\n rangeStart: 'bg-white/90 text-primary rounded-l-md font-semibold',\n rangeEnd: 'bg-white/90 text-primary rounded-r-md font-semibold',\n inRange: 'bg-white/20 text-white rounded-none',\n disabled: 'opacity-30 cursor-not-allowed',\n preset: 'border-white/20 text-white/60 hover:border-white/40 hover:text-white',\n presetActive: 'bg-white/20 text-white border-white/40',\n timeBorder: 'border-white/10',\n timeInput: 'border-white/20 bg-white/10 text-white',\n },\n minimal: {\n wrapper: '',\n title: 'text-text-primary',\n nav: 'border-transparent bg-transparent text-text-secondary hover:text-text-primary',\n dayName: 'text-text-disabled',\n day: 'text-text-primary hover:bg-surface-variant rounded-full',\n otherDay: 'text-text-disabled',\n today: 'border-[1.5px] border-on-surface text-on-surface font-semibold rounded-full',\n selected: 'bg-on-surface text-surface rounded-full font-semibold',\n rangeStart: 'bg-on-surface text-surface rounded-full font-semibold',\n rangeEnd: 'bg-on-surface text-surface rounded-full font-semibold',\n inRange: 'bg-surface-container text-text-primary rounded-none',\n disabled: 'opacity-30 cursor-not-allowed',\n preset: 'border-outline text-text-secondary hover:border-on-surface hover:text-text-primary',\n presetActive: 'bg-on-surface text-surface border-on-surface',\n timeBorder: 'border-outline-variant',\n timeInput: 'border-outline bg-background text-text-primary',\n },\n }[variant];\n\n const PRESETS = [\n { id: 'today', label: 'Today' },\n { id: 'tomorrow', label: 'Tomorrow' },\n { id: 'this-week', label: 'This week' },\n { id: 'next-week', label: 'Next week' },\n { id: 'this-month', label: 'This month' },\n ];\n\n return (\n <div className={cn('select-none', v.wrapper, className)}>\n\n {/* Presets */}\n {presets && (\n <div className=\"flex flex-wrap gap-1.5 mb-3 pb-3 border-b border-outline-variant\">\n {PRESETS.map(p => (\n <button\n key={p.id}\n type=\"button\"\n onClick={() => handlePreset(p.id)}\n className={cn(\n 'h-6 px-2.5 rounded-full text-label-sm font-medium border-[1.5px] transition-colors',\n v.preset,\n )}\n >\n {p.label}\n </button>\n ))}\n </div>\n )}\n\n {/* Header */}\n <div className=\"flex items-center justify-between mb-3\">\n <button\n type=\"button\"\n onClick={prevMonth}\n className={cn('size-7 rounded-md flex items-center justify-center transition-colors border flex-shrink-0', v.nav, !showPrev && 'invisible')}\n aria-label=\"Previous month\"\n >\n <Icon name=\"chevron-left\" size=\"sm\" aria-hidden />\n </button>\n <span className={cn('text-label-lg font-semibold', v.title)}>\n {MONTHS[displayMonth]} {displayYear}\n </span>\n <button\n type=\"button\"\n onClick={nextMonth}\n className={cn('size-7 rounded-md flex items-center justify-center transition-colors border flex-shrink-0', v.nav, !showNext && 'invisible')}\n aria-label=\"Next month\"\n >\n <Icon name=\"chevron-right\" size=\"sm\" aria-hidden />\n </button>\n </div>\n\n {/* Day names */}\n <div className=\"grid grid-cols-7 mb-1\">\n {DAYS.map(d => (\n <div key={d} className={cn('text-center text-label-sm py-1', v.dayName)}>{d}</div>\n ))}\n </div>\n\n {/* Day grid */}\n <div className=\"grid grid-cols-7 gap-px\">\n {cells.map(({ date, isCurrentMonth }, i) => {\n const isToday = isSameDay(date, today);\n const isSelected = value ? isSameDay(date, value) : false;\n const isRangeStart = rangeStart ? isSameDay(date, rangeStart) : false;\n const isRangeEnd = rangeEnd ? isSameDay(date, rangeEnd) : false;\n const isHoverEnd = !rangeEnd && hoverDate ? isSameDay(date, hoverDate) : false;\n const inRange = mode === 'range' && isInRange(date, rangeStart, effectiveRangeEnd);\n const disabled = isDisabled(date);\n\n return (\n <button\n key={i}\n type=\"button\"\n disabled={disabled}\n onClick={() => handleDayClick(date)}\n onMouseEnter={() => mode === 'range' && setHoverDate(date)}\n onMouseLeave={() => setHoverDate(null)}\n aria-label={date.toDateString()}\n className={cn(\n 'h-8 w-full flex items-center justify-center text-label-sm transition-all',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring',\n !isCurrentMonth && v.otherDay,\n isCurrentMonth && !isSelected && !isRangeStart && !isRangeEnd && !disabled && !isToday && v.day,\n isToday && !isSelected && !isRangeStart && !isRangeEnd && v.today,\n isSelected && v.selected,\n isRangeStart && v.rangeStart,\n isRangeEnd && v.rangeEnd,\n isHoverEnd && !rangeEnd && v.selected,\n inRange && !isRangeStart && !isRangeEnd && v.inRange,\n disabled && v.disabled,\n )}\n >\n {date.getDate()}\n </button>\n );\n })}\n </div>\n\n {/* Range footer */}\n {mode === 'range' && (rangeStart || rangeEnd) && (\n <div className={cn('flex items-center gap-2 mt-3 pt-3 border-t', v.timeBorder)}>\n <div className={cn('flex-1 px-2.5 py-1.5 rounded-lg border text-body-sm text-center', rangeStart ? 'border-primary text-primary' : 'border-outline text-text-disabled')}>\n {rangeStart ? formatDate(rangeStart, 'MMM DD') : 'Start date'}\n </div>\n <Icon name=\"arrow-right\" size=\"sm\" className=\"text-text-secondary flex-shrink-0\" aria-hidden />\n <div className={cn('flex-1 px-2.5 py-1.5 rounded-lg border text-body-sm text-center', rangeEnd ? 'border-primary text-primary' : 'border-outline text-text-disabled')}>\n {rangeEnd ? formatDate(rangeEnd, 'MMM DD') : 'End date'}\n </div>\n </div>\n )}\n\n {/* Time picker */}\n {showTime && (\n <div className={cn('flex items-center gap-2 mt-3 pt-3 border-t', v.timeBorder)}>\n <Icon name=\"info\" size=\"sm\" className=\"text-text-secondary flex-shrink-0\" aria-hidden />\n <input\n type=\"text\" value={timeHour}\n onChange={e => setTimeHour(e.target.value.slice(0, 2))}\n className={cn('w-12 h-8 border rounded-md text-center text-label-md outline-none focus:border-primary', v.timeInput)}\n maxLength={2} aria-label=\"Hour\"\n />\n <span className=\"text-label-lg text-text-secondary font-bold\">:</span>\n <input\n type=\"text\" value={timeMin}\n onChange={e => setTimeMin(e.target.value.slice(0, 2))}\n className={cn('w-12 h-8 border rounded-md text-center text-label-md outline-none focus:border-primary', v.timeInput)}\n maxLength={2} aria-label=\"Minute\"\n />\n <div className=\"flex gap-1 ml-auto\">\n {(['AM', 'PM'] as const).map(ap => (\n <button key={ap} type=\"button\" onClick={() => setTimeAmPm(ap)}\n className={cn('h-8 px-2.5 rounded-md text-label-sm font-medium transition-colors', timeAmPm === ap ? 'bg-primary text-on-primary' : cn('border', v.timeInput, 'hover:bg-surface-variant'))}>\n {ap}\n </button>\n ))}\n </div>\n </div>\n )}\n </div>\n );\n}\n\n// ─── DatePicker ───────────────────────────────────────────────────────────────\n\nexport interface DatePickerProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {\n value?: Date | null;\n onChange?: (date: Date | null) => void;\n placeholder?: string;\n format?: string;\n showTime?: boolean;\n minDate?: Date;\n maxDate?: Date;\n disableWeekends?: boolean;\n disabled?: boolean;\n clearable?: boolean;\n label?: string;\n error?: boolean;\n errorText?: string;\n helperText?: string;\n size?: 'sm' | 'md' | 'lg';\n variant?: CalendarVariant;\n presets?: boolean;\n}\n\nexport const DatePicker = forwardRef<HTMLDivElement, DatePickerProps>(\n ({\n value, onChange, placeholder = 'Select date...', format = 'MMM DD, YYYY',\n showTime = false, minDate, maxDate, disableWeekends = false,\n disabled = false, clearable = true, label, error = false,\n errorText, helperText, size = 'md', variant = 'default',\n presets = false, className, ...props\n }, ref) => {\n const [open, setOpen] = useState(false);\n const [timeHour, setTimeHour] = useState('09');\n const [timeMin, setTimeMin] = useState('00');\n const [timeAmPm, setTimeAmPm] = useState<'AM' | 'PM'>('AM');\n const triggerRef = useRef<HTMLButtonElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n useEffect(() => {\n if (!open || !triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n setPosition({ top: rect.bottom + window.scrollY + 4, left: rect.left + window.scrollX });\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n function handle(e: MouseEvent) {\n if (popoverRef.current?.contains(e.target as Node) || triggerRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n }\n function handleKey(e: KeyboardEvent) { if (e.key === 'Escape') setOpen(false); }\n document.addEventListener('mousedown', handle);\n document.addEventListener('keydown', handleKey);\n return () => { document.removeEventListener('mousedown', handle); document.removeEventListener('keydown', handleKey); };\n }, [open]);\n\n const sizeClasses = { sm: 'h-9 px-3 text-body-sm rounded-md', md: 'h-11 px-3 text-body-md rounded-lg', lg: 'h-[52px] px-4 text-body-lg rounded-lg' };\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5 w-full', className)} {...props}>\n {label && <label className={cn('text-label-lg', error ? 'text-error' : 'text-text-secondary')}>{label}</label>}\n <button\n ref={triggerRef} type=\"button\" disabled={disabled}\n onClick={() => !disabled && setOpen(o => !o)}\n className={cn(\n 'flex items-center gap-2 w-full border-[1.5px] bg-background transition-all',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n sizeClasses[size],\n error && !open ? 'border-error' : open ? 'border-primary ring-2 ring-primary/10' : error ? 'border-error' : 'border-outline hover:border-on-surface-variant',\n disabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n <Icon name=\"info\" size=\"sm\" aria-hidden className={cn('flex-shrink-0', open ? 'text-primary' : 'text-text-secondary')} />\n <span className={cn('flex-1 text-left truncate', !value && 'text-text-disabled')}>\n {value ? formatDate(value, format, showTime ? { hour: timeHour, min: timeMin, ampm: timeAmPm } : undefined) : placeholder}\n </span>\n {clearable && value && !disabled && (\n <span role=\"button\" aria-label=\"Clear\" onClick={e => { e.stopPropagation(); onChange?.(null); }} className=\"text-text-secondary hover:text-text-primary flex-shrink-0\">\n <Icon name=\"close\" size=\"sm\" aria-hidden />\n </span>\n )}\n </button>\n\n {open && createPortal(\n <div ref={popoverRef} role=\"dialog\" aria-label=\"Date picker\"\n className={cn('absolute z-[9999] border border-outline rounded-lg shadow-lg p-4 w-72', variant === 'dark' || variant === 'gradient' ? 'border-transparent' : 'bg-background')}\n style={{ top: position.top, left: position.left }}>\n <Calendar\n value={value ?? undefined} variant={variant} presets={presets}\n onChange={date => { onChange?.(date); if (!showTime) setOpen(false); }}\n minDate={minDate} maxDate={maxDate}\n disableWeekends={disableWeekends} showTime={showTime}\n timeHour={showTime ? timeHour : undefined}\n timeMin={showTime ? timeMin : undefined}\n timeAmPm={showTime ? timeAmPm : undefined}\n onTimeChange={showTime ? t => { setTimeHour(t.hour); setTimeMin(t.min); setTimeAmPm(t.ampm); } : undefined}\n />\n {showTime && (\n <div className=\"flex justify-end mt-3\">\n <button type=\"button\" onClick={() => setOpen(false)}\n className=\"h-8 px-4 rounded-lg bg-primary text-on-primary text-label-sm font-medium hover:bg-primary/90\">\n Done\n </button>\n </div>\n )}\n </div>,\n document.body\n )}\n\n {(helperText || (error && errorText)) && (\n <p className={cn('text-body-sm flex items-center gap-1', error ? 'text-error' : 'text-text-secondary')}>\n {error && <Icon name=\"alert-circle\" size=\"sm\" aria-hidden />}\n {error ? errorText : helperText}\n </p>\n )}\n </div>\n );\n }\n);\n\nDatePicker.displayName = 'DatePicker';\n\n// ─── DateRangePicker ──────────────────────────────────────────────────────────\n\nexport interface DateRangePickerProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {\n value?: [Date | null, Date | null];\n onChange?: (range: [Date | null, Date | null]) => void;\n placeholder?: [string, string];\n label?: string;\n disabled?: boolean;\n minDate?: Date;\n maxDate?: Date;\n disableWeekends?: boolean;\n size?: 'sm' | 'md' | 'lg';\n helperText?: string;\n variant?: CalendarVariant;\n presets?: boolean;\n dualMonth?: boolean;\n}\n\nexport const DateRangePicker = forwardRef<HTMLDivElement, DateRangePickerProps>(\n ({\n value = [null, null], onChange, placeholder = ['Start date', 'End date'],\n label, disabled, minDate, maxDate, disableWeekends, size = 'md',\n helperText, variant = 'default', presets = false, dualMonth = false,\n className, ...props\n }, ref) => {\n const [open, setOpen] = useState(false);\n const triggerRef = useRef<HTMLDivElement>(null);\n const popoverRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n const [baseMonth, setBaseMonth] = useState(new Date().getMonth());\n const [baseYear, setBaseYear] = useState(new Date().getFullYear());\n\n useEffect(() => {\n if (!open || !triggerRef.current) return;\n const rect = triggerRef.current.getBoundingClientRect();\n setPosition({ top: rect.bottom + window.scrollY + 4, left: rect.left + window.scrollX });\n }, [open]);\n\n useEffect(() => {\n if (!open) return;\n function handle(e: MouseEvent) {\n if (popoverRef.current?.contains(e.target as Node) || triggerRef.current?.contains(e.target as Node)) return;\n setOpen(false);\n }\n document.addEventListener('mousedown', handle);\n return () => document.removeEventListener('mousedown', handle);\n }, [open]);\n\n function prevMonth() {\n if (baseMonth === 0) { setBaseMonth(11); setBaseYear(y => y - 1); }\n else setBaseMonth(m => m - 1);\n }\n function nextMonth() {\n if (baseMonth === 11) { setBaseMonth(0); setBaseYear(y => y + 1); }\n else setBaseMonth(m => m + 1);\n }\n\n const sizeClasses = { sm: 'h-9 px-3 text-body-sm rounded-md', md: 'h-11 px-3 text-body-md rounded-lg', lg: 'h-[52px] px-4 text-body-lg rounded-lg' };\n const [start, end] = value;\n\n // Next month calc\n let nextMonthVal = baseMonth + 1;\n let nextYearVal = baseYear;\n if (nextMonthVal > 11) { nextMonthVal = 0; nextYearVal += 1; }\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-1.5 w-full', className)} {...props}>\n {label && <label className=\"text-label-lg text-text-secondary\">{label}</label>}\n <div\n ref={triggerRef}\n onClick={() => !disabled && setOpen(o => !o)}\n className={cn(\n 'flex items-center gap-2 w-full border-[1.5px] bg-background cursor-pointer transition-all',\n sizeClasses[size],\n open ? 'border-primary ring-2 ring-primary/10' : 'border-outline hover:border-on-surface-variant',\n disabled && 'opacity-50 cursor-not-allowed',\n )}\n >\n <Icon name=\"info\" size=\"sm\" className=\"text-text-secondary flex-shrink-0\" aria-hidden />\n <span className={cn('flex-1 text-left truncate', !start && 'text-text-disabled')}>\n {start ? formatDate(start, 'MMM DD, YYYY') : placeholder[0]}\n </span>\n <Icon name=\"arrow-right\" size=\"sm\" className=\"text-text-secondary flex-shrink-0\" aria-hidden />\n <span className={cn('flex-1 text-left truncate', !end && 'text-text-disabled')}>\n {end ? formatDate(end, 'MMM DD, YYYY') : placeholder[1]}\n </span>\n {(start || end) && (\n <span role=\"button\" onClick={e => { e.stopPropagation(); onChange?.([null, null]); }} className=\"text-text-secondary hover:text-text-primary flex-shrink-0\">\n <Icon name=\"close\" size=\"sm\" aria-hidden />\n </span>\n )}\n </div>\n\n {open && createPortal(\n <div ref={popoverRef}\n className={cn(\n 'absolute z-[9999] border border-outline rounded-lg shadow-lg',\n variant === 'dark' || variant === 'gradient' ? 'border-transparent' : 'bg-background',\n dualMonth ? 'w-auto p-5' : 'w-72 p-4',\n )}\n style={{ top: position.top, left: position.left }}>\n {dualMonth ? (\n <>\n <div className=\"flex items-center justify-between mb-4 pb-3 border-b border-outline-variant\">\n <span className=\"text-label-md text-text-secondary\">\n {value[0] ? formatDate(value[0], 'MMM DD') : 'Start date'}\n </span>\n <Icon name=\"arrow-right\" size=\"sm\" className=\"text-text-disabled\" aria-hidden />\n <span className=\"text-label-md text-text-secondary\">\n {value[1] ? formatDate(value[1], 'MMM DD') : 'End date'}\n </span>\n <button\n type=\"button\"\n onClick={() => onChange?.([null, null])}\n className=\"text-label-sm text-text-disabled hover:text-text-primary ml-4 transition-colors\"\n >\n Clear\n </button>\n </div>\n <div className=\"flex gap-6 p-2\">\n <Calendar\n mode=\"range\" rangeValue={value} onRangeChange={range => {\n onChange?.(range);\n if (range[0] && range[1]) setTimeout(() => setOpen(false), 300);\n }}\n variant={variant} presets={presets}\n minDate={minDate} maxDate={maxDate} disableWeekends={disableWeekends}\n onPrevMonth={prevMonth} onNextMonth={nextMonth}\n showPrev={true} showNext={false}\n className=\"min-w-[260px]\"\n />\n <div className=\"w-px bg-outline-variant flex-shrink-0 my-2\" />\n <Calendar\n mode=\"range\" rangeValue={value} onRangeChange={range => {\n onChange?.(range);\n if (range[0] && range[1]) setTimeout(() => setOpen(false), 300);\n }}\n variant={variant}\n minDate={minDate} maxDate={maxDate} disableWeekends={disableWeekends}\n monthOffset={1}\n onPrevMonth={prevMonth} onNextMonth={nextMonth}\n showPrev={false} showNext={true}\n className=\"min-w-[260px]\"\n />\n </div>\n </>\n ) : (\n <Calendar\n mode=\"range\" rangeValue={value} onRangeChange={range => {\n onChange?.(range);\n if (range[0] && range[1]) setTimeout(() => setOpen(false), 300);\n }}\n variant={variant} presets={presets}\n minDate={minDate} maxDate={maxDate} disableWeekends={disableWeekends}\n />\n )}\n </div>,\n document.body\n )}\n {helperText && <p className=\"text-body-sm text-text-secondary\">{helperText}</p>}\n </div>\n );\n }\n);\n\nDateRangePicker.displayName = 'DateRangePicker';","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Slider variants — CVA configuration.\n *\n * Thumb styles: default, pill, square, bubble\n * Track styles: default, glow, gradient, spectrum\n * Colors: default, secondary, success, warning, error\n * Sizes: xs, sm, md, lg, xl\n */\n\nexport const sliderTrackVariants = cva(\n ['relative w-full rounded-full select-none'],\n {\n variants: {\n size: {\n xs: 'h-0.5',\n sm: 'h-1',\n md: 'h-1.5',\n lg: 'h-2',\n xl: 'h-3',\n },\n trackStyle: {\n default: 'bg-surface-container',\n glow: 'bg-surface-container',\n gradient: 'bg-surface-container',\n spectrum: '',\n },\n },\n defaultVariants: {\n size: 'md',\n trackStyle: 'default',\n },\n }\n);\n\nexport const sliderFillVariants = cva(\n ['absolute left-0 top-0 h-full rounded-full transition-none'],\n {\n variants: {\n color: {\n default: 'bg-primary',\n secondary: 'bg-secondary',\n success: 'bg-success',\n warning: 'bg-warning',\n error: 'bg-error',\n },\n trackStyle: {\n default: '',\n glow: '',\n gradient: 'bg-gradient-to-r from-primary to-secondary',\n spectrum: 'hidden',\n },\n },\n compoundVariants: [\n { trackStyle: 'glow', color: 'default', class: 'bg-primary shadow-[0_0_8px_rgba(37,99,235,0.5)]' },\n { trackStyle: 'glow', color: 'secondary', class: 'bg-secondary shadow-[0_0_8px_rgba(124,58,237,0.5)]' },\n { trackStyle: 'glow', color: 'success', class: 'bg-success shadow-[0_0_8px_rgba(16,185,129,0.5)]' },\n { trackStyle: 'glow', color: 'warning', class: 'bg-warning shadow-[0_0_8px_rgba(245,158,11,0.5)]' },\n { trackStyle: 'glow', color: 'error', class: 'bg-error shadow-[0_0_8px_rgba(239,68,68,0.5)]' },\n ],\n defaultVariants: {\n color: 'default',\n trackStyle: 'default',\n },\n }\n);\n\nexport const sliderThumbVariants = cva(\n [\n 'absolute top-1/2 -translate-y-1/2 -translate-x-1/2',\n 'flex items-center justify-center',\n 'cursor-grab active:cursor-grabbing',\n 'transition-shadow duration-short',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n 'touch-none select-none',\n ],\n {\n variants: {\n thumbStyle: {\n default: 'rounded-full bg-background border-2 shadow-sm hover:scale-110',\n pill: 'rounded-full text-on-primary text-[10px] font-bold shadow-md',\n square: 'rounded-md bg-background border-2 shadow-sm hover:scale-110',\n bubble: 'rounded-[50%_50%_50%_0] text-on-primary text-[10px] font-bold shadow-md rotate-[-45deg]',\n },\n size: {\n xs: '',\n sm: '',\n md: '',\n lg: '',\n xl: '',\n },\n color: {\n default: '',\n secondary: '',\n success: '',\n warning: '',\n error: '',\n },\n },\n compoundVariants: [\n // Default thumb sizes\n { thumbStyle: 'default', size: 'xs', class: 'size-3' },\n { thumbStyle: 'default', size: 'sm', class: 'size-3.5' },\n { thumbStyle: 'default', size: 'md', class: 'size-5' },\n { thumbStyle: 'default', size: 'lg', class: 'size-6' },\n { thumbStyle: 'default', size: 'xl', class: 'size-7' },\n // Default thumb colors\n { thumbStyle: 'default', color: 'default', class: 'border-primary hover:shadow-[0_0_0_4px_rgba(37,99,235,0.15)]' },\n { thumbStyle: 'default', color: 'secondary', class: 'border-secondary hover:shadow-[0_0_0_4px_rgba(124,58,237,0.15)]' },\n { thumbStyle: 'default', color: 'success', class: 'border-success hover:shadow-[0_0_0_4px_rgba(16,185,129,0.15)]' },\n { thumbStyle: 'default', color: 'warning', class: 'border-warning hover:shadow-[0_0_0_4px_rgba(245,158,11,0.15)]' },\n { thumbStyle: 'default', color: 'error', class: 'border-error hover:shadow-[0_0_0_4px_rgba(239,68,68,0.15)]' },\n // Square thumb sizes + colors (same as default)\n { thumbStyle: 'square', size: 'xs', class: 'size-3' },\n { thumbStyle: 'square', size: 'sm', class: 'size-3.5' },\n { thumbStyle: 'square', size: 'md', class: 'size-5' },\n { thumbStyle: 'square', size: 'lg', class: 'size-6' },\n { thumbStyle: 'square', size: 'xl', class: 'size-7' },\n { thumbStyle: 'square', color: 'default', class: 'border-primary' },\n { thumbStyle: 'square', color: 'secondary', class: 'border-secondary' },\n { thumbStyle: 'square', color: 'success', class: 'border-success' },\n { thumbStyle: 'square', color: 'warning', class: 'border-warning' },\n { thumbStyle: 'square', color: 'error', class: 'border-error' },\n // Pill thumb sizes + colors\n { thumbStyle: 'pill', size: 'xs', class: 'h-4 w-7 text-[9px]' },\n { thumbStyle: 'pill', size: 'sm', class: 'h-4 w-8 text-[9px]' },\n { thumbStyle: 'pill', size: 'md', class: 'h-5 w-9' },\n { thumbStyle: 'pill', size: 'lg', class: 'h-6 w-10' },\n { thumbStyle: 'pill', size: 'xl', class: 'h-7 w-12' },\n { thumbStyle: 'pill', color: 'default', class: 'bg-primary' },\n { thumbStyle: 'pill', color: 'secondary', class: 'bg-secondary' },\n { thumbStyle: 'pill', color: 'success', class: 'bg-success' },\n { thumbStyle: 'pill', color: 'warning', class: 'bg-warning' },\n { thumbStyle: 'pill', color: 'error', class: 'bg-error' },\n // Bubble thumb\n { thumbStyle: 'bubble', size: 'md', class: 'size-8' },\n { thumbStyle: 'bubble', size: 'lg', class: 'size-9' },\n { thumbStyle: 'bubble', color: 'default', class: 'bg-primary' },\n { thumbStyle: 'bubble', color: 'secondary', class: 'bg-secondary' },\n { thumbStyle: 'bubble', color: 'success', class: 'bg-success' },\n { thumbStyle: 'bubble', color: 'warning', class: 'bg-warning' },\n { thumbStyle: 'bubble', color: 'error', class: 'bg-error' },\n ],\n defaultVariants: {\n thumbStyle: 'default',\n size: 'md',\n color: 'default',\n },\n }\n);\n\nexport type SliderTrackVariantProps = VariantProps<typeof sliderTrackVariants>;\nexport type SliderFillVariantProps = VariantProps<typeof sliderFillVariants>;\nexport type SliderThumbVariantProps = VariantProps<typeof sliderThumbVariants>;\n\nexport type SliderColor = 'default' | 'secondary' | 'success' | 'warning' | 'error';\nexport type SliderSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\nexport type SliderThumbStyle = 'default' | 'pill' | 'square' | 'bubble';\nexport type SliderTrackStyle = 'default' | 'glow' | 'gradient' | 'spectrum';","import {\n forwardRef,\n useState,\n useRef,\n useCallback,\n type ComponentPropsWithoutRef,\n type KeyboardEvent,\n type PointerEvent as ReactPointerEvent,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport {\n sliderTrackVariants,\n sliderFillVariants,\n sliderThumbVariants,\n type SliderColor,\n type SliderSize,\n type SliderThumbStyle,\n type SliderTrackStyle,\n} from './Slider.variants';\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction clamp(value: number, min: number, max: number) {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction snapToStep(value: number, step: number, min: number) {\n return Math.round((value - min) / step) * step + min;\n}\n\nfunction valueToPercent(value: number, min: number, max: number) {\n return ((value - min) / (max - min)) * 100;\n}\n\nfunction percentToValue(percent: number, min: number, max: number) {\n return min + (percent / 100) * (max - min);\n}\n\n// ─── Slider ───────────────────────────────────────────────────────────────────\n\nexport interface SliderProps extends Omit<ComponentPropsWithoutRef<'div'>, 'onChange'> {\n /** Current value (single). */\n value?: number;\n /** Default value for uncontrolled. */\n defaultValue?: number;\n /** Callback when value changes. */\n onChange?: (value: number) => void;\n /** Minimum value. */\n min?: number;\n /** Maximum value. */\n max?: number;\n /** Step increment. */\n step?: number;\n /** Color of the track fill and thumb. */\n color?: SliderColor;\n /** Size (track height + thumb size). */\n size?: SliderSize;\n /** Thumb visual style. */\n thumbStyle?: SliderThumbStyle;\n /** Track visual style. */\n trackStyle?: SliderTrackStyle;\n /** Show tooltip above thumb on hover/drag. */\n showTooltip?: boolean;\n /** Show step marks on track. */\n showMarks?: boolean;\n /** Labels shown below the track. */\n marks?: Array<{ value: number; label?: string }>;\n /** Show min/max labels. */\n showLabels?: boolean;\n /** Show numeric input synced to slider. */\n showInput?: boolean;\n /** Disabled state. */\n disabled?: boolean;\n /** Orientation. */\n orientation?: 'horizontal' | 'vertical';\n /** Label shown above. */\n label?: string;\n /** Format the displayed value. */\n formatValue?: (value: number) => string;\n /** Spectrum colors for spectrum track style. */\n spectrumColors?: string[];\n}\n\n/**\n * Slider — a draggable range input.\n *\n * Features:\n * - 4 thumb styles: default, pill, square, bubble\n * - 4 track styles: default, glow, gradient, spectrum\n * - 6 colors\n * - 5 sizes\n * - tooltip on hover/drag\n * - step marks\n * - custom labels\n * - number input sync\n * - vertical orientation\n * - keyboard navigation\n * - touch support\n *\n * @example\n * <Slider value={volume} onChange={setVolume} label=\"Volume\" />\n * <Slider thumbStyle=\"pill\" color=\"secondary\" showTooltip />\n * <Slider trackStyle=\"glow\" color=\"success\" showMarks step={10} />\n * <Slider trackStyle=\"spectrum\" />\n */\nexport const Slider = forwardRef<HTMLDivElement, SliderProps>(\n (\n {\n value: controlledValue,\n defaultValue = 50,\n onChange,\n min = 0,\n max = 100,\n step = 1,\n color = 'default',\n size = 'md',\n thumbStyle = 'default',\n trackStyle = 'default',\n showTooltip = false,\n showMarks = false,\n marks,\n showLabels = false,\n showInput = false,\n disabled = false,\n orientation = 'horizontal',\n label,\n formatValue,\n spectrumColors,\n className,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState(defaultValue);\n const value = controlledValue ?? internalValue;\n const [dragging, setDragging] = useState(false);\n const [hovering, setHovering] = useState(false);\n const trackRef = useRef<HTMLDivElement>(null);\n\n function setValue(newValue: number) {\n const snapped = snapToStep(clamp(newValue, min, max), step, min);\n if (controlledValue === undefined) setInternalValue(snapped);\n onChange?.(snapped);\n }\n\n function getValueFromEvent(e: MouseEvent | Touch) {\n const track = trackRef.current;\n if (!track) return value;\n const rect = track.getBoundingClientRect();\n if (orientation === 'horizontal') {\n const percent = clamp(((e.clientX - rect.left) / rect.width) * 100, 0, 100);\n return percentToValue(percent, min, max);\n } else {\n const percent = clamp(((rect.bottom - e.clientY) / rect.height) * 100, 0, 100);\n return percentToValue(percent, min, max);\n }\n }\n\n const handlePointerDown = useCallback((e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.currentTarget.setPointerCapture(e.pointerId);\n setDragging(true);\n setValue(getValueFromEvent(e.nativeEvent));\n }, [disabled, min, max, step]);\n\n const handlePointerMove = useCallback((e: ReactPointerEvent<HTMLDivElement>) => {\n if (!dragging || disabled) return;\n setValue(getValueFromEvent(e.nativeEvent));\n }, [dragging, disabled, min, max, step]);\n\n const handlePointerUp = useCallback(() => {\n setDragging(false);\n }, []);\n\n function handleKeyDown(e: KeyboardEvent<HTMLDivElement>) {\n if (disabled) return;\n const bigStep = step * 10;\n switch (e.key) {\n case 'ArrowRight':\n case 'ArrowUp':\n e.preventDefault();\n setValue(value + step);\n break;\n case 'ArrowLeft':\n case 'ArrowDown':\n e.preventDefault();\n setValue(value - step);\n break;\n case 'PageUp':\n e.preventDefault();\n setValue(value + bigStep);\n break;\n case 'PageDown':\n e.preventDefault();\n setValue(value - bigStep);\n break;\n case 'Home':\n e.preventDefault();\n setValue(min);\n break;\n case 'End':\n e.preventDefault();\n setValue(max);\n break;\n }\n }\n\n const pct = valueToPercent(value, min, max);\n const displayValue = formatValue ? formatValue(value) : String(Math.round(value));\n const showThumbLabel = showTooltip && (dragging || hovering);\n\n const isVertical = orientation === 'vertical';\n\n // Spectrum gradient\n const spectrumStyle = trackStyle === 'spectrum'\n ? { background: spectrumColors ? `linear-gradient(${isVertical ? 'to top' : 'to right'}, ${spectrumColors.join(', ')})` : `linear-gradient(${isVertical ? 'to top' : 'to right'}, #3B82F6, #10B981, #F59E0B, #EF4444)` }\n : undefined;\n\n const colorMap: Record<SliderColor, string> = {\n default: 'var(--color-primary)',\n secondary: 'var(--color-secondary)',\n success: 'var(--color-success)',\n warning: 'var(--color-warning)',\n error: 'var(--color-error)',\n };\n\n const thumbSizeMap: Record<SliderSize, number> = {\n xs: 12, sm: 14, md: 20, lg: 24, xl: 28,\n };\n\n // Step marks\n const stepMarks = showMarks && step > 0\n ? Array.from({ length: Math.floor((max - min) / step) + 1 }, (_, i) => min + i * step)\n : [];\n\n return (\n <div\n ref={ref}\n className={cn(\n 'flex gap-3',\n isVertical ? 'flex-row items-center' : 'flex-col',\n className,\n )}\n {...props}\n >\n {/* Label row */}\n {(label || showLabels) && !isVertical && (\n <div className=\"flex items-center justify-between\">\n {label && <span className=\"text-label-md text-text-primary\">{label}</span>}\n {showLabels && (\n <span className=\"text-label-sm text-text-secondary tabular-nums\">\n {displayValue}\n </span>\n )}\n </div>\n )}\n\n {/* Track + input row */}\n <div className={cn(\n 'flex items-center gap-3',\n isVertical && 'flex-col h-36',\n )}>\n\n {/* Track */}\n {isVertical ? (\n // Vertical: inline styles avoid Tailwind transform/overflow conflicts on a 6px track\n <div\n ref={trackRef}\n role=\"slider\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-valuetext={displayValue}\n aria-orientation=\"vertical\"\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n style={{\n position: 'relative',\n width: '6px',\n height: '100%',\n background: spectrumStyle?.background ?? 'var(--color-surface-container)',\n borderRadius: '9999px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.4 : 1,\n flexShrink: 0,\n }}\n >\n {/* Fill from bottom */}\n {trackStyle !== 'spectrum' && (\n <div style={{\n position: 'absolute',\n bottom: 0,\n left: 0,\n width: '100%',\n height: `${pct}%`,\n borderRadius: '9999px',\n backgroundColor: colorMap[color],\n boxShadow: trackStyle === 'glow' ? `0 0 8px ${colorMap[color]}80` : undefined,\n }} />\n )}\n\n {/* Thumb centered on track */}\n <div style={{\n position: 'absolute',\n bottom: `${pct}%`,\n left: '50%',\n transform: 'translate(-50%, 50%)',\n width: `${thumbSizeMap[size]}px`,\n height: `${thumbSizeMap[size]}px`,\n borderRadius: thumbStyle === 'square' ? '4px' : '50%',\n backgroundColor: thumbStyle === 'default' || thumbStyle === 'square' ? 'white' : colorMap[color],\n border: thumbStyle === 'default' || thumbStyle === 'square' ? `2px solid ${colorMap[color]}` : 'none',\n boxShadow: '0 1px 4px rgba(0,0,0,0.15)',\n cursor: 'grab',\n zIndex: 1,\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n }}>\n {showThumbLabel && thumbStyle === 'default' && (\n <div style={{\n position: 'absolute',\n right: 'calc(100% + 8px)',\n top: '50%',\n transform: 'translateY(-50%)',\n pointerEvents: 'none',\n zIndex: 10,\n whiteSpace: 'nowrap',\n }}>\n <div className=\"bg-on-surface text-surface text-label-sm px-2 py-0.5 rounded-md shadow-md\">\n {displayValue}\n </div>\n </div>\n )}\n </div>\n </div>\n ) : (\n // Horizontal: CVA-based rendering\n <div\n ref={trackRef}\n role=\"slider\"\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuenow={value}\n aria-valuetext={displayValue}\n aria-orientation=\"horizontal\"\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n onPointerDown={handlePointerDown}\n onPointerMove={handlePointerMove}\n onPointerUp={handlePointerUp}\n onKeyDown={handleKeyDown}\n onMouseEnter={() => setHovering(true)}\n onMouseLeave={() => setHovering(false)}\n className={cn(\n sliderTrackVariants({ size, trackStyle }),\n 'w-full',\n disabled ? 'opacity-40 cursor-not-allowed' : 'cursor-pointer',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n )}\n style={spectrumStyle}\n >\n {/* Fill */}\n <div\n className={cn(sliderFillVariants({ color, trackStyle }))}\n style={{ width: `${pct}%` }}\n />\n\n {/* Step marks */}\n {stepMarks.length > 0 && (\n <div className=\"absolute inset-0 pointer-events-none\">\n {stepMarks.map(m => {\n const markPct = valueToPercent(m, min, max);\n return (\n <div\n key={m}\n className=\"absolute top-1/2 -translate-y-1/2 -translate-x-1/2 pointer-events-auto\"\n style={{ left: `${markPct}%` }}\n onClick={e => { e.preventDefault(); e.stopPropagation(); setValue(m); }}\n >\n <span className={cn(\n 'block w-2 h-2 rounded-full cursor-pointer transition-transform hover:scale-150',\n m <= value ? 'bg-background border border-primary/30' : 'bg-outline hover:bg-primary/40',\n )} />\n </div>\n );\n })}\n </div>\n )}\n\n {/* Thumb */}\n <div\n className={cn(sliderThumbVariants({ thumbStyle, size, color }))}\n style={{ left: `${pct}%` }}\n >\n {thumbStyle === 'pill' && <span>{displayValue}</span>}\n {thumbStyle === 'bubble' && <span className=\"rotate-45\">{displayValue}</span>}\n\n {showThumbLabel && thumbStyle === 'default' && (\n <div className=\"absolute bottom-full mb-2 left-1/2 -translate-x-1/2 pointer-events-none z-10\">\n <div className=\"bg-on-surface text-surface text-label-sm px-2 py-0.5 rounded-md whitespace-nowrap shadow-md\">\n {displayValue}\n </div>\n <div className=\"w-0 h-0 border-l-4 border-r-4 border-t-4 border-l-transparent border-r-transparent border-t-on-surface mx-auto\" />\n </div>\n )}\n </div>\n </div>\n )}\n\n {/* Number input */}\n {showInput && !isVertical && (\n <input\n type=\"number\"\n value={Math.round(value)}\n min={min}\n max={max}\n step={step}\n disabled={disabled}\n onChange={e => setValue(Number(e.target.value))}\n className=\"w-14 h-8 border border-outline rounded-md text-center text-label-md text-text-primary bg-background outline-none focus:border-primary disabled:opacity-40\"\n aria-label=\"Slider value\"\n />\n )}\n </div>\n\n {/* Custom marks labels */}\n {marks && !isVertical && (\n <div className=\"relative w-full h-5 mt-1\">\n {marks.map(m => (\n <span\n key={m.value}\n className=\"absolute text-label-sm text-text-disabled -translate-x-1/2\"\n style={{ left: `${valueToPercent(m.value, min, max)}%` }}\n >\n {m.label ?? m.value}\n </span>\n ))}\n </div>\n )}\n\n {/* Min/max range labels */}\n {showLabels && !label && !isVertical && (\n <div className=\"flex justify-between\">\n <span className=\"text-label-sm text-text-disabled\">{formatValue ? formatValue(min) : min}</span>\n <span className=\"text-label-sm text-text-disabled\">{formatValue ? formatValue(max) : max}</span>\n </div>\n )}\n </div>\n );\n }\n);\n\nSlider.displayName = 'Slider';\n\n// ─── RangeSlider ──────────────────────────────────────────────────────────────\n\nexport interface RangeSliderProps extends Omit<SliderProps, 'value' | 'defaultValue' | 'onChange'> {\n /** [min, max] selected range. */\n value?: [number, number];\n /** Default range. */\n defaultValue?: [number, number];\n /** Callback when range changes. */\n onChange?: (value: [number, number]) => void;\n}\n\n/**\n * RangeSlider — two thumbs for selecting a min/max range.\n *\n * @example\n * <RangeSlider\n * value={[25, 75]}\n * onChange={setRange}\n * label=\"Price range\"\n * formatValue={v => `$${v}`}\n * />\n */\nexport const RangeSlider = forwardRef<HTMLDivElement, RangeSliderProps>(\n (\n {\n value: controlledValue,\n defaultValue = [25, 75],\n onChange,\n min = 0,\n max = 100,\n step = 1,\n color = 'default',\n size = 'md',\n thumbStyle = 'default',\n trackStyle = 'default',\n showTooltip = false,\n disabled = false,\n label,\n showLabels = false,\n formatValue,\n className,\n ...props\n },\n ref\n ) => {\n const [internalValue, setInternalValue] = useState<[number, number]>(defaultValue);\n const [start, end] = controlledValue ?? internalValue;\n const [activeThumb, setActiveThumb] = useState<'start' | 'end' | null>(null);\n const [hovering, setHovering] = useState<'start' | 'end' | null>(null);\n const trackRef = useRef<HTMLDivElement>(null);\n\n function setRange(newRange: [number, number]) {\n if (controlledValue === undefined) setInternalValue(newRange);\n onChange?.(newRange);\n }\n\n function getValueFromEvent(e: MouseEvent) {\n const track = trackRef.current;\n if (!track) return 0;\n const rect = track.getBoundingClientRect();\n const percent = clamp(((e.clientX - rect.left) / rect.width) * 100, 0, 100);\n return snapToStep(percentToValue(percent, min, max), step, min);\n }\n\n function handlePointerDown(thumb: 'start' | 'end') {\n return (e: ReactPointerEvent<HTMLDivElement>) => {\n if (disabled) return;\n e.stopPropagation();\n e.currentTarget.setPointerCapture(e.pointerId);\n setActiveThumb(thumb);\n };\n }\n\n function handlePointerMove(e: ReactPointerEvent<HTMLDivElement>) {\n if (!activeThumb || disabled) return;\n const newVal = getValueFromEvent(e.nativeEvent);\n if (activeThumb === 'start') {\n setRange([Math.min(newVal, end - step), end]);\n } else {\n setRange([start, Math.max(newVal, start + step)]);\n }\n }\n\n const startPct = valueToPercent(start, min, max);\n const endPct = valueToPercent(end, min, max);\n const fmt = (v: number) => formatValue ? formatValue(v) : String(Math.round(v));\n\n return (\n <div ref={ref} className={cn('flex flex-col gap-2', className)} {...props}>\n {(label || showLabels) && (\n <div className=\"flex items-center justify-between\">\n {label && <span className=\"text-label-md text-text-primary\">{label}</span>}\n {showLabels && (\n <span className=\"text-label-sm text-text-secondary tabular-nums\">\n {fmt(start)} — {fmt(end)}\n </span>\n )}\n </div>\n )}\n\n <div\n ref={trackRef}\n className={cn(\n sliderTrackVariants({ size, trackStyle }),\n 'w-full',\n disabled ? 'opacity-40 cursor-not-allowed' : 'cursor-pointer',\n )}\n onPointerMove={handlePointerMove}\n onPointerUp={() => setActiveThumb(null)}\n >\n {/* Fill between thumbs */}\n <div\n className={cn(sliderFillVariants({ color, trackStyle }))}\n style={{ left: `${startPct}%`, width: `${endPct - startPct}%` }}\n />\n\n {/* Start thumb */}\n <div\n className={cn(sliderThumbVariants({ thumbStyle, size, color }), 'z-10')}\n style={{ left: `${startPct}%` }}\n onPointerDown={handlePointerDown('start')}\n onMouseEnter={() => setHovering('start')}\n onMouseLeave={() => setHovering(null)}\n >\n {thumbStyle === 'pill' && <span className=\"text-[10px] font-bold\">{fmt(start)}</span>}\n {(showTooltip && (activeThumb === 'start' || hovering === 'start') && thumbStyle === 'default') && (\n <div className=\"absolute bottom-full mb-2 left-1/2 -translate-x-1/2 pointer-events-none z-20\">\n <div className=\"bg-on-surface text-surface text-label-sm px-2 py-0.5 rounded-md whitespace-nowrap shadow-md\">{fmt(start)}</div>\n <div className=\"w-0 h-0 border-l-4 border-r-4 border-t-4 border-l-transparent border-r-transparent border-t-on-surface mx-auto\" />\n </div>\n )}\n </div>\n\n {/* End thumb */}\n <div\n className={cn(sliderThumbVariants({ thumbStyle, size, color }), 'z-10')}\n style={{ left: `${endPct}%` }}\n onPointerDown={handlePointerDown('end')}\n onMouseEnter={() => setHovering('end')}\n onMouseLeave={() => setHovering(null)}\n >\n {thumbStyle === 'pill' && <span className=\"text-[10px] font-bold\">{fmt(end)}</span>}\n {(showTooltip && (activeThumb === 'end' || hovering === 'end') && thumbStyle === 'default') && (\n <div className=\"absolute bottom-full mb-2 left-1/2 -translate-x-1/2 pointer-events-none z-20\">\n <div className=\"bg-on-surface text-surface text-label-sm px-2 py-0.5 rounded-md whitespace-nowrap shadow-md\">{fmt(end)}</div>\n <div className=\"w-0 h-0 border-l-4 border-r-4 border-t-4 border-l-transparent border-r-transparent border-t-on-surface mx-auto\" />\n </div>\n )}\n </div>\n </div>\n\n {showLabels && !label && (\n <div className=\"flex justify-between\">\n <span className=\"text-label-sm text-text-disabled\">{formatValue ? formatValue(min) : min}</span>\n <span className=\"text-label-sm text-text-disabled\">{formatValue ? formatValue(max) : max}</span>\n </div>\n )}\n </div>\n );\n }\n);\n\nRangeSlider.displayName = 'RangeSlider';","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Breadcrumb variants — CVA configuration.\n *\n * Variants: default, pill, outlined, dark, floating, gradient,\n * underline, arrow, glass, highlight, numbered\n * Separators: chevron, slash, dot, arrow\n */\n\nexport const breadcrumbVariants = cva(\n ['flex items-center flex-wrap'],\n {\n variants: {\n variant: {\n default: 'gap-0',\n pill: 'gap-1',\n outlined: 'border-[1.5px] border-outline rounded-lg overflow-hidden gap-0',\n dark: 'bg-on-surface px-3.5 py-2 rounded-lg gap-0',\n floating: 'bg-background border border-outline rounded-full px-4 py-1.5 shadow-md gap-0',\n gradient: 'gap-0',\n underline: 'gap-0',\n arrow: 'gap-0',\n glass: 'bg-white/10 backdrop-blur-md border border-white/20 rounded-full px-4 py-1.5 gap-0',\n highlight: 'gap-0',\n numbered: 'gap-0',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport const breadcrumbItemVariants = cva(\n ['flex items-center gap-1.5 text-label-md transition-colors duration-short'],\n {\n variants: {\n variant: {\n default: '',\n pill: 'px-3 py-1 rounded-full',\n outlined: 'px-3 py-1.5 border-r border-outline last:border-r-0',\n dark: '',\n floating: '',\n gradient: '',\n underline: '',\n arrow: 'px-4 py-1.5',\n glass: '',\n highlight: '',\n numbered: 'gap-2',\n },\n isActive: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n // Default\n { variant: 'default', isActive: false, class: 'text-text-secondary hover:text-primary cursor-pointer' },\n { variant: 'default', isActive: true, class: 'text-text-primary font-medium cursor-default' },\n // Pill\n { variant: 'pill', isActive: false, class: 'text-text-secondary bg-surface-variant hover:bg-primary-container/20 hover:text-primary cursor-pointer' },\n { variant: 'pill', isActive: true, class: 'text-primary bg-primary-container font-medium cursor-default' },\n // Outlined\n { variant: 'outlined', isActive: false, class: 'text-text-secondary hover:bg-surface-variant hover:text-primary cursor-pointer' },\n { variant: 'outlined', isActive: true, class: 'text-primary bg-primary-container/20 font-semibold cursor-default' },\n // Dark\n { variant: 'dark', isActive: false, class: 'text-surface/50 hover:text-surface cursor-pointer' },\n { variant: 'dark', isActive: true, class: 'text-surface font-medium cursor-default' },\n // Floating\n { variant: 'floating', isActive: false, class: 'text-text-secondary hover:text-primary cursor-pointer' },\n { variant: 'floating', isActive: true, class: 'text-text-primary font-semibold cursor-default' },\n // Gradient (active handled via CSS in component)\n { variant: 'gradient', isActive: false, class: 'text-text-secondary hover:text-primary cursor-pointer' },\n { variant: 'gradient', isActive: true, class: 'font-semibold cursor-default' },\n // Underline\n { variant: 'underline', isActive: false, class: 'text-text-secondary hover:text-primary cursor-pointer' },\n { variant: 'underline', isActive: true, class: 'text-text-primary font-medium border-b-2 border-primary pb-px cursor-default' },\n // Arrow\n { variant: 'arrow', isActive: false, class: 'text-text-secondary bg-surface-variant hover:bg-surface-container cursor-pointer' },\n { variant: 'arrow', isActive: true, class: 'text-on-primary bg-primary font-medium cursor-default' },\n // Glass\n { variant: 'glass', isActive: false, class: 'text-white/60 hover:text-white cursor-pointer' },\n { variant: 'glass', isActive: true, class: 'text-white font-semibold cursor-default' },\n // Highlight\n { variant: 'highlight', isActive: false, class: 'text-text-secondary hover:text-primary cursor-pointer' },\n { variant: 'highlight', isActive: true, class: 'text-primary bg-primary-container px-3 py-0.5 rounded-full font-medium cursor-default' },\n // Numbered\n { variant: 'numbered', isActive: false, class: 'text-text-secondary cursor-pointer' },\n { variant: 'numbered', isActive: true, class: 'text-primary font-medium cursor-default' },\n ],\n defaultVariants: {\n variant: 'default',\n isActive: false,\n },\n }\n);\n\nexport type BreadcrumbVariantProps = VariantProps<typeof breadcrumbVariants>;\nexport type BreadcrumbVariant = 'default' | 'pill' | 'outlined' | 'dark' | 'floating' | 'gradient' | 'underline' | 'arrow' | 'glass' | 'highlight' | 'numbered';\nexport type BreadcrumbSeparator = 'chevron' | 'slash' | 'dot' | 'arrow';","import {\n forwardRef,\n useState,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon, type IconName } from '../Icon';\nimport {\n breadcrumbVariants,\n breadcrumbItemVariants,\n type BreadcrumbVariant,\n type BreadcrumbSeparator,\n} from './Breadcrumb.variants';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface BreadcrumbItem {\n /** Display label. */\n label: string;\n /** URL or href. */\n href?: string;\n /** Leading icon. */\n icon?: IconName;\n /** Whether this is the current/active page. */\n active?: boolean;\n /** Click handler. */\n onClick?: () => void;\n /** Step number (for numbered variant). */\n step?: number;\n /** Step status (for numbered variant). */\n stepStatus?: 'done' | 'current' | 'pending';\n}\n\nexport interface BreadcrumbProps extends ComponentPropsWithoutRef<'nav'> {\n /** Array of breadcrumb items. */\n items: BreadcrumbItem[];\n\n /**\n * Visual variant.\n * - `default` → plain text with separator\n * - `pill` → each item is a pill badge\n * - `outlined` → segmented outlined container\n * - `dark` → dark background\n * - `floating` → elevated white pill container\n * - `gradient` → gradient text on active item\n * - `underline` → underline on active item\n * - `arrow` → chevron-shaped arrow badges\n * - `glass` → frosted glass (use on colored backgrounds)\n * - `highlight` → active item wrapped in pill\n * - `numbered` → step numbers with done/current/pending\n */\n variant?: BreadcrumbVariant;\n\n /**\n * Separator style.\n * - `chevron` → › (default)\n * - `slash` → /\n * - `dot` → •\n * - `arrow` → hidden (arrow variant uses clip-path)\n */\n separator?: BreadcrumbSeparator;\n\n /**\n * Custom separator element.\n */\n customSeparator?: ReactNode;\n\n /**\n * Maximum items to show before collapsing.\n * Items in the middle are collapsed into ···\n * 0 = show all (default)\n */\n maxItems?: number;\n\n /**\n * Show home icon on first item.\n */\n showHomeIcon?: boolean;\n}\n\n// ─── Breadcrumb ───────────────────────────────────────────────────────────────\n\n/**\n * Breadcrumb — hierarchical navigation trail.\n *\n * Features beyond M3:\n * - 11 variants: default, pill, outlined, dark, floating, gradient,\n * underline, arrow, glass, highlight, numbered\n * - 4 separator styles: chevron, slash, dot, arrow\n * - icons on items\n * - collapsible middle items with ellipsis\n * - home icon on first item\n * - step status for numbered variant\n * - full ARIA accessibility\n *\n * @example\n * <Breadcrumb\n * items={[\n * { label: 'Home', href: '/' },\n * { label: 'Settings', href: '/settings' },\n * { label: 'Profile', active: true },\n * ]}\n * />\n *\n * // Glass on dark background\n * <div className=\"bg-gradient-to-r from-primary to-secondary p-6\">\n * <Breadcrumb items={items} variant=\"glass\" />\n * </div>\n */\nexport const Breadcrumb = forwardRef<HTMLElement, BreadcrumbProps>(\n (\n {\n items,\n variant = 'default',\n separator = 'chevron',\n customSeparator,\n maxItems = 0,\n showHomeIcon = false,\n className,\n ...props\n },\n ref\n ) => {\n const [expanded, setExpanded] = useState(false);\n\n // Collapse middle items\n let displayItems = items;\n let collapsedItems: BreadcrumbItem[] = [];\n\n if (maxItems > 0 && !expanded && items.length > maxItems) {\n const keepStart = Math.ceil(maxItems / 2);\n const keepEnd = Math.floor(maxItems / 2);\n collapsedItems = items.slice(keepStart, items.length - keepEnd);\n displayItems = [\n ...items.slice(0, keepStart),\n ...items.slice(items.length - keepEnd),\n ];\n }\n\n function renderSeparator(_index: number) {\n if (variant === 'arrow') return null;\n if (customSeparator) return <span aria-hidden=\"true\" className=\"flex-shrink-0\">{customSeparator}</span>;\n\n const sepClass = cn(\n 'flex-shrink-0',\n variant === 'dark' || variant === 'glass'\n ? 'text-white/20'\n : 'text-text-disabled',\n );\n\n if (separator === 'slash') {\n return <span aria-hidden=\"true\" className={cn(sepClass, 'mx-2 text-label-md')}>/</span>;\n }\n if (separator === 'dot') {\n return (\n <span\n aria-hidden=\"true\"\n className={cn(\n 'mx-2 size-1 rounded-full flex-shrink-0',\n variant === 'dark' || variant === 'glass' ? 'bg-white/20' : 'bg-outline',\n )}\n />\n );\n }\n // Default chevron\n return (\n <Icon\n name=\"chevron-right\"\n size=\"sm\"\n aria-hidden\n className={cn(\n 'flex-shrink-0 mx-1',\n variant === 'dark' || variant === 'glass' ? 'text-white/20' : 'text-text-disabled',\n )}\n />\n );\n }\n\n function renderItem(item: BreadcrumbItem, index: number, _isCollapsedPlaceholder = false) {\n const isActive = item.active ?? (index === items.length - 1);\n const isFirst = index === 0;\n\n // Numbered variant special rendering\n if (variant === 'numbered') {\n const status = item.stepStatus ?? (isActive ? 'current' : index < (items.findIndex(i => i.active ?? false)) ? 'done' : 'pending');\n const stepNum = item.step ?? index + 1;\n\n return (\n <div key={index} className=\"flex items-center\">\n <div\n className={cn(\n 'flex items-center gap-2 cursor-pointer',\n status === 'pending' && 'opacity-50 cursor-default',\n )}\n onClick={!isActive ? item.onClick : undefined}\n >\n <span className={cn(\n 'size-6 rounded-full flex items-center justify-center text-label-sm font-bold flex-shrink-0',\n status === 'done' && 'bg-primary text-on-primary',\n status === 'current' && 'bg-primary-container text-primary border-[1.5px] border-primary',\n status === 'pending' && 'bg-surface-container text-text-disabled',\n )}>\n {status === 'done'\n ? <Icon name=\"check\" size=\"sm\" aria-hidden />\n : stepNum\n }\n </span>\n <span className={cn(\n 'text-label-md',\n status === 'done' && 'text-text-secondary',\n status === 'current' && 'text-primary font-medium',\n status === 'pending' && 'text-text-disabled',\n )}>\n {item.label}\n </span>\n </div>\n {index < displayItems.length - 1 && (\n <div className={cn(\n 'h-px mx-3 flex-shrink-0',\n status === 'done' ? 'w-6 bg-primary' : 'w-6 bg-outline',\n )} />\n )}\n </div>\n );\n }\n\n // Arrow variant special rendering\n if (variant === 'arrow') {\n return (\n <div\n key={index}\n onClick={!isActive ? item.onClick : undefined}\n className={cn(\n breadcrumbItemVariants({ variant, isActive }),\n 'relative mr-0.5',\n // Clip path arrow shape\n )}\n style={{\n clipPath: isFirst\n ? 'polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%)'\n : 'polygon(0 0, calc(100% - 8px) 0, 100% 50%, calc(100% - 8px) 100%, 0 100%, 8px 50%)',\n paddingLeft: isFirst ? '14px' : '20px',\n paddingRight: '14px',\n }}\n >\n {item.icon && <Icon name={item.icon} size=\"sm\" aria-hidden />}\n {item.label}\n </div>\n );\n }\n\n // Gradient variant — active item gets gradient text\n if (variant === 'gradient' && isActive) {\n return (\n <span\n key={index}\n className=\"text-label-md font-semibold bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent\"\n aria-current=\"page\"\n >\n {item.label}\n </span>\n );\n }\n\n const itemEl = (\n <div\n key={index}\n onClick={!isActive ? item.onClick : undefined}\n className={cn(breadcrumbItemVariants({ variant, isActive }))}\n aria-current={isActive ? 'page' : undefined}\n >\n {/* Home icon on first item */}\n {isFirst && showHomeIcon && !item.icon && (\n <Icon name=\"info\" size=\"sm\" aria-hidden className=\"text-text-secondary\" />\n )}\n {/* Item icon */}\n {item.icon && (\n <Icon name={item.icon} size=\"sm\" aria-hidden />\n )}\n {/* Label */}\n {item.href && !isActive ? (\n <a\n href={item.href}\n onClick={e => { e.preventDefault(); item.onClick?.(); }}\n className=\"hover:underline underline-offset-2 cursor-pointer\"\n >\n {item.label}\n </a>\n ) : (\n <span>{item.label}</span>\n )}\n </div>\n );\n\n return itemEl;\n }\n\n // Build display list with collapsed placeholder\n const finalItems: Array<BreadcrumbItem | 'ellipsis'> = [];\n if (maxItems > 0 && !expanded && collapsedItems.length > 0) {\n const keepStart = Math.ceil(maxItems / 2);\n const keepEnd = Math.floor(maxItems / 2);\n items.slice(0, keepStart).forEach(i => finalItems.push(i));\n finalItems.push('ellipsis');\n items.slice(items.length - keepEnd).forEach(i => finalItems.push(i));\n } else {\n items.forEach(i => finalItems.push(i));\n }\n\n return (\n <nav\n ref={ref}\n aria-label=\"Breadcrumb\"\n className={cn(breadcrumbVariants({ variant }), className)}\n {...props}\n >\n <ol className={cn(\n 'flex items-center flex-wrap',\n variant === 'numbered' ? 'gap-0' : 'gap-0',\n )}>\n {finalItems.map((item, index) => {\n if (item === 'ellipsis') {\n return (\n <li key=\"ellipsis\" className=\"flex items-center\">\n {index > 0 && renderSeparator(index)}\n <button\n type=\"button\"\n onClick={() => setExpanded(true)}\n aria-label=\"Show all breadcrumb items\"\n className={cn(\n 'inline-flex items-center justify-center size-6 rounded-md text-label-md',\n 'transition-colors cursor-pointer',\n variant === 'dark' || variant === 'glass'\n ? 'text-white/50 hover:text-white hover:bg-white/10'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-variant',\n )}\n >\n ···\n </button>\n {index < finalItems.length - 1 && renderSeparator(index)}\n </li>\n );\n }\n\n const realIndex = items.indexOf(item as BreadcrumbItem);\n\n return (\n <li key={realIndex} className=\"flex items-center\">\n {variant !== 'numbered' && index > 0 && renderSeparator(index)}\n {renderItem(item as BreadcrumbItem, realIndex)}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n }\n);\n\nBreadcrumb.displayName = 'Breadcrumb';","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Pagination variants — CVA configuration.\n *\n * Variants: default, outlined, pill, simple, compact, underline,\n * floating, dark, glass-card, vercel, notion, linear,\n * github, stripe, dots, table, segmented\n */\n\nexport const paginationVariants = cva(\n ['flex items-center'],\n {\n variants: {\n variant: {\n default: 'gap-1',\n outlined: 'gap-1',\n pill: 'gap-1',\n simple: 'gap-3',\n compact: 'gap-2',\n underline: 'gap-1 border-b-2 border-outline pb-0',\n floating: 'gap-1 bg-background border border-outline rounded-lg p-1 shadow-md',\n dark: 'gap-1 bg-on-surface px-3 py-2 rounded-lg',\n 'glass-card':'gap-1 bg-background rounded-lg p-1 shadow-[0_2px_12px_rgba(0,0,0,0.08),0_0_0_1px_rgba(0,0,0,0.04)]',\n vercel: 'gap-0 border border-outline rounded-lg overflow-hidden bg-background',\n notion: 'gap-3',\n linear: 'gap-1.5',\n github: 'gap-0 border border-outline rounded-md overflow-hidden',\n stripe: 'flex-col gap-3 w-full',\n dots: 'gap-1.5',\n table: 'items-center justify-between w-full bg-surface-variant px-4 py-2.5 rounded-lg',\n segmented: 'gap-0 border border-outline rounded-lg overflow-hidden',\n },\n },\n defaultVariants: {\n variant: 'default',\n },\n }\n);\n\nexport const paginationButtonVariants = cva(\n [\n 'inline-flex items-center justify-center',\n 'font-medium cursor-pointer select-none',\n 'transition-all duration-instant ease-standard',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-1',\n 'disabled:pointer-events-none disabled:opacity-40',\n ],\n {\n variants: {\n variant: {\n default: 'min-w-[36px] h-9 px-1.5 rounded-lg text-label-md text-text-secondary hover:bg-surface-variant',\n outlined: 'min-w-[36px] h-9 px-1.5 rounded-lg text-label-md border border-outline bg-background text-text-secondary hover:border-primary hover:text-primary',\n pill: 'min-w-[36px] h-9 px-1.5 rounded-full text-label-md text-text-secondary hover:bg-surface-variant',\n simple: 'h-9 px-4 rounded-lg text-label-md border border-outline bg-background text-text-secondary hover:border-primary hover:text-primary gap-1.5',\n compact: 'h-8 w-8 rounded-md text-label-md border border-outline bg-background text-text-secondary hover:border-primary hover:text-primary',\n underline: 'min-w-[36px] h-9 px-1.5 rounded-none text-label-md text-text-secondary border-b-2 border-transparent -mb-0.5 hover:text-primary hover:border-primary',\n floating: 'min-w-[36px] h-9 px-1.5 rounded-md text-label-md text-text-secondary hover:bg-surface-variant',\n dark: 'min-w-[36px] h-9 px-1.5 rounded-lg text-label-md text-surface/60 hover:bg-white/10 hover:text-surface',\n 'glass-card':'min-w-[36px] h-9 px-1.5 rounded-md text-label-md text-text-secondary hover:bg-surface-variant',\n vercel: 'min-w-[36px] h-9 px-2 text-label-md text-text-secondary border-r border-outline last:border-r-0 hover:bg-surface-variant rounded-none',\n notion: 'h-8 px-3 rounded-md text-label-sm border border-outline bg-background text-text-secondary hover:bg-surface-variant gap-1.5',\n linear: 'min-w-7 h-7 rounded-md text-label-sm text-text-secondary border border-transparent hover:border-outline hover:bg-surface-variant',\n github: 'min-w-[32px] h-8 px-2.5 text-label-sm text-text-primary border-r border-outline last:border-r-0 hover:bg-surface-variant rounded-none',\n stripe: 'h-8 px-3.5 rounded-md text-label-sm border border-outline bg-background text-text-secondary hover:bg-surface-variant gap-1.5 shadow-sm',\n dots: 'size-2 rounded-full bg-outline hover:bg-text-secondary transition-all cursor-pointer border-none p-0 min-w-0',\n table: 'h-7 w-7 rounded-md border border-outline bg-background text-text-secondary hover:border-primary hover:text-primary text-label-sm',\n segmented: 'h-9 px-4 text-label-md text-text-secondary border-r border-outline last:border-r-0 hover:bg-surface-variant rounded-none gap-1.5',\n },\n isActive: {\n true: '',\n false: '',\n },\n },\n compoundVariants: [\n { variant: 'default', isActive: true, class: 'bg-primary text-on-primary hover:bg-primary' },\n { variant: 'outlined', isActive: true, class: 'bg-primary text-on-primary border-primary hover:border-primary hover:text-on-primary' },\n { variant: 'pill', isActive: true, class: 'bg-primary text-on-primary hover:bg-primary' },\n { variant: 'underline', isActive: true, class: 'text-primary border-primary font-semibold hover:text-primary' },\n { variant: 'floating', isActive: true, class: 'bg-primary text-on-primary hover:bg-primary' },\n { variant: 'dark', isActive: true, class: 'bg-primary text-on-primary hover:bg-primary' },\n { variant: 'glass-card', isActive: true, class: 'bg-on-surface text-surface shadow-md hover:bg-on-surface' },\n { variant: 'vercel', isActive: true, class: 'bg-on-surface text-surface hover:bg-on-surface' },\n { variant: 'linear', isActive: true, class: 'bg-[#5E6AD2] text-white border-[#5E6AD2] hover:border-[#5E6AD2] hover:bg-[#5E6AD2]' },\n { variant: 'github', isActive: true, class: 'bg-primary text-on-primary hover:bg-primary' },\n { variant: 'segmented', isActive: true, class: 'bg-primary text-on-primary hover:bg-primary' },\n { variant: 'dots', isActive: true, class: 'bg-on-surface w-5 rounded-sm hover:bg-on-surface' },\n ],\n defaultVariants: {\n variant: 'default',\n isActive: false,\n },\n }\n);\n\nexport type PaginationVariantProps = VariantProps<typeof paginationVariants>;\nexport type PaginationVariant =\n | 'default' | 'outlined' | 'pill' | 'simple' | 'compact'\n | 'underline' | 'floating' | 'dark' | 'glass-card' | 'vercel'\n | 'notion' | 'linear' | 'github' | 'stripe' | 'dots' | 'table' | 'segmented';","import {\n forwardRef,\n useState,\n type ComponentPropsWithoutRef,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon } from '../Icon';\nimport {\n paginationVariants,\n paginationButtonVariants,\n type PaginationVariant,\n} from './Pagination.variants';\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction getPageNumbers(current: number, total: number, siblings = 1): Array<number | '...'> {\n const pages: Array<number | '...'> = [];\n const left = Math.max(2, current - siblings);\n const right = Math.min(total - 1, current + siblings);\n\n pages.push(1);\n if (left > 2) pages.push('...');\n for (let i = left; i <= right; i++) pages.push(i);\n if (right < total - 1) pages.push('...');\n if (total > 1) pages.push(total);\n\n return pages;\n}\n\n// ─── Pagination ───────────────────────────────────────────────────────────────\n\nexport interface PaginationProps extends ComponentPropsWithoutRef<'nav'> {\n /** Current page (1-indexed). */\n page: number;\n /** Total number of pages. */\n totalPages: number;\n /** Callback when page changes. */\n onPageChange: (page: number) => void;\n\n /**\n * Visual variant.\n */\n variant?: PaginationVariant;\n\n /**\n * Number of sibling pages shown around current.\n * @default 1\n */\n siblings?: number;\n\n /** Show first/last page buttons. */\n showFirstLast?: boolean;\n\n /** Show prev/next buttons. */\n showPrevNext?: boolean;\n\n /** Show page jump input. */\n showJump?: boolean;\n\n /**\n * For table variant — rows per page options.\n */\n rowsPerPage?: number;\n rowsPerPageOptions?: number[];\n onRowsPerPageChange?: (rows: number) => void;\n totalItems?: number;\n\n /** Loading state — shows skeleton. */\n loading?: boolean;\n\n /** Size. */\n size?: 'sm' | 'md' | 'lg';\n}\n\n/**\n * Pagination — page navigation component.\n *\n * Features beyond M3:\n * - 17 variants: default, outlined, pill, simple, compact, underline,\n * floating, dark, glass-card, vercel, notion, linear,\n * github, stripe, dots, table, segmented\n * - ellipsis for large page counts\n * - first/last page buttons\n * - page jump input\n * - table variant with rows per page\n * - loading skeleton state\n * - keyboard accessible\n *\n * @example\n * <Pagination page={3} totalPages={10} onPageChange={setPage} />\n * <Pagination page={3} totalPages={10} onPageChange={setPage} variant=\"vercel\" />\n * <Pagination page={3} totalPages={10} onPageChange={setPage} variant=\"dots\" />\n */\nexport const Pagination = forwardRef<HTMLElement, PaginationProps>(\n (\n {\n page,\n totalPages,\n onPageChange,\n variant = 'default',\n siblings = 1,\n showFirstLast = false,\n showPrevNext = true,\n showJump = false,\n rowsPerPage = 10,\n rowsPerPageOptions = [10, 25, 50, 100],\n onRowsPerPageChange,\n totalItems,\n loading = false,\n size = 'md',\n className,\n ...props\n },\n ref\n ) => {\n const [jumpValue, setJumpValue] = useState('');\n const pages = getPageNumbers(page, totalPages, siblings);\n\n function go(p: number) {\n if (p >= 1 && p <= totalPages) onPageChange(p);\n }\n\n function handleJump(e: React.KeyboardEvent<HTMLInputElement>) {\n if (e.key === 'Enter') {\n const n = parseInt(jumpValue);\n if (!isNaN(n)) { go(n); setJumpValue(''); }\n }\n }\n\n const btn = (p: number | '...', key: string | number, label?: string) => {\n if (p === '...') {\n return (\n <span key={key} className={cn(\n 'flex items-center justify-center text-text-disabled text-label-md',\n variant === 'vercel' || variant === 'github' ? 'px-2 border-r border-outline h-9' : 'px-1',\n )}>···</span>\n );\n }\n return (\n <button\n key={key}\n type=\"button\"\n onClick={() => go(p)}\n aria-label={`Page ${p}`}\n aria-current={p === page ? 'page' : undefined}\n className={cn(paginationButtonVariants({ variant, isActive: p === page }))}\n >\n {label ?? p}\n </button>\n );\n };\n\n const prevBtn = (label?: string) => (\n <button\n type=\"button\"\n onClick={() => go(page - 1)}\n disabled={page <= 1}\n aria-label=\"Previous page\"\n className={cn(paginationButtonVariants({ variant, isActive: false }))}\n >\n {variant === 'simple' || variant === 'notion' || variant === 'stripe' || variant === 'github' || variant === 'segmented'\n ? <><Icon name=\"chevron-left\" size=\"sm\" aria-hidden />{label ?? 'Previous'}</>\n : <Icon name=\"chevron-left\" size=\"sm\" aria-hidden />\n }\n </button>\n );\n\n const nextBtn = (label?: string) => (\n <button\n type=\"button\"\n onClick={() => go(page + 1)}\n disabled={page >= totalPages}\n aria-label=\"Next page\"\n className={cn(paginationButtonVariants({ variant, isActive: false }))}\n >\n {variant === 'simple' || variant === 'notion' || variant === 'stripe' || variant === 'github' || variant === 'segmented'\n ? <>{label ?? 'Next'}<Icon name=\"chevron-right\" size=\"sm\" aria-hidden /></>\n : <Icon name=\"chevron-right\" size=\"sm\" aria-hidden />\n }\n </button>\n );\n\n // Loading skeleton\n if (loading) {\n return (\n <nav ref={ref} aria-label=\"Pagination\" className={cn('flex items-center gap-1', className)}>\n {[1,2,3,4,5,6,7].map(i => (\n <div key={i} className=\"animate-pulse bg-surface-container rounded-lg w-9 h-9\" />\n ))}\n </nav>\n );\n }\n\n // ── Dots variant ──\n if (variant === 'dots') {\n return (\n <nav ref={ref} aria-label=\"Pagination\" className={cn(paginationVariants({ variant }), className)} {...props}>\n {showPrevNext && (\n <button type=\"button\" onClick={() => go(page - 1)} disabled={page <= 1}\n className=\"size-7 rounded-md flex items-center justify-center text-text-secondary hover:bg-surface-variant transition-colors disabled:opacity-40 border-none bg-transparent cursor-pointer\">\n <Icon name=\"chevron-left\" size=\"sm\" aria-hidden />\n </button>\n )}\n {Array.from({ length: totalPages }, (_, i) => i + 1).map(p => (\n <button\n key={p}\n type=\"button\"\n onClick={() => go(p)}\n aria-label={`Page ${p}`}\n aria-current={p === page ? 'page' : undefined}\n className={cn(\n paginationButtonVariants({ variant, isActive: p === page }),\n 'border-none p-0',\n )}\n />\n ))}\n {showPrevNext && (\n <button type=\"button\" onClick={() => go(page + 1)} disabled={page >= totalPages}\n className=\"size-7 rounded-md flex items-center justify-center text-text-secondary hover:bg-surface-variant transition-colors disabled:opacity-40 border-none bg-transparent cursor-pointer\">\n <Icon name=\"chevron-right\" size=\"sm\" aria-hidden />\n </button>\n )}\n </nav>\n );\n }\n\n // ── Simple / Notion / Stripe ──\n if (variant === 'simple' || variant === 'notion') {\n return (\n <nav ref={ref} aria-label=\"Pagination\" className={cn(paginationVariants({ variant }), className)} {...props}>\n {prevBtn()}\n <span className=\"text-label-md text-text-secondary\">\n Page <strong className=\"text-text-primary\">{page}</strong> of <strong className=\"text-text-primary\">{totalPages}</strong>\n </span>\n {nextBtn()}\n </nav>\n );\n }\n\n // ── Stripe ──\n if (variant === 'stripe') {\n const start = (page - 1) * rowsPerPage + 1;\n const end = Math.min(page * rowsPerPage, totalItems ?? page * rowsPerPage);\n return (\n <nav ref={ref} aria-label=\"Pagination\" className={cn(paginationVariants({ variant }), className)} {...props}>\n <div className=\"flex items-center justify-between\">\n <span className=\"text-body-sm text-text-secondary\">\n Showing <strong className=\"text-text-primary\">{start}–{end}</strong>\n {totalItems && <> of <strong className=\"text-text-primary\">{totalItems} results</strong></>}\n </span>\n <div className=\"flex gap-2\">\n {prevBtn()}\n {nextBtn()}\n </div>\n </div>\n </nav>\n );\n }\n\n // ── Compact ──\n if (variant === 'compact') {\n return (\n <nav ref={ref} aria-label=\"Pagination\" className={cn(paginationVariants({ variant }), className)} {...props}>\n <button type=\"button\" onClick={() => go(page - 1)} disabled={page <= 1}\n className={cn(paginationButtonVariants({ variant, isActive: false }))}>\n <Icon name=\"chevron-left\" size=\"sm\" aria-hidden />\n </button>\n <span className=\"text-label-md text-text-secondary whitespace-nowrap\">\n Page <strong className=\"text-text-primary\">{page}</strong> of {totalPages}\n </span>\n <button type=\"button\" onClick={() => go(page + 1)} disabled={page >= totalPages}\n className={cn(paginationButtonVariants({ variant, isActive: false }))}>\n <Icon name=\"chevron-right\" size=\"sm\" aria-hidden />\n </button>\n </nav>\n );\n }\n\n // ── Segmented ──\n if (variant === 'segmented') {\n return (\n <nav ref={ref} aria-label=\"Pagination\" className={cn(paginationVariants({ variant }), className)} {...props}>\n {prevBtn()}\n <button\n type=\"button\"\n className={cn(paginationButtonVariants({ variant, isActive: true }))}\n >\n {page} / {totalPages}\n </button>\n {nextBtn()}\n </nav>\n );\n }\n\n // ── Table ──\n if (variant === 'table') {\n const start = (page - 1) * rowsPerPage + 1;\n const end = Math.min(page * rowsPerPage, totalItems ?? page * rowsPerPage);\n return (\n <nav ref={ref} aria-label=\"Pagination\" className={cn(paginationVariants({ variant }), className)} {...props}>\n <div className=\"flex items-center gap-2 text-body-sm text-text-secondary\">\n <span>Rows per page:</span>\n <select\n value={rowsPerPage}\n onChange={e => onRowsPerPageChange?.(Number(e.target.value))}\n className=\"h-7 px-2 border border-outline rounded-md text-label-sm text-text-primary bg-background outline-none focus:border-primary\"\n >\n {rowsPerPageOptions.map(o => <option key={o} value={o}>{o}</option>)}\n </select>\n {totalItems && <span className=\"ml-2\">{start}–{end} of {totalItems}</span>}\n </div>\n <div className=\"flex items-center gap-1\">\n {showFirstLast && (\n <button type=\"button\" onClick={() => go(1)} disabled={page <= 1}\n className={cn(paginationButtonVariants({ variant, isActive: false }))}>\n <Icon name=\"chevron-left\" size=\"sm\" aria-hidden />\n <Icon name=\"chevron-left\" size=\"sm\" aria-hidden className=\"-ml-2\" />\n </button>\n )}\n <button type=\"button\" onClick={() => go(page - 1)} disabled={page <= 1}\n className={cn(paginationButtonVariants({ variant, isActive: false }))}>\n <Icon name=\"chevron-left\" size=\"sm\" aria-hidden />\n </button>\n <span className=\"text-label-sm text-text-secondary px-2\">{page} of {totalPages}</span>\n <button type=\"button\" onClick={() => go(page + 1)} disabled={page >= totalPages}\n className={cn(paginationButtonVariants({ variant, isActive: false }))}>\n <Icon name=\"chevron-right\" size=\"sm\" aria-hidden />\n </button>\n {showFirstLast && (\n <button type=\"button\" onClick={() => go(totalPages)} disabled={page >= totalPages}\n className={cn(paginationButtonVariants({ variant, isActive: false }))}>\n <Icon name=\"chevron-right\" size=\"sm\" aria-hidden />\n <Icon name=\"chevron-right\" size=\"sm\" aria-hidden className=\"-ml-2\" />\n </button>\n )}\n </div>\n </nav>\n );\n }\n\n // ── Default / all number-based variants ──\n return (\n <nav ref={ref} aria-label=\"Pagination\" className={cn(paginationVariants({ variant }), className)} {...props}>\n {showFirstLast && (\n <button type=\"button\" onClick={() => go(1)} disabled={page <= 1}\n className={cn(paginationButtonVariants({ variant, isActive: false }))}>\n <Icon name=\"chevron-left\" size=\"sm\" aria-hidden />\n <Icon name=\"chevron-left\" size=\"sm\" aria-hidden className=\"-ml-3\" />\n </button>\n )}\n\n {showPrevNext && prevBtn()}\n\n {pages.map((p, i) => btn(p, i))}\n\n {showPrevNext && nextBtn()}\n\n {showFirstLast && (\n <button type=\"button\" onClick={() => go(totalPages)} disabled={page >= totalPages}\n className={cn(paginationButtonVariants({ variant, isActive: false }))}>\n <Icon name=\"chevron-right\" size=\"sm\" aria-hidden />\n <Icon name=\"chevron-right\" size=\"sm\" aria-hidden className=\"-ml-3\" />\n </button>\n )}\n\n {showJump && (\n <div className=\"flex items-center gap-2 ml-2\">\n <span className=\"text-label-sm text-text-secondary\">Go to</span>\n <input\n type=\"number\"\n min={1}\n max={totalPages}\n value={jumpValue}\n onChange={e => setJumpValue(e.target.value)}\n onKeyDown={handleJump}\n placeholder={String(page)}\n className=\"w-12 h-9 border border-outline rounded-lg text-center text-label-md text-text-primary bg-background outline-none focus:border-primary\"\n aria-label=\"Jump to page\"\n />\n </div>\n )}\n </nav>\n );\n }\n);\n\nPagination.displayName = 'Pagination';","import {\n forwardRef,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon, type IconName } from '../Icon';\nimport { Avatar } from '../Avatar';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface NavItem {\n id: string;\n label: string;\n icon?: IconName;\n badge?: number | string;\n href?: string;\n onClick?: () => void;\n disabled?: boolean;\n children?: NavItem[];\n}\n\nexport interface NavSection {\n label?: string;\n items: NavItem[];\n}\n\nexport type NavbarVariant =\n | 'default'\n | 'saas'\n | 'vercel'\n | 'notion'\n | 'linear'\n | 'stripe'\n | 'glass'\n | 'dark'\n | 'floating'\n | 'centered'\n | 'frosted'\n | 'pill'\n | 'gradient'\n | 'outlined'\n | 'two-row'\n | 'command';\n\nexport interface NavbarProps extends ComponentPropsWithoutRef<'nav'> {\n /**\n * Visual variant.\n */\n variant?: NavbarVariant;\n\n /**\n * Nav items shown in the center/main area.\n */\n items?: NavItem[];\n\n /**\n * Active item id.\n */\n activeId?: string;\n\n /**\n * Callback when nav item is clicked.\n */\n onItemClick?: (item: NavItem) => void;\n\n /**\n * Logo/brand element.\n */\n logo?: ReactNode;\n\n /**\n * Brand name text (if no logo element).\n */\n brandName?: string;\n\n /**\n * Right side actions (buttons, avatar, search, etc).\n */\n actions?: ReactNode;\n\n /**\n * Sub-tabs for two-row variant.\n */\n subItems?: NavItem[];\n\n /**\n * Active sub-item id.\n */\n activeSubId?: string;\n\n /**\n * Title for two-row/notion variant.\n */\n title?: string;\n\n /**\n * Show search trigger with ⌘K for command variant.\n */\n showSearch?: boolean;\n\n /**\n * Callback for search click.\n */\n onSearchClick?: () => void;\n\n /**\n * For sidebar type navbars.\n */\n sections?: NavSection[];\n\n /**\n * Sidebar collapsed state.\n */\n collapsed?: boolean;\n\n /**\n * Workspace name for linear variant.\n */\n workspaceName?: string;\n\n /**\n * Workspace icon/initials.\n */\n workspaceIcon?: string;\n\n /**\n * User info for profile area.\n */\n user?: {\n name: string;\n email?: string;\n avatarSrc?: string;\n };\n}\n\n// ─── Navbar ───────────────────────────────────────────────────────────────────\n\n/**\n * Navbar — a flexible navigation component for web apps.\n *\n * 16 variants covering every real-world web use case:\n * default, saas, vercel, notion, linear, stripe, glass, dark,\n * floating, centered, frosted, pill, gradient, outlined, two-row, command\n *\n * Also includes Sidebar and IconSidebar for dashboard layouts.\n */\nexport const Navbar = forwardRef<HTMLElement, NavbarProps>(\n (\n {\n variant = 'default',\n items = [],\n activeId,\n onItemClick,\n logo,\n brandName = 'Brand',\n actions,\n subItems = [],\n activeSubId,\n title,\n showSearch = false,\n onSearchClick,\n sections,\n collapsed,\n workspaceName = 'Workspace',\n workspaceIcon = 'WS',\n user,\n className,\n ...props\n },\n ref\n ) => {\n function handleItemClick(item: NavItem) {\n item.onClick?.();\n onItemClick?.(item);\n }\n\n const brandEl = logo ?? (\n <span className=\"text-label-lg font-bold text-text-primary\">{brandName}</span>\n );\n\n // ── Sidebar ──\n if (variant === 'default' && sections) {\n return (\n <Sidebar\n sections={sections}\n activeId={activeId}\n onItemClick={onItemClick}\n collapsed={collapsed}\n brandName={brandName}\n logo={logo}\n user={user}\n className={className}\n />\n );\n }\n\n // ── Two-row ──\n if (variant === 'two-row') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'bg-background border border-outline rounded-lg overflow-hidden',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center justify-between h-[52px] px-4 border-b border-outline-variant\">\n <div className=\"flex items-center gap-3\">\n {brandEl}\n {title && <span className=\"text-label-lg font-semibold text-text-primary\">{title}</span>}\n </div>\n {actions}\n </div>\n <div className=\"flex items-center h-9 px-2\">\n {subItems.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'h-full px-3 text-label-sm font-medium border-b-2 transition-colors',\n activeSubId === item.id\n ? 'text-primary border-primary'\n : 'text-text-secondary border-transparent hover:text-text-primary hover:border-outline',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n </nav>\n );\n }\n\n // ── Notion ──\n if (variant === 'notion') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'flex items-center justify-between h-11 px-4 bg-background border border-outline rounded-lg',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-1 text-label-md\">\n {items.map((item, i) => (\n <span key={item.id} className=\"flex items-center gap-1\">\n {i > 0 && <Icon name=\"chevron-right\" size=\"sm\" className=\"text-text-disabled\" aria-hidden />}\n <button\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'transition-colors',\n activeId === item.id\n ? 'text-text-primary font-semibold'\n : 'text-text-secondary hover:text-text-primary',\n )}\n >\n {item.label}\n </button>\n </span>\n ))}\n </div>\n {actions}\n </nav>\n );\n }\n\n // ── Vercel / Dark ──\n if (variant === 'vercel' || variant === 'dark') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'flex items-center justify-between px-4 rounded-lg',\n variant === 'vercel' ? 'h-12 bg-on-surface' : 'h-14 bg-on-surface',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-5\">\n <span className=\"text-label-lg font-bold text-surface\">{brandName}</span>\n <div className=\"flex gap-0.5\">\n {items.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'px-2.5 py-1.5 rounded-md text-label-sm transition-colors',\n activeId === item.id\n ? 'text-surface font-medium'\n : 'text-surface/50 hover:text-surface hover:bg-white/10',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n </div>\n {actions}\n </nav>\n );\n }\n\n // ── Linear ──\n if (variant === 'linear') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'flex items-center justify-between h-[52px] px-4 bg-surface-variant border border-outline rounded-lg',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-0\">\n <div className=\"flex items-center gap-2 px-3 py-1.5 rounded-md hover:bg-surface-container cursor-pointer transition-colors\">\n <div className=\"size-5 rounded-md bg-primary flex items-center justify-center text-[10px] font-bold text-on-primary flex-shrink-0\">\n {workspaceIcon}\n </div>\n <span className=\"text-label-md font-semibold text-text-primary\">{workspaceName}</span>\n <Icon name=\"chevron-down\" size=\"sm\" className=\"text-text-secondary\" aria-hidden />\n </div>\n <div className=\"w-px h-5 bg-outline mx-1\" />\n <div className=\"flex gap-0.5\">\n {items.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'flex items-center gap-1.5 px-2.5 py-1.5 rounded-md text-label-sm transition-colors',\n activeId === item.id\n ? 'bg-surface-container text-text-primary font-medium dark:bg-white/15 dark:text-white'\n : 'text-text-secondary hover:bg-surface-container hover:text-text-primary dark:text-white/60 dark:hover:text-white dark:hover:bg-white/10',\n )}\n >\n {item.icon && <Icon name={item.icon} size=\"sm\" aria-hidden />}\n {item.label}\n </button>\n ))}\n </div>\n </div>\n {actions ?? (\n <div className=\"flex items-center gap-1.5\">\n <button type=\"button\" className=\"size-7 rounded-md flex items-center justify-center text-text-secondary hover:bg-surface-container transition-colors\">\n <Icon name=\"search\" size=\"sm\" aria-hidden />\n </button>\n <button type=\"button\" className=\"size-7 rounded-md flex items-center justify-center text-text-secondary hover:bg-surface-container transition-colors\">\n <Icon name=\"bell\" size=\"sm\" aria-hidden />\n </button>\n {user && (\n <Avatar name={user.name} src={user.avatarSrc} size=\"xs\" />\n )}\n </div>\n )}\n </nav>\n );\n }\n\n // ── Stripe ──\n if (variant === 'stripe') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'flex items-center justify-between h-[52px] px-5 bg-background border border-outline rounded-lg',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-5\">\n {brandEl}\n <div className=\"flex gap-0 h-[52px]\">\n {items.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'px-3.5 text-label-sm border-b-2 transition-colors h-full',\n activeId === item.id\n ? 'text-text-primary border-text-primary font-medium dark:text-white dark:border-white'\n : 'text-text-secondary hover:text-text-primary dark:text-white/60 dark:hover:text-white dark:hover:bg-white/10',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n </div>\n {actions}\n </nav>\n );\n }\n\n // ── Glass ──\n if (variant === 'glass') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'flex items-center justify-between h-12 px-4',\n 'bg-white/10 backdrop-blur-md border border-white/20 rounded-lg',\n className,\n )}\n {...props}\n >\n <span className=\"text-label-lg font-bold text-white\">{brandName}</span>\n <div className=\"flex gap-0.5\">\n {items.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'px-2.5 py-1.5 rounded-md text-label-sm transition-colors',\n activeId === item.id\n ? 'bg-white/15 text-white font-medium'\n : 'text-white/60 hover:bg-white/10 hover:text-white',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n {actions}\n </nav>\n );\n }\n\n // ── Frosted ──\n if (variant === 'frosted') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'flex items-center justify-between h-12 px-4',\n 'bg-background/80 backdrop-blur-xl border border-black/8 rounded-lg shadow-md',\n className,\n )}\n {...props}\n >\n <span className=\"text-label-lg font-bold text-text-primary\">{brandName}</span>\n <div className=\"flex gap-0.5\">\n {items.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'px-2.5 py-1.5 rounded-md text-label-sm transition-colors',\n activeId === item.id\n ? 'bg-black/6 text-text-primary font-medium'\n : 'text-text-secondary hover:bg-black/5 hover:text-text-primary',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n {actions}\n </nav>\n );\n }\n\n // ── Centered ──\n if (variant === 'centered') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'relative flex items-center justify-between h-14 px-6 bg-background border border-outline rounded-lg',\n className,\n )}\n {...props}\n >\n {brandEl}\n <div className=\"absolute left-1/2 -translate-x-1/2 flex gap-0.5\">\n {items.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'px-3 py-1.5 rounded-md text-label-sm transition-colors',\n activeId === item.id\n ? 'bg-surface-container text-text-primary font-medium dark:bg-white/15 dark:text-white'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-container dark:text-white/60 dark:hover:text-white dark:hover:bg-white/10',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n {actions}\n </nav>\n );\n }\n\n // ── Pill ──\n if (variant === 'pill') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'flex items-center justify-between h-14 px-5 bg-background border border-outline rounded-lg',\n className,\n )}\n {...props}\n >\n {brandEl}\n <div className=\"flex gap-0.5 bg-surface-variant p-1 rounded-lg\">\n {items.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'px-3.5 py-1.5 rounded-md text-label-sm font-medium transition-all',\n activeId === item.id\n ? 'bg-background dark:bg-white/15 text-text-primary dark:text-white shadow-sm'\n : 'text-text-secondary hover:text-text-primary dark:text-white/60 dark:hover:text-white dark:hover:bg-white/10',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n {actions}\n </nav>\n );\n }\n\n // ── Gradient ──\n if (variant === 'gradient') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'flex items-center justify-between h-14 px-5',\n 'bg-gradient-to-r from-primary to-secondary rounded-lg',\n className,\n )}\n {...props}\n >\n <span className=\"text-label-lg font-bold text-on-primary\">{brandName}</span>\n <div className=\"flex gap-0.5\">\n {items.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'px-3 py-1.5 rounded-md text-label-sm transition-colors',\n activeId === item.id\n ? 'bg-white/15 text-white font-medium'\n : 'text-white/70 hover:bg-white/10 hover:text-white',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n {actions}\n </nav>\n );\n }\n\n // ── Outlined ──\n if (variant === 'outlined') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'flex items-center justify-between h-[52px] px-4 bg-background border border-outline rounded-lg',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-4\">\n {brandEl}\n <div className=\"flex border border-outline rounded-md overflow-hidden\">\n {items.map((item, i) => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'px-3.5 py-1.5 text-label-sm font-medium transition-colors',\n i > 0 && 'border-l border-outline',\n activeId === item.id\n ? 'bg-primary text-on-primary'\n : 'text-text-secondary bg-background hover:bg-surface-container dark:text-white/60 dark:hover:text-white dark:hover:bg-white/10',\n )}\n >\n {item.label}\n </button>\n ))}\n </div>\n </div>\n {actions}\n </nav>\n );\n }\n\n // ── Command ──\n if (variant === 'command') {\n return (\n <nav\n ref={ref}\n className={cn(\n 'flex items-center gap-2 h-11 px-3 bg-background border border-outline rounded-lg shadow-md',\n className,\n )}\n {...props}\n >\n <div className=\"size-7 rounded-md bg-on-surface flex items-center justify-center text-label-sm font-bold text-surface flex-shrink-0\">\n {brandName.slice(0, 1)}\n </div>\n <div className=\"flex flex-1 gap-0.5\">\n {items.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n className={cn(\n 'flex items-center gap-1.5 px-2 py-1 rounded-md text-label-sm transition-colors',\n activeId === item.id\n ? 'bg-surface-container text-text-primary font-medium dark:bg-white/15 dark:text-white'\n : 'text-text-secondary hover:bg-surface-container hover:text-text-primary dark:text-white/60 dark:hover:text-white dark:hover:bg-white/10',\n )}\n >\n {item.icon && <Icon name={item.icon} size=\"sm\" aria-hidden />}\n {item.label}\n </button>\n ))}\n </div>\n {showSearch && (\n <button\n type=\"button\"\n onClick={onSearchClick}\n className=\"flex items-center gap-2 h-7 px-2.5 rounded-md bg-surface-variant text-label-sm text-text-secondary hover:bg-surface-container transition-colors flex-shrink-0\"\n >\n <Icon name=\"search\" size=\"sm\" aria-hidden />\n <span>Search</span>\n <kbd className=\"text-[10px] font-mono bg-background px-1.5 py-0.5 rounded border border-outline\">⌘K</kbd>\n </button>\n )}\n {actions}\n </nav>\n );\n }\n\n // ── SaaS (default top nav) ──\n return (\n <nav\n ref={ref}\n className={cn(\n 'flex items-center justify-between h-14 px-5 bg-background border border-outline rounded-lg',\n className,\n )}\n {...props}\n >\n <div className=\"flex items-center gap-6\">\n {brandEl}\n <div className=\"flex gap-0.5\">\n {items.map(item => (\n <button\n key={item.id}\n type=\"button\"\n onClick={() => handleItemClick(item)}\n disabled={item.disabled}\n className={cn(\n 'flex items-center gap-1.5 px-3 py-1.5 rounded-md text-label-sm transition-colors',\n 'disabled:opacity-40 disabled:cursor-not-allowed',\n activeId === item.id\n ? 'bg-surface-container text-text-primary font-medium dark:bg-white/15 dark:text-white'\n : 'text-text-secondary hover:text-text-primary hover:bg-surface-container dark:text-white/60 dark:hover:text-white dark:hover:bg-white/10',\n )}\n >\n {item.icon && <Icon name={item.icon} size=\"sm\" aria-hidden />}\n {item.label}\n {item.badge !== undefined && (\n <span className=\"inline-flex items-center justify-center min-w-[16px] h-4 px-1 rounded-full text-[10px] font-semibold bg-error text-on-error\">\n {item.badge}\n </span>\n )}\n </button>\n ))}\n </div>\n </div>\n {actions}\n </nav>\n );\n }\n);\n\nNavbar.displayName = 'Navbar';\n\n// ─── Sidebar ──────────────────────────────────────────────────────────────────\n\nexport interface SidebarProps {\n sections?: NavSection[];\n activeId?: string;\n onItemClick?: (item: NavItem) => void;\n collapsed?: boolean;\n brandName?: string;\n logo?: ReactNode;\n user?: { name: string; email?: string; avatarSrc?: string };\n className?: string;\n}\n\n/**\n * Sidebar — a vertical navigation panel for dashboards.\n */\nexport function Sidebar({\n sections = [],\n activeId,\n onItemClick,\n collapsed = false,\n brandName = 'Brand',\n logo,\n user,\n className,\n}: SidebarProps) {\n return (\n <aside className={cn(\n 'flex flex-col bg-background border-r border-outline transition-all duration-medium',\n collapsed ? 'w-16' : 'w-56',\n className,\n )}>\n {/* Brand */}\n <div className={cn(\n 'flex items-center gap-2.5 h-14 px-4 border-b border-outline flex-shrink-0',\n collapsed && 'justify-center px-2',\n )}>\n {logo ?? (\n <div className=\"size-7 rounded-md bg-primary flex items-center justify-center text-label-sm font-bold text-on-primary flex-shrink-0\">\n {brandName.slice(0, 1)}\n </div>\n )}\n {!collapsed && (\n <span className=\"text-label-lg font-bold text-text-primary truncate\">{brandName}</span>\n )}\n </div>\n\n {/* Nav sections */}\n <div className=\"flex-1 overflow-y-auto py-2 px-2 space-y-4\">\n {sections.map((section, si) => (\n <div key={si}>\n {section.label && !collapsed && (\n <p className=\"px-2 py-1 text-label-sm text-text-disabled uppercase tracking-wider\">\n {section.label}\n </p>\n )}\n <div className=\"space-y-0.5\">\n {section.items.map(item => (\n <button\n key={item.id}\n type=\"button\"\n disabled={item.disabled}\n onClick={() => onItemClick?.(item)}\n title={collapsed ? item.label : undefined}\n className={cn(\n 'w-full flex items-center gap-2.5 px-2.5 py-2 rounded-md text-label-md transition-colors',\n 'disabled:opacity-40 disabled:cursor-not-allowed',\n collapsed && 'justify-center px-0',\n activeId === item.id\n ? 'bg-primary-container text-primary font-medium'\n : 'text-text-secondary hover:bg-surface-variant hover:text-text-primary',\n )}\n >\n {item.icon && (\n <Icon name={item.icon} size=\"sm\" aria-hidden className=\"flex-shrink-0\" />\n )}\n {!collapsed && (\n <>\n <span className=\"flex-1 text-left truncate\">{item.label}</span>\n {item.badge !== undefined && (\n <span className=\"inline-flex items-center justify-center min-w-[18px] h-[18px] px-1 rounded-full text-[10px] font-semibold bg-error text-on-error\">\n {item.badge}\n </span>\n )}\n </>\n )}\n </button>\n ))}\n </div>\n </div>\n ))}\n </div>\n\n {/* User area */}\n {user && (\n <div className={cn(\n 'flex items-center gap-2.5 px-3 py-3 border-t border-outline flex-shrink-0',\n collapsed && 'justify-center px-2',\n )}>\n <Avatar name={user.name} src={user.avatarSrc} size=\"xs\" />\n {!collapsed && (\n <div className=\"flex-1 min-w-0\">\n <p className=\"text-label-sm text-text-primary font-medium truncate\">{user.name}</p>\n {user.email && <p className=\"text-body-sm text-text-secondary truncate\">{user.email}</p>}\n </div>\n )}\n </div>\n )}\n </aside>\n );\n}","import {\n forwardRef,\n Fragment,\n type ComponentPropsWithoutRef,\n type ReactNode,\n} from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon, type IconName } from '../Icon';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport type StepStatus = 'done' | 'active' | 'pending' | 'error';\n\nexport interface StepItem {\n id: string;\n label: string;\n description?: string;\n sublabel?: string;\n icon?: IconName;\n status?: StepStatus;\n optional?: boolean;\n content?: ReactNode;\n}\n\nexport type StepperVariant =\n | 'default'\n | 'pill'\n | 'dot'\n | 'badge'\n | 'timeline'\n | 'gradient'\n | 'checklist'\n | 'card'\n | 'progress'\n | 'icon';\n\nexport interface StepperProps extends ComponentPropsWithoutRef<'div'> {\n /** Array of steps. */\n steps: StepItem[];\n /** Index of the active step (0-based). */\n activeStep: number;\n /** Callback when a step is clicked. */\n onStepClick?: (index: number, step: StepItem) => void;\n /** Visual variant. */\n variant?: StepperVariant;\n /** Orientation. */\n orientation?: 'horizontal' | 'vertical';\n /** Allow clicking on completed steps to go back. */\n clickable?: boolean;\n /** Color scheme. */\n color?: 'default' | 'success' | 'secondary';\n /** Show step content below (for horizontal) or beside (for vertical). */\n showContent?: boolean;\n}\n\n// ─── Helpers ──────────────────────────────────────────────────────────────────\n\nfunction getStepStatus(index: number, activeStep: number, step: StepItem): StepStatus {\n if (step.status) return step.status;\n if (index < activeStep) return 'done';\n if (index === activeStep) return 'active';\n return 'pending';\n}\n\n// ─── Stepper ──────────────────────────────────────────────────────────────────\n\n/**\n * Stepper — a multi-step progress indicator.\n *\n * Features beyond M3:\n * - 10 variants: default, pill, dot, badge, timeline, gradient,\n * checklist, card, progress, icon\n * - horizontal and vertical orientations\n * - clickable steps (navigate back)\n * - error state per step\n * - optional step labels\n * - description/sublabel on steps\n * - content panel\n *\n * @example\n * <Stepper steps={steps} activeStep={2} />\n * <Stepper steps={steps} activeStep={1} variant=\"timeline\" orientation=\"vertical\" />\n * <Stepper steps={steps} activeStep={2} variant=\"gradient\" />\n */\nexport const Stepper = forwardRef<HTMLDivElement, StepperProps>(\n (\n {\n steps,\n activeStep,\n onStepClick,\n variant = 'default',\n orientation = 'horizontal',\n clickable = true,\n color = 'default',\n showContent = false,\n className,\n ...props\n },\n ref\n ) => {\n const isVertical = orientation === 'vertical';\n\n function handleClick(index: number, step: StepItem) {\n if (!clickable) return;\n if (index < activeStep) onStepClick?.(index, step);\n }\n\n // ── Progress variant ──\n if (variant === 'progress') {\n const pct = Math.round((activeStep / (steps.length - 1)) * 100);\n return (\n <div ref={ref} className={cn('flex flex-col gap-4', className)} {...props}>\n <div className=\"h-1 bg-surface-container rounded-full overflow-hidden\">\n <div\n className=\"h-full bg-primary rounded-full transition-all duration-500\"\n style={{ width: `${pct}%` }}\n />\n </div>\n <div className=\"flex justify-between\">\n {steps.map((step, i) => {\n const status = getStepStatus(i, activeStep, step);\n return (\n <div key={step.id} className=\"flex flex-col items-center gap-1\">\n <div className={cn(\n 'size-2.5 rounded-full transition-all duration-300',\n status === 'done' && 'bg-primary',\n status === 'active' && 'bg-primary shadow-[0_0_0_3px_rgba(37,99,235,0.2)] w-7 rounded-sm',\n status === 'pending' && 'bg-outline',\n )} />\n <span className={cn(\n 'text-label-sm whitespace-nowrap',\n status === 'active' ? 'text-primary font-semibold' : 'text-text-disabled',\n )}>\n {step.label}\n </span>\n </div>\n );\n })}\n </div>\n </div>\n );\n }\n\n // ── Pill variant ──\n if (variant === 'pill') {\n return (\n <div ref={ref} className={cn('flex flex-col gap-4', className)} {...props}>\n <div className=\"flex bg-surface-variant p-1 rounded-xl w-fit gap-0.5\">\n {steps.map((step, i) => {\n const status = getStepStatus(i, activeStep, step);\n return (\n <button\n key={step.id}\n type=\"button\"\n onClick={() => handleClick(i, step)}\n disabled={!clickable && status !== 'active'}\n className={cn(\n 'flex items-center gap-1.5 px-3.5 py-1.5 rounded-lg text-label-sm font-medium transition-all',\n status === 'active' && 'bg-background text-text-primary shadow-sm',\n status === 'done' && 'text-text-secondary cursor-pointer hover:text-text-primary',\n status === 'pending' && 'text-text-disabled cursor-default',\n )}\n >\n <span className={cn(\n 'size-[18px] rounded-full flex items-center justify-center text-[10px] font-bold flex-shrink-0',\n status === 'done' && 'bg-success text-on-success',\n status === 'active' && 'bg-primary text-on-primary',\n status === 'pending' && 'bg-outline text-text-disabled',\n )}>\n {status === 'done' ? <Icon name=\"check\" size=\"sm\" aria-hidden /> : i + 1}\n </span>\n {step.label}\n </button>\n );\n })}\n </div>\n {showContent && steps[activeStep]?.content && (\n <div className=\"mt-2\">{steps[activeStep].content}</div>\n )}\n </div>\n );\n }\n\n // ── Dot variant ──\n if (variant === 'dot') {\n return (\n <div ref={ref} className={cn('flex flex-col gap-3', className)} {...props}>\n <div className=\"flex items-start w-full\">\n {steps.map((step, i) => {\n const status = getStepStatus(i, activeStep, step);\n const isLast = i === steps.length - 1;\n return (\n <Fragment key={step.id}>\n <div className=\"flex flex-col items-center flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => handleClick(i, step)}\n className={cn(\n 'rounded-sm transition-all duration-300 flex-shrink-0',\n status === 'done' && 'size-2.5 bg-primary',\n status === 'active' && 'h-2.5 w-7 bg-primary shadow-[0_0_0_3px_rgba(37,99,235,0.15)]',\n status === 'pending' && 'size-2.5 bg-outline',\n )}\n aria-label={step.label}\n />\n <span className={cn(\n 'text-label-sm mt-2 text-center',\n status === 'active' ? 'text-primary font-semibold' : 'text-text-disabled',\n )}>\n {step.label}\n </span>\n </div>\n {!isLast && (\n <div className={cn(\n 'flex-1 h-px mx-1 mt-[5px]',\n status === 'done' ? 'bg-primary' : 'bg-outline',\n )} />\n )}\n </Fragment>\n );\n })}\n </div>\n </div>\n );\n }\n\n // ── Badge variant ──\n if (variant === 'badge') {\n return (\n <div ref={ref} className={cn('flex items-start w-full', className)} {...props}>\n {steps.map((step, i) => {\n const status = getStepStatus(i, activeStep, step);\n const isLast = i === steps.length - 1;\n return (\n <Fragment key={step.id}>\n <div className=\"flex flex-col items-center flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => handleClick(i, step)}\n className=\"flex-shrink-0\"\n >\n <span className={cn(\n 'size-7 rounded-lg flex items-center justify-center text-label-sm font-bold flex-shrink-0 transition-colors',\n status === 'done' && 'bg-success text-on-success',\n status === 'active' && 'bg-primary text-on-primary',\n status === 'error' && 'bg-error text-on-error',\n status === 'pending' && 'bg-surface-container text-text-disabled border border-outline',\n )}>\n {status === 'done' ? <Icon name=\"check\" size=\"sm\" aria-hidden /> :\n status === 'error' ? <Icon name=\"close\" size=\"sm\" aria-hidden /> :\n i + 1}\n </span>\n </button>\n <div className=\"flex flex-col items-center mt-2 text-center\">\n <span className={cn(\n 'text-label-md font-medium',\n status === 'done' && 'text-text-primary',\n status === 'active' && 'text-text-primary',\n status === 'pending' && 'text-text-disabled',\n )}>\n {step.label}\n </span>\n {step.sublabel && (\n <span className=\"text-body-sm text-text-secondary mt-0.5\">{step.sublabel}</span>\n )}\n </div>\n </div>\n {!isLast && (\n <div className={cn(\n 'flex-1 h-px mx-2 mt-3.5',\n status === 'done' ? 'bg-success' : 'bg-outline',\n )} />\n )}\n </Fragment>\n );\n })}\n </div>\n );\n }\n\n // ── Gradient variant ──\n if (variant === 'gradient') {\n return (\n <div ref={ref} className={cn('flex items-start w-full', className)} {...props}>\n {steps.map((step, i) => {\n const status = getStepStatus(i, activeStep, step);\n const isLast = i === steps.length - 1;\n return (\n <Fragment key={step.id}>\n <div className=\"flex flex-col items-center flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => handleClick(i, step)}\n className={cn(\n 'size-9 rounded-full flex items-center justify-center text-label-md font-bold flex-shrink-0 transition-all',\n (status === 'done' || status === 'active') &&\n 'bg-gradient-to-br from-primary to-secondary text-on-primary',\n status === 'active' && 'shadow-[0_0_0_4px_rgba(99,60,220,0.15)]',\n status === 'pending' && 'bg-surface-container text-text-disabled border-2 border-outline',\n )}\n >\n {status === 'done' ? <Icon name=\"check\" size=\"sm\" aria-hidden /> : i + 1}\n </button>\n <span className={cn(\n 'text-label-sm mt-2 text-center font-medium',\n status === 'done' && 'text-text-secondary',\n status === 'active' && 'bg-gradient-to-r from-primary to-secondary bg-clip-text text-transparent font-bold',\n status === 'pending' && 'text-text-disabled',\n )}>\n {step.label}\n </span>\n </div>\n {!isLast && (\n <div className={cn(\n 'flex-1 h-0.5 mx-1 mt-[18px]',\n status === 'done'\n ? 'bg-gradient-to-r from-primary to-secondary'\n : 'bg-outline',\n )} />\n )}\n </Fragment>\n );\n })}\n </div>\n );\n }\n\n // ── Card variant ──\n if (variant === 'card') {\n return (\n <div ref={ref} className={cn('flex flex-col gap-3', className)} {...props}>\n <div className=\"flex gap-2\">\n {steps.map((step, i) => {\n const status = getStepStatus(i, activeStep, step);\n return (\n <button\n key={step.id}\n type=\"button\"\n onClick={() => handleClick(i, step)}\n className={cn(\n 'flex-1 p-3 rounded-lg border-[1.5px] text-left transition-all',\n status === 'active' && 'border-primary bg-primary-container/10',\n status === 'done' && 'border-success-container bg-success-container/10',\n status === 'pending' && 'border-outline bg-background',\n status === 'error' && 'border-error bg-error-container/10',\n )}\n >\n <p className={cn(\n 'text-label-sm font-semibold mb-0.5',\n status === 'active' ? 'text-primary' :\n status === 'done' ? 'text-success' :\n status === 'error' ? 'text-error' :\n 'text-text-disabled',\n )}>\n STEP {i + 1}{status === 'done' ? ' ✓' : ''}\n </p>\n <p className={cn(\n 'text-label-md font-semibold',\n status === 'pending' ? 'text-text-disabled' : 'text-text-primary',\n )}>\n {step.label}\n </p>\n {step.description && status === 'active' && (\n <p className=\"text-body-sm text-text-secondary mt-0.5\">{step.description}</p>\n )}\n </button>\n );\n })}\n </div>\n {showContent && steps[activeStep]?.content && (\n <div>{steps[activeStep].content}</div>\n )}\n </div>\n );\n }\n\n // ── Icon variant ──\n if (variant === 'icon') {\n return (\n <div ref={ref} className={cn('flex items-start w-full', className)} {...props}>\n {steps.map((step, i) => {\n const status = getStepStatus(i, activeStep, step);\n const isLast = i === steps.length - 1;\n return (\n <Fragment key={step.id}>\n <div className=\"flex flex-col items-center flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => handleClick(i, step)}\n className={cn(\n 'size-10 rounded-lg flex items-center justify-center flex-shrink-0 transition-all',\n status === 'done' && 'bg-primary text-on-primary',\n status === 'active' && 'bg-primary-container text-primary border-2 border-primary',\n status === 'pending' && 'bg-surface-container text-text-disabled',\n status === 'error' && 'bg-error-container text-error border-2 border-error',\n )}\n >\n {status === 'done'\n ? <Icon name=\"check\" size=\"sm\" aria-hidden />\n : step.icon\n ? <Icon name={step.icon} size=\"sm\" aria-hidden />\n : <span className=\"text-label-sm font-bold\">{i + 1}</span>\n }\n </button>\n <span className={cn(\n 'text-label-sm mt-2 text-center',\n status === 'active' ? 'text-primary font-semibold' :\n status === 'done' ? 'text-text-secondary' :\n 'text-text-disabled',\n )}>\n {step.label}\n </span>\n </div>\n {!isLast && (\n <div className={cn(\n 'flex-1 h-0.5 mx-1 mt-5',\n status === 'done' ? 'bg-primary' : 'bg-outline',\n )} />\n )}\n </Fragment>\n );\n })}\n </div>\n );\n }\n\n // ── Checklist variant ──\n if (variant === 'checklist') {\n return (\n <div ref={ref} className={cn('flex flex-col gap-3', className)} {...props}>\n {steps.map((step, i) => {\n const status = getStepStatus(i, activeStep, step);\n return (\n <button\n key={step.id}\n type=\"button\"\n onClick={() => handleClick(i, step)}\n className=\"flex items-start gap-3 text-left w-full\"\n >\n <span className={cn(\n 'size-6 rounded-full flex items-center justify-center flex-shrink-0 mt-0.5 transition-colors',\n status === 'done' && 'bg-success text-on-success',\n status === 'active' && 'bg-primary-container text-primary border-2 border-primary text-label-sm font-bold',\n status === 'pending' && 'bg-surface-container border border-outline',\n status === 'error' && 'bg-error text-on-error',\n )}>\n {status === 'done' && <Icon name=\"check\" size=\"sm\" aria-hidden />}\n {status === 'active' && <span className=\"text-[10px] font-bold\">{i + 1}</span>}\n {status === 'error' && <Icon name=\"close\" size=\"sm\" aria-hidden />}\n </span>\n <div className=\"flex flex-col\">\n <span className={cn(\n 'text-label-md font-medium transition-colors',\n status === 'done' && 'text-text-secondary line-through decoration-outline',\n status === 'active' && 'text-text-primary',\n status === 'pending' && 'text-text-disabled',\n status === 'error' && 'text-error',\n )}>\n {step.label}\n </span>\n {step.description && (\n <span className=\"text-body-sm text-text-secondary mt-0.5\">{step.description}</span>\n )}\n </div>\n </button>\n );\n })}\n </div>\n );\n }\n\n // ── Timeline variant (vertical) ──\n if (variant === 'timeline') {\n return (\n <div ref={ref} className={cn('flex flex-col', className)} {...props}>\n {steps.map((step, i) => {\n const status = getStepStatus(i, activeStep, step);\n const isLast = i === steps.length - 1;\n return (\n <div key={step.id} className=\"flex gap-4\">\n {/* Left indicator */}\n <div className=\"flex flex-col items-center flex-shrink-0\">\n <button\n type=\"button\"\n onClick={() => handleClick(i, step)}\n className={cn(\n 'size-8 rounded-full flex items-center justify-center text-label-sm font-bold transition-all flex-shrink-0',\n status === 'done' && 'bg-primary text-on-primary',\n status === 'active' && 'bg-background text-primary border-2 border-primary shadow-[0_0_0_3px_rgba(37,99,235,0.1)]',\n status === 'pending' && 'bg-surface-container text-text-disabled border-2 border-outline',\n status === 'error' && 'bg-error-container text-error border-2 border-error',\n )}\n >\n {status === 'done' ? <Icon name=\"check\" size=\"sm\" aria-hidden /> :\n status === 'error' ? <Icon name=\"alert-circle\" size=\"sm\" aria-hidden /> :\n i + 1}\n </button>\n {!isLast && (\n <div className={cn(\n 'w-0.5 flex-1 min-h-[24px] my-1',\n status === 'done' ? 'bg-primary' : 'bg-outline',\n )} />\n )}\n </div>\n\n {/* Content */}\n <div className={cn('flex flex-col pb-6', isLast && 'pb-0')}>\n <div className=\"flex items-center gap-2 mt-0.5 mb-1\">\n <span className={cn(\n 'text-label-lg font-semibold',\n status === 'done' && 'text-text-primary',\n status === 'active' && 'text-text-primary',\n status === 'pending' && 'text-text-disabled',\n status === 'error' && 'text-error',\n )}>\n {step.label}\n </span>\n {status === 'active' && (\n <span className=\"text-label-sm px-2 py-0.5 rounded-full bg-primary-container text-primary font-medium\">\n Current\n </span>\n )}\n {status === 'done' && (\n <span className=\"text-label-sm px-2 py-0.5 rounded-full bg-success-container text-success font-medium\">\n Done\n </span>\n )}\n </div>\n {step.description && (\n <p className=\"text-body-sm text-text-secondary\">{step.description}</p>\n )}\n {step.content && status === 'active' && (\n <div className=\"mt-3 p-3 bg-surface-variant rounded-lg text-body-sm text-text-secondary border border-outline\">\n {step.content}\n </div>\n )}\n </div>\n </div>\n );\n })}\n </div>\n );\n }\n\n // ── Default horizontal/vertical stepper ──\n return (\n <div\n ref={ref}\n className={cn(\n 'flex',\n isVertical ? 'flex-col' : 'items-start w-full',\n className,\n )}\n {...props}\n >\n {steps.map((step, i) => {\n const status = getStepStatus(i, activeStep, step);\n const isLast = i === steps.length - 1;\n\n const circleBtn = (\n <button\n type=\"button\"\n onClick={() => handleClick(i, step)}\n disabled={!clickable || status === 'pending'}\n className={cn(\n 'size-8 rounded-full flex items-center justify-center text-label-sm font-bold flex-shrink-0 transition-all',\n 'focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2',\n status === 'done' && 'bg-primary text-on-primary cursor-pointer',\n status === 'active' && 'bg-primary-container text-primary border-2 border-primary',\n status === 'pending' && 'bg-surface-container text-text-disabled border-2 border-outline cursor-default',\n status === 'error' && 'bg-error-container text-error border-2 border-error',\n )}\n aria-label={`Step ${i + 1}: ${step.label}`}\n aria-current={status === 'active' ? 'step' : undefined}\n >\n {status === 'done' && <Icon name=\"check\" size=\"sm\" aria-hidden />}\n {status === 'error' && <Icon name=\"close\" size=\"sm\" aria-hidden />}\n {(status === 'active' || status === 'pending') && (i + 1)}\n </button>\n );\n\n // Vertical layout: circle + vertical connector | label beside\n if (isVertical) {\n return (\n <div key={step.id} className=\"flex gap-4\">\n <div className=\"flex flex-col items-center flex-shrink-0\">\n {circleBtn}\n {!isLast && (\n <div className={cn(\n 'w-0.5 min-h-[24px] my-1',\n status === 'done' ? 'bg-primary' : 'bg-outline',\n )} />\n )}\n </div>\n <div className=\"flex flex-col pb-6\">\n <span className={cn(\n 'text-label-md font-medium mt-0.5',\n status === 'done' && 'text-text-secondary',\n status === 'active' && 'text-text-primary',\n status === 'pending' && 'text-text-disabled',\n status === 'error' && 'text-error',\n )}>\n {step.label}\n {step.optional && (\n <span className=\"text-body-sm text-text-disabled ml-1\">(optional)</span>\n )}\n </span>\n {step.sublabel && (\n <span className=\"text-body-sm text-text-secondary mt-0.5\">{step.sublabel}</span>\n )}\n {step.description && (\n <p className=\"text-body-sm text-text-secondary mt-1\">{step.description}</p>\n )}\n {step.content && status === 'active' && showContent && (\n <div className=\"mt-3\">{step.content}</div>\n )}\n </div>\n </div>\n );\n }\n\n // Horizontal layout: circle+label as shrink-0, connector as flex-1 sibling\n return (\n <Fragment key={step.id}>\n <div className=\"flex flex-col items-center flex-shrink-0\">\n {circleBtn}\n <div className=\"flex flex-col items-center mt-2 text-center\">\n <span className={cn(\n 'text-label-md font-medium',\n status === 'done' && 'text-text-secondary',\n status === 'active' && 'text-text-primary',\n status === 'pending' && 'text-text-disabled',\n status === 'error' && 'text-error',\n )}>\n {step.label}\n {step.optional && (\n <span className=\"text-body-sm text-text-disabled ml-1\">(optional)</span>\n )}\n </span>\n {step.sublabel && (\n <span className=\"text-body-sm text-text-secondary text-center mt-0.5\">{step.sublabel}</span>\n )}\n </div>\n </div>\n {!isLast && (\n <div className={cn(\n 'flex-1 h-0.5 mx-1 mt-4',\n status === 'done' ? 'bg-primary' : 'bg-outline',\n )} />\n )}\n </Fragment>\n );\n })}\n </div>\n );\n }\n);\n\nStepper.displayName = 'Stepper';","import { cva, type VariantProps } from 'class-variance-authority';\n\n/**\n * Divider variants — CVA configuration.\n *\n * Styles: solid, dashed, dotted, thick, gradient, gradient-fade, double\n * Colors: default, primary, secondary, success, warning, error\n * Orientations: horizontal, vertical\n */\n\nexport const dividerVariants = cva(\n ['flex-shrink-0'],\n {\n variants: {\n orientation: {\n horizontal: 'w-full',\n vertical: 'h-full self-stretch',\n },\n style: {\n solid: '',\n dashed: '',\n dotted: '',\n thick: '',\n gradient: '',\n 'gradient-fade': '',\n double: '',\n },\n color: {\n default: '',\n primary: '',\n secondary: '',\n success: '',\n warning: '',\n error: '',\n },\n },\n compoundVariants: [\n // Horizontal solid\n { orientation: 'horizontal', style: 'solid', color: 'default', class: 'h-px bg-outline-variant' },\n { orientation: 'horizontal', style: 'solid', color: 'primary', class: 'h-px bg-primary-container' },\n { orientation: 'horizontal', style: 'solid', color: 'secondary', class: 'h-px bg-secondary-container' },\n { orientation: 'horizontal', style: 'solid', color: 'success', class: 'h-px bg-success-container' },\n { orientation: 'horizontal', style: 'solid', color: 'warning', class: 'h-px bg-warning-container' },\n { orientation: 'horizontal', style: 'solid', color: 'error', class: 'h-px bg-error-container' },\n // Horizontal dashed\n { orientation: 'horizontal', style: 'dashed', color: 'default', class: 'h-px border-t border-dashed border-outline' },\n { orientation: 'horizontal', style: 'dashed', color: 'primary', class: 'h-px border-t border-dashed border-primary/30' },\n // Horizontal dotted\n { orientation: 'horizontal', style: 'dotted', color: 'default', class: 'h-px border-t-2 border-dotted border-outline' },\n // Horizontal thick\n { orientation: 'horizontal', style: 'thick', color: 'default', class: 'h-0.5 bg-outline rounded-full' },\n { orientation: 'horizontal', style: 'thick', color: 'primary', class: 'h-0.5 bg-primary rounded-full' },\n { orientation: 'horizontal', style: 'thick', color: 'secondary', class: 'h-0.5 bg-secondary rounded-full' },\n { orientation: 'horizontal', style: 'thick', color: 'success', class: 'h-0.5 bg-success rounded-full' },\n { orientation: 'horizontal', style: 'thick', color: 'warning', class: 'h-0.5 bg-warning rounded-full' },\n { orientation: 'horizontal', style: 'thick', color: 'error', class: 'h-0.5 bg-error rounded-full' },\n // Horizontal gradient\n { orientation: 'horizontal', style: 'gradient', color: 'default', class: 'h-0.5 bg-gradient-to-r from-primary to-secondary rounded-full' },\n { orientation: 'horizontal', style: 'gradient', color: 'success', class: 'h-0.5 bg-gradient-to-r from-success to-primary rounded-full' },\n { orientation: 'horizontal', style: 'gradient', color: 'warning', class: 'h-0.5 bg-gradient-to-r from-warning to-error rounded-full' },\n // Horizontal gradient-fade\n { orientation: 'horizontal', style: 'gradient-fade', color: 'default', class: 'h-px bg-gradient-to-r from-transparent via-outline-variant to-transparent' },\n { orientation: 'horizontal', style: 'gradient-fade', color: 'primary', class: 'h-px bg-gradient-to-r from-transparent via-primary/40 to-transparent' },\n // Vertical solid\n { orientation: 'vertical', style: 'solid', color: 'default', class: 'w-px bg-outline-variant' },\n { orientation: 'vertical', style: 'dashed', color: 'default', class: 'w-px border-l border-dashed border-outline' },\n { orientation: 'vertical', style: 'dotted', color: 'default', class: 'w-px border-l-2 border-dotted border-outline' },\n { orientation: 'vertical', style: 'thick', color: 'default', class: 'w-0.5 bg-outline rounded-full' },\n { orientation: 'vertical', style: 'gradient', color: 'default', class: 'w-0.5 bg-gradient-to-b from-primary to-secondary rounded-full' },\n { orientation: 'vertical', style: 'gradient-fade', color: 'default', class: 'w-px bg-gradient-to-b from-transparent via-outline-variant to-transparent' },\n ],\n defaultVariants: {\n orientation: 'horizontal',\n style: 'solid',\n color: 'default',\n },\n }\n);\n\nexport type DividerVariantProps = VariantProps<typeof dividerVariants>;\nexport type DividerStyle = 'solid' | 'dashed' | 'dotted' | 'thick' | 'gradient' | 'gradient-fade' | 'double';\nexport type DividerColor = 'default' | 'primary' | 'secondary' | 'success' | 'warning' | 'error';\nexport type DividerOrientation = 'horizontal' | 'vertical';\nexport type DividerLabelAlign = 'left' | 'center' | 'right';","import { forwardRef, type ComponentPropsWithoutRef, type ReactNode } from 'react';\nimport { cn } from '../../utils/cn';\nimport { Icon, type IconName } from '../Icon';\nimport {\n dividerVariants,\n type DividerStyle,\n type DividerColor,\n type DividerOrientation,\n type DividerLabelAlign,\n} from './Divider.variants';\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\nexport interface DividerProps extends ComponentPropsWithoutRef<'div'> {\n /**\n * Line style.\n * - `solid` → plain line (default)\n * - `dashed` → dashed line\n * - `dotted` → dotted line\n * - `thick` → 2px thick line\n * - `gradient` → colored gradient line\n * - `gradient-fade` → fades to transparent at edges\n * - `double` → two parallel lines\n */\n lineStyle?: DividerStyle;\n\n /**\n * Color of the line.\n */\n color?: DividerColor;\n\n /**\n * Orientation.\n * - `horizontal` → horizontal line (default)\n * - `vertical` → vertical line for inline use\n */\n orientation?: DividerOrientation;\n\n /**\n * Label shown in the middle (or left/right) of the divider.\n */\n label?: ReactNode;\n\n /**\n * Label alignment.\n * @default 'center'\n */\n labelAlign?: DividerLabelAlign;\n\n /**\n * Icon shown centered in the divider.\n */\n icon?: IconName;\n\n /**\n * Inset from left (for list separators).\n * E.g. inset={48} adds 48px left margin.\n */\n inset?: number;\n\n /**\n * Show as a section title divider — label above the line.\n */\n sectionTitle?: boolean;\n\n /**\n * Show as a chat date badge style.\n */\n chatDate?: boolean;\n\n /**\n * Bold section break style.\n */\n boldBreak?: boolean;\n\n /**\n * Decorative spacing dots style (vertical).\n */\n spacingDots?: boolean;\n\n /**\n * Number of decorative dots for spacingDots variant.\n * @default 1\n */\n dots?: number;\n}\n\n// ─── Divider ──────────────────────────────────────────────────────────────────\n\n/**\n * Divider — a line that separates content sections.\n *\n * Features beyond M3:\n * - 7 line styles: solid, dashed, dotted, thick, gradient, gradient-fade, double\n * - 6 colors: default, primary, secondary, success, warning, error\n * - horizontal and vertical orientations\n * - label with left/center/right alignment\n * - icon centered in divider\n * - inset for list separators\n * - section title (label above line)\n * - chat date badge style\n * - bold section break\n * - decorative spacing dots\n *\n * @example\n * // Basic\n * <Divider />\n *\n * // With label\n * <Divider label=\"OR\" />\n * <Divider label=\"Today\" chatDate />\n *\n * // Styled\n * <Divider lineStyle=\"dashed\" />\n * <Divider lineStyle=\"gradient\" color=\"primary\" />\n *\n * // Vertical\n * <div className=\"flex h-8 items-center gap-3\">\n * <span>Home</span>\n * <Divider orientation=\"vertical\" />\n * <span>About</span>\n * </div>\n *\n * // Inset (list separator)\n * <Divider inset={48} />\n *\n * // Section title\n * <Divider label=\"Personal information\" sectionTitle />\n *\n * // Bold break\n * <Divider label=\"Chapter 1\" boldBreak />\n */\nexport const Divider = forwardRef<HTMLDivElement, DividerProps>(\n (\n {\n lineStyle = 'solid',\n color = 'default',\n orientation = 'horizontal',\n label,\n labelAlign = 'center',\n icon,\n inset,\n sectionTitle = false,\n chatDate = false,\n boldBreak = false,\n spacingDots = false,\n dots = 1,\n className,\n ...props\n },\n ref\n ) => {\n // ── Vertical ──\n if (orientation === 'vertical') {\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation=\"vertical\"\n className={cn(\n dividerVariants({ orientation, style: lineStyle, color }),\n className,\n )}\n {...props}\n />\n );\n }\n\n // ── Spacing dots ──\n if (spacingDots) {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col items-center gap-0.5 py-1', className)}\n aria-hidden=\"true\"\n {...props}\n >\n <div className=\"w-px h-3 bg-outline-variant\" />\n {Array.from({ length: dots }).map((_, i) => (\n <div key={i} className=\"size-1 rounded-full bg-outline\" />\n ))}\n <div className=\"w-px h-3 bg-outline-variant\" />\n </div>\n );\n }\n\n // ── Section title ──\n if (sectionTitle && label) {\n return (\n <div\n ref={ref}\n className={cn('flex flex-col gap-2', className)}\n {...props}\n >\n <span className=\"text-label-sm font-semibold text-text-disabled uppercase tracking-wider\">\n {label}\n </span>\n <div className={cn(dividerVariants({ orientation, style: lineStyle, color }))} />\n </div>\n );\n }\n\n // ── Bold break ──\n if (boldBreak && label) {\n return (\n <div\n ref={ref}\n role=\"separator\"\n className={cn('flex items-center gap-3', className)}\n {...props}\n >\n <div className=\"flex-1 h-0.5 bg-text-primary rounded-full\" />\n <span className=\"text-label-sm font-bold text-text-primary uppercase tracking-wider whitespace-nowrap\">\n {label}\n </span>\n <div className=\"flex-1 h-0.5 bg-text-primary rounded-full\" />\n </div>\n );\n }\n\n // ── Chat date badge ──\n if (chatDate && label) {\n return (\n <div\n ref={ref}\n role=\"separator\"\n className={cn('flex items-center gap-3', className)}\n {...props}\n >\n <div className=\"flex-1 h-px bg-surface-container\" />\n <span className=\"text-label-sm text-text-disabled bg-surface border border-outline-variant px-3 py-0.5 rounded-full whitespace-nowrap\">\n {label}\n </span>\n <div className=\"flex-1 h-px bg-surface-container\" />\n </div>\n );\n }\n\n // ── Double line ──\n if (lineStyle === 'double') {\n return (\n <div\n ref={ref}\n role=\"separator\"\n className={cn('flex flex-col gap-0.5', className)}\n style={inset ? { marginLeft: inset } : undefined}\n {...props}\n >\n <div className=\"h-px bg-outline-variant w-full\" />\n <div className=\"h-px bg-outline-variant w-full\" />\n </div>\n );\n }\n\n // ── With label or icon ──\n if (label || icon) {\n const lineEl = <div className={cn(dividerVariants({ orientation, style: lineStyle, color }), 'flex-1')} />;\n\n const labelEl = icon ? (\n <span className={cn(\n 'size-7 rounded-full border border-outline bg-background flex items-center justify-center flex-shrink-0',\n 'text-text-secondary',\n )}>\n <Icon name={icon} size=\"sm\" aria-hidden />\n </span>\n ) : (\n <span className={cn(\n 'text-label-sm text-text-disabled whitespace-nowrap flex-shrink-0',\n )}>\n {label}\n </span>\n );\n\n return (\n <div\n ref={ref}\n role=\"separator\"\n className={cn('flex items-center gap-3', className)}\n style={inset ? { marginLeft: inset } : undefined}\n {...props}\n >\n {labelAlign !== 'left' && lineEl}\n {labelEl}\n {labelAlign !== 'right' && lineEl}\n </div>\n );\n }\n\n // ── Plain divider ──\n return (\n <div\n ref={ref}\n role=\"separator\"\n aria-orientation={orientation}\n className={cn(\n dividerVariants({ orientation, style: lineStyle, color }),\n className,\n )}\n style={inset ? { marginLeft: inset } : undefined}\n {...props}\n />\n );\n }\n);\n\nDivider.displayName = 'Divider';"]}