@tinybigui/react 0.1.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/utils/cn.ts","../src/utils/colors.ts","../src/utils/typography.ts","../../../node_modules/.pnpm/@react-aria+utils@3.32.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/useId.ts","../../../node_modules/.pnpm/@react-aria+utils@3.32.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/chain.ts","../../../node_modules/.pnpm/@react-aria+utils@3.32.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/mergeProps.ts","../../../node_modules/.pnpm/@react-aria+utils@3.32.0_react-dom@18.3.1_react@18.3.1__react@18.3.1/node_modules/@react-aria/utils/dist/packages/@react-aria/utils/src/filterDOMProps.ts","../../../node_modules/.pnpm/@react-stately+utils@3.11.0_react@18.3.1/node_modules/@react-stately/utils/dist/packages/@react-stately/utils/src/useControlledState.ts","../src/components/Button/ButtonHeadless.tsx","../src/components/Button/Button.variants.ts","../src/hooks/useRipple.tsx","../src/components/Button/Button.tsx","../src/components/IconButton/IconButtonHeadless.tsx","../src/components/IconButton/IconButton.variants.ts","../src/components/IconButton/IconButton.tsx","../src/components/FAB/FABHeadless.tsx","../src/components/FAB/FAB.variants.ts","../src/components/FAB/FAB.tsx","../src/components/TextField/TextField.variants.ts","../src/components/TextField/TextFieldHeadless.tsx","../src/components/TextField/TextField.tsx","../../../node_modules/.pnpm/@react-stately+form@3.2.2_react@18.3.1/node_modules/@react-stately/form/dist/packages/@react-stately/form/src/useFormValidationState.ts","../../../node_modules/.pnpm/@react-stately+radio@3.11.3_react@18.3.1/node_modules/@react-stately/radio/dist/packages/@react-stately/radio/src/useRadioGroupState.ts","../../../node_modules/.pnpm/@react-stately+toggle@3.9.3_react@18.3.1/node_modules/@react-stately/toggle/dist/packages/@react-stately/toggle/src/useToggleState.ts","../src/components/Checkbox/Checkbox.variants.ts","../src/components/Checkbox/Checkbox.tsx","../src/components/Switch/Switch.variants.ts","../src/components/Switch/Switch.tsx","../src/components/Radio/RadioGroupHeadless.tsx","../src/components/Radio/Radio.variants.ts","../src/components/Radio/Radio.tsx","../src/components/Radio/RadioGroup.tsx","../src/components/Radio/RadioHeadless.tsx"],"names":["twMerge","clsx","argbFromHex","themeFromSourceColor","$7jXr9$clsx","$3whtM$react","$3whtM$useState","$3whtM$useRef","$3whtM$useEffect","$3whtM$useReducer","$3whtM$useCallback","value","forwardRef","useRef","useButton","jsx","cva","useState","useCallback","jsxs","Spinner","useTextField","useFocusRing","mergedInputProps","$69F46$createContext","$69F46$useMemo","$69F46$useContext","name","$69F46$useState","$69F46$useRef","$69F46$useEffect","a","$l55kx$useMemo","$l55kx$useState","$d8rik$useState","useCheckbox","useEffect","VisuallyHidden","mergeProps","useSwitch","createContext","useRadioGroup","useContext","useRadio"],"mappings":"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","file":"index.cjs","sourcesContent":["import { type ClassValue, clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\n/**\n * Combines and merges Tailwind CSS classes efficiently.\n *\n * This utility uses:\n * - `clsx` for conditional class joining\n * - `tailwind-merge` to properly merge/deduplicate Tailwind classes\n *\n * @example\n * ```tsx\n * cn('px-2 py-1', condition && 'bg-blue-500', { 'text-white': isActive })\n * // => 'px-2 py-1 bg-blue-500 text-white'\n * ```\n *\n * @example Merging conflicting classes\n * ```tsx\n * cn('px-2', 'px-4')\n * // => 'px-4' (later class wins)\n * ```\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n","/**\n * Color Utilities\n *\n * Utilities for working with Material Design 3 color system.\n * Provides functions for color manipulation, CSS variable extraction,\n * and integration with material-color-utilities.\n */\n\nimport { argbFromHex, themeFromSourceColor, type Theme } from \"@material/material-color-utilities\";\n\n/**\n * Material Design 3 color roles\n */\nexport type MD3ColorRole =\n | \"primary\"\n | \"on-primary\"\n | \"primary-container\"\n | \"on-primary-container\"\n | \"secondary\"\n | \"on-secondary\"\n | \"secondary-container\"\n | \"on-secondary-container\"\n | \"tertiary\"\n | \"on-tertiary\"\n | \"tertiary-container\"\n | \"on-tertiary-container\"\n | \"error\"\n | \"on-error\"\n | \"error-container\"\n | \"on-error-container\"\n | \"surface\"\n | \"on-surface\"\n | \"surface-variant\"\n | \"on-surface-variant\"\n | \"outline\"\n | \"outline-variant\"\n | \"background\"\n | \"on-background\";\n\n/**\n * Get the computed value of a CSS variable\n *\n * @param variable - CSS variable name (with or without `--` prefix)\n * @param element - Element to get computed style from (defaults to document root)\n * @returns The computed value of the CSS variable\n *\n * @example\n * ```ts\n * const primaryColor = getColorValue('--md-sys-color-primary');\n * // Returns: '#6750a4'\n *\n * const primaryColor = getColorValue('md-sys-color-primary');\n * // Also returns: '#6750a4'\n * ```\n */\nexport function getColorValue(\n variable: string,\n element: HTMLElement = document.documentElement\n): string {\n const varName = variable.startsWith(\"--\") ? variable : `--${variable}`;\n return getComputedStyle(element).getPropertyValue(varName).trim();\n}\n\n/**\n * Get a Material Design 3 color token value\n *\n * @param role - MD3 color role name\n * @returns The hex color value\n *\n * @example\n * ```ts\n * const primary = getMD3Color('primary');\n * // Returns: '#6750a4'\n *\n * const onPrimary = getMD3Color('on-primary');\n * // Returns: '#ffffff'\n * ```\n */\nexport function getMD3Color(role: MD3ColorRole): string {\n return getColorValue(`--md-sys-color-${role}`);\n}\n\n/**\n * Add opacity to a hex color\n *\n * @param color - Hex color string (with or without #)\n * @param opacity - Opacity value (0-1)\n * @returns Hex color with opacity (8-digit hex)\n *\n * @example\n * ```ts\n * withOpacity('#6750a4', 0.5);\n * // Returns: '#6750a480'\n *\n * withOpacity('6750a4', 0.12);\n * // Returns: '#6750a41f'\n * ```\n */\nexport function withOpacity(color: string, opacity: number): string {\n const hex = color.replace(\"#\", \"\");\n const alpha = Math.round(Math.max(0, Math.min(1, opacity)) * 255)\n .toString(16)\n .padStart(2, \"0\");\n return `#${hex}${alpha}`;\n}\n\n/**\n * Convert hex color to RGB object\n *\n * @param hex - Hex color string (with or without #)\n * @returns RGB object with r, g, b values (0-255)\n *\n * @example\n * ```ts\n * hexToRgb('#6750a4');\n * // Returns: { r: 103, g: 80, b: 164 }\n * ```\n */\nexport function hexToRgb(hex: string): { r: number; g: number; b: number } {\n const h = hex.replace(\"#\", \"\");\n const r = parseInt(h.substring(0, 2), 16);\n const g = parseInt(h.substring(2, 4), 16);\n const b = parseInt(h.substring(4, 6), 16);\n return { r, g, b };\n}\n\n/**\n * Convert RGB to hex color\n *\n * @param r - Red value (0-255)\n * @param g - Green value (0-255)\n * @param b - Blue value (0-255)\n * @returns Hex color string\n *\n * @example\n * ```ts\n * rgbToHex(103, 80, 164);\n * // Returns: '#6750a4'\n * ```\n */\nexport function rgbToHex(r: number, g: number, b: number): string {\n const toHex = (n: number): string => {\n const hex = Math.max(0, Math.min(255, Math.round(n))).toString(16);\n return hex.padStart(2, \"0\");\n };\n return `#${toHex(r)}${toHex(g)}${toHex(b)}`;\n}\n\n/**\n * Generate a complete Material Design 3 theme from a seed color\n *\n * @param seedColor - Hex color to generate theme from\n * @returns Material Color Utilities Theme object\n *\n * @example\n * ```ts\n * const theme = generateMD3Theme('#6750a4');\n *\n * // Access light mode colors\n * const lightPrimary = hexFromArgb(theme.schemes.light.primary);\n * // Returns: '#6750a4'\n *\n * // Access dark mode colors\n * const darkPrimary = hexFromArgb(theme.schemes.dark.primary);\n * // Returns: '#d0bcff'\n * ```\n */\nexport function generateMD3Theme(seedColor: string): Theme {\n const argb = argbFromHex(seedColor);\n return themeFromSourceColor(argb);\n}\n\n/**\n * Material Color Utilities type exports\n *\n * Re-export commonly used types from material-color-utilities\n * for convenience and type safety.\n */\nexport type { Theme } from \"@material/material-color-utilities\";\n\n/**\n * Material Color Utilities function exports\n *\n * Re-export commonly used functions from material-color-utilities\n * for convenience.\n */\nexport { argbFromHex, hexFromArgb } from \"@material/material-color-utilities\";\n\n/**\n * State layer opacity values (Material Design 3 spec)\n *\n * These values are used for hover, focus, press, and drag states\n * in Material Design 3 components.\n *\n * @see https://m3.material.io/foundations/interaction/states/state-layers\n */\nexport const STATE_LAYER_OPACITY = {\n hover: 0.08,\n focus: 0.12,\n press: 0.12,\n drag: 0.16,\n} as const;\n\n/**\n * Apply a state layer opacity to a color\n *\n * @param color - Base hex color\n * @param state - State type ('hover' | 'focus' | 'press' | 'drag')\n * @returns Color with state layer opacity applied\n *\n * @example\n * ```ts\n * applyStateLayer('#6750a4', 'hover');\n * // Returns: '#6750a414' (8% opacity)\n *\n * applyStateLayer('#6750a4', 'focus');\n * // Returns: '#6750a41f' (12% opacity)\n * ```\n */\nexport function applyStateLayer(color: string, state: keyof typeof STATE_LAYER_OPACITY): string {\n return withOpacity(color, STATE_LAYER_OPACITY[state]);\n}\n","/**\n * Typography Utilities\n *\n * Utilities for working with Material Design 3 typography system.\n * Provides type-safe access to typography tokens and helper functions\n * for applying complete text styles.\n */\n\nimport { getColorValue } from \"./colors\";\n\n/**\n * Material Design 3 typography scales\n *\n * MD3 defines 5 categories of typography, each with 3 size variants.\n */\nexport type MD3TypographyScale = \"display\" | \"headline\" | \"title\" | \"body\" | \"label\";\n\n/**\n * Typography size variants\n */\nexport type MD3TypographySize = \"large\" | \"medium\" | \"small\";\n\n/**\n * Complete typography style name\n * Combination of scale and size (e.g., 'display-large', 'body-medium')\n */\nexport type MD3TypographyStyle =\n | \"display-large\"\n | \"display-medium\"\n | \"display-small\"\n | \"headline-large\"\n | \"headline-medium\"\n | \"headline-small\"\n | \"title-large\"\n | \"title-medium\"\n | \"title-small\"\n | \"body-large\"\n | \"body-medium\"\n | \"body-small\"\n | \"label-large\"\n | \"label-medium\"\n | \"label-small\";\n\n/**\n * Typography token properties\n */\nexport type TypographyProperty = \"size\" | \"line-height\" | \"weight\" | \"tracking\";\n\n/**\n * Typography style object returned by getTypographyStyle()\n */\nexport interface TypographyStyleObject {\n fontSize: string;\n lineHeight: string;\n fontWeight: string;\n letterSpacing: string;\n fontFamily?: string;\n}\n\n/**\n * Get a typography token value\n *\n * @param style - Typography style name (e.g., 'display-large', 'body-medium')\n * @param property - Property to retrieve ('size' | 'line-height' | 'weight' | 'tracking')\n * @returns The token value as a string\n *\n * @example\n * ```ts\n * getTypographyToken('display-large', 'size');\n * // Returns: '3.5625rem' (57px)\n *\n * getTypographyToken('body-medium', 'weight');\n * // Returns: '400'\n * ```\n */\nexport function getTypographyToken(\n style: MD3TypographyStyle,\n property: TypographyProperty\n): string {\n return getColorValue(`--md-sys-typescale-${style}-${property}`);\n}\n\n/**\n * Get a complete typography style object\n *\n * Returns a style object with all typography properties that can be\n * spread directly into a React component's style prop.\n *\n * @param style - Typography style name\n * @param includeFontFamily - Whether to include font-family (default: false)\n * @returns Typography style object for React inline styles\n *\n * @example\n * ```tsx\n * const displayStyle = getTypographyStyle('display-large');\n * // Returns: {\n * // fontSize: '3.5625rem',\n * // lineHeight: '4rem',\n * // fontWeight: '400',\n * // letterSpacing: '-0.25px'\n * // }\n *\n * <h1 style={displayStyle}>Display Large Text</h1>\n * ```\n *\n * @example\n * ```tsx\n * // With font family\n * const bodyStyle = getTypographyStyle('body-medium', true);\n * // Returns: {\n * // fontSize: '0.875rem',\n * // lineHeight: '1.25rem',\n * // fontWeight: '400',\n * // letterSpacing: '0.25px',\n * // fontFamily: 'system-ui, -apple-system, ...'\n * // }\n * ```\n */\nexport function getTypographyStyle(\n style: MD3TypographyStyle,\n includeFontFamily = false\n): TypographyStyleObject {\n const styleObject: TypographyStyleObject = {\n fontSize: getTypographyToken(style, \"size\"),\n lineHeight: getTypographyToken(style, \"line-height\"),\n fontWeight: getTypographyToken(style, \"weight\"),\n letterSpacing: getTypographyToken(style, \"tracking\"),\n };\n\n if (includeFontFamily) {\n styleObject.fontFamily = getColorValue(\"--md-sys-typescale-font-family-plain\");\n }\n\n return styleObject;\n}\n\n/**\n * Get font family token value\n *\n * @param variant - Font family variant ('plain' | 'brand')\n * @returns Font family stack\n *\n * @example\n * ```ts\n * getFontFamily('plain');\n * // Returns: 'system-ui, -apple-system, Segoe UI, Roboto, ...'\n *\n * getFontFamily('brand');\n * // Returns: Same as plain (can be customized via CSS variables)\n * ```\n */\nexport function getFontFamily(variant: \"plain\" | \"brand\" = \"plain\"): string {\n return getColorValue(`--md-sys-typescale-font-family-${variant}`);\n}\n\n/**\n * Typography scale recommendations for semantic HTML elements\n *\n * Maps HTML elements to recommended MD3 typography styles.\n * Based on Material Design 3 guidelines.\n */\nexport const TYPOGRAPHY_ELEMENT_MAP = {\n h1: \"display-large\",\n h2: \"display-medium\",\n h3: \"headline-large\",\n h4: \"headline-medium\",\n h5: \"headline-small\",\n h6: \"title-large\",\n p: \"body-large\",\n span: \"body-medium\",\n small: \"body-small\",\n button: \"label-large\",\n label: \"label-medium\",\n caption: \"label-small\",\n} as const satisfies Record<string, MD3TypographyStyle>;\n\n/**\n * Get recommended typography style for an HTML element\n *\n * @param element - HTML element tag name\n * @returns Recommended MD3 typography style\n *\n * @example\n * ```ts\n * getTypographyForElement('h1');\n * // Returns: 'display-large'\n *\n * getTypographyForElement('button');\n * // Returns: 'label-large'\n * ```\n */\nexport function getTypographyForElement(\n element: keyof typeof TYPOGRAPHY_ELEMENT_MAP\n): MD3TypographyStyle {\n return TYPOGRAPHY_ELEMENT_MAP[element];\n}\n\n/**\n * Typography scale usage guidelines\n *\n * Provides semantic context for when to use each typography scale.\n */\nexport const TYPOGRAPHY_USAGE = {\n display: \"Large, expressive text for hero sections and marketing\",\n headline: \"High-emphasis text for titles and important headings\",\n title: \"Medium-emphasis text for section headers and card titles\",\n body: \"Plain text for paragraphs, lists, and general content\",\n label: \"UI labels, buttons, tabs, and form elements\",\n} as const satisfies Record<MD3TypographyScale, string>;\n\n/**\n * Create a typography CSS class name\n *\n * Generates a consistent class name for typography styles.\n * Useful for creating utility classes or component variants.\n *\n * @param style - Typography style name\n * @returns CSS class name string\n *\n * @example\n * ```ts\n * getTypographyClassName('display-large');\n * // Returns: 'text-display-large'\n *\n * getTypographyClassName('body-medium');\n * // Returns: 'text-body-medium'\n * ```\n */\nexport function getTypographyClassName(style: MD3TypographyStyle): string {\n return `text-${style}`;\n}\n\n/**\n * Responsive typography helper\n *\n * Creates a style object that adapts typography across breakpoints.\n *\n * @param mobile - Typography style for mobile screens\n * @param tablet - Typography style for tablet screens (optional)\n * @param desktop - Typography style for desktop screens (optional)\n * @returns Object with styles for different breakpoints\n *\n * @example\n * ```tsx\n * const responsiveTitle = getResponsiveTypography(\n * 'headline-small',\n * 'headline-medium',\n * 'headline-large'\n * );\n *\n * // Use with CSS-in-JS or styled-components\n * const Title = styled.h2`\n * ${responsiveTitle.mobile}\n *\n * @media (min-width: 768px) {\n * ${responsiveTitle.tablet}\n * }\n *\n * @media (min-width: 1024px) {\n * ${responsiveTitle.desktop}\n * }\n * `;\n * ```\n */\nexport function getResponsiveTypography(\n mobile: MD3TypographyStyle,\n tablet?: MD3TypographyStyle,\n desktop?: MD3TypographyStyle\n): {\n mobile: TypographyStyleObject;\n tablet?: TypographyStyleObject;\n desktop?: TypographyStyleObject;\n} {\n return {\n mobile: getTypographyStyle(mobile),\n ...(tablet && { tablet: getTypographyStyle(tablet) }),\n ...(desktop && { desktop: getTypographyStyle(desktop) }),\n };\n}\n\n/**\n * Convert rem to pixels (assuming 16px base)\n *\n * @param rem - Rem value (with or without 'rem' suffix)\n * @returns Pixel value\n *\n * @example\n * ```ts\n * remToPx('1.5rem');\n * // Returns: 24\n *\n * remToPx('3.5625rem');\n * // Returns: 57\n * ```\n */\nexport function remToPx(rem: string): number {\n const remValue = parseFloat(rem.replace(\"rem\", \"\"));\n return remValue * 16;\n}\n\n/**\n * Convert pixels to rem (assuming 16px base)\n *\n * @param px - Pixel value (with or without 'px' suffix)\n * @returns Rem value as string\n *\n * @example\n * ```ts\n * pxToRem(24);\n * // Returns: '1.5rem'\n *\n * pxToRem('57px');\n * // Returns: '3.5625rem'\n * ```\n */\nexport function pxToRem(px: number | string): string {\n const pxValue = typeof px === \"string\" ? parseFloat(px.replace(\"px\", \"\")) : px;\n return `${pxValue / 16}rem`;\n}\n\n/**\n * Truncate text with ellipsis\n *\n * Returns CSS properties for single or multi-line text truncation.\n *\n * @param lines - Number of lines before truncation (1 for single-line)\n * @returns CSS properties object\n *\n * @example\n * ```tsx\n * // Single line truncation\n * const singleLine = truncateText(1);\n * <div style={singleLine}>Long text here...</div>\n *\n * // Multi-line truncation (3 lines)\n * const multiLine = truncateText(3);\n * <p style={multiLine}>Long paragraph text here...</p>\n * ```\n */\nexport function truncateText(lines = 1): React.CSSProperties {\n if (lines === 1) {\n return {\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n whiteSpace: \"nowrap\",\n };\n }\n\n return {\n display: \"-webkit-box\",\n WebkitLineClamp: lines,\n WebkitBoxOrient: \"vertical\",\n overflow: \"hidden\",\n textOverflow: \"ellipsis\",\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {useCallback, useEffect, useRef, useState} from 'react';\nimport {useLayoutEffect} from './useLayoutEffect';\nimport {useSSRSafeId} from '@react-aria/ssr';\nimport {useValueEffect} from './';\n\n// copied from SSRProvider.tsx to reduce exports, if needed again, consider sharing\nlet canUseDOM = Boolean(\n typeof window !== 'undefined' &&\n window.document &&\n window.document.createElement\n);\n\nexport let idsUpdaterMap: Map<string, { current: string | null }[]> = new Map();\n// This allows us to clean up the idsUpdaterMap when the id is no longer used.\n// Map is a strong reference, so unused ids wouldn't be cleaned up otherwise.\n// This can happen in suspended components where mount/unmount is not called.\nlet registry;\nif (typeof FinalizationRegistry !== 'undefined') {\n registry = new FinalizationRegistry<string>((heldValue) => {\n idsUpdaterMap.delete(heldValue);\n });\n}\n\n/**\n * If a default is not provided, generate an id.\n * @param defaultId - Default component id.\n */\nexport function useId(defaultId?: string): string {\n let [value, setValue] = useState(defaultId);\n let nextId = useRef(null);\n\n let res = useSSRSafeId(value);\n let cleanupRef = useRef(null);\n\n if (registry) {\n registry.register(cleanupRef, res);\n }\n\n if (canUseDOM) {\n const cacheIdRef = idsUpdaterMap.get(res);\n if (cacheIdRef && !cacheIdRef.includes(nextId)) {\n cacheIdRef.push(nextId);\n } else {\n idsUpdaterMap.set(res, [nextId]);\n }\n }\n\n useLayoutEffect(() => {\n let r = res;\n return () => {\n // In Suspense, the cleanup function may be not called\n // when it is though, also remove it from the finalization registry.\n if (registry) {\n registry.unregister(cleanupRef);\n }\n idsUpdaterMap.delete(r);\n };\n }, [res]);\n\n // This cannot cause an infinite loop because the ref is always cleaned up.\n // eslint-disable-next-line\n useEffect(() => {\n let newId = nextId.current;\n if (newId) { setValue(newId); }\n\n return () => {\n if (newId) { nextId.current = null; }\n };\n });\n\n return res;\n}\n\n/**\n * Merges two ids.\n * Different ids will trigger a side-effect and re-render components hooked up with `useId`.\n */\nexport function mergeIds(idA: string, idB: string): string {\n if (idA === idB) {\n return idA;\n }\n\n let setIdsA = idsUpdaterMap.get(idA);\n if (setIdsA) {\n setIdsA.forEach(ref => (ref.current = idB));\n return idB;\n }\n\n let setIdsB = idsUpdaterMap.get(idB);\n if (setIdsB) {\n setIdsB.forEach((ref) => (ref.current = idA));\n return idA;\n }\n\n return idB;\n}\n\n/**\n * Used to generate an id, and after render, check if that id is rendered so we know\n * if we can use it in places such as labelledby.\n * @param depArray - When to recalculate if the id is in the DOM.\n */\nexport function useSlotId(depArray: ReadonlyArray<any> = []): string {\n let id = useId();\n let [resolvedId, setResolvedId] = useValueEffect(id);\n let updateId = useCallback(() => {\n setResolvedId(function *() {\n yield id;\n\n yield document.getElementById(id) ? id : undefined;\n });\n }, [id, setResolvedId]);\n\n useLayoutEffect(updateId, [id, updateId, ...depArray]);\n\n return resolvedId;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\n/**\n * Calls all functions in the order they were chained with the same arguments.\n */\nexport function chain(...callbacks: any[]): (...args: any[]) => void {\n return (...args: any[]) => {\n for (let callback of callbacks) {\n if (typeof callback === 'function') {\n callback(...args);\n }\n }\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {chain} from './chain';\nimport clsx from 'clsx';\nimport {mergeIds} from './useId';\n\ninterface Props {\n [key: string]: any\n}\n\ntype PropsArg = Props | null | undefined;\n\n// taken from: https://stackoverflow.com/questions/51603250/typescript-3-parameter-list-intersection-type/51604379#51604379\ntype TupleTypes<T> = { [P in keyof T]: T[P] } extends { [key: number]: infer V } ? NullToObject<V> : never;\ntype NullToObject<T> = T extends (null | undefined) ? {} : T;\n\ntype UnionToIntersection<U> = (U extends any ? (k: U) => void : never) extends ((k: infer I) => void) ? I : never;\n\n/**\n * Merges multiple props objects together. Event handlers are chained,\n * classNames are combined, and ids are deduplicated.\n * For all other props, the last prop object overrides all previous ones.\n * @param args - Multiple sets of props to merge together.\n */\nexport function mergeProps<T extends PropsArg[]>(...args: T): UnionToIntersection<TupleTypes<T>> {\n // Start with a base clone of the first argument. This is a lot faster than starting\n // with an empty object and adding properties as we go.\n let result: Props = {...args[0]};\n for (let i = 1; i < args.length; i++) {\n let props = args[i];\n for (let key in props) {\n let a = result[key];\n let b = props[key];\n\n // Chain events\n if (\n typeof a === 'function' &&\n typeof b === 'function' &&\n // This is a lot faster than a regex.\n key[0] === 'o' &&\n key[1] === 'n' &&\n key.charCodeAt(2) >= /* 'A' */ 65 &&\n key.charCodeAt(2) <= /* 'Z' */ 90\n ) {\n result[key] = chain(a, b);\n\n // Merge classnames, sometimes classNames are empty string which eval to false, so we just need to do a type check\n } else if (\n (key === 'className' || key === 'UNSAFE_className') &&\n typeof a === 'string' &&\n typeof b === 'string'\n ) {\n result[key] = clsx(a, b);\n } else if (key === 'id' && a && b) {\n result.id = mergeIds(a, b);\n // Override others\n } else {\n result[key] = b !== undefined ? b : a;\n }\n }\n }\n\n return result as UnionToIntersection<TupleTypes<T>>;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {AriaLabelingProps, DOMProps, GlobalDOMAttributes, LinkDOMProps} from '@react-types/shared';\n\nconst DOMPropNames = new Set([\n 'id'\n]);\n\nconst labelablePropNames = new Set([\n 'aria-label',\n 'aria-labelledby',\n 'aria-describedby',\n 'aria-details'\n]);\n\n// See LinkDOMProps in dom.d.ts.\nconst linkPropNames = new Set([\n 'href',\n 'hrefLang',\n 'target',\n 'rel',\n 'download',\n 'ping',\n 'referrerPolicy'\n]);\n\nconst globalAttrs = new Set([\n 'dir',\n 'lang',\n 'hidden',\n 'inert',\n 'translate'\n]);\n\nconst globalEvents = new Set([\n 'onClick',\n 'onAuxClick',\n 'onContextMenu',\n 'onDoubleClick',\n 'onMouseDown',\n 'onMouseEnter',\n 'onMouseLeave',\n 'onMouseMove',\n 'onMouseOut',\n 'onMouseOver',\n 'onMouseUp',\n 'onTouchCancel',\n 'onTouchEnd',\n 'onTouchMove',\n 'onTouchStart',\n 'onPointerDown',\n 'onPointerMove',\n 'onPointerUp',\n 'onPointerCancel',\n 'onPointerEnter',\n 'onPointerLeave',\n 'onPointerOver',\n 'onPointerOut',\n 'onGotPointerCapture',\n 'onLostPointerCapture',\n 'onScroll',\n 'onWheel',\n 'onAnimationStart',\n 'onAnimationEnd',\n 'onAnimationIteration',\n 'onTransitionCancel',\n 'onTransitionEnd',\n 'onTransitionRun',\n 'onTransitionStart'\n]);\n\ninterface Options {\n /**\n * If labelling associated aria properties should be included in the filter.\n */\n labelable?: boolean,\n /** Whether the element is a link and should include DOM props for <a> elements. */\n isLink?: boolean,\n /** Whether to include global DOM attributes. */\n global?: boolean,\n /** Whether to include DOM events. */\n events?: boolean,\n /**\n * A Set of other property names that should be included in the filter.\n */\n propNames?: Set<string>\n}\n\nconst propRe = /^(data-.*)$/;\n\n/**\n * Filters out all props that aren't valid DOM props or defined via override prop obj.\n * @param props - The component props to be filtered.\n * @param opts - Props to override.\n */\nexport function filterDOMProps(props: DOMProps & AriaLabelingProps & LinkDOMProps & GlobalDOMAttributes, opts: Options = {}): DOMProps & AriaLabelingProps & GlobalDOMAttributes {\n let {labelable, isLink, global, events = global, propNames} = opts;\n let filteredProps = {};\n\n for (const prop in props) {\n if (\n Object.prototype.hasOwnProperty.call(props, prop) && (\n DOMPropNames.has(prop) ||\n (labelable && labelablePropNames.has(prop)) ||\n (isLink && linkPropNames.has(prop)) ||\n (global && globalAttrs.has(prop)) ||\n (events && (globalEvents.has(prop) || (prop.endsWith('Capture') && globalEvents.has(prop.slice(0, -7))))) ||\n propNames?.has(prop) ||\n propRe.test(prop)\n )\n ) {\n filteredProps[prop] = props[prop];\n }\n }\n\n return filteredProps;\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport React, {SetStateAction, useCallback, useEffect, useReducer, useRef, useState} from 'react';\n\n// Use the earliest effect possible to reset the ref below.\nconst useEarlyEffect: typeof React.useLayoutEffect = typeof document !== 'undefined'\n ? React['useInsertionEffect'] ?? React.useLayoutEffect\n : () => {};\n\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined>, defaultValue: Exclude<T, undefined> | undefined, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];\nexport function useControlledState<T, C = T>(value: Exclude<T, undefined> | undefined, defaultValue: Exclude<T, undefined>, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void];\nexport function useControlledState<T, C = T>(value: T, defaultValue: T, onChange?: (v: C, ...args: any[]) => void): [T, (value: SetStateAction<T>, ...args: any[]) => void] {\n // Store the value in both state and a ref. The state value will only be used when uncontrolled.\n // The ref is used to track the most current value, which is passed to the function setState callback.\n let [stateValue, setStateValue] = useState(value || defaultValue);\n let valueRef = useRef(stateValue);\n\n let isControlledRef = useRef(value !== undefined);\n let isControlled = value !== undefined;\n useEffect(() => {\n let wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled && process.env.NODE_ENV !== 'production') {\n console.warn(`WARN: A component changed from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}.`);\n }\n isControlledRef.current = isControlled;\n }, [isControlled]);\n\n // After each render, update the ref to the current value.\n // This ensures that the setState callback argument is reset.\n // Note: the effect should not have any dependencies so that controlled values always reset.\n let currentValue = isControlled ? value : stateValue;\n useEarlyEffect(() => {\n valueRef.current = currentValue;\n });\n\n let [, forceUpdate] = useReducer(() => ({}), {});\n let setValue = useCallback((value: SetStateAction<T>, ...args: any[]) => {\n // @ts-ignore - TS doesn't know that T cannot be a function.\n let newValue = typeof value === 'function' ? value(valueRef.current) : value;\n if (!Object.is(valueRef.current, newValue)) {\n // Update the ref so that the next setState callback has the most recent value.\n valueRef.current = newValue;\n\n setStateValue(newValue);\n\n // Always trigger a re-render, even when controlled, so that the layout effect above runs to reset the value.\n forceUpdate();\n\n // Trigger onChange. Note that if setState is called multiple times in a single event,\n // onChange will be called for each one instead of only once.\n onChange?.(newValue, ...args);\n }\n }, [onChange]);\n\n return [currentValue, setValue];\n}\n","import { forwardRef, useRef } from \"react\";\nimport { useButton } from \"react-aria\";\nimport type { AriaButtonProps } from \"react-aria\";\nimport { mergeProps } from \"@react-aria/utils\";\n\n/**\n * Headless Button Component (Layer 2)\n *\n * Unstyled button primitive using React Aria for accessibility.\n * Provides behavior only - bring your own styles.\n *\n * Features:\n * - Full keyboard navigation (Enter, Space)\n * - Screen reader support\n * - Touch/pointer event handling\n * - Focus management\n * - Disabled state handling\n *\n * @example\n * ```tsx\n * // Use for custom styling\n * <ButtonHeadless className=\"custom-button-class\">\n * Click me\n * </ButtonHeadless>\n * ```\n */\nexport interface ButtonHeadlessProps extends AriaButtonProps {\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * Button content\n */\n children: React.ReactNode;\n\n /**\n * Tab index for keyboard navigation\n * @default 0\n */\n tabIndex?: number;\n\n /**\n * Mouse down handler (for ripple effect)\n */\n onMouseDown?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n}\n\nexport const ButtonHeadless = forwardRef<HTMLButtonElement, ButtonHeadlessProps>(\n ({ className, children, tabIndex = 0, onMouseDown, type, ...restProps }, forwardedRef) => {\n // Internal ref for React Aria\n const internalRef = useRef<HTMLButtonElement>(null);\n\n // Merge internal ref with forwarded ref\n const ref = (forwardedRef ?? internalRef) as React.RefObject<HTMLButtonElement>;\n\n // React Aria hook - handles all accessibility\n const { buttonProps } = useButton(\n {\n ...restProps,\n // Ensure element type is 'button' for proper semantics\n elementType: \"button\",\n },\n ref\n );\n\n // Filter out React Aria-specific props that shouldn't be on DOM elements\n const {\n isDisabled: _isDisabled,\n onPress: _onPress,\n onPressStart: _onPressStart,\n onPressEnd: _onPressEnd,\n onPressChange: _onPressChange,\n onPressUp: _onPressUp,\n ...htmlAttrs\n } = restProps;\n\n // Merge React Aria props with custom props and HTML attributes\n // Order matters: buttonProps first, then custom props/HTML attributes to allow overrides\n const mergedProps = mergeProps(\n buttonProps,\n {\n tabIndex,\n className,\n onMouseDown,\n },\n htmlAttrs // Pass through only HTML attributes (title, data-*, etc.)\n );\n\n return (\n // eslint-disable-next-line react/button-has-type -- type is dynamically passed from props\n <button {...mergedProps} ref={ref} type={type ?? \"button\"}>\n {children}\n </button>\n );\n }\n);\n\nButtonHeadless.displayName = \"ButtonHeadless\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n/**\n * Material Design 3 Button Variants (CVA)\n *\n * Type-safe variant management for Button component.\n * Uses Tailwind CSS classes mapped to MD3 design tokens.\n */\nexport const buttonVariants = cva(\n [\n // Base classes (always applied)\n \"relative inline-flex items-center justify-center cursor-pointer\",\n \"overflow-hidden rounded-full font-medium\",\n \"transition-all duration-200\",\n \"tracking-[0.1px]\", // MD3 spec: +0.1px letter-spacing for label-large\n \"focus-visible:outline-primary focus-visible:outline-2 focus-visible:outline-offset-2\",\n\n // State layers (hover, focus, active) - MD3 spec: 8%/12%/12% opacity\n \"before:absolute before:inset-0 before:rounded-[inherit] before:transition-opacity before:duration-200\",\n \"before:bg-current before:opacity-0\",\n \"hover:before:opacity-8\",\n \"focus-visible:before:opacity-12\",\n \"active:before:opacity-12\",\n ],\n {\n variants: {\n /**\n * Button variant (MD3 specification)\n */\n variant: {\n filled: \"shadow-none hover:shadow-elevation-1\", // MD3: gains elevation on hover\n outlined: \"bg-transparent border border-outline\",\n tonal: \"\",\n elevated: \"shadow-elevation-1 hover:shadow-elevation-2\", // MD3: level 1 → level 2 on hover\n text: \"bg-transparent\",\n },\n\n /**\n * Color scheme (MD3 color roles)\n */\n color: {\n primary: \"\",\n secondary: \"\",\n tertiary: \"\",\n error: \"\",\n },\n\n /**\n * Button size\n */\n size: {\n small: \"h-8 px-4 text-sm gap-2\",\n medium: \"h-10 px-6 text-sm gap-2\",\n large: \"h-12 px-8 text-base gap-3\",\n },\n\n /**\n * Full width variant\n */\n fullWidth: {\n true: \"w-full\",\n false: \"\",\n },\n\n /**\n * Disabled state (MD3 spec: container 12% opacity, content 38% opacity)\n */\n disabled: {\n true: [\n \"pointer-events-none cursor-not-allowed\",\n \"bg-on-surface/12\", // MD3: disabled container uses on-surface at 12%\n \"text-on-surface/38\", // MD3: disabled text/icons use on-surface at 38%\n \"border-on-surface/12\", // For outlined variant\n \"shadow-none\", // Remove elevation when disabled\n ],\n false: \"\",\n },\n\n /**\n * Loading state\n */\n loading: {\n true: \"cursor-wait\",\n false: \"\",\n },\n },\n\n /**\n * Compound variants - combinations of variant + color\n */\n compoundVariants: [\n // ====================\n // FILLED VARIANTS\n // ====================\n {\n variant: \"filled\",\n color: \"primary\",\n className: \"bg-primary text-on-primary\",\n },\n {\n variant: \"filled\",\n color: \"secondary\",\n className: \"bg-secondary text-on-secondary\",\n },\n {\n variant: \"filled\",\n color: \"tertiary\",\n className: \"bg-tertiary text-on-tertiary\",\n },\n {\n variant: \"filled\",\n color: \"error\",\n className: \"bg-error text-on-error\",\n },\n\n // ====================\n // OUTLINED VARIANTS\n // ====================\n {\n variant: \"outlined\",\n color: \"primary\",\n className: \"text-primary\",\n },\n {\n variant: \"outlined\",\n color: \"secondary\",\n className: \"text-secondary\",\n },\n {\n variant: \"outlined\",\n color: \"tertiary\",\n className: \"text-tertiary\",\n },\n {\n variant: \"outlined\",\n color: \"error\",\n className: \"text-error\",\n },\n\n // ====================\n // TONAL VARIANTS\n // ====================\n {\n variant: \"tonal\",\n color: \"primary\",\n className: \"bg-secondary-container text-on-secondary-container\",\n },\n {\n variant: \"tonal\",\n color: \"secondary\",\n className: \"bg-secondary-container text-on-secondary-container\",\n },\n {\n variant: \"tonal\",\n color: \"tertiary\",\n className: \"bg-tertiary-container text-on-tertiary-container\",\n },\n {\n variant: \"tonal\",\n color: \"error\",\n className: \"bg-error-container text-on-error-container\",\n },\n\n // ====================\n // ELEVATED VARIANTS\n // ====================\n {\n variant: \"elevated\",\n color: \"primary\",\n className: \"bg-surface-container-low text-primary\",\n },\n {\n variant: \"elevated\",\n color: \"secondary\",\n className: \"bg-surface-container-low text-secondary\",\n },\n {\n variant: \"elevated\",\n color: \"tertiary\",\n className: \"bg-surface-container-low text-tertiary\",\n },\n {\n variant: \"elevated\",\n color: \"error\",\n className: \"bg-surface-container-low text-error\",\n },\n\n // ====================\n // TEXT VARIANTS\n // ====================\n {\n variant: \"text\",\n color: \"primary\",\n className: \"text-primary\",\n },\n {\n variant: \"text\",\n color: \"secondary\",\n className: \"text-secondary\",\n },\n {\n variant: \"text\",\n color: \"tertiary\",\n className: \"text-tertiary\",\n },\n {\n variant: \"text\",\n color: \"error\",\n className: \"text-error\",\n },\n ],\n\n /**\n * Default variants\n */\n defaultVariants: {\n variant: \"filled\",\n color: \"primary\",\n size: \"medium\",\n fullWidth: false,\n disabled: false,\n loading: false,\n },\n }\n);\n\n/**\n * Extract variant prop types from CVA\n */\nexport type ButtonVariants = VariantProps<typeof buttonVariants>;\n","import { useRef, useCallback, useState, type MouseEvent } from \"react\";\n\n/**\n * Ripple state for tracking individual ripple animations\n */\ninterface Ripple {\n key: number;\n x: number;\n y: number;\n size: number;\n}\n\n/**\n * Options for useRipple hook\n */\ninterface UseRippleOptions {\n /**\n * Disable ripple effect\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Color of the ripple (currentColor by default)\n */\n color?: string;\n\n /**\n * Duration of ripple animation in ms\n * @default 450\n */\n duration?: number;\n}\n\n/**\n * Hook for Material Design 3 ripple effect\n *\n * Creates a ripple animation that emanates from the click/touch point.\n * The ripple is bounded to the container and follows MD3 motion specs.\n *\n * @example\n * ```tsx\n * function MyButton() {\n * const { onMouseDown, ripples } = useRipple();\n *\n * return (\n * <button onMouseDown={onMouseDown}>\n * Click me\n * {ripples}\n * </button>\n * );\n * }\n * ```\n */\nexport function useRipple(options: UseRippleOptions = {}): {\n onMouseDown: (event: MouseEvent<HTMLElement>) => void;\n ripples: React.ReactNode;\n} {\n const { disabled = false, color = \"currentColor\", duration = 450 } = options;\n\n const [ripples, setRipples] = useState<Ripple[]>([]);\n const rippleKeyCounter = useRef(0);\n\n /**\n * Create ripple on mouse down\n */\n const onMouseDown = useCallback(\n (event: MouseEvent<HTMLElement>) => {\n if (disabled) return;\n\n const element = event.currentTarget;\n const rect = element.getBoundingClientRect();\n\n // Calculate ripple position relative to element\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n\n // Calculate ripple size (diameter that covers entire element)\n const sizeX = Math.max(x, rect.width - x);\n const sizeY = Math.max(y, rect.height - y);\n const size = Math.sqrt(sizeX ** 2 + sizeY ** 2) * 2;\n\n const key = rippleKeyCounter.current++;\n\n // Add new ripple\n setRipples((prev) => [...prev, { key, x, y, size }]);\n\n // Remove ripple after animation completes\n setTimeout(() => {\n setRipples((prev) => prev.filter((r) => r.key !== key));\n }, duration);\n },\n [disabled, duration]\n );\n\n /**\n * Ripple elements to render\n */\n const rippleElements = disabled ? null : (\n <span\n data-ripple-container\n className=\"pointer-events-none absolute inset-0 overflow-hidden rounded-[inherit]\"\n >\n {ripples.map((ripple) => (\n <span\n key={ripple.key}\n className=\"animate-ripple absolute rounded-full opacity-12\"\n style={{\n left: ripple.x,\n top: ripple.y,\n width: ripple.size,\n height: ripple.size,\n transform: \"translate(-50%, -50%) scale(0)\",\n backgroundColor: color,\n animationDuration: `${duration}ms`,\n }}\n />\n ))}\n </span>\n );\n\n return {\n onMouseDown,\n ripples: rippleElements,\n };\n}\n","\"use client\";\n\nimport { forwardRef } from \"react\";\nimport type React from \"react\";\nimport { ButtonHeadless } from \"./ButtonHeadless\";\nimport { buttonVariants, type ButtonVariants } from \"./Button.variants\";\nimport { cn } from \"../../utils/cn\";\nimport { useRipple } from \"../../hooks/useRipple\";\nimport type { ButtonProps } from \"./Button.types\";\n\n/**\n * Loading spinner component\n */\nconst Spinner = (): React.ReactElement => (\n <svg\n role=\"progressbar\"\n aria-label=\"Loading\"\n className=\"h-4 w-4 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n);\n\n/**\n * Material Design 3 Button Component (Layer 3: Styled)\n *\n * Built on React Aria for world-class accessibility.\n * Uses CVA for type-safe variant management.\n * Styled with Tailwind CSS using MD3 design tokens.\n *\n * Features:\n * - ✅ 5 MD3 variants: filled, outlined, tonal, elevated, text\n * - ✅ 4 color schemes: primary, secondary, tertiary, error\n * - ✅ 3 sizes: small, medium, large\n * - ✅ Loading state with spinner\n * - ✅ Ripple effect (Material Design)\n * - ✅ Full keyboard accessibility (via React Aria)\n * - ✅ Screen reader support (via React Aria)\n * - ✅ Focus management (via React Aria)\n *\n * MD3 Specifications:\n * - Height: 40dp (medium), 32dp (small), 48dp (large)\n * - Typography: Label Large (14px, 500 weight, +0.1px letter-spacing)\n * - Icon size: 18px × 18px (per MD3 spec)\n * - State layers: 8% hover, 12% focus/pressed\n * - Elevation: Level 1 on hover (filled), Level 1→2 (elevated)\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Button>Click me</Button>\n *\n * // With variant and color\n * <Button variant=\"outlined\" color=\"secondary\">\n * Secondary Action\n * </Button>\n *\n * // With icon (MD3 spec: icons should be 18px × 18px)\n * <Button icon={<IconAdd className=\"h-[18px] w-[18px]\" />}>\n * Add Item\n * </Button>\n *\n * // Loading state\n * <Button loading>\n * Saving...\n * </Button>\n *\n * // Disabled\n * <Button isDisabled>\n * Disabled\n * </Button>\n *\n * // Full width\n * <Button fullWidth>\n * Full Width Button\n * </Button>\n * ```\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps & Omit<ButtonVariants, \"disabled\">>(\n (\n {\n // Variant props (CVA)\n variant = \"filled\",\n color = \"primary\",\n size = \"medium\",\n fullWidth = false,\n\n // Content props\n icon,\n trailingIcon,\n children,\n\n // State props\n loading = false,\n disableRipple = false,\n isDisabled = false,\n\n // Styling\n className,\n\n // Other props\n tabIndex = 0,\n type = \"button\",\n onPress,\n ...props\n },\n ref\n ) => {\n // Development warnings\n if (process.env.NODE_ENV === \"development\") {\n if (!children) {\n console.warn(\n \"[Button] Button should have text content. Use IconButton for icon-only buttons.\"\n );\n }\n\n if (icon && trailingIcon) {\n console.warn(\"[Button] Button should have either icon or trailingIcon, not both.\");\n }\n }\n\n // Combine disabled states\n const isButtonDisabled = isDisabled || loading;\n\n // Ripple effect\n const { onMouseDown: handleRipple, ripples } = useRipple({\n disabled: isButtonDisabled || disableRipple,\n });\n\n // Handle press event (React Aria uses onPress instead of onClick)\n // Note: onPress is already handled by React Aria in ButtonHeadless\n // We just pass it through\n\n return (\n <ButtonHeadless\n {...props}\n ref={ref}\n type={type}\n isDisabled={isButtonDisabled}\n {...(onPress && { onPress })}\n tabIndex={tabIndex}\n onMouseDown={handleRipple}\n className={cn(\n // Apply CVA variants\n buttonVariants({\n variant,\n color,\n size,\n fullWidth,\n disabled: isButtonDisabled,\n loading,\n }),\n // User custom classes\n className\n )}\n >\n {/* Ripple effect */}\n {ripples}\n\n {/* Leading icon (hidden when loading) */}\n {icon && (\n <span className={cn(\"relative z-10 inline-flex shrink-0\", loading && \"invisible\")}>\n {icon}\n </span>\n )}\n\n {/* Loading spinner (shown when loading, overlays icon position) */}\n {loading && (\n <span className=\"relative z-10\">\n <Spinner />\n </span>\n )}\n\n {/* Content */}\n <span className=\"relative z-10 inline-flex items-center\">{children}</span>\n\n {/* Trailing icon (hidden when loading) */}\n {trailingIcon && (\n <span className={cn(\"relative z-10 inline-flex shrink-0\", loading && \"invisible\")}>\n {trailingIcon}\n </span>\n )}\n </ButtonHeadless>\n );\n }\n);\n\nButton.displayName = \"Button\";\n","import { forwardRef, useRef } from \"react\";\nimport { useButton } from \"react-aria\";\nimport type { AriaButtonProps } from \"react-aria\";\nimport { mergeProps, filterDOMProps } from \"@react-aria/utils\";\n\n/**\n * Headless IconButton Component (Layer 2)\n *\n * Unstyled icon button primitive using React Aria for accessibility.\n * Provides behavior only - bring your own styles.\n *\n * Features:\n * - Full keyboard navigation (Enter, Space)\n * - Screen reader support\n * - Touch/pointer event handling\n * - Focus management\n * - Disabled state handling\n * - Toggle button support (aria-pressed)\n *\n * @example\n * ```tsx\n * // Use for custom styling\n * <IconButtonHeadless className=\"custom-icon-button-class\" aria-label=\"Delete\">\n * <IconDelete />\n * </IconButtonHeadless>\n * ```\n */\nexport interface IconButtonHeadlessProps extends AriaButtonProps {\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * Icon content (React node)\n */\n children: React.ReactNode;\n\n /**\n * Tab index for keyboard navigation\n * @default 0\n */\n tabIndex?: number;\n\n /**\n * Mouse down handler (for ripple effect)\n */\n onMouseDown?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /**\n * Button type attribute\n * @default 'button'\n */\n type?: \"button\" | \"submit\" | \"reset\";\n\n /**\n * Toggle state (for toggle buttons)\n * Sets aria-pressed attribute\n */\n selected?: boolean;\n\n /**\n * REQUIRED: Accessible label for screen readers\n */\n \"aria-label\": string;\n\n /**\n * HTML title attribute for tooltip\n */\n title?: string;\n}\n\nexport const IconButtonHeadless = forwardRef<HTMLButtonElement, IconButtonHeadlessProps>(\n (\n {\n className,\n children,\n tabIndex = 0,\n onMouseDown,\n type,\n selected,\n \"aria-label\": ariaLabel,\n title,\n ...props\n },\n forwardedRef\n ) => {\n // Internal ref for React Aria\n const internalRef = useRef<HTMLButtonElement>(null);\n\n // Merge internal ref with forwarded ref\n const ref = (forwardedRef ?? internalRef) as React.RefObject<HTMLButtonElement>;\n\n // React Aria hook - handles all accessibility\n const { buttonProps } = useButton(\n {\n ...props,\n // Ensure element type is 'button' for proper semantics\n elementType: \"button\",\n // Pass aria-label\n \"aria-label\": ariaLabel,\n },\n ref\n );\n\n // Filter out React Aria-specific props that shouldn't be passed to the DOM element\n\n const domProps = filterDOMProps(props);\n\n // Merge React Aria props with custom props and filtered DOM props\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n const mergedProps: React.ButtonHTMLAttributes<HTMLButtonElement> = mergeProps(\n buttonProps,\n domProps,\n {\n tabIndex,\n className,\n onMouseDown,\n type: type ?? \"button\",\n // Add aria-pressed for toggle buttons (only if selected is defined)\n ...(selected !== undefined && { \"aria-pressed\": selected }),\n // Add title if provided\n ...(title && { title }),\n }\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ) as any;\n\n return (\n // eslint-disable-next-line react/button-has-type\n <button {...mergedProps} ref={ref} type={type ?? \"button\"}>\n {children}\n </button>\n );\n }\n);\n\nIconButtonHeadless.displayName = \"IconButtonHeadless\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n/**\n * Material Design 3 IconButton Variants (CVA)\n *\n * Type-safe variant management for IconButton component.\n * Uses Tailwind CSS classes mapped to MD3 design tokens.\n *\n * Key differences from Button:\n * - Circular shape (not pill-shaped)\n * - Fixed square dimensions\n * - No text content support\n * - 'standard' variant instead of 'elevated'\n */\nexport const iconButtonVariants = cva(\n [\n // Base classes (always applied)\n \"relative inline-flex items-center justify-center\",\n \"overflow-hidden rounded-full\", // Circular shape\n \"transition-all duration-200\",\n \"focus-visible:outline-primary focus-visible:outline-2 focus-visible:outline-offset-2\",\n\n // State layers (hover, focus, active)\n \"before:absolute before:inset-0 before:rounded-[inherit] before:transition-opacity before:duration-200\",\n \"before:bg-current before:opacity-0\",\n \"hover:before:opacity-8\",\n \"focus-visible:before:opacity-12\",\n \"active:before:opacity-12\",\n ],\n {\n variants: {\n /**\n * Button variant (MD3 specification)\n */\n variant: {\n standard: \"bg-transparent\", // No background\n filled: \"shadow-none\", // Solid background\n tonal: \"\", // Container background\n outlined: \"bg-transparent border border-outline\",\n },\n\n /**\n * Color scheme (MD3 color roles)\n */\n color: {\n primary: \"\",\n secondary: \"\",\n tertiary: \"\",\n error: \"\",\n },\n\n /**\n * Button size (square dimensions)\n */\n size: {\n small: \"h-8 w-8\", // 32×32px\n medium: \"h-10 w-10\", // 40×40px (default)\n large: \"h-12 w-12\", // 48×48px\n },\n\n /**\n * Selected state (for toggle buttons)\n */\n selected: {\n true: \"\",\n false: \"\",\n },\n\n /**\n * Disabled state\n */\n isDisabled: {\n true: \"pointer-events-none cursor-not-allowed opacity-38\",\n false: \"\",\n },\n },\n\n /**\n * Compound variants - combinations of variant + color + selected\n */\n compoundVariants: [\n // ====================\n // STANDARD VARIANTS\n // ====================\n {\n variant: \"standard\",\n selected: false,\n className: \"text-on-surface-variant\",\n },\n {\n variant: \"standard\",\n selected: true,\n className: \"text-primary\",\n },\n\n // ====================\n // FILLED VARIANTS (UNSELECTED)\n // ====================\n {\n variant: \"filled\",\n color: \"primary\",\n selected: false,\n className: \"bg-primary text-on-primary\",\n },\n {\n variant: \"filled\",\n color: \"secondary\",\n selected: false,\n className: \"bg-secondary text-on-secondary\",\n },\n {\n variant: \"filled\",\n color: \"tertiary\",\n selected: false,\n className: \"bg-tertiary text-on-tertiary\",\n },\n {\n variant: \"filled\",\n color: \"error\",\n selected: false,\n className: \"bg-error text-on-error\",\n },\n\n // ====================\n // FILLED VARIANTS (SELECTED - uses container colors)\n // ====================\n {\n variant: \"filled\",\n color: \"primary\",\n selected: true,\n className: \"bg-primary-container text-on-primary-container\",\n },\n {\n variant: \"filled\",\n color: \"secondary\",\n selected: true,\n className: \"bg-secondary-container text-on-secondary-container\",\n },\n {\n variant: \"filled\",\n color: \"tertiary\",\n selected: true,\n className: \"bg-tertiary-container text-on-tertiary-container\",\n },\n {\n variant: \"filled\",\n color: \"error\",\n selected: true,\n className: \"bg-error-container text-on-error-container\",\n },\n\n // ====================\n // TONAL VARIANTS (UNSELECTED)\n // ====================\n {\n variant: \"tonal\",\n color: \"primary\",\n selected: false,\n className: \"bg-secondary-container text-on-secondary-container\",\n },\n {\n variant: \"tonal\",\n color: \"secondary\",\n selected: false,\n className: \"bg-secondary-container text-on-secondary-container\",\n },\n {\n variant: \"tonal\",\n color: \"tertiary\",\n selected: false,\n className: \"bg-tertiary-container text-on-tertiary-container\",\n },\n {\n variant: \"tonal\",\n color: \"error\",\n selected: false,\n className: \"bg-error-container text-on-error-container\",\n },\n\n // ====================\n // TONAL VARIANTS (SELECTED - uses tertiary container)\n // ====================\n {\n variant: \"tonal\",\n selected: true,\n className: \"bg-tertiary-container text-on-tertiary-container\",\n },\n\n // ====================\n // OUTLINED VARIANTS (UNSELECTED)\n // ====================\n {\n variant: \"outlined\",\n selected: false,\n className: \"text-on-surface-variant\",\n },\n\n // ====================\n // OUTLINED VARIANTS (SELECTED - uses inverse colors)\n // ====================\n {\n variant: \"outlined\",\n selected: true,\n className: \"bg-inverse-surface text-inverse-on-surface border-transparent\",\n },\n ],\n\n /**\n * Default variants\n */\n defaultVariants: {\n variant: \"standard\",\n color: \"primary\",\n size: \"medium\",\n selected: false,\n isDisabled: false,\n },\n }\n);\n\n/**\n * Extract variant prop types from CVA\n */\nexport type IconButtonVariants = VariantProps<typeof iconButtonVariants>;\n","\"use client\";\n\nimport { forwardRef } from \"react\";\nimport type React from \"react\";\nimport { IconButtonHeadless } from \"./IconButtonHeadless\";\nimport { iconButtonVariants, type IconButtonVariants } from \"./IconButton.variants\";\nimport { cn } from \"../../utils/cn\";\nimport { useRipple } from \"../../hooks/useRipple\";\nimport type { IconButtonProps } from \"./IconButton.types\";\nimport { mergeProps } from \"@react-aria/utils\";\n\n/**\n * Material Design 3 IconButton Component\n *\n * Icon-only button component following MD3 specifications.\n * Supports 4 variants, toggle mode, and enforces accessibility.\n *\n * **Key Features:**\n * - 4 variants: standard, filled, tonal, outlined\n * - Circular shape (MD3 specification)\n * - Mandatory `aria-label` for accessibility\n * - Toggle support with `selected` prop\n * - Ripple effect on interaction\n * - 48×48px minimum touch target\n *\n * @example\n * ```tsx\n * // Standard icon button\n * <IconButton aria-label=\"Delete\">\n * <IconDelete />\n * </IconButton>\n *\n * // Filled with color\n * <IconButton aria-label=\"Favorite\" variant=\"filled\" color=\"error\">\n * <IconHeart />\n * </IconButton>\n *\n * // Toggle button\n * <IconButton\n * aria-label={selected ? \"Remove favorite\" : \"Add favorite\"}\n * selected={selected}\n * onPress={() => setSelected(!selected)}\n * >\n * {selected ? <IconStarFilled /> : <IconStarOutline />}\n * </IconButton>\n * ```\n */\nexport const IconButton = forwardRef<\n HTMLButtonElement,\n IconButtonProps & Omit<IconButtonVariants, \"isDisabled\" | \"selected\">\n>(\n (\n {\n // Variant props (CVA)\n variant = \"standard\",\n color = \"primary\",\n size = \"medium\",\n // IconButton specific props\n children,\n selected,\n disableRipple = false,\n className,\n // React Aria props\n isDisabled: propIsDisabled = false,\n onPress,\n onMouseDown,\n \"aria-label\": ariaLabel,\n title,\n ...props\n },\n ref\n ) => {\n // Development warnings\n if (process.env.NODE_ENV === \"development\") {\n if (!ariaLabel) {\n console.error(\n \"[IconButton] aria-label is required for IconButton. Icon-only buttons need accessible labels for screen readers.\"\n );\n }\n\n if (!children) {\n console.warn(\"[IconButton] IconButton should have an icon as children.\");\n }\n }\n\n // Combine disabled states\n const isDisabled = propIsDisabled;\n\n // Ripple effect\n const { onMouseDown: handleRipple, ripples } = useRipple({\n disabled: isDisabled || disableRipple,\n });\n\n // Merge user's onMouseDown with ripple handler\n const mergedOnMouseDown = (e: React.MouseEvent<HTMLButtonElement>): void => {\n onMouseDown?.(e);\n handleRipple(e);\n };\n\n const mergedPropsValue = mergeProps(props, {\n ...(onPress && { onPress }),\n onMouseDown: mergedOnMouseDown,\n isDisabled,\n });\n\n return (\n <IconButtonHeadless\n ref={ref}\n className={cn(\n // Base classes\n \"relative inline-flex items-center justify-center\",\n \"overflow-hidden rounded-full\", // Circular shape\n \"transition-all duration-200\",\n \"focus-visible:outline-primary focus-visible:outline-2 focus-visible:outline-offset-2\",\n\n // State layers (hover, focus, active)\n \"before:absolute before:inset-0 before:rounded-[inherit] before:transition-opacity before:duration-200\",\n \"before:bg-current before:opacity-0\",\n \"hover:before:opacity-8\",\n \"focus-visible:before:opacity-12\",\n \"active:before:opacity-12\",\n\n // CVA variants\n iconButtonVariants({ variant, color, size, selected: selected ?? false, isDisabled }),\n\n // User custom classes\n className\n )}\n aria-label={ariaLabel}\n {...(selected !== undefined && { selected })}\n {...(title && { title })}\n {...mergedPropsValue}\n >\n {/* Ripple effect */}\n {ripples}\n\n {/* Icon content */}\n <span className=\"relative z-10 inline-flex shrink-0\">{children}</span>\n </IconButtonHeadless>\n );\n }\n);\n\nIconButton.displayName = \"IconButton\";\n","import { forwardRef, useRef } from \"react\";\nimport { useButton } from \"react-aria\";\nimport type { AriaButtonProps } from \"react-aria\";\nimport { mergeProps, filterDOMProps } from \"@react-aria/utils\";\n\n/**\n * Headless FAB Component (Layer 2)\n *\n * Unstyled FAB primitive using React Aria for accessibility.\n * Provides behavior only - bring your own styles.\n *\n * Features:\n * - Full keyboard navigation (Enter, Space)\n * - Screen reader support (requires aria-label)\n * - Touch/pointer event handling\n * - Focus management\n * - Disabled state handling\n *\n * @example\n * ```tsx\n * // Use for custom styling\n * <FABHeadless className=\"custom-fab-class\" aria-label=\"Add\">\n * <IconAdd />\n * </FABHeadless>\n * ```\n */\nexport interface FABHeadlessProps extends AriaButtonProps {\n /**\n * Additional CSS classes\n */\n className?: string;\n\n /**\n * FAB content (icon and optional text)\n */\n children: React.ReactNode;\n\n /**\n * Tab index for keyboard navigation\n * @default 0\n */\n tabIndex?: number;\n\n /**\n * Mouse down handler (for ripple effect)\n */\n onMouseDown?: (e: React.MouseEvent<HTMLButtonElement>) => void;\n\n /**\n * Button type attribute\n * @default 'button'\n */\n type?: \"button\" | \"submit\" | \"reset\";\n\n /**\n * REQUIRED: Accessible label for screen readers\n */\n \"aria-label\": string;\n\n /**\n * HTML title attribute for tooltip\n */\n title?: string;\n}\n\nexport const FABHeadless = forwardRef<HTMLButtonElement, FABHeadlessProps>(\n (\n {\n className,\n children,\n tabIndex = 0,\n onMouseDown,\n type,\n \"aria-label\": ariaLabel,\n title,\n ...props\n },\n forwardedRef\n ) => {\n // Internal ref for React Aria\n const internalRef = useRef<HTMLButtonElement>(null);\n\n // Merge internal ref with forwarded ref\n const ref = (forwardedRef ?? internalRef) as React.RefObject<HTMLButtonElement>;\n\n // React Aria hook - handles all accessibility\n const { buttonProps } = useButton(\n {\n ...props,\n elementType: \"button\",\n },\n ref\n );\n\n // Filter out React Aria-specific props that shouldn't be passed to the DOM element\n const domProps = filterDOMProps(props);\n\n // Merge React Aria props with custom props and filtered DOM props\n const mergedProps = mergeProps(buttonProps, domProps, {\n tabIndex,\n className,\n onMouseDown,\n type: type ?? \"button\",\n \"aria-label\": ariaLabel, // Add aria-label\n // Add title if provided\n ...(title && { title }),\n }) as React.ButtonHTMLAttributes<HTMLButtonElement>;\n\n return (\n // eslint-disable-next-line react/button-has-type\n <button {...mergedProps} ref={ref}>\n {children}\n </button>\n );\n }\n);\n\nFABHeadless.displayName = \"FABHeadless\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n/**\n * Material Design 3 FAB Variants (CVA)\n *\n * Type-safe variant management for FAB component.\n * Uses Tailwind CSS classes mapped to MD3 design tokens.\n *\n * Key differences from Button/IconButton:\n * - NOT fully rounded (uses specific corner radius: 12px/16px/28px)\n * - Always has elevation (shadow-elevation-3)\n * - Larger sizes (40px/56px/96px)\n * - Extended variant with variable width\n */\nexport const fabVariants = cva(\n [\n // Base classes (always applied)\n \"relative inline-flex items-center justify-center\",\n \"overflow-hidden\",\n \"transition-all duration-200\",\n \"focus-visible:outline-primary focus-visible:outline-2 focus-visible:outline-offset-2\",\n \"shrink-0\", // Prevent shrinking in flex containers\n\n // State layers (hover, focus, active)\n \"before:absolute before:inset-0 before:rounded-[inherit] before:transition-opacity before:duration-200\",\n \"before:bg-current before:opacity-0\",\n \"hover:before:opacity-8\",\n \"focus-visible:before:opacity-12\",\n \"active:before:opacity-12\",\n\n // Elevation (floating appearance)\n \"shadow-elevation-3\", // Default elevation\n \"hover:shadow-elevation-4\", // Hover elevation\n ],\n {\n variants: {\n /**\n * FAB size (controls dimensions and icon size)\n */\n size: {\n small: [\n \"h-10 w-10\", // 40×40px\n \"p-2\", // 8px padding for 24px icon\n \"rounded-xl\", // 12px corner radius (not fully rounded!)\n \"m-1\", // 4px margin for 48×48px touch target\n ],\n medium: [\n \"h-14 w-14\", // 56×56px\n \"p-4\", // 16px padding for 24px icon\n \"rounded-2xl\", // 16px corner radius\n ],\n large: [\n \"h-24 w-24\", // 96×96px\n \"p-[30px]\", // 30px padding for 36px icon\n \"rounded-[28px]\", // 28px corner radius (custom value)\n ],\n extended: [\n \"h-14\", // 56px height (same as medium)\n \"rounded-2xl\", // 16px corner radius\n \"pl-4 pr-5\", // Asymmetric padding: 16px leading, 20px trailing\n \"gap-2\", // 8px gap between icon and text\n ],\n },\n\n /**\n * Color scheme (MD3 color roles)\n */\n color: {\n primary: \"\",\n secondary: \"\",\n tertiary: \"\",\n surface: \"\",\n },\n\n /**\n * Disabled state\n */\n isDisabled: {\n true: \"pointer-events-none cursor-not-allowed !bg-on-surface/12 !text-on-surface/38 !shadow-none\",\n false: \"\",\n },\n },\n\n /**\n * Compound variants - combinations of size + color\n */\n compoundVariants: [\n // ====================\n // PRIMARY COLOR\n // ====================\n {\n color: \"primary\",\n size: \"small\",\n className: \"bg-primary-container text-on-primary-container\",\n },\n {\n color: \"primary\",\n size: \"medium\",\n className: \"bg-primary-container text-on-primary-container\",\n },\n {\n color: \"primary\",\n size: \"large\",\n className: \"bg-primary-container text-on-primary-container\",\n },\n {\n color: \"primary\",\n size: \"extended\",\n className: \"bg-primary-container text-on-primary-container\",\n },\n\n // ====================\n // SECONDARY COLOR\n // ====================\n {\n color: \"secondary\",\n size: \"small\",\n className: \"bg-secondary-container text-on-secondary-container\",\n },\n {\n color: \"secondary\",\n size: \"medium\",\n className: \"bg-secondary-container text-on-secondary-container\",\n },\n {\n color: \"secondary\",\n size: \"large\",\n className: \"bg-secondary-container text-on-secondary-container\",\n },\n {\n color: \"secondary\",\n size: \"extended\",\n className: \"bg-secondary-container text-on-secondary-container\",\n },\n\n // ====================\n // TERTIARY COLOR\n // ====================\n {\n color: \"tertiary\",\n size: \"small\",\n className: \"bg-tertiary-container text-on-tertiary-container\",\n },\n {\n color: \"tertiary\",\n size: \"medium\",\n className: \"bg-tertiary-container text-on-tertiary-container\",\n },\n {\n color: \"tertiary\",\n size: \"large\",\n className: \"bg-tertiary-container text-on-tertiary-container\",\n },\n {\n color: \"tertiary\",\n size: \"extended\",\n className: \"bg-tertiary-container text-on-tertiary-container\",\n },\n\n // ====================\n // SURFACE COLOR\n // ====================\n {\n color: \"surface\",\n size: \"small\",\n className: \"bg-surface text-primary\",\n },\n {\n color: \"surface\",\n size: \"medium\",\n className: \"bg-surface text-primary\",\n },\n {\n color: \"surface\",\n size: \"large\",\n className: \"bg-surface text-primary\",\n },\n {\n color: \"surface\",\n size: \"extended\",\n className: \"bg-surface text-primary\",\n },\n ],\n\n /**\n * Default variants\n */\n defaultVariants: {\n size: \"medium\",\n color: \"primary\",\n isDisabled: false,\n },\n }\n);\n\n/**\n * Extract variant prop types from CVA\n */\nexport type FABVariants = VariantProps<typeof fabVariants>;\n","\"use client\";\n\nimport { forwardRef } from \"react\";\nimport type React from \"react\";\nimport { FABHeadless } from \"./FABHeadless\";\nimport { fabVariants, type FABVariants } from \"./FAB.variants\";\nimport { cn } from \"../../utils/cn\";\nimport { useRipple } from \"../../hooks/useRipple\";\nimport type { FABProps } from \"./FAB.types\";\nimport { mergeProps } from \"@react-aria/utils\";\n\n/**\n * Loading spinner component\n */\nconst Spinner = (): React.ReactElement => (\n <svg\n role=\"progressbar\"\n aria-label=\"Loading\"\n className=\"h-6 w-6 animate-spin\"\n xmlns=\"http://www.w3.org/2000/svg\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n >\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\" />\n <path\n className=\"opacity-75\"\n fill=\"currentColor\"\n d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"\n />\n </svg>\n);\n\n/**\n * Material Design 3 FAB (Floating Action Button) Component\n *\n * High-emphasis button for primary screen action.\n * Supports 4 sizes: small, medium, large, extended\n * Implementation uses Tailwind CSS classes mapped to MD3 tokens.\n */\nexport const FAB = forwardRef<HTMLButtonElement, FABProps & Omit<FABVariants, \"isDisabled\">>(\n (\n {\n // Variant props (CVA)\n size = \"medium\",\n color = \"primary\",\n // FAB specific props\n icon,\n children,\n \"aria-label\": ariaLabel,\n loading = false,\n disableRipple = false,\n className,\n // React Aria props\n isDisabled: propIsDisabled = false,\n onPress,\n onMouseDown,\n title,\n ...props\n },\n ref\n ) => {\n // Development warnings\n if (process.env.NODE_ENV === \"development\") {\n if (!icon) {\n console.warn(\"[FAB] FAB must have an icon. Please provide the icon prop.\");\n }\n\n if (size === \"extended\" && !children) {\n console.warn(\"[FAB] Extended FAB requires text label as children.\");\n }\n\n if (size !== \"extended\" && children) {\n console.warn(\n \"[FAB] Children (text) is only used for extended FAB. For icon-only FAB, use icon prop only.\"\n );\n }\n }\n\n // Combine disabled states\n const isDisabled = propIsDisabled || loading;\n\n // Ripple effect\n const { onMouseDown: handleRipple, ripples } = useRipple({\n disabled: isDisabled || disableRipple,\n });\n\n // Merge user's onMouseDown with ripple handler\n const mergedOnMouseDown = (e: React.MouseEvent<HTMLButtonElement>): void => {\n onMouseDown?.(e);\n handleRipple(e);\n };\n\n const mergedPropsValue = mergeProps(props, {\n ...(onPress && { onPress }),\n onMouseDown: mergedOnMouseDown,\n isDisabled,\n });\n\n return (\n <FABHeadless\n ref={ref}\n className={cn(\n // Base classes\n \"relative inline-flex items-center justify-center\",\n \"overflow-hidden transition-all duration-200\",\n \"focus-visible:outline-primary focus-visible:outline-2 focus-visible:outline-offset-2\",\n \"shrink-0\",\n\n // State layers (hover, focus, active)\n \"before:absolute before:inset-0 before:rounded-[inherit] before:transition-opacity before:duration-200\",\n \"before:bg-current before:opacity-0\",\n \"hover:before:opacity-8\",\n \"focus-visible:before:opacity-12\",\n \"active:before:opacity-12\",\n\n // Elevation\n \"shadow-elevation-3 hover:shadow-elevation-4\",\n\n // CVA variants\n fabVariants({ size, color, isDisabled }),\n\n // User custom classes\n className\n )}\n aria-label={ariaLabel}\n {...(title && { title })}\n {...mergedPropsValue}\n >\n {/* Ripple effect */}\n {ripples}\n\n {/* Icon (hidden when loading) */}\n {icon && (\n <span className={cn(\"relative z-10 inline-flex shrink-0\", loading && \"invisible\")}>\n {icon}\n </span>\n )}\n\n {/* Loading spinner (shown when loading, overlays icon position) */}\n {loading && (\n <span className=\"relative z-10\">\n <Spinner />\n </span>\n )}\n\n {/* Text label (extended FAB only) */}\n {size === \"extended\" && children && (\n <span className=\"relative z-10 inline-flex items-center text-sm font-medium tracking-[0.1px]\">\n {children}\n </span>\n )}\n </FABHeadless>\n );\n }\n);\n\nFAB.displayName = \"FAB\";\n","/**\n * TextField Variants\n *\n * CVA (class-variance-authority) variant definitions for Material Design 3 TextField.\n * Supports filled and outlined variants with comprehensive state management.\n */\n\nimport { cva, type VariantProps } from \"class-variance-authority\";\n\n/**\n * Container variants for the TextField wrapper\n *\n * Handles layout, width, and positioning\n */\nexport const textFieldContainerVariants = cva(\n [\n // Base container styles\n \"relative inline-flex flex-col\",\n ],\n {\n variants: {\n fullWidth: {\n true: \"w-full\",\n false: \"w-auto\",\n },\n },\n defaultVariants: {\n fullWidth: false,\n },\n }\n);\n\n/**\n * Input wrapper variants (the visual container around the input)\n *\n * Handles MD3 filled and outlined variants with all states\n */\nexport const textFieldWrapperVariants = cva(\n [\n // Base wrapper styles\n \"relative inline-flex items-center w-full\",\n \"transition-all duration-200\",\n \"rounded-t\",\n ],\n {\n variants: {\n variant: {\n filled: [\"bg-surface-container-highest\", \"border-b-2 border-on-surface-variant\"],\n outlined: [\"bg-transparent\", \"border border-outline\", \"rounded-b\"],\n },\n size: {\n small: \"min-h-10\",\n medium: \"min-h-12\",\n large: \"min-h-14\",\n },\n disabled: {\n true: [\"cursor-not-allowed\", \"opacity-38\"],\n false: \"\",\n },\n error: {\n true: \"\",\n false: \"\",\n },\n focused: {\n true: \"\",\n false: \"\",\n },\n },\n compoundVariants: [\n // FILLED VARIANT - Focused state\n {\n variant: \"filled\",\n focused: true,\n error: false,\n className: \"border-primary\",\n },\n // FILLED VARIANT - Error state\n {\n variant: \"filled\",\n error: true,\n className: \"border-error\",\n },\n // FILLED VARIANT - Hover state (handled via group-hover in parent)\n {\n variant: \"filled\",\n disabled: false,\n className: \"hover:bg-on-surface/[0.08]\",\n },\n\n // OUTLINED VARIANT - Focused state\n {\n variant: \"outlined\",\n focused: true,\n error: false,\n className: \"border-2 border-primary\",\n },\n // OUTLINED VARIANT - Error state\n {\n variant: \"outlined\",\n error: true,\n className: \"border-2 border-error\",\n },\n // OUTLINED VARIANT - Hover state\n {\n variant: \"outlined\",\n disabled: false,\n className: \"hover:border-on-surface\",\n },\n ],\n defaultVariants: {\n variant: \"filled\",\n size: \"medium\",\n disabled: false,\n error: false,\n focused: false,\n },\n }\n);\n\n/**\n * Input element variants\n *\n * Styles for the actual input/textarea element\n */\nexport const textFieldInputVariants = cva(\n [\n // Base input styles\n \"w-full bg-transparent outline-none\",\n \"text-on-surface text-base\",\n \"placeholder:text-on-surface-variant placeholder:opacity-60\",\n \"transition-colors duration-200\",\n ],\n {\n variants: {\n variant: {\n filled: \"px-4\",\n outlined: \"px-4\",\n },\n size: {\n small: \"h-10 py-2 text-sm\",\n medium: \"h-12 py-3 text-base\",\n large: \"h-14 py-4 text-lg\",\n },\n disabled: {\n true: \"cursor-not-allowed\",\n false: \"\",\n },\n hasLeadingIcon: {\n true: \"pl-12\",\n false: \"\",\n },\n hasTrailingIcon: {\n true: \"pr-12\",\n false: \"\",\n },\n multiline: {\n true: \"resize-y\",\n false: \"\",\n },\n },\n defaultVariants: {\n variant: \"filled\",\n size: \"medium\",\n disabled: false,\n hasLeadingIcon: false,\n hasTrailingIcon: false,\n multiline: false,\n },\n }\n);\n\n/**\n * Label variants\n *\n * Handles floating label behavior for MD3 text fields\n */\nexport const textFieldLabelVariants = cva(\n [\n // Base label styles\n \"absolute left-4 transition-all duration-200 pointer-events-none\",\n \"text-on-surface-variant origin-top-left\",\n ],\n {\n variants: {\n variant: {\n filled: \"top-4\",\n outlined: \"top-3 bg-surface px-1\",\n },\n size: {\n small: \"text-sm\",\n medium: \"text-base\",\n large: \"text-lg\",\n },\n floating: {\n true: \"-translate-y-6 scale-75\",\n false: \"scale-100\",\n },\n focused: {\n true: \"text-primary\",\n false: \"\",\n },\n error: {\n true: \"text-error\",\n false: \"\",\n },\n disabled: {\n true: \"text-on-surface/38\",\n false: \"\",\n },\n hasLeadingIcon: {\n true: \"left-12\",\n false: \"\",\n },\n },\n compoundVariants: [\n // Outlined variant floating label positioning\n {\n variant: \"outlined\",\n floating: true,\n className: \"-top-2\",\n },\n ],\n defaultVariants: {\n variant: \"filled\",\n size: \"medium\",\n floating: false,\n focused: false,\n error: false,\n disabled: false,\n hasLeadingIcon: false,\n },\n }\n);\n\n/**\n * Icon container variants\n *\n * Styles for leading and trailing icon containers\n */\nexport const textFieldIconVariants = cva(\n [\n // Base icon styles\n \"absolute flex items-center justify-center\",\n \"text-on-surface-variant transition-colors duration-200\",\n \"pointer-events-none\",\n ],\n {\n variants: {\n position: {\n leading: \"left-3\",\n trailing: \"right-3\",\n },\n size: {\n small: \"w-5 h-5\",\n medium: \"w-6 h-6\",\n large: \"w-7 h-7\",\n },\n disabled: {\n true: \"opacity-38\",\n false: \"\",\n },\n },\n defaultVariants: {\n position: \"leading\",\n size: \"medium\",\n disabled: false,\n },\n }\n);\n\n/**\n * Helper text variants (description and error messages)\n *\n * Styles for text below the input field\n */\nexport const textFieldHelperTextVariants = cva(\n [\n // Base helper text styles\n \"text-xs mt-1 px-4 transition-colors duration-200\",\n ],\n {\n variants: {\n type: {\n description: \"text-on-surface-variant\",\n error: \"text-error\",\n },\n disabled: {\n true: \"opacity-38\",\n false: \"\",\n },\n },\n defaultVariants: {\n type: \"description\",\n disabled: false,\n },\n }\n);\n\n/**\n * Character counter variants\n *\n * Styles for the character count display\n */\nexport const textFieldCharacterCountVariants = cva(\n [\n // Base character counter styles\n \"text-xs mt-1 px-4 text-right text-on-surface-variant transition-colors duration-200\",\n ],\n {\n variants: {\n exceeded: {\n true: \"text-error\",\n false: \"\",\n },\n disabled: {\n true: \"opacity-38\",\n false: \"\",\n },\n },\n defaultVariants: {\n exceeded: false,\n disabled: false,\n },\n }\n);\n\n// Export variant types\nexport type TextFieldContainerVariants = VariantProps<typeof textFieldContainerVariants>;\nexport type TextFieldWrapperVariants = VariantProps<typeof textFieldWrapperVariants>;\nexport type TextFieldInputVariants = VariantProps<typeof textFieldInputVariants>;\nexport type TextFieldLabelVariants = VariantProps<typeof textFieldLabelVariants>;\nexport type TextFieldIconVariants = VariantProps<typeof textFieldIconVariants>;\nexport type TextFieldHelperTextVariants = VariantProps<typeof textFieldHelperTextVariants>;\nexport type TextFieldCharacterCountVariants = VariantProps<typeof textFieldCharacterCountVariants>;\n","/**\n * TextFieldHeadless Component (Layer 2)\n *\n * Headless primitive for the TextField component.\n * Provides behavior and accessibility via React Aria without styling.\n */\n\nimport { forwardRef, useRef } from \"react\";\nimport { useTextField, useFocusRing } from \"react-aria\";\nimport { mergeProps } from \"@react-aria/utils\";\nimport type { TextFieldHeadlessProps } from \"./TextField.types\";\n\n/**\n * TextFieldHeadless - Headless text input primitive\n *\n * This component provides the foundation for accessible text input fields\n * using React Aria. It handles:\n * - Label association\n * - Description text (helper text)\n * - Error message display\n * - Validation state management\n * - Keyboard accessibility\n * - Screen reader support\n *\n * When `children` is a function (render-prop), the component delegates\n * all DOM rendering to the caller, passing React Aria props and derived\n * state. This is how the styled TextField (Layer 3) composes this layer.\n *\n * When `children` is absent, a minimal accessible DOM renders (for\n * advanced consumers who want headless behaviour with their own markup).\n *\n * @example\n * ```tsx\n * // Default DOM (minimal accessible input)\n * <TextFieldHeadless\n * label=\"Email\"\n * description=\"Enter your email address\"\n * isRequired\n * />\n *\n * // Render-prop (styled layer composition)\n * <TextFieldHeadless label=\"Email\" value={value} onChange={onChange}>\n * {({ labelProps, inputProps, isFocused, currentValue }) => (\n * <div>\n * <label {...labelProps} className={isFocused ? 'focused' : ''}>Email</label>\n * <input {...inputProps} />\n * <span>{currentValue.length} chars</span>\n * </div>\n * )}\n * </TextFieldHeadless>\n * ```\n */\nexport const TextFieldHeadless = forwardRef<\n HTMLInputElement | HTMLTextAreaElement,\n TextFieldHeadlessProps\n>(\n (\n {\n label,\n description,\n errorMessage,\n fullWidth = false,\n multiline = false,\n rows = 3,\n className,\n inputClassName,\n labelClassName,\n descriptionClassName,\n errorClassName,\n isInvalid,\n children,\n ...restProps\n },\n forwardedRef\n ) => {\n const internalRef = useRef<HTMLInputElement | HTMLTextAreaElement>(null);\n const ref = (forwardedRef ?? internalRef) as React.RefObject<\n HTMLInputElement & HTMLTextAreaElement\n >;\n\n const inputElementType = multiline ? (\"textarea\" as const) : (\"input\" as const);\n\n // React Aria's useTextField provides fully-wired labelProps, inputProps,\n // descriptionProps, and errorMessageProps with stable IDs and ARIA linkages.\n const {\n labelProps,\n inputProps,\n descriptionProps,\n errorMessageProps,\n isInvalid: ariaIsInvalid,\n validationErrors,\n } = useTextField(\n {\n label,\n description,\n errorMessage,\n isInvalid: isInvalid ?? false,\n inputElementType,\n ...restProps,\n },\n ref\n );\n\n // useFocusRing distinguishes keyboard focus (isFocusVisible) from pointer focus (isFocused).\n const { isFocused, isFocusVisible, focusProps } = useFocusRing({ within: false });\n\n // Determine if field is invalid (from prop or React Aria validation)\n const invalid = isInvalid ?? ariaIsInvalid;\n\n const showErrorMessage = invalid && (errorMessage ?? validationErrors.length > 0);\n const displayErrorMessage = errorMessage ?? validationErrors.join(\" \");\n\n // Derive current displayed value for the render-prop (controlled or uncontrolled).\n // React Aria puts the current value in inputProps.value for controlled fields\n // and defaultValue for uncontrolled. We normalise to a string for character counting.\n const currentValue =\n typeof inputProps.value === \"string\"\n ? inputProps.value\n : typeof inputProps.defaultValue === \"string\"\n ? inputProps.defaultValue\n : \"\";\n\n // --- Render-prop branch ---\n // When children is a function, delegate all DOM rendering to the caller.\n if (typeof children === \"function\") {\n // Merge focusProps into inputProps so the caller gets focus tracking for free.\n const mergedInputProps = mergeProps(\n inputProps,\n focusProps\n ) as React.InputHTMLAttributes<HTMLInputElement> &\n React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\n return children({\n labelProps,\n inputProps: mergedInputProps,\n descriptionProps,\n errorMessageProps,\n isInvalid: invalid,\n isFocused,\n isFocusVisible,\n currentValue,\n inputRef: ref,\n });\n }\n\n // --- Default DOM branch ---\n // Filter React Aria-specific props that shouldn't go to DOM elements.\n const {\n isDisabled: _isDisabled,\n isRequired: _isRequired,\n isReadOnly: _isReadOnly,\n validationBehavior: _validationBehavior,\n validate: _validate,\n autoFocus: _autoFocus,\n value: _value,\n defaultValue: _defaultValue,\n onChange: _onChange,\n onFocus: _onFocus,\n onBlur: _onBlur,\n onKeyDown: _onKeyDown,\n onKeyUp: _onKeyUp,\n onCopy: _onCopy,\n onCut: _onCut,\n onPaste: _onPaste,\n onCompositionStart: _onCompositionStart,\n onCompositionEnd: _onCompositionEnd,\n onCompositionUpdate: _onCompositionUpdate,\n onSelect: _onSelect,\n onBeforeInput: _onBeforeInput,\n onInput: _onInput,\n onFocusChange: _onFocusChange,\n ...htmlAttrs\n } = restProps;\n\n const mergedInputProps = mergeProps(inputProps, focusProps, htmlAttrs, {\n className: inputClassName,\n }) as React.InputHTMLAttributes<HTMLInputElement> &\n React.TextareaHTMLAttributes<HTMLTextAreaElement>;\n\n return (\n <div className={className} style={fullWidth ? { width: \"100%\" } : undefined}>\n {label && (\n <label {...labelProps} className={labelClassName}>\n {label}\n </label>\n )}\n\n {multiline ? (\n <textarea\n {...mergedInputProps}\n ref={ref as React.RefObject<HTMLTextAreaElement>}\n rows={rows}\n />\n ) : (\n <input {...mergedInputProps} ref={ref as React.RefObject<HTMLInputElement>} />\n )}\n\n {description && !showErrorMessage && (\n <div {...descriptionProps} className={descriptionClassName}>\n {description}\n </div>\n )}\n\n {showErrorMessage && (\n <div {...errorMessageProps} className={errorClassName}>\n {displayErrorMessage}\n </div>\n )}\n </div>\n );\n }\n);\n\nTextFieldHeadless.displayName = \"TextFieldHeadless\";\n","/**\n * TextField Component (Layer 3)\n *\n * Material Design 3 styled text input component.\n * Composes TextFieldHeadless (Layer 2) via render-prop to obtain all\n * React Aria ARIA props without duplicating accessibility wiring.\n */\n\n\"use client\";\n\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport {\n textFieldContainerVariants,\n textFieldWrapperVariants,\n textFieldInputVariants,\n textFieldLabelVariants,\n textFieldIconVariants,\n textFieldHelperTextVariants,\n textFieldCharacterCountVariants,\n} from \"./TextField.variants\";\nimport { TextFieldHeadless } from \"./TextFieldHeadless\";\nimport type { TextFieldProps } from \"./TextField.types\";\n\n/**\n * TextField - MD3 Text Input Component\n *\n * A text input field following Material Design 3 specifications.\n * Supports filled and outlined variants with comprehensive accessibility\n * provided by React Aria via the TextFieldHeadless layer.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <TextField label=\"Email\" />\n *\n * // With validation\n * <TextField\n * label=\"Email\"\n * type=\"email\"\n * isRequired\n * errorMessage=\"Please enter a valid email\"\n * />\n *\n * // Multiline with character counter\n * <TextField\n * label=\"Bio\"\n * multiline\n * rows={4}\n * maxLength={500}\n * characterCount\n * />\n * ```\n */\nexport const TextField = forwardRef<HTMLInputElement | HTMLTextAreaElement, TextFieldProps>(\n (\n {\n variant = \"filled\",\n size = \"medium\",\n label,\n description,\n errorMessage,\n leadingIcon,\n trailingIcon,\n characterCount = false,\n maxLength,\n fullWidth = false,\n multiline = false,\n rows = 3,\n className,\n isDisabled = false,\n isInvalid = false,\n isRequired = false,\n isReadOnly = false,\n value,\n defaultValue,\n onChange,\n onFocus,\n onBlur,\n spellCheck,\n ...props\n },\n ref\n ) => {\n // Convert spellCheck to boolean if it arrives as a string (HTML attribute form)\n const spellCheckProp =\n spellCheck === undefined\n ? undefined\n : typeof spellCheck === \"string\"\n ? spellCheck === \"true\"\n : spellCheck;\n\n // Build headless props, omitting undefined optional values to satisfy exactOptionalPropertyTypes\n const headlessProps = {\n ...(label !== undefined ? { label } : {}),\n ...(description !== undefined ? { description } : {}),\n ...(errorMessage !== undefined ? { errorMessage } : {}),\n ...(value !== undefined ? { value } : {}),\n ...(defaultValue !== undefined ? { defaultValue } : {}),\n ...(onChange !== undefined ? { onChange } : {}),\n ...(onFocus !== undefined ? { onFocus } : {}),\n ...(onBlur !== undefined ? { onBlur } : {}),\n ...(maxLength !== undefined ? { maxLength } : {}),\n fullWidth,\n multiline,\n rows,\n isDisabled,\n isInvalid,\n isRequired,\n isReadOnly,\n ...props,\n };\n\n return (\n <TextFieldHeadless ref={ref} {...headlessProps}>\n {({\n labelProps,\n inputProps,\n descriptionProps,\n errorMessageProps,\n isInvalid: fieldIsInvalid,\n isFocused,\n currentValue,\n inputRef,\n }) => {\n const hasValue = currentValue.length > 0;\n const shouldFloatLabel = isFocused || hasValue;\n const characterLength = currentValue.length;\n const isCharacterLimitExceeded = maxLength ? characterLength > maxLength : false;\n\n return (\n <div className={cn(textFieldContainerVariants({ fullWidth }), className)}>\n {/* Input wrapper with visual styling */}\n <div\n className={cn(\n textFieldWrapperVariants({\n variant,\n size,\n disabled: isDisabled,\n error: fieldIsInvalid,\n focused: isFocused,\n })\n )}\n >\n {/* Leading icon */}\n {leadingIcon && (\n <span\n className={textFieldIconVariants({\n position: \"leading\",\n size,\n disabled: isDisabled,\n })}\n >\n {leadingIcon}\n </span>\n )}\n\n {/* Floating label — uses labelProps from React Aria for proper htmlFor wiring */}\n {label && (\n <label\n {...labelProps}\n className={cn(\n textFieldLabelVariants({\n variant,\n size,\n floating: shouldFloatLabel,\n focused: isFocused,\n error: fieldIsInvalid,\n disabled: isDisabled,\n hasLeadingIcon: !!leadingIcon,\n })\n )}\n >\n {label}\n {isRequired && \" *\"}\n </label>\n )}\n\n {/* Input/Textarea — uses inputProps from React Aria for full ARIA wiring */}\n {multiline ? (\n <textarea\n {...inputProps}\n ref={inputRef as React.RefObject<HTMLTextAreaElement>}\n className={cn(\n textFieldInputVariants({\n variant,\n size,\n disabled: isDisabled,\n hasLeadingIcon: !!leadingIcon,\n hasTrailingIcon: !!trailingIcon,\n multiline: true,\n })\n )}\n rows={rows}\n spellCheck={spellCheckProp}\n />\n ) : (\n <input\n {...inputProps}\n ref={inputRef as React.RefObject<HTMLInputElement>}\n className={cn(\n textFieldInputVariants({\n variant,\n size,\n disabled: isDisabled,\n hasLeadingIcon: !!leadingIcon,\n hasTrailingIcon: !!trailingIcon,\n multiline: false,\n })\n )}\n spellCheck={spellCheckProp}\n />\n )}\n\n {/* Trailing icon */}\n {trailingIcon && (\n <span\n className={textFieldIconVariants({\n position: \"trailing\",\n size,\n disabled: isDisabled,\n })}\n >\n {trailingIcon}\n </span>\n )}\n </div>\n\n {/* Helper text — only shown when not in error state */}\n {description && !fieldIsInvalid && (\n <div\n {...descriptionProps}\n className={textFieldHelperTextVariants({\n type: \"description\",\n disabled: isDisabled,\n })}\n >\n {description}\n </div>\n )}\n\n {/* Error message */}\n {fieldIsInvalid && errorMessage && (\n <div\n {...errorMessageProps}\n className={textFieldHelperTextVariants({\n type: \"error\",\n disabled: isDisabled,\n })}\n >\n {errorMessage}\n </div>\n )}\n\n {/* Character counter */}\n {characterCount && maxLength && (\n <div\n className={textFieldCharacterCountVariants({\n exceeded: isCharacterLimitExceeded,\n disabled: isDisabled,\n })}\n >\n {characterLength} / {maxLength}\n </div>\n )}\n </div>\n );\n }}\n </TextFieldHeadless>\n );\n }\n);\n\nTextField.displayName = \"TextField\";\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {Context, createContext, useContext, useEffect, useMemo, useRef, useState} from 'react';\nimport {Validation, ValidationErrors, ValidationFunction, ValidationResult} from '@react-types/shared';\n\nexport const VALID_VALIDITY_STATE: ValidityState = {\n badInput: false,\n customError: false,\n patternMismatch: false,\n rangeOverflow: false,\n rangeUnderflow: false,\n stepMismatch: false,\n tooLong: false,\n tooShort: false,\n typeMismatch: false,\n valueMissing: false,\n valid: true\n};\n\nconst CUSTOM_VALIDITY_STATE: ValidityState = {\n ...VALID_VALIDITY_STATE,\n customError: true,\n valid: false\n};\n\nexport const DEFAULT_VALIDATION_RESULT: ValidationResult = {\n isInvalid: false,\n validationDetails: VALID_VALIDITY_STATE,\n validationErrors: []\n};\n\nexport const FormValidationContext: Context<ValidationErrors> = createContext<ValidationErrors>({});\n\nexport const privateValidationStateProp: string = '__formValidationState' + Date.now();\n\ninterface FormValidationProps<T> extends Validation<T> {\n builtinValidation?: ValidationResult,\n name?: string | string[],\n value: T | null\n}\n\nexport interface FormValidationState {\n /** Realtime validation results, updated as the user edits the value. */\n realtimeValidation: ValidationResult,\n /** Currently displayed validation results, updated when the user commits their changes. */\n displayValidation: ValidationResult,\n /** Updates the current validation result. Not displayed to the user until `commitValidation` is called. */\n updateValidation(result: ValidationResult): void,\n /** Resets the displayed validation state to valid when the user resets the form. */\n resetValidation(): void,\n /** Commits the realtime validation so it is displayed to the user. */\n commitValidation(): void\n}\n\nexport function useFormValidationState<T>(props: FormValidationProps<T>): FormValidationState {\n // Private prop for parent components to pass state to children.\n if (props[privateValidationStateProp]) {\n let {realtimeValidation, displayValidation, updateValidation, resetValidation, commitValidation} = props[privateValidationStateProp] as FormValidationState;\n return {realtimeValidation, displayValidation, updateValidation, resetValidation, commitValidation};\n }\n\n // eslint-disable-next-line react-hooks/rules-of-hooks\n return useFormValidationStateImpl(props);\n}\n\nfunction useFormValidationStateImpl<T>(props: FormValidationProps<T>): FormValidationState {\n let {isInvalid, validationState, name, value, builtinValidation, validate, validationBehavior = 'aria'} = props;\n\n // backward compatibility.\n if (validationState) {\n isInvalid ||= validationState === 'invalid';\n }\n\n // If the isInvalid prop is controlled, update validation result in realtime.\n let controlledError: ValidationResult | null = isInvalid !== undefined ? {\n isInvalid,\n validationErrors: [],\n validationDetails: CUSTOM_VALIDITY_STATE\n } : null;\n\n // Perform custom client side validation.\n let clientError: ValidationResult | null = useMemo(() => {\n if (!validate || value == null) {\n return null;\n }\n let validateErrors = runValidate(validate, value);\n return getValidationResult(validateErrors);\n }, [validate, value]);\n\n if (builtinValidation?.validationDetails.valid) {\n builtinValidation = undefined;\n }\n\n // Get relevant server errors from the form.\n let serverErrors = useContext(FormValidationContext);\n let serverErrorMessages = useMemo(() => {\n if (name) {\n return Array.isArray(name) ? name.flatMap(name => asArray(serverErrors[name])) : asArray(serverErrors[name]);\n }\n return [];\n }, [serverErrors, name]);\n\n // Show server errors when the form gets a new value, and clear when the user changes the value.\n let [lastServerErrors, setLastServerErrors] = useState(serverErrors);\n let [isServerErrorCleared, setServerErrorCleared] = useState(false);\n if (serverErrors !== lastServerErrors) {\n setLastServerErrors(serverErrors);\n setServerErrorCleared(false);\n }\n\n let serverError: ValidationResult | null = useMemo(() =>\n getValidationResult(isServerErrorCleared ? [] : serverErrorMessages),\n [isServerErrorCleared, serverErrorMessages]\n );\n\n // Track the next validation state in a ref until commitValidation is called.\n let nextValidation = useRef(DEFAULT_VALIDATION_RESULT);\n let [currentValidity, setCurrentValidity] = useState(DEFAULT_VALIDATION_RESULT);\n\n let lastError = useRef(DEFAULT_VALIDATION_RESULT);\n let commitValidation = () => {\n if (!commitQueued) {\n return;\n }\n\n setCommitQueued(false);\n let error = clientError || builtinValidation || nextValidation.current;\n if (!isEqualValidation(error, lastError.current)) {\n lastError.current = error;\n setCurrentValidity(error);\n }\n };\n\n let [commitQueued, setCommitQueued] = useState(false);\n useEffect(commitValidation);\n\n // realtimeValidation is used to update the native input element's state based on custom validation logic.\n // displayValidation is the currently displayed validation state that the user sees (e.g. on input change/form submit).\n // With validationBehavior=\"aria\", all errors are displayed in realtime rather than on submit.\n let realtimeValidation = controlledError || serverError || clientError || builtinValidation || DEFAULT_VALIDATION_RESULT;\n let displayValidation = validationBehavior === 'native'\n ? controlledError || serverError || currentValidity\n : controlledError || serverError || clientError || builtinValidation || currentValidity;\n\n return {\n realtimeValidation,\n displayValidation,\n updateValidation(value) {\n // If validationBehavior is 'aria', update in realtime. Otherwise, store in a ref until commit.\n if (validationBehavior === 'aria' && !isEqualValidation(currentValidity, value)) {\n setCurrentValidity(value);\n } else {\n nextValidation.current = value;\n }\n },\n resetValidation() {\n // Update the currently displayed validation state to valid on form reset,\n // even if the native validity says it isn't. It'll show again on the next form submit.\n let error = DEFAULT_VALIDATION_RESULT;\n if (!isEqualValidation(error, lastError.current)) {\n lastError.current = error;\n setCurrentValidity(error);\n }\n\n // Do not commit validation after the next render. This avoids a condition where\n // useSelect calls commitValidation inside an onReset handler.\n if (validationBehavior === 'native') {\n setCommitQueued(false);\n }\n\n setServerErrorCleared(true);\n },\n commitValidation() {\n // Commit validation state so the user sees it on blur/change/submit. Also clear any server errors.\n // Wait until after the next render to commit so that the latest value has been validated.\n if (validationBehavior === 'native') {\n setCommitQueued(true);\n }\n setServerErrorCleared(true);\n }\n };\n}\n\nfunction asArray<T>(v: T | T[]): T[] {\n if (!v) {\n return [];\n }\n\n return Array.isArray(v) ? v : [v];\n}\n\nfunction runValidate<T>(validate: ValidationFunction<T>, value: T): string[] {\n if (typeof validate === 'function') {\n let e = validate(value);\n if (e && typeof e !== 'boolean') {\n return asArray(e);\n }\n }\n\n return [];\n}\n\nfunction getValidationResult(errors: string[]): ValidationResult | null {\n return errors.length ? {\n isInvalid: true,\n validationErrors: errors,\n validationDetails: CUSTOM_VALIDITY_STATE\n } : null;\n}\n\nfunction isEqualValidation(a: ValidationResult | null, b: ValidationResult | null): boolean {\n if (a === b) {\n return true;\n }\n\n return !!a && !!b\n && a.isInvalid === b.isInvalid\n && a.validationErrors.length === b.validationErrors.length\n && a.validationErrors.every((a, i) => a === b.validationErrors[i])\n && Object.entries(a.validationDetails).every(([k, v]) => b.validationDetails[k] === v);\n}\n\nexport function mergeValidation(...results: ValidationResult[]): ValidationResult {\n let errors = new Set<string>();\n let isInvalid = false;\n let validationDetails = {\n ...VALID_VALIDITY_STATE\n };\n\n for (let v of results) {\n for (let e of v.validationErrors) {\n errors.add(e);\n }\n\n // Only these properties apply for checkboxes.\n isInvalid ||= v.isInvalid;\n for (let key in validationDetails) {\n validationDetails[key] ||= v.validationDetails[key];\n }\n }\n\n validationDetails.valid = !isInvalid;\n return {\n isInvalid,\n validationErrors: [...errors],\n validationDetails\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {FormValidationState, useFormValidationState} from '@react-stately/form';\nimport {RadioGroupProps} from '@react-types/radio';\nimport {useControlledState} from '@react-stately/utils';\nimport {useMemo, useState} from 'react';\nimport {ValidationState} from '@react-types/shared';\n\nexport interface RadioGroupState extends FormValidationState {\n /**\n * The name for the group, used for native form submission.\n * @deprecated\n * @private\n */\n readonly name: string,\n\n /** Whether the radio group is disabled. */\n readonly isDisabled: boolean,\n\n /** Whether the radio group is read only. */\n readonly isReadOnly: boolean,\n\n /** Whether the radio group is required. */\n readonly isRequired: boolean,\n\n /**\n * Whether the radio group is valid or invalid.\n * @deprecated Use `isInvalid` instead.\n */\n readonly validationState: ValidationState | null,\n\n /** Whether the radio group is invalid. */\n readonly isInvalid: boolean,\n\n /** The currently selected value. */\n readonly selectedValue: string | null,\n\n /** The default selected value. */\n readonly defaultSelectedValue: string | null,\n\n /** Sets the selected value. */\n setSelectedValue(value: string | null): void,\n\n /** The value of the last focused radio. */\n readonly lastFocusedValue: string | null,\n\n /** Sets the last focused value. */\n setLastFocusedValue(value: string | null): void\n}\n\nlet instance = Math.round(Math.random() * 10000000000);\nlet i = 0;\n\n/**\n * Provides state management for a radio group component. Provides a name for the group,\n * and manages selection and focus state.\n */\nexport function useRadioGroupState(props: RadioGroupProps): RadioGroupState {\n // Preserved here for backward compatibility. React Aria now generates the name instead of stately.\n let name = useMemo(() => props.name || `radio-group-${instance}-${++i}`, [props.name]);\n let [selectedValue, setSelected] = useControlledState(props.value, props.defaultValue ?? null, props.onChange);\n let [initialValue] = useState(selectedValue);\n let [lastFocusedValue, setLastFocusedValue] = useState<string | null>(null);\n\n let validation = useFormValidationState({\n ...props,\n value: selectedValue\n });\n\n let setSelectedValue = (value) => {\n if (!props.isReadOnly && !props.isDisabled) {\n setSelected(value);\n validation.commitValidation();\n }\n };\n\n let isInvalid = validation.displayValidation.isInvalid;\n\n return {\n ...validation,\n name,\n selectedValue: selectedValue,\n defaultSelectedValue: props.value !== undefined ? initialValue : props.defaultValue ?? null,\n setSelectedValue,\n lastFocusedValue,\n setLastFocusedValue,\n isDisabled: props.isDisabled || false,\n isReadOnly: props.isReadOnly || false,\n isRequired: props.isRequired || false,\n validationState: props.validationState || (isInvalid ? 'invalid' : null),\n isInvalid\n };\n}\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */\n\nimport {ToggleStateOptions} from '@react-types/checkbox';\nimport {useControlledState} from '@react-stately/utils';\nimport {useState} from 'react';\n\nexport type {ToggleStateOptions};\n\nexport interface ToggleState {\n /** Whether the toggle is selected. */\n readonly isSelected: boolean,\n\n /** Whether the toggle is selected by default. */\n readonly defaultSelected: boolean,\n\n /** Updates selection state. */\n setSelected(isSelected: boolean): void,\n\n /** Toggle the selection state. */\n toggle(): void\n}\n\n/**\n * Provides state management for toggle components like checkboxes and switches.\n */\nexport function useToggleState(props: ToggleStateOptions = {}): ToggleState {\n let {isReadOnly} = props;\n\n // have to provide an empty function so useControlledState doesn't throw a fit\n // can't use useControlledState's prop calling because we need the event object from the change\n let [isSelected, setSelected] = useControlledState(props.isSelected, props.defaultSelected || false, props.onChange);\n let [initialValue] = useState(isSelected);\n\n function updateSelected(value) {\n if (!isReadOnly) {\n setSelected(value);\n }\n }\n\n function toggleState() {\n if (!isReadOnly) {\n setSelected(!isSelected);\n }\n }\n\n return {\n isSelected,\n defaultSelected: props.defaultSelected ?? initialValue,\n setSelected: updateSelected,\n toggle: toggleState\n };\n}\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n/**\n * Material Design 3 Checkbox Variants (CVA)\n *\n * Type-safe variant management for Checkbox component.\n * Uses Tailwind CSS classes mapped to MD3 design tokens.\n *\n * MD3 Specifications:\n * - Container: 18x18dp (within 40x40dp touch target)\n * - Corner radius: 2dp (applied via SVG rx/ry attributes, not CSS)\n * - Outline width: 2dp\n * - State layers: 8% hover, 12% focus/pressed\n * - Disabled: 38% opacity\n * - Label spacing: 16px (ml-4)\n */\nexport const checkboxVariants = cva(\n [\n // Base classes (always applied to label wrapper)\n \"relative inline-flex items-center cursor-pointer select-none\",\n \"transition-opacity duration-200\",\n ],\n {\n variants: {\n /**\n * Disabled state\n */\n disabled: {\n true: \"opacity-38 cursor-not-allowed pointer-events-none\",\n false: \"\",\n },\n },\n defaultVariants: {\n disabled: false,\n },\n }\n);\n\n/**\n * Checkbox container variants (for the visual checkbox box)\n */\nexport const checkboxContainerVariants = cva(\n [\n // Base classes for checkbox visual container\n \"relative inline-flex items-center justify-center\",\n \"w-10 h-10\", // 40x40dp touch target (MD3 spec)\n \"flex-shrink-0\",\n \"transition-all duration-200\",\n\n // State layer (hover, focus, active) - MD3 spec: 8%/12%/12% opacity\n \"before:absolute before:inset-0 before:rounded-full before:transition-opacity before:duration-200\",\n \"before:bg-current before:opacity-0\",\n \"hover:before:opacity-8\",\n \"active:before:opacity-12\",\n ],\n {\n variants: {\n /**\n * Checkbox state (determines visual appearance)\n */\n state: {\n unchecked: \"text-on-surface-variant\",\n checked: \"text-primary\",\n indeterminate: \"text-primary\",\n },\n\n /**\n * Error/invalid state\n */\n isInvalid: {\n true: \"text-error\",\n false: \"\",\n },\n\n /**\n * Disabled state\n */\n disabled: {\n true: \"text-on-surface pointer-events-none\",\n false: \"\",\n },\n },\n compoundVariants: [\n // Error state overrides normal colors for all states\n {\n state: \"unchecked\",\n isInvalid: true,\n disabled: false,\n className: \"text-error\",\n },\n {\n state: \"checked\",\n isInvalid: true,\n disabled: false,\n className: \"text-error\",\n },\n {\n state: \"indeterminate\",\n isInvalid: true,\n disabled: false,\n className: \"text-error\",\n },\n ],\n defaultVariants: {\n state: \"unchecked\",\n isInvalid: false,\n disabled: false,\n },\n }\n);\n\n/**\n * Checkbox icon SVG box variants (the 18x18dp square container)\n */\nexport const checkboxIconBoxVariants = cva(\n [\n // Base classes for the checkbox box\n // Note: Border radius is applied via SVG rx/ry attributes (2dp) in the component\n \"transition-all duration-200\",\n ],\n {\n variants: {\n /**\n * Checkbox state\n */\n state: {\n unchecked: [\n \"fill-transparent\",\n \"stroke-outline\", // MD3: outline color for unchecked\n \"stroke-2\", // MD3: 2dp outline width\n ],\n checked: [\n \"fill-current\", // Uses parent text color (primary or error)\n \"stroke-none\",\n ],\n indeterminate: [\n \"fill-current\", // Uses parent text color (primary or error)\n \"stroke-none\",\n ],\n },\n\n /**\n * Disabled state\n */\n disabled: {\n true: [\"fill-transparent\", \"stroke-current\", \"stroke-2\"],\n false: \"\",\n },\n },\n compoundVariants: [\n // Disabled state overrides fill for checked/indeterminate\n {\n state: \"checked\",\n disabled: true,\n className: \"fill-current stroke-none\",\n },\n {\n state: \"indeterminate\",\n disabled: true,\n className: \"fill-current stroke-none\",\n },\n ],\n defaultVariants: {\n state: \"unchecked\",\n disabled: false,\n },\n }\n);\n\n/**\n * Checkbox checkmark/dash icon variants\n */\nexport const checkboxIconVariants = cva(\n [\n \"fill-current\", // Inherits color from parent\n \"transition-all duration-200\",\n ],\n {\n variants: {\n /**\n * Icon type\n */\n type: {\n check: \"\", // Checkmark icon\n dash: \"\", // Dash/minus icon\n },\n },\n defaultVariants: {\n type: \"check\",\n },\n }\n);\n\n/**\n * Checkbox label text variants\n */\nexport const checkboxLabelVariants = cva(\n [\n \"text-sm\", // MD3: Body Medium (14px)\n \"text-on-surface\",\n \"select-none\",\n \"ml-4\", // 16px spacing between checkbox and label (MD3 standard)\n ],\n {\n variants: {\n disabled: {\n true: \"\",\n false: \"\",\n },\n },\n defaultVariants: {\n disabled: false,\n },\n }\n);\n\n/**\n * Extract variant prop types from CVA\n */\nexport type CheckboxVariants = VariantProps<typeof checkboxVariants>;\nexport type CheckboxContainerVariants = VariantProps<typeof checkboxContainerVariants>;\nexport type CheckboxIconBoxVariants = VariantProps<typeof checkboxIconBoxVariants>;\nexport type CheckboxIconVariants = VariantProps<typeof checkboxIconVariants>;\nexport type CheckboxLabelVariants = VariantProps<typeof checkboxLabelVariants>;\n","\"use client\";\n\nimport { forwardRef, useRef, useEffect } from \"react\";\nimport type React from \"react\";\nimport { useCheckbox, useFocusRing, mergeProps, VisuallyHidden } from \"react-aria\";\nimport { useToggleState } from \"react-stately\";\nimport { cn } from \"../../utils/cn\";\nimport { useRipple } from \"../../hooks/useRipple\";\nimport {\n checkboxVariants,\n checkboxContainerVariants,\n checkboxIconBoxVariants,\n checkboxIconVariants,\n checkboxLabelVariants,\n} from \"./Checkbox.variants\";\nimport type { CheckboxProps } from \"./Checkbox.types\";\n\n/**\n * Material Design 3 Checkbox Component (Layer 3: Styled)\n *\n * Built on React Aria for world-class accessibility.\n * Uses CVA for type-safe variant management.\n * Styled with Tailwind CSS using MD3 design tokens.\n *\n * Features:\n * - ✅ 3 states: unchecked, checked, indeterminate\n * - ✅ Error/invalid state support\n * - ✅ Ripple effect (Material Design)\n * - ✅ Full keyboard accessibility (via React Aria)\n * - ✅ Screen reader support (via React Aria)\n * - ✅ Focus management (via React Aria)\n * - ✅ Form integration (name, value props)\n *\n * MD3 Specifications:\n * - Container: 18x18dp (within 40x40dp touch target)\n * - Corner radius: 2dp (applied via SVG rx/ry attributes)\n * - State layers: 8% hover, 12% focus/pressed\n * - Disabled: 38% opacity\n * - Label spacing: 16px (ml-4)\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Checkbox>Accept terms</Checkbox>\n *\n * // Controlled\n * <Checkbox isSelected={checked} onChange={setChecked}>\n * Subscribe\n * </Checkbox>\n *\n * // Indeterminate (partial selection)\n * <Checkbox isIndeterminate>Select all</Checkbox>\n *\n * // Error state\n * <Checkbox isInvalid>Required field</Checkbox>\n *\n * // Disabled\n * <Checkbox isDisabled>Disabled option</Checkbox>\n *\n * // Without label (icon-only)\n * <Checkbox aria-label=\"Accept\" />\n * ```\n */\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n (\n {\n // Content props\n children,\n\n // State props\n isIndeterminate = false,\n isInvalid = false,\n disableRipple = false,\n isDisabled = false,\n\n // Styling\n className,\n\n // Other props\n ...props\n },\n forwardedRef\n ) => {\n // Internal ref for React Aria\n const internalRef = useRef<HTMLInputElement>(null);\n\n // Merge internal ref with forwarded ref\n const ref = (forwardedRef ?? internalRef) as React.RefObject<HTMLInputElement>;\n\n // Extract data-testid and other HTML attributes\n const htmlAttrs = props as Record<string, unknown>;\n const dataTestId = htmlAttrs[\"data-testid\"] as string | undefined;\n const htmlId = htmlAttrs.id as string | undefined;\n const htmlTitle = htmlAttrs.title as string | undefined;\n\n // Remove HTML attributes from props for React Aria\n const {\n \"data-testid\": _dataTestId,\n id: _htmlId,\n title: _htmlTitle,\n ...restPropsWithoutHtmlAttrs\n } = props as Record<string, unknown>;\n\n // State management using React Stately\n const state = useToggleState(restPropsWithoutHtmlAttrs as Parameters<typeof useToggleState>[0]);\n\n // React Aria hooks - pass props without HTML attributes\n const { inputProps, labelProps } = useCheckbox(\n restPropsWithoutHtmlAttrs as Parameters<typeof useCheckbox>[0],\n state,\n ref\n );\n const { isFocusVisible, focusProps } = useFocusRing();\n\n // Get selected state\n const isSelected = state.isSelected;\n\n // Determine visual state\n const visualState = isIndeterminate ? \"indeterminate\" : isSelected ? \"checked\" : \"unchecked\";\n\n // Ripple effect\n const { onMouseDown: handleRipple, ripples } = useRipple({\n disabled: isDisabled || disableRipple,\n });\n\n // Sync indeterminate state to native input\n useEffect(() => {\n if (ref.current) {\n ref.current.indeterminate = isIndeterminate;\n }\n }, [isIndeterminate, ref]);\n\n // Development warnings\n if (process.env.NODE_ENV === \"development\") {\n const ariaProps = restPropsWithoutHtmlAttrs as {\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n };\n if (!children && !ariaProps[\"aria-label\"] && !ariaProps[\"aria-labelledby\"]) {\n console.warn(\n \"[Checkbox] Checkbox should have a label (children) or aria-label for accessibility.\"\n );\n }\n }\n\n return (\n <label\n {...labelProps}\n className={cn(\n checkboxVariants({\n disabled: isDisabled,\n }),\n className\n )}\n data-testid={dataTestId}\n title={htmlTitle}\n >\n {/* Visually hidden native input for accessibility */}\n <VisuallyHidden>\n <input {...mergeProps(inputProps, focusProps)} ref={ref} id={htmlId} />\n </VisuallyHidden>\n\n {/* Visual checkbox container */}\n <div\n role=\"presentation\"\n className={cn(\n checkboxContainerVariants({\n state: visualState,\n isInvalid,\n disabled: isDisabled,\n })\n )}\n onMouseDown={handleRipple}\n >\n {/* Ripple effect */}\n {ripples}\n\n {/* SVG Checkbox Visual */}\n <svg\n width=\"18\"\n height=\"18\"\n viewBox=\"0 0 18 18\"\n aria-hidden=\"true\"\n className=\"relative z-10\"\n >\n {/* Checkbox box (rounded square) */}\n <rect\n x=\"0\"\n y=\"0\"\n width=\"18\"\n height=\"18\"\n rx=\"2\"\n ry=\"2\"\n className={cn(\n checkboxIconBoxVariants({\n state: visualState,\n disabled: isDisabled,\n })\n )}\n />\n\n {/* Checkmark icon (for checked state) */}\n {isSelected && !isIndeterminate && (\n <path\n d=\"M14.1 4.5L6.3 12.3l-3.4-3.4L1.5 10.3l4.8 4.8 9.2-9.2z\"\n className={cn(checkboxIconVariants({ type: \"check\" }), \"fill-on-primary\")}\n />\n )}\n\n {/* Dash icon (for indeterminate state) */}\n {isIndeterminate && (\n <rect\n x=\"4\"\n y=\"8\"\n width=\"10\"\n height=\"2\"\n className={cn(checkboxIconVariants({ type: \"dash\" }), \"fill-on-primary\")}\n />\n )}\n\n {/* Focus ring (visible on keyboard focus) */}\n {isFocusVisible && (\n <rect\n x=\"-3\"\n y=\"-3\"\n width=\"24\"\n height=\"24\"\n rx=\"12\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className=\"animate-pulse\"\n />\n )}\n </svg>\n </div>\n\n {/* Label text */}\n {children && (\n <span\n className={cn(\n checkboxLabelVariants({\n disabled: isDisabled,\n })\n )}\n >\n {children}\n </span>\n )}\n </label>\n );\n }\n);\n\nCheckbox.displayName = \"Checkbox\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n/**\n * Material Design 3 Switch Variants (CVA)\n *\n * Type-safe variant management for Switch component.\n * Uses Tailwind CSS classes mapped to MD3 design tokens.\n *\n * MD3 Specifications:\n * - Track: 52x32dp, border-radius 16dp (full)\n * - Handle: 16x16dp (unselected), 24x24dp (selected), 28x28dp (pressed)\n * - Touch target: 48x48dp minimum\n * - State layers: 8% hover, 12% focus/pressed (on handle)\n * - Disabled: 12% container opacity, 38% content opacity\n * - Label spacing: 16px (ml-4)\n */\n\n/**\n * Switch wrapper/label variants (main container)\n */\nexport const switchVariants = cva(\n [\n // Base classes (always applied to label wrapper)\n \"relative inline-flex items-center cursor-pointer select-none\",\n \"transition-opacity duration-200\",\n ],\n {\n variants: {\n /**\n * Disabled state\n */\n disabled: {\n true: \"opacity-38 cursor-not-allowed pointer-events-none\",\n false: \"\",\n },\n },\n defaultVariants: {\n disabled: false,\n },\n }\n);\n\n/**\n * Switch track variants (the 52x32dp background rail)\n */\nexport const switchTrackVariants = cva(\n [\n // Base classes for track\n \"relative flex items-center\",\n \"w-[52px] h-[32px]\", // MD3 spec: 52x32dp\n \"rounded-full\", // MD3 spec: border-radius 16dp (full)\n \"transition-all duration-200\",\n ],\n {\n variants: {\n /**\n * Switch state (determines track color)\n */\n selected: {\n true: \"bg-primary\", // MD3: selected track\n false: \"bg-surface-container-highest\", // MD3: unselected track\n },\n\n /**\n * Disabled state\n */\n disabled: {\n true: \"bg-on-surface/12\", // MD3: 12% opacity for disabled\n false: \"\",\n },\n },\n compoundVariants: [\n // Disabled state overrides normal colors\n {\n selected: true,\n disabled: true,\n className: \"bg-on-surface/12\",\n },\n {\n selected: false,\n disabled: true,\n className: \"bg-on-surface/12\",\n },\n ],\n defaultVariants: {\n selected: false,\n disabled: false,\n },\n }\n);\n\n/**\n * Switch handle container variants (the movable thumb with state layers)\n */\nexport const switchHandleContainerVariants = cva(\n [\n // Base classes for handle container (includes state layer)\n \"absolute flex items-center justify-center\",\n \"rounded-full\",\n \"transition-all duration-200\",\n\n // State layer (hover, focus, active) - MD3 spec: 8%/12%/12% opacity\n \"before:absolute before:inset-0 before:rounded-full before:transition-opacity before:duration-200\",\n \"before:bg-current before:opacity-0\",\n \"hover:before:opacity-8\",\n \"active:before:opacity-12\",\n ],\n {\n variants: {\n /**\n * Switch state (determines handle position and size)\n */\n selected: {\n true: [\n \"left-[28px]\", // Position when ON (52px - 24px = 28px)\n \"text-primary\", // State layer color\n ],\n false: [\n \"left-[8px]\", // Position when OFF (centered in left half)\n \"text-on-surface-variant\", // State layer color\n ],\n },\n\n /**\n * Pressed state (increases handle size)\n */\n pressed: {\n true: \"w-[28px] h-[28px]\", // MD3: 28dp when pressed\n false: \"\",\n },\n\n /**\n * Disabled state\n */\n disabled: {\n true: \"pointer-events-none\",\n false: \"\",\n },\n },\n compoundVariants: [\n // Size depends on selected + pressed state\n {\n selected: true,\n pressed: false,\n className: \"w-[24px] h-[24px]\", // MD3: 24dp when selected\n },\n {\n selected: false,\n pressed: false,\n className: \"w-[16px] h-[16px]\", // MD3: 16dp when unselected\n },\n ],\n defaultVariants: {\n selected: false,\n pressed: false,\n disabled: false,\n },\n }\n);\n\n/**\n * Switch handle (the actual thumb visual)\n */\nexport const switchHandleVariants = cva(\n [\n // Base classes for the handle\n \"relative z-10 rounded-full\",\n \"transition-all duration-200\",\n \"flex items-center justify-center\",\n ],\n {\n variants: {\n /**\n * Switch state (determines handle color and size)\n */\n selected: {\n true: \"bg-on-primary\", // MD3: on-primary when selected\n false: \"bg-outline\", // MD3: outline when unselected\n },\n\n /**\n * Pressed state\n */\n pressed: {\n true: \"w-[28px] h-[28px]\", // MD3: 28dp when pressed\n false: \"\",\n },\n\n /**\n * Disabled state\n */\n disabled: {\n true: \"bg-on-surface/38\", // MD3: 38% opacity for disabled\n false: \"\",\n },\n },\n compoundVariants: [\n // Size depends on selected + pressed state\n {\n selected: true,\n pressed: false,\n className: \"w-[24px] h-[24px]\", // MD3: 24dp when selected\n },\n {\n selected: false,\n pressed: false,\n className: \"w-[16px] h-[16px]\", // MD3: 16dp when unselected\n },\n // Disabled state overrides normal colors\n {\n selected: true,\n disabled: true,\n className: \"bg-on-surface/38\",\n },\n {\n selected: false,\n disabled: true,\n className: \"bg-on-surface/38\",\n },\n ],\n defaultVariants: {\n selected: false,\n pressed: false,\n disabled: false,\n },\n }\n);\n\n/**\n * Switch icon variants (icons inside handle)\n */\nexport const switchIconVariants = cva(\n [\n // Base classes for icons\n \"w-4 h-4\", // MD3: 16x16dp icon size\n \"transition-all duration-200\",\n ],\n {\n variants: {\n /**\n * Icon visibility based on state\n */\n visible: {\n true: \"opacity-100\",\n false: \"opacity-0\",\n },\n\n /**\n * Disabled state\n */\n disabled: {\n true: \"opacity-38\",\n false: \"\",\n },\n },\n defaultVariants: {\n visible: true,\n disabled: false,\n },\n }\n);\n\n/**\n * Switch label text variants\n */\nexport const switchLabelVariants = cva(\n [\n \"text-sm\", // MD3: Body Medium (14px)\n \"text-on-surface\",\n \"select-none\",\n \"ml-4\", // 16px spacing between switch and label (MD3 standard)\n ],\n {\n variants: {\n disabled: {\n true: \"\",\n false: \"\",\n },\n },\n defaultVariants: {\n disabled: false,\n },\n }\n);\n\n/**\n * Extract variant prop types from CVA\n */\nexport type SwitchVariants = VariantProps<typeof switchVariants>;\nexport type SwitchTrackVariants = VariantProps<typeof switchTrackVariants>;\nexport type SwitchHandleContainerVariants = VariantProps<typeof switchHandleContainerVariants>;\nexport type SwitchHandleVariants = VariantProps<typeof switchHandleVariants>;\nexport type SwitchIconVariants = VariantProps<typeof switchIconVariants>;\nexport type SwitchLabelVariants = VariantProps<typeof switchLabelVariants>;\n","\"use client\";\n\nimport { forwardRef, useRef } from \"react\";\nimport type React from \"react\";\nimport { useSwitch, useFocusRing, mergeProps, VisuallyHidden } from \"react-aria\";\nimport { useToggleState } from \"react-stately\";\nimport { cn } from \"../../utils/cn\";\nimport { useRipple } from \"../../hooks/useRipple\";\nimport {\n switchVariants,\n switchTrackVariants,\n switchHandleContainerVariants,\n switchHandleVariants,\n switchIconVariants,\n switchLabelVariants,\n} from \"./Switch.variants\";\nimport type { SwitchProps } from \"./Switch.types\";\n\n/**\n * Material Design 3 Switch Component (Layer 3: Styled)\n *\n * Built on React Aria for world-class accessibility.\n * Uses CVA for type-safe variant management.\n * Styled with Tailwind CSS using MD3 design tokens.\n *\n * Features:\n * - ✅ 2 states: on/off (not selection like checkbox)\n * - ✅ Optional icons in handle\n * - ✅ Ripple effect (Material Design)\n * - ✅ Full keyboard accessibility (via React Aria)\n * - ✅ Screen reader support (via React Aria)\n * - ✅ Focus management (via React Aria)\n * - ✅ Form integration (name, value props)\n *\n * MD3 Specifications:\n * - Track: 52x32dp (border-radius 16dp)\n * - Handle: 16x16dp (unselected), 24x24dp (selected), 28x28dp (pressed)\n * - Touch target: 48x48dp minimum\n * - State layers: 8% hover, 12% focus/pressed\n * - Disabled: 12% container, 38% content opacity\n * - Label spacing: 16px (ml-4)\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Switch>Low power mode</Switch>\n *\n * // Controlled\n * <Switch isSelected={isOn} onChange={setIsOn}>\n * Notifications\n * </Switch>\n *\n * // With icons\n * <Switch icon={<IconClose />} selectedIcon={<IconCheck />}>\n * Airplane mode\n * </Switch>\n *\n * // Disabled\n * <Switch isDisabled>Disabled option</Switch>\n *\n * // Without label (icon-only)\n * <Switch aria-label=\"Toggle feature\" />\n * ```\n */\nexport const Switch = forwardRef<HTMLInputElement, SwitchProps>(\n (\n {\n // Content props\n children,\n icon,\n selectedIcon,\n\n // State props\n disableRipple = false,\n isDisabled = false,\n\n // Styling\n className,\n\n // Other props\n ...props\n },\n forwardedRef\n ) => {\n // Internal ref for React Aria\n const internalRef = useRef<HTMLInputElement>(null);\n\n // Merge internal ref with forwarded ref\n const ref = (forwardedRef ?? internalRef) as React.RefObject<HTMLInputElement>;\n\n // Extract data-testid and other HTML attributes\n const htmlAttrs = props as Record<string, unknown>;\n const dataTestId = htmlAttrs[\"data-testid\"] as string | undefined;\n const htmlId = htmlAttrs.id as string | undefined;\n const htmlTitle = htmlAttrs.title as string | undefined;\n\n // Remove HTML attributes from props for React Aria\n const {\n \"data-testid\": _dataTestId,\n id: _htmlId,\n title: _htmlTitle,\n ...restPropsWithoutHtmlAttrs\n } = props as Record<string, unknown>;\n\n // State management using React Stately\n const state = useToggleState(restPropsWithoutHtmlAttrs as Parameters<typeof useToggleState>[0]);\n\n // React Aria hooks - pass props without HTML attributes\n const { inputProps, labelProps, isPressed } = useSwitch(\n restPropsWithoutHtmlAttrs as Parameters<typeof useSwitch>[0],\n state,\n ref\n );\n const { isFocusVisible, focusProps } = useFocusRing();\n\n // Get selected state\n const isSelected = state.isSelected;\n\n // Ripple effect\n const { onMouseDown: handleRipple, ripples } = useRipple({\n disabled: isDisabled || disableRipple,\n });\n\n // Development warnings\n if (process.env.NODE_ENV === \"development\") {\n const ariaProps = restPropsWithoutHtmlAttrs as {\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n };\n if (!children && !ariaProps[\"aria-label\"] && !ariaProps[\"aria-labelledby\"]) {\n console.warn(\n \"[Switch] Switch should have a label (children) or aria-label for accessibility.\"\n );\n }\n }\n\n return (\n <label\n {...labelProps}\n className={cn(\n switchVariants({\n disabled: isDisabled,\n }),\n className\n )}\n data-testid={dataTestId}\n title={htmlTitle}\n >\n {/* Visually hidden native input for accessibility */}\n <VisuallyHidden>\n <input {...mergeProps(inputProps, focusProps)} ref={ref} id={htmlId} />\n </VisuallyHidden>\n\n {/* Visual switch container */}\n <div\n role=\"presentation\"\n className={cn(\n switchTrackVariants({\n selected: isSelected,\n disabled: isDisabled,\n })\n )}\n >\n {/* Focus ring (keyboard focus indicator) */}\n {isFocusVisible && (\n <div\n className=\"border-primary absolute inset-[-4px] animate-pulse rounded-full border-2\"\n aria-hidden=\"true\"\n />\n )}\n\n {/* Handle container (with state layers and ripple) */}\n <div\n className={cn(\n switchHandleContainerVariants({\n selected: isSelected,\n pressed: isPressed,\n disabled: isDisabled,\n })\n )}\n onMouseDown={handleRipple}\n role=\"presentation\"\n >\n {/* Ripple effect */}\n {ripples}\n\n {/* Handle (thumb) */}\n <div\n className={cn(\n switchHandleVariants({\n selected: isSelected,\n pressed: isPressed,\n disabled: isDisabled,\n })\n )}\n >\n {/* Icon when OFF */}\n {!isSelected && icon && (\n <div\n className={cn(\n switchIconVariants({\n visible: !isSelected,\n disabled: isDisabled,\n })\n )}\n >\n {icon}\n </div>\n )}\n\n {/* Icon when ON */}\n {isSelected && selectedIcon && (\n <div\n className={cn(\n switchIconVariants({\n visible: isSelected,\n disabled: isDisabled,\n })\n )}\n >\n {selectedIcon}\n </div>\n )}\n </div>\n </div>\n </div>\n\n {/* Label text */}\n {children && (\n <span\n className={cn(\n switchLabelVariants({\n disabled: isDisabled,\n })\n )}\n >\n {children}\n </span>\n )}\n </label>\n );\n }\n);\n\nSwitch.displayName = \"Switch\";\n","import { createContext, forwardRef, useRef } from \"react\";\nimport { useRadioGroup } from \"react-aria\";\nimport { useRadioGroupState } from \"react-stately\";\nimport type { RadioGroupState } from \"react-stately\";\nimport type { RadioGroupHeadlessProps } from \"./Radio.types\";\n\n/**\n * Context to provide RadioGroup state to child Radio components\n */\nexport const RadioGroupContext = createContext<RadioGroupState | null>(null);\n\n/**\n * Headless RadioGroup Component (Layer 2)\n *\n * Unstyled radio group primitive using React Aria for accessibility.\n * Provides behavior only - bring your own styles.\n *\n * Features:\n * - Full keyboard navigation (Arrow keys, Tab)\n * - Screen reader support\n * - Single-selection enforcement\n * - Focus management\n * - Disabled state handling\n * - Form integration\n *\n * @example\n * ```tsx\n * // Use for custom styling\n * <RadioGroupHeadless label=\"Options\" className=\"custom-group\">\n * <RadioHeadless value=\"a\">Option A</RadioHeadless>\n * <RadioHeadless value=\"b\">Option B</RadioHeadless>\n * </RadioGroupHeadless>\n * ```\n */\nexport const RadioGroupHeadless = forwardRef<HTMLDivElement, RadioGroupHeadlessProps>(\n ({ className, children, renderLabel, ...props }, forwardedRef) => {\n // Internal ref for React Aria\n const internalRef = useRef<HTMLDivElement>(null);\n\n // Merge internal ref with forwarded ref\n const ref = (forwardedRef ?? internalRef) as React.RefObject<HTMLDivElement>;\n\n // State management using React Stately\n const state = useRadioGroupState(props);\n\n // React Aria hook - handles all accessibility\n const { radioGroupProps, labelProps } = useRadioGroup(props, state);\n\n // Extract data-testid if present\n const dataTestId = (props as unknown as { \"data-testid\"?: string })[\"data-testid\"];\n\n return (\n <div {...radioGroupProps} ref={ref} className={className} data-testid={dataTestId}>\n {/* Group label — rendered via slot when provided, otherwise default span */}\n {props.label &&\n (renderLabel ? renderLabel(labelProps) : <span {...labelProps}>{props.label}</span>)}\n\n {/* Provide state to child Radio components via context */}\n <RadioGroupContext.Provider value={state}>{children}</RadioGroupContext.Provider>\n </div>\n );\n }\n);\n\nRadioGroupHeadless.displayName = \"RadioGroupHeadless\";\n","import { cva, type VariantProps } from \"class-variance-authority\";\n\n/**\n * Material Design 3 RadioGroup Variants (CVA)\n *\n * Type-safe variant management for RadioGroup component.\n * Uses Tailwind CSS classes mapped to MD3 design tokens.\n *\n * MD3 Specifications:\n * - Radio icon: 20x20dp (within 40x40dp touch target)\n * - Outline width: 2dp\n * - State layers: 8% hover, 12% focus/pressed\n * - Disabled: 38% opacity\n * - Radio spacing: 16px gap between radios\n */\nexport const radioGroupVariants = cva(\n [\n // Base classes (always applied to group wrapper)\n \"flex\",\n \"gap-4\", // 16px spacing between radios (MD3 standard)\n ],\n {\n variants: {\n /**\n * Layout orientation\n */\n orientation: {\n vertical: \"flex-col\",\n horizontal: \"flex-row flex-wrap\",\n },\n\n /**\n * Disabled state\n */\n disabled: {\n true: \"\",\n false: \"\",\n },\n },\n defaultVariants: {\n orientation: \"vertical\",\n disabled: false,\n },\n }\n);\n\n/**\n * RadioGroup label variants\n */\nexport const radioGroupLabelVariants = cva(\n [\n \"text-sm font-medium\", // MD3: Body Medium\n \"text-on-surface\",\n \"mb-3\", // Spacing below label (12px)\n ],\n {\n variants: {\n disabled: {\n true: \"opacity-38\",\n false: \"\",\n },\n },\n defaultVariants: {\n disabled: false,\n },\n }\n);\n\n/**\n * Material Design 3 Radio Variants (CVA)\n *\n * Type-safe variant management for Radio component.\n * Uses Tailwind CSS classes mapped to MD3 design tokens.\n *\n * MD3 Specifications:\n * - Radio icon: 20x20dp (within 40x40dp touch target)\n * - Outline width: 2dp\n * - Inner dot: 10px (selected state)\n * - State layers: 8% hover, 12% focus/pressed\n * - Disabled: 38% opacity\n * - Label spacing: 16px (ml-4)\n */\nexport const radioVariants = cva(\n [\n // Base classes (always applied to label wrapper)\n \"relative inline-flex items-center cursor-pointer select-none\",\n \"transition-opacity duration-200\",\n ],\n {\n variants: {\n /**\n * Disabled state\n */\n disabled: {\n true: \"opacity-38 cursor-not-allowed pointer-events-none\",\n false: \"\",\n },\n },\n defaultVariants: {\n disabled: false,\n },\n }\n);\n\n/**\n * Radio container variants (for the visual radio circle)\n */\nexport const radioContainerVariants = cva(\n [\n // Base classes for radio visual container\n \"relative inline-flex items-center justify-center\",\n \"w-10 h-10\", // 40x40dp touch target (MD3 spec)\n \"flex-shrink-0\",\n \"transition-all duration-200\",\n\n // State layer (hover, focus, active) - MD3 spec: 8%/12%/12% opacity\n \"before:absolute before:inset-0 before:rounded-full before:transition-opacity before:duration-200\",\n \"before:bg-current before:opacity-0\",\n \"hover:before:opacity-8\",\n \"active:before:opacity-12\",\n ],\n {\n variants: {\n /**\n * Radio state (determines visual appearance)\n */\n state: {\n unselected: \"text-on-surface-variant\",\n selected: \"text-primary\",\n },\n\n /**\n * Error/invalid state\n */\n isInvalid: {\n true: \"text-error\",\n false: \"\",\n },\n\n /**\n * Disabled state\n */\n disabled: {\n true: \"text-on-surface pointer-events-none\",\n false: \"\",\n },\n },\n compoundVariants: [\n // Error state overrides normal colors for all states\n {\n state: \"unselected\",\n isInvalid: true,\n disabled: false,\n className: \"text-error\",\n },\n {\n state: \"selected\",\n isInvalid: true,\n disabled: false,\n className: \"text-error\",\n },\n ],\n defaultVariants: {\n state: \"unselected\",\n isInvalid: false,\n disabled: false,\n },\n }\n);\n\n/**\n * Radio icon outer circle variants (the 20x20dp circle)\n */\nexport const radioIconOuterVariants = cva(\n [\n // Base classes for the radio outer circle\n \"transition-all duration-200\",\n ],\n {\n variants: {\n /**\n * Radio state\n */\n state: {\n unselected: [\n \"fill-transparent\",\n \"stroke-current\", // Uses parent text color (on-surface-variant or error)\n \"stroke-2\", // MD3: 2dp outline width\n ],\n selected: [\n \"fill-current\", // Uses parent text color (primary or error)\n \"stroke-none\",\n ],\n },\n\n /**\n * Disabled state\n */\n disabled: {\n true: [\"fill-transparent\", \"stroke-current\", \"stroke-2\"],\n false: \"\",\n },\n },\n compoundVariants: [\n // Disabled + selected state overrides fill\n {\n state: \"selected\",\n disabled: true,\n className: \"fill-current stroke-none\",\n },\n ],\n defaultVariants: {\n state: \"unselected\",\n disabled: false,\n },\n }\n);\n\n/**\n * Radio icon inner dot variants (the 10px center dot when selected)\n */\nexport const radioIconInnerVariants = cva(\n [\n \"fill-current\", // Inherits color from parent (on-primary)\n \"transition-all duration-200\",\n ],\n {\n variants: {\n /**\n * Visibility based on state\n */\n visible: {\n true: \"opacity-100 scale-100\",\n false: \"opacity-0 scale-0\",\n },\n },\n defaultVariants: {\n visible: false,\n },\n }\n);\n\n/**\n * Radio label text variants\n */\nexport const radioLabelVariants = cva(\n [\n \"text-sm\", // MD3: Body Medium (14px)\n \"text-on-surface\",\n \"select-none\",\n \"ml-4\", // 16px spacing between radio and label (MD3 standard)\n ],\n {\n variants: {\n disabled: {\n true: \"\",\n false: \"\",\n },\n },\n defaultVariants: {\n disabled: false,\n },\n }\n);\n\n/**\n * Extract variant prop types from CVA\n */\nexport type RadioGroupVariants = VariantProps<typeof radioGroupVariants>;\nexport type RadioGroupLabelVariants = VariantProps<typeof radioGroupLabelVariants>;\nexport type RadioVariants = VariantProps<typeof radioVariants>;\nexport type RadioContainerVariants = VariantProps<typeof radioContainerVariants>;\nexport type RadioIconOuterVariants = VariantProps<typeof radioIconOuterVariants>;\nexport type RadioIconInnerVariants = VariantProps<typeof radioIconInnerVariants>;\nexport type RadioLabelVariants = VariantProps<typeof radioLabelVariants>;\n","\"use client\";\n\nimport { forwardRef, useRef, useContext } from \"react\";\nimport type React from \"react\";\nimport { useRadio, useFocusRing, mergeProps, VisuallyHidden } from \"react-aria\";\nimport { cn } from \"../../utils/cn\";\nimport { useRipple } from \"../../hooks/useRipple\";\nimport { RadioGroupContext } from \"./RadioGroupHeadless\";\nimport {\n radioVariants,\n radioContainerVariants,\n radioIconOuterVariants,\n radioIconInnerVariants,\n radioLabelVariants,\n} from \"./Radio.variants\";\nimport type { RadioProps } from \"./Radio.types\";\n\n/**\n * Material Design 3 Radio Component (Layer 3: Styled)\n *\n * Built on React Aria for world-class accessibility.\n * Uses CVA for type-safe variant management.\n * Styled with Tailwind CSS using MD3 design tokens.\n * Must be used within a RadioGroup for proper functionality.\n *\n * Features:\n * - ✅ 2 states: unselected, selected\n * - ✅ Ripple effect (Material Design)\n * - ✅ Full keyboard accessibility (via React Aria)\n * - ✅ Screen reader support (via React Aria)\n * - ✅ Focus management (via React Aria)\n * - ✅ Form integration (name, value props from RadioGroup)\n *\n * MD3 Specifications:\n * - Radio icon: 20x20dp (within 40x40dp touch target)\n * - Outer circle: 20px\n * - Inner dot: 10px (selected state)\n * - Outline width: 2dp\n * - State layers: 8% hover, 12% focus/pressed\n * - Disabled: 38% opacity\n * - Label spacing: 16px (ml-4)\n *\n * @example\n * ```tsx\n * // Basic usage within RadioGroup\n * <RadioGroup label=\"Options\">\n * <Radio value=\"a\">Option A</Radio>\n * <Radio value=\"b\">Option B</Radio>\n * </RadioGroup>\n *\n * // Without label (needs aria-label)\n * <RadioGroup label=\"Options\">\n * <Radio value=\"a\" aria-label=\"Option A\" />\n * </RadioGroup>\n *\n * // Disabled individual radio\n * <RadioGroup label=\"Options\">\n * <Radio value=\"a\">Enabled</Radio>\n * <Radio value=\"b\" isDisabled>Disabled</Radio>\n * </RadioGroup>\n *\n * // Custom styling\n * <Radio value=\"custom\" className=\"my-custom-class\">\n * Custom\n * </Radio>\n * ```\n */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n (\n {\n // Content props\n children,\n\n // State props\n disableRipple = false,\n isDisabled = false,\n\n // Styling\n className,\n\n // Other props\n ...props\n },\n forwardedRef\n ) => {\n // Get RadioGroup state from context\n const state = useContext(RadioGroupContext);\n\n if (!state) {\n throw new Error(\"Radio must be used within a RadioGroup\");\n }\n\n // Internal ref for React Aria\n const internalRef = useRef<HTMLInputElement>(null);\n\n // Merge internal ref with forwarded ref\n const ref = (forwardedRef ?? internalRef) as React.RefObject<HTMLInputElement>;\n\n // Extract data-testid and other HTML attributes\n const htmlAttrs = props as Record<string, unknown>;\n const dataTestId = htmlAttrs[\"data-testid\"] as string | undefined;\n const htmlId = htmlAttrs.id as string | undefined;\n const htmlTitle = htmlAttrs.title as string | undefined;\n\n // Remove HTML attributes from props for React Aria\n const {\n \"data-testid\": _dataTestId,\n id: _htmlId,\n title: _htmlTitle,\n ...restPropsWithoutHtmlAttrs\n } = props as Record<string, unknown>;\n\n // React Aria hooks - pass props without HTML attributes\n const {\n inputProps,\n isSelected,\n isDisabled: radioIsDisabled,\n } = useRadio(\n {\n ...restPropsWithoutHtmlAttrs,\n value: props.value,\n } as Parameters<typeof useRadio>[0],\n state,\n ref\n );\n const { isFocusVisible, focusProps } = useFocusRing();\n\n // Determine final disabled state (group or individual)\n const finalIsDisabled = isDisabled || radioIsDisabled;\n\n // Determine visual state\n const visualState = isSelected ? \"selected\" : \"unselected\";\n\n // Ripple effect\n const { onMouseDown: handleRipple, ripples } = useRipple({\n disabled: finalIsDisabled || disableRipple,\n });\n\n // Development warnings\n if (process.env.NODE_ENV === \"development\") {\n const ariaProps = restPropsWithoutHtmlAttrs as {\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n };\n if (!children && !ariaProps[\"aria-label\"] && !ariaProps[\"aria-labelledby\"]) {\n console.warn(\n \"[Radio] Radio should have a label (children) or aria-label for accessibility.\"\n );\n }\n }\n\n // Get isInvalid from RadioGroup state if available\n const isInvalid = state.validationState === \"invalid\";\n\n return (\n <label\n className={cn(\n radioVariants({\n disabled: finalIsDisabled,\n }),\n className\n )}\n data-testid={dataTestId}\n title={htmlTitle}\n >\n {/* Visually hidden native input for accessibility */}\n <VisuallyHidden>\n <input {...mergeProps(inputProps, focusProps)} ref={ref} id={htmlId} />\n </VisuallyHidden>\n\n {/* Visual radio container */}\n <div\n role=\"presentation\"\n className={cn(\n radioContainerVariants({\n state: visualState,\n isInvalid,\n disabled: finalIsDisabled,\n })\n )}\n onMouseDown={handleRipple}\n >\n {/* Ripple effect */}\n {ripples}\n\n {/* SVG Radio Visual */}\n <svg\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n aria-hidden=\"true\"\n className=\"relative z-10\"\n >\n {/* Outer circle (20x20) */}\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"9\"\n className={cn(\n radioIconOuterVariants({\n state: visualState,\n disabled: finalIsDisabled,\n })\n )}\n />\n\n {/* Inner dot (10px diameter = 5px radius, shown when selected) */}\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"5\"\n className={cn(\n radioIconInnerVariants({\n visible: isSelected,\n })\n )}\n style={{ fill: \"var(--color-on-primary)\" }}\n />\n\n {/* Focus ring (visible on keyboard focus) */}\n {isFocusVisible && (\n <circle\n cx=\"10\"\n cy=\"10\"\n r=\"13\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n className=\"animate-pulse\"\n />\n )}\n </svg>\n </div>\n\n {/* Label text */}\n {children && (\n <span\n className={cn(\n radioLabelVariants({\n disabled: finalIsDisabled,\n })\n )}\n >\n {children}\n </span>\n )}\n </label>\n );\n }\n);\n\nRadio.displayName = \"Radio\";\n","\"use client\";\n\nimport { forwardRef } from \"react\";\nimport { cn } from \"../../utils/cn\";\nimport { RadioGroupHeadless } from \"./RadioGroupHeadless\";\nimport { radioGroupVariants, radioGroupLabelVariants } from \"./Radio.variants\";\nimport type { RadioGroupProps } from \"./Radio.types\";\n\n/**\n * Material Design 3 RadioGroup Component (Layer 3: Styled)\n *\n * Built on React Aria for world-class accessibility.\n * Uses CVA for type-safe variant management.\n * Styled with Tailwind CSS using MD3 design tokens.\n *\n * Features:\n * - ✅ Single-selection behavior\n * - ✅ Horizontal and vertical orientation\n * - ✅ Error/invalid state support\n * - ✅ Full keyboard accessibility (via React Aria)\n * - ✅ Screen reader support (via React Aria)\n * - ✅ Focus management (via React Aria)\n * - ✅ Form integration (name, value props)\n *\n * MD3 Specifications:\n * - Radio icon: 20x20dp (within 40x40dp touch target)\n * - State layers: 8% hover, 12% focus/pressed\n * - Disabled: 38% opacity\n * - Radio spacing: 16px gap\n *\n * @example\n * ```tsx\n * // Basic usage (vertical)\n * <RadioGroup label=\"Favorite color\">\n * <Radio value=\"red\">Red</Radio>\n * <Radio value=\"blue\">Blue</Radio>\n * </RadioGroup>\n *\n * // Horizontal orientation\n * <RadioGroup label=\"Size\" orientation=\"horizontal\">\n * <Radio value=\"s\">Small</Radio>\n * <Radio value=\"m\">Medium</Radio>\n * <Radio value=\"l\">Large</Radio>\n * </RadioGroup>\n *\n * // Controlled\n * <RadioGroup label=\"Choice\" value={selected} onChange={setSelected}>\n * <Radio value=\"a\">Option A</Radio>\n * <Radio value=\"b\">Option B</Radio>\n * </RadioGroup>\n *\n * // Error state\n * <RadioGroup label=\"Required\" isInvalid>\n * <Radio value=\"yes\">Yes</Radio>\n * <Radio value=\"no\">No</Radio>\n * </RadioGroup>\n *\n * // Disabled\n * <RadioGroup label=\"Options\" isDisabled>\n * <Radio value=\"a\">Option A</Radio>\n * <Radio value=\"b\">Option B</Radio>\n * </RadioGroup>\n * ```\n */\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n (\n {\n // Content props\n children,\n\n // State props\n orientation = \"vertical\",\n isInvalid = false,\n isDisabled = false,\n\n // Styling\n className,\n\n // Other props\n ...props\n },\n ref\n ) => {\n // Extract data-testid and other HTML attributes\n const htmlAttrs = props as Record<string, unknown>;\n const dataTestId = htmlAttrs[\"data-testid\"] as string | undefined;\n\n // Remove HTML attributes from props for React Aria\n const { \"data-testid\": _dataTestId, ...restPropsWithoutHtmlAttrs } = props as Record<\n string,\n unknown\n >;\n\n // Development warnings\n if (process.env.NODE_ENV === \"development\") {\n const ariaProps = restPropsWithoutHtmlAttrs as {\n label?: string;\n \"aria-label\"?: string;\n \"aria-labelledby\"?: string;\n };\n if (!ariaProps.label && !ariaProps[\"aria-label\"] && !ariaProps[\"aria-labelledby\"]) {\n console.warn(\n \"[RadioGroup] RadioGroup should have a label or aria-label for accessibility.\"\n );\n }\n }\n\n return (\n <RadioGroupHeadless\n {...restPropsWithoutHtmlAttrs}\n isDisabled={isDisabled}\n ref={ref}\n className={cn(\"flex flex-col\", className)}\n data-testid={dataTestId}\n renderLabel={(labelProps) => (\n <div\n {...labelProps}\n className={cn(\n radioGroupLabelVariants({\n disabled: isDisabled,\n })\n )}\n >\n {props.label}\n </div>\n )}\n >\n {/* Radio buttons container */}\n <div\n className={cn(\n radioGroupVariants({\n orientation,\n disabled: isDisabled,\n })\n )}\n >\n {children}\n </div>\n </RadioGroupHeadless>\n );\n }\n);\n\nRadioGroup.displayName = \"RadioGroup\";\n","import { forwardRef, useRef, useContext } from \"react\";\nimport { useRadio, useFocusRing } from \"react-aria\";\nimport { RadioGroupContext } from \"./RadioGroupHeadless\";\nimport type { RadioHeadlessProps } from \"./Radio.types\";\n\n/**\n * Headless Radio Component (Layer 2)\n *\n * Unstyled radio primitive using React Aria for accessibility.\n * Provides behavior only - bring your own styles.\n * Must be used within a RadioGroup for proper functionality.\n *\n * Features:\n * - Full keyboard navigation (Space to select)\n * - Screen reader support\n * - Touch/pointer event handling\n * - Focus management\n * - Disabled state handling\n * - Form integration\n *\n * @example\n * ```tsx\n * // Use for custom styling\n * <RadioGroupHeadless label=\"Options\">\n * <RadioHeadless value=\"a\" className=\"custom-radio\">\n * Option A\n * </RadioHeadless>\n * </RadioGroupHeadless>\n *\n * // With render prop for custom visual\n * <RadioHeadless\n * value=\"a\"\n * renderRadio={({ isSelected }) => (\n * <CustomRadioIcon checked={isSelected} />\n * )}\n * >\n * Custom visual\n * </RadioHeadless>\n * ```\n */\nexport const RadioHeadless = forwardRef<HTMLInputElement, RadioHeadlessProps>(\n ({ className, children, renderRadio, ...props }, forwardedRef) => {\n // Get RadioGroup state from context\n const state = useContext(RadioGroupContext);\n\n if (!state) {\n throw new Error(\"RadioHeadless must be used within a RadioGroupHeadless\");\n }\n\n // Internal ref for React Aria\n const internalRef = useRef<HTMLInputElement>(null);\n\n // Merge internal ref with forwarded ref\n const ref = (forwardedRef ?? internalRef) as React.RefObject<HTMLInputElement>;\n\n // React Aria hook - handles all accessibility\n const { inputProps, isSelected, isDisabled, isPressed } = useRadio(props, state, ref);\n\n // Focus ring for keyboard navigation\n const { isFocusVisible, focusProps } = useFocusRing();\n\n return (\n <label className={className}>\n <input {...inputProps} {...focusProps} ref={ref} />\n {renderRadio?.({\n isSelected,\n isDisabled,\n isFocusVisible,\n isPressed,\n })}\n {children}\n </label>\n );\n }\n);\n\nRadioHeadless.displayName = \"RadioHeadless\";\n"]}