@fabio.caffarello/react-design-system 1.11.1 → 1.13.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.
- package/dist/primitives/index.cjs.map +1 -1
- package/dist/primitives/index.js +8 -0
- package/dist/primitives/index.js.map +1 -1
- package/dist/tokens/index.cjs +1 -1
- package/dist/tokens/index.cjs.map +1 -1
- package/dist/tokens/index.js +214 -215
- package/dist/tokens/index.js.map +1 -1
- package/dist/ui/tokens/sidebar.d.ts +7 -7
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../src/ui/primitives/Info/Info.tsx","../../src/ui/primitives/Text/Text.tsx","../../src/ui/primitives/Spinner/Spinner.tsx","../../src/ui/primitives/Button/Button.tsx","../../src/ui/primitives/Input/Input.tsx","../../src/ui/primitives/NavLink/hooks/useNavLink.ts","../../src/ui/primitives/NavLink/NavLink.tsx","../../src/ui/primitives/Badge/Badge.tsx","../../src/ui/primitives/Select/Select.tsx","../../src/ui/primitives/Textarea/Textarea.tsx","../../src/ui/primitives/Label/Label.tsx","../../src/ui/primitives/ErrorMessage/ErrorMessage.tsx","../../src/ui/primitives/Tooltip/Tooltip.tsx","../../src/ui/primitives/Skeleton/Skeleton.tsx","../../src/ui/hooks/useCollapsible.ts","../../src/ui/primitives/Collapsible/Collapsible.tsx","../../src/ui/primitives/Checkbox/Checkbox.tsx","../../src/ui/primitives/Radio/Radio.tsx","../../src/ui/primitives/Progress/Progress.tsx","../../src/ui/primitives/Switch/Switch.tsx","../../src/ui/primitives/Separator/Separator.tsx","../../src/ui/primitives/Slider/Slider.tsx","../../src/ui/primitives/Chip/Chip.tsx","../../src/ui/primitives/Avatar/Avatar.tsx","../../src/ui/primitives/Avatar/AvatarGroup.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface InfoProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"info\" | \"warning\" | \"error\";\n}\n\nexport default function Info({\n variant = \"info\",\n className,\n ...props\n}: InfoProps) {\n const variantClasses = {\n warning: cn(\"bg-warning-bg\", \"text-warning-dark\", \"border-warning\"),\n error: cn(\"bg-error-bg\", \"text-error-dark\", \"border-error\"),\n info: cn(\"bg-info-bg\", \"text-info-dark\", \"border-info\"),\n };\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"border\",\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getRadiusClass(\"lg\"),\n variantClasses[variant],\n className,\n )}\n {...props}\n />\n );\n}\n","import type {\n ComponentPropsWithoutRef,\n ElementType,\n HTMLAttributes,\n JSX,\n} from \"react\";\nimport { forwardRef } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\ntype TextColorRole =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"neutral\";\ntype TextColorShade = \"light\" | \"DEFAULT\" | \"dark\" | \"contrast\";\n\n// Lookup table: literal Tailwind classes so v4 can detect them at build.\n// Brand/feedback DEFAULT cells use semantic tokens; light/dark cells stay\n// primitive (no semantic equivalent for shade variants). Neutral cells\n// use the Phase 7 semantic suggestions (text-fg-{primary,secondary,...}).\nconst TEXT_COLOR_CLASSES: Record<\n TextColorRole,\n Record<TextColorShade, string>\n> = {\n primary: {\n light: \"text-indigo-400\",\n DEFAULT: \"text-fg-brand\",\n dark: \"text-indigo-600\",\n contrast: \"text-fg-inverse\",\n },\n secondary: {\n light: \"text-pink-300\",\n DEFAULT: \"text-fg-brand-secondary\",\n dark: \"text-pink-600\",\n contrast: \"text-fg-inverse\",\n },\n success: {\n light: \"text-green-300\",\n DEFAULT: \"text-fg-success\",\n dark: \"text-success-dark\",\n contrast: \"text-fg-inverse\",\n },\n warning: {\n light: \"text-yellow-300\",\n DEFAULT: \"text-fg-warning\",\n dark: \"text-warning-dark\",\n contrast: \"text-fg-inverse\",\n },\n error: {\n light: \"text-red-300\",\n DEFAULT: \"text-fg-error\",\n dark: \"text-error-dark\",\n contrast: \"text-fg-inverse\",\n },\n info: {\n light: \"text-blue-300\",\n DEFAULT: \"text-fg-info\",\n dark: \"text-info-dark\",\n contrast: \"text-fg-inverse\",\n },\n neutral: {\n light: \"text-fg-tertiary\",\n DEFAULT: \"text-fg-secondary\",\n dark: \"text-fg-primary\",\n contrast: \"text-fg-inverse\",\n },\n};\n\ninterface Props<T extends ElementType>\n extends HTMLAttributes<JSX.IntrinsicElements> {\n variant?:\n | \"heading\"\n | \"list\"\n | \"paragraph\"\n | \"body\"\n | \"bodySmall\"\n | \"bodyLarge\"\n | \"caption\"\n | \"label\";\n as?: T;\n bold?: boolean;\n italic?: boolean;\n color?: string;\n colorRole?: TextColorRole;\n colorShade?: TextColorShade;\n}\n\ntype ReturnProps<P extends ElementType> = Props<P> &\n Omit<ComponentPropsWithoutRef<P>, keyof Props<P>>;\n\nfunction TextComponent<T extends ElementType = \"p\">(\n {\n variant = \"paragraph\",\n bold,\n italic,\n className,\n as,\n color,\n colorRole = \"neutral\",\n colorShade = \"dark\",\n ...rest\n }: ReturnProps<T>,\n ref: React.Ref<unknown>,\n) {\n const classNames: string[] = [];\n let Tag: ElementType;\n\n if (as) {\n Tag = as;\n } else {\n switch (variant) {\n case \"heading\":\n Tag = \"h2\";\n break;\n case \"list\":\n Tag = \"li\";\n break;\n case \"paragraph\":\n default:\n Tag = \"p\";\n break;\n }\n }\n\n // Apply typography tokens based on variant\n if (variant === \"heading\") {\n classNames.push(getTypographyClasses(\"h2\"));\n } else if (variant === \"body\" || variant === \"paragraph\") {\n classNames.push(getTypographyClasses(\"body\"));\n } else if (variant === \"bodySmall\") {\n classNames.push(getTypographyClasses(\"bodySmall\"));\n } else if (variant === \"bodyLarge\") {\n classNames.push(getTypographyClasses(\"bodyLarge\"));\n } else if (variant === \"caption\") {\n classNames.push(getTypographyClasses(\"caption\"));\n } else if (variant === \"label\") {\n classNames.push(getTypographyClasses(\"label\"));\n } else {\n // Default to body for list and other variants\n classNames.push(getTypographyClasses(\"body\"));\n }\n\n // Override font weight if bold is specified\n if (bold) {\n classNames.push(\"font-bold\");\n }\n\n if (italic) {\n classNames.push(\"italic\");\n }\n\n // Apply color via lookup table. `color` prop is accepted for API\n // back-compat but Tailwind v4 can't generate dynamic `text-${color}`\n // classes, so it has no visual effect — colorRole/colorShade are\n // the supported channel.\n void color;\n classNames.push(TEXT_COLOR_CLASSES[colorRole][colorShade]);\n\n return <Tag ref={ref} className={cn(...classNames, className)} {...rest} />;\n}\n\n// Use forwardRef with proper typing for polymorphic component\nconst Text = forwardRef(TextComponent) as <T extends ElementType = \"p\">(\n props: ReturnProps<T> & { ref?: React.Ref<HTMLElement> },\n) => JSX.Element;\n\nexport default Text;\n","\"use client\";\n\nimport { memo } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\nexport type SpinnerVariant = \"primary\" | \"secondary\" | \"neutral\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n size?: SpinnerSize;\n variant?: SpinnerVariant;\n label?: string;\n}\n\n/**\n * Spinner Component\n *\n * A loading spinner component for indicating loading states.\n * Follows Atomic Design principles as an Atom component.\n * Uses Strategy Pattern for different size/variant combinations.\n *\n * @example\n * ```tsx\n * <Spinner size=\"md\" variant=\"primary\" label=\"Loading...\" />\n * ```\n */\n// Spinner variants using CVA\nconst spinnerVariants = cva(\"motion-safe:animate-spin\", {\n variants: {\n size: {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-8 w-8\",\n },\n variant: {\n primary: \"text-fg-brand\",\n secondary: \"text-fg-brand-secondary\",\n neutral: \"text-fg-secondary\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"primary\",\n },\n});\n\nconst Spinner = memo(function Spinner({\n size = \"md\",\n variant = \"primary\",\n label,\n className = \"\",\n ...props\n}: SpinnerProps) {\n return (\n <div\n className={cn(\"inline-flex\", \"items-center\", className)}\n role=\"status\"\n aria-label={label || \"Loading\"}\n aria-live=\"polite\"\n {...props}\n >\n <Loader2\n className={cn(spinnerVariants({ size, variant }))}\n aria-hidden=\"true\"\n />\n {label && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"ml\"),\n getTypographySize(\"bodySmall\"),\n \"text-fg-secondary\",\n \"sr-only\",\n )}\n >\n {label}\n </span>\n )}\n </div>\n );\n});\n\nSpinner.displayName = \"Spinner\";\n\nexport default Spinner;\n","import { forwardRef, memo, useMemo } from \"react\";\nimport type { ButtonHTMLAttributes, ReactNode, ElementType } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographyClasses,\n getTypographySize,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\nimport Spinner from \"../Spinner/Spinner\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"error\"\n | \"outline\"\n | \"ghost\"\n | \"iconOnly\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"as\"> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n isLoading?: boolean;\n loadingText?: string;\n loadingIcon?: ReactNode;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n fullWidth?: boolean;\n as?: ElementType;\n href?: string;\n target?: string;\n}\n\n/**\n * Button Variants using CVA\n * Type-safe variant system for Button component\n */\nconst buttonVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n getTypographyClasses(\"button\").split(\" \")[2] || \"font-medium\", // Extract font-medium\n getRadiusClass(\"md\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n ),\n {\n variants: {\n variant: {\n primary: cn(\n \"bg-surface-brand\",\n \"text-fg-inverse\",\n \"hover:opacity-90\",\n \"focus:ring-line-brand\",\n ),\n secondary: cn(\n \"bg-surface-secondary\",\n \"text-fg-inverse\",\n \"hover:opacity-90\",\n \"focus:ring-line-secondary\",\n ),\n error: cn(\n \"bg-error\",\n \"text-fg-inverse\",\n \"hover:opacity-90\",\n \"focus:ring-error\",\n ),\n outline: cn(\n \"border-2\",\n \"border-line-default\",\n \"bg-transparent\",\n \"text-fg-primary\",\n \"hover:bg-surface-hover\",\n \"focus:ring-line-focus\",\n ),\n ghost: cn(\n \"bg-transparent\",\n \"text-fg-primary\",\n \"hover:bg-surface-hover\",\n \"focus:ring-line-focus\",\n ),\n iconOnly: cn(\n \"bg-transparent\",\n \"text-fg-primary\",\n \"hover:bg-surface-hover\",\n \"focus:ring-line-focus\",\n \"p-0\",\n ),\n },\n size: {\n sm: cn(\n getSpacingClass(\"md\", \"px\"),\n getSpacingClass(\"1.5\", \"py\"),\n getTypographySize(\"bodySmall\"),\n getSpacingClass(\"1.5\", \"gap\"),\n ),\n md: cn(\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n getSpacingClass(\"sm\", \"gap\"),\n ),\n lg: cn(\n getSpacingClass(\"lg\", \"px\"),\n getSpacingClass(\"md\", \"py\"),\n getTypographySize(\"bodyLarge\"),\n getSpacingClass(\"2.5\", \"gap\"),\n ),\n },\n },\n compoundVariants: [\n // IconOnly variant has different sizing\n {\n variant: \"iconOnly\",\n size: \"sm\",\n class: cn(\"h-8\", \"w-8\", \"p-0\"),\n },\n {\n variant: \"iconOnly\",\n size: \"md\",\n class: cn(\"h-10\", \"w-10\", \"p-0\"),\n },\n {\n variant: \"iconOnly\",\n size: \"lg\",\n class: cn(\"h-12\", \"w-12\", \"p-0\"),\n },\n ],\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\n/**\n * Icon Wrapper Component\n * Handles icon spacing and alignment consistently\n */\nfunction IconWrapper({\n children,\n position,\n}: {\n children: ReactNode;\n position: \"left\" | \"right\";\n}) {\n if (!children) return null;\n\n return (\n <span\n className={`inline-flex items-center ${position === \"left\" ? \"mr-0\" : \"ml-0\"}`}\n >\n {children}\n </span>\n );\n}\n\n/**\n * Button Component\n *\n * A styled button component with variants, sizes, and loading states.\n * Follows Atomic Design principles as an Atom component.\n * Uses Builder Pattern for class construction.\n * Supports polymorphic `as` prop for rendering as different elements (Link, NextLink, etc.).\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Button variant=\"primary\" size=\"md\" onClick={handleClick}>\n * Click me\n * </Button>\n *\n * // With icons\n * <Button leftIcon={<Icon />} rightIcon={<Icon />}>\n * Action\n * </Button>\n *\n * // Loading state\n * <Button isLoading loadingText=\"Saving...\">\n * Save\n * </Button>\n *\n * // As Link\n * <Button as={Link} href=\"/page\">\n * Navigate\n * </Button>\n *\n * // Icon only\n * <Button variant=\"iconOnly\" leftIcon={<Icon />} aria-label=\"Close\" />\n * ```\n */\nconst Button = memo(\n forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n loadingText,\n loadingIcon,\n leftIcon,\n rightIcon,\n fullWidth = false,\n as: Component = \"button\",\n className = \"\",\n disabled = false,\n children,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) {\n // Memoize classes computation\n const classes = useMemo(\n () =>\n cn(\n buttonVariants({\n variant,\n size,\n }),\n fullWidth && \"w-full\",\n className,\n ),\n [variant, size, fullWidth, className],\n );\n\n // Memoize icon-only check\n const isIconOnly = useMemo(\n () => variant === \"iconOnly\" || (!children && (leftIcon || rightIcon)),\n [variant, children, leftIcon, rightIcon],\n );\n\n // Memoize aria label\n const finalAriaLabel = useMemo(\n () =>\n isIconOnly && !ariaLabel && !children\n ? \"Button\" // Fallback, but should be provided\n : ariaLabel,\n [isIconOnly, ariaLabel, children],\n );\n\n // Memoize spinner variant computation\n const spinnerVariant = useMemo((): \"primary\" | \"secondary\" | \"neutral\" => {\n if (variant === \"error\") return \"primary\"; // Red buttons use primary spinner (white)\n if (variant === \"primary\" || variant === \"secondary\") return \"neutral\"; // Colored buttons use neutral spinner\n return \"primary\"; // Default\n }, [variant]);\n\n // Memoize spinner size\n const spinnerSize = useMemo(\n () => (size === \"sm\" ? \"sm\" : size === \"lg\" ? \"lg\" : \"md\"),\n [size],\n );\n\n // Memoize loading icon\n const displayLoadingIcon = useMemo(\n () =>\n loadingIcon || <Spinner size={spinnerSize} variant={spinnerVariant} />,\n [loadingIcon, spinnerSize, spinnerVariant],\n );\n\n // Build button props (spread props at the end to allow overrides)\n // If type is explicitly provided in props, use it; otherwise default to 'button' for button elements\n const defaultType =\n Component === \"button\" && !props.type ? \"button\" : undefined;\n const buttonProps = {\n className: classes,\n disabled: disabled || isLoading,\n \"aria-busy\": isLoading,\n \"aria-label\": finalAriaLabel,\n \"aria-disabled\": disabled || isLoading,\n ...(defaultType ? { type: defaultType } : {}),\n ...props,\n };\n\n return (\n <Component ref={ref} {...buttonProps}>\n {isLoading ? (\n <>\n {displayLoadingIcon}\n {loadingText && <span className=\"ml-2\">{loadingText}</span>}\n {!loadingText && children && (\n <span className=\"ml-2 opacity-0\">{children}</span>\n )}\n </>\n ) : (\n <>\n {leftIcon && <IconWrapper position=\"left\">{leftIcon}</IconWrapper>}\n {children}\n {rightIcon && (\n <IconWrapper position=\"right\">{rightIcon}</IconWrapper>\n )}\n </>\n )}\n </Component>\n );\n }),\n);\n\nButton.displayName = \"Button\";\n\nexport default Button;\nexport { Button };\n","\"use client\";\n\nimport { forwardRef, useState, memo, useMemo, useCallback } from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport {\n getTypographyClasses,\n getTypographySize,\n} from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn, cva } from \"../../utils\";\nimport { X, Eye, EyeOff } from \"lucide-react\";\nimport Button from \"../Button/Button\";\n\n/**\n * Helper Text Component\n * Memoized component for helper/error text\n */\nconst HelperText = memo(function HelperText({\n error,\n success,\n helperText,\n errorId,\n helperId,\n}: {\n error: boolean;\n success: boolean;\n helperText?: string;\n errorId?: string;\n helperId?: string;\n}) {\n const helperClasses = useMemo(\n () =>\n cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographyClasses(\"caption\"),\n error && \"text-fg-error\",\n success && \"text-fg-success\",\n !error && !success && \"text-fg-secondary\",\n ),\n [error, success],\n );\n\n const text = useMemo(\n () => helperText || (error ? \"Error\" : success ? \"Success\" : \"\"),\n [helperText, error, success],\n );\n\n return (\n <div\n id={errorId || helperId}\n className={helperClasses}\n role={error || success ? \"alert\" : undefined}\n >\n {text}\n </div>\n );\n});\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\nexport type InputVariant = \"default\" | \"outlined\" | \"filled\";\nexport type InputState = \"default\" | \"error\" | \"success\";\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n label?: ReactNode;\n error?: boolean;\n success?: boolean;\n helperText?: string;\n size?: InputSize;\n variant?: InputVariant;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n showClearButton?: boolean;\n onClear?: () => void;\n}\n\n/**\n * Input Component\n *\n * A styled text input component with label, error/success states, icons, and clear button.\n * Follows Atomic Design principles as an Atom component.\n * Uses Composite Pattern when combined with Label and ErrorMessage.\n *\n * @example\n * ```tsx\n * <Input\n * id=\"email\"\n * label=\"Email\"\n * type=\"email\"\n * placeholder=\"Enter your email\"\n * error={hasError}\n * helperText={errorMessage}\n * leftIcon={<MailIcon />}\n * />\n * ```\n */\nconst Input = memo(\n forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n id,\n label,\n error = false,\n success = false,\n helperText,\n size = \"md\",\n variant = \"outlined\",\n leftIcon,\n rightIcon,\n showClearButton = false,\n onClear,\n className = \"\",\n disabled = false,\n type = \"text\",\n value,\n onChange,\n ...props\n },\n ref,\n ) {\n // Memoize input ID\n const inputId = useMemo(\n () => id || `input-${Math.random().toString(36).substr(2, 9)}`,\n [id],\n );\n\n // Memoize error and helper IDs\n const errorId = useMemo(\n () => (error ? `${inputId}-error` : undefined),\n [error, inputId],\n );\n\n const helperId = useMemo(\n () => (helperText ? `${inputId}-helper` : undefined),\n [helperText, inputId],\n );\n\n // Password toggle state\n const [showPassword, setShowPassword] = useState(false);\n\n // Memoize password-related values\n const isPassword = useMemo(() => type === \"password\", [type]);\n const inputType = useMemo(\n () => (isPassword && showPassword ? \"text\" : type),\n [isPassword, showPassword, type],\n );\n\n // Memoize state\n const state = useMemo<InputState>(\n () => (error ? \"error\" : success ? \"success\" : \"default\"),\n [error, success],\n );\n\n // Memoize clear button visibility\n const hasValue = useMemo(\n () => value !== undefined && value !== null && value !== \"\",\n [value],\n );\n\n const shouldShowClear = useMemo(\n () => showClearButton && hasValue && !disabled,\n [showClearButton, hasValue, disabled],\n );\n\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const successFocusRing = useMemo(() => \"focus:border-success\", []);\n\n const getFocusRingColor = useMemo(\n () => primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\"),\n [primaryFocusRing],\n );\n\n const getStateFocusRingColor = useCallback(\n (stateType: \"error\" | \"success\"): string => {\n return stateType === \"error\"\n ? errorFocusRing.replace(\"focus:border-\", \"focus:ring-\")\n : successFocusRing.replace(\"focus:border-\", \"focus:ring-\");\n },\n [errorFocusRing, successFocusRing],\n );\n\n // Input variants using CVA\n const inputVariants = cva(\n // Base classes\n cn(\n \"w-full\",\n getRadiusClass(\"md\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"border-0\",\n \"border-b-2\",\n \"border-line-default\",\n \"focus:border-line-focus\",\n ),\n outlined: cn(\n \"border\",\n \"border-line-default\",\n \"focus:border-line-focus\",\n ),\n filled: cn(\n \"bg-surface-muted\",\n \"border-0\",\n \"focus:bg-surface-base\",\n \"focus:ring-2\",\n getFocusRingColor,\n ),\n },\n size: {\n sm: cn(\n \"h-8\",\n getTypographySize(\"bodySmall\"),\n getSpacingClass(\"md\", \"px\"),\n ),\n md: cn(\n \"h-10\",\n getTypographySize(\"body\"),\n getSpacingClass(\"base\", \"px\"),\n ),\n lg: cn(\n \"h-12\",\n getTypographySize(\"bodyLarge\"),\n getSpacingClass(\"lg\", \"px\"),\n ),\n },\n state: {\n default: \"\",\n error: cn(\n \"border-error\",\n \"focus:border-error\",\n getStateFocusRingColor(\"error\"),\n ),\n success: cn(\n \"border-success\",\n \"focus:border-success\",\n getStateFocusRingColor(\"success\"),\n ),\n },\n },\n defaultVariants: {\n variant: \"outlined\",\n size: \"md\",\n state: \"default\",\n },\n },\n );\n\n // Memoize input classes\n const inputClasses = useMemo(\n () =>\n cn(\n inputVariants({ variant, size, state }),\n // Icon padding - specific values for icon positioning\n leftIcon &&\n (size === \"sm\" ? \"pl-9\" : size === \"lg\" ? \"pl-12\" : \"pl-10\"),\n (rightIcon || shouldShowClear || isPassword) &&\n (size === \"sm\" ? \"pr-9\" : size === \"lg\" ? \"pr-12\" : \"pr-10\"),\n className,\n ),\n [\n variant,\n size,\n state,\n leftIcon,\n rightIcon,\n shouldShowClear,\n isPassword,\n className,\n ],\n );\n\n // Memoize label classes\n const labelClasses = useMemo(\n () =>\n cn(\n \"block\",\n getTypographyClasses(\"label\"),\n getSpacingClass(\"xs\", \"mb\"),\n disabled && \"opacity-50\",\n ),\n [disabled],\n );\n\n // Memoize icon size and position\n const iconSize = useMemo(\n () => (size === \"sm\" ? \"h-4 w-4\" : size === \"lg\" ? \"h-5 w-5\" : \"h-4 w-4\"),\n [size],\n );\n\n const iconPosition = useMemo(\n () => (size === \"sm\" ? \"top-2\" : size === \"lg\" ? \"top-3.5\" : \"top-2.5\"),\n [size],\n );\n\n // Memoize clear handler\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onClear) {\n onClear();\n } else if (onChange) {\n // Create synthetic event to clear input\n const inputElement = e.currentTarget\n .closest(\".relative\")\n ?.querySelector(\"input\") as HTMLInputElement;\n if (inputElement) {\n const syntheticEvent = {\n target: inputElement,\n currentTarget: inputElement,\n bubbles: true,\n cancelable: true,\n defaultPrevented: false,\n eventPhase: 2,\n isTrusted: false,\n nativeEvent: new Event(\"change\"),\n preventDefault: () => {},\n stopPropagation: () => {},\n persist: () => {},\n timeStamp: Date.now(),\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n Object.defineProperty(syntheticEvent.target, \"value\", {\n value: \"\",\n writable: true,\n });\n Object.defineProperty(syntheticEvent.currentTarget, \"value\", {\n value: \"\",\n writable: true,\n });\n onChange(syntheticEvent);\n }\n }\n },\n [onClear, onChange],\n );\n\n // Memoize password toggle handler\n const handleTogglePassword = useCallback(() => {\n setShowPassword((prev) => !prev);\n }, []);\n\n return (\n <div className=\"w-full\">\n {label && (\n <label htmlFor={inputId} className={labelClasses}>\n {label}\n </label>\n )}\n <div className=\"relative\">\n {leftIcon && (\n <div\n className={`absolute left-3 ${iconPosition} text-fg-secondary opacity-60 pointer-events-none`}\n >\n <div className={iconSize}>{leftIcon}</div>\n </div>\n )}\n <input\n id={inputId}\n ref={ref}\n type={inputType}\n className={inputClasses}\n disabled={disabled}\n value={value}\n onChange={onChange}\n aria-invalid={error}\n aria-required={props.required}\n aria-describedby={errorId || helperId}\n suppressHydrationWarning\n {...props}\n />\n <div className=\"absolute right-3 top-0 bottom-0 flex items-center gap-1\">\n {shouldShowClear && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClear}\n className=\"h-auto p-1\"\n aria-label=\"Clear input\"\n >\n <X className={iconSize} />\n </Button>\n )}\n {isPassword && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleTogglePassword}\n className=\"h-auto p-1\"\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n >\n {showPassword ? (\n <EyeOff className={iconSize} />\n ) : (\n <Eye className={iconSize} />\n )}\n </Button>\n )}\n {rightIcon && !shouldShowClear && !isPassword && (\n <div\n className={`text-fg-secondary opacity-60 pointer-events-none ${iconSize}`}\n >\n {rightIcon}\n </div>\n )}\n </div>\n </div>\n {(error || success || helperText) && (\n <HelperText\n error={error}\n success={success}\n helperText={helperText}\n errorId={errorId}\n helperId={helperId}\n />\n )}\n </div>\n );\n }),\n);\n\nInput.displayName = \"Input\";\n\nexport default Input;\n","/**\n * useNavLink Hook\n *\n * Custom hook for NavLink active state detection and Next.js integration.\n *\n * @see RFC-001: NavLink Hook Strategy (APPROVED - Hybrid approach)\n * @see RFC-002: Next.js Integration Strategy (APPROVED - Auto-detect)\n * @see ADR-001: Active State Detection (ACCEPTED - Hybrid strategy)\n */\n\n\"use client\";\n\nimport { useMemo } from \"react\";\n\n/**\n * useNavLink Hook Options\n */\nexport interface UseNavLinkOptions {\n /**\n * URL of the navigation link\n */\n href: string;\n\n /**\n * Manual active state (has priority over auto-detect)\n *\n * Priority: manual active > auto-detect > false\n * @see ADR-001\n */\n active?: boolean;\n}\n\n/**\n * useNavLink Hook Result\n */\nexport interface UseNavLinkResult {\n /**\n * Whether the link is active\n */\n isActive: boolean;\n\n /**\n * Next.js Link component (if available)\n */\n NextLink?: React.ComponentType<{\n href: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n }>;\n}\n\n/**\n * useNavLink Hook\n *\n * Detects active state and provides Next.js Link integration.\n *\n * @param options - Hook options\n * @returns Hook result with active state and Next.js Link\n *\n * @example\n * ```tsx\n * const { isActive, NextLink } = useNavLink({ href: '/home' });\n *\n * const LinkComponent = NextLink || 'a';\n *\n * return (\n * <LinkComponent href={href} className={isActive ? 'active' : ''}>\n * {children}\n * </LinkComponent>\n * );\n * ```\n */\nexport function useNavLink({\n href: _href,\n active,\n}: UseNavLinkOptions): UseNavLinkResult {\n // Active state detection (ADR-001 ACCEPTED)\n // Priority: manual active > auto-detect (usePathname) > false\n const isActive = useMemo(() => {\n // Manual active prop has priority\n if (active !== undefined) {\n return active;\n }\n\n // TODO: Auto-detect using usePathname (if Next.js available)\n // This needs to be handled in the component since we can't conditionally call hooks\n // The component will call usePathname if available and pass pathname to this hook\n // For now, default to false\n return false;\n }, [active]);\n\n // Auto-detect Next.js Link component (RFC-002 APPROVED)\n const NextLink = useMemo(() => {\n try {\n // Dynamic require for Next.js Link (RFC-002 APPROVED)\n // This is safe because we're in a try-catch and only for optional dependency\n // @ts-expect-error - require is available at runtime but not in TypeScript types\n const nextLink =\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n typeof require !== \"undefined\" ? require(\"next/link\") : null;\n return (\n nextLink as {\n default?: React.ComponentType<{\n href: string;\n children?: React.ReactNode;\n className?: string;\n [key: string]: unknown;\n }>;\n } | null\n )?.default;\n } catch {\n // Next.js not available - this is expected and safe\n return undefined;\n }\n }, []);\n\n return {\n isActive,\n NextLink,\n };\n}\n","\"use client\";\n\n/**\n * NavLink Component\n *\n * Navigation link component with active state detection and Next.js integration.\n *\n * @see EPIC-001: NavLink Component (Atom)\n * @see RFC-001: NavLink Hook Strategy (APPROVED)\n * @see RFC-002: Next.js Integration Strategy (APPROVED)\n * @see ADR-001: Active State Detection (ACCEPTED)\n */\n\nimport React, { useMemo, useCallback } from \"react\";\nimport type { NavLinkProps } from \"./types\";\nimport { useNavLink } from \"./hooks/useNavLink\";\nimport { cn, cva } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\n/**\n * NavLink Variants using CVA\n * Type-safe variant system for NavLink component\n */\nconst navLinkVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n \"disabled:pointer-events-none\",\n \"no-underline\",\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"text-fg-primary\",\n \"hover:opacity-80\",\n \"focus-visible:opacity-100\",\n \"focus:ring-line-brand\",\n ),\n underline: cn(\n \"text-fg-primary\",\n \"hover:opacity-80\",\n \"focus-visible:opacity-100\",\n \"border-b-2\",\n \"border-transparent\",\n \"hover:border-current\",\n \"focus:ring-line-brand\",\n ),\n background: cn(\n \"text-fg-primary\",\n \"hover:bg-surface-hover\",\n \"rounded-md\",\n getRadiusClass(\"md\"),\n \"focus:ring-line-brand\",\n ),\n },\n size: {\n sm: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n md: cn(\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n ),\n lg: cn(\n getSpacingClass(\"lg\", \"px\"),\n getSpacingClass(\"md\", \"py\"),\n getTypographySize(\"bodyLarge\"),\n ),\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n compoundVariants: [\n {\n variant: \"underline\",\n size: \"sm\",\n class: getSpacingClass(\"0.5\", \"pb\"),\n },\n {\n variant: \"underline\",\n size: \"md\",\n class: getSpacingClass(\"xs\", \"pb\"),\n },\n {\n variant: \"underline\",\n size: \"lg\",\n class: getSpacingClass(\"1.5\", \"pb\"),\n },\n {\n variant: \"background\",\n size: \"sm\",\n class: getSpacingClass(\"xs\", \"px\"),\n },\n {\n variant: \"background\",\n size: \"md\",\n class: getSpacingClass(\"sm\", \"px\"),\n },\n {\n variant: \"background\",\n size: \"lg\",\n class: getSpacingClass(\"base\", \"px\"),\n },\n ],\n },\n);\n\n/**\n * NavLink Component\n *\n * Navigation link with active state detection and Next.js integration.\n *\n * @example\n * ```tsx\n * <NavLink href=\"/home\">Home</NavLink>\n * <NavLink href=\"/about\" variant=\"underline\" active>About</NavLink>\n * <NavLink href=\"/contact\" variant=\"background\" size=\"lg\">Contact</NavLink>\n * ```\n *\n * Note: Auto-detection of active state via usePathname is deferred to a future enhancement\n * to avoid issues with conditional hook calls. For now, use the `active` prop manually\n * or implement pathname detection in the parent component.\n */\nexport function NavLink({\n href,\n children,\n active,\n disabled = false,\n variant = \"default\",\n size = \"md\",\n as,\n className,\n \"aria-label\": ariaLabel,\n onClick,\n onKeyDown,\n ...props\n}: NavLinkProps) {\n // Calculate active state\n // Priority: manual active > false (ADR-001)\n // TODO: Add auto-detect via usePathname in future enhancement\n // This requires a wrapper component pattern to avoid conditional hook calls\n const calculatedActive = useMemo(() => {\n // Manual active prop has priority (ADR-001)\n if (active !== undefined) {\n return active;\n }\n\n // Default to false\n // TODO: Auto-detect using usePathname (if Next.js available)\n return false;\n }, [active]);\n\n // Use hook for Next.js Link integration\n const { NextLink } = useNavLink({ href, active: calculatedActive });\n\n // Determine Link component\n // Priority: as prop > NextLink (auto-detected) > 'a' (RFC-002)\n const LinkComponent: React.ElementType = as || NextLink || \"a\";\n\n // Active state classes\n const activeClasses = useMemo(() => {\n if (!calculatedActive) return \"\";\n\n switch (variant) {\n case \"underline\":\n return cn(\"border-b-2\", \"border-line-brand\", \"text-fg-brand-emphasis\");\n case \"background\":\n return cn(\"bg-surface-brand-muted\", \"text-fg-brand-emphasis\");\n case \"default\":\n default:\n return cn(\"text-fg-brand-emphasis\", \"font-semibold\");\n }\n }, [calculatedActive, variant]);\n\n // Handle disabled state\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n onClick?.(e);\n },\n [disabled, onClick],\n );\n\n // Handle keyboard navigation\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (disabled) {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n e.stopPropagation();\n }\n return;\n }\n onKeyDown?.(e);\n },\n [disabled, onKeyDown],\n );\n\n // Prepare props for LinkComponent\n // Next.js Link has different prop structure, so we need to handle it\n const linkProps = useMemo(() => {\n const baseProps = {\n className: cn(\n navLinkVariants({ variant, size }),\n activeClasses,\n disabled && \"opacity-50 cursor-not-allowed pointer-events-none\",\n className,\n ),\n \"aria-current\": calculatedActive ? \"page\" : undefined,\n \"aria-disabled\": disabled ? true : undefined,\n \"aria-label\": ariaLabel,\n tabIndex: disabled ? -1 : undefined,\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n \"data-active\": calculatedActive,\n \"data-disabled\": disabled,\n ...props,\n };\n\n // For Next.js Link, we need to pass href differently\n if (NextLink && !as) {\n return {\n ...baseProps,\n href: disabled ? undefined : href,\n };\n }\n\n // For regular anchor or custom component\n return {\n ...baseProps,\n href: disabled ? undefined : href,\n };\n }, [\n variant,\n size,\n activeClasses,\n disabled,\n className,\n calculatedActive,\n ariaLabel,\n handleClick,\n handleKeyDown,\n href,\n NextLink,\n as,\n props,\n ]);\n\n return <LinkComponent {...linkProps}>{children}</LinkComponent>;\n}\n\nexport default NavLink;\n","\"use client\";\n\nimport { memo, forwardRef, useMemo } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type BadgeVariant =\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"neutral\"\n | \"primary\"\n | \"secondary\";\nexport type BadgeSize = \"sm\" | \"md\" | \"lg\";\nexport type BadgeStyle = \"solid\" | \"outline\";\n\nexport interface BadgeProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, \"style\"> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n style?: BadgeStyle;\n children: ReactNode;\n \"aria-label\"?: string;\n}\n\n/**\n * Badge Component\n *\n * A versatile badge component for displaying status, priority, and other labels.\n * Follows Atomic Design principles as an Atom component.\n * Uses tokens for consistent theming.\n *\n * @example\n * ```tsx\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"error\" size=\"lg\">Critical</Badge>\n * <Badge variant=\"info\" style=\"outline\">New</Badge>\n * ```\n */\n// Badge variants using CVA\nconst badgeVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n getTypographyWeight(\"label\"),\n getRadiusClass(\"md\"),\n \"border\",\n ),\n {\n variants: {\n variant: {\n success: \"\",\n warning: \"\",\n error: \"\",\n info: \"\",\n neutral: \"\",\n primary: \"\",\n secondary: \"\",\n },\n size: {\n sm: cn(\n getSpacingClass(\"1.5\", \"px\"),\n getSpacingClass(\"0.5\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n md: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n lg: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n },\n style: {\n solid: \"\",\n outline: \"\",\n },\n },\n compoundVariants: [\n // Solid style variants\n {\n variant: \"success\",\n style: \"solid\",\n class: cn(\"bg-success-bg\", \"text-success-dark\", \"border-success\"),\n },\n {\n variant: \"warning\",\n style: \"solid\",\n class: cn(\"bg-warning-bg\", \"text-warning-dark\", \"border-warning\"),\n },\n {\n variant: \"error\",\n style: \"solid\",\n class: cn(\"bg-error-bg\", \"text-error-dark\", \"border-error\"),\n },\n {\n variant: \"info\",\n style: \"solid\",\n class: cn(\"bg-info-bg\", \"text-info-dark\", \"border-info\"),\n },\n {\n variant: \"neutral\",\n style: \"solid\",\n class: cn(\"bg-surface-muted\", \"text-fg-primary\", \"border-line-default\"),\n },\n {\n variant: \"primary\",\n style: \"solid\",\n class: cn(\n \"bg-surface-brand\",\n \"text-fg-brand-emphasis\",\n \"border-line-brand\",\n ),\n },\n {\n variant: \"secondary\",\n style: \"solid\",\n // bg-pink-300: secondary solid badge — no semantic equivalent\n // (would shift 2 shades to bg-surface-secondary). Kept literal until\n // secondary brand surface palette expands beyond DEFAULT.\n class: cn(\n \"bg-pink-300\",\n \"text-fg-brand-secondary-emphasis\",\n \"border-line-secondary\",\n ),\n },\n // Outline style variants\n {\n variant: \"success\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-success\", \"text-fg-success\"),\n },\n {\n variant: \"warning\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-warning\", \"text-fg-warning\"),\n },\n {\n variant: \"error\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-error\", \"text-fg-error\"),\n },\n {\n variant: \"info\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-info\", \"text-fg-info\"),\n },\n {\n variant: \"neutral\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-line-default\", \"text-fg-secondary\"),\n },\n {\n variant: \"primary\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-line-brand\", \"text-fg-brand\"),\n },\n {\n variant: \"secondary\",\n style: \"outline\",\n class: cn(\n \"bg-transparent\",\n \"border-line-secondary\",\n \"text-fg-brand-secondary\",\n ),\n },\n ],\n defaultVariants: {\n variant: \"neutral\",\n size: \"md\",\n style: \"solid\",\n },\n },\n);\n\nconst Badge = memo(\n forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n variant = \"neutral\",\n size = \"md\",\n style = \"solid\",\n className = \"\",\n children,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) {\n // Memoize classes\n const classes = useMemo(\n () => cn(badgeVariants({ variant, size, style }), className),\n [variant, size, style, className],\n );\n\n // Memoize accessible label\n const accessibleLabel = useMemo(() => {\n if (ariaLabel) return ariaLabel;\n if (typeof children === \"string\") return children;\n // Try to extract text from ReactNode\n if (typeof children === \"object\" && children !== null) {\n if (\"props\" in children) {\n const childProps = (children as { props?: { children?: unknown } })\n .props;\n if (childProps?.children && typeof childProps.children === \"string\") {\n return childProps.children;\n }\n }\n }\n return undefined;\n }, [ariaLabel, children]);\n\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={accessibleLabel}\n className={classes}\n {...props}\n >\n {children}\n </span>\n );\n }),\n);\n\nBadge.displayName = \"Badge\";\n\nexport default Badge;\n","\"use client\";\n\nimport { forwardRef, memo, useMemo, useCallback } from \"react\";\nimport type { SelectHTMLAttributes, ReactNode } from \"react\";\nimport {\n getTypographyClasses,\n getTypographySize,\n} from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn, cva } from \"../../utils\";\n\n/**\n * Helper Text Component\n * Memoized component for helper/error text\n */\nconst HelperText = memo(function HelperText({\n error,\n success,\n helperText,\n errorId,\n helperId,\n}: {\n error: boolean;\n success: boolean;\n helperText?: string;\n errorId?: string;\n helperId?: string;\n}) {\n const helperClasses = useMemo(\n () =>\n cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographyClasses(\"caption\"),\n error && \"text-fg-error\",\n success && \"text-fg-success\",\n !error && !success && \"text-fg-secondary\",\n ),\n [error, success],\n );\n\n const text = useMemo(\n () => helperText || (error ? \"Error\" : success ? \"Success\" : \"\"),\n [helperText, error, success],\n );\n\n return (\n <div\n id={errorId || helperId}\n className={helperClasses}\n role={error || success ? \"alert\" : undefined}\n >\n {text}\n </div>\n );\n});\n\nexport type SelectSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectOptionGroup {\n label: string;\n options: SelectOption[];\n}\n\nexport interface SelectProps\n extends Omit<SelectHTMLAttributes<HTMLSelectElement>, \"children\" | \"size\"> {\n options: SelectOption[];\n optionGroups?: SelectOptionGroup[];\n placeholder?: string;\n label?: ReactNode;\n error?: boolean;\n success?: boolean;\n helperText?: string;\n size?: SelectSize;\n}\n\n/**\n * Select Component\n *\n * A styled select dropdown component for forms.\n * Follows Atomic Design principles as an Atom component.\n * Supports both flat options and option groups.\n *\n * @example\n * ```tsx\n * <Select\n * label=\"Choose option\"\n * options={[\n * { value: \"1\", label: \"Option 1\" },\n * { value: \"2\", label: \"Option 2\" }\n * ]}\n * placeholder=\"Select an option\"\n * />\n * ```\n */\nconst Select = memo(\n forwardRef<HTMLSelectElement, SelectProps>(function Select(\n {\n options = [],\n optionGroups,\n placeholder,\n label,\n error = false,\n success = false,\n helperText,\n size = \"md\",\n className = \"\",\n disabled = false,\n id,\n ...props\n },\n ref,\n ) {\n // Memoize IDs\n const selectId = useMemo(\n () => id || `select-${Math.random().toString(36).substr(2, 9)}`,\n [id],\n );\n\n const errorId = useMemo(\n () => (error ? `${selectId}-error` : undefined),\n [error, selectId],\n );\n\n const helperId = useMemo(\n () => (helperText ? `${selectId}-helper` : undefined),\n [helperText, selectId],\n );\n\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const successFocusRing = useMemo(() => \"focus:border-success\", []);\n\n // Memoize focus ring color function\n const getFocusRingColor = useCallback(\n (stateType?: \"error\" | \"success\"): string => {\n if (stateType === \"error\") {\n return errorFocusRing.replace(\"focus:border-\", \"focus:ring-\");\n }\n if (stateType === \"success\") {\n return successFocusRing.replace(\"focus:border-\", \"focus:ring-\");\n }\n return primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\");\n },\n [errorFocusRing, successFocusRing, primaryFocusRing],\n );\n\n // Select variants using CVA\n const selectVariants = cva(\n // Base classes\n cn(\n \"block\",\n \"w-full\",\n getRadiusClass(\"md\"),\n \"border\",\n \"bg-surface-base\",\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n ),\n {\n variants: {\n size: {\n sm: cn(\n \"h-8\",\n getTypographySize(\"bodySmall\"),\n getSpacingClass(\"md\", \"px\"),\n ),\n md: cn(\n \"h-10\",\n getTypographySize(\"body\"),\n getSpacingClass(\"base\", \"px\"),\n ),\n lg: cn(\n \"h-12\",\n getTypographySize(\"bodyLarge\"),\n getSpacingClass(\"lg\", \"px\"),\n ),\n },\n state: {\n default: cn(\"border-line-default\", getFocusRingColor()),\n error: cn(\"border-error\", getFocusRingColor(\"error\")),\n success: cn(\"border-success\", getFocusRingColor(\"success\")),\n },\n },\n defaultVariants: {\n size: \"md\",\n state: \"default\",\n },\n },\n );\n\n // Memoize state\n const selectState = useMemo(\n () => (error ? \"error\" : success ? \"success\" : \"default\"),\n [error, success],\n );\n\n // Memoize classes\n const selectClasses = useMemo(\n () => cn(selectVariants({ size, state: selectState }), className),\n [size, selectState, className],\n );\n\n const labelClasses = useMemo(\n () =>\n cn(\n \"block\",\n getTypographyClasses(\"label\"),\n getSpacingClass(\"xs\", \"mb\"),\n disabled && \"opacity-50\",\n ),\n [disabled],\n );\n\n return (\n <div className=\"w-full\">\n {label && (\n <label htmlFor={selectId} className={labelClasses}>\n {label}\n </label>\n )}\n <select\n id={selectId}\n ref={ref}\n className={selectClasses}\n disabled={disabled}\n aria-invalid={error}\n aria-required={props.required}\n aria-describedby={errorId || helperId}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {optionGroups && optionGroups.length > 0\n ? optionGroups.map((group, groupIndex) => (\n <optgroup key={groupIndex} label={group.label}>\n {(group.options || []).map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </optgroup>\n ))\n : (options || []).map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n {(error || success || helperText) && (\n <HelperText\n error={error}\n success={success}\n helperText={helperText}\n errorId={errorId}\n helperId={helperId}\n />\n )}\n </div>\n );\n }),\n);\n\nSelect.displayName = \"Select\";\n\nexport default Select;\n","import { forwardRef, memo, useMemo } from \"react\";\nimport type { TextareaHTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\ninterface Props extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean;\n resize?: \"none\" | \"both\" | \"horizontal\" | \"vertical\";\n}\n\n/**\n * Textarea Component\n *\n * A styled textarea component for longer text input.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Textarea\n * placeholder=\"Enter description...\"\n * rows={4}\n * />\n * ```\n */\nconst Textarea = memo(\n forwardRef<HTMLTextAreaElement, Props>(function Textarea(\n { error = false, resize = \"vertical\", className = \"\", ...props },\n ref,\n ) {\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const focusRingColor = useMemo(\n () =>\n error\n ? errorFocusRing.replace(\"focus:border-\", \"focus:ring-\")\n : primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\"),\n [error, errorFocusRing, primaryFocusRing],\n );\n\n // Memoize resize classes\n const resizeClasses = useMemo<Record<NonNullable<Props[\"resize\"]>, string>>(\n () => ({\n none: \"resize-none\",\n both: \"resize\",\n horizontal: \"resize-x\",\n vertical: \"resize-y\",\n }),\n [],\n );\n\n // Memoize classes\n const classes = useMemo(\n () =>\n cn(\n \"block\",\n \"w-full\",\n getRadiusClass(\"md\"),\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"md\", \"py\"),\n \"border\",\n getTypographySize(\"body\"),\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n resizeClasses[resize],\n error\n ? cn(\"border-error\", focusRingColor)\n : cn(\"border-line-default\", focusRingColor),\n className,\n ),\n [resize, resizeClasses, error, focusRingColor, className],\n );\n\n // Memoize aria-describedby\n const ariaDescribedBy = useMemo(\n () => (error && props.id ? `${props.id}-error` : undefined),\n [error, props.id],\n );\n\n return (\n <textarea\n ref={ref}\n className={classes}\n aria-invalid={error}\n aria-describedby={ariaDescribedBy}\n {...props}\n />\n );\n }),\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport default Textarea;\n","import type { LabelHTMLAttributes } from \"react\";\nimport { forwardRef, memo, useMemo } from \"react\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\ninterface Props extends LabelHTMLAttributes<HTMLLabelElement> {\n variant?: \"default\" | \"required\" | \"optional\";\n children: React.ReactNode;\n}\n\n/**\n * Label Component\n *\n * A styled label component for form inputs.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Label htmlFor=\"email\" variant=\"required\">\n * Email Address\n * </Label>\n * ```\n */\nconst Label = memo(\n forwardRef<HTMLLabelElement, Props>(function Label(\n { variant = \"default\", className = \"\", children, ...props },\n ref,\n ) {\n // Memoize base classes\n const baseClasses = useMemo(\n () =>\n cn(\n \"block\",\n getTypographySize(\"label\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n ),\n [],\n );\n\n // Memoize variant classes\n const variantClasses = useMemo<\n Record<NonNullable<Props[\"variant\"]>, string>\n >(\n () => ({\n default: \"\",\n required: cn(\n \"after:content-['*']\",\n `after:${getSpacingClass(\"0.5\", \"ml\")}`,\n \"after:text-fg-error\",\n ),\n optional: cn(\n \"after:content-['(optional)']\",\n \"after:ml-1\", // xs spacing = 1 (4px) - note: test expects ml-1, not ml-0.5\n \"after:text-fg-tertiary\",\n \"after:font-normal\",\n ),\n }),\n [],\n );\n\n // Memoize final classes\n const classes = useMemo(\n () => cn(baseClasses, variantClasses[variant], className),\n [baseClasses, variantClasses, variant, className],\n );\n\n return (\n <label ref={ref} className={classes} {...props}>\n {children}\n </label>\n );\n }),\n);\n\nLabel.displayName = \"Label\";\n\nexport default Label;\n","import type { HTMLAttributes } from \"react\";\nimport { AlertCircle } from \"lucide-react\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\ninterface Props extends HTMLAttributes<HTMLDivElement> {\n message: string;\n id?: string;\n}\n\n/**\n * ErrorMessage Component\n *\n * A component for displaying validation error messages.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <ErrorMessage message=\"This field is required\" id=\"email-error\" />\n * ```\n */\nexport default function ErrorMessage({\n message,\n id,\n className = \"\",\n ...props\n}: Props) {\n const baseClasses = [\n getSpacingClass(\"xs\", \"mt\"),\n getTypographySize(\"bodySmall\"),\n \"text-fg-error\",\n \"flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"gap\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <div role=\"alert\" id={id} className={classes} aria-live=\"polite\" {...props}>\n <AlertCircle className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n <span>{message}</span>\n </div>\n );\n}\n","\"use client\";\n\nimport type {\n HTMLAttributes,\n ReactNode,\n KeyboardEvent,\n FocusEvent,\n ReactElement,\n} from \"react\";\nimport {\n useState,\n useRef,\n useEffect,\n cloneElement,\n isValidElement,\n} from \"react\";\nimport { getBorderWidthClass } from \"../../tokens/borders\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { cn, cva } from \"../../utils\";\n\nexport interface TooltipProps extends HTMLAttributes<HTMLDivElement> {\n content: string;\n children: ReactNode;\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n delay?: number;\n \"aria-label\"?: string;\n /**\n * When true, the tooltip wrapper won't interfere with absolute positioning of children.\n * The wrapper will use `position: static` instead of `position: relative`.\n */\n preservePositioning?: boolean;\n}\n\n/**\n * Tooltip Component\n *\n * A tooltip component for displaying additional information on hover.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"This is a tooltip\">\n * <Button>Hover me</Button>\n * </Tooltip>\n * ```\n */\nexport default function Tooltip({\n content,\n children,\n position = \"top\",\n delay = 200,\n className = \"\",\n \"aria-label\": _ariaLabel,\n preservePositioning = false,\n ...props\n}: TooltipProps) {\n const [isVisible, setIsVisible] = useState(false);\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n\n // Generate unique ID for tooltip\n const tooltipId = `tooltip-${Math.random().toString(36).substr(2, 9)}`;\n\n const handleMouseEnter = () => {\n const id = setTimeout(() => {\n setIsVisible(true);\n }, delay);\n timeoutIdRef.current = id;\n };\n\n const handleMouseLeave = () => {\n if (timeoutIdRef.current) {\n clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = null;\n }\n setIsVisible(false);\n };\n\n const handleFocus = () => {\n // Show tooltip immediately on focus (no delay for keyboard users)\n setIsVisible(true);\n };\n\n const handleBlur = () => {\n setIsVisible(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setIsVisible(false);\n triggerRef.current?.blur();\n }\n };\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (timeoutIdRef.current) {\n clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = null;\n }\n };\n }, []);\n\n // Close tooltip when clicking outside\n useEffect(() => {\n if (!isVisible) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n tooltipRef.current &&\n !tooltipRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setIsVisible(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isVisible]);\n\n // Helper to get arrow border color\n // Uses complete classes that Tailwind can detect\n const getArrowBorderColor = (\n position: \"top\" | \"bottom\" | \"left\" | \"right\",\n ): string => {\n // Arrow follows the tooltip body's surface-inverse color so the\n // triangle's point visually merges into the body.\n const borderMap: Record<\"top\" | \"bottom\" | \"left\" | \"right\", string> = {\n top: \"border-t-surface-inverse\",\n bottom: \"border-b-surface-inverse\",\n left: \"border-l-surface-inverse\",\n right: \"border-r-surface-inverse\",\n };\n return borderMap[position];\n };\n\n // Tooltip variants using CVA\n const tooltipVariants = cva(\n cn(\n \"absolute\",\n getZIndexClass(\"tooltip\"),\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n \"text-fg-inverse\",\n \"bg-surface-inverse\",\n getRadiusClass(\"md\"),\n \"shadow-lg\",\n \"whitespace-nowrap\",\n ),\n {\n variants: {\n position: {\n top: cn(\n \"bottom-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getSpacingClass(\"sm\", \"mb\"),\n ),\n bottom: cn(\n \"top-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getSpacingClass(\"sm\", \"mt\"),\n ),\n left: cn(\n \"right-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getSpacingClass(\"sm\", \"mr\"),\n ),\n right: cn(\n \"left-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getSpacingClass(\"sm\", \"ml\"),\n ),\n },\n },\n defaultVariants: {\n position: \"top\",\n },\n },\n );\n\n const arrowVariants = cva(\n cn(\n \"absolute\",\n \"w-0\",\n \"h-0\",\n getBorderWidthClass(\"thick\"),\n \"border-transparent\",\n ),\n {\n variants: {\n position: {\n top: cn(\n \"top-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getArrowBorderColor(\"top\"),\n ),\n bottom: cn(\n \"bottom-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getArrowBorderColor(\"bottom\"),\n ),\n left: cn(\n \"left-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getArrowBorderColor(\"left\"),\n ),\n right: cn(\n \"right-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getArrowBorderColor(\"right\"),\n ),\n },\n },\n defaultVariants: {\n position: \"top\",\n },\n },\n );\n\n // Clone children to add accessibility props\n const childrenWithProps = isValidElement(children)\n ? (() => {\n const childElement = children as ReactElement<\n HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }\n >;\n const existingProps = childElement.props;\n const existingRef = existingProps.ref;\n\n return cloneElement(childElement, {\n ref: (node: HTMLElement | null) => {\n triggerRef.current = node;\n // Preserve existing ref if any\n if (typeof existingRef === \"function\") {\n existingRef(node);\n } else if (\n existingRef &&\n typeof existingRef === \"object\" &&\n \"current\" in existingRef\n ) {\n (\n existingRef as React.MutableRefObject<HTMLElement | null>\n ).current = node;\n }\n },\n \"aria-describedby\": isVisible\n ? tooltipId\n : existingProps[\"aria-describedby\"],\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => {\n handleMouseEnter();\n existingProps.onMouseEnter?.(e);\n },\n onMouseLeave: (e: React.MouseEvent<HTMLElement>) => {\n handleMouseLeave();\n existingProps.onMouseLeave?.(e);\n },\n onFocus: (e: FocusEvent<HTMLElement>) => {\n handleFocus();\n existingProps.onFocus?.(e);\n },\n onBlur: (e: FocusEvent<HTMLElement>) => {\n handleBlur();\n existingProps.onBlur?.(e);\n },\n onKeyDown: (e: KeyboardEvent<HTMLElement>) => {\n handleKeyDown(e);\n existingProps.onKeyDown?.(e);\n },\n } as Partial<typeof existingProps>);\n })()\n : children;\n\n // When preservePositioning is true, use static positioning to avoid interfering\n // with absolute positioned children. The tooltip will still be positioned correctly\n // using absolute positioning relative to the viewport/nearest positioned ancestor.\n const wrapperClassName = preservePositioning\n ? cn(\"static\", \"inline-block\", className)\n : cn(\"relative\", \"inline-block\", className);\n\n return (\n <div className={wrapperClassName} {...props}>\n {childrenWithProps}\n {isVisible && (\n <div\n ref={tooltipRef}\n id={tooltipId}\n className={cn(tooltipVariants({ position }))}\n role=\"tooltip\"\n aria-live=\"polite\"\n >\n {content}\n <div className={cn(arrowVariants({ position }))} aria-hidden=\"true\" />\n </div>\n )}\n </div>\n );\n}\n","import type { HTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"text\" | \"card\" | \"list\" | \"circle\";\n width?: string;\n height?: string;\n lines?: number;\n}\n\n/**\n * Skeleton Component\n *\n * A skeleton loader component for displaying loading states.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Skeleton variant=\"card\" />\n * <Skeleton variant=\"text\" lines={3} />\n * ```\n */\nexport default function Skeleton({\n variant = \"text\",\n width,\n height,\n lines = 1,\n className = \"\",\n \"aria-label\": ariaLabel,\n ...props\n}: SkeletonProps) {\n const baseClasses = [\n \"motion-safe:animate-pulse\",\n \"bg-surface-muted\",\n getRadiusClass(\"sm\"),\n ];\n\n const variantClasses: Record<\n NonNullable<SkeletonProps[\"variant\"]>,\n string\n > = {\n text: \"h-4\",\n card: \"h-32\",\n list: \"h-12\",\n circle: \"rounded-full\",\n };\n\n const classes = cn(...baseClasses, variantClasses[variant], className);\n\n const style: React.CSSProperties = {};\n if (width) style.width = width;\n if (height) style.height = height;\n\n const defaultAriaLabel = ariaLabel || `Loading ${variant} content`;\n\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n className={getSpacingClass(\"sm\", \"space-y\")}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={defaultAriaLabel}\n {...props}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n className={classes}\n style={index === lines - 1 ? { width: \"75%\" } : style}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n className={classes}\n style={style}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={defaultAriaLabel}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\n\nexport interface UseCollapsibleOptions {\n defaultOpen?: boolean;\n open?: boolean; // Controlled mode\n onOpenChange?: (open: boolean) => void;\n storageKey?: string; // For localStorage persistence\n}\n\nexport interface UseCollapsibleReturn {\n isOpen: boolean;\n toggle: () => void;\n setOpen: (open: boolean) => void;\n}\n\n/**\n * useCollapsible Hook\n *\n * Reusable hook for collapsible component logic.\n * Supports both controlled and uncontrolled modes.\n * Optional localStorage persistence.\n *\n * @example\n * ```tsx\n * const { isOpen, toggle } = useCollapsible({\n * defaultOpen: true,\n * storageKey: 'my-collapsible-state'\n * });\n * ```\n */\nexport function useCollapsible({\n defaultOpen = true,\n open,\n onOpenChange,\n storageKey,\n}: UseCollapsibleOptions): UseCollapsibleReturn {\n // Load initial state from localStorage if storageKey is provided\n const getInitialState = useCallback((): boolean => {\n if (storageKey && typeof window !== \"undefined\") {\n const stored = localStorage.getItem(storageKey);\n if (stored !== null) {\n return stored === \"true\";\n }\n }\n return defaultOpen;\n }, [defaultOpen, storageKey]);\n\n const [internalOpen, setInternalOpen] = useState<boolean>(getInitialState);\n\n // Use controlled state if provided, otherwise use internal state\n const isOpen = open !== undefined ? open : internalOpen;\n\n // Persist to localStorage when state changes\n useEffect(() => {\n if (storageKey && typeof window !== \"undefined\" && open === undefined) {\n localStorage.setItem(storageKey, String(internalOpen));\n }\n }, [internalOpen, storageKey, open]);\n\n const setOpen = useCallback(\n (newOpen: boolean) => {\n if (open === undefined) {\n // Uncontrolled mode\n setInternalOpen(newOpen);\n }\n // In controlled mode, parent handles state\n onOpenChange?.(newOpen);\n },\n [open, onOpenChange],\n );\n\n const toggle = useCallback(() => {\n setOpen(!isOpen);\n }, [isOpen, setOpen]);\n\n return {\n isOpen,\n toggle,\n setOpen,\n };\n}\n","\"use client\";\n\nimport {\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type KeyboardEvent,\n} from \"react\";\nimport {\n useCollapsible,\n type UseCollapsibleOptions,\n} from \"../../hooks/useCollapsible\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { cn } from \"../../utils\";\n\nexport interface CollapsibleProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n children: ReactNode;\n trigger: ReactNode; // Content for the toggle button\n defaultOpen?: boolean;\n open?: boolean; // Controlled mode\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n duration?: number; // Animation duration in ms\n storageKey?: string; // For localStorage persistence\n}\n\n/**\n * Collapsible Component\n *\n * A generic, reusable collapsible component for any content.\n * Supports both controlled and uncontrolled modes.\n * Includes smooth animations and full ARIA support.\n *\n * @example\n * ```tsx\n * <Collapsible\n * trigger={<button>Toggle</button>}\n * defaultOpen={true}\n * >\n * <div>Collapsible content</div>\n * </Collapsible>\n * ```\n */\nexport default function Collapsible({\n children,\n trigger,\n defaultOpen = true,\n open,\n onOpenChange,\n disabled = false,\n duration = 200,\n storageKey,\n className = \"\",\n ...props\n}: CollapsibleProps) {\n const { isOpen, toggle } = useCollapsible({\n defaultOpen,\n open,\n onOpenChange,\n storageKey,\n } as UseCollapsibleOptions);\n\n const contentRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number | \"auto\">(isOpen ? \"auto\" : 0);\n\n // Update height when content changes or isOpen changes\n useEffect(() => {\n if (!contentRef.current) return;\n\n if (isOpen) {\n // Set to actual height for animation\n setHeight(contentRef.current.scrollHeight);\n } else {\n // Set to 0 for collapse animation\n setHeight(0);\n }\n }, [isOpen, children]);\n\n // Handle resize to recalculate height\n useEffect(() => {\n if (!isOpen || !contentRef.current) return;\n\n const resizeObserver = new ResizeObserver(() => {\n if (contentRef.current && isOpen) {\n setHeight(contentRef.current.scrollHeight);\n }\n });\n\n resizeObserver.observe(contentRef.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [isOpen]);\n\n const contentId = `collapsible-content-${Math.random().toString(36).substr(2, 9)}`;\n\n return (\n <div className={className} {...props}>\n <button\n type=\"button\"\n onClick={toggle}\n onKeyDown={(e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (!disabled) {\n toggle();\n }\n }\n }}\n disabled={disabled}\n aria-expanded={isOpen}\n aria-controls={contentId}\n aria-disabled={disabled}\n className={cn(\n \"w-full\",\n \"text-left\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-brand\",\n \"focus:ring-offset-2\",\n getRadiusClass(\"md\"),\n )}\n >\n {trigger}\n </button>\n <div\n id={contentId}\n ref={contentRef}\n style={{\n height: typeof height === \"number\" ? `${height}px` : height,\n overflow: \"hidden\",\n transition: `height ${duration}ms ease-in-out`,\n }}\n aria-hidden={!isOpen}\n >\n <div>{children}</div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n useRef,\n useEffect,\n forwardRef,\n memo,\n useMemo,\n useCallback,\n} from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: ReactNode;\n error?: boolean;\n helperText?: string;\n indeterminate?: boolean;\n}\n\n/**\n * Checkbox Component\n *\n * A styled checkbox input component.\n * Follows Atomic Design principles as an Atom component.\n * Uses Composite Pattern when combined with Label and ErrorMessage.\n *\n * @example\n * ```tsx\n * <Checkbox\n * id=\"terms\"\n * label=\"I agree to the terms\"\n * checked={checked}\n * onChange={handleChange}\n * />\n * ```\n */\nconst Checkbox = memo(\n forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n id,\n label,\n error = false,\n helperText,\n className = \"\",\n disabled = false,\n indeterminate = false,\n ...props\n },\n ref,\n ) {\n // Memoize IDs\n const checkboxId = useMemo(\n () => id || `checkbox-${Math.random().toString(36).substr(2, 9)}`,\n [id],\n );\n\n const errorId = useMemo(\n () => (error ? `${checkboxId}-error` : undefined),\n [error, checkboxId],\n );\n\n const helperId = useMemo(\n () => (helperText ? `${checkboxId}-helper` : undefined),\n [helperText, checkboxId],\n );\n\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const focusRingColor = useMemo(\n () =>\n error\n ? errorFocusRing.replace(\"focus:border-\", \"focus:ring-\")\n : primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\"),\n [error, errorFocusRing, primaryFocusRing],\n );\n\n // Memoize classes\n const checkboxClasses = useMemo(\n () =>\n cn(\n \"h-4\",\n \"w-4\",\n getRadiusClass(\"sm\"),\n \"border\",\n \"border-line-default\",\n \"text-fg-brand\",\n \"focus:ring-2\",\n focusRingColor,\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n \"cursor-pointer\",\n error && \"border-error\",\n className,\n ),\n [focusRingColor, error, className],\n );\n\n const labelClasses = useMemo(\n () =>\n cn(\n getTypographyClasses(\"label\"),\n getSpacingClass(\"sm\", \"ml\"),\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n ),\n [disabled],\n );\n\n // Set indeterminate state via ref\n const internalRef = useRef<HTMLInputElement>(null);\n\n // Memoize callback ref\n const setRef = useCallback(\n (element: HTMLInputElement | null) => {\n internalRef.current = element;\n\n // Handle forwarded ref (can be function or object)\n if (typeof ref === \"function\") {\n ref(element);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n element;\n }\n\n // Set indeterminate state\n if (element) {\n element.indeterminate = indeterminate;\n }\n },\n [ref, indeterminate],\n );\n\n useEffect(() => {\n if (internalRef.current) {\n internalRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n return (\n <div className={cn(\"flex\", \"flex-col\", getSpacingClass(\"sm\", \"my\"))}>\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id={checkboxId}\n ref={setRef}\n className={checkboxClasses}\n disabled={disabled}\n aria-invalid={error}\n aria-describedby={errorId || helperId || undefined}\n aria-label={!label ? \"Checkbox\" : undefined}\n {...props}\n />\n {label && (\n <label htmlFor={checkboxId} className={labelClasses}>\n {label}\n </label>\n )}\n </div>\n {(error || helperText) && (\n <div\n id={errorId || helperId}\n className={cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographyClasses(\"caption\"),\n error ? \"text-fg-error\" : \"text-fg-secondary\",\n )}\n role={error ? \"alert\" : undefined}\n >\n {error ? helperText || \"This field has an error\" : helperText}\n </div>\n )}\n </div>\n );\n }),\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport default Checkbox;\n","\"use client\";\n\nimport { forwardRef, memo, useMemo } from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface RadioProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: ReactNode;\n error?: boolean;\n helperText?: string;\n}\n\n/**\n * Radio Component\n *\n * A styled radio input component.\n * Follows Atomic Design principles as an Atom component.\n * Uses Composite Pattern when combined with Label and ErrorMessage.\n *\n * @example\n * ```tsx\n * <Radio\n * id=\"option1\"\n * name=\"options\"\n * label=\"Option 1\"\n * value=\"1\"\n * checked={selected === \"1\"}\n * onChange={handleChange}\n * />\n * ```\n */\nconst Radio = memo(\n forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n id,\n label,\n error = false,\n helperText,\n className = \"\",\n disabled = false,\n ...props\n },\n ref,\n ) {\n // Memoize IDs\n const radioId = useMemo(\n () => id || `radio-${Math.random().toString(36).substr(2, 9)}`,\n [id],\n );\n\n const errorId = useMemo(\n () => (error ? `${radioId}-error` : undefined),\n [error, radioId],\n );\n\n const helperId = useMemo(\n () => (helperText ? `${radioId}-helper` : undefined),\n [helperText, radioId],\n );\n\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const focusRingColor = useMemo(\n () =>\n error\n ? errorFocusRing.replace(\"focus:border-\", \"focus:ring-\")\n : primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\"),\n [error, errorFocusRing, primaryFocusRing],\n );\n\n // Memoize classes\n const radioClasses = useMemo(\n () =>\n cn(\n \"h-4\",\n \"w-4\",\n \"border\",\n \"border-line-default\",\n \"text-fg-brand\",\n \"focus:ring-2\",\n focusRingColor,\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n \"cursor-pointer\",\n error && \"border-error\",\n className,\n ),\n [focusRingColor, error, className],\n );\n\n const labelClasses = useMemo(\n () =>\n cn(\n getTypographyClasses(\"label\"),\n getSpacingClass(\"sm\", \"ml\"),\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n ),\n [disabled],\n );\n\n return (\n <div className={cn(\"flex\", \"flex-col\", getSpacingClass(\"sm\", \"my\"))}>\n <div className=\"flex items-center\">\n <input\n type=\"radio\"\n id={radioId}\n ref={ref}\n className={radioClasses}\n disabled={disabled}\n aria-invalid={error}\n aria-describedby={errorId || helperId || undefined}\n aria-label={!label ? \"Radio button\" : undefined}\n {...props}\n />\n {label && (\n <label htmlFor={radioId} className={labelClasses}>\n {label}\n </label>\n )}\n </div>\n {(error || helperText) && (\n <div\n id={errorId || helperId}\n className={cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographyClasses(\"caption\"),\n error ? \"text-fg-error\" : \"text-fg-secondary\",\n )}\n role={error ? \"alert\" : undefined}\n >\n {error ? helperText || \"This field has an error\" : helperText}\n </div>\n )}\n </div>\n );\n }),\n);\n\nRadio.displayName = \"Radio\";\n\nexport default Radio;\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { forwardRef } from \"react\";\nimport { getRadiusClass } from \"../../tokens\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\nimport \"./Progress.css\";\n\nexport type ProgressVariant =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps extends HTMLAttributes<HTMLDivElement> {\n value?: number; // 0-100, undefined for indeterminate\n max?: number; // Default 100\n variant?: ProgressVariant;\n size?: ProgressSize;\n showLabel?: boolean;\n label?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * Progress Component\n *\n * A progress bar component for displaying progress or loading states.\n * Supports both determinate (with value) and indeterminate (without value) modes.\n * Fully accessible with ARIA attributes.\n *\n * @example\n * ```tsx\n * // Determinate progress\n * <Progress value={75} variant=\"primary\" />\n *\n * // Indeterminate progress\n * <Progress variant=\"primary\" />\n *\n * // With label\n * <Progress value={50} showLabel label=\"Uploading...\" />\n * ```\n */\n// Progress variants using CVA\nconst progressTrackVariants = cva(\"w-full\", {\n variants: {\n size: {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n },\n variant: {\n primary: \"bg-surface-muted\",\n secondary: \"bg-surface-muted\",\n success: \"bg-success-bg-emphasis\",\n error: \"bg-error-bg-emphasis\",\n warning: \"bg-warning-bg-emphasis\",\n info: \"bg-info-bg-emphasis\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"primary\",\n },\n});\n\nconst progressBarVariants = cva(\"transition-all\", {\n variants: {\n variant: {\n primary: \"bg-surface-brand\",\n secondary: \"bg-surface-secondary\",\n success: \"bg-success\",\n error: \"bg-error\",\n warning: \"bg-warning\",\n info: \"bg-info\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n },\n});\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value,\n max = 100,\n variant = \"primary\",\n size = \"md\",\n showLabel = false,\n label,\n \"aria-label\": ariaLabel,\n className = \"\",\n ...props\n },\n ref,\n) {\n const isIndeterminate = value === undefined;\n const percentage = isIndeterminate\n ? undefined\n : Math.min(Math.max((value / max) * 100, 0), 100);\n\n const defaultAriaLabel =\n ariaLabel ||\n (isIndeterminate\n ? \"Loading in progress\"\n : `Progress: ${percentage?.toFixed(0)}%`);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {showLabel && (label || !isIndeterminate) && (\n <div\n className={cn(\n \"flex\",\n \"items-center\",\n \"justify-between\",\n getSpacingClass(\"xs\", \"mb\"),\n )}\n >\n {label && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n )}\n >\n {label}\n </span>\n )}\n {!isIndeterminate && percentage !== undefined && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n \"text-fg-secondary\",\n )}\n >\n {percentage.toFixed(0)}%\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : max}\n aria-valuenow={isIndeterminate ? undefined : value}\n aria-label={defaultAriaLabel}\n aria-busy={isIndeterminate}\n className={cn(\n \"relative\",\n \"w-full\",\n \"overflow-hidden\",\n progressTrackVariants({ size, variant }),\n getRadiusClass(\"full\"),\n )}\n >\n {isIndeterminate ? (\n <div\n className={cn(\n \"absolute\",\n \"top-0\",\n \"left-0\",\n \"bottom-0\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"motion-reduce:animate-none\",\n )}\n style={{\n width: \"30%\",\n animation: \"progress-indeterminate 1.5s ease-in-out infinite\",\n }}\n />\n ) : (\n <div\n className={cn(\n \"h-full\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"transition-all\",\n \"duration-300\",\n \"ease-out\",\n )}\n style={{\n width: `${percentage}%`,\n }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n </div>\n );\n});\n\nProgress.displayName = \"Progress\";\n\nexport default Progress;\n","\"use client\";\n\nimport { forwardRef, memo, useMemo, useCallback } from \"react\";\nimport type { InputHTMLAttributes } from \"react\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getSwitchClasses } from \"../../tokens/switch\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\nexport type SwitchSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SwitchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"type\"> {\n size?: SwitchSize;\n label?: string;\n description?: string;\n error?: boolean;\n}\n\n/**\n * Switch Component\n *\n * A toggle switch component for on/off states.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Switch checked={isEnabled} onChange={(e) => setIsEnabled(e.target.checked)} />\n *\n * <Switch\n * label=\"Enable notifications\"\n * description=\"Receive email notifications\"\n * checked={notifications}\n * onChange={(e) => setNotifications(e.target.checked)}\n * />\n * ```\n */\nconst Switch = memo(\n forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n {\n size = \"md\",\n label,\n description,\n error = false,\n className = \"\",\n disabled = false,\n checked,\n onChange,\n id,\n ...props\n },\n ref,\n ) {\n // Memoize IDs\n const switchId = useMemo(\n () => id || `switch-${Math.random().toString(36).substr(2, 9)}`,\n [id],\n );\n\n const labelId = useMemo(\n () => (label ? `${switchId}-label` : undefined),\n [label, switchId],\n );\n\n const descriptionId = useMemo(\n () => (description ? `${switchId}-description` : undefined),\n [description, switchId],\n );\n\n // Component-scoped tokens (SWITCH_TOKENS) drive track/thumb/translate.\n const config = useMemo(() => getSwitchClasses(size), [size]);\n\n // Memoize focus ring color\n const focusRingColor = useMemo(\n () => \"focus:border-line-focus\".replace(\"focus:border-\", \"focus:ring-\"),\n [],\n );\n\n // Memoize classes\n const trackClasses = useMemo(\n () =>\n cn(\n \"relative\",\n \"inline-flex\",\n \"shrink-0\",\n \"cursor-pointer\",\n \"rounded-full\",\n \"border-2\",\n \"border-transparent\",\n getAnimationClass(\"base\"),\n \"focus:outline-none\",\n \"focus:ring-2\",\n focusRingColor,\n \"focus:ring-offset-2\",\n config.track,\n checked ? \"bg-surface-brand\" : \"bg-surface-muted\",\n error && !checked && \"border-error\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className,\n ),\n [focusRingColor, config.track, checked, error, disabled, className],\n );\n\n const thumbClasses = useMemo(\n () =>\n cn(\n \"pointer-events-none\",\n \"inline-block\",\n \"rounded-full\",\n \"bg-surface-base\",\n \"shadow\",\n \"transform\",\n getAnimationClass(\"base\"),\n config.thumb,\n checked ? config.translate : \"translate-x-0\",\n ),\n [config.thumb, config.translate, checked],\n );\n\n return (\n <div className={cn(\"flex\", \"items-start\", getSpacingClass(\"md\", \"gap\"))}>\n <div className=\"flex items-center\">\n <button\n type=\"button\"\n className={trackClasses}\n role=\"switch\"\n aria-checked={checked}\n aria-labelledby={labelId}\n aria-describedby={descriptionId}\n disabled={disabled}\n onClick={useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n if (!disabled && onChange) {\n const syntheticEvent = {\n ...e,\n target: { ...e.target, checked: !checked },\n currentTarget: { ...e.currentTarget, checked: !checked },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n },\n [disabled, onChange, checked],\n )}\n onKeyDown={useCallback(\n (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (\n (e.key === \"Enter\" || e.key === \" \") &&\n !disabled &&\n onChange\n ) {\n e.preventDefault();\n const syntheticEvent = {\n ...e,\n target: { ...e.target, checked: !checked },\n currentTarget: { ...e.currentTarget, checked: !checked },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n },\n [disabled, onChange, checked],\n )}\n >\n <span className={thumbClasses} />\n </button>\n <input\n ref={ref}\n type=\"checkbox\"\n id={switchId}\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n className=\"sr-only\"\n aria-hidden=\"true\"\n {...props}\n />\n </div>\n {(label || description) && (\n <div className=\"flex-1\">\n {label && (\n <label\n id={labelId}\n htmlFor={switchId}\n className={cn(\n \"block\",\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n error ? \"text-fg-error\" : \"text-fg-primary\",\n disabled ? \"opacity-50\" : \"cursor-pointer\",\n )}\n >\n {label}\n </label>\n )}\n {description && (\n <p\n id={descriptionId}\n className={cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographySize(\"bodySmall\"),\n error ? \"text-fg-error\" : \"text-fg-secondary\",\n )}\n >\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }),\n);\n\nSwitch.displayName = \"Switch\";\n\nexport default Switch;\n","\"use client\";\n\nimport { memo, useMemo } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type SeparatorOrientation = \"horizontal\" | \"vertical\";\nexport type SeparatorVariant = \"solid\" | \"dashed\" | \"dotted\";\n\nexport interface SeparatorProps extends HTMLAttributes<HTMLHRElement> {\n orientation?: SeparatorOrientation;\n variant?: SeparatorVariant;\n}\n\n/**\n * Separator Component\n *\n * A visual separator component for dividing content.\n * Follows Atomic Design principles as an Atom component.\n * Optimized with React.memo to prevent unnecessary re-renders.\n *\n * @example\n * ```tsx\n * <Separator />\n *\n * <Separator orientation=\"vertical\" variant=\"dashed\" />\n * ```\n */\nconst Separator = memo(function Separator({\n orientation = \"horizontal\",\n variant = \"solid\",\n className = \"\",\n ...props\n}: SeparatorProps) {\n const classes = useMemo(() => {\n const baseClasses = [\"border-0\", \"border-line-default\"];\n\n const orientationClasses = {\n horizontal: \"w-full border-t\",\n vertical: \"h-full border-l self-stretch\",\n };\n\n const variantClasses = {\n solid: \"border-solid\",\n dashed: \"border-dashed\",\n dotted: \"border-dotted\",\n };\n\n return cn(\n ...baseClasses,\n orientationClasses[orientation],\n variantClasses[variant],\n className,\n );\n }, [orientation, variant, className]);\n\n if (orientation === \"vertical\") {\n return (\n <div\n className={classes}\n role=\"separator\"\n aria-orientation=\"vertical\"\n {...(props as HTMLAttributes<HTMLDivElement>)}\n />\n );\n }\n\n return (\n <hr\n className={classes}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n {...props}\n />\n );\n});\n\nSeparator.displayName = \"Separator\";\n\nexport default Separator;\n","\"use client\";\n\nimport { useRef, useState, forwardRef } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type SliderVariant = \"single\" | \"range\";\nexport type SliderSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SliderProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\"> {\n value?: number | [number, number];\n defaultValue?: number | [number, number];\n min?: number;\n max?: number;\n step?: number;\n variant?: SliderVariant;\n size?: SliderSize;\n disabled?: boolean;\n showValue?: boolean;\n marks?: number[];\n onChange?: (value: number | [number, number]) => void;\n onValueChange?: (value: number | [number, number]) => void;\n label?: string;\n}\n\n/**\n * Slider Component\n *\n * A range input component for selecting numeric values.\n * Supports single and dual thumb (range) modes.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Slider\n * value={50}\n * min={0}\n * max={100}\n * onChange={(value) => console.log(value)}\n * />\n *\n * <Slider\n * variant=\"range\"\n * value={[20, 80]}\n * min={0}\n * max={100}\n * onChange={(value) => console.log(value)}\n * />\n * ```\n */\nconst Slider = forwardRef<HTMLDivElement, SliderProps>(function Slider(\n {\n value: controlledValue,\n defaultValue,\n min = 0,\n max = 100,\n step = 1,\n variant = \"single\",\n size = \"md\",\n disabled = false,\n showValue = false,\n marks = [],\n onChange,\n onValueChange,\n label,\n className = \"\",\n ...props\n },\n ref,\n) {\n const sliderRef = useRef<HTMLDivElement>(null);\n const [internalValue, setInternalValue] = useState<number | [number, number]>(\n defaultValue || (variant === \"range\" ? [min, max] : min),\n );\n const [isDragging, setIsDragging] = useState(false);\n const [activeThumb, setActiveThumb] = useState<\"min\" | \"max\" | null>(null);\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n const getPercentage = (val: number) => ((val - min) / (max - min)) * 100;\n\n const getValueFromPosition = (clientX: number): number => {\n if (!sliderRef.current) return min;\n const rect = sliderRef.current.getBoundingClientRect();\n const percentage = Math.max(\n 0,\n Math.min(1, (clientX - rect.left) / rect.width),\n );\n const rawValue = min + percentage * (max - min);\n return Math.round(rawValue / step) * step;\n };\n\n const handleMouseDown = (\n e: React.MouseEvent,\n thumb: \"min\" | \"max\" = \"min\",\n ) => {\n if (disabled) return;\n e.preventDefault();\n setIsDragging(true);\n setActiveThumb(thumb);\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n if (!sliderRef.current) return;\n const newValue = getValueFromPosition(moveEvent.clientX);\n updateValue(newValue, thumb);\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n setActiveThumb(null);\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n };\n\n const updateValue = (newValue: number, thumb: \"min\" | \"max\" = \"min\") => {\n const clampedValue = Math.max(min, Math.min(max, newValue));\n\n if (variant === \"range\") {\n const [minVal, maxVal] = Array.isArray(currentValue)\n ? currentValue\n : [min, max];\n let updatedValue: [number, number];\n\n if (thumb === \"min\") {\n updatedValue = [Math.min(clampedValue, maxVal), maxVal];\n } else {\n updatedValue = [minVal, Math.max(clampedValue, minVal)];\n }\n\n if (!isControlled) {\n setInternalValue(updatedValue);\n }\n onChange?.(updatedValue);\n onValueChange?.(updatedValue);\n } else {\n if (!isControlled) {\n setInternalValue(clampedValue);\n }\n onChange?.(clampedValue);\n onValueChange?.(clampedValue);\n }\n };\n\n const handleTrackClick = (e: React.MouseEvent) => {\n if (disabled || isDragging) return;\n const newValue = getValueFromPosition(e.clientX);\n updateValue(newValue);\n };\n\n // Get focus ring color using design system helper\n const getFocusRingColor = (): string => {\n return \"focus:ring-line-brand\" + \" ring-offset-2\";\n };\n\n // Slider variants using CVA\n const sliderTrackVariants = cva(cn(\"relative\", \"cursor-pointer\"), {\n variants: {\n size: {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n disabled: false,\n },\n });\n\n const sliderThumbVariants = cva(\n cn(\n \"absolute\",\n \"bg-surface-brand\",\n \"rounded-full\",\n \"border-2\",\n \"border-white\",\n \"shadow-md\",\n \"cursor-grab\",\n \"active:cursor-grabbing\",\n getAnimationClass(\"base\"),\n \"-translate-x-1/2\",\n \"-translate-y-1/2\",\n \"top-1/2\",\n ),\n {\n variants: {\n size: {\n sm: \"w-3 h-3\",\n md: \"w-4 h-4\",\n lg: \"w-5 h-5\",\n },\n active: {\n true: getFocusRingColor(),\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n active: false,\n },\n },\n );\n\n // Configuration for styling variants\n // const _config = {\n // track: sliderTrackVariants({ size, disabled }),\n // thumb: sliderThumbVariants({ size }),\n // };\n const singleValue =\n typeof currentValue === \"number\" ? currentValue : currentValue[0];\n const minValue = Array.isArray(currentValue) ? currentValue[0] : min;\n const maxValue = Array.isArray(currentValue) ? currentValue[1] : singleValue;\n\n const minPercentage = getPercentage(minValue);\n const maxPercentage = getPercentage(maxValue);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {label && (\n <label\n className={cn(\n \"block\",\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n getSpacingClass(\"sm\", \"mb\"),\n )}\n >\n {label}\n {showValue && (\n <span\n className={cn(getSpacingClass(\"sm\", \"ml\"), \"text-fg-secondary\")}\n >\n {variant === \"range\" ? `${minValue} - ${maxValue}` : singleValue}\n </span>\n )}\n </label>\n )}\n <div\n ref={sliderRef}\n className={cn(\n sliderTrackVariants({ size, disabled }),\n \"bg-surface-muted\",\n getRadiusClass(\"full\"),\n )}\n onClick={handleTrackClick}\n role={variant === \"range\" ? undefined : \"slider\"}\n aria-valuemin={variant === \"range\" ? undefined : min}\n aria-valuemax={variant === \"range\" ? undefined : max}\n aria-valuenow={variant === \"range\" ? undefined : singleValue}\n aria-disabled={variant === \"range\" ? undefined : disabled}\n aria-label={variant === \"range\" ? undefined : label}\n >\n {/* Active track */}\n <div\n className={cn(\n \"absolute\",\n sliderTrackVariants({ size }),\n \"bg-surface-brand\",\n getRadiusClass(\"full\"),\n getAnimationClass(\"base\"),\n )}\n style={{\n left: `${minPercentage}%`,\n width: `${maxPercentage - minPercentage}%`,\n }}\n />\n\n {/* Marks */}\n {marks.map((mark) => {\n const markPercentage = getPercentage(mark);\n return (\n <div\n key={mark}\n className={cn(\n \"absolute\",\n \"w-1\",\n \"h-1\",\n \"bg-line-strong\",\n getRadiusClass(\"full\"),\n \"-translate-x-1/2\",\n )}\n style={{\n left: `${markPercentage}%`,\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n }}\n />\n );\n })}\n\n {/* Thumbs */}\n {variant === \"range\" ? (\n <>\n <div\n className={cn(\n sliderThumbVariants({ size, active: activeThumb === \"min\" }),\n )}\n style={{ left: `${minPercentage}%` }}\n onMouseDown={(e) => handleMouseDown(e, \"min\")}\n role=\"slider\"\n aria-valuemin={min}\n aria-valuemax={maxValue}\n aria-valuenow={minValue}\n />\n <div\n className={cn(\n sliderThumbVariants({ size, active: activeThumb === \"max\" }),\n )}\n style={{ left: `${maxPercentage}%` }}\n onMouseDown={(e) => handleMouseDown(e, \"max\")}\n role=\"slider\"\n aria-valuemin={minValue}\n aria-valuemax={max}\n aria-valuenow={maxValue}\n />\n </>\n ) : (\n <div\n className={cn(sliderThumbVariants({ size, active: isDragging }))}\n style={{ left: `${maxPercentage}%` }}\n onMouseDown={(e) => handleMouseDown(e)}\n />\n )}\n\n {showValue && !label && (\n <div className=\"absolute -top-6 left-0 right-0 flex justify-center\">\n <span\n className={cn(\n getTypographySize(\"caption\"),\n \"text-fg-secondary\",\n \"bg-surface-overlay\",\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getRadiusClass(\"md\"),\n \"shadow\",\n )}\n >\n {variant === \"range\" ? `${minValue} - ${maxValue}` : singleValue}\n </span>\n </div>\n )}\n </div>\n </div>\n );\n});\n\nSlider.displayName = \"Slider\";\n\nexport default Slider;\n","\"use client\";\n\nimport { forwardRef, type ReactNode } from \"react\";\nimport { X } from \"lucide-react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type ChipVariant = \"default\" | \"outlined\" | \"filled\";\nexport type ChipSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ChipProps {\n children: ReactNode;\n variant?: ChipVariant;\n size?: ChipSize;\n onRemove?: () => void;\n selected?: boolean;\n disabled?: boolean;\n className?: string;\n \"aria-label\"?: string;\n onClick?: () => void;\n tabIndex?: number;\n}\n\n/**\n * Chip Component\n *\n * A chip/tag component for displaying labels, filters, or selected items.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Chip>Tag</Chip>\n * <Chip onRemove={() => console.log('removed')}>Removable</Chip>\n * ```\n */\n// Chip variants using CVA\nconst chipVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"font-medium\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"gap\"),\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"bg-surface-muted\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n outlined: cn(\n \"bg-transparent\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n filled: cn(\n \"bg-surface-brand\",\n \"text-fg-inverse\",\n \"border\",\n \"border-transparent\",\n ),\n },\n size: {\n sm: cn(\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n md: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n lg: cn(\n getSpacingClass(\"md\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n ),\n },\n selected: {\n true: cn(\n \"bg-surface-brand\",\n \"text-fg-inverse\",\n \"border\",\n \"border-line-brand\",\n ),\n false: \"\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n compoundVariants: [\n {\n selected: true,\n variant: \"default\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"outlined\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"filled\",\n class: \"\", // Override variant when selected\n },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n selected: false,\n disabled: false,\n },\n },\n);\n\nconst Chip = forwardRef<HTMLDivElement, ChipProps>(function Chip(\n {\n children,\n variant = \"default\",\n size = \"md\",\n onRemove,\n selected = false,\n disabled = false,\n className = \"\",\n \"aria-label\": ariaLabel,\n onClick,\n tabIndex,\n ...props\n },\n ref,\n) {\n // Determine if chip is interactive (has onClick or is explicitly selectable)\n const isInteractive =\n onClick !== undefined || (selected !== false && selected !== undefined);\n const role = selected ? \"option\" : isInteractive ? \"button\" : undefined;\n\n // Generate accessible label\n const getAccessibleLabel = (): string | undefined => {\n if (ariaLabel) return ariaLabel;\n if (typeof children === \"string\") return children;\n // For non-string children, try to extract text content\n if (\n typeof children === \"object\" &&\n children !== null &&\n \"props\" in children\n ) {\n const childProps = (children as { props?: { children?: unknown } }).props;\n if (childProps?.children && typeof childProps.children === \"string\") {\n return childProps.children;\n }\n }\n return undefined;\n };\n\n const accessibleLabel = getAccessibleLabel();\n const shouldHaveAriaLabel = role === \"button\" && !accessibleLabel;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (onClick) {\n onClick();\n }\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n chipVariants({ variant, size, selected, disabled }),\n onRemove && getSpacingClass(\"xs\", \"pr\"),\n isInteractive &&\n !disabled &&\n \"cursor-pointer focus:outline-none focus:ring-2 focus:ring-line-focus focus:ring-offset-2\",\n className,\n )}\n role={role}\n aria-selected={selected ? true : undefined}\n aria-disabled={disabled}\n aria-label={\n shouldHaveAriaLabel\n ? \"Chip\"\n : ariaLabel || (role === \"button\" ? accessibleLabel : undefined)\n }\n tabIndex={\n tabIndex !== undefined\n ? tabIndex\n : isInteractive && !disabled\n ? 0\n : undefined\n }\n onClick={disabled ? undefined : onClick}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <span>{children}</span>\n {onRemove && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n className={cn(\n getSpacingClass(\"xs\", \"ml\"),\n \"hover:bg-tint-hover\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"p\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-1\",\n )}\n aria-label={`Remove ${accessibleLabel || \"chip\"}`}\n >\n <X className=\"h-3 w-3\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n});\n\nChip.displayName = \"Chip\";\n\nexport default Chip;\n","\"use client\";\n\nimport {\n useState,\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface AvatarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n src?: string;\n alt?: string;\n fallback?: string | ReactNode;\n size?: AvatarSize;\n variant?: \"circle\" | \"square\" | \"rounded\";\n \"aria-label\"?: string;\n}\n\n/**\n * Avatar Component\n *\n * A versatile avatar component for displaying user profile images or initials.\n * Supports fallback display when image fails to load or is not provided.\n * Fully accessible with ARIA attributes.\n *\n * @example\n * ```tsx\n * // With image\n * <Avatar src=\"/user.jpg\" alt=\"John Doe\" />\n *\n * // With fallback initials\n * <Avatar fallback=\"JD\" alt=\"John Doe\" />\n *\n * // Custom size\n * <Avatar src=\"/user.jpg\" size=\"lg\" />\n * ```\n */\nconst Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n {\n src,\n alt,\n fallback,\n size = \"md\",\n variant = \"circle\",\n \"aria-label\": ariaLabel,\n className = \"\",\n ...props\n },\n ref,\n) {\n const [imageError, setImageError] = useState(false);\n const [imageLoaded, setImageLoaded] = useState(false);\n\n // Size and variant classes (not using cva to avoid type issues with dynamic classes)\n const sizeClasses: Record<AvatarSize, string> = {\n xs: \"h-6 w-6 text-xs\",\n sm: \"h-8 w-8 text-sm\",\n md: \"h-10 w-10 text-base\",\n lg: \"h-12 w-12 text-lg\",\n xl: \"h-16 w-16 text-xl\",\n };\n\n const variantClasses = {\n circle: \"rounded-full\",\n square: \"rounded-none\",\n rounded: \"rounded-md\",\n };\n\n const showFallback = !src || imageError;\n const displayFallback =\n typeof fallback === \"string\"\n ? fallback.toUpperCase().slice(0, 2)\n : fallback;\n\n const defaultAriaLabel = ariaLabel || alt || \"User avatar\";\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative\",\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n \"shrink-0\",\n \"font-medium\",\n \"overflow-hidden\",\n sizeClasses[size],\n variantClasses[variant],\n \"bg-surface-muted\",\n \"text-fg-primary\",\n className,\n )}\n role=\"img\"\n aria-label={defaultAriaLabel}\n {...props}\n >\n {!showFallback && src && (\n <img\n src={src}\n alt={alt || \"\"}\n className={cn(\n \"w-full\",\n \"h-full\",\n \"object-cover\",\n variant === \"circle\"\n ? \"rounded-full\"\n : variant === \"square\"\n ? \"rounded-none\"\n : \"rounded-md\",\n !imageLoaded ? \"opacity-0\" : \"opacity-100\",\n \"transition-opacity\",\n \"duration-200\",\n )}\n onLoad={() => setImageLoaded(true)}\n onError={() => {\n setImageError(true);\n setImageLoaded(false);\n }}\n aria-hidden=\"true\"\n />\n )}\n {showFallback && (\n <span\n className={cn(\n \"flex\",\n \"items-center\",\n \"justify-center\",\n \"w-full\",\n \"h-full\",\n variant === \"circle\"\n ? \"rounded-full\"\n : variant === \"square\"\n ? \"rounded-none\"\n : \"rounded-md\",\n )}\n aria-hidden=\"true\"\n >\n {displayFallback || \"?\"}\n </span>\n )}\n </div>\n );\n});\n\nAvatar.displayName = \"Avatar\";\n\nexport default Avatar;\n","\"use client\";\n\nimport {\n Children,\n type HTMLAttributes,\n type ReactNode,\n isValidElement,\n cloneElement,\n} from \"react\";\nimport { cn } from \"../../utils\";\nimport Avatar, { type AvatarProps } from \"./Avatar\";\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n max?: number; // Maximum number of avatars to show before collapsing\n size?: AvatarProps[\"size\"];\n variant?: AvatarProps[\"variant\"];\n spacing?: \"none\" | \"sm\" | \"md\" | \"lg\"; // Negative margin between avatares\n}\n\n/**\n * AvatarGroup Component\n *\n * Container for displaying multiple avatars in a group.\n * Supports collapsing when there are too many avatars.\n *\n * @example\n * ```tsx\n * <AvatarGroup max={3}>\n * <Avatar src=\"/user1.jpg\" alt=\"User 1\" />\n * <Avatar src=\"/user2.jpg\" alt=\"User 2\" />\n * <Avatar src=\"/user3.jpg\" alt=\"User 3\" />\n * <Avatar src=\"/user4.jpg\" alt=\"User 4\" />\n * </AvatarGroup>\n * ```\n */\nexport function AvatarGroup({\n children,\n max = 3,\n size = \"md\",\n variant = \"circle\",\n spacing = \"md\",\n className = \"\",\n ...props\n}: AvatarGroupProps) {\n const spacingClasses = {\n none: \"\",\n sm: \"-space-x-1\",\n md: \"-space-x-2\",\n lg: \"-space-x-3\",\n };\n\n // Convert children to array and filter out null/undefined\n const avatars = Children.toArray(children).filter(Boolean);\n const visibleAvatars = avatars.slice(0, max);\n const remainingCount = avatars.length - max;\n\n return (\n <div\n className={cn(\"flex\", \"items-center\", spacingClasses[spacing], className)}\n role=\"group\"\n aria-label={`${avatars.length} avatars`}\n {...props}\n >\n {visibleAvatars.map((avatar, index) => {\n // Clone avatar with consistent size and variant if needed\n let avatarElement = avatar;\n if (isValidElement(avatar) && avatar.type === Avatar) {\n const avatarProps = avatar.props as AvatarProps;\n avatarElement = cloneElement(\n avatar as React.ReactElement<AvatarProps>,\n {\n size: avatarProps.size || size,\n variant: avatarProps.variant || variant,\n },\n );\n }\n\n return (\n <div\n key={index}\n className=\"ring-2 ring-surface-base\"\n // micro-z: avatar stacking computed by position in group\n style={{ zIndex: avatars.length - index }}\n >\n {avatarElement}\n </div>\n );\n })}\n {remainingCount > 0 && (\n <Avatar\n size={size}\n variant={variant}\n fallback={`+${remainingCount}`}\n aria-label={`${remainingCount} more avatars`}\n className=\"ring-2 ring-surface-base\"\n // micro-z: avatar group fallback base layer\n style={{ zIndex: 0 }}\n />\n )}\n </div>\n );\n}\n"],"names":["Info","_a","_b","variant","className","props","__objRest","variantClasses","cn","jsx","__spreadValues","getSpacingClass","getRadiusClass","TEXT_COLOR_CLASSES","TextComponent","ref","bold","italic","as","color","colorRole","colorShade","rest","classNames","Tag","getTypographyClasses","Text","forwardRef","spinnerVariants","cva","Spinner","memo","size","label","jsxs","__spreadProps","Loader2","getTypographySize","buttonVariants","IconWrapper","children","position","Button","isLoading","loadingText","loadingIcon","leftIcon","rightIcon","fullWidth","Component","disabled","ariaLabel","classes","useMemo","isIconOnly","finalAriaLabel","spinnerVariant","spinnerSize","displayLoadingIcon","defaultType","buttonProps","Fragment","HelperText","error","success","helperText","errorId","helperId","helperClasses","text","Input","id","showClearButton","onClear","type","value","onChange","inputId","showPassword","setShowPassword","useState","isPassword","inputType","state","hasValue","shouldShowClear","primaryFocusRing","errorFocusRing","successFocusRing","getFocusRingColor","getStateFocusRingColor","useCallback","stateType","inputVariants","inputClasses","labelClasses","iconSize","iconPosition","handleClear","e","inputElement","syntheticEvent","handleTogglePassword","prev","X","EyeOff","Eye","useNavLink","_href","active","isActive","NextLink","nextLink","navLinkVariants","NavLink","href","onClick","onKeyDown","calculatedActive","LinkComponent","activeClasses","handleClick","handleKeyDown","linkProps","baseProps","badgeVariants","getTypographyWeight","Badge","style","accessibleLabel","childProps","Select","options","optionGroups","placeholder","selectId","selectVariants","selectState","selectClasses","group","groupIndex","option","Textarea","resize","focusRingColor","resizeClasses","ariaDescribedBy","Label","baseClasses","ErrorMessage","message","AlertCircle","Tooltip","content","delay","_ariaLabel","preservePositioning","isVisible","setIsVisible","timeoutIdRef","useRef","tooltipRef","triggerRef","tooltipId","handleMouseEnter","handleMouseLeave","handleFocus","handleBlur","useEffect","handleClickOutside","event","getArrowBorderColor","tooltipVariants","getZIndexClass","arrowVariants","getBorderWidthClass","childrenWithProps","isValidElement","childElement","existingProps","existingRef","cloneElement","node","wrapperClassName","Skeleton","width","height","lines","defaultAriaLabel","_","index","useCollapsible","defaultOpen","open","onOpenChange","storageKey","getInitialState","stored","internalOpen","setInternalOpen","isOpen","setOpen","newOpen","toggle","Collapsible","trigger","duration","contentRef","setHeight","resizeObserver","contentId","Checkbox","indeterminate","checkboxId","checkboxClasses","internalRef","setRef","element","Radio","radioId","radioClasses","progressTrackVariants","progressBarVariants","Progress","max","showLabel","isIndeterminate","percentage","Switch","description","checked","switchId","labelId","descriptionId","config","getSwitchClasses","trackClasses","getAnimationClass","thumbClasses","Separator","orientation","orientationClasses","Slider","controlledValue","defaultValue","min","step","showValue","marks","onValueChange","sliderRef","internalValue","setInternalValue","isDragging","setIsDragging","activeThumb","setActiveThumb","isControlled","currentValue","getPercentage","val","getValueFromPosition","clientX","rect","rawValue","handleMouseDown","thumb","handleMouseMove","moveEvent","newValue","updateValue","handleMouseUp","clampedValue","minVal","maxVal","updatedValue","handleTrackClick","sliderTrackVariants","sliderThumbVariants","singleValue","minValue","maxValue","minPercentage","maxPercentage","mark","markPercentage","chipVariants","Chip","onRemove","selected","tabIndex","isInteractive","role","shouldHaveAriaLabel","Avatar","src","alt","fallback","imageError","setImageError","imageLoaded","setImageLoaded","sizeClasses","showFallback","displayFallback","AvatarGroup","spacing","spacingClasses","avatars","Children","visibleAvatars","remainingCount","avatar","avatarElement","avatarProps"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../src/ui/primitives/Info/Info.tsx","../../src/ui/primitives/Text/Text.tsx","../../src/ui/primitives/Spinner/Spinner.tsx","../../src/ui/primitives/Button/Button.tsx","../../src/ui/primitives/Input/Input.tsx","../../src/ui/primitives/NavLink/hooks/useNavLink.ts","../../src/ui/primitives/NavLink/NavLink.tsx","../../src/ui/primitives/Badge/Badge.tsx","../../src/ui/primitives/Select/Select.tsx","../../src/ui/primitives/Textarea/Textarea.tsx","../../src/ui/primitives/Label/Label.tsx","../../src/ui/primitives/ErrorMessage/ErrorMessage.tsx","../../src/ui/primitives/Tooltip/Tooltip.tsx","../../src/ui/primitives/Skeleton/Skeleton.tsx","../../src/ui/hooks/useCollapsible.ts","../../src/ui/primitives/Collapsible/Collapsible.tsx","../../src/ui/primitives/Checkbox/Checkbox.tsx","../../src/ui/primitives/Radio/Radio.tsx","../../src/ui/primitives/Progress/Progress.tsx","../../src/ui/primitives/Switch/Switch.tsx","../../src/ui/primitives/Separator/Separator.tsx","../../src/ui/primitives/Slider/Slider.tsx","../../src/ui/primitives/Chip/Chip.tsx","../../src/ui/primitives/Avatar/Avatar.tsx","../../src/ui/primitives/Avatar/AvatarGroup.tsx"],"sourcesContent":["import type { HTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface InfoProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"info\" | \"warning\" | \"error\";\n}\n\nexport default function Info({\n variant = \"info\",\n className,\n ...props\n}: InfoProps) {\n const variantClasses = {\n warning: cn(\"bg-warning-bg\", \"text-warning-dark\", \"border-warning\"),\n error: cn(\"bg-error-bg\", \"text-error-dark\", \"border-error\"),\n info: cn(\"bg-info-bg\", \"text-info-dark\", \"border-info\"),\n };\n\n return (\n <div\n role=\"alert\"\n className={cn(\n \"border\",\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getRadiusClass(\"lg\"),\n variantClasses[variant],\n className,\n )}\n {...props}\n />\n );\n}\n","import type {\n ComponentPropsWithoutRef,\n ElementType,\n HTMLAttributes,\n JSX,\n} from \"react\";\nimport { forwardRef } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\ntype TextColorRole =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"neutral\";\ntype TextColorShade = \"light\" | \"DEFAULT\" | \"dark\" | \"contrast\";\n\n// Lookup table: literal Tailwind classes so v4 can detect them at build.\n// Brand/feedback DEFAULT cells use semantic tokens; light/dark cells stay\n// primitive (no semantic equivalent for shade variants). Neutral cells\n// use the Phase 7 semantic suggestions (text-fg-{primary,secondary,...}).\nconst TEXT_COLOR_CLASSES: Record<\n TextColorRole,\n Record<TextColorShade, string>\n> = {\n primary: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-indigo-400\",\n DEFAULT: \"text-fg-brand\",\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n dark: \"text-indigo-600\",\n contrast: \"text-fg-inverse\",\n },\n secondary: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-pink-300\",\n DEFAULT: \"text-fg-brand-secondary\",\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n dark: \"text-pink-600\",\n contrast: \"text-fg-inverse\",\n },\n success: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-green-300\",\n DEFAULT: \"text-fg-success\",\n dark: \"text-success-dark\",\n contrast: \"text-fg-inverse\",\n },\n warning: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-yellow-300\",\n DEFAULT: \"text-fg-warning\",\n dark: \"text-warning-dark\",\n contrast: \"text-fg-inverse\",\n },\n error: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-red-300\",\n DEFAULT: \"text-fg-error\",\n dark: \"text-error-dark\",\n contrast: \"text-fg-inverse\",\n },\n info: {\n // exception: variant color — no semantic equivalent (Principle 3, .claude/rules/colors.md)\n light: \"text-blue-300\",\n DEFAULT: \"text-fg-info\",\n dark: \"text-info-dark\",\n contrast: \"text-fg-inverse\",\n },\n neutral: {\n light: \"text-fg-tertiary\",\n DEFAULT: \"text-fg-secondary\",\n dark: \"text-fg-primary\",\n contrast: \"text-fg-inverse\",\n },\n};\n\ninterface Props<T extends ElementType>\n extends HTMLAttributes<JSX.IntrinsicElements> {\n variant?:\n | \"heading\"\n | \"list\"\n | \"paragraph\"\n | \"body\"\n | \"bodySmall\"\n | \"bodyLarge\"\n | \"caption\"\n | \"label\";\n as?: T;\n bold?: boolean;\n italic?: boolean;\n color?: string;\n colorRole?: TextColorRole;\n colorShade?: TextColorShade;\n}\n\ntype ReturnProps<P extends ElementType> = Props<P> &\n Omit<ComponentPropsWithoutRef<P>, keyof Props<P>>;\n\nfunction TextComponent<T extends ElementType = \"p\">(\n {\n variant = \"paragraph\",\n bold,\n italic,\n className,\n as,\n color,\n colorRole = \"neutral\",\n colorShade = \"dark\",\n ...rest\n }: ReturnProps<T>,\n ref: React.Ref<unknown>,\n) {\n const classNames: string[] = [];\n let Tag: ElementType;\n\n if (as) {\n Tag = as;\n } else {\n switch (variant) {\n case \"heading\":\n Tag = \"h2\";\n break;\n case \"list\":\n Tag = \"li\";\n break;\n case \"paragraph\":\n default:\n Tag = \"p\";\n break;\n }\n }\n\n // Apply typography tokens based on variant\n if (variant === \"heading\") {\n classNames.push(getTypographyClasses(\"h2\"));\n } else if (variant === \"body\" || variant === \"paragraph\") {\n classNames.push(getTypographyClasses(\"body\"));\n } else if (variant === \"bodySmall\") {\n classNames.push(getTypographyClasses(\"bodySmall\"));\n } else if (variant === \"bodyLarge\") {\n classNames.push(getTypographyClasses(\"bodyLarge\"));\n } else if (variant === \"caption\") {\n classNames.push(getTypographyClasses(\"caption\"));\n } else if (variant === \"label\") {\n classNames.push(getTypographyClasses(\"label\"));\n } else {\n // Default to body for list and other variants\n classNames.push(getTypographyClasses(\"body\"));\n }\n\n // Override font weight if bold is specified\n if (bold) {\n classNames.push(\"font-bold\");\n }\n\n if (italic) {\n classNames.push(\"italic\");\n }\n\n // Apply color via lookup table. `color` prop is accepted for API\n // back-compat but Tailwind v4 can't generate dynamic `text-${color}`\n // classes, so it has no visual effect — colorRole/colorShade are\n // the supported channel.\n void color;\n classNames.push(TEXT_COLOR_CLASSES[colorRole][colorShade]);\n\n return <Tag ref={ref} className={cn(...classNames, className)} {...rest} />;\n}\n\n// Use forwardRef with proper typing for polymorphic component\nconst Text = forwardRef(TextComponent) as <T extends ElementType = \"p\">(\n props: ReturnProps<T> & { ref?: React.Ref<HTMLElement> },\n) => JSX.Element;\n\nexport default Text;\n","\"use client\";\n\nimport { memo } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { Loader2 } from \"lucide-react\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type SpinnerSize = \"sm\" | \"md\" | \"lg\";\nexport type SpinnerVariant = \"primary\" | \"secondary\" | \"neutral\";\n\nexport interface SpinnerProps extends HTMLAttributes<HTMLDivElement> {\n size?: SpinnerSize;\n variant?: SpinnerVariant;\n label?: string;\n}\n\n/**\n * Spinner Component\n *\n * A loading spinner component for indicating loading states.\n * Follows Atomic Design principles as an Atom component.\n * Uses Strategy Pattern for different size/variant combinations.\n *\n * @example\n * ```tsx\n * <Spinner size=\"md\" variant=\"primary\" label=\"Loading...\" />\n * ```\n */\n// Spinner variants using CVA\nconst spinnerVariants = cva(\"motion-safe:animate-spin\", {\n variants: {\n size: {\n sm: \"h-4 w-4\",\n md: \"h-5 w-5\",\n lg: \"h-8 w-8\",\n },\n variant: {\n primary: \"text-fg-brand\",\n secondary: \"text-fg-brand-secondary\",\n neutral: \"text-fg-secondary\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"primary\",\n },\n});\n\nconst Spinner = memo(function Spinner({\n size = \"md\",\n variant = \"primary\",\n label,\n className = \"\",\n ...props\n}: SpinnerProps) {\n return (\n <div\n className={cn(\"inline-flex\", \"items-center\", className)}\n role=\"status\"\n aria-label={label || \"Loading\"}\n aria-live=\"polite\"\n {...props}\n >\n <Loader2\n className={cn(spinnerVariants({ size, variant }))}\n aria-hidden=\"true\"\n />\n {label && (\n <span\n className={cn(\n getSpacingClass(\"sm\", \"ml\"),\n getTypographySize(\"bodySmall\"),\n \"text-fg-secondary\",\n \"sr-only\",\n )}\n >\n {label}\n </span>\n )}\n </div>\n );\n});\n\nSpinner.displayName = \"Spinner\";\n\nexport default Spinner;\n","import { forwardRef, memo, useMemo } from \"react\";\nimport type { ButtonHTMLAttributes, ReactNode, ElementType } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographyClasses,\n getTypographySize,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\nimport Spinner from \"../Spinner/Spinner\";\n\nexport type ButtonVariant =\n | \"primary\"\n | \"secondary\"\n | \"error\"\n | \"outline\"\n | \"ghost\"\n | \"iconOnly\";\nexport type ButtonSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ButtonProps\n extends Omit<ButtonHTMLAttributes<HTMLButtonElement>, \"as\"> {\n variant?: ButtonVariant;\n size?: ButtonSize;\n isLoading?: boolean;\n loadingText?: string;\n loadingIcon?: ReactNode;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n fullWidth?: boolean;\n as?: ElementType;\n href?: string;\n target?: string;\n}\n\n/**\n * Button Variants using CVA\n * Type-safe variant system for Button component\n */\nconst buttonVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n getTypographyClasses(\"button\").split(\" \")[2] || \"font-medium\", // Extract font-medium\n getRadiusClass(\"md\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n ),\n {\n variants: {\n variant: {\n primary: cn(\n \"bg-surface-brand\",\n \"text-fg-inverse\",\n \"hover:opacity-90\",\n \"focus:ring-line-brand\",\n ),\n secondary: cn(\n \"bg-surface-secondary\",\n \"text-fg-inverse\",\n \"hover:opacity-90\",\n \"focus:ring-line-secondary\",\n ),\n error: cn(\n \"bg-error\",\n \"text-fg-inverse\",\n \"hover:opacity-90\",\n \"focus:ring-error\",\n ),\n outline: cn(\n \"border-2\",\n \"border-line-default\",\n \"bg-transparent\",\n \"text-fg-primary\",\n \"hover:bg-surface-hover\",\n \"focus:ring-line-focus\",\n ),\n ghost: cn(\n \"bg-transparent\",\n \"text-fg-primary\",\n \"hover:bg-surface-hover\",\n \"focus:ring-line-focus\",\n ),\n iconOnly: cn(\n \"bg-transparent\",\n \"text-fg-primary\",\n \"hover:bg-surface-hover\",\n \"focus:ring-line-focus\",\n \"p-0\",\n ),\n },\n size: {\n sm: cn(\n getSpacingClass(\"md\", \"px\"),\n getSpacingClass(\"1.5\", \"py\"),\n getTypographySize(\"bodySmall\"),\n getSpacingClass(\"1.5\", \"gap\"),\n ),\n md: cn(\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n getSpacingClass(\"sm\", \"gap\"),\n ),\n lg: cn(\n getSpacingClass(\"lg\", \"px\"),\n getSpacingClass(\"md\", \"py\"),\n getTypographySize(\"bodyLarge\"),\n getSpacingClass(\"2.5\", \"gap\"),\n ),\n },\n },\n compoundVariants: [\n // IconOnly variant has different sizing\n {\n variant: \"iconOnly\",\n size: \"sm\",\n class: cn(\"h-8\", \"w-8\", \"p-0\"),\n },\n {\n variant: \"iconOnly\",\n size: \"md\",\n class: cn(\"h-10\", \"w-10\", \"p-0\"),\n },\n {\n variant: \"iconOnly\",\n size: \"lg\",\n class: cn(\"h-12\", \"w-12\", \"p-0\"),\n },\n ],\n defaultVariants: {\n variant: \"primary\",\n size: \"md\",\n },\n },\n);\n\n/**\n * Icon Wrapper Component\n * Handles icon spacing and alignment consistently\n */\nfunction IconWrapper({\n children,\n position,\n}: {\n children: ReactNode;\n position: \"left\" | \"right\";\n}) {\n if (!children) return null;\n\n return (\n <span\n className={`inline-flex items-center ${position === \"left\" ? \"mr-0\" : \"ml-0\"}`}\n >\n {children}\n </span>\n );\n}\n\n/**\n * Button Component\n *\n * A styled button component with variants, sizes, and loading states.\n * Follows Atomic Design principles as an Atom component.\n * Uses Builder Pattern for class construction.\n * Supports polymorphic `as` prop for rendering as different elements (Link, NextLink, etc.).\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Button variant=\"primary\" size=\"md\" onClick={handleClick}>\n * Click me\n * </Button>\n *\n * // With icons\n * <Button leftIcon={<Icon />} rightIcon={<Icon />}>\n * Action\n * </Button>\n *\n * // Loading state\n * <Button isLoading loadingText=\"Saving...\">\n * Save\n * </Button>\n *\n * // As Link\n * <Button as={Link} href=\"/page\">\n * Navigate\n * </Button>\n *\n * // Icon only\n * <Button variant=\"iconOnly\" leftIcon={<Icon />} aria-label=\"Close\" />\n * ```\n */\nconst Button = memo(\n forwardRef<HTMLButtonElement, ButtonProps>(function Button(\n {\n variant = \"primary\",\n size = \"md\",\n isLoading = false,\n loadingText,\n loadingIcon,\n leftIcon,\n rightIcon,\n fullWidth = false,\n as: Component = \"button\",\n className = \"\",\n disabled = false,\n children,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) {\n // Memoize classes computation\n const classes = useMemo(\n () =>\n cn(\n buttonVariants({\n variant,\n size,\n }),\n fullWidth && \"w-full\",\n className,\n ),\n [variant, size, fullWidth, className],\n );\n\n // Memoize icon-only check\n const isIconOnly = useMemo(\n () => variant === \"iconOnly\" || (!children && (leftIcon || rightIcon)),\n [variant, children, leftIcon, rightIcon],\n );\n\n // Memoize aria label\n const finalAriaLabel = useMemo(\n () =>\n isIconOnly && !ariaLabel && !children\n ? \"Button\" // Fallback, but should be provided\n : ariaLabel,\n [isIconOnly, ariaLabel, children],\n );\n\n // Memoize spinner variant computation\n const spinnerVariant = useMemo((): \"primary\" | \"secondary\" | \"neutral\" => {\n if (variant === \"error\") return \"primary\"; // Red buttons use primary spinner (white)\n if (variant === \"primary\" || variant === \"secondary\") return \"neutral\"; // Colored buttons use neutral spinner\n return \"primary\"; // Default\n }, [variant]);\n\n // Memoize spinner size\n const spinnerSize = useMemo(\n () => (size === \"sm\" ? \"sm\" : size === \"lg\" ? \"lg\" : \"md\"),\n [size],\n );\n\n // Memoize loading icon\n const displayLoadingIcon = useMemo(\n () =>\n loadingIcon || <Spinner size={spinnerSize} variant={spinnerVariant} />,\n [loadingIcon, spinnerSize, spinnerVariant],\n );\n\n // Build button props (spread props at the end to allow overrides)\n // If type is explicitly provided in props, use it; otherwise default to 'button' for button elements\n const defaultType =\n Component === \"button\" && !props.type ? \"button\" : undefined;\n const buttonProps = {\n className: classes,\n disabled: disabled || isLoading,\n \"aria-busy\": isLoading,\n \"aria-label\": finalAriaLabel,\n \"aria-disabled\": disabled || isLoading,\n ...(defaultType ? { type: defaultType } : {}),\n ...props,\n };\n\n return (\n <Component ref={ref} {...buttonProps}>\n {isLoading ? (\n <>\n {displayLoadingIcon}\n {loadingText && <span className=\"ml-2\">{loadingText}</span>}\n {!loadingText && children && (\n <span className=\"ml-2 opacity-0\">{children}</span>\n )}\n </>\n ) : (\n <>\n {leftIcon && <IconWrapper position=\"left\">{leftIcon}</IconWrapper>}\n {children}\n {rightIcon && (\n <IconWrapper position=\"right\">{rightIcon}</IconWrapper>\n )}\n </>\n )}\n </Component>\n );\n }),\n);\n\nButton.displayName = \"Button\";\n\nexport default Button;\nexport { Button };\n","\"use client\";\n\nimport { forwardRef, useState, memo, useMemo, useCallback } from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport {\n getTypographyClasses,\n getTypographySize,\n} from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn, cva } from \"../../utils\";\nimport { X, Eye, EyeOff } from \"lucide-react\";\nimport Button from \"../Button/Button\";\n\n/**\n * Helper Text Component\n * Memoized component for helper/error text\n */\nconst HelperText = memo(function HelperText({\n error,\n success,\n helperText,\n errorId,\n helperId,\n}: {\n error: boolean;\n success: boolean;\n helperText?: string;\n errorId?: string;\n helperId?: string;\n}) {\n const helperClasses = useMemo(\n () =>\n cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographyClasses(\"caption\"),\n error && \"text-fg-error\",\n success && \"text-fg-success\",\n !error && !success && \"text-fg-secondary\",\n ),\n [error, success],\n );\n\n const text = useMemo(\n () => helperText || (error ? \"Error\" : success ? \"Success\" : \"\"),\n [helperText, error, success],\n );\n\n return (\n <div\n id={errorId || helperId}\n className={helperClasses}\n role={error || success ? \"alert\" : undefined}\n >\n {text}\n </div>\n );\n});\n\nexport type InputSize = \"sm\" | \"md\" | \"lg\";\nexport type InputVariant = \"default\" | \"outlined\" | \"filled\";\nexport type InputState = \"default\" | \"error\" | \"success\";\n\nexport interface InputProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\"> {\n label?: ReactNode;\n error?: boolean;\n success?: boolean;\n helperText?: string;\n size?: InputSize;\n variant?: InputVariant;\n leftIcon?: ReactNode;\n rightIcon?: ReactNode;\n showClearButton?: boolean;\n onClear?: () => void;\n}\n\n/**\n * Input Component\n *\n * A styled text input component with label, error/success states, icons, and clear button.\n * Follows Atomic Design principles as an Atom component.\n * Uses Composite Pattern when combined with Label and ErrorMessage.\n *\n * @example\n * ```tsx\n * <Input\n * id=\"email\"\n * label=\"Email\"\n * type=\"email\"\n * placeholder=\"Enter your email\"\n * error={hasError}\n * helperText={errorMessage}\n * leftIcon={<MailIcon />}\n * />\n * ```\n */\nconst Input = memo(\n forwardRef<HTMLInputElement, InputProps>(function Input(\n {\n id,\n label,\n error = false,\n success = false,\n helperText,\n size = \"md\",\n variant = \"outlined\",\n leftIcon,\n rightIcon,\n showClearButton = false,\n onClear,\n className = \"\",\n disabled = false,\n type = \"text\",\n value,\n onChange,\n ...props\n },\n ref,\n ) {\n // Memoize input ID\n const inputId = useMemo(\n () => id || `input-${Math.random().toString(36).substr(2, 9)}`,\n [id],\n );\n\n // Memoize error and helper IDs\n const errorId = useMemo(\n () => (error ? `${inputId}-error` : undefined),\n [error, inputId],\n );\n\n const helperId = useMemo(\n () => (helperText ? `${inputId}-helper` : undefined),\n [helperText, inputId],\n );\n\n // Password toggle state\n const [showPassword, setShowPassword] = useState(false);\n\n // Memoize password-related values\n const isPassword = useMemo(() => type === \"password\", [type]);\n const inputType = useMemo(\n () => (isPassword && showPassword ? \"text\" : type),\n [isPassword, showPassword, type],\n );\n\n // Memoize state\n const state = useMemo<InputState>(\n () => (error ? \"error\" : success ? \"success\" : \"default\"),\n [error, success],\n );\n\n // Memoize clear button visibility\n const hasValue = useMemo(\n () => value !== undefined && value !== null && value !== \"\",\n [value],\n );\n\n const shouldShowClear = useMemo(\n () => showClearButton && hasValue && !disabled,\n [showClearButton, hasValue, disabled],\n );\n\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const successFocusRing = useMemo(() => \"focus:border-success\", []);\n\n const getFocusRingColor = useMemo(\n () => primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\"),\n [primaryFocusRing],\n );\n\n const getStateFocusRingColor = useCallback(\n (stateType: \"error\" | \"success\"): string => {\n return stateType === \"error\"\n ? errorFocusRing.replace(\"focus:border-\", \"focus:ring-\")\n : successFocusRing.replace(\"focus:border-\", \"focus:ring-\");\n },\n [errorFocusRing, successFocusRing],\n );\n\n // Input variants using CVA\n const inputVariants = cva(\n // Base classes\n cn(\n \"w-full\",\n getRadiusClass(\"md\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"border-0\",\n \"border-b-2\",\n \"border-line-default\",\n \"focus:border-line-focus\",\n ),\n outlined: cn(\n \"border\",\n \"border-line-default\",\n \"focus:border-line-focus\",\n ),\n filled: cn(\n \"bg-surface-muted\",\n \"border-0\",\n \"focus:bg-surface-base\",\n \"focus:ring-2\",\n getFocusRingColor,\n ),\n },\n size: {\n sm: cn(\n \"h-8\",\n getTypographySize(\"bodySmall\"),\n getSpacingClass(\"md\", \"px\"),\n ),\n md: cn(\n \"h-10\",\n getTypographySize(\"body\"),\n getSpacingClass(\"base\", \"px\"),\n ),\n lg: cn(\n \"h-12\",\n getTypographySize(\"bodyLarge\"),\n getSpacingClass(\"lg\", \"px\"),\n ),\n },\n state: {\n default: \"\",\n error: cn(\n \"border-error\",\n \"focus:border-error\",\n getStateFocusRingColor(\"error\"),\n ),\n success: cn(\n \"border-success\",\n \"focus:border-success\",\n getStateFocusRingColor(\"success\"),\n ),\n },\n },\n defaultVariants: {\n variant: \"outlined\",\n size: \"md\",\n state: \"default\",\n },\n },\n );\n\n // Memoize input classes\n const inputClasses = useMemo(\n () =>\n cn(\n inputVariants({ variant, size, state }),\n // Icon padding - specific values for icon positioning\n leftIcon &&\n (size === \"sm\" ? \"pl-9\" : size === \"lg\" ? \"pl-12\" : \"pl-10\"),\n (rightIcon || shouldShowClear || isPassword) &&\n (size === \"sm\" ? \"pr-9\" : size === \"lg\" ? \"pr-12\" : \"pr-10\"),\n className,\n ),\n [\n variant,\n size,\n state,\n leftIcon,\n rightIcon,\n shouldShowClear,\n isPassword,\n className,\n ],\n );\n\n // Memoize label classes\n const labelClasses = useMemo(\n () =>\n cn(\n \"block\",\n getTypographyClasses(\"label\"),\n getSpacingClass(\"xs\", \"mb\"),\n disabled && \"opacity-50\",\n ),\n [disabled],\n );\n\n // Memoize icon size and position\n const iconSize = useMemo(\n () => (size === \"sm\" ? \"h-4 w-4\" : size === \"lg\" ? \"h-5 w-5\" : \"h-4 w-4\"),\n [size],\n );\n\n const iconPosition = useMemo(\n () => (size === \"sm\" ? \"top-2\" : size === \"lg\" ? \"top-3.5\" : \"top-2.5\"),\n [size],\n );\n\n // Memoize clear handler\n const handleClear = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n if (onClear) {\n onClear();\n } else if (onChange) {\n // Create synthetic event to clear input\n const inputElement = e.currentTarget\n .closest(\".relative\")\n ?.querySelector(\"input\") as HTMLInputElement;\n if (inputElement) {\n const syntheticEvent = {\n target: inputElement,\n currentTarget: inputElement,\n bubbles: true,\n cancelable: true,\n defaultPrevented: false,\n eventPhase: 2,\n isTrusted: false,\n nativeEvent: new Event(\"change\"),\n preventDefault: () => {},\n stopPropagation: () => {},\n persist: () => {},\n timeStamp: Date.now(),\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n Object.defineProperty(syntheticEvent.target, \"value\", {\n value: \"\",\n writable: true,\n });\n Object.defineProperty(syntheticEvent.currentTarget, \"value\", {\n value: \"\",\n writable: true,\n });\n onChange(syntheticEvent);\n }\n }\n },\n [onClear, onChange],\n );\n\n // Memoize password toggle handler\n const handleTogglePassword = useCallback(() => {\n setShowPassword((prev) => !prev);\n }, []);\n\n return (\n <div className=\"w-full\">\n {label && (\n <label htmlFor={inputId} className={labelClasses}>\n {label}\n </label>\n )}\n <div className=\"relative\">\n {leftIcon && (\n <div\n className={`absolute left-3 ${iconPosition} text-fg-secondary opacity-60 pointer-events-none`}\n >\n <div className={iconSize}>{leftIcon}</div>\n </div>\n )}\n <input\n id={inputId}\n ref={ref}\n type={inputType}\n className={inputClasses}\n disabled={disabled}\n value={value}\n onChange={onChange}\n aria-invalid={error}\n aria-required={props.required}\n aria-describedby={errorId || helperId}\n suppressHydrationWarning\n {...props}\n />\n <div className=\"absolute right-3 top-0 bottom-0 flex items-center gap-1\">\n {shouldShowClear && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleClear}\n className=\"h-auto p-1\"\n aria-label=\"Clear input\"\n >\n <X className={iconSize} />\n </Button>\n )}\n {isPassword && (\n <Button\n variant=\"ghost\"\n size=\"sm\"\n onClick={handleTogglePassword}\n className=\"h-auto p-1\"\n aria-label={showPassword ? \"Hide password\" : \"Show password\"}\n >\n {showPassword ? (\n <EyeOff className={iconSize} />\n ) : (\n <Eye className={iconSize} />\n )}\n </Button>\n )}\n {rightIcon && !shouldShowClear && !isPassword && (\n <div\n className={`text-fg-secondary opacity-60 pointer-events-none ${iconSize}`}\n >\n {rightIcon}\n </div>\n )}\n </div>\n </div>\n {(error || success || helperText) && (\n <HelperText\n error={error}\n success={success}\n helperText={helperText}\n errorId={errorId}\n helperId={helperId}\n />\n )}\n </div>\n );\n }),\n);\n\nInput.displayName = \"Input\";\n\nexport default Input;\n","/**\n * useNavLink Hook\n *\n * Custom hook for NavLink active state detection and Next.js integration.\n *\n * @see RFC-001: NavLink Hook Strategy (APPROVED - Hybrid approach)\n * @see RFC-002: Next.js Integration Strategy (APPROVED - Auto-detect)\n * @see ADR-001: Active State Detection (ACCEPTED - Hybrid strategy)\n */\n\n\"use client\";\n\nimport { useMemo } from \"react\";\n\n/**\n * useNavLink Hook Options\n */\nexport interface UseNavLinkOptions {\n /**\n * URL of the navigation link\n */\n href: string;\n\n /**\n * Manual active state (has priority over auto-detect)\n *\n * Priority: manual active > auto-detect > false\n * @see ADR-001\n */\n active?: boolean;\n}\n\n/**\n * useNavLink Hook Result\n */\nexport interface UseNavLinkResult {\n /**\n * Whether the link is active\n */\n isActive: boolean;\n\n /**\n * Next.js Link component (if available)\n */\n NextLink?: React.ComponentType<{\n href: string;\n children?: React.ReactNode;\n [key: string]: unknown;\n }>;\n}\n\n/**\n * useNavLink Hook\n *\n * Detects active state and provides Next.js Link integration.\n *\n * @param options - Hook options\n * @returns Hook result with active state and Next.js Link\n *\n * @example\n * ```tsx\n * const { isActive, NextLink } = useNavLink({ href: '/home' });\n *\n * const LinkComponent = NextLink || 'a';\n *\n * return (\n * <LinkComponent href={href} className={isActive ? 'active' : ''}>\n * {children}\n * </LinkComponent>\n * );\n * ```\n */\nexport function useNavLink({\n href: _href,\n active,\n}: UseNavLinkOptions): UseNavLinkResult {\n // Active state detection (ADR-001 ACCEPTED)\n // Priority: manual active > auto-detect (usePathname) > false\n const isActive = useMemo(() => {\n // Manual active prop has priority\n if (active !== undefined) {\n return active;\n }\n\n // TODO: Auto-detect using usePathname (if Next.js available)\n // This needs to be handled in the component since we can't conditionally call hooks\n // The component will call usePathname if available and pass pathname to this hook\n // For now, default to false\n return false;\n }, [active]);\n\n // Auto-detect Next.js Link component (RFC-002 APPROVED)\n const NextLink = useMemo(() => {\n try {\n // Dynamic require for Next.js Link (RFC-002 APPROVED)\n // This is safe because we're in a try-catch and only for optional dependency\n // @ts-expect-error - require is available at runtime but not in TypeScript types\n const nextLink =\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n typeof require !== \"undefined\" ? require(\"next/link\") : null;\n return (\n nextLink as {\n default?: React.ComponentType<{\n href: string;\n children?: React.ReactNode;\n className?: string;\n [key: string]: unknown;\n }>;\n } | null\n )?.default;\n } catch {\n // Next.js not available - this is expected and safe\n return undefined;\n }\n }, []);\n\n return {\n isActive,\n NextLink,\n };\n}\n","\"use client\";\n\n/**\n * NavLink Component\n *\n * Navigation link component with active state detection and Next.js integration.\n *\n * @see EPIC-001: NavLink Component (Atom)\n * @see RFC-001: NavLink Hook Strategy (APPROVED)\n * @see RFC-002: Next.js Integration Strategy (APPROVED)\n * @see ADR-001: Active State Detection (ACCEPTED)\n */\n\nimport React, { useMemo, useCallback } from \"react\";\nimport type { NavLinkProps } from \"./types\";\nimport { useNavLink } from \"./hooks/useNavLink\";\nimport { cn, cva } from \"../../utils\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\n\n/**\n * NavLink Variants using CVA\n * Type-safe variant system for NavLink component\n */\nconst navLinkVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n \"disabled:pointer-events-none\",\n \"no-underline\",\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"text-fg-primary\",\n \"hover:opacity-80\",\n \"focus-visible:opacity-100\",\n \"focus:ring-line-brand\",\n ),\n underline: cn(\n \"text-fg-primary\",\n \"hover:opacity-80\",\n \"focus-visible:opacity-100\",\n \"border-b-2\",\n \"border-transparent\",\n \"hover:border-current\",\n \"focus:ring-line-brand\",\n ),\n background: cn(\n \"text-fg-primary\",\n \"hover:bg-surface-hover\",\n \"rounded-md\",\n getRadiusClass(\"md\"),\n \"focus:ring-line-brand\",\n ),\n },\n size: {\n sm: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n md: cn(\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n ),\n lg: cn(\n getSpacingClass(\"lg\", \"px\"),\n getSpacingClass(\"md\", \"py\"),\n getTypographySize(\"bodyLarge\"),\n ),\n },\n },\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n },\n compoundVariants: [\n {\n variant: \"underline\",\n size: \"sm\",\n class: getSpacingClass(\"0.5\", \"pb\"),\n },\n {\n variant: \"underline\",\n size: \"md\",\n class: getSpacingClass(\"xs\", \"pb\"),\n },\n {\n variant: \"underline\",\n size: \"lg\",\n class: getSpacingClass(\"1.5\", \"pb\"),\n },\n {\n variant: \"background\",\n size: \"sm\",\n class: getSpacingClass(\"xs\", \"px\"),\n },\n {\n variant: \"background\",\n size: \"md\",\n class: getSpacingClass(\"sm\", \"px\"),\n },\n {\n variant: \"background\",\n size: \"lg\",\n class: getSpacingClass(\"base\", \"px\"),\n },\n ],\n },\n);\n\n/**\n * NavLink Component\n *\n * Navigation link with active state detection and Next.js integration.\n *\n * @example\n * ```tsx\n * <NavLink href=\"/home\">Home</NavLink>\n * <NavLink href=\"/about\" variant=\"underline\" active>About</NavLink>\n * <NavLink href=\"/contact\" variant=\"background\" size=\"lg\">Contact</NavLink>\n * ```\n *\n * Note: Auto-detection of active state via usePathname is deferred to a future enhancement\n * to avoid issues with conditional hook calls. For now, use the `active` prop manually\n * or implement pathname detection in the parent component.\n */\nexport function NavLink({\n href,\n children,\n active,\n disabled = false,\n variant = \"default\",\n size = \"md\",\n as,\n className,\n \"aria-label\": ariaLabel,\n onClick,\n onKeyDown,\n ...props\n}: NavLinkProps) {\n // Calculate active state\n // Priority: manual active > false (ADR-001)\n // TODO: Add auto-detect via usePathname in future enhancement\n // This requires a wrapper component pattern to avoid conditional hook calls\n const calculatedActive = useMemo(() => {\n // Manual active prop has priority (ADR-001)\n if (active !== undefined) {\n return active;\n }\n\n // Default to false\n // TODO: Auto-detect using usePathname (if Next.js available)\n return false;\n }, [active]);\n\n // Use hook for Next.js Link integration\n const { NextLink } = useNavLink({ href, active: calculatedActive });\n\n // Determine Link component\n // Priority: as prop > NextLink (auto-detected) > 'a' (RFC-002)\n const LinkComponent: React.ElementType = as || NextLink || \"a\";\n\n // Active state classes\n const activeClasses = useMemo(() => {\n if (!calculatedActive) return \"\";\n\n switch (variant) {\n case \"underline\":\n return cn(\"border-b-2\", \"border-line-brand\", \"text-fg-brand-emphasis\");\n case \"background\":\n return cn(\"bg-surface-brand-muted\", \"text-fg-brand-emphasis\");\n case \"default\":\n default:\n return cn(\"text-fg-brand-emphasis\", \"font-semibold\");\n }\n }, [calculatedActive, variant]);\n\n // Handle disabled state\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLAnchorElement>) => {\n if (disabled) {\n e.preventDefault();\n e.stopPropagation();\n return;\n }\n onClick?.(e);\n },\n [disabled, onClick],\n );\n\n // Handle keyboard navigation\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent<HTMLAnchorElement>) => {\n if (disabled) {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n e.stopPropagation();\n }\n return;\n }\n onKeyDown?.(e);\n },\n [disabled, onKeyDown],\n );\n\n // Prepare props for LinkComponent\n // Next.js Link has different prop structure, so we need to handle it\n const linkProps = useMemo(() => {\n const baseProps = {\n className: cn(\n navLinkVariants({ variant, size }),\n activeClasses,\n disabled && \"opacity-50 cursor-not-allowed pointer-events-none\",\n className,\n ),\n \"aria-current\": calculatedActive ? \"page\" : undefined,\n \"aria-disabled\": disabled ? true : undefined,\n \"aria-label\": ariaLabel,\n tabIndex: disabled ? -1 : undefined,\n onClick: handleClick,\n onKeyDown: handleKeyDown,\n \"data-active\": calculatedActive,\n \"data-disabled\": disabled,\n ...props,\n };\n\n // For Next.js Link, we need to pass href differently\n if (NextLink && !as) {\n return {\n ...baseProps,\n href: disabled ? undefined : href,\n };\n }\n\n // For regular anchor or custom component\n return {\n ...baseProps,\n href: disabled ? undefined : href,\n };\n }, [\n variant,\n size,\n activeClasses,\n disabled,\n className,\n calculatedActive,\n ariaLabel,\n handleClick,\n handleKeyDown,\n href,\n NextLink,\n as,\n props,\n ]);\n\n return <LinkComponent {...linkProps}>{children}</LinkComponent>;\n}\n\nexport default NavLink;\n","\"use client\";\n\nimport { memo, forwardRef, useMemo } from \"react\";\nimport type { HTMLAttributes, ReactNode } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type BadgeVariant =\n | \"success\"\n | \"warning\"\n | \"error\"\n | \"info\"\n | \"neutral\"\n | \"primary\"\n | \"secondary\";\nexport type BadgeSize = \"sm\" | \"md\" | \"lg\";\nexport type BadgeStyle = \"solid\" | \"outline\";\n\nexport interface BadgeProps\n extends Omit<HTMLAttributes<HTMLSpanElement>, \"style\"> {\n variant?: BadgeVariant;\n size?: BadgeSize;\n style?: BadgeStyle;\n children: ReactNode;\n \"aria-label\"?: string;\n}\n\n/**\n * Badge Component\n *\n * A versatile badge component for displaying status, priority, and other labels.\n * Follows Atomic Design principles as an Atom component.\n * Uses tokens for consistent theming.\n *\n * @example\n * ```tsx\n * <Badge variant=\"success\">Active</Badge>\n * <Badge variant=\"error\" size=\"lg\">Critical</Badge>\n * <Badge variant=\"info\" style=\"outline\">New</Badge>\n * ```\n */\n// Badge variants using CVA\nconst badgeVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n getTypographyWeight(\"label\"),\n getRadiusClass(\"md\"),\n \"border\",\n ),\n {\n variants: {\n variant: {\n success: \"\",\n warning: \"\",\n error: \"\",\n info: \"\",\n neutral: \"\",\n primary: \"\",\n secondary: \"\",\n },\n size: {\n sm: cn(\n getSpacingClass(\"1.5\", \"px\"),\n getSpacingClass(\"0.5\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n md: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n lg: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n },\n style: {\n solid: \"\",\n outline: \"\",\n },\n },\n compoundVariants: [\n // Solid style variants\n {\n variant: \"success\",\n style: \"solid\",\n class: cn(\"bg-success-bg\", \"text-success-dark\", \"border-success\"),\n },\n {\n variant: \"warning\",\n style: \"solid\",\n class: cn(\"bg-warning-bg\", \"text-warning-dark\", \"border-warning\"),\n },\n {\n variant: \"error\",\n style: \"solid\",\n class: cn(\"bg-error-bg\", \"text-error-dark\", \"border-error\"),\n },\n {\n variant: \"info\",\n style: \"solid\",\n class: cn(\"bg-info-bg\", \"text-info-dark\", \"border-info\"),\n },\n {\n variant: \"neutral\",\n style: \"solid\",\n class: cn(\"bg-surface-muted\", \"text-fg-primary\", \"border-line-default\"),\n },\n {\n variant: \"primary\",\n style: \"solid\",\n class: cn(\n \"bg-surface-brand\",\n \"text-fg-brand-emphasis\",\n \"border-line-brand\",\n ),\n },\n {\n variant: \"secondary\",\n style: \"solid\",\n // bg-pink-300: secondary solid badge — no semantic equivalent\n // (would shift 2 shades to bg-surface-secondary). Kept literal until\n // secondary brand surface palette expands beyond DEFAULT.\n class: cn(\n \"bg-pink-300\",\n \"text-fg-brand-secondary-emphasis\",\n \"border-line-secondary\",\n ),\n },\n // Outline style variants\n {\n variant: \"success\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-success\", \"text-fg-success\"),\n },\n {\n variant: \"warning\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-warning\", \"text-fg-warning\"),\n },\n {\n variant: \"error\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-error\", \"text-fg-error\"),\n },\n {\n variant: \"info\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-info\", \"text-fg-info\"),\n },\n {\n variant: \"neutral\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-line-default\", \"text-fg-secondary\"),\n },\n {\n variant: \"primary\",\n style: \"outline\",\n class: cn(\"bg-transparent\", \"border-line-brand\", \"text-fg-brand\"),\n },\n {\n variant: \"secondary\",\n style: \"outline\",\n class: cn(\n \"bg-transparent\",\n \"border-line-secondary\",\n \"text-fg-brand-secondary\",\n ),\n },\n ],\n defaultVariants: {\n variant: \"neutral\",\n size: \"md\",\n style: \"solid\",\n },\n },\n);\n\nconst Badge = memo(\n forwardRef<HTMLSpanElement, BadgeProps>(function Badge(\n {\n variant = \"neutral\",\n size = \"md\",\n style = \"solid\",\n className = \"\",\n children,\n \"aria-label\": ariaLabel,\n ...props\n },\n ref,\n ) {\n // Memoize classes\n const classes = useMemo(\n () => cn(badgeVariants({ variant, size, style }), className),\n [variant, size, style, className],\n );\n\n // Memoize accessible label\n const accessibleLabel = useMemo(() => {\n if (ariaLabel) return ariaLabel;\n if (typeof children === \"string\") return children;\n // Try to extract text from ReactNode\n if (typeof children === \"object\" && children !== null) {\n if (\"props\" in children) {\n const childProps = (children as { props?: { children?: unknown } })\n .props;\n if (childProps?.children && typeof childProps.children === \"string\") {\n return childProps.children;\n }\n }\n }\n return undefined;\n }, [ariaLabel, children]);\n\n return (\n <span\n ref={ref}\n role=\"status\"\n aria-label={accessibleLabel}\n className={classes}\n {...props}\n >\n {children}\n </span>\n );\n }),\n);\n\nBadge.displayName = \"Badge\";\n\nexport default Badge;\n","\"use client\";\n\nimport { forwardRef, memo, useMemo, useCallback } from \"react\";\nimport type { SelectHTMLAttributes, ReactNode } from \"react\";\nimport {\n getTypographyClasses,\n getTypographySize,\n} from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn, cva } from \"../../utils\";\n\n/**\n * Helper Text Component\n * Memoized component for helper/error text\n */\nconst HelperText = memo(function HelperText({\n error,\n success,\n helperText,\n errorId,\n helperId,\n}: {\n error: boolean;\n success: boolean;\n helperText?: string;\n errorId?: string;\n helperId?: string;\n}) {\n const helperClasses = useMemo(\n () =>\n cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographyClasses(\"caption\"),\n error && \"text-fg-error\",\n success && \"text-fg-success\",\n !error && !success && \"text-fg-secondary\",\n ),\n [error, success],\n );\n\n const text = useMemo(\n () => helperText || (error ? \"Error\" : success ? \"Success\" : \"\"),\n [helperText, error, success],\n );\n\n return (\n <div\n id={errorId || helperId}\n className={helperClasses}\n role={error || success ? \"alert\" : undefined}\n >\n {text}\n </div>\n );\n});\n\nexport type SelectSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\nexport interface SelectOptionGroup {\n label: string;\n options: SelectOption[];\n}\n\nexport interface SelectProps\n extends Omit<SelectHTMLAttributes<HTMLSelectElement>, \"children\" | \"size\"> {\n options: SelectOption[];\n optionGroups?: SelectOptionGroup[];\n placeholder?: string;\n label?: ReactNode;\n error?: boolean;\n success?: boolean;\n helperText?: string;\n size?: SelectSize;\n}\n\n/**\n * Select Component\n *\n * A styled select dropdown component for forms.\n * Follows Atomic Design principles as an Atom component.\n * Supports both flat options and option groups.\n *\n * @example\n * ```tsx\n * <Select\n * label=\"Choose option\"\n * options={[\n * { value: \"1\", label: \"Option 1\" },\n * { value: \"2\", label: \"Option 2\" }\n * ]}\n * placeholder=\"Select an option\"\n * />\n * ```\n */\nconst Select = memo(\n forwardRef<HTMLSelectElement, SelectProps>(function Select(\n {\n options = [],\n optionGroups,\n placeholder,\n label,\n error = false,\n success = false,\n helperText,\n size = \"md\",\n className = \"\",\n disabled = false,\n id,\n ...props\n },\n ref,\n ) {\n // Memoize IDs\n const selectId = useMemo(\n () => id || `select-${Math.random().toString(36).substr(2, 9)}`,\n [id],\n );\n\n const errorId = useMemo(\n () => (error ? `${selectId}-error` : undefined),\n [error, selectId],\n );\n\n const helperId = useMemo(\n () => (helperText ? `${selectId}-helper` : undefined),\n [helperText, selectId],\n );\n\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const successFocusRing = useMemo(() => \"focus:border-success\", []);\n\n // Memoize focus ring color function\n const getFocusRingColor = useCallback(\n (stateType?: \"error\" | \"success\"): string => {\n if (stateType === \"error\") {\n return errorFocusRing.replace(\"focus:border-\", \"focus:ring-\");\n }\n if (stateType === \"success\") {\n return successFocusRing.replace(\"focus:border-\", \"focus:ring-\");\n }\n return primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\");\n },\n [errorFocusRing, successFocusRing, primaryFocusRing],\n );\n\n // Select variants using CVA\n const selectVariants = cva(\n // Base classes\n cn(\n \"block\",\n \"w-full\",\n getRadiusClass(\"md\"),\n \"border\",\n \"bg-surface-base\",\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n ),\n {\n variants: {\n size: {\n sm: cn(\n \"h-8\",\n getTypographySize(\"bodySmall\"),\n getSpacingClass(\"md\", \"px\"),\n ),\n md: cn(\n \"h-10\",\n getTypographySize(\"body\"),\n getSpacingClass(\"base\", \"px\"),\n ),\n lg: cn(\n \"h-12\",\n getTypographySize(\"bodyLarge\"),\n getSpacingClass(\"lg\", \"px\"),\n ),\n },\n state: {\n default: cn(\"border-line-default\", getFocusRingColor()),\n error: cn(\"border-error\", getFocusRingColor(\"error\")),\n success: cn(\"border-success\", getFocusRingColor(\"success\")),\n },\n },\n defaultVariants: {\n size: \"md\",\n state: \"default\",\n },\n },\n );\n\n // Memoize state\n const selectState = useMemo(\n () => (error ? \"error\" : success ? \"success\" : \"default\"),\n [error, success],\n );\n\n // Memoize classes\n const selectClasses = useMemo(\n () => cn(selectVariants({ size, state: selectState }), className),\n [size, selectState, className],\n );\n\n const labelClasses = useMemo(\n () =>\n cn(\n \"block\",\n getTypographyClasses(\"label\"),\n getSpacingClass(\"xs\", \"mb\"),\n disabled && \"opacity-50\",\n ),\n [disabled],\n );\n\n return (\n <div className=\"w-full\">\n {label && (\n <label htmlFor={selectId} className={labelClasses}>\n {label}\n </label>\n )}\n <select\n id={selectId}\n ref={ref}\n className={selectClasses}\n disabled={disabled}\n aria-invalid={error}\n aria-required={props.required}\n aria-describedby={errorId || helperId}\n {...props}\n >\n {placeholder && (\n <option value=\"\" disabled>\n {placeholder}\n </option>\n )}\n {optionGroups && optionGroups.length > 0\n ? optionGroups.map((group, groupIndex) => (\n <optgroup key={groupIndex} label={group.label}>\n {(group.options || []).map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </optgroup>\n ))\n : (options || []).map((option) => (\n <option\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n {option.label}\n </option>\n ))}\n </select>\n {(error || success || helperText) && (\n <HelperText\n error={error}\n success={success}\n helperText={helperText}\n errorId={errorId}\n helperId={helperId}\n />\n )}\n </div>\n );\n }),\n);\n\nSelect.displayName = \"Select\";\n\nexport default Select;\n","import { forwardRef, memo, useMemo } from \"react\";\nimport type { TextareaHTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\ninterface Props extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n error?: boolean;\n resize?: \"none\" | \"both\" | \"horizontal\" | \"vertical\";\n}\n\n/**\n * Textarea Component\n *\n * A styled textarea component for longer text input.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Textarea\n * placeholder=\"Enter description...\"\n * rows={4}\n * />\n * ```\n */\nconst Textarea = memo(\n forwardRef<HTMLTextAreaElement, Props>(function Textarea(\n { error = false, resize = \"vertical\", className = \"\", ...props },\n ref,\n ) {\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const focusRingColor = useMemo(\n () =>\n error\n ? errorFocusRing.replace(\"focus:border-\", \"focus:ring-\")\n : primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\"),\n [error, errorFocusRing, primaryFocusRing],\n );\n\n // Memoize resize classes\n const resizeClasses = useMemo<Record<NonNullable<Props[\"resize\"]>, string>>(\n () => ({\n none: \"resize-none\",\n both: \"resize\",\n horizontal: \"resize-x\",\n vertical: \"resize-y\",\n }),\n [],\n );\n\n // Memoize classes\n const classes = useMemo(\n () =>\n cn(\n \"block\",\n \"w-full\",\n getRadiusClass(\"md\"),\n getSpacingClass(\"base\", \"px\"),\n getSpacingClass(\"md\", \"py\"),\n \"border\",\n getTypographySize(\"body\"),\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-offset-2\",\n resizeClasses[resize],\n error\n ? cn(\"border-error\", focusRingColor)\n : cn(\"border-line-default\", focusRingColor),\n className,\n ),\n [resize, resizeClasses, error, focusRingColor, className],\n );\n\n // Memoize aria-describedby\n const ariaDescribedBy = useMemo(\n () => (error && props.id ? `${props.id}-error` : undefined),\n [error, props.id],\n );\n\n return (\n <textarea\n ref={ref}\n className={classes}\n aria-invalid={error}\n aria-describedby={ariaDescribedBy}\n {...props}\n />\n );\n }),\n);\n\nTextarea.displayName = \"Textarea\";\n\nexport default Textarea;\n","import type { LabelHTMLAttributes } from \"react\";\nimport { forwardRef, memo, useMemo } from \"react\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\ninterface Props extends LabelHTMLAttributes<HTMLLabelElement> {\n variant?: \"default\" | \"required\" | \"optional\";\n children: React.ReactNode;\n}\n\n/**\n * Label Component\n *\n * A styled label component for form inputs.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Label htmlFor=\"email\" variant=\"required\">\n * Email Address\n * </Label>\n * ```\n */\nconst Label = memo(\n forwardRef<HTMLLabelElement, Props>(function Label(\n { variant = \"default\", className = \"\", children, ...props },\n ref,\n ) {\n // Memoize base classes\n const baseClasses = useMemo(\n () =>\n cn(\n \"block\",\n getTypographySize(\"label\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n ),\n [],\n );\n\n // Memoize variant classes\n const variantClasses = useMemo<\n Record<NonNullable<Props[\"variant\"]>, string>\n >(\n () => ({\n default: \"\",\n required: cn(\n \"after:content-['*']\",\n `after:${getSpacingClass(\"0.5\", \"ml\")}`,\n \"after:text-fg-error\",\n ),\n optional: cn(\n \"after:content-['(optional)']\",\n \"after:ml-1\", // xs spacing = 1 (4px) - note: test expects ml-1, not ml-0.5\n \"after:text-fg-tertiary\",\n \"after:font-normal\",\n ),\n }),\n [],\n );\n\n // Memoize final classes\n const classes = useMemo(\n () => cn(baseClasses, variantClasses[variant], className),\n [baseClasses, variantClasses, variant, className],\n );\n\n return (\n <label ref={ref} className={classes} {...props}>\n {children}\n </label>\n );\n }),\n);\n\nLabel.displayName = \"Label\";\n\nexport default Label;\n","import type { HTMLAttributes } from \"react\";\nimport { AlertCircle } from \"lucide-react\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\ninterface Props extends HTMLAttributes<HTMLDivElement> {\n message: string;\n id?: string;\n}\n\n/**\n * ErrorMessage Component\n *\n * A component for displaying validation error messages.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <ErrorMessage message=\"This field is required\" id=\"email-error\" />\n * ```\n */\nexport default function ErrorMessage({\n message,\n id,\n className = \"\",\n ...props\n}: Props) {\n const baseClasses = [\n getSpacingClass(\"xs\", \"mt\"),\n getTypographySize(\"bodySmall\"),\n \"text-fg-error\",\n \"flex\",\n \"items-center\",\n getSpacingClass(\"xs\", \"gap\"),\n ];\n\n const classes = cn(...baseClasses, className);\n\n return (\n <div role=\"alert\" id={id} className={classes} aria-live=\"polite\" {...props}>\n <AlertCircle className=\"h-4 w-4 shrink-0\" aria-hidden=\"true\" />\n <span>{message}</span>\n </div>\n );\n}\n","\"use client\";\n\nimport type {\n HTMLAttributes,\n ReactNode,\n KeyboardEvent,\n FocusEvent,\n ReactElement,\n} from \"react\";\nimport {\n useState,\n useRef,\n useEffect,\n cloneElement,\n isValidElement,\n} from \"react\";\nimport { getBorderWidthClass } from \"../../tokens/borders\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { getZIndexClass } from \"../../tokens/z-index\";\nimport { cn, cva } from \"../../utils\";\n\nexport interface TooltipProps extends HTMLAttributes<HTMLDivElement> {\n content: string;\n children: ReactNode;\n position?: \"top\" | \"bottom\" | \"left\" | \"right\";\n delay?: number;\n \"aria-label\"?: string;\n /**\n * When true, the tooltip wrapper won't interfere with absolute positioning of children.\n * The wrapper will use `position: static` instead of `position: relative`.\n */\n preservePositioning?: boolean;\n}\n\n/**\n * Tooltip Component\n *\n * A tooltip component for displaying additional information on hover.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Tooltip content=\"This is a tooltip\">\n * <Button>Hover me</Button>\n * </Tooltip>\n * ```\n */\nexport default function Tooltip({\n content,\n children,\n position = \"top\",\n delay = 200,\n className = \"\",\n \"aria-label\": _ariaLabel,\n preservePositioning = false,\n ...props\n}: TooltipProps) {\n const [isVisible, setIsVisible] = useState(false);\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const tooltipRef = useRef<HTMLDivElement>(null);\n const triggerRef = useRef<HTMLElement | null>(null);\n\n // Generate unique ID for tooltip\n const tooltipId = `tooltip-${Math.random().toString(36).substr(2, 9)}`;\n\n const handleMouseEnter = () => {\n const id = setTimeout(() => {\n setIsVisible(true);\n }, delay);\n timeoutIdRef.current = id;\n };\n\n const handleMouseLeave = () => {\n if (timeoutIdRef.current) {\n clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = null;\n }\n setIsVisible(false);\n };\n\n const handleFocus = () => {\n // Show tooltip immediately on focus (no delay for keyboard users)\n setIsVisible(true);\n };\n\n const handleBlur = () => {\n setIsVisible(false);\n };\n\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n setIsVisible(false);\n triggerRef.current?.blur();\n }\n };\n\n // Cleanup timeout on unmount\n useEffect(() => {\n return () => {\n if (timeoutIdRef.current) {\n clearTimeout(timeoutIdRef.current);\n timeoutIdRef.current = null;\n }\n };\n }, []);\n\n // Close tooltip when clicking outside\n useEffect(() => {\n if (!isVisible) return;\n\n const handleClickOutside = (event: MouseEvent) => {\n if (\n tooltipRef.current &&\n !tooltipRef.current.contains(event.target as Node) &&\n triggerRef.current &&\n !triggerRef.current.contains(event.target as Node)\n ) {\n setIsVisible(false);\n }\n };\n\n document.addEventListener(\"mousedown\", handleClickOutside);\n return () => {\n document.removeEventListener(\"mousedown\", handleClickOutside);\n };\n }, [isVisible]);\n\n // Helper to get arrow border color\n // Uses complete classes that Tailwind can detect\n const getArrowBorderColor = (\n position: \"top\" | \"bottom\" | \"left\" | \"right\",\n ): string => {\n // Arrow follows the tooltip body's surface-inverse color so the\n // triangle's point visually merges into the body.\n const borderMap: Record<\"top\" | \"bottom\" | \"left\" | \"right\", string> = {\n top: \"border-t-surface-inverse\",\n bottom: \"border-b-surface-inverse\",\n left: \"border-l-surface-inverse\",\n right: \"border-r-surface-inverse\",\n };\n return borderMap[position];\n };\n\n // Tooltip variants using CVA\n const tooltipVariants = cva(\n cn(\n \"absolute\",\n getZIndexClass(\"tooltip\"),\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n \"text-fg-inverse\",\n \"bg-surface-inverse\",\n getRadiusClass(\"md\"),\n \"shadow-lg\",\n \"whitespace-nowrap\",\n ),\n {\n variants: {\n position: {\n top: cn(\n \"bottom-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getSpacingClass(\"sm\", \"mb\"),\n ),\n bottom: cn(\n \"top-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getSpacingClass(\"sm\", \"mt\"),\n ),\n left: cn(\n \"right-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getSpacingClass(\"sm\", \"mr\"),\n ),\n right: cn(\n \"left-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getSpacingClass(\"sm\", \"ml\"),\n ),\n },\n },\n defaultVariants: {\n position: \"top\",\n },\n },\n );\n\n const arrowVariants = cva(\n cn(\n \"absolute\",\n \"w-0\",\n \"h-0\",\n getBorderWidthClass(\"thick\"),\n \"border-transparent\",\n ),\n {\n variants: {\n position: {\n top: cn(\n \"top-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getArrowBorderColor(\"top\"),\n ),\n bottom: cn(\n \"bottom-full\",\n \"left-1/2\",\n \"transform\",\n \"-translate-x-1/2\",\n getArrowBorderColor(\"bottom\"),\n ),\n left: cn(\n \"left-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getArrowBorderColor(\"left\"),\n ),\n right: cn(\n \"right-full\",\n \"top-1/2\",\n \"transform\",\n \"-translate-y-1/2\",\n getArrowBorderColor(\"right\"),\n ),\n },\n },\n defaultVariants: {\n position: \"top\",\n },\n },\n );\n\n // Clone children to add accessibility props\n const childrenWithProps = isValidElement(children)\n ? (() => {\n const childElement = children as ReactElement<\n HTMLAttributes<HTMLElement> & { ref?: React.Ref<HTMLElement> }\n >;\n const existingProps = childElement.props;\n const existingRef = existingProps.ref;\n\n return cloneElement(childElement, {\n ref: (node: HTMLElement | null) => {\n triggerRef.current = node;\n // Preserve existing ref if any\n if (typeof existingRef === \"function\") {\n existingRef(node);\n } else if (\n existingRef &&\n typeof existingRef === \"object\" &&\n \"current\" in existingRef\n ) {\n (\n existingRef as React.MutableRefObject<HTMLElement | null>\n ).current = node;\n }\n },\n \"aria-describedby\": isVisible\n ? tooltipId\n : existingProps[\"aria-describedby\"],\n onMouseEnter: (e: React.MouseEvent<HTMLElement>) => {\n handleMouseEnter();\n existingProps.onMouseEnter?.(e);\n },\n onMouseLeave: (e: React.MouseEvent<HTMLElement>) => {\n handleMouseLeave();\n existingProps.onMouseLeave?.(e);\n },\n onFocus: (e: FocusEvent<HTMLElement>) => {\n handleFocus();\n existingProps.onFocus?.(e);\n },\n onBlur: (e: FocusEvent<HTMLElement>) => {\n handleBlur();\n existingProps.onBlur?.(e);\n },\n onKeyDown: (e: KeyboardEvent<HTMLElement>) => {\n handleKeyDown(e);\n existingProps.onKeyDown?.(e);\n },\n } as Partial<typeof existingProps>);\n })()\n : children;\n\n // When preservePositioning is true, use static positioning to avoid interfering\n // with absolute positioned children. The tooltip will still be positioned correctly\n // using absolute positioning relative to the viewport/nearest positioned ancestor.\n const wrapperClassName = preservePositioning\n ? cn(\"static\", \"inline-block\", className)\n : cn(\"relative\", \"inline-block\", className);\n\n return (\n <div className={wrapperClassName} {...props}>\n {childrenWithProps}\n {isVisible && (\n <div\n ref={tooltipRef}\n id={tooltipId}\n className={cn(tooltipVariants({ position }))}\n role=\"tooltip\"\n aria-live=\"polite\"\n >\n {content}\n <div className={cn(arrowVariants({ position }))} aria-hidden=\"true\" />\n </div>\n )}\n </div>\n );\n}\n","import type { HTMLAttributes } from \"react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface SkeletonProps extends HTMLAttributes<HTMLDivElement> {\n variant?: \"text\" | \"card\" | \"list\" | \"circle\";\n width?: string;\n height?: string;\n lines?: number;\n}\n\n/**\n * Skeleton Component\n *\n * A skeleton loader component for displaying loading states.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Skeleton variant=\"card\" />\n * <Skeleton variant=\"text\" lines={3} />\n * ```\n */\nexport default function Skeleton({\n variant = \"text\",\n width,\n height,\n lines = 1,\n className = \"\",\n \"aria-label\": ariaLabel,\n ...props\n}: SkeletonProps) {\n const baseClasses = [\n \"motion-safe:animate-pulse\",\n \"bg-surface-muted\",\n getRadiusClass(\"sm\"),\n ];\n\n const variantClasses: Record<\n NonNullable<SkeletonProps[\"variant\"]>,\n string\n > = {\n text: \"h-4\",\n card: \"h-32\",\n list: \"h-12\",\n circle: \"rounded-full\",\n };\n\n const classes = cn(...baseClasses, variantClasses[variant], className);\n\n const style: React.CSSProperties = {};\n if (width) style.width = width;\n if (height) style.height = height;\n\n const defaultAriaLabel = ariaLabel || `Loading ${variant} content`;\n\n if (variant === \"text\" && lines > 1) {\n return (\n <div\n className={getSpacingClass(\"sm\", \"space-y\")}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={defaultAriaLabel}\n {...props}\n >\n {Array.from({ length: lines }).map((_, index) => (\n <div\n key={index}\n className={classes}\n style={index === lines - 1 ? { width: \"75%\" } : style}\n aria-hidden=\"true\"\n />\n ))}\n </div>\n );\n }\n\n return (\n <div\n className={classes}\n style={style}\n role=\"status\"\n aria-busy=\"true\"\n aria-label={defaultAriaLabel}\n {...props}\n />\n );\n}\n","\"use client\";\n\nimport { useState, useEffect, useCallback } from \"react\";\n\nexport interface UseCollapsibleOptions {\n defaultOpen?: boolean;\n open?: boolean; // Controlled mode\n onOpenChange?: (open: boolean) => void;\n storageKey?: string; // For localStorage persistence\n}\n\nexport interface UseCollapsibleReturn {\n isOpen: boolean;\n toggle: () => void;\n setOpen: (open: boolean) => void;\n}\n\n/**\n * useCollapsible Hook\n *\n * Reusable hook for collapsible component logic.\n * Supports both controlled and uncontrolled modes.\n * Optional localStorage persistence.\n *\n * @example\n * ```tsx\n * const { isOpen, toggle } = useCollapsible({\n * defaultOpen: true,\n * storageKey: 'my-collapsible-state'\n * });\n * ```\n */\nexport function useCollapsible({\n defaultOpen = true,\n open,\n onOpenChange,\n storageKey,\n}: UseCollapsibleOptions): UseCollapsibleReturn {\n // Load initial state from localStorage if storageKey is provided\n const getInitialState = useCallback((): boolean => {\n if (storageKey && typeof window !== \"undefined\") {\n const stored = localStorage.getItem(storageKey);\n if (stored !== null) {\n return stored === \"true\";\n }\n }\n return defaultOpen;\n }, [defaultOpen, storageKey]);\n\n const [internalOpen, setInternalOpen] = useState<boolean>(getInitialState);\n\n // Use controlled state if provided, otherwise use internal state\n const isOpen = open !== undefined ? open : internalOpen;\n\n // Persist to localStorage when state changes\n useEffect(() => {\n if (storageKey && typeof window !== \"undefined\" && open === undefined) {\n localStorage.setItem(storageKey, String(internalOpen));\n }\n }, [internalOpen, storageKey, open]);\n\n const setOpen = useCallback(\n (newOpen: boolean) => {\n if (open === undefined) {\n // Uncontrolled mode\n setInternalOpen(newOpen);\n }\n // In controlled mode, parent handles state\n onOpenChange?.(newOpen);\n },\n [open, onOpenChange],\n );\n\n const toggle = useCallback(() => {\n setOpen(!isOpen);\n }, [isOpen, setOpen]);\n\n return {\n isOpen,\n toggle,\n setOpen,\n };\n}\n","\"use client\";\n\nimport {\n useEffect,\n useRef,\n useState,\n type HTMLAttributes,\n type ReactNode,\n type KeyboardEvent,\n} from \"react\";\nimport {\n useCollapsible,\n type UseCollapsibleOptions,\n} from \"../../hooks/useCollapsible\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { cn } from \"../../utils\";\n\nexport interface CollapsibleProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\"> {\n children: ReactNode;\n trigger: ReactNode; // Content for the toggle button\n defaultOpen?: boolean;\n open?: boolean; // Controlled mode\n onOpenChange?: (open: boolean) => void;\n disabled?: boolean;\n duration?: number; // Animation duration in ms\n storageKey?: string; // For localStorage persistence\n}\n\n/**\n * Collapsible Component\n *\n * A generic, reusable collapsible component for any content.\n * Supports both controlled and uncontrolled modes.\n * Includes smooth animations and full ARIA support.\n *\n * @example\n * ```tsx\n * <Collapsible\n * trigger={<button>Toggle</button>}\n * defaultOpen={true}\n * >\n * <div>Collapsible content</div>\n * </Collapsible>\n * ```\n */\nexport default function Collapsible({\n children,\n trigger,\n defaultOpen = true,\n open,\n onOpenChange,\n disabled = false,\n duration = 200,\n storageKey,\n className = \"\",\n ...props\n}: CollapsibleProps) {\n const { isOpen, toggle } = useCollapsible({\n defaultOpen,\n open,\n onOpenChange,\n storageKey,\n } as UseCollapsibleOptions);\n\n const contentRef = useRef<HTMLDivElement>(null);\n const [height, setHeight] = useState<number | \"auto\">(isOpen ? \"auto\" : 0);\n\n // Update height when content changes or isOpen changes\n useEffect(() => {\n if (!contentRef.current) return;\n\n if (isOpen) {\n // Set to actual height for animation\n setHeight(contentRef.current.scrollHeight);\n } else {\n // Set to 0 for collapse animation\n setHeight(0);\n }\n }, [isOpen, children]);\n\n // Handle resize to recalculate height\n useEffect(() => {\n if (!isOpen || !contentRef.current) return;\n\n const resizeObserver = new ResizeObserver(() => {\n if (contentRef.current && isOpen) {\n setHeight(contentRef.current.scrollHeight);\n }\n });\n\n resizeObserver.observe(contentRef.current);\n\n return () => {\n resizeObserver.disconnect();\n };\n }, [isOpen]);\n\n const contentId = `collapsible-content-${Math.random().toString(36).substr(2, 9)}`;\n\n return (\n <div className={className} {...props}>\n <button\n type=\"button\"\n onClick={toggle}\n onKeyDown={(e: KeyboardEvent<HTMLButtonElement>) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (!disabled) {\n toggle();\n }\n }\n }}\n disabled={disabled}\n aria-expanded={isOpen}\n aria-controls={contentId}\n aria-disabled={disabled}\n className={cn(\n \"w-full\",\n \"text-left\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-brand\",\n \"focus:ring-offset-2\",\n getRadiusClass(\"md\"),\n )}\n >\n {trigger}\n </button>\n <div\n id={contentId}\n ref={contentRef}\n style={{\n height: typeof height === \"number\" ? `${height}px` : height,\n overflow: \"hidden\",\n transition: `height ${duration}ms ease-in-out`,\n }}\n aria-hidden={!isOpen}\n >\n <div>{children}</div>\n </div>\n </div>\n );\n}\n","\"use client\";\n\nimport {\n useRef,\n useEffect,\n forwardRef,\n memo,\n useMemo,\n useCallback,\n} from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface CheckboxProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: ReactNode;\n error?: boolean;\n helperText?: string;\n indeterminate?: boolean;\n}\n\n/**\n * Checkbox Component\n *\n * A styled checkbox input component.\n * Follows Atomic Design principles as an Atom component.\n * Uses Composite Pattern when combined with Label and ErrorMessage.\n *\n * @example\n * ```tsx\n * <Checkbox\n * id=\"terms\"\n * label=\"I agree to the terms\"\n * checked={checked}\n * onChange={handleChange}\n * />\n * ```\n */\nconst Checkbox = memo(\n forwardRef<HTMLInputElement, CheckboxProps>(function Checkbox(\n {\n id,\n label,\n error = false,\n helperText,\n className = \"\",\n disabled = false,\n indeterminate = false,\n ...props\n },\n ref,\n ) {\n // Memoize IDs\n const checkboxId = useMemo(\n () => id || `checkbox-${Math.random().toString(36).substr(2, 9)}`,\n [id],\n );\n\n const errorId = useMemo(\n () => (error ? `${checkboxId}-error` : undefined),\n [error, checkboxId],\n );\n\n const helperId = useMemo(\n () => (helperText ? `${checkboxId}-helper` : undefined),\n [helperText, checkboxId],\n );\n\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const focusRingColor = useMemo(\n () =>\n error\n ? errorFocusRing.replace(\"focus:border-\", \"focus:ring-\")\n : primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\"),\n [error, errorFocusRing, primaryFocusRing],\n );\n\n // Memoize classes\n const checkboxClasses = useMemo(\n () =>\n cn(\n \"h-4\",\n \"w-4\",\n getRadiusClass(\"sm\"),\n \"border\",\n \"border-line-default\",\n \"text-fg-brand\",\n \"focus:ring-2\",\n focusRingColor,\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n \"cursor-pointer\",\n error && \"border-error\",\n className,\n ),\n [focusRingColor, error, className],\n );\n\n const labelClasses = useMemo(\n () =>\n cn(\n getTypographyClasses(\"label\"),\n getSpacingClass(\"sm\", \"ml\"),\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n ),\n [disabled],\n );\n\n // Set indeterminate state via ref\n const internalRef = useRef<HTMLInputElement>(null);\n\n // Memoize callback ref\n const setRef = useCallback(\n (element: HTMLInputElement | null) => {\n internalRef.current = element;\n\n // Handle forwarded ref (can be function or object)\n if (typeof ref === \"function\") {\n ref(element);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n element;\n }\n\n // Set indeterminate state\n if (element) {\n element.indeterminate = indeterminate;\n }\n },\n [ref, indeterminate],\n );\n\n useEffect(() => {\n if (internalRef.current) {\n internalRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n return (\n <div className={cn(\"flex\", \"flex-col\", getSpacingClass(\"sm\", \"my\"))}>\n <div className=\"flex items-center\">\n <input\n type=\"checkbox\"\n id={checkboxId}\n ref={setRef}\n className={checkboxClasses}\n disabled={disabled}\n aria-invalid={error}\n aria-describedby={errorId || helperId || undefined}\n aria-label={!label ? \"Checkbox\" : undefined}\n {...props}\n />\n {label && (\n <label htmlFor={checkboxId} className={labelClasses}>\n {label}\n </label>\n )}\n </div>\n {(error || helperText) && (\n <div\n id={errorId || helperId}\n className={cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographyClasses(\"caption\"),\n error ? \"text-fg-error\" : \"text-fg-secondary\",\n )}\n role={error ? \"alert\" : undefined}\n >\n {error ? helperText || \"This field has an error\" : helperText}\n </div>\n )}\n </div>\n );\n }),\n);\n\nCheckbox.displayName = \"Checkbox\";\n\nexport default Checkbox;\n","\"use client\";\n\nimport { forwardRef, memo, useMemo } from \"react\";\nimport type { InputHTMLAttributes, ReactNode } from \"react\";\nimport { getTypographyClasses } from \"../../tokens/typography\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { cn } from \"../../utils\";\n\nexport interface RadioProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"type\"> {\n label?: ReactNode;\n error?: boolean;\n helperText?: string;\n}\n\n/**\n * Radio Component\n *\n * A styled radio input component.\n * Follows Atomic Design principles as an Atom component.\n * Uses Composite Pattern when combined with Label and ErrorMessage.\n *\n * @example\n * ```tsx\n * <Radio\n * id=\"option1\"\n * name=\"options\"\n * label=\"Option 1\"\n * value=\"1\"\n * checked={selected === \"1\"}\n * onChange={handleChange}\n * />\n * ```\n */\nconst Radio = memo(\n forwardRef<HTMLInputElement, RadioProps>(function Radio(\n {\n id,\n label,\n error = false,\n helperText,\n className = \"\",\n disabled = false,\n ...props\n },\n ref,\n ) {\n // Memoize IDs\n const radioId = useMemo(\n () => id || `radio-${Math.random().toString(36).substr(2, 9)}`,\n [id],\n );\n\n const errorId = useMemo(\n () => (error ? `${radioId}-error` : undefined),\n [error, radioId],\n );\n\n const helperId = useMemo(\n () => (helperText ? `${radioId}-helper` : undefined),\n [helperText, radioId],\n );\n\n // Memoize focus ring colors\n const primaryFocusRing = useMemo(() => \"focus:border-line-focus\", []);\n\n const errorFocusRing = useMemo(() => \"focus:border-error\", []);\n\n const focusRingColor = useMemo(\n () =>\n error\n ? errorFocusRing.replace(\"focus:border-\", \"focus:ring-\")\n : primaryFocusRing.replace(\"focus:border-\", \"focus:ring-\"),\n [error, errorFocusRing, primaryFocusRing],\n );\n\n // Memoize classes\n const radioClasses = useMemo(\n () =>\n cn(\n \"h-4\",\n \"w-4\",\n \"border\",\n \"border-line-default\",\n \"text-fg-brand\",\n \"focus:ring-2\",\n focusRingColor,\n \"focus:ring-offset-2\",\n \"disabled:opacity-50\",\n \"disabled:cursor-not-allowed\",\n \"cursor-pointer\",\n error && \"border-error\",\n className,\n ),\n [focusRingColor, error, className],\n );\n\n const labelClasses = useMemo(\n () =>\n cn(\n getTypographyClasses(\"label\"),\n getSpacingClass(\"sm\", \"ml\"),\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\n ),\n [disabled],\n );\n\n return (\n <div className={cn(\"flex\", \"flex-col\", getSpacingClass(\"sm\", \"my\"))}>\n <div className=\"flex items-center\">\n <input\n type=\"radio\"\n id={radioId}\n ref={ref}\n className={radioClasses}\n disabled={disabled}\n aria-invalid={error}\n aria-describedby={errorId || helperId || undefined}\n aria-label={!label ? \"Radio button\" : undefined}\n {...props}\n />\n {label && (\n <label htmlFor={radioId} className={labelClasses}>\n {label}\n </label>\n )}\n </div>\n {(error || helperText) && (\n <div\n id={errorId || helperId}\n className={cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographyClasses(\"caption\"),\n error ? \"text-fg-error\" : \"text-fg-secondary\",\n )}\n role={error ? \"alert\" : undefined}\n >\n {error ? helperText || \"This field has an error\" : helperText}\n </div>\n )}\n </div>\n );\n }),\n);\n\nRadio.displayName = \"Radio\";\n\nexport default Radio;\n","\"use client\";\n\nimport type { HTMLAttributes } from \"react\";\nimport { forwardRef } from \"react\";\nimport { getRadiusClass } from \"../../tokens\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\nimport \"./Progress.css\";\n\nexport type ProgressVariant =\n | \"primary\"\n | \"secondary\"\n | \"success\"\n | \"error\"\n | \"warning\"\n | \"info\";\nexport type ProgressSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ProgressProps extends HTMLAttributes<HTMLDivElement> {\n value?: number; // 0-100, undefined for indeterminate\n max?: number; // Default 100\n variant?: ProgressVariant;\n size?: ProgressSize;\n showLabel?: boolean;\n label?: string;\n \"aria-label\"?: string;\n}\n\n/**\n * Progress Component\n *\n * A progress bar component for displaying progress or loading states.\n * Supports both determinate (with value) and indeterminate (without value) modes.\n * Fully accessible with ARIA attributes.\n *\n * @example\n * ```tsx\n * // Determinate progress\n * <Progress value={75} variant=\"primary\" />\n *\n * // Indeterminate progress\n * <Progress variant=\"primary\" />\n *\n * // With label\n * <Progress value={50} showLabel label=\"Uploading...\" />\n * ```\n */\n// Progress variants using CVA\nconst progressTrackVariants = cva(\"w-full\", {\n variants: {\n size: {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n },\n variant: {\n primary: \"bg-surface-muted\",\n secondary: \"bg-surface-muted\",\n success: \"bg-success-bg-emphasis\",\n error: \"bg-error-bg-emphasis\",\n warning: \"bg-warning-bg-emphasis\",\n info: \"bg-info-bg-emphasis\",\n },\n },\n defaultVariants: {\n size: \"md\",\n variant: \"primary\",\n },\n});\n\nconst progressBarVariants = cva(\"transition-all\", {\n variants: {\n variant: {\n primary: \"bg-surface-brand\",\n secondary: \"bg-surface-secondary\",\n success: \"bg-success\",\n error: \"bg-error\",\n warning: \"bg-warning\",\n info: \"bg-info\",\n },\n },\n defaultVariants: {\n variant: \"primary\",\n },\n});\n\nconst Progress = forwardRef<HTMLDivElement, ProgressProps>(function Progress(\n {\n value,\n max = 100,\n variant = \"primary\",\n size = \"md\",\n showLabel = false,\n label,\n \"aria-label\": ariaLabel,\n className = \"\",\n ...props\n },\n ref,\n) {\n const isIndeterminate = value === undefined;\n const percentage = isIndeterminate\n ? undefined\n : Math.min(Math.max((value / max) * 100, 0), 100);\n\n const defaultAriaLabel =\n ariaLabel ||\n (isIndeterminate\n ? \"Loading in progress\"\n : `Progress: ${percentage?.toFixed(0)}%`);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {showLabel && (label || !isIndeterminate) && (\n <div\n className={cn(\n \"flex\",\n \"items-center\",\n \"justify-between\",\n getSpacingClass(\"xs\", \"mb\"),\n )}\n >\n {label && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n )}\n >\n {label}\n </span>\n )}\n {!isIndeterminate && percentage !== undefined && (\n <span\n className={cn(\n getTypographySize(\"bodySmall\"),\n \"text-fg-secondary\",\n )}\n >\n {percentage.toFixed(0)}%\n </span>\n )}\n </div>\n )}\n <div\n role=\"progressbar\"\n aria-valuemin={isIndeterminate ? undefined : 0}\n aria-valuemax={isIndeterminate ? undefined : max}\n aria-valuenow={isIndeterminate ? undefined : value}\n aria-label={defaultAriaLabel}\n aria-busy={isIndeterminate}\n className={cn(\n \"relative\",\n \"w-full\",\n \"overflow-hidden\",\n progressTrackVariants({ size, variant }),\n getRadiusClass(\"full\"),\n )}\n >\n {isIndeterminate ? (\n <div\n className={cn(\n \"absolute\",\n \"top-0\",\n \"left-0\",\n \"bottom-0\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"motion-reduce:animate-none\",\n )}\n style={{\n width: \"30%\",\n animation: \"progress-indeterminate 1.5s ease-in-out infinite\",\n }}\n />\n ) : (\n <div\n className={cn(\n \"h-full\",\n progressBarVariants({ variant }),\n getRadiusClass(\"full\"),\n \"transition-all\",\n \"duration-300\",\n \"ease-out\",\n )}\n style={{\n width: `${percentage}%`,\n }}\n aria-hidden=\"true\"\n />\n )}\n </div>\n </div>\n );\n});\n\nProgress.displayName = \"Progress\";\n\nexport default Progress;\n","\"use client\";\n\nimport { forwardRef, memo, useMemo, useCallback } from \"react\";\nimport type { InputHTMLAttributes } from \"react\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getSwitchClasses } from \"../../tokens/switch\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn } from \"../../utils\";\n\nexport type SwitchSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SwitchProps\n extends Omit<InputHTMLAttributes<HTMLInputElement>, \"size\" | \"type\"> {\n size?: SwitchSize;\n label?: string;\n description?: string;\n error?: boolean;\n}\n\n/**\n * Switch Component\n *\n * A toggle switch component for on/off states.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Switch checked={isEnabled} onChange={(e) => setIsEnabled(e.target.checked)} />\n *\n * <Switch\n * label=\"Enable notifications\"\n * description=\"Receive email notifications\"\n * checked={notifications}\n * onChange={(e) => setNotifications(e.target.checked)}\n * />\n * ```\n */\nconst Switch = memo(\n forwardRef<HTMLInputElement, SwitchProps>(function Switch(\n {\n size = \"md\",\n label,\n description,\n error = false,\n className = \"\",\n disabled = false,\n checked,\n onChange,\n id,\n ...props\n },\n ref,\n ) {\n // Memoize IDs\n const switchId = useMemo(\n () => id || `switch-${Math.random().toString(36).substr(2, 9)}`,\n [id],\n );\n\n const labelId = useMemo(\n () => (label ? `${switchId}-label` : undefined),\n [label, switchId],\n );\n\n const descriptionId = useMemo(\n () => (description ? `${switchId}-description` : undefined),\n [description, switchId],\n );\n\n // Component-scoped tokens (SWITCH_TOKENS) drive track/thumb/translate.\n const config = useMemo(() => getSwitchClasses(size), [size]);\n\n // Memoize focus ring color\n const focusRingColor = useMemo(\n () => \"focus:border-line-focus\".replace(\"focus:border-\", \"focus:ring-\"),\n [],\n );\n\n // Memoize classes\n const trackClasses = useMemo(\n () =>\n cn(\n \"relative\",\n \"inline-flex\",\n \"shrink-0\",\n \"cursor-pointer\",\n \"rounded-full\",\n \"border-2\",\n \"border-transparent\",\n getAnimationClass(\"base\"),\n \"focus:outline-none\",\n \"focus:ring-2\",\n focusRingColor,\n \"focus:ring-offset-2\",\n config.track,\n checked ? \"bg-surface-brand\" : \"bg-surface-muted\",\n error && !checked && \"border-error\",\n disabled && \"opacity-50 cursor-not-allowed\",\n className,\n ),\n [focusRingColor, config.track, checked, error, disabled, className],\n );\n\n const thumbClasses = useMemo(\n () =>\n cn(\n \"pointer-events-none\",\n \"inline-block\",\n \"rounded-full\",\n \"bg-surface-base\",\n \"shadow\",\n \"transform\",\n getAnimationClass(\"base\"),\n config.thumb,\n checked ? config.translate : \"translate-x-0\",\n ),\n [config.thumb, config.translate, checked],\n );\n\n return (\n <div className={cn(\"flex\", \"items-start\", getSpacingClass(\"md\", \"gap\"))}>\n <div className=\"flex items-center\">\n <button\n type=\"button\"\n className={trackClasses}\n role=\"switch\"\n aria-checked={checked}\n aria-labelledby={labelId}\n aria-describedby={descriptionId}\n disabled={disabled}\n onClick={useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n if (!disabled && onChange) {\n const syntheticEvent = {\n ...e,\n target: { ...e.target, checked: !checked },\n currentTarget: { ...e.currentTarget, checked: !checked },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n },\n [disabled, onChange, checked],\n )}\n onKeyDown={useCallback(\n (e: React.KeyboardEvent<HTMLButtonElement>) => {\n if (\n (e.key === \"Enter\" || e.key === \" \") &&\n !disabled &&\n onChange\n ) {\n e.preventDefault();\n const syntheticEvent = {\n ...e,\n target: { ...e.target, checked: !checked },\n currentTarget: { ...e.currentTarget, checked: !checked },\n } as unknown as React.ChangeEvent<HTMLInputElement>;\n onChange(syntheticEvent);\n }\n },\n [disabled, onChange, checked],\n )}\n >\n <span className={thumbClasses} />\n </button>\n <input\n ref={ref}\n type=\"checkbox\"\n id={switchId}\n checked={checked}\n onChange={onChange}\n disabled={disabled}\n className=\"sr-only\"\n aria-hidden=\"true\"\n {...props}\n />\n </div>\n {(label || description) && (\n <div className=\"flex-1\">\n {label && (\n <label\n id={labelId}\n htmlFor={switchId}\n className={cn(\n \"block\",\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n error ? \"text-fg-error\" : \"text-fg-primary\",\n disabled ? \"opacity-50\" : \"cursor-pointer\",\n )}\n >\n {label}\n </label>\n )}\n {description && (\n <p\n id={descriptionId}\n className={cn(\n getSpacingClass(\"xs\", \"mt\"),\n getTypographySize(\"bodySmall\"),\n error ? \"text-fg-error\" : \"text-fg-secondary\",\n )}\n >\n {description}\n </p>\n )}\n </div>\n )}\n </div>\n );\n }),\n);\n\nSwitch.displayName = \"Switch\";\n\nexport default Switch;\n","\"use client\";\n\nimport { memo, useMemo } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type SeparatorOrientation = \"horizontal\" | \"vertical\";\nexport type SeparatorVariant = \"solid\" | \"dashed\" | \"dotted\";\n\nexport interface SeparatorProps extends HTMLAttributes<HTMLHRElement> {\n orientation?: SeparatorOrientation;\n variant?: SeparatorVariant;\n}\n\n/**\n * Separator Component\n *\n * A visual separator component for dividing content.\n * Follows Atomic Design principles as an Atom component.\n * Optimized with React.memo to prevent unnecessary re-renders.\n *\n * @example\n * ```tsx\n * <Separator />\n *\n * <Separator orientation=\"vertical\" variant=\"dashed\" />\n * ```\n */\nconst Separator = memo(function Separator({\n orientation = \"horizontal\",\n variant = \"solid\",\n className = \"\",\n ...props\n}: SeparatorProps) {\n const classes = useMemo(() => {\n const baseClasses = [\"border-0\", \"border-line-default\"];\n\n const orientationClasses = {\n horizontal: \"w-full border-t\",\n vertical: \"h-full border-l self-stretch\",\n };\n\n const variantClasses = {\n solid: \"border-solid\",\n dashed: \"border-dashed\",\n dotted: \"border-dotted\",\n };\n\n return cn(\n ...baseClasses,\n orientationClasses[orientation],\n variantClasses[variant],\n className,\n );\n }, [orientation, variant, className]);\n\n if (orientation === \"vertical\") {\n return (\n <div\n className={classes}\n role=\"separator\"\n aria-orientation=\"vertical\"\n {...(props as HTMLAttributes<HTMLDivElement>)}\n />\n );\n }\n\n return (\n <hr\n className={classes}\n role=\"separator\"\n aria-orientation=\"horizontal\"\n {...props}\n />\n );\n});\n\nSeparator.displayName = \"Separator\";\n\nexport default Separator;\n","\"use client\";\n\nimport { useRef, useState, forwardRef } from \"react\";\nimport type { HTMLAttributes } from \"react\";\nimport { getAnimationClass } from \"../../tokens/animations\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport {\n getTypographySize,\n getTypographyWeight,\n} from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type SliderVariant = \"single\" | \"range\";\nexport type SliderSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface SliderProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"onChange\" | \"defaultValue\"> {\n value?: number | [number, number];\n defaultValue?: number | [number, number];\n min?: number;\n max?: number;\n step?: number;\n variant?: SliderVariant;\n size?: SliderSize;\n disabled?: boolean;\n showValue?: boolean;\n marks?: number[];\n onChange?: (value: number | [number, number]) => void;\n onValueChange?: (value: number | [number, number]) => void;\n label?: string;\n}\n\n/**\n * Slider Component\n *\n * A range input component for selecting numeric values.\n * Supports single and dual thumb (range) modes.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Slider\n * value={50}\n * min={0}\n * max={100}\n * onChange={(value) => console.log(value)}\n * />\n *\n * <Slider\n * variant=\"range\"\n * value={[20, 80]}\n * min={0}\n * max={100}\n * onChange={(value) => console.log(value)}\n * />\n * ```\n */\nconst Slider = forwardRef<HTMLDivElement, SliderProps>(function Slider(\n {\n value: controlledValue,\n defaultValue,\n min = 0,\n max = 100,\n step = 1,\n variant = \"single\",\n size = \"md\",\n disabled = false,\n showValue = false,\n marks = [],\n onChange,\n onValueChange,\n label,\n className = \"\",\n ...props\n },\n ref,\n) {\n const sliderRef = useRef<HTMLDivElement>(null);\n const [internalValue, setInternalValue] = useState<number | [number, number]>(\n defaultValue || (variant === \"range\" ? [min, max] : min),\n );\n const [isDragging, setIsDragging] = useState(false);\n const [activeThumb, setActiveThumb] = useState<\"min\" | \"max\" | null>(null);\n\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : internalValue;\n\n const getPercentage = (val: number) => ((val - min) / (max - min)) * 100;\n\n const getValueFromPosition = (clientX: number): number => {\n if (!sliderRef.current) return min;\n const rect = sliderRef.current.getBoundingClientRect();\n const percentage = Math.max(\n 0,\n Math.min(1, (clientX - rect.left) / rect.width),\n );\n const rawValue = min + percentage * (max - min);\n return Math.round(rawValue / step) * step;\n };\n\n const handleMouseDown = (\n e: React.MouseEvent,\n thumb: \"min\" | \"max\" = \"min\",\n ) => {\n if (disabled) return;\n e.preventDefault();\n setIsDragging(true);\n setActiveThumb(thumb);\n\n const handleMouseMove = (moveEvent: MouseEvent) => {\n if (!sliderRef.current) return;\n const newValue = getValueFromPosition(moveEvent.clientX);\n updateValue(newValue, thumb);\n };\n\n const handleMouseUp = () => {\n setIsDragging(false);\n setActiveThumb(null);\n document.removeEventListener(\"mousemove\", handleMouseMove);\n document.removeEventListener(\"mouseup\", handleMouseUp);\n };\n\n document.addEventListener(\"mousemove\", handleMouseMove);\n document.addEventListener(\"mouseup\", handleMouseUp);\n };\n\n const updateValue = (newValue: number, thumb: \"min\" | \"max\" = \"min\") => {\n const clampedValue = Math.max(min, Math.min(max, newValue));\n\n if (variant === \"range\") {\n const [minVal, maxVal] = Array.isArray(currentValue)\n ? currentValue\n : [min, max];\n let updatedValue: [number, number];\n\n if (thumb === \"min\") {\n updatedValue = [Math.min(clampedValue, maxVal), maxVal];\n } else {\n updatedValue = [minVal, Math.max(clampedValue, minVal)];\n }\n\n if (!isControlled) {\n setInternalValue(updatedValue);\n }\n onChange?.(updatedValue);\n onValueChange?.(updatedValue);\n } else {\n if (!isControlled) {\n setInternalValue(clampedValue);\n }\n onChange?.(clampedValue);\n onValueChange?.(clampedValue);\n }\n };\n\n const handleTrackClick = (e: React.MouseEvent) => {\n if (disabled || isDragging) return;\n const newValue = getValueFromPosition(e.clientX);\n updateValue(newValue);\n };\n\n // Get focus ring color using design system helper\n const getFocusRingColor = (): string => {\n return \"focus:ring-line-brand\" + \" ring-offset-2\";\n };\n\n // Slider variants using CVA\n const sliderTrackVariants = cva(cn(\"relative\", \"cursor-pointer\"), {\n variants: {\n size: {\n sm: \"h-1\",\n md: \"h-2\",\n lg: \"h-3\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n disabled: false,\n },\n });\n\n const sliderThumbVariants = cva(\n cn(\n \"absolute\",\n \"bg-surface-brand\",\n \"rounded-full\",\n \"border-2\",\n \"border-white\",\n \"shadow-md\",\n \"cursor-grab\",\n \"active:cursor-grabbing\",\n getAnimationClass(\"base\"),\n \"-translate-x-1/2\",\n \"-translate-y-1/2\",\n \"top-1/2\",\n ),\n {\n variants: {\n size: {\n sm: \"w-3 h-3\",\n md: \"w-4 h-4\",\n lg: \"w-5 h-5\",\n },\n active: {\n true: getFocusRingColor(),\n false: \"\",\n },\n },\n defaultVariants: {\n size: \"md\",\n active: false,\n },\n },\n );\n\n // Configuration for styling variants\n // const _config = {\n // track: sliderTrackVariants({ size, disabled }),\n // thumb: sliderThumbVariants({ size }),\n // };\n const singleValue =\n typeof currentValue === \"number\" ? currentValue : currentValue[0];\n const minValue = Array.isArray(currentValue) ? currentValue[0] : min;\n const maxValue = Array.isArray(currentValue) ? currentValue[1] : singleValue;\n\n const minPercentage = getPercentage(minValue);\n const maxPercentage = getPercentage(maxValue);\n\n return (\n <div ref={ref} className={cn(\"w-full\", className)} {...props}>\n {label && (\n <label\n className={cn(\n \"block\",\n getTypographySize(\"bodySmall\"),\n getTypographyWeight(\"label\"),\n \"text-fg-primary\",\n getSpacingClass(\"sm\", \"mb\"),\n )}\n >\n {label}\n {showValue && (\n <span\n className={cn(getSpacingClass(\"sm\", \"ml\"), \"text-fg-secondary\")}\n >\n {variant === \"range\" ? `${minValue} - ${maxValue}` : singleValue}\n </span>\n )}\n </label>\n )}\n <div\n ref={sliderRef}\n className={cn(\n sliderTrackVariants({ size, disabled }),\n \"bg-surface-muted\",\n getRadiusClass(\"full\"),\n )}\n onClick={handleTrackClick}\n role={variant === \"range\" ? undefined : \"slider\"}\n aria-valuemin={variant === \"range\" ? undefined : min}\n aria-valuemax={variant === \"range\" ? undefined : max}\n aria-valuenow={variant === \"range\" ? undefined : singleValue}\n aria-disabled={variant === \"range\" ? undefined : disabled}\n aria-label={variant === \"range\" ? undefined : label}\n >\n {/* Active track */}\n <div\n className={cn(\n \"absolute\",\n sliderTrackVariants({ size }),\n \"bg-surface-brand\",\n getRadiusClass(\"full\"),\n getAnimationClass(\"base\"),\n )}\n style={{\n left: `${minPercentage}%`,\n width: `${maxPercentage - minPercentage}%`,\n }}\n />\n\n {/* Marks */}\n {marks.map((mark) => {\n const markPercentage = getPercentage(mark);\n return (\n <div\n key={mark}\n className={cn(\n \"absolute\",\n \"w-1\",\n \"h-1\",\n \"bg-line-strong\",\n getRadiusClass(\"full\"),\n \"-translate-x-1/2\",\n )}\n style={{\n left: `${markPercentage}%`,\n top: \"50%\",\n transform: \"translate(-50%, -50%)\",\n }}\n />\n );\n })}\n\n {/* Thumbs */}\n {variant === \"range\" ? (\n <>\n <div\n className={cn(\n sliderThumbVariants({ size, active: activeThumb === \"min\" }),\n )}\n style={{ left: `${minPercentage}%` }}\n onMouseDown={(e) => handleMouseDown(e, \"min\")}\n role=\"slider\"\n aria-valuemin={min}\n aria-valuemax={maxValue}\n aria-valuenow={minValue}\n />\n <div\n className={cn(\n sliderThumbVariants({ size, active: activeThumb === \"max\" }),\n )}\n style={{ left: `${maxPercentage}%` }}\n onMouseDown={(e) => handleMouseDown(e, \"max\")}\n role=\"slider\"\n aria-valuemin={minValue}\n aria-valuemax={max}\n aria-valuenow={maxValue}\n />\n </>\n ) : (\n <div\n className={cn(sliderThumbVariants({ size, active: isDragging }))}\n style={{ left: `${maxPercentage}%` }}\n onMouseDown={(e) => handleMouseDown(e)}\n />\n )}\n\n {showValue && !label && (\n <div className=\"absolute -top-6 left-0 right-0 flex justify-center\">\n <span\n className={cn(\n getTypographySize(\"caption\"),\n \"text-fg-secondary\",\n \"bg-surface-overlay\",\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getRadiusClass(\"md\"),\n \"shadow\",\n )}\n >\n {variant === \"range\" ? `${minValue} - ${maxValue}` : singleValue}\n </span>\n </div>\n )}\n </div>\n </div>\n );\n});\n\nSlider.displayName = \"Slider\";\n\nexport default Slider;\n","\"use client\";\n\nimport { forwardRef, type ReactNode } from \"react\";\nimport { X } from \"lucide-react\";\nimport { getRadiusClass } from \"../../tokens/radius\";\nimport { getSpacingClass } from \"../../tokens/spacing\";\nimport { getTypographySize } from \"../../tokens/typography\";\nimport { cn, cva } from \"../../utils\";\n\nexport type ChipVariant = \"default\" | \"outlined\" | \"filled\";\nexport type ChipSize = \"sm\" | \"md\" | \"lg\";\n\nexport interface ChipProps {\n children: ReactNode;\n variant?: ChipVariant;\n size?: ChipSize;\n onRemove?: () => void;\n selected?: boolean;\n disabled?: boolean;\n className?: string;\n \"aria-label\"?: string;\n onClick?: () => void;\n tabIndex?: number;\n}\n\n/**\n * Chip Component\n *\n * A chip/tag component for displaying labels, filters, or selected items.\n * Follows Atomic Design principles as an Atom component.\n *\n * @example\n * ```tsx\n * <Chip>Tag</Chip>\n * <Chip onRemove={() => console.log('removed')}>Removable</Chip>\n * ```\n */\n// Chip variants using CVA\nconst chipVariants = cva(\n // Base classes\n cn(\n \"inline-flex\",\n \"items-center\",\n \"font-medium\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"gap\"),\n ),\n {\n variants: {\n variant: {\n default: cn(\n \"bg-surface-muted\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n outlined: cn(\n \"bg-transparent\",\n \"text-fg-primary\",\n \"border\",\n \"border-line-default\",\n ),\n filled: cn(\n \"bg-surface-brand\",\n \"text-fg-inverse\",\n \"border\",\n \"border-transparent\",\n ),\n },\n size: {\n sm: cn(\n getSpacingClass(\"xs\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"caption\"),\n ),\n md: cn(\n getSpacingClass(\"sm\", \"px\"),\n getSpacingClass(\"xs\", \"py\"),\n getTypographySize(\"bodySmall\"),\n ),\n lg: cn(\n getSpacingClass(\"md\", \"px\"),\n getSpacingClass(\"sm\", \"py\"),\n getTypographySize(\"body\"),\n ),\n },\n selected: {\n true: cn(\n \"bg-surface-brand\",\n \"text-fg-inverse\",\n \"border\",\n \"border-line-brand\",\n ),\n false: \"\",\n },\n disabled: {\n true: \"opacity-50 cursor-not-allowed\",\n false: \"\",\n },\n },\n compoundVariants: [\n {\n selected: true,\n variant: \"default\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"outlined\",\n class: \"\", // Override variant when selected\n },\n {\n selected: true,\n variant: \"filled\",\n class: \"\", // Override variant when selected\n },\n ],\n defaultVariants: {\n variant: \"default\",\n size: \"md\",\n selected: false,\n disabled: false,\n },\n },\n);\n\nconst Chip = forwardRef<HTMLDivElement, ChipProps>(function Chip(\n {\n children,\n variant = \"default\",\n size = \"md\",\n onRemove,\n selected = false,\n disabled = false,\n className = \"\",\n \"aria-label\": ariaLabel,\n onClick,\n tabIndex,\n ...props\n },\n ref,\n) {\n // Determine if chip is interactive (has onClick or is explicitly selectable)\n const isInteractive =\n onClick !== undefined || (selected !== false && selected !== undefined);\n const role = selected ? \"option\" : isInteractive ? \"button\" : undefined;\n\n // Generate accessible label\n const getAccessibleLabel = (): string | undefined => {\n if (ariaLabel) return ariaLabel;\n if (typeof children === \"string\") return children;\n // For non-string children, try to extract text content\n if (\n typeof children === \"object\" &&\n children !== null &&\n \"props\" in children\n ) {\n const childProps = (children as { props?: { children?: unknown } }).props;\n if (childProps?.children && typeof childProps.children === \"string\") {\n return childProps.children;\n }\n }\n return undefined;\n };\n\n const accessibleLabel = getAccessibleLabel();\n const shouldHaveAriaLabel = role === \"button\" && !accessibleLabel;\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (disabled) return;\n\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n if (onClick) {\n onClick();\n }\n }\n };\n\n return (\n <div\n ref={ref}\n className={cn(\n chipVariants({ variant, size, selected, disabled }),\n onRemove && getSpacingClass(\"xs\", \"pr\"),\n isInteractive &&\n !disabled &&\n \"cursor-pointer focus:outline-none focus:ring-2 focus:ring-line-focus focus:ring-offset-2\",\n className,\n )}\n role={role}\n aria-selected={selected ? true : undefined}\n aria-disabled={disabled}\n aria-label={\n shouldHaveAriaLabel\n ? \"Chip\"\n : ariaLabel || (role === \"button\" ? accessibleLabel : undefined)\n }\n tabIndex={\n tabIndex !== undefined\n ? tabIndex\n : isInteractive && !disabled\n ? 0\n : undefined\n }\n onClick={disabled ? undefined : onClick}\n onKeyDown={handleKeyDown}\n {...props}\n >\n <span>{children}</span>\n {onRemove && !disabled && (\n <button\n type=\"button\"\n onClick={(e) => {\n e.stopPropagation();\n onRemove();\n }}\n className={cn(\n getSpacingClass(\"xs\", \"ml\"),\n \"hover:bg-tint-hover\",\n getRadiusClass(\"full\"),\n getSpacingClass(\"xs\", \"p\"),\n \"transition-colors\",\n \"focus:outline-none\",\n \"focus:ring-2\",\n \"focus:ring-line-focus\",\n \"focus:ring-offset-1\",\n )}\n aria-label={`Remove ${accessibleLabel || \"chip\"}`}\n >\n <X className=\"h-3 w-3\" aria-hidden=\"true\" />\n </button>\n )}\n </div>\n );\n});\n\nChip.displayName = \"Chip\";\n\nexport default Chip;\n","\"use client\";\n\nimport {\n useState,\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n} from \"react\";\nimport { cn } from \"../../utils\";\n\nexport type AvatarSize = \"xs\" | \"sm\" | \"md\" | \"lg\" | \"xl\";\n\nexport interface AvatarProps\n extends Omit<HTMLAttributes<HTMLDivElement>, \"children\"> {\n src?: string;\n alt?: string;\n fallback?: string | ReactNode;\n size?: AvatarSize;\n variant?: \"circle\" | \"square\" | \"rounded\";\n \"aria-label\"?: string;\n}\n\n/**\n * Avatar Component\n *\n * A versatile avatar component for displaying user profile images or initials.\n * Supports fallback display when image fails to load or is not provided.\n * Fully accessible with ARIA attributes.\n *\n * @example\n * ```tsx\n * // With image\n * <Avatar src=\"/user.jpg\" alt=\"John Doe\" />\n *\n * // With fallback initials\n * <Avatar fallback=\"JD\" alt=\"John Doe\" />\n *\n * // Custom size\n * <Avatar src=\"/user.jpg\" size=\"lg\" />\n * ```\n */\nconst Avatar = forwardRef<HTMLDivElement, AvatarProps>(function Avatar(\n {\n src,\n alt,\n fallback,\n size = \"md\",\n variant = \"circle\",\n \"aria-label\": ariaLabel,\n className = \"\",\n ...props\n },\n ref,\n) {\n const [imageError, setImageError] = useState(false);\n const [imageLoaded, setImageLoaded] = useState(false);\n\n // Size and variant classes (not using cva to avoid type issues with dynamic classes)\n const sizeClasses: Record<AvatarSize, string> = {\n xs: \"h-6 w-6 text-xs\",\n sm: \"h-8 w-8 text-sm\",\n md: \"h-10 w-10 text-base\",\n lg: \"h-12 w-12 text-lg\",\n xl: \"h-16 w-16 text-xl\",\n };\n\n const variantClasses = {\n circle: \"rounded-full\",\n square: \"rounded-none\",\n rounded: \"rounded-md\",\n };\n\n const showFallback = !src || imageError;\n const displayFallback =\n typeof fallback === \"string\"\n ? fallback.toUpperCase().slice(0, 2)\n : fallback;\n\n const defaultAriaLabel = ariaLabel || alt || \"User avatar\";\n\n return (\n <div\n ref={ref}\n className={cn(\n \"relative\",\n \"inline-flex\",\n \"items-center\",\n \"justify-center\",\n \"shrink-0\",\n \"font-medium\",\n \"overflow-hidden\",\n sizeClasses[size],\n variantClasses[variant],\n \"bg-surface-muted\",\n \"text-fg-primary\",\n className,\n )}\n role=\"img\"\n aria-label={defaultAriaLabel}\n {...props}\n >\n {!showFallback && src && (\n <img\n src={src}\n alt={alt || \"\"}\n className={cn(\n \"w-full\",\n \"h-full\",\n \"object-cover\",\n variant === \"circle\"\n ? \"rounded-full\"\n : variant === \"square\"\n ? \"rounded-none\"\n : \"rounded-md\",\n !imageLoaded ? \"opacity-0\" : \"opacity-100\",\n \"transition-opacity\",\n \"duration-200\",\n )}\n onLoad={() => setImageLoaded(true)}\n onError={() => {\n setImageError(true);\n setImageLoaded(false);\n }}\n aria-hidden=\"true\"\n />\n )}\n {showFallback && (\n <span\n className={cn(\n \"flex\",\n \"items-center\",\n \"justify-center\",\n \"w-full\",\n \"h-full\",\n variant === \"circle\"\n ? \"rounded-full\"\n : variant === \"square\"\n ? \"rounded-none\"\n : \"rounded-md\",\n )}\n aria-hidden=\"true\"\n >\n {displayFallback || \"?\"}\n </span>\n )}\n </div>\n );\n});\n\nAvatar.displayName = \"Avatar\";\n\nexport default Avatar;\n","\"use client\";\n\nimport {\n Children,\n type HTMLAttributes,\n type ReactNode,\n isValidElement,\n cloneElement,\n} from \"react\";\nimport { cn } from \"../../utils\";\nimport Avatar, { type AvatarProps } from \"./Avatar\";\n\nexport interface AvatarGroupProps extends HTMLAttributes<HTMLDivElement> {\n children: ReactNode;\n max?: number; // Maximum number of avatars to show before collapsing\n size?: AvatarProps[\"size\"];\n variant?: AvatarProps[\"variant\"];\n spacing?: \"none\" | \"sm\" | \"md\" | \"lg\"; // Negative margin between avatares\n}\n\n/**\n * AvatarGroup Component\n *\n * Container for displaying multiple avatars in a group.\n * Supports collapsing when there are too many avatars.\n *\n * @example\n * ```tsx\n * <AvatarGroup max={3}>\n * <Avatar src=\"/user1.jpg\" alt=\"User 1\" />\n * <Avatar src=\"/user2.jpg\" alt=\"User 2\" />\n * <Avatar src=\"/user3.jpg\" alt=\"User 3\" />\n * <Avatar src=\"/user4.jpg\" alt=\"User 4\" />\n * </AvatarGroup>\n * ```\n */\nexport function AvatarGroup({\n children,\n max = 3,\n size = \"md\",\n variant = \"circle\",\n spacing = \"md\",\n className = \"\",\n ...props\n}: AvatarGroupProps) {\n const spacingClasses = {\n none: \"\",\n sm: \"-space-x-1\",\n md: \"-space-x-2\",\n lg: \"-space-x-3\",\n };\n\n // Convert children to array and filter out null/undefined\n const avatars = Children.toArray(children).filter(Boolean);\n const visibleAvatars = avatars.slice(0, max);\n const remainingCount = avatars.length - max;\n\n return (\n <div\n className={cn(\"flex\", \"items-center\", spacingClasses[spacing], className)}\n role=\"group\"\n aria-label={`${avatars.length} avatars`}\n {...props}\n >\n {visibleAvatars.map((avatar, index) => {\n // Clone avatar with consistent size and variant if needed\n let avatarElement = avatar;\n if (isValidElement(avatar) && avatar.type === Avatar) {\n const avatarProps = avatar.props as AvatarProps;\n avatarElement = cloneElement(\n avatar as React.ReactElement<AvatarProps>,\n {\n size: avatarProps.size || size,\n variant: avatarProps.variant || variant,\n },\n );\n }\n\n return (\n <div\n key={index}\n className=\"ring-2 ring-surface-base\"\n // micro-z: avatar stacking computed by position in group\n style={{ zIndex: avatars.length - index }}\n >\n {avatarElement}\n </div>\n );\n })}\n {remainingCount > 0 && (\n <Avatar\n size={size}\n variant={variant}\n fallback={`+${remainingCount}`}\n aria-label={`${remainingCount} more avatars`}\n className=\"ring-2 ring-surface-base\"\n // micro-z: avatar group fallback base layer\n style={{ zIndex: 0 }}\n />\n )}\n </div>\n );\n}\n"],"names":["Info","_a","_b","variant","className","props","__objRest","variantClasses","cn","jsx","__spreadValues","getSpacingClass","getRadiusClass","TEXT_COLOR_CLASSES","TextComponent","ref","bold","italic","as","color","colorRole","colorShade","rest","classNames","Tag","getTypographyClasses","Text","forwardRef","spinnerVariants","cva","Spinner","memo","size","label","jsxs","__spreadProps","Loader2","getTypographySize","buttonVariants","IconWrapper","children","position","Button","isLoading","loadingText","loadingIcon","leftIcon","rightIcon","fullWidth","Component","disabled","ariaLabel","classes","useMemo","isIconOnly","finalAriaLabel","spinnerVariant","spinnerSize","displayLoadingIcon","defaultType","buttonProps","Fragment","HelperText","error","success","helperText","errorId","helperId","helperClasses","text","Input","id","showClearButton","onClear","type","value","onChange","inputId","showPassword","setShowPassword","useState","isPassword","inputType","state","hasValue","shouldShowClear","primaryFocusRing","errorFocusRing","successFocusRing","getFocusRingColor","getStateFocusRingColor","useCallback","stateType","inputVariants","inputClasses","labelClasses","iconSize","iconPosition","handleClear","e","inputElement","syntheticEvent","handleTogglePassword","prev","X","EyeOff","Eye","useNavLink","_href","active","isActive","NextLink","nextLink","navLinkVariants","NavLink","href","onClick","onKeyDown","calculatedActive","LinkComponent","activeClasses","handleClick","handleKeyDown","linkProps","baseProps","badgeVariants","getTypographyWeight","Badge","style","accessibleLabel","childProps","Select","options","optionGroups","placeholder","selectId","selectVariants","selectState","selectClasses","group","groupIndex","option","Textarea","resize","focusRingColor","resizeClasses","ariaDescribedBy","Label","baseClasses","ErrorMessage","message","AlertCircle","Tooltip","content","delay","_ariaLabel","preservePositioning","isVisible","setIsVisible","timeoutIdRef","useRef","tooltipRef","triggerRef","tooltipId","handleMouseEnter","handleMouseLeave","handleFocus","handleBlur","useEffect","handleClickOutside","event","getArrowBorderColor","tooltipVariants","getZIndexClass","arrowVariants","getBorderWidthClass","childrenWithProps","isValidElement","childElement","existingProps","existingRef","cloneElement","node","wrapperClassName","Skeleton","width","height","lines","defaultAriaLabel","_","index","useCollapsible","defaultOpen","open","onOpenChange","storageKey","getInitialState","stored","internalOpen","setInternalOpen","isOpen","setOpen","newOpen","toggle","Collapsible","trigger","duration","contentRef","setHeight","resizeObserver","contentId","Checkbox","indeterminate","checkboxId","checkboxClasses","internalRef","setRef","element","Radio","radioId","radioClasses","progressTrackVariants","progressBarVariants","Progress","max","showLabel","isIndeterminate","percentage","Switch","description","checked","switchId","labelId","descriptionId","config","getSwitchClasses","trackClasses","getAnimationClass","thumbClasses","Separator","orientation","orientationClasses","Slider","controlledValue","defaultValue","min","step","showValue","marks","onValueChange","sliderRef","internalValue","setInternalValue","isDragging","setIsDragging","activeThumb","setActiveThumb","isControlled","currentValue","getPercentage","val","getValueFromPosition","clientX","rect","rawValue","handleMouseDown","thumb","handleMouseMove","moveEvent","newValue","updateValue","handleMouseUp","clampedValue","minVal","maxVal","updatedValue","handleTrackClick","sliderTrackVariants","sliderThumbVariants","singleValue","minValue","maxValue","minPercentage","maxPercentage","mark","markPercentage","chipVariants","Chip","onRemove","selected","tabIndex","isInteractive","role","shouldHaveAriaLabel","Avatar","src","alt","fallback","imageError","setImageError","imageLoaded","setImageLoaded","sizeClasses","showFallback","displayFallback","AvatarGroup","spacing","spacingClasses","avatars","Children","visibleAvatars","remainingCount","avatar","avatarElement","avatarProps"],"mappings":"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"}
|