@compa11y/react 0.1.0 → 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/hooks/use-focus-visible.ts","../src/hooks/use-roving-tabindex.ts","../src/components/switch/switch.tsx"],"names":["isFocusVisible","checkFocusVisible","useState","useEffect","useCallback","Switch","announce"],"mappings":"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","file":"index.js","sourcesContent":["import { useEffect, useState, useCallback } from 'react';\nimport {\n initFocusVisible,\n isFocusVisible as checkFocusVisible,\n focusWithVisibleRing,\n} from '@compa11y/core';\n\n/**\n * Hook to detect if focus should be visible (keyboard navigation)\n *\n * @example\n * ```tsx\n * function Button({ children }) {\n * const { isFocusVisible, focusProps } = useFocusVisible();\n *\n * return (\n * <button\n * {...focusProps}\n * className={isFocusVisible ? 'focus-ring' : ''}\n * >\n * {children}\n * </button>\n * );\n * }\n * ```\n */\nexport function useFocusVisible() {\n const [isFocusVisible, setIsFocusVisible] = useState(false);\n\n // Initialize focus-visible tracking\n useEffect(() => {\n const cleanup = initFocusVisible();\n return cleanup;\n }, []);\n\n const handleFocus = useCallback(() => {\n setIsFocusVisible(checkFocusVisible());\n }, []);\n\n const handleBlur = useCallback(() => {\n setIsFocusVisible(false);\n }, []);\n\n return {\n isFocusVisible,\n focusProps: {\n onFocus: handleFocus,\n onBlur: handleBlur,\n },\n };\n}\n\n/**\n * Hook for managing focus on a specific element\n *\n * @example\n * ```tsx\n * function Combobox() {\n * const inputRef = useFocusManager<HTMLInputElement>({\n * autoFocus: true,\n * });\n *\n * return <input ref={inputRef} />;\n * }\n * ```\n */\nexport function useFocusManager<T extends HTMLElement = HTMLElement>(\n options: {\n autoFocus?: boolean;\n restoreFocus?: boolean;\n focusVisible?: boolean;\n } = {}\n) {\n const {\n autoFocus = false,\n restoreFocus = false,\n focusVisible = true,\n } = options;\n\n const elementRef = useCallback(\n (node: T | null) => {\n if (node && autoFocus) {\n // Delay focus to ensure DOM is ready\n requestAnimationFrame(() => {\n if (focusVisible) {\n focusWithVisibleRing(node);\n } else {\n node.focus();\n }\n });\n }\n },\n [autoFocus, focusVisible]\n );\n\n // Store ref for restore focus\n useEffect(() => {\n if (!restoreFocus) return;\n\n const previousElement = document.activeElement as HTMLElement;\n\n return () => {\n if (previousElement && previousElement.focus) {\n previousElement.focus();\n }\n };\n }, [restoreFocus]);\n\n return elementRef;\n}\n\n/**\n * Focus an element programmatically with proper focus-visible handling\n */\nexport function useFocusControl<T extends HTMLElement = HTMLElement>() {\n const elementRef = useCallback((_node: T | null) => {\n // Just store the ref\n }, []);\n\n const focus = useCallback((options?: { visible?: boolean }) => {\n const element = elementRef as unknown as { current: T | null };\n if (element.current) {\n if (options?.visible) {\n focusWithVisibleRing(element.current);\n } else {\n element.current.focus();\n }\n }\n }, []);\n\n return { ref: elementRef, focus };\n}\n\n/**\n * Track if an element has focus\n */\nexport function useFocusWithin<T extends HTMLElement = HTMLElement>() {\n const [hasFocus, setHasFocus] = useState(false);\n const containerRef = useCallback<React.RefCallback<T>>((_node) => {\n // Element ref callback\n }, []);\n\n const handleFocusIn = useCallback(() => {\n setHasFocus(true);\n }, []);\n\n const handleFocusOut = useCallback((event: React.FocusEvent) => {\n const container = event.currentTarget;\n const relatedTarget = event.relatedTarget as Node | null;\n\n // Check if focus moved outside the container\n if (!relatedTarget || !container.contains(relatedTarget)) {\n setHasFocus(false);\n }\n }, []);\n\n return {\n ref: containerRef,\n hasFocus,\n focusWithinProps: {\n onFocus: handleFocusIn,\n onBlur: handleFocusOut,\n },\n };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseRovingTabindexOptions {\n /** Initial active index */\n initialIndex?: number;\n /** Whether navigation wraps around */\n wrap?: boolean;\n /** Orientation for arrow keys */\n orientation?: 'horizontal' | 'vertical' | 'both';\n /** Called when active index changes */\n onChange?: (index: number) => void;\n}\n\nexport interface RovingTabindexItem {\n /** Props to spread on the item element */\n props: {\n tabIndex: number;\n onKeyDown: (event: React.KeyboardEvent) => void;\n onFocus: () => void;\n };\n /** Whether this item is the active/focusable one */\n isActive: boolean;\n}\n\n/**\n * Hook for roving tabindex pattern\n *\n * @example\n * ```tsx\n * function Toolbar() {\n * const { getItemProps, activeIndex } = useRovingTabindex({\n * itemCount: 3,\n * orientation: 'horizontal',\n * });\n *\n * return (\n * <div role=\"toolbar\">\n * <button {...getItemProps(0)}>Cut</button>\n * <button {...getItemProps(1)}>Copy</button>\n * <button {...getItemProps(2)}>Paste</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useRovingTabindex(options: UseRovingTabindexOptions & { itemCount: number }) {\n const {\n itemCount,\n initialIndex = 0,\n wrap = true,\n orientation = 'both',\n onChange,\n } = options;\n\n const [activeIndex, setActiveIndex] = useState(initialIndex);\n const itemRefs = useRef<(HTMLElement | null)[]>([]);\n\n // Reset if item count changes\n useEffect(() => {\n if (activeIndex >= itemCount) {\n setActiveIndex(Math.max(0, itemCount - 1));\n }\n }, [itemCount, activeIndex]);\n\n const moveTo = useCallback(\n (index: number) => {\n let newIndex = index;\n if (newIndex < 0) {\n newIndex = wrap ? itemCount - 1 : 0;\n } else if (newIndex >= itemCount) {\n newIndex = wrap ? 0 : itemCount - 1;\n }\n\n setActiveIndex(newIndex);\n onChange?.(newIndex);\n\n // Focus the element\n const element = itemRefs.current[newIndex];\n element?.focus();\n },\n [itemCount, wrap, onChange]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent, index: number) => {\n let handled = false;\n\n switch (event.key) {\n case 'ArrowRight':\n if (orientation === 'horizontal' || orientation === 'both') {\n moveTo(index + 1);\n handled = true;\n }\n break;\n case 'ArrowLeft':\n if (orientation === 'horizontal' || orientation === 'both') {\n moveTo(index - 1);\n handled = true;\n }\n break;\n case 'ArrowDown':\n if (orientation === 'vertical' || orientation === 'both') {\n moveTo(index + 1);\n handled = true;\n }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical' || orientation === 'both') {\n moveTo(index - 1);\n handled = true;\n }\n break;\n case 'Home':\n moveTo(0);\n handled = true;\n break;\n case 'End':\n moveTo(itemCount - 1);\n handled = true;\n break;\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [orientation, moveTo, itemCount]\n );\n\n const getItemProps = useCallback(\n (index: number) => ({\n ref: (el: HTMLElement | null) => {\n itemRefs.current[index] = el;\n },\n tabIndex: index === activeIndex ? 0 : -1,\n onKeyDown: (event: React.KeyboardEvent) => handleKeyDown(event, index),\n onFocus: () => {\n if (index !== activeIndex) {\n setActiveIndex(index);\n onChange?.(index);\n }\n },\n }),\n [activeIndex, handleKeyDown, onChange]\n );\n\n return {\n activeIndex,\n setActiveIndex: moveTo,\n getItemProps,\n first: () => moveTo(0),\n last: () => moveTo(itemCount - 1),\n next: () => moveTo(activeIndex + 1),\n previous: () => moveTo(activeIndex - 1),\n };\n}\n\n/**\n * Simplified roving tabindex for items with known IDs\n */\nexport function useRovingTabindexMap<T extends string>(\n ids: T[],\n options: Omit<UseRovingTabindexOptions, 'itemCount'> = {}\n) {\n const roving = useRovingTabindex({\n ...options,\n itemCount: ids.length,\n });\n\n const getItemProps = useCallback(\n (id: T) => {\n const index = ids.indexOf(id);\n if (index === -1) {\n throw new Error(`Unknown item ID: ${id}`);\n }\n return roving.getItemProps(index);\n },\n [ids, roving]\n );\n\n const activeId = ids[roving.activeIndex];\n\n return {\n ...roving,\n activeId,\n getItemProps,\n setActiveId: (id: T) => {\n const index = ids.indexOf(id);\n if (index !== -1) {\n roving.setActiveIndex(index);\n }\n },\n };\n}\n","import React, { forwardRef, useCallback, useEffect, useState } from 'react';\nimport { createComponentWarnings } from '@compa11y/core';\nimport { useId } from '../../hooks/use-id';\nimport { useKeyboard } from '../../hooks/use-keyboard';\nimport { useAnnouncer } from '../../hooks/use-announcer';\n\nconst warnings = createComponentWarnings('Switch');\n\nexport interface SwitchProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onChange' | 'role'\n> {\n /** Controlled checked state */\n checked?: boolean;\n /** Default checked state (uncontrolled) */\n defaultChecked?: boolean;\n /** Called when the switch state changes */\n onCheckedChange?: (checked: boolean) => void;\n /** Accessible label for the switch (renders visible label next to switch) */\n label?: string;\n /** Whether the switch is disabled */\n disabled?: boolean;\n /** Remove default styles to allow full customization via className */\n unstyled?: boolean;\n /** Custom class name */\n className?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n}\n\n/**\n * Switch component - An accessible toggle switch (on/off control)\n *\n * Follows WAI-ARIA Switch pattern with proper keyboard support and screen reader announcements.\n *\n * @example\n * ```tsx\n * // Uncontrolled\n * <Switch defaultChecked={true} label=\"Enable notifications\" />\n *\n * // Controlled\n * <Switch\n * checked={enabled}\n * onCheckedChange={setEnabled}\n * aria-label=\"Dark mode\"\n * />\n *\n * // With visible label\n * <Switch checked={enabled} onCheckedChange={setEnabled} label=\"Dark mode\" />\n * ```\n */\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(\n function Switch(\n {\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n label,\n disabled = false,\n unstyled = false,\n className,\n size = 'md',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n onClick,\n ...props\n },\n ref\n ) {\n const id = useId('switch');\n const labelId = `${id}-label`;\n const { announce } = useAnnouncer();\n\n // Support both controlled and uncontrolled modes\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : uncontrolledChecked;\n\n // Warn if no accessible label is provided\n useEffect(() => {\n if (!label && !ariaLabel && !ariaLabelledby) {\n warnings.warning(\n 'Switch has no accessible label. Screen readers need this to identify the switch.',\n 'Add label=\"Description\", aria-label=\"...\", or aria-labelledby=\"...\"'\n );\n }\n }, [label, ariaLabel, ariaLabelledby]);\n\n const toggleSwitch = useCallback(() => {\n if (disabled) return;\n\n const newChecked = !checked;\n\n if (!isControlled) {\n setUncontrolledChecked(newChecked);\n }\n\n onCheckedChange?.(newChecked);\n\n // Announce state change to screen readers\n const labelText = label || ariaLabel || 'Switch';\n announce(`${labelText} ${newChecked ? 'on' : 'off'}`);\n }, [\n checked,\n disabled,\n isControlled,\n onCheckedChange,\n label,\n ariaLabel,\n announce,\n ]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n toggleSwitch();\n }\n },\n [onClick, toggleSwitch]\n );\n\n // Keyboard handling: Space and Enter should toggle\n const keyboardProps = useKeyboard(\n {\n ' ': () => {\n // Space toggles the switch\n toggleSwitch();\n },\n Enter: () => {\n // Enter also toggles (some users prefer Enter over Space)\n toggleSwitch();\n },\n },\n { preventDefault: true }\n );\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n props.onKeyDown?.(event);\n if (!event.defaultPrevented) {\n keyboardProps.onKeyDown(event);\n }\n };\n\n // Compute ARIA label\n const computedAriaLabel = ariaLabel;\n const computedAriaLabelledby =\n ariaLabelledby || (label ? labelId : undefined);\n\n // Structural styles (always applied)\n const wrapperStructuralStyles: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n };\n\n // Size dimensions for structural styles\n const sizes = {\n sm: { width: 32, height: 18, thumb: 14, translate: 14 },\n md: { width: 44, height: 24, thumb: 20, translate: 20 },\n lg: { width: 56, height: 30, thumb: 26, translate: 26 },\n };\n\n const sizeConfig = sizes[size];\n\n const trackStructuralStyles: React.CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n flexShrink: 0,\n width: sizeConfig.width,\n height: sizeConfig.height,\n border: 'none',\n padding: 2,\n cursor: disabled ? 'not-allowed' : 'pointer',\n };\n\n const trackVisualStyles: React.CSSProperties = unstyled\n ? {}\n : {\n backgroundColor: checked ? '#0066cc' : '#d1d5db',\n borderRadius: sizeConfig.height / 2,\n transition: 'background-color 0.2s ease',\n opacity: disabled ? 0.5 : 1,\n };\n\n const thumbStructuralStyles: React.CSSProperties = {\n position: 'absolute',\n left: 2,\n width: sizeConfig.thumb,\n height: sizeConfig.thumb,\n pointerEvents: 'none',\n transform: checked\n ? `translateX(${sizeConfig.translate}px)`\n : 'translateX(0)',\n };\n\n const thumbVisualStyles: React.CSSProperties = unstyled\n ? {}\n : {\n backgroundColor: 'white',\n borderRadius: '50%',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.2)',\n transition: 'transform 0.2s ease',\n };\n\n const labelStyles: React.CSSProperties = unstyled\n ? {\n marginLeft: 8,\n userSelect: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n : {\n marginLeft: 8,\n userSelect: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n };\n\n return (\n <div\n style={wrapperStructuralStyles}\n data-compa11y-switch-wrapper\n data-size={size}\n >\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={computedAriaLabel}\n aria-labelledby={computedAriaLabelledby}\n disabled={disabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={className}\n style={{ ...trackStructuralStyles, ...trackVisualStyles }}\n tabIndex={disabled ? -1 : 0}\n data-compa11y-switch\n data-checked={checked}\n data-disabled={disabled || undefined}\n data-size={size}\n {...props}\n // CSS-in-JS focus-visible styles\n onFocus={(e) => {\n // Add focus-visible indicator\n if (!unstyled) {\n e.currentTarget.style.outline = '2px solid #0066cc';\n e.currentTarget.style.outlineOffset = '2px';\n }\n props.onFocus?.(e);\n }}\n onBlur={(e) => {\n // Remove focus indicator on blur\n if (!unstyled) {\n e.currentTarget.style.outline = 'none';\n }\n props.onBlur?.(e);\n }}\n >\n <span\n style={{ ...thumbStructuralStyles, ...thumbVisualStyles }}\n data-compa11y-switch-thumb\n aria-hidden=\"true\"\n />\n </button>\n {label && (\n <label\n id={labelId}\n onClick={disabled ? undefined : () => toggleSwitch()}\n style={labelStyles}\n data-compa11y-switch-label\n >\n {label}\n </label>\n )}\n </div>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n"]}
1
+ {"version":3,"sources":["../src/hooks/use-focus-visible.ts","../src/hooks/use-roving-tabindex.ts","../src/components/select/select.tsx","../src/components/checkbox/checkbox.tsx","../src/components/radio-group/radio-group.tsx","../src/components/switch/switch.tsx","../src/components/listbox/listbox.tsx","../src/components/input/input.tsx","../src/components/button/button.tsx","../src/components/textarea/textarea.tsx"],"names":["isFocusVisible","checkFocusVisible","useState","useEffect","useCallback","useRef","SelectTrigger","announce","SelectListbox","SelectOptionItem","warnings","createComponentWarnings","jsx","createContext","useContext","forwardRef","CheckboxGroup","jsxs","Checkbox","CheckboxIndicator","RadioGroup","Radio","Switch","Listbox","ListboxOption","ListboxGroup","InputLabel","InputField","InputHint","InputError","Input","isCompound","Button","TextareaLabel","TextareaField","TextareaHint","TextareaError","Textarea","Children"],"mappings":"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","file":"index.js","sourcesContent":["import { useEffect, useState, useCallback } from 'react';\nimport {\n initFocusVisible,\n isFocusVisible as checkFocusVisible,\n focusWithVisibleRing,\n} from '@compa11y/core';\n\n/**\n * Hook to detect if focus should be visible (keyboard navigation)\n *\n * @example\n * ```tsx\n * function Button({ children }) {\n * const { isFocusVisible, focusProps } = useFocusVisible();\n *\n * return (\n * <button\n * {...focusProps}\n * className={isFocusVisible ? 'focus-ring' : ''}\n * >\n * {children}\n * </button>\n * );\n * }\n * ```\n */\nexport function useFocusVisible() {\n const [isFocusVisible, setIsFocusVisible] = useState(false);\n\n // Initialize focus-visible tracking\n useEffect(() => {\n const cleanup = initFocusVisible();\n return cleanup;\n }, []);\n\n const handleFocus = useCallback(() => {\n setIsFocusVisible(checkFocusVisible());\n }, []);\n\n const handleBlur = useCallback(() => {\n setIsFocusVisible(false);\n }, []);\n\n return {\n isFocusVisible,\n focusProps: {\n onFocus: handleFocus,\n onBlur: handleBlur,\n },\n };\n}\n\n/**\n * Hook for managing focus on a specific element\n *\n * @example\n * ```tsx\n * function Combobox() {\n * const inputRef = useFocusManager<HTMLInputElement>({\n * autoFocus: true,\n * });\n *\n * return <input ref={inputRef} />;\n * }\n * ```\n */\nexport function useFocusManager<T extends HTMLElement = HTMLElement>(\n options: {\n autoFocus?: boolean;\n restoreFocus?: boolean;\n focusVisible?: boolean;\n } = {}\n) {\n const {\n autoFocus = false,\n restoreFocus = false,\n focusVisible = true,\n } = options;\n\n const elementRef = useCallback(\n (node: T | null) => {\n if (node && autoFocus) {\n // Delay focus to ensure DOM is ready\n requestAnimationFrame(() => {\n if (focusVisible) {\n focusWithVisibleRing(node);\n } else {\n node.focus();\n }\n });\n }\n },\n [autoFocus, focusVisible]\n );\n\n // Store ref for restore focus\n useEffect(() => {\n if (!restoreFocus) return;\n\n const previousElement = document.activeElement as HTMLElement;\n\n return () => {\n if (previousElement && previousElement.focus) {\n previousElement.focus();\n }\n };\n }, [restoreFocus]);\n\n return elementRef;\n}\n\n/**\n * Focus an element programmatically with proper focus-visible handling\n */\nexport function useFocusControl<T extends HTMLElement = HTMLElement>() {\n const elementRef = useCallback((_node: T | null) => {\n // Just store the ref\n }, []);\n\n const focus = useCallback((options?: { visible?: boolean }) => {\n const element = elementRef as unknown as { current: T | null };\n if (element.current) {\n if (options?.visible) {\n focusWithVisibleRing(element.current);\n } else {\n element.current.focus();\n }\n }\n }, []);\n\n return { ref: elementRef, focus };\n}\n\n/**\n * Track if an element has focus\n */\nexport function useFocusWithin<T extends HTMLElement = HTMLElement>() {\n const [hasFocus, setHasFocus] = useState(false);\n const containerRef = useCallback<React.RefCallback<T>>((_node) => {\n // Element ref callback\n }, []);\n\n const handleFocusIn = useCallback(() => {\n setHasFocus(true);\n }, []);\n\n const handleFocusOut = useCallback((event: React.FocusEvent) => {\n const container = event.currentTarget;\n const relatedTarget = event.relatedTarget as Node | null;\n\n // Check if focus moved outside the container\n if (!relatedTarget || !container.contains(relatedTarget)) {\n setHasFocus(false);\n }\n }, []);\n\n return {\n ref: containerRef,\n hasFocus,\n focusWithinProps: {\n onFocus: handleFocusIn,\n onBlur: handleFocusOut,\n },\n };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseRovingTabindexOptions {\n /** Initial active index */\n initialIndex?: number;\n /** Whether navigation wraps around */\n wrap?: boolean;\n /** Orientation for arrow keys */\n orientation?: 'horizontal' | 'vertical' | 'both';\n /** Called when active index changes */\n onChange?: (index: number) => void;\n}\n\nexport interface RovingTabindexItem {\n /** Props to spread on the item element */\n props: {\n tabIndex: number;\n onKeyDown: (event: React.KeyboardEvent) => void;\n onFocus: () => void;\n };\n /** Whether this item is the active/focusable one */\n isActive: boolean;\n}\n\n/**\n * Hook for roving tabindex pattern\n *\n * @example\n * ```tsx\n * function Toolbar() {\n * const { getItemProps, activeIndex } = useRovingTabindex({\n * itemCount: 3,\n * orientation: 'horizontal',\n * });\n *\n * return (\n * <div role=\"toolbar\">\n * <button {...getItemProps(0)}>Cut</button>\n * <button {...getItemProps(1)}>Copy</button>\n * <button {...getItemProps(2)}>Paste</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useRovingTabindex(options: UseRovingTabindexOptions & { itemCount: number }) {\n const {\n itemCount,\n initialIndex = 0,\n wrap = true,\n orientation = 'both',\n onChange,\n } = options;\n\n const [activeIndex, setActiveIndex] = useState(initialIndex);\n const itemRefs = useRef<(HTMLElement | null)[]>([]);\n\n // Reset if item count changes\n useEffect(() => {\n if (activeIndex >= itemCount) {\n setActiveIndex(Math.max(0, itemCount - 1));\n }\n }, [itemCount, activeIndex]);\n\n const moveTo = useCallback(\n (index: number) => {\n let newIndex = index;\n if (newIndex < 0) {\n newIndex = wrap ? itemCount - 1 : 0;\n } else if (newIndex >= itemCount) {\n newIndex = wrap ? 0 : itemCount - 1;\n }\n\n setActiveIndex(newIndex);\n onChange?.(newIndex);\n\n // Focus the element\n const element = itemRefs.current[newIndex];\n element?.focus();\n },\n [itemCount, wrap, onChange]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent, index: number) => {\n let handled = false;\n\n switch (event.key) {\n case 'ArrowRight':\n if (orientation === 'horizontal' || orientation === 'both') {\n moveTo(index + 1);\n handled = true;\n }\n break;\n case 'ArrowLeft':\n if (orientation === 'horizontal' || orientation === 'both') {\n moveTo(index - 1);\n handled = true;\n }\n break;\n case 'ArrowDown':\n if (orientation === 'vertical' || orientation === 'both') {\n moveTo(index + 1);\n handled = true;\n }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical' || orientation === 'both') {\n moveTo(index - 1);\n handled = true;\n }\n break;\n case 'Home':\n moveTo(0);\n handled = true;\n break;\n case 'End':\n moveTo(itemCount - 1);\n handled = true;\n break;\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [orientation, moveTo, itemCount]\n );\n\n const getItemProps = useCallback(\n (index: number) => ({\n ref: (el: HTMLElement | null) => {\n itemRefs.current[index] = el;\n },\n tabIndex: index === activeIndex ? 0 : -1,\n onKeyDown: (event: React.KeyboardEvent) => handleKeyDown(event, index),\n onFocus: () => {\n if (index !== activeIndex) {\n setActiveIndex(index);\n onChange?.(index);\n }\n },\n }),\n [activeIndex, handleKeyDown, onChange]\n );\n\n return {\n activeIndex,\n setActiveIndex: moveTo,\n getItemProps,\n first: () => moveTo(0),\n last: () => moveTo(itemCount - 1),\n next: () => moveTo(activeIndex + 1),\n previous: () => moveTo(activeIndex - 1),\n };\n}\n\n/**\n * Simplified roving tabindex for items with known IDs\n */\nexport function useRovingTabindexMap<T extends string>(\n ids: T[],\n options: Omit<UseRovingTabindexOptions, 'itemCount'> = {}\n) {\n const roving = useRovingTabindex({\n ...options,\n itemCount: ids.length,\n });\n\n const getItemProps = useCallback(\n (id: T) => {\n const index = ids.indexOf(id);\n if (index === -1) {\n throw new Error(`Unknown item ID: ${id}`);\n }\n return roving.getItemProps(index);\n },\n [ids, roving]\n );\n\n const activeId = ids[roving.activeIndex];\n\n return {\n ...roving,\n activeId,\n getItemProps,\n setActiveId: (id: T) => {\n const index = ids.indexOf(id);\n if (index !== -1) {\n roving.setActiveIndex(index);\n }\n },\n };\n}\n","import React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useId } from '../../hooks/use-id';\nimport { useKeyboard, useTypeAhead } from '../../hooks/use-keyboard';\nimport { useAnnouncer } from '../../hooks/use-announcer';\nimport { createComponentWarnings } from '@compa11y/core';\n\nconst warnings = createComponentWarnings('Select');\n\nexport interface SelectOption {\n value: string;\n label: string;\n disabled?: boolean;\n}\n\ninterface SelectContextValue {\n selectedValue: string | null;\n setSelectedValue: (value: string | null) => void;\n isOpen: boolean;\n setIsOpen: (open: boolean) => void;\n highlightedIndex: number;\n setHighlightedIndex: (index: number) => void;\n options: SelectOption[];\n triggerId: string;\n listboxId: string;\n getOptionId: (index: number) => string;\n onSelect: (option: SelectOption) => void;\n triggerRef: React.RefObject<HTMLButtonElement | null>;\n placeholder: string;\n disabled: boolean;\n}\n\nconst SelectContext = createContext<SelectContextValue | null>(null);\n\nfunction useSelectContext(): SelectContextValue {\n const context = useContext(SelectContext);\n if (!context) {\n throw new Error(\n 'Select compound components must be used within a Select component'\n );\n }\n return context;\n}\n\n// Navigation helpers that skip disabled options\nfunction findNextEnabledIndex(\n options: SelectOption[],\n currentIndex: number,\n direction: 1 | -1\n): number {\n const length = options.length;\n let index = currentIndex + direction;\n\n if (index < 0) index = length - 1;\n if (index >= length) index = 0;\n\n const startIndex = index;\n while (options[index]?.disabled) {\n index += direction;\n if (index < 0) index = length - 1;\n if (index >= length) index = 0;\n if (index === startIndex) return -1; // All disabled\n }\n\n return index;\n}\n\nfunction findFirstEnabledIndex(options: SelectOption[]): number {\n return options.findIndex((o) => !o.disabled);\n}\n\nfunction findLastEnabledIndex(options: SelectOption[]): number {\n for (let i = options.length - 1; i >= 0; i--) {\n if (!options[i]?.disabled) return i;\n }\n return -1;\n}\n\n/**\n * Accessible Select component\n *\n * A dropdown selection component following WAI-ARIA Listbox pattern.\n * Unlike Combobox, Select uses a button trigger and does not support text filtering.\n *\n * @example\n * ```tsx\n * <Select\n * options={[\n * { value: 'apple', label: 'Apple' },\n * { value: 'banana', label: 'Banana' },\n * ]}\n * value={value}\n * onValueChange={setValue}\n * aria-label=\"Choose a fruit\"\n * >\n * <Select.Trigger placeholder=\"Pick a fruit...\" />\n * <Select.Listbox />\n * </Select>\n * ```\n */\nexport interface SelectProps {\n /** List of options */\n options: SelectOption[];\n /** Controlled selected value */\n value?: string | null;\n /** Default value for uncontrolled mode */\n defaultValue?: string;\n /** Called when selection changes */\n onValueChange?: (value: string | null) => void;\n /** Whether the select is disabled */\n disabled?: boolean;\n /** Placeholder text when no value is selected */\n placeholder?: string;\n /** Accessible label */\n 'aria-label'?: string;\n /** ID of labelling element */\n 'aria-labelledby'?: string;\n children: React.ReactNode;\n}\n\nexport function Select({\n options,\n value: controlledValue,\n defaultValue,\n onValueChange,\n disabled = false,\n placeholder = 'Select an option...',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n children,\n}: SelectProps) {\n const [uncontrolledValue, setUncontrolledValue] = useState<string | null>(\n defaultValue ?? null\n );\n const [isOpen, setIsOpen] = useState(false);\n const [highlightedIndex, setHighlightedIndex] = useState(-1);\n const triggerRef = useRef<HTMLButtonElement | null>(null);\n\n const selectedValue =\n controlledValue !== undefined ? controlledValue : uncontrolledValue;\n\n const triggerId = useId('select-trigger');\n const listboxId = useId('select-listbox');\n const baseOptionId = useId('select-option');\n\n const setSelectedValue = useCallback(\n (value: string | null) => {\n if (controlledValue === undefined) {\n setUncontrolledValue(value);\n }\n onValueChange?.(value);\n },\n [controlledValue, onValueChange]\n );\n\n const getOptionId = useCallback(\n (index: number) => `${baseOptionId}-${index}`,\n [baseOptionId]\n );\n\n const onSelect = useCallback(\n (option: SelectOption) => {\n setSelectedValue(option.value);\n setIsOpen(false);\n setHighlightedIndex(-1);\n // Return focus to trigger\n triggerRef.current?.focus();\n },\n [setSelectedValue]\n );\n\n useEffect(() => {\n if (!ariaLabel && !ariaLabelledBy) {\n warnings.warning(\n 'Select has no accessible label.',\n 'Add aria-label or aria-labelledby prop.'\n );\n }\n }, [ariaLabel, ariaLabelledBy]);\n\n const contextValue: SelectContextValue = {\n selectedValue,\n setSelectedValue,\n isOpen,\n setIsOpen,\n highlightedIndex,\n setHighlightedIndex,\n options,\n triggerId,\n listboxId,\n getOptionId,\n onSelect,\n triggerRef,\n placeholder,\n disabled,\n };\n\n return (\n <SelectContext.Provider value={contextValue}>\n <div data-compa11y-select data-disabled={disabled || undefined}>\n {children}\n </div>\n </SelectContext.Provider>\n );\n}\n\nexport interface SelectTriggerProps\n extends Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, 'value'> {}\n\nexport const SelectTrigger = forwardRef<HTMLButtonElement, SelectTriggerProps>(\n function SelectTrigger(\n { onKeyDown, onClick, onBlur, ...props },\n forwardedRef\n ) {\n const {\n selectedValue,\n isOpen,\n setIsOpen,\n highlightedIndex,\n setHighlightedIndex,\n options,\n triggerId,\n listboxId,\n getOptionId,\n onSelect,\n triggerRef,\n placeholder,\n disabled,\n } = useSelectContext();\n const { announce } = useAnnouncer();\n\n // Type-ahead: pressing characters jumps to matching option\n const typeAheadProps = useTypeAhead(\n options.map((o) => o.label),\n (match) => {\n const index = options.findIndex(\n (o) => o.label === match && !o.disabled\n );\n if (index >= 0) {\n if (!isOpen) {\n setIsOpen(true);\n }\n setHighlightedIndex(index);\n }\n },\n { disabled }\n );\n\n // Open and highlight selected or first/last option\n const openAndHighlight = useCallback(\n (preferLast = false) => {\n setIsOpen(true);\n const selectedIndex = options.findIndex(\n (o) => o.value === selectedValue\n );\n if (selectedIndex >= 0) {\n setHighlightedIndex(selectedIndex);\n } else {\n setHighlightedIndex(\n preferLast\n ? findLastEnabledIndex(options)\n : findFirstEnabledIndex(options)\n );\n }\n },\n [options, selectedValue, setIsOpen, setHighlightedIndex]\n );\n\n const keyboardProps = useKeyboard(\n {\n ArrowDown: () => {\n if (!isOpen) {\n openAndHighlight();\n } else {\n const next = findNextEnabledIndex(options, highlightedIndex, 1);\n if (next >= 0) setHighlightedIndex(next);\n }\n },\n ArrowUp: () => {\n if (!isOpen) {\n openAndHighlight(true);\n } else {\n const prev = findNextEnabledIndex(options, highlightedIndex, -1);\n if (prev >= 0) setHighlightedIndex(prev);\n }\n },\n Enter: () => {\n if (isOpen && highlightedIndex >= 0) {\n const option = options[highlightedIndex];\n if (option && !option.disabled) {\n onSelect(option);\n announce(`${option.label} selected`);\n }\n } else if (!isOpen) {\n openAndHighlight();\n }\n },\n ' ': () => {\n if (isOpen && highlightedIndex >= 0) {\n const option = options[highlightedIndex];\n if (option && !option.disabled) {\n onSelect(option);\n announce(`${option.label} selected`);\n }\n } else if (!isOpen) {\n openAndHighlight();\n }\n },\n Escape: () => {\n if (isOpen) {\n setIsOpen(false);\n setHighlightedIndex(-1);\n }\n },\n Home: () => {\n if (isOpen) {\n setHighlightedIndex(findFirstEnabledIndex(options));\n }\n },\n End: () => {\n if (isOpen) {\n setHighlightedIndex(findLastEnabledIndex(options));\n }\n },\n Tab: () => {\n if (isOpen) {\n setIsOpen(false);\n setHighlightedIndex(-1);\n }\n return false; // Allow natural tab behavior\n },\n },\n { preventDefault: true, stopPropagation: false }\n );\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n onKeyDown?.(event);\n if (!event.defaultPrevented) {\n keyboardProps.onKeyDown(event);\n }\n // Type-ahead for printable characters not already handled\n if (!event.defaultPrevented) {\n typeAheadProps.onKeyDown(event);\n }\n };\n\n const handleClick = (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented && !disabled) {\n if (isOpen) {\n setIsOpen(false);\n setHighlightedIndex(-1);\n } else {\n openAndHighlight();\n }\n }\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLButtonElement>) => {\n onBlur?.(event);\n // Delay close to allow clicks on options to register\n setTimeout(() => {\n setIsOpen(false);\n setHighlightedIndex(-1);\n }, 150);\n };\n\n const activeDescendant =\n isOpen && highlightedIndex >= 0\n ? getOptionId(highlightedIndex)\n : undefined;\n\n const selectedOption = options.find((o) => o.value === selectedValue);\n const displayText = selectedOption?.label ?? placeholder;\n\n const setRefs = useCallback(\n (node: HTMLButtonElement | null) => {\n (\n triggerRef as React.MutableRefObject<HTMLButtonElement | null>\n ).current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n (\n forwardedRef as React.MutableRefObject<HTMLButtonElement | null>\n ).current = node;\n }\n },\n [forwardedRef, triggerRef]\n );\n\n return (\n <button\n ref={setRefs}\n id={triggerId}\n type=\"button\"\n role=\"combobox\"\n aria-expanded={isOpen}\n aria-controls={listboxId}\n aria-haspopup=\"listbox\"\n aria-activedescendant={activeDescendant}\n disabled={disabled}\n onKeyDown={handleKeyDown}\n onClick={handleClick}\n onBlur={handleBlur}\n data-compa11y-select-trigger\n data-placeholder={!selectedOption || undefined}\n {...props}\n >\n <span data-compa11y-select-value>{displayText}</span>\n <span aria-hidden=\"true\" data-compa11y-select-chevron>\n &#9660;\n </span>\n </button>\n );\n }\n);\n\nexport interface SelectListboxProps\n extends React.HTMLAttributes<HTMLUListElement> {\n children?: React.ReactNode;\n}\n\nexport const SelectListbox = forwardRef<HTMLUListElement, SelectListboxProps>(\n function SelectListbox({ children, style, ...props }, forwardedRef) {\n const { isOpen, options, listboxId, triggerId } = useSelectContext();\n const { announce } = useAnnouncer();\n const internalRef = useRef<HTMLUListElement | null>(null);\n const [position, setPosition] = useState<'bottom' | 'top'>('bottom');\n\n useEffect(() => {\n if (isOpen) {\n announce(\n `${options.length} option${options.length === 1 ? '' : 's'} available`\n );\n }\n }, [isOpen, options.length, announce]);\n\n useLayoutEffect(() => {\n if (isOpen && internalRef.current) {\n const listbox = internalRef.current;\n const rect = listbox.getBoundingClientRect();\n const viewportHeight = window.innerHeight;\n const spaceBelow = viewportHeight - rect.top;\n const spaceAbove = rect.top;\n const listboxHeight = Math.min(rect.height, 200);\n\n if (spaceBelow < listboxHeight + 50 && spaceAbove > spaceBelow) {\n setPosition('top');\n } else {\n setPosition('bottom');\n }\n }\n }, [isOpen]);\n\n // Prevent trigger blur when clicking inside the listbox\n const handleMouseDown = (event: React.MouseEvent) => {\n event.preventDefault();\n };\n\n const setRefs = useCallback(\n (node: HTMLUListElement | null) => {\n internalRef.current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n (\n forwardedRef as React.MutableRefObject<HTMLUListElement | null>\n ).current = node;\n }\n },\n [forwardedRef]\n );\n\n if (!isOpen) {\n return null;\n }\n\n const positionStyle: React.CSSProperties =\n position === 'top'\n ? { bottom: '100%', top: 'auto', marginBottom: '4px', marginTop: 0 }\n : {};\n\n return (\n <ul\n ref={setRefs}\n id={listboxId}\n role=\"listbox\"\n aria-labelledby={triggerId}\n style={{ ...style, ...positionStyle }}\n onMouseDown={handleMouseDown}\n data-compa11y-select-listbox\n data-position={position}\n {...props}\n >\n {children ??\n options.map((option, index) => (\n <SelectOptionItem\n key={option.value}\n option={option}\n index={index}\n />\n ))}\n </ul>\n );\n }\n);\n\nexport interface SelectOptionProps\n extends React.LiHTMLAttributes<HTMLLIElement> {\n option: SelectOption;\n index: number;\n}\n\nexport const SelectOptionItem = forwardRef<HTMLLIElement, SelectOptionProps>(\n function SelectOptionItem(\n { option, index, onClick, onMouseEnter, ...props },\n forwardedRef\n ) {\n const {\n selectedValue,\n highlightedIndex,\n setHighlightedIndex,\n getOptionId,\n onSelect,\n } = useSelectContext();\n const { announce } = useAnnouncer();\n const internalRef = useRef<HTMLLIElement | null>(null);\n\n const isSelected = selectedValue === option.value;\n const isHighlighted = highlightedIndex === index;\n const optionId = getOptionId(index);\n\n useEffect(() => {\n if (isHighlighted && internalRef.current) {\n internalRef.current.scrollIntoView({\n block: 'nearest',\n behavior: 'smooth',\n });\n }\n }, [isHighlighted]);\n\n const handleClick = (event: React.MouseEvent<HTMLLIElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented && !option.disabled) {\n onSelect(option);\n announce(`${option.label} selected`);\n }\n };\n\n const handleMouseEnter = (event: React.MouseEvent<HTMLLIElement>) => {\n onMouseEnter?.(event);\n if (!option.disabled) {\n setHighlightedIndex(index);\n }\n };\n\n const setRefs = useCallback(\n (node: HTMLLIElement | null) => {\n internalRef.current = node;\n if (typeof forwardedRef === 'function') {\n forwardedRef(node);\n } else if (forwardedRef) {\n (\n forwardedRef as React.MutableRefObject<HTMLLIElement | null>\n ).current = node;\n }\n },\n [forwardedRef]\n );\n\n return (\n <li\n ref={setRefs}\n id={optionId}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-highlighted={isHighlighted}\n data-selected={isSelected}\n data-disabled={option.disabled}\n onClick={handleClick}\n onMouseEnter={handleMouseEnter}\n data-compa11y-select-option\n {...props}\n >\n <span data-compa11y-select-option-text>{option.label}</span>\n {isSelected && (\n <span aria-hidden=\"true\" data-compa11y-select-check>\n &#10003;\n </span>\n )}\n </li>\n );\n }\n);\n\nexport const SelectCompound = Object.assign(Select, {\n Trigger: SelectTrigger,\n Listbox: SelectListbox,\n Option: SelectOptionItem,\n});\n","/**\n * Checkbox Component\n *\n * Accessible checkbox and checkbox group components following WAI-ARIA patterns.\n * Supports single checkboxes, checkbox groups with fieldset/legend, indeterminate\n * (tri-state) for \"select all\" patterns, and full keyboard/screen reader support.\n *\n * @example\n * ```tsx\n * // Single checkbox\n * <Checkbox label=\"Accept terms\" checked={agreed} onCheckedChange={setAgreed} />\n *\n * // With hint text\n * <Checkbox label=\"Subscribe\" hint=\"We'll email you weekly.\" />\n *\n * // Indeterminate (select all)\n * <Checkbox label=\"Select all\" indeterminate={someChecked} checked={allChecked}\n * onCheckedChange={handleSelectAll} />\n *\n * // Checkbox group\n * <Checkbox.Group legend=\"Select toppings\" value={toppings} onValueChange={setToppings}>\n * <Checkbox value=\"cheese\" label=\"Cheese\" />\n * <Checkbox value=\"peppers\" label=\"Peppers\" />\n * <Checkbox value=\"olives\" label=\"Olives\" />\n * </Checkbox.Group>\n * ```\n */\n\nimport React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { createComponentWarnings } from '@compa11y/core';\nimport { useId } from '../../hooks/use-id';\nimport { useAnnouncer } from '../../hooks/use-announcer';\nimport { useFocusVisible } from '../../hooks/use-focus-visible';\n\nconst warnings = createComponentWarnings('Checkbox');\n\n// ============================================================================\n// SVG Icons\n// ============================================================================\n\nconst CheckmarkIcon: React.FC = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{ display: 'block' }}\n >\n <path\n d=\"M2.5 6L5 8.5L9.5 3.5\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n);\n\nconst IndeterminateIcon: React.FC = () => (\n <svg\n width=\"12\"\n height=\"12\"\n viewBox=\"0 0 12 12\"\n fill=\"none\"\n aria-hidden=\"true\"\n style={{ display: 'block' }}\n >\n <path\n d=\"M3 6H9\"\n stroke=\"currentColor\"\n strokeWidth=\"2\"\n strokeLinecap=\"round\"\n />\n </svg>\n);\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface CheckboxGroupContextValue {\n /** Group name for form submission */\n name: string;\n /** Currently selected values */\n value: string[];\n /** Whether all checkboxes in the group are disabled */\n disabled: boolean;\n /** Whether to remove default styles */\n unstyled: boolean;\n /** Called when a checkbox in the group changes */\n onCheckboxChange: (checkboxValue: string, checked: boolean) => void;\n}\n\nexport interface CheckboxGroupProps {\n /** Controlled selected values */\n value?: string[];\n /** Default selected values (uncontrolled) */\n defaultValue?: string[];\n /** Called when selected values change */\n onValueChange?: (value: string[]) => void;\n /** Whether all checkboxes are disabled */\n disabled?: boolean;\n /** Group label displayed as fieldset legend */\n legend?: React.ReactNode;\n /** Group-level error message */\n error?: React.ReactNode;\n /** Layout orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Group name for native inputs */\n name?: string;\n /** Remove default styles */\n unstyled?: boolean;\n /** Custom class name */\n className?: string;\n /** Children (Checkbox components) */\n children: React.ReactNode;\n /** Accessible label (if no visible legend) */\n 'aria-label'?: string;\n /** Reference to external label element */\n 'aria-labelledby'?: string;\n}\n\nexport interface CheckboxProps\n extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'onChange' | 'type' | 'checked' | 'defaultChecked' | 'size'\n > {\n /** Controlled checked state */\n checked?: boolean;\n /** Default checked state (uncontrolled) */\n defaultChecked?: boolean;\n /** Called when checked state changes */\n onCheckedChange?: (checked: boolean) => void;\n /** Whether the checkbox is in indeterminate/mixed state */\n indeterminate?: boolean;\n /** Visible label text */\n label?: React.ReactNode;\n /** Helper/description text */\n hint?: React.ReactNode;\n /** Error message */\n error?: React.ReactNode;\n /** Whether the checkbox is disabled */\n disabled?: boolean;\n /** Value for use in checkbox groups */\n value?: string;\n /** Whether the checkbox is required */\n required?: boolean;\n /** Remove default styles */\n unstyled?: boolean;\n /** Custom class name */\n className?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n}\n\nexport interface CheckboxIndicatorProps {\n /** Custom indicator content (replaces default checkmark/dash) */\n children?: React.ReactNode;\n /** Custom class name */\n className?: string;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst CheckboxGroupContext = createContext<CheckboxGroupContextValue | null>(\n null\n);\n\n/**\n * Access the CheckboxGroup context. Returns null if not within a group.\n */\nexport function useCheckboxGroupContext(): CheckboxGroupContextValue | null {\n return useContext(CheckboxGroupContext);\n}\n\n// ============================================================================\n// CheckboxGroup\n// ============================================================================\n\n/**\n * CheckboxGroup - Groups related checkboxes with fieldset/legend semantics.\n *\n * Uses `<fieldset>` and `<legend>` for proper screen reader group labeling.\n * Manages an array of selected values for controlled/uncontrolled usage.\n *\n * @example\n * ```tsx\n * <Checkbox.Group legend=\"Toppings\" value={toppings} onValueChange={setToppings}>\n * <Checkbox value=\"cheese\" label=\"Cheese\" />\n * <Checkbox value=\"peppers\" label=\"Peppers\" />\n * </Checkbox.Group>\n * ```\n */\nexport const CheckboxGroup = forwardRef<HTMLFieldSetElement, CheckboxGroupProps>(\n function CheckboxGroup(\n {\n value: controlledValue,\n defaultValue = [],\n onValueChange,\n disabled = false,\n legend,\n error,\n orientation = 'vertical',\n name: providedName,\n unstyled = false,\n className = '',\n children,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n },\n ref\n ) {\n const generatedName = useId('checkbox-group');\n const name = providedName || generatedName;\n const errorId = useId('checkbox-group-error');\n\n const [uncontrolledValue, setUncontrolledValue] =\n useState<string[]>(defaultValue);\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n // Warn if no accessible label\n useEffect(() => {\n if (!legend && !ariaLabel && !ariaLabelledBy) {\n warnings.warning(\n 'CheckboxGroup has no accessible label. Screen readers need this to identify the group.',\n 'Add legend=\"...\", aria-label=\"...\", or aria-labelledby=\"...\"'\n );\n }\n }, [legend, ariaLabel, ariaLabelledBy]);\n\n const handleCheckboxChange = useCallback(\n (checkboxValue: string, checked: boolean) => {\n const currentValue = isControlled ? controlledValue! : uncontrolledValue;\n const newValue = checked\n ? [...currentValue, checkboxValue]\n : currentValue.filter((v) => v !== checkboxValue);\n\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, controlledValue, uncontrolledValue, onValueChange]\n );\n\n const contextValue: CheckboxGroupContextValue = {\n name,\n value,\n disabled,\n unstyled,\n onCheckboxChange: handleCheckboxChange,\n };\n\n const hasError = Boolean(error);\n\n // Fieldset styles\n const fieldsetStyle: React.CSSProperties = {\n border: 'none',\n margin: 0,\n padding: 0,\n minWidth: 0,\n };\n\n const legendStyle: React.CSSProperties = unstyled\n ? { padding: 0, marginBottom: '0.5rem' }\n : {\n padding: 0,\n marginBottom: '0.5rem',\n fontWeight: 600,\n };\n\n const itemsStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: orientation === 'horizontal' ? 'row' : 'column',\n flexWrap: orientation === 'horizontal' ? 'wrap' : undefined,\n gap: 'var(--compa11y-checkbox-group-gap, 0.75rem)',\n };\n\n const errorStyle: React.CSSProperties = unstyled\n ? { marginTop: '0.25rem' }\n : {\n color: 'var(--compa11y-checkbox-group-error-color, #ef4444)',\n fontSize: '0.8125rem',\n marginTop: '0.25rem',\n };\n\n return (\n <CheckboxGroupContext.Provider value={contextValue}>\n <fieldset\n ref={ref}\n className={className}\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-describedby={hasError ? errorId : undefined}\n disabled={disabled}\n data-compa11y-checkbox-group=\"\"\n data-orientation={orientation}\n data-disabled={disabled ? 'true' : undefined}\n style={fieldsetStyle}\n >\n {legend && (\n <legend\n data-compa11y-checkbox-group-legend=\"\"\n style={legendStyle}\n >\n {legend}\n </legend>\n )}\n <div style={itemsStyle}>{children}</div>\n {hasError && (\n <div\n id={errorId}\n role=\"alert\"\n data-compa11y-checkbox-group-error=\"\"\n style={errorStyle}\n >\n {error}\n </div>\n )}\n </fieldset>\n </CheckboxGroupContext.Provider>\n );\n }\n);\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n\n// ============================================================================\n// Checkbox\n// ============================================================================\n\n/**\n * Checkbox - An accessible checkbox with label, hint, error, and indeterminate support.\n *\n * Uses a native `<input type=\"checkbox\">` for proper form integration and\n * built-in keyboard behavior (Space to toggle, Tab to focus).\n *\n * Supports standalone usage and usage within a CheckboxGroup.\n *\n * @example\n * ```tsx\n * // Standalone\n * <Checkbox label=\"Accept terms\" checked={agreed} onCheckedChange={setAgreed} />\n *\n * // With hint\n * <Checkbox label=\"Subscribe\" hint=\"Weekly newsletter\" />\n *\n * // Indeterminate\n * <Checkbox label=\"Select all\" indeterminate={someSelected} />\n *\n * // In a group\n * <Checkbox.Group legend=\"Options\" value={selected} onValueChange={setSelected}>\n * <Checkbox value=\"a\" label=\"Option A\" />\n * <Checkbox value=\"b\" label=\"Option B\" />\n * </Checkbox.Group>\n * ```\n */\nexport const Checkbox = forwardRef<HTMLInputElement, CheckboxProps>(\n function Checkbox(\n {\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n indeterminate = false,\n label,\n hint,\n error,\n disabled: localDisabled = false,\n value,\n required = false,\n unstyled: localUnstyled,\n className = '',\n size = 'md',\n name: localName,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n 'aria-describedby': externalDescribedBy,\n onClick,\n onFocus,\n onBlur,\n ...props\n },\n ref\n ) {\n const groupContext = useCheckboxGroupContext();\n const id = useId('checkbox');\n const fieldId = `${id}-input`;\n const labelId = `${id}-label`;\n const hintId = `${id}-hint`;\n const errorId = `${id}-error`;\n\n const { announce } = useAnnouncer();\n const { isFocusVisible, focusProps } = useFocusVisible();\n\n const isInGroup = groupContext !== null;\n const disabled = isInGroup ? groupContext.disabled || localDisabled : localDisabled;\n const unstyled = localUnstyled ?? (isInGroup ? groupContext.unstyled : false);\n const name = isInGroup ? groupContext.name : localName;\n\n // Resolve checked state\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n\n const checked = isInGroup\n ? groupContext.value.includes(value || '')\n : controlledChecked !== undefined\n ? controlledChecked\n : uncontrolledChecked;\n\n // Internal ref for setting indeterminate imperatively\n const inputRef = useRef<HTMLInputElement>(null);\n\n const mergedRef = useCallback(\n (node: HTMLInputElement | null) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n }\n },\n [ref]\n );\n\n // Set indeterminate imperatively (no HTML attribute for this)\n useEffect(() => {\n if (inputRef.current) {\n inputRef.current.indeterminate = indeterminate;\n }\n }, [indeterminate]);\n\n // Warn if no accessible label\n useEffect(() => {\n if (!label && !ariaLabel && !ariaLabelledBy) {\n warnings.warning(\n 'Checkbox has no accessible label. Screen readers need this to identify the checkbox.',\n 'Add label=\"...\", aria-label=\"...\", or aria-labelledby=\"...\"'\n );\n }\n }, [label, ariaLabel, ariaLabelledBy]);\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n const newChecked = event.target.checked;\n\n if (isInGroup) {\n groupContext.onCheckboxChange(value || '', newChecked);\n } else {\n if (controlledChecked === undefined) {\n setUncontrolledChecked(newChecked);\n }\n onCheckedChange?.(newChecked);\n }\n\n const labelText =\n typeof label === 'string' ? label : ariaLabel || 'Checkbox';\n announce(`${labelText} ${newChecked ? 'checked' : 'unchecked'}`);\n },\n [\n isInGroup,\n groupContext,\n value,\n controlledChecked,\n onCheckedChange,\n label,\n ariaLabel,\n announce,\n ]\n );\n\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n focusProps.onFocus();\n onFocus?.(event);\n },\n [focusProps, onFocus]\n );\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n focusProps.onBlur();\n onBlur?.(event);\n },\n [focusProps, onBlur]\n );\n\n const hasLabel = Boolean(label);\n const hasHint = Boolean(hint);\n const hasError = Boolean(error);\n\n // Build aria-describedby\n const describedByParts: string[] = [];\n if (externalDescribedBy) describedByParts.push(externalDescribedBy);\n if (hasHint) describedByParts.push(hintId);\n if (hasError) describedByParts.push(errorId);\n const describedBy = describedByParts.length\n ? describedByParts.join(' ')\n : undefined;\n\n // Size config\n const sizes = {\n sm: { box: 16 },\n md: { box: 20 },\n lg: { box: 24 },\n };\n const sizeConfig = sizes[size];\n\n // Styles\n const wrapperStyle: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap: '0.5rem',\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n ...(disabled && !unstyled ? { opacity: 0.5 } : {}),\n };\n\n const controlStyle: React.CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n };\n\n const hiddenInputStyle: React.CSSProperties = {\n position: 'absolute',\n opacity: 0,\n width: '100%',\n height: '100%',\n margin: 0,\n cursor: 'inherit',\n zIndex: 1,\n };\n\n const indicatorStyle: React.CSSProperties = unstyled\n ? {}\n : {\n width: sizeConfig.box,\n height: sizeConfig.box,\n minWidth: 24,\n minHeight: 24,\n border:\n checked || indeterminate\n ? 'var(--compa11y-checkbox-checked-border, 2px solid #0066cc)'\n : 'var(--compa11y-checkbox-border, 2px solid #666)',\n borderRadius: 'var(--compa11y-checkbox-radius, 3px)',\n background:\n checked || indeterminate\n ? 'var(--compa11y-checkbox-checked-bg, #0066cc)'\n : 'var(--compa11y-checkbox-bg, white)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transition: 'all 0.15s ease',\n pointerEvents: 'none' as const,\n color: 'var(--compa11y-checkbox-check-color, white)',\n ...(isFocusVisible\n ? {\n outline: '2px solid var(--compa11y-focus-color, #0066cc)',\n outlineOffset: '2px',\n }\n : {}),\n };\n\n const contentStyle: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '0.125rem',\n paddingTop: '0.125rem',\n };\n\n const labelStyle: React.CSSProperties = unstyled\n ? { cursor: 'inherit' }\n : {\n cursor: 'inherit',\n color: 'var(--compa11y-checkbox-label-color, inherit)',\n };\n\n const hintStyle: React.CSSProperties = unstyled\n ? {}\n : {\n color: 'var(--compa11y-checkbox-hint-color, #666)',\n fontSize: '0.8125rem',\n };\n\n const errorStyles: React.CSSProperties = unstyled\n ? {}\n : {\n color: 'var(--compa11y-checkbox-error-color, #ef4444)',\n fontSize: '0.8125rem',\n };\n\n return (\n <div\n className={className}\n data-compa11y-checkbox=\"\"\n data-checked={checked ? 'true' : 'false'}\n data-indeterminate={indeterminate ? 'true' : undefined}\n data-disabled={disabled ? 'true' : undefined}\n data-size={size}\n style={wrapperStyle}\n >\n <div style={controlStyle}>\n <input\n ref={mergedRef}\n type=\"checkbox\"\n id={fieldId}\n name={name}\n value={value}\n checked={checked}\n onChange={handleChange}\n onClick={onClick}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n required={required}\n aria-required={required || undefined}\n aria-invalid={hasError || undefined}\n aria-label={!hasLabel && !ariaLabelledBy ? ariaLabel : undefined}\n aria-labelledby={\n ariaLabelledBy || (hasLabel ? labelId : undefined)\n }\n aria-describedby={describedBy}\n aria-checked={indeterminate ? 'mixed' : checked}\n tabIndex={disabled ? -1 : 0}\n style={hiddenInputStyle}\n {...props}\n />\n {!unstyled && (\n <div\n data-compa11y-checkbox-indicator=\"\"\n aria-hidden=\"true\"\n style={indicatorStyle}\n >\n {checked && !indeterminate && <CheckmarkIcon />}\n {indeterminate && <IndeterminateIcon />}\n </div>\n )}\n </div>\n {(hasLabel || hasHint || hasError) && (\n <div style={contentStyle}>\n {hasLabel && (\n <label\n htmlFor={fieldId}\n id={labelId}\n data-compa11y-checkbox-label=\"\"\n style={labelStyle}\n >\n {label}\n {required && (\n <span\n aria-hidden=\"true\"\n style={{\n color: 'var(--compa11y-checkbox-required-color, #ef4444)',\n marginLeft: '0.125rem',\n }}\n >\n *\n </span>\n )}\n </label>\n )}\n {hasHint && (\n <div\n id={hintId}\n data-compa11y-checkbox-hint=\"\"\n style={hintStyle}\n >\n {hint}\n </div>\n )}\n {hasError && (\n <div\n id={errorId}\n role=\"alert\"\n data-compa11y-checkbox-error=\"\"\n style={errorStyles}\n >\n {error}\n </div>\n )}\n </div>\n )}\n </div>\n );\n }\n);\n\nCheckbox.displayName = 'Checkbox';\n\n// ============================================================================\n// CheckboxIndicator (optional compound sub-component)\n// ============================================================================\n\n/**\n * CheckboxIndicator - Optional custom indicator for compound usage.\n *\n * When used inside a checkbox, replaces the default checkmark/dash icons.\n * Primarily for advanced customization scenarios.\n */\nexport const CheckboxIndicator = forwardRef<\n HTMLDivElement,\n CheckboxIndicatorProps\n>(function CheckboxIndicator({ children, className }, ref) {\n return (\n <div\n ref={ref}\n className={className}\n data-compa11y-checkbox-indicator=\"\"\n aria-hidden=\"true\"\n >\n {children}\n </div>\n );\n});\n\nCheckboxIndicator.displayName = 'CheckboxIndicator';\n\n// ============================================================================\n// Compound Component\n// ============================================================================\n\nexport const CheckboxCompound = Object.assign(Checkbox, {\n Group: CheckboxGroup,\n Indicator: CheckboxIndicator,\n});\n","/**\n * RadioGroup Component\n *\n * An accessible radio group for single-selection from a set of options.\n * Follows WAI-ARIA Radio Group pattern with roving tabindex and\n * selection-follows-focus keyboard behavior.\n *\n * @example\n * ```tsx\n * // Controlled\n * <RadioGroup value={color} onValueChange={setColor} aria-label=\"Favorite color\">\n * <RadioGroup.Radio value=\"red\">Red</RadioGroup.Radio>\n * <RadioGroup.Radio value=\"green\">Green</RadioGroup.Radio>\n * <RadioGroup.Radio value=\"blue\">Blue</RadioGroup.Radio>\n * </RadioGroup>\n *\n * // Uncontrolled\n * <RadioGroup defaultValue=\"red\" aria-label=\"Favorite color\">\n * <RadioGroup.Radio value=\"red\">Red</RadioGroup.Radio>\n * <RadioGroup.Radio value=\"green\">Green</RadioGroup.Radio>\n * </RadioGroup>\n *\n * // With legend (fieldset semantics)\n * <RadioGroup legend=\"Delivery speed\" required>\n * <RadioGroup.Radio value=\"standard\">Standard</RadioGroup.Radio>\n * <RadioGroup.Radio value=\"express\">Express</RadioGroup.Radio>\n * <RadioGroup.Radio value=\"overnight\">Overnight</RadioGroup.Radio>\n * </RadioGroup>\n *\n * // With error validation\n * <RadioGroup legend=\"Payment method\" required error=\"Please select a payment method\">\n * <RadioGroup.Radio value=\"card\">Credit Card</RadioGroup.Radio>\n * <RadioGroup.Radio value=\"paypal\">PayPal</RadioGroup.Radio>\n * </RadioGroup>\n * ```\n */\n\nimport React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n} from 'react';\nimport { createComponentWarnings } from '@compa11y/core';\nimport { useId } from '../../hooks/use-id';\nimport { useKeyboard } from '../../hooks/use-keyboard';\nimport { useAnnouncer } from '../../hooks/use-announcer';\nimport { useFocusVisible } from '../../hooks/use-focus-visible';\n\nconst warnings = createComponentWarnings('RadioGroup');\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface RadioGroupContextValue {\n /** Group name for native radio inputs */\n name: string;\n /** Currently selected value */\n value: string | null;\n /** Whether all radios are disabled */\n disabled: boolean;\n /** Whether disabled radios remain discoverable in tab order */\n discoverable: boolean;\n /** Whether selection is required */\n required: boolean;\n /** Whether to remove default styles */\n unstyled: boolean;\n /** Layout orientation */\n orientation: 'horizontal' | 'vertical';\n /** Called when selected value changes */\n onValueChange: (value: string) => void;\n /** Register a radio option with the group */\n registerRadio: (value: string, disabled: boolean) => void;\n /** Unregister a radio option from the group */\n unregisterRadio: (value: string) => void;\n /** Update a radio's disabled state */\n updateRadioDisabled: (value: string, disabled: boolean) => void;\n}\n\nexport interface RadioGroupProps {\n /** Controlled value */\n value?: string;\n /** Default value (uncontrolled) */\n defaultValue?: string;\n /** Called when selected value changes */\n onValueChange?: (value: string) => void;\n /** Whether all radios are disabled */\n disabled?: boolean;\n /** Whether disabled radios remain discoverable in tab order */\n discoverable?: boolean;\n /** Whether selection is required */\n required?: boolean;\n /** Layout orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Group name for native radio inputs */\n name?: string;\n /** Group label displayed as fieldset legend */\n legend?: React.ReactNode;\n /** Helper/description text */\n hint?: React.ReactNode;\n /** Error message */\n error?: React.ReactNode;\n /** Remove default styles */\n unstyled?: boolean;\n /** Custom class name */\n className?: string;\n /** Children (Radio components) */\n children: React.ReactNode;\n /** Accessible label (if no visible legend) */\n 'aria-label'?: string;\n /** Reference to external label element */\n 'aria-labelledby'?: string;\n}\n\nexport interface RadioProps {\n /** Value for this radio option (required) */\n value: string;\n /** Whether this individual radio is disabled */\n disabled?: boolean;\n /** Whether disabled radio remains discoverable */\n discoverable?: boolean;\n /** Label text (alternative to children) */\n label?: React.ReactNode;\n /** Helper/description text */\n hint?: React.ReactNode;\n /** Remove default styles */\n unstyled?: boolean;\n /** Custom class name */\n className?: string;\n /** Children (typically label text) */\n children?: React.ReactNode;\n /** Accessible label */\n 'aria-label'?: string;\n}\n\n// ============================================================================\n// Context\n// ============================================================================\n\nconst RadioGroupContext = createContext<RadioGroupContextValue | null>(null);\n\n/**\n * Access the RadioGroup context.\n * Throws if used outside a RadioGroup.\n */\nexport function useRadioGroupContext(): RadioGroupContextValue {\n const context = useContext(RadioGroupContext);\n if (!context) {\n throw new Error(\n '[Compa11y RadioGroup]: Radio must be used within a RadioGroup.'\n );\n }\n return context;\n}\n\n// ============================================================================\n// RadioGroup\n// ============================================================================\n\n/**\n * RadioGroup - Groups related radio buttons with proper ARIA semantics.\n *\n * Uses `role=\"radiogroup\"` with optional `<fieldset>/<legend>` for proper\n * screen reader group labeling. Implements roving tabindex and\n * selection-follows-focus keyboard behavior.\n *\n * Keyboard support:\n * - Tab: Move into/out of the group\n * - Arrow Down/Right: Move to next radio and select it\n * - Arrow Up/Left: Move to previous radio and select it\n * - Home: Move to first radio and select it\n * - End: Move to last radio and select it\n * - Space: Select the focused radio\n */\nexport const RadioGroup = forwardRef<HTMLDivElement, RadioGroupProps>(\n function RadioGroup(\n {\n value: controlledValue,\n defaultValue,\n onValueChange,\n disabled = false,\n discoverable = true,\n required = false,\n orientation = 'vertical',\n name: providedName,\n legend,\n hint,\n error,\n unstyled = false,\n className = '',\n children,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n },\n ref\n ) {\n const generatedName = useId('radiogroup');\n const name = providedName || generatedName;\n const hintId = useId('radiogroup-hint');\n const errorId = useId('radiogroup-error');\n\n const [uncontrolledValue, setUncontrolledValue] = useState<string | null>(\n defaultValue ?? null\n );\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : uncontrolledValue;\n\n // Track registered radios and their disabled state\n const radiosRef = useRef<Map<string, boolean>>(new Map());\n\n // Warn if no accessible label\n useEffect(() => {\n if (!legend && !ariaLabel && !ariaLabelledBy) {\n warnings.warning(\n 'RadioGroup has no accessible label. Screen readers need this to identify the group.',\n 'Add legend=\"...\", aria-label=\"...\", or aria-labelledby=\"...\"'\n );\n }\n }, [legend, ariaLabel, ariaLabelledBy]);\n\n const handleValueChange = useCallback(\n (newValue: string) => {\n if (disabled) return;\n\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [disabled, isControlled, onValueChange]\n );\n\n const registerRadio = useCallback(\n (radioValue: string, radioDisabled: boolean) => {\n radiosRef.current.set(radioValue, radioDisabled);\n },\n []\n );\n\n const unregisterRadio = useCallback((radioValue: string) => {\n radiosRef.current.delete(radioValue);\n }, []);\n\n const updateRadioDisabled = useCallback(\n (radioValue: string, radioDisabled: boolean) => {\n radiosRef.current.set(radioValue, radioDisabled);\n },\n []\n );\n\n // Get ordered list of enabled radio values\n const getEnabledRadioValues = useCallback((): string[] => {\n const values: string[] = [];\n radiosRef.current.forEach((isDisabled, radioValue) => {\n if (!isDisabled && !disabled) {\n values.push(radioValue);\n }\n });\n return values;\n }, [disabled]);\n\n // Internal ref for DOM queries\n const internalRef = useRef<HTMLDivElement>(null);\n const groupRef = ref || internalRef;\n\n const navigateWithRef = useCallback(\n (direction: 'next' | 'prev' | 'first' | 'last') => {\n const enabledValues = getEnabledRadioValues();\n if (enabledValues.length === 0) return;\n\n const currentIndex = value ? enabledValues.indexOf(value) : -1;\n\n let nextIndex: number;\n switch (direction) {\n case 'next':\n nextIndex =\n currentIndex < 0\n ? 0\n : (currentIndex + 1) % enabledValues.length;\n break;\n case 'prev':\n nextIndex =\n currentIndex < 0\n ? enabledValues.length - 1\n : (currentIndex - 1 + enabledValues.length) %\n enabledValues.length;\n break;\n case 'first':\n nextIndex = 0;\n break;\n case 'last':\n nextIndex = enabledValues.length - 1;\n break;\n }\n\n const nextValue = enabledValues[nextIndex];\n if (nextValue !== undefined) {\n handleValueChange(nextValue);\n\n // Focus the radio input\n const groupEl =\n typeof groupRef === 'object' && groupRef\n ? (groupRef as React.RefObject<HTMLDivElement | null>).current\n : null;\n if (groupEl) {\n const input = groupEl.querySelector<HTMLInputElement>(\n `input[type=\"radio\"][value=\"${CSS.escape(nextValue)}\"]`\n );\n input?.focus();\n }\n }\n },\n [getEnabledRadioValues, value, handleValueChange, groupRef]\n );\n\n const keyboardProps = useKeyboard(\n {\n ArrowDown: () => navigateWithRef('next'),\n ArrowRight: () => navigateWithRef('next'),\n ArrowUp: () => navigateWithRef('prev'),\n ArrowLeft: () => navigateWithRef('prev'),\n Home: () => navigateWithRef('first'),\n End: () => navigateWithRef('last'),\n },\n { preventDefault: true, stopPropagation: true, disabled }\n );\n\n const contextValue: RadioGroupContextValue = {\n name,\n value: value ?? null,\n disabled,\n discoverable,\n required,\n unstyled,\n orientation,\n onValueChange: handleValueChange,\n registerRadio,\n unregisterRadio,\n updateRadioDisabled,\n };\n\n // Build aria-describedby\n const describedByParts: string[] = [];\n if (hint) describedByParts.push(hintId);\n if (error) describedByParts.push(errorId);\n const ariaDescribedBy =\n describedByParts.length > 0 ? describedByParts.join(' ') : undefined;\n\n const groupContent = (\n <>\n <div\n style={\n unstyled\n ? {\n display: 'flex',\n flexDirection:\n orientation === 'horizontal' ? 'row' : 'column',\n }\n : {\n display: 'flex',\n flexDirection:\n orientation === 'horizontal' ? 'row' : 'column',\n gap: 'var(--compa11y-radio-gap, 0.75rem)',\n }\n }\n >\n {children}\n </div>\n {hint && (\n <div\n id={hintId}\n style={\n unstyled\n ? {}\n : {\n color: 'var(--compa11y-radio-group-hint-color, #666)',\n fontSize: '0.8125rem',\n marginTop: '0.25rem',\n }\n }\n >\n {hint}\n </div>\n )}\n {error && (\n <div\n id={errorId}\n role=\"alert\"\n style={\n unstyled\n ? {}\n : {\n color: 'var(--compa11y-radio-group-error-color, #ef4444)',\n fontSize: '0.8125rem',\n marginTop: '0.25rem',\n }\n }\n >\n {error}\n </div>\n )}\n </>\n );\n\n // If legend is provided, wrap in fieldset/legend for proper semantics\n if (legend) {\n return (\n <RadioGroupContext.Provider value={contextValue}>\n <fieldset\n ref={groupRef as React.Ref<HTMLFieldSetElement>}\n role=\"radiogroup\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-orientation={orientation}\n aria-required={required || undefined}\n aria-disabled={disabled || undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={ariaDescribedBy}\n className={`compa11y-radiogroup ${className}`.trim()}\n data-compa11y-radiogroup=\"\"\n data-orientation={orientation}\n data-disabled={disabled ? 'true' : undefined}\n data-error={error ? 'true' : undefined}\n onKeyDown={keyboardProps.onKeyDown}\n style={\n unstyled\n ? { border: 'none', margin: 0, padding: 0, minWidth: 0 }\n : {\n border: 'none',\n margin: 0,\n padding: 0,\n minWidth: 0,\n }\n }\n >\n <legend\n style={\n unstyled\n ? {}\n : {\n padding: 0,\n marginBottom:\n 'var(--compa11y-radio-group-legend-gap, 0.5rem)',\n fontWeight: 'var(--compa11y-radio-group-legend-weight, 600)' as any,\n color: 'var(--compa11y-radio-group-legend-color, inherit)',\n fontSize:\n 'var(--compa11y-radio-group-legend-size, 1rem)',\n }\n }\n >\n {legend}\n {required && !unstyled && (\n <span\n aria-hidden=\"true\"\n style={{\n color:\n 'var(--compa11y-radio-group-required-color, #ef4444)',\n marginLeft: '0.125rem',\n }}\n >\n {' '}\n *\n </span>\n )}\n </legend>\n {groupContent}\n </fieldset>\n </RadioGroupContext.Provider>\n );\n }\n\n // No legend: use div with role=\"radiogroup\"\n return (\n <RadioGroupContext.Provider value={contextValue}>\n <div\n ref={groupRef as React.Ref<HTMLDivElement>}\n role=\"radiogroup\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-orientation={orientation}\n aria-required={required || undefined}\n aria-disabled={disabled || undefined}\n aria-invalid={error ? true : undefined}\n aria-describedby={ariaDescribedBy}\n className={`compa11y-radiogroup ${className}`.trim()}\n data-compa11y-radiogroup=\"\"\n data-orientation={orientation}\n data-disabled={disabled ? 'true' : undefined}\n data-error={error ? 'true' : undefined}\n onKeyDown={keyboardProps.onKeyDown}\n >\n {groupContent}\n </div>\n </RadioGroupContext.Provider>\n );\n }\n);\n\nRadioGroup.displayName = 'RadioGroup';\n\n// ============================================================================\n// Radio\n// ============================================================================\n\n/**\n * Radio - Individual radio option for use within a RadioGroup.\n *\n * Uses a native `<input type=\"radio\">` (visually hidden) for full\n * accessibility, with a custom visual indicator overlay.\n *\n * @example\n * ```tsx\n * <RadioGroup.Radio value=\"option1\">Option 1</RadioGroup.Radio>\n * <RadioGroup.Radio value=\"option2\" label=\"Option 2\" />\n * <RadioGroup.Radio value=\"option3\" disabled>Option 3 (unavailable)</RadioGroup.Radio>\n * ```\n */\nexport const Radio = forwardRef<HTMLInputElement, RadioProps>(\n function Radio(\n {\n value,\n disabled: localDisabled = false,\n discoverable: localDiscoverable,\n label,\n hint,\n unstyled: localUnstyled,\n className = '',\n children,\n 'aria-label': ariaLabel,\n },\n ref\n ) {\n const context = useRadioGroupContext();\n const generatedId = useId('radio');\n const hintId = useId('radio-hint');\n\n const disabled = context.disabled || localDisabled;\n const discoverable = localDiscoverable ?? context.discoverable;\n const unstyled = localUnstyled ?? context.unstyled;\n const checked = context.value === value;\n\n const { announce } = useAnnouncer();\n const { isFocusVisible, focusProps } = useFocusVisible();\n\n const inputRef = useRef<HTMLInputElement>(null);\n\n const mergedRef = useCallback(\n (node: HTMLInputElement | null) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n }\n },\n [ref]\n );\n\n // Register/unregister with parent\n useEffect(() => {\n context.registerRadio(value, disabled);\n return () => context.unregisterRadio(value);\n }, [value]); // eslint-disable-line react-hooks/exhaustive-deps\n\n // Update disabled state in parent\n useEffect(() => {\n context.updateRadioDisabled(value, disabled);\n }, [disabled, value]); // eslint-disable-line react-hooks/exhaustive-deps\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) {\n event.preventDefault();\n return;\n }\n\n context.onValueChange(value);\n\n const labelText =\n label ||\n (typeof children === 'string' ? children : null) ||\n value;\n announce(`${labelText} selected`, { politeness: 'polite' });\n },\n [disabled, context, value, label, children, announce]\n );\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLInputElement>) => {\n if (disabled) {\n event.preventDefault();\n }\n },\n [disabled]\n );\n\n const handleFocus = useCallback(\n (_event: React.FocusEvent<HTMLInputElement>) => {\n focusProps.onFocus();\n\n // Selection follows focus: when focused via keyboard nav, select this radio\n if (!checked && !disabled) {\n context.onValueChange(value);\n }\n },\n [focusProps, checked, disabled, context, value]\n );\n\n const handleBlur = useCallback(() => {\n focusProps.onBlur();\n }, [focusProps]);\n\n const hasLabel = Boolean(children || label);\n const labelContent = children || label;\n const labelId = `${generatedId}-label`;\n const hasHint = Boolean(hint);\n\n // Roving tabindex: only the checked radio (or first enabled if none checked) gets tabindex 0\n const isFirstEnabled = (() => {\n if (context.value !== null) return false;\n const entries = Array.from(\n (\n inputRef.current?.closest('[role=\"radiogroup\"]') as HTMLElement\n )?.querySelectorAll('input[type=\"radio\"]') ?? []\n );\n for (const entry of entries) {\n const input = entry as HTMLInputElement;\n if (!input.disabled && input.getAttribute('aria-disabled') !== 'true') {\n return input.value === value;\n }\n }\n return false;\n })();\n\n const tabIndex = (() => {\n if (disabled && !discoverable) return -1;\n if (checked) return 0;\n if (context.value === null && isFirstEnabled) return 0;\n return -1;\n })();\n\n const useNativeDisabled = disabled && !discoverable;\n\n // Build aria-describedby\n const ariaDescribedBy = hasHint ? hintId : undefined;\n\n return (\n <label\n htmlFor={generatedId}\n className={`compa11y-radio-wrapper ${className}`.trim()}\n data-compa11y-radio=\"\"\n data-value={value}\n data-checked={checked ? 'true' : 'false'}\n data-disabled={disabled ? 'true' : undefined}\n style={\n unstyled\n ? {\n display: 'inline-flex',\n alignItems: 'flex-start',\n cursor: disabled ? 'not-allowed' : 'pointer',\n gap: '0.5rem',\n }\n : {\n display: 'inline-flex',\n alignItems: 'flex-start',\n gap: 'var(--compa11y-radio-gap, 0.5rem)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none',\n opacity: disabled ? 0.5 : 1,\n }\n }\n >\n <div\n style={{\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n }}\n >\n {/* Native radio input - visually hidden but accessible */}\n <input\n ref={mergedRef}\n type=\"radio\"\n id={generatedId}\n name={context.name}\n value={value}\n checked={checked}\n onChange={handleChange}\n onClick={handleClick}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={useNativeDisabled}\n tabIndex={tabIndex}\n aria-disabled={disabled ? 'true' : undefined}\n aria-label={!hasLabel ? ariaLabel : undefined}\n aria-labelledby={hasLabel ? labelId : undefined}\n aria-describedby={ariaDescribedBy}\n required={context.required}\n className=\"compa11y-radio-input\"\n style={{\n position: 'absolute',\n opacity: 0,\n width: 'var(--compa11y-radio-size, 1.25rem)',\n height: 'var(--compa11y-radio-size, 1.25rem)',\n margin: 0,\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n />\n {/* Custom radio circle visual */}\n {!unstyled && (\n <div\n className=\"compa11y-radio-circle\"\n style={{\n width: 'var(--compa11y-radio-size, 1.25rem)',\n height: 'var(--compa11y-radio-size, 1.25rem)',\n minWidth: '24px',\n minHeight: '24px',\n border: checked\n ? 'var(--compa11y-radio-checked-border, 2px solid #0066cc)'\n : 'var(--compa11y-radio-border, 2px solid #666)',\n borderRadius: '50%',\n background: checked\n ? 'var(--compa11y-radio-checked-bg, #0066cc)'\n : 'var(--compa11y-radio-bg, white)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n flexShrink: 0,\n transition: 'all 0.15s ease',\n pointerEvents: 'none',\n ...(isFocusVisible\n ? {\n outline:\n '2px solid var(--compa11y-focus-color, #0066cc)',\n outlineOffset: '2px',\n }\n : {}),\n }}\n >\n {/* Inner dot */}\n <div\n aria-hidden=\"true\"\n style={{\n width: 'var(--compa11y-radio-dot-size, 0.5rem)',\n height: 'var(--compa11y-radio-dot-size, 0.5rem)',\n borderRadius: '50%',\n background: 'var(--compa11y-radio-dot-color, white)',\n opacity: checked ? 1 : 0,\n transform: checked ? 'scale(1)' : 'scale(0)',\n transition: 'all 0.15s ease',\n }}\n />\n </div>\n )}\n </div>\n {(hasLabel || hasHint) && (\n <div\n style={\n unstyled\n ? {}\n : {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '0.125rem',\n paddingTop: '0.125rem',\n }\n }\n >\n {hasLabel && (\n <span\n id={labelId}\n className=\"compa11y-radio-label\"\n style={\n unstyled\n ? {}\n : {\n color: 'var(--compa11y-radio-label-color, inherit)',\n fontSize: 'var(--compa11y-radio-label-size, 1rem)',\n }\n }\n >\n {labelContent}\n </span>\n )}\n {hasHint && (\n <span\n id={hintId}\n className=\"compa11y-radio-hint\"\n style={\n unstyled\n ? {}\n : {\n color: 'var(--compa11y-radio-hint-color, #666)',\n fontSize: 'var(--compa11y-radio-hint-size, 0.8125rem)',\n }\n }\n >\n {hint}\n </span>\n )}\n </div>\n )}\n </label>\n );\n }\n);\n\nRadio.displayName = 'Radio';\n\n// ============================================================================\n// Compound Component\n// ============================================================================\n\nexport const RadioGroupCompound = Object.assign(RadioGroup, { Radio });\n","import React, { forwardRef, useCallback, useEffect, useState } from 'react';\nimport { createComponentWarnings } from '@compa11y/core';\nimport { useId } from '../../hooks/use-id';\nimport { useKeyboard } from '../../hooks/use-keyboard';\nimport { useAnnouncer } from '../../hooks/use-announcer';\n\nconst warnings = createComponentWarnings('Switch');\n\nexport interface SwitchProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onChange' | 'role'\n> {\n /** Controlled checked state */\n checked?: boolean;\n /** Default checked state (uncontrolled) */\n defaultChecked?: boolean;\n /** Called when the switch state changes */\n onCheckedChange?: (checked: boolean) => void;\n /** Accessible label for the switch (renders visible label next to switch) */\n label?: string;\n /** Whether the switch is disabled */\n disabled?: boolean;\n /** Remove default styles to allow full customization via className */\n unstyled?: boolean;\n /** Custom class name */\n className?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n}\n\n/**\n * Switch component - An accessible toggle switch (on/off control)\n *\n * Follows WAI-ARIA Switch pattern with proper keyboard support and screen reader announcements.\n *\n * @example\n * ```tsx\n * // Uncontrolled\n * <Switch defaultChecked={true} label=\"Enable notifications\" />\n *\n * // Controlled\n * <Switch\n * checked={enabled}\n * onCheckedChange={setEnabled}\n * aria-label=\"Dark mode\"\n * />\n *\n * // With visible label\n * <Switch checked={enabled} onCheckedChange={setEnabled} label=\"Dark mode\" />\n * ```\n */\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(\n function Switch(\n {\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n label,\n disabled = false,\n unstyled = false,\n className,\n size = 'md',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n onClick,\n ...props\n },\n ref\n ) {\n const id = useId('switch');\n const labelId = `${id}-label`;\n const { announce } = useAnnouncer();\n\n // Support both controlled and uncontrolled modes\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : uncontrolledChecked;\n\n // Warn if no accessible label is provided\n useEffect(() => {\n if (!label && !ariaLabel && !ariaLabelledby) {\n warnings.warning(\n 'Switch has no accessible label. Screen readers need this to identify the switch.',\n 'Add label=\"Description\", aria-label=\"...\", or aria-labelledby=\"...\"'\n );\n }\n }, [label, ariaLabel, ariaLabelledby]);\n\n const toggleSwitch = useCallback(() => {\n if (disabled) return;\n\n const newChecked = !checked;\n\n if (!isControlled) {\n setUncontrolledChecked(newChecked);\n }\n\n onCheckedChange?.(newChecked);\n\n // Announce state change to screen readers\n const labelText = label || ariaLabel || 'Switch';\n announce(`${labelText} ${newChecked ? 'on' : 'off'}`);\n }, [\n checked,\n disabled,\n isControlled,\n onCheckedChange,\n label,\n ariaLabel,\n announce,\n ]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n toggleSwitch();\n }\n },\n [onClick, toggleSwitch]\n );\n\n // Keyboard handling: Space and Enter should toggle\n const keyboardProps = useKeyboard(\n {\n ' ': () => {\n // Space toggles the switch\n toggleSwitch();\n },\n Enter: () => {\n // Enter also toggles (some users prefer Enter over Space)\n toggleSwitch();\n },\n },\n { preventDefault: true }\n );\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n props.onKeyDown?.(event);\n if (!event.defaultPrevented) {\n keyboardProps.onKeyDown(event);\n }\n };\n\n // Compute ARIA label\n const computedAriaLabel = ariaLabel;\n const computedAriaLabelledby =\n ariaLabelledby || (label ? labelId : undefined);\n\n // Structural styles (always applied)\n const wrapperStructuralStyles: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n };\n\n // Size dimensions for structural styles\n const sizes = {\n sm: { width: 32, height: 18, thumb: 14, translate: 14 },\n md: { width: 44, height: 24, thumb: 20, translate: 20 },\n lg: { width: 56, height: 30, thumb: 26, translate: 26 },\n };\n\n const sizeConfig = sizes[size];\n\n const trackStructuralStyles: React.CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n flexShrink: 0,\n width: sizeConfig.width,\n height: sizeConfig.height,\n border: 'none',\n padding: 2,\n cursor: disabled ? 'not-allowed' : 'pointer',\n };\n\n const trackVisualStyles: React.CSSProperties = unstyled\n ? {}\n : {\n backgroundColor: checked ? '#0066cc' : '#d1d5db',\n borderRadius: sizeConfig.height / 2,\n transition: 'background-color 0.2s ease',\n opacity: disabled ? 0.5 : 1,\n };\n\n const thumbStructuralStyles: React.CSSProperties = {\n position: 'absolute',\n left: 2,\n width: sizeConfig.thumb,\n height: sizeConfig.thumb,\n pointerEvents: 'none',\n transform: checked\n ? `translateX(${sizeConfig.translate}px)`\n : 'translateX(0)',\n };\n\n const thumbVisualStyles: React.CSSProperties = unstyled\n ? {}\n : {\n backgroundColor: 'white',\n borderRadius: '50%',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.2)',\n transition: 'transform 0.2s ease',\n };\n\n const labelStyles: React.CSSProperties = unstyled\n ? {\n marginLeft: 8,\n userSelect: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n : {\n marginLeft: 8,\n userSelect: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n };\n\n return (\n <div\n style={wrapperStructuralStyles}\n data-compa11y-switch-wrapper\n data-size={size}\n >\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={computedAriaLabel}\n aria-labelledby={computedAriaLabelledby}\n disabled={disabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={className}\n style={{ ...trackStructuralStyles, ...trackVisualStyles }}\n tabIndex={disabled ? -1 : 0}\n data-compa11y-switch\n data-checked={checked}\n data-disabled={disabled || undefined}\n data-size={size}\n {...props}\n // CSS-in-JS focus-visible styles\n onFocus={(e) => {\n // Add focus-visible indicator\n if (!unstyled) {\n e.currentTarget.style.outline = '2px solid #0066cc';\n e.currentTarget.style.outlineOffset = '2px';\n }\n props.onFocus?.(e);\n }}\n onBlur={(e) => {\n // Remove focus indicator on blur\n if (!unstyled) {\n e.currentTarget.style.outline = 'none';\n }\n props.onBlur?.(e);\n }}\n >\n <span\n style={{ ...thumbStructuralStyles, ...thumbVisualStyles }}\n data-compa11y-switch-thumb\n aria-hidden=\"true\"\n />\n </button>\n {label && (\n <label\n id={labelId}\n onClick={disabled ? undefined : () => toggleSwitch()}\n style={labelStyles}\n data-compa11y-switch-label\n >\n {label}\n </label>\n )}\n </div>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n","/**\n * Listbox Component\n *\n * An accessible listbox for single or multi-selection from a visible list.\n * Follows WAI-ARIA Listbox pattern with aria-activedescendant,\n * type-ahead search, option groups, and full keyboard support.\n *\n * @example\n * ```tsx\n * // Single select (selection follows focus)\n * <Listbox value={fruit} onValueChange={setFruit} aria-label=\"Favorite fruit\">\n * <Listbox.Option value=\"apple\">Apple</Listbox.Option>\n * <Listbox.Option value=\"banana\" disabled>Banana</Listbox.Option>\n * <Listbox.Group label=\"Citrus\">\n * <Listbox.Option value=\"orange\">Orange</Listbox.Option>\n * </Listbox.Group>\n * </Listbox>\n *\n * // Multi select (focus independent of selection)\n * <Listbox multiple value={toppings} onValueChange={setToppings} aria-label=\"Toppings\">\n * <Listbox.Option value=\"cheese\">Cheese</Listbox.Option>\n * <Listbox.Option value=\"pepperoni\">Pepperoni</Listbox.Option>\n * </Listbox>\n * ```\n */\n\nimport React, {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createComponentWarnings } from '@compa11y/core';\nimport { useId } from '../../hooks/use-id';\nimport { useKeyboard } from '../../hooks/use-keyboard';\nimport { useTypeAhead } from '../../hooks/use-keyboard';\nimport { useAnnouncer } from '../../hooks/use-announcer';\n\nconst warnings = createComponentWarnings('Listbox');\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ListboxContextValue {\n multiple: boolean;\n disabled: boolean;\n discoverable: boolean;\n unstyled: boolean;\n orientation: 'horizontal' | 'vertical';\n selectedValues: Set<string>;\n focusedValue: string | null;\n onSelect: (value: string) => void;\n onFocusOption: (value: string) => void;\n registerOption: (value: string, disabled: boolean, label: string) => void;\n unregisterOption: (value: string) => void;\n updateOptionDisabled: (value: string, disabled: boolean) => void;\n isSelected: (value: string) => boolean;\n listboxId: string;\n}\n\nexport interface ListboxProps {\n /** Controlled value — string for single, string[] for multi */\n value?: string | string[];\n /** Default value (uncontrolled) */\n defaultValue?: string | string[];\n /** Called when selection changes */\n onValueChange?: (value: string | string[]) => void;\n /** Enable multi-select mode */\n multiple?: boolean;\n /** Disable all options */\n disabled?: boolean;\n /** Keep disabled listbox in tab order */\n discoverable?: boolean;\n /** Layout orientation */\n orientation?: 'horizontal' | 'vertical';\n /** Remove default styles */\n unstyled?: boolean;\n /** Custom class name */\n className?: string;\n /** Children (Option and Group components) */\n children: React.ReactNode;\n /** Accessible label */\n 'aria-label'?: string;\n /** Reference to external label element */\n 'aria-labelledby'?: string;\n}\n\nexport interface ListboxOptionProps {\n /** Value for this option (required) */\n value: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n /** Keep disabled option discoverable */\n discoverable?: boolean;\n /** Remove default styles */\n unstyled?: boolean;\n /** Custom class name */\n className?: string;\n /** Children (label content) */\n children?: React.ReactNode;\n /** Accessible label override */\n 'aria-label'?: string;\n}\n\nexport interface ListboxGroupProps {\n /** Group label (required, visible) */\n label: string;\n /** Disable all options in this group */\n disabled?: boolean;\n /** Remove default styles */\n unstyled?: boolean;\n /** Custom class name */\n className?: string;\n /** Children (Option components) */\n children: React.ReactNode;\n}\n\n// ============================================================================\n// Contexts\n// ============================================================================\n\nconst ListboxContext = createContext<ListboxContextValue | null>(null);\n\nexport function useListboxContext(): ListboxContextValue {\n const context = useContext(ListboxContext);\n if (!context) {\n throw new Error(\n '[Compa11y Listbox]: Option/Group must be used within a Listbox.'\n );\n }\n return context;\n}\n\n/** Group context to cascade disabled */\nconst ListboxGroupContext = createContext<{ groupDisabled: boolean }>({\n groupDisabled: false,\n});\n\n// ============================================================================\n// Listbox (Root)\n// ============================================================================\n\nexport const Listbox = forwardRef<HTMLDivElement, ListboxProps>(\n function Listbox(\n {\n value: controlledValue,\n defaultValue,\n onValueChange,\n multiple = false,\n disabled = false,\n discoverable = true,\n orientation = 'vertical',\n unstyled = false,\n className = '',\n children,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n },\n ref\n ) {\n const listboxId = useId('listbox');\n const { announce } = useAnnouncer();\n\n // ===== State =====\n const [uncontrolledValue, setUncontrolledValue] = useState<\n string | string[]\n >(() => defaultValue ?? (multiple ? [] : ''));\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue! : uncontrolledValue;\n\n const selectedValues = useMemo(() => {\n if (multiple) {\n return new Set(\n Array.isArray(currentValue) ? currentValue : []\n );\n }\n return new Set(currentValue ? [String(currentValue)] : []);\n }, [currentValue, multiple]);\n\n const [focusedValue, setFocusedValue] = useState<string | null>(null);\n\n // ===== Option Registry =====\n const optionsRef = useRef<\n Map<string, { disabled: boolean; label: string }>\n >(new Map());\n const [optionsVersion, setOptionsVersion] = useState(0);\n\n const registerOption = useCallback(\n (value: string, optDisabled: boolean, label: string) => {\n optionsRef.current.set(value, { disabled: optDisabled, label });\n setOptionsVersion((v) => v + 1);\n },\n []\n );\n\n const unregisterOption = useCallback((value: string) => {\n optionsRef.current.delete(value);\n setOptionsVersion((v) => v + 1);\n }, []);\n\n const updateOptionDisabled = useCallback(\n (value: string, optDisabled: boolean) => {\n const existing = optionsRef.current.get(value);\n if (existing) {\n optionsRef.current.set(value, { ...existing, disabled: optDisabled });\n }\n },\n []\n );\n\n // ===== Derived option lists =====\n const enabledValues = useMemo(() => {\n const result: string[] = [];\n optionsRef.current.forEach((info, value) => {\n if (!info.disabled && !disabled) {\n result.push(value);\n }\n });\n return result;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [optionsVersion, disabled]);\n\n // ===== Accessible label warning =====\n useEffect(() => {\n if (!ariaLabel && !ariaLabelledBy) {\n warnings.warning(\n 'Listbox has no accessible label. Screen readers need this.',\n 'Add aria-label=\"...\" or aria-labelledby=\"...\"'\n );\n }\n }, [ariaLabel, ariaLabelledBy]);\n\n // ===== Selection =====\n const isSelected = useCallback(\n (value: string) => selectedValues.has(value),\n [selectedValues]\n );\n\n const handleSelect = useCallback(\n (optionValue: string) => {\n if (disabled) return;\n\n const info = optionsRef.current.get(optionValue);\n if (info?.disabled) return;\n\n let newValue: string | string[];\n const label = info?.label || optionValue;\n\n if (multiple) {\n const current = new Set(selectedValues);\n if (current.has(optionValue)) {\n current.delete(optionValue);\n announce(`${label} deselected`, { politeness: 'polite' });\n } else {\n current.add(optionValue);\n announce(`${label} selected`, { politeness: 'polite' });\n }\n newValue = Array.from(current);\n } else {\n newValue = optionValue;\n announce(`${label} selected`, { politeness: 'polite' });\n }\n\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [disabled, multiple, selectedValues, isControlled, onValueChange, announce]\n );\n\n // ===== Navigation =====\n const navigateOption = useCallback(\n (direction: 'next' | 'prev' | 'first' | 'last') => {\n if (enabledValues.length === 0) return;\n\n const currentIndex = focusedValue\n ? enabledValues.indexOf(focusedValue)\n : -1;\n\n let nextIndex: number;\n switch (direction) {\n case 'next':\n nextIndex =\n currentIndex < 0\n ? 0\n : Math.min(currentIndex + 1, enabledValues.length - 1);\n break;\n case 'prev':\n nextIndex =\n currentIndex < 0\n ? enabledValues.length - 1\n : Math.max(currentIndex - 1, 0);\n break;\n case 'first':\n nextIndex = 0;\n break;\n case 'last':\n nextIndex = enabledValues.length - 1;\n break;\n }\n\n const nextValue = enabledValues[nextIndex];\n if (nextValue !== undefined) {\n setFocusedValue(nextValue);\n\n if (!multiple) {\n // Single-select: selection follows focus\n const info = optionsRef.current.get(nextValue);\n const label = info?.label || nextValue;\n\n let newVal: string | string[] = nextValue;\n if (!isControlled) {\n setUncontrolledValue(newVal);\n }\n onValueChange?.(newVal);\n announce(`${label} selected`, { politeness: 'polite' });\n } else {\n // Multi-select: just announce\n const info = optionsRef.current.get(nextValue);\n const label = info?.label || nextValue;\n const sel = selectedValues.has(nextValue);\n announce(`${label}${sel ? ', selected' : ''}`, {\n politeness: 'polite',\n });\n }\n }\n },\n [\n enabledValues,\n focusedValue,\n multiple,\n isControlled,\n onValueChange,\n announce,\n selectedValues,\n ]\n );\n\n const toggleFocusedOption = useCallback(() => {\n if (focusedValue && multiple) {\n handleSelect(focusedValue);\n }\n }, [focusedValue, multiple, handleSelect]);\n\n const selectRangeToFirst = useCallback(() => {\n if (!multiple || !focusedValue) return;\n const currentIdx = enabledValues.indexOf(focusedValue);\n if (currentIdx < 0) return;\n\n const toSelect = enabledValues.slice(0, currentIdx + 1);\n const newSet = new Set(selectedValues);\n toSelect.forEach((v) => newSet.add(v));\n const newValue = Array.from(newSet);\n\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n setFocusedValue(enabledValues[0] ?? null);\n announce(`${toSelect.length} items selected`, { politeness: 'polite' });\n }, [\n multiple,\n focusedValue,\n enabledValues,\n selectedValues,\n isControlled,\n onValueChange,\n announce,\n ]);\n\n const selectRangeToLast = useCallback(() => {\n if (!multiple || !focusedValue) return;\n const currentIdx = enabledValues.indexOf(focusedValue);\n if (currentIdx < 0) return;\n\n const toSelect = enabledValues.slice(currentIdx);\n const newSet = new Set(selectedValues);\n toSelect.forEach((v) => newSet.add(v));\n const newValue = Array.from(newSet);\n\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n setFocusedValue(enabledValues[enabledValues.length - 1] ?? null);\n announce(`${toSelect.length} items selected`, { politeness: 'polite' });\n }, [\n multiple,\n focusedValue,\n enabledValues,\n selectedValues,\n isControlled,\n onValueChange,\n announce,\n ]);\n\n const toggleSelectAll = useCallback(() => {\n if (!multiple) return;\n\n const allSelected = enabledValues.every((v) => selectedValues.has(v));\n let newValue: string[];\n\n if (allSelected) {\n newValue = [];\n announce('All deselected', { politeness: 'polite' });\n } else {\n newValue = [...enabledValues];\n announce('All selected', { politeness: 'polite' });\n }\n\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n }, [\n multiple,\n enabledValues,\n selectedValues,\n isControlled,\n onValueChange,\n announce,\n ]);\n\n // ===== Keyboard =====\n const keyboardHandlers = useMemo(() => {\n const handlers: Record<string, (e: KeyboardEvent) => void | boolean> = {\n ArrowDown: () => navigateOption('next'),\n ArrowUp: () => navigateOption('prev'),\n Home: () => navigateOption('first'),\n End: () => navigateOption('last'),\n };\n\n if (multiple) {\n handlers[' '] = () => toggleFocusedOption();\n handlers['Shift+ArrowDown'] = () => {\n navigateOption('next');\n // Toggle after navigate has set the new focused value\n // We need to use a microtask since navigateOption sets state\n setTimeout(() => toggleFocusedOption(), 0);\n };\n handlers['Shift+ArrowUp'] = () => {\n navigateOption('prev');\n setTimeout(() => toggleFocusedOption(), 0);\n };\n handlers['Ctrl+Shift+Home'] = () => selectRangeToFirst();\n handlers['Ctrl+Shift+End'] = () => selectRangeToLast();\n handlers['Ctrl+a'] = () => toggleSelectAll();\n handlers['Meta+a'] = () => toggleSelectAll();\n }\n\n return handlers;\n }, [\n multiple,\n navigateOption,\n toggleFocusedOption,\n selectRangeToFirst,\n selectRangeToLast,\n toggleSelectAll,\n ]);\n\n const keyboardProps = useKeyboard(keyboardHandlers, {\n preventDefault: true,\n stopPropagation: true,\n disabled,\n });\n\n // ===== Type-ahead =====\n const optionLabels = useMemo(() => {\n return Array.from(optionsRef.current.values()).map((info) => info.label);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [optionsVersion]);\n\n const typeAheadProps = useTypeAhead(\n optionLabels,\n (matchedLabel) => {\n // Find the value that matches this label\n for (const [value, info] of optionsRef.current.entries()) {\n if (info.label === matchedLabel && !info.disabled) {\n setFocusedValue(value);\n if (!multiple) {\n // Single-select: also select\n let newVal: string | string[] = value;\n if (!isControlled) {\n setUncontrolledValue(newVal);\n }\n onValueChange?.(newVal);\n announce(`${matchedLabel} selected`, { politeness: 'polite' });\n }\n break;\n }\n }\n },\n { disabled }\n );\n\n // Merge keyboard handlers\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n keyboardProps.onKeyDown(event);\n if (!event.defaultPrevented) {\n typeAheadProps.onKeyDown(event);\n }\n },\n [keyboardProps, typeAheadProps]\n );\n\n // ===== Focus handling =====\n const handleFocus = useCallback(() => {\n if (focusedValue) return; // Already have focus state\n\n // Focus selected option (or first selected in multi)\n if (!multiple && currentValue && typeof currentValue === 'string') {\n setFocusedValue(currentValue);\n return;\n }\n if (multiple && Array.isArray(currentValue) && currentValue.length > 0) {\n setFocusedValue(currentValue[0] ?? null);\n return;\n }\n\n // Default to first enabled\n if (enabledValues.length > 0) {\n setFocusedValue(enabledValues[0] ?? null);\n }\n }, [focusedValue, multiple, currentValue, enabledValues]);\n\n const handleBlur = useCallback(() => {\n // Keep focused value for when we re-focus, but clear active descendant\n }, []);\n\n // ===== Scroll into view =====\n const listboxRef = useRef<HTMLDivElement>(null);\n\n useEffect(() => {\n if (focusedValue && listboxRef.current) {\n const el = listboxRef.current.querySelector(\n `[data-value=\"${CSS.escape(focusedValue)}\"]`\n );\n el?.scrollIntoView({ block: 'nearest' });\n }\n }, [focusedValue]);\n\n // ===== Context =====\n const contextValue: ListboxContextValue = useMemo(\n () => ({\n multiple,\n disabled,\n discoverable,\n unstyled,\n orientation,\n selectedValues,\n focusedValue,\n onSelect: handleSelect,\n onFocusOption: setFocusedValue,\n registerOption,\n unregisterOption,\n updateOptionDisabled,\n isSelected,\n listboxId,\n }),\n [\n multiple,\n disabled,\n discoverable,\n unstyled,\n orientation,\n selectedValues,\n focusedValue,\n handleSelect,\n registerOption,\n unregisterOption,\n updateOptionDisabled,\n isSelected,\n listboxId,\n ]\n );\n\n // ===== Merge refs =====\n const mergedRef = useCallback(\n (node: HTMLDivElement | null) => {\n (listboxRef as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n },\n [ref]\n );\n\n // ===== Focused option ID for aria-activedescendant =====\n const activeDescendantId = focusedValue\n ? `${listboxId}-option-${focusedValue}`\n : undefined;\n\n return (\n <ListboxContext.Provider value={contextValue}>\n <div\n ref={mergedRef}\n role=\"listbox\"\n aria-label={ariaLabel}\n aria-labelledby={ariaLabelledBy}\n aria-orientation={orientation}\n aria-multiselectable={multiple || undefined}\n aria-disabled={disabled || undefined}\n aria-activedescendant={activeDescendantId}\n tabIndex={disabled && !discoverable ? -1 : 0}\n className={`compa11y-listbox ${className}`.trim()}\n data-compa11y-listbox=\"\"\n data-orientation={orientation}\n data-disabled={disabled ? 'true' : undefined}\n data-multiple={multiple ? 'true' : undefined}\n onKeyDown={handleKeyDown}\n onFocus={handleFocus}\n onBlur={handleBlur}\n style={\n unstyled\n ? {}\n : {\n width: 'var(--compa11y-listbox-width, 250px)',\n maxHeight: 'var(--compa11y-listbox-max-height, 300px)',\n overflowY: 'auto' as const,\n border: 'var(--compa11y-listbox-border, 1px solid #e0e0e0)',\n borderRadius: 'var(--compa11y-listbox-radius, 4px)',\n background: 'var(--compa11y-listbox-bg, white)',\n padding: 'var(--compa11y-listbox-padding, 0.25rem 0)',\n ...(disabled\n ? {\n opacity: 'var(--compa11y-listbox-disabled-opacity, 0.5)' as any,\n cursor: 'not-allowed',\n }\n : {}),\n }\n }\n >\n {children}\n </div>\n </ListboxContext.Provider>\n );\n }\n);\n\nListbox.displayName = 'Listbox';\n\n// ============================================================================\n// ListboxOption\n// ============================================================================\n\nexport const ListboxOption = forwardRef<HTMLDivElement, ListboxOptionProps>(\n function ListboxOption(\n {\n value,\n disabled: localDisabled = false,\n discoverable: _,\n unstyled: localUnstyled,\n className = '',\n children,\n 'aria-label': ariaLabel,\n },\n ref\n ) {\n const context = useListboxContext();\n const { groupDisabled } = useContext(ListboxGroupContext);\n\n const disabled = context.disabled || groupDisabled || localDisabled;\n const unstyled = localUnstyled ?? context.unstyled;\n const selected = context.isSelected(value);\n const focused = context.focusedValue === value;\n\n const optionId = `${context.listboxId}-option-${value}`;\n\n // Get label text from children\n const labelRef = useRef<string>('');\n const optionRef = useRef<HTMLDivElement>(null);\n\n const mergedRef = useCallback(\n (node: HTMLDivElement | null) => {\n (optionRef as React.MutableRefObject<HTMLDivElement | null>).current =\n node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLDivElement | null>).current = node;\n }\n },\n [ref]\n );\n\n // Register/unregister with parent\n useEffect(() => {\n const label =\n typeof children === 'string'\n ? children\n : optionRef.current?.textContent?.trim() || value;\n labelRef.current = label;\n context.registerOption(value, disabled, label);\n return () => context.unregisterOption(value);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [value]);\n\n // Update disabled state\n useEffect(() => {\n context.updateOptionDisabled(value, disabled);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [disabled, value]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent) => {\n if (disabled) {\n event.preventDefault();\n return;\n }\n context.onFocusOption(value);\n context.onSelect(value);\n },\n [disabled, context, value]\n );\n\n return (\n <div\n ref={mergedRef}\n id={optionId}\n role=\"option\"\n aria-selected={selected}\n aria-disabled={disabled || undefined}\n aria-label={ariaLabel}\n className={`compa11y-listbox-option ${className}`.trim()}\n data-compa11y-listbox-option=\"\"\n data-value={value}\n data-selected={selected ? 'true' : 'false'}\n data-focused={focused ? 'true' : 'false'}\n data-disabled={disabled ? 'true' : undefined}\n onClick={handleClick}\n style={\n unstyled\n ? {\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n : {\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n padding:\n 'var(--compa11y-listbox-option-padding, 0.5rem 0.75rem)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n userSelect: 'none' as const,\n transition: 'background 0.1s ease',\n background: focused\n ? selected\n ? 'var(--compa11y-listbox-option-selected-hover-bg, #cce0ff)'\n : 'var(--compa11y-listbox-option-hover-bg, #f5f5f5)'\n : selected\n ? 'var(--compa11y-listbox-option-selected-bg, #e6f0ff)'\n : 'transparent',\n fontWeight: selected ? 500 : 'normal',\n opacity: disabled ? 0.5 : 1,\n }\n }\n >\n <span style={{ flex: 1 }}>{children}</span>\n {selected && !unstyled && (\n <span\n aria-hidden=\"true\"\n style={{\n fontSize: '0.875rem',\n color: 'var(--compa11y-listbox-check-color, #0066cc)',\n marginLeft: '0.5rem',\n }}\n >\n &#10003;\n </span>\n )}\n </div>\n );\n }\n);\n\nListboxOption.displayName = 'ListboxOption';\n\n// ============================================================================\n// ListboxGroup\n// ============================================================================\n\nexport const ListboxGroup = forwardRef<HTMLDivElement, ListboxGroupProps>(\n function ListboxGroup(\n {\n label,\n disabled: groupDisabled = false,\n unstyled: localUnstyled,\n className = '',\n children,\n },\n ref\n ) {\n const context = useListboxContext();\n const unstyled = localUnstyled ?? context.unstyled;\n const labelId = useId('listbox-group');\n\n const groupContextValue = useMemo(\n () => ({ groupDisabled: context.disabled || groupDisabled }),\n [context.disabled, groupDisabled]\n );\n\n return (\n <ListboxGroupContext.Provider value={groupContextValue}>\n <div\n ref={ref}\n role=\"group\"\n aria-labelledby={labelId}\n aria-disabled={groupDisabled || undefined}\n className={`compa11y-listbox-group ${className}`.trim()}\n data-compa11y-listbox-group=\"\"\n data-disabled={groupDisabled ? 'true' : undefined}\n style={\n unstyled\n ? {}\n : {\n opacity: groupDisabled ? 0.5 : 1,\n }\n }\n >\n <div\n id={labelId}\n role=\"presentation\"\n style={\n unstyled\n ? {}\n : {\n padding:\n 'var(--compa11y-listbox-group-label-padding, 0.5rem 0.75rem 0.25rem)',\n fontSize:\n 'var(--compa11y-listbox-group-label-size, 0.75rem)',\n fontWeight: 600,\n color:\n 'var(--compa11y-listbox-group-label-color, #666)',\n textTransform: 'uppercase' as const,\n letterSpacing: '0.05em',\n }\n }\n >\n {label}\n </div>\n {children}\n </div>\n </ListboxGroupContext.Provider>\n );\n }\n);\n\nListboxGroup.displayName = 'ListboxGroup';\n\n// ============================================================================\n// Compound Component\n// ============================================================================\n\nexport const ListboxCompound = Object.assign(Listbox, {\n Option: ListboxOption,\n Group: ListboxGroup,\n});\n","/**\n * Input Component\n *\n * A foundational accessible input with label, hint, and error support.\n * Supports both a simple props-based API and a compound component API\n * for custom layouts.\n *\n * @example\n * ```tsx\n * // Simple props mode\n * <Input\n * label=\"Email\"\n * hint=\"We'll never share your email\"\n * error={emailError}\n * type=\"email\"\n * required\n * value={email}\n * onValueChange={setEmail}\n * />\n *\n * // Compound mode\n * <Input value={name} onValueChange={setName}>\n * <Input.Label>Full Name</Input.Label>\n * <Input.Field placeholder=\"John Doe\" required />\n * <Input.Hint>Enter your first and last name</Input.Hint>\n * <Input.Error>{nameError}</Input.Error>\n * </Input>\n * ```\n */\n\nimport {\n Children,\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type InputHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { useId } from '../../hooks/use-id';\nimport { useFocusVisible } from '../../hooks/use-focus-visible';\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype InputType =\n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'tel'\n | 'url'\n | 'search';\n\nexport interface InputProps {\n /** Controlled value */\n value?: string;\n /** Uncontrolled default value */\n defaultValue?: string;\n /** Called when value changes */\n onValueChange?: (value: string) => void;\n\n /** Input type */\n type?: InputType;\n\n /** Visible label text (props mode) */\n label?: ReactNode;\n /** Hint/description text (props mode) */\n hint?: ReactNode;\n /** Error message (props mode) */\n error?: ReactNode;\n\n /** Whether the input is required */\n required?: boolean;\n /** Whether the input is disabled */\n disabled?: boolean;\n /** Whether the input is read-only */\n readOnly?: boolean;\n\n /** Accessible label when no visible label */\n 'aria-label'?: string;\n /** ID of external labelling element */\n 'aria-labelledby'?: string;\n\n /** Placeholder text */\n placeholder?: string;\n /** Input name for form submission */\n name?: string;\n /** Autocomplete hint */\n autoComplete?: string;\n /** Maximum character length */\n maxLength?: number;\n /** Minimum character length */\n minLength?: number;\n /** Validation pattern */\n pattern?: string;\n /** Input mode hint for virtual keyboards */\n inputMode?: 'none' | 'text' | 'decimal' | 'numeric' | 'tel' | 'search' | 'email' | 'url';\n\n /** Provided element ID (overrides generated) */\n id?: string;\n\n /** Remove default styles for full customization */\n unstyled?: boolean;\n /** CSS class name */\n className?: string;\n\n /** Focus event handler */\n onFocus?: React.FocusEventHandler<HTMLInputElement>;\n /** Blur event handler */\n onBlur?: React.FocusEventHandler<HTMLInputElement>;\n\n /** Children for compound mode */\n children?: ReactNode;\n}\n\nexport interface InputFieldProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'type' | 'onChange' | 'value'\n > {\n /** Input type */\n type?: InputType;\n}\n\nexport interface InputLabelProps {\n children: ReactNode;\n className?: string;\n}\n\nexport interface InputHintProps {\n children: ReactNode;\n className?: string;\n}\n\nexport interface InputErrorProps {\n children?: ReactNode;\n className?: string;\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\ninterface InputContextValue {\n fieldId: string;\n labelId: string;\n hintId: string;\n errorId: string;\n value: string;\n setValue: (value: string) => void;\n hasError: boolean;\n disabled: boolean;\n readOnly: boolean;\n required: boolean;\n isFocusVisible: boolean;\n focusProps: { onFocus: () => void; onBlur: () => void };\n unstyled: boolean;\n}\n\nconst InputContext = createContext<InputContextValue | null>(null);\n\nfunction useInputContext(): InputContextValue {\n const ctx = useContext(InputContext);\n if (!ctx) {\n throw new Error(\n '[Compa11y Input]: Input sub-components (Input.Label, Input.Field, etc.) must be used within <Input>.'\n );\n }\n return ctx;\n}\n\nexport { useInputContext, type InputContextValue };\n\n// =============================================================================\n// Sub-components (for compound mode)\n// =============================================================================\n\n/**\n * Input label sub-component\n */\nexport const InputLabel = forwardRef<HTMLLabelElement, InputLabelProps>(\n function InputLabel({ children, className }, ref) {\n const ctx = useInputContext();\n\n return (\n <label\n ref={ref}\n id={ctx.labelId}\n htmlFor={ctx.fieldId}\n data-compa11y-input-label=\"\"\n className={className}\n style={\n ctx.unstyled\n ? {}\n : {\n display: 'block',\n color: ctx.disabled\n ? 'var(--compa11y-input-disabled-color, #999)'\n : 'var(--compa11y-input-label-color, inherit)',\n fontSize: 'var(--compa11y-input-label-size, 0.875rem)',\n fontWeight:\n 'var(--compa11y-input-label-weight, 500)' as any,\n }\n }\n >\n {children}\n {ctx.required && (\n <span\n data-compa11y-input-required=\"\"\n aria-hidden=\"true\"\n style={\n ctx.unstyled\n ? {}\n : {\n color: 'var(--compa11y-input-required-color, #ef4444)',\n marginLeft: '0.125rem',\n }\n }\n >\n *\n </span>\n )}\n </label>\n );\n }\n);\n\nInputLabel.displayName = 'InputLabel';\n\n/**\n * Input field sub-component (the actual <input> element)\n */\nexport const InputField = forwardRef<HTMLInputElement, InputFieldProps>(\n function InputField(\n {\n type = 'text',\n onFocus: providedOnFocus,\n onBlur: providedOnBlur,\n className,\n style,\n ...rest\n },\n ref\n ) {\n const ctx = useInputContext();\n const inputRef = useRef<HTMLInputElement>(null);\n\n const mergedRef = useCallback(\n (node: HTMLInputElement | null) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n }\n },\n [ref]\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n ctx.setValue(event.target.value);\n },\n [ctx.setValue]\n );\n\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n ctx.focusProps.onFocus();\n providedOnFocus?.(event);\n },\n [ctx.focusProps, providedOnFocus]\n );\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n ctx.focusProps.onBlur();\n providedOnBlur?.(event);\n },\n [ctx.focusProps, providedOnBlur]\n );\n\n // Build aria-describedby\n const describedByParts: string[] = [];\n // Always include hint ID — the hint element may or may not exist\n // but we include it so the relationship is correct if it does\n describedByParts.push(ctx.hintId);\n if (ctx.hasError) {\n describedByParts.push(ctx.errorId);\n }\n\n return (\n <input\n ref={mergedRef}\n id={ctx.fieldId}\n type={type}\n value={ctx.value}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={ctx.disabled}\n readOnly={ctx.readOnly}\n aria-describedby={describedByParts.join(' ') || undefined}\n aria-invalid={ctx.hasError ? 'true' : undefined}\n aria-required={ctx.required ? 'true' : undefined}\n data-compa11y-input-field=\"\"\n className={className}\n style={\n ctx.unstyled\n ? style\n : {\n width: '100%',\n padding: 'var(--compa11y-input-padding, 0.5rem 0.75rem)',\n border: ctx.hasError\n ? '1px solid var(--compa11y-input-border-error, #ef4444)'\n : 'var(--compa11y-input-border, 1px solid #ccc)',\n borderRadius: 'var(--compa11y-input-radius, 4px)',\n fontSize: 'var(--compa11y-input-font-size, 0.875rem)',\n fontFamily: 'inherit',\n background: ctx.disabled\n ? 'var(--compa11y-input-disabled-bg, #f5f5f5)'\n : ctx.readOnly\n ? 'var(--compa11y-input-readonly-bg, #f9f9f9)'\n : 'var(--compa11y-input-bg, white)',\n color: 'inherit',\n cursor: ctx.disabled ? 'not-allowed' : undefined,\n opacity: ctx.disabled\n ? 'var(--compa11y-input-disabled-opacity, 0.7)' as any\n : undefined,\n ...(ctx.isFocusVisible && !ctx.disabled\n ? {\n outline:\n ctx.hasError\n ? '2px solid var(--compa11y-input-border-error, #ef4444)'\n : '2px solid var(--compa11y-focus-color, #0066cc)',\n outlineOffset: '-1px',\n borderColor: ctx.hasError\n ? 'var(--compa11y-input-border-error, #ef4444)'\n : 'var(--compa11y-input-border-focus, #0066cc)',\n }\n : {}),\n ...style,\n }\n }\n {...rest}\n />\n );\n }\n);\n\nInputField.displayName = 'InputField';\n\n/**\n * Input hint sub-component\n */\nexport const InputHint = forwardRef<HTMLDivElement, InputHintProps>(\n function InputHint({ children, className }, ref) {\n const ctx = useInputContext();\n\n return (\n <div\n ref={ref}\n id={ctx.hintId}\n data-compa11y-input-hint=\"\"\n className={className}\n style={\n ctx.unstyled\n ? {}\n : {\n color: 'var(--compa11y-input-hint-color, #666)',\n fontSize: 'var(--compa11y-input-hint-size, 0.8125rem)',\n }\n }\n >\n {children}\n </div>\n );\n }\n);\n\nInputHint.displayName = 'InputHint';\n\n/**\n * Input error sub-component - only renders when children are truthy\n */\nexport const InputError = forwardRef<HTMLDivElement, InputErrorProps>(\n function InputError({ children, className }, ref) {\n const ctx = useInputContext();\n\n if (!children) return null;\n\n return (\n <div\n ref={ref}\n id={ctx.errorId}\n role=\"alert\"\n data-compa11y-input-error=\"\"\n className={className}\n style={\n ctx.unstyled\n ? {}\n : {\n color: 'var(--compa11y-input-error-color, #ef4444)',\n fontSize: 'var(--compa11y-input-error-size, 0.8125rem)',\n }\n }\n >\n {children}\n </div>\n );\n }\n);\n\nInputError.displayName = 'InputError';\n\n// =============================================================================\n// Root Input component\n// =============================================================================\n\n/**\n * Accessible Input component with label, hint, and error support.\n *\n * Supports two modes:\n * - **Props mode**: Pass `label`, `hint`, `error` as props for automatic layout\n * - **Compound mode**: Use `<Input.Label>`, `<Input.Field>`, etc. as children for custom layout\n */\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\n function Input(\n {\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n type = 'text',\n label,\n hint,\n error,\n required = false,\n disabled = false,\n readOnly = false,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n placeholder,\n name,\n autoComplete,\n maxLength,\n minLength,\n pattern,\n inputMode,\n id: providedId,\n unstyled = false,\n className,\n onFocus: providedOnFocus,\n onBlur: providedOnBlur,\n children,\n },\n ref\n ) {\n const generatedId = useId('input');\n const baseId = providedId || generatedId;\n const fieldId = `${baseId}-field`;\n const labelId = `${baseId}-label`;\n const hintId = `${baseId}-hint`;\n const errorId = `${baseId}-error`;\n\n // Controlled / Uncontrolled\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : uncontrolledValue;\n\n const setValue = useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange]\n );\n\n // Focus visible\n const { isFocusVisible, focusProps } = useFocusVisible();\n\n // Dev warnings\n useEffect(() => {\n if (process.env.NODE_ENV !== 'production') {\n const isCompound = Children.count(children) > 0;\n if (!isCompound && !label && !ariaLabel && !ariaLabelledBy) {\n console.warn(\n '[Compa11y Input]: Input has no accessible label. Screen readers need this to identify the input. ' +\n 'Use label prop, aria-label, or aria-labelledby.'\n );\n }\n }\n }, [children, label, ariaLabel, ariaLabelledBy]);\n\n const hasError = Boolean(error);\n const isCompound = Children.count(children) > 0;\n\n const contextValue: InputContextValue = {\n fieldId,\n labelId,\n hintId,\n errorId,\n value: currentValue,\n setValue,\n hasError,\n disabled,\n readOnly,\n required,\n isFocusVisible,\n focusProps,\n unstyled,\n };\n\n // Data attributes for the wrapper\n const dataAttrs = {\n 'data-compa11y-input': '',\n 'data-error': hasError ? 'true' : 'false',\n 'data-disabled': disabled ? 'true' : 'false',\n 'data-required': required ? 'true' : 'false',\n 'data-readonly': readOnly ? 'true' : 'false',\n };\n\n const wrapperStyle = unstyled\n ? {}\n : {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '0.25rem',\n };\n\n // ----- Compound mode -----\n if (isCompound) {\n return (\n <InputContext.Provider value={contextValue}>\n <div {...dataAttrs} className={className} style={wrapperStyle}>\n {children}\n </div>\n </InputContext.Provider>\n );\n }\n\n // ----- Props mode -----\n const inputRef = useRef<HTMLInputElement>(null);\n\n const mergedRef = useCallback(\n (node: HTMLInputElement | null) => {\n (inputRef as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (ref as React.MutableRefObject<HTMLInputElement | null>).current =\n node;\n }\n },\n [ref]\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n setValue(event.target.value);\n },\n [setValue]\n );\n\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n focusProps.onFocus();\n providedOnFocus?.(event);\n },\n [focusProps, providedOnFocus]\n );\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLInputElement>) => {\n focusProps.onBlur();\n providedOnBlur?.(event);\n },\n [focusProps, providedOnBlur]\n );\n\n // Build aria-describedby\n const describedByParts: string[] = [];\n if (hint) describedByParts.push(hintId);\n if (hasError) describedByParts.push(errorId);\n const ariaDescribedBy =\n describedByParts.length > 0 ? describedByParts.join(' ') : undefined;\n\n return (\n <div {...dataAttrs} className={className} style={wrapperStyle}>\n {/* Label */}\n {label && (\n <label\n id={labelId}\n htmlFor={fieldId}\n data-compa11y-input-label=\"\"\n style={\n unstyled\n ? {}\n : {\n display: 'block',\n color: disabled\n ? 'var(--compa11y-input-disabled-color, #999)'\n : 'var(--compa11y-input-label-color, inherit)',\n fontSize: 'var(--compa11y-input-label-size, 0.875rem)',\n fontWeight:\n 'var(--compa11y-input-label-weight, 500)' as any,\n }\n }\n >\n {label}\n {required && (\n <span\n data-compa11y-input-required=\"\"\n aria-hidden=\"true\"\n style={\n unstyled\n ? {}\n : {\n color:\n 'var(--compa11y-input-required-color, #ef4444)',\n marginLeft: '0.125rem',\n }\n }\n >\n *\n </span>\n )}\n </label>\n )}\n\n {/* Input field */}\n <input\n ref={mergedRef}\n id={fieldId}\n type={type}\n value={currentValue}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n placeholder={placeholder}\n name={name}\n autoComplete={autoComplete}\n maxLength={maxLength}\n minLength={minLength}\n pattern={pattern}\n inputMode={inputMode}\n aria-label={!label ? ariaLabel : undefined}\n aria-labelledby={\n !label && ariaLabelledBy\n ? ariaLabelledBy\n : label\n ? labelId\n : undefined\n }\n aria-describedby={ariaDescribedBy}\n aria-invalid={hasError ? 'true' : undefined}\n aria-required={required ? 'true' : undefined}\n data-compa11y-input-field=\"\"\n style={\n unstyled\n ? {}\n : {\n width: '100%',\n padding: 'var(--compa11y-input-padding, 0.5rem 0.75rem)',\n border: hasError\n ? '1px solid var(--compa11y-input-border-error, #ef4444)'\n : 'var(--compa11y-input-border, 1px solid #ccc)',\n borderRadius: 'var(--compa11y-input-radius, 4px)',\n fontSize: 'var(--compa11y-input-font-size, 0.875rem)',\n fontFamily: 'inherit',\n background: disabled\n ? 'var(--compa11y-input-disabled-bg, #f5f5f5)'\n : readOnly\n ? 'var(--compa11y-input-readonly-bg, #f9f9f9)'\n : 'var(--compa11y-input-bg, white)',\n color: 'inherit',\n cursor: disabled ? 'not-allowed' : undefined,\n opacity: disabled\n ? ('var(--compa11y-input-disabled-opacity, 0.7)' as any)\n : undefined,\n ...(isFocusVisible && !disabled\n ? {\n outline: hasError\n ? '2px solid var(--compa11y-input-border-error, #ef4444)'\n : '2px solid var(--compa11y-focus-color, #0066cc)',\n outlineOffset: '-1px',\n borderColor: hasError\n ? 'var(--compa11y-input-border-error, #ef4444)'\n : 'var(--compa11y-input-border-focus, #0066cc)',\n }\n : {}),\n }\n }\n />\n\n {/* Hint */}\n {hint && (\n <div\n id={hintId}\n data-compa11y-input-hint=\"\"\n style={\n unstyled\n ? {}\n : {\n color: 'var(--compa11y-input-hint-color, #666)',\n fontSize: 'var(--compa11y-input-hint-size, 0.8125rem)',\n }\n }\n >\n {hint}\n </div>\n )}\n\n {/* Error */}\n {hasError && (\n <div\n id={errorId}\n role=\"alert\"\n data-compa11y-input-error=\"\"\n style={\n unstyled\n ? {}\n : {\n color: 'var(--compa11y-input-error-color, #ef4444)',\n fontSize:\n 'var(--compa11y-input-error-size, 0.8125rem)',\n }\n }\n >\n {error}\n </div>\n )}\n </div>\n );\n }\n);\n\nInput.displayName = 'Input';\n\n// =============================================================================\n// Compound export\n// =============================================================================\n\nexport const InputCompound = Object.assign(Input, {\n Label: InputLabel,\n Field: InputField,\n Hint: InputHint,\n Error: InputError,\n});\n","/**\n * Button Component\n *\n * An accessible button with variant, size, loading, and discoverable support.\n *\n * @example\n * ```tsx\n * <Button variant=\"primary\" onClick={handleSave}>Save</Button>\n * <Button variant=\"danger\" loading>Deleting...</Button>\n * <Button variant=\"outline\" disabled discoverable>Unavailable</Button>\n * ```\n */\n\nimport {\n forwardRef,\n useCallback,\n useEffect,\n useRef,\n type ButtonHTMLAttributes,\n type ReactNode,\n} from 'react';\nimport { useId } from '../../hooks/use-id';\nimport { useFocusVisible } from '../../hooks/use-focus-visible';\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype ButtonVariant = 'primary' | 'secondary' | 'danger' | 'outline' | 'ghost';\ntype ButtonSize = 'sm' | 'md' | 'lg';\n\nexport interface ButtonProps\n extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'disabled' | 'type'\n > {\n /** Visual variant */\n variant?: ButtonVariant;\n /** Size */\n size?: ButtonSize;\n /** HTML button type */\n type?: 'button' | 'submit' | 'reset';\n /** Whether the button is disabled */\n disabled?: boolean;\n /**\n * Whether disabled button remains discoverable via keyboard.\n * When true, disabled button stays in tab order with aria-disabled.\n * When false, disabled button is removed from tab order with native disabled.\n * @default false\n */\n discoverable?: boolean;\n /** Whether the button is in a loading state (sets aria-busy) */\n loading?: boolean;\n /** Remove default styles for full customization */\n unstyled?: boolean;\n /** Accessible label when no visible text */\n 'aria-label'?: string;\n /** Children (button content) */\n children?: ReactNode;\n}\n\n// =============================================================================\n// Style helpers\n// =============================================================================\n\nconst VARIANT_STYLES: Record<ButtonVariant, React.CSSProperties> = {\n primary: {\n background: 'var(--compa11y-button-primary-bg, #0066cc)',\n color: 'var(--compa11y-button-primary-color, white)',\n border: 'var(--compa11y-button-primary-border, 1px solid #0066cc)',\n },\n secondary: {\n background: 'var(--compa11y-button-secondary-bg, white)',\n color: 'var(--compa11y-button-secondary-color, #333)',\n border: 'var(--compa11y-button-secondary-border, 1px solid #ccc)',\n },\n danger: {\n background: 'var(--compa11y-button-danger-bg, #ef4444)',\n color: 'var(--compa11y-button-danger-color, white)',\n border: 'var(--compa11y-button-danger-border, 1px solid #ef4444)',\n },\n outline: {\n background: 'var(--compa11y-button-outline-bg, transparent)',\n color: 'var(--compa11y-button-outline-color, #0066cc)',\n border: 'var(--compa11y-button-outline-border, 1px solid #0066cc)',\n },\n ghost: {\n background: 'var(--compa11y-button-ghost-bg, transparent)',\n color: 'var(--compa11y-button-ghost-color, #333)',\n border: 'var(--compa11y-button-ghost-border, 1px solid transparent)',\n },\n};\n\nconst SIZE_STYLES: Record<ButtonSize, React.CSSProperties> = {\n sm: {\n padding: 'var(--compa11y-button-padding-sm, 0.25rem 0.5rem)',\n fontSize: 'var(--compa11y-button-font-size-sm, 0.75rem)',\n },\n md: {\n padding: 'var(--compa11y-button-padding-md, 0.5rem 1rem)',\n fontSize: 'var(--compa11y-button-font-size-md, 0.875rem)',\n },\n lg: {\n padding: 'var(--compa11y-button-padding-lg, 0.75rem 1.5rem)',\n fontSize: 'var(--compa11y-button-font-size-lg, 1rem)',\n },\n};\n\n// =============================================================================\n// Component\n// =============================================================================\n\n/**\n * Accessible Button component with variant, size, and loading support.\n *\n * Uses `aria-disabled` + event prevention for discoverable disabled state,\n * keeping the button in the tab order so keyboard users can find it.\n */\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(\n function Button(\n {\n variant = 'secondary',\n size = 'md',\n type = 'button',\n disabled = false,\n discoverable = false,\n loading = false,\n unstyled = false,\n 'aria-label': ariaLabel,\n className,\n style,\n onClick,\n onFocus: providedOnFocus,\n onBlur: providedOnBlur,\n children,\n ...rest\n },\n ref\n ) {\n const generatedId = useId('button');\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n const mergedRef = useCallback(\n (node: HTMLButtonElement | null) => {\n (\n buttonRef as React.MutableRefObject<HTMLButtonElement | null>\n ).current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (\n ref as React.MutableRefObject<HTMLButtonElement | null>\n ).current = node;\n }\n },\n [ref]\n );\n\n // Focus visible\n const { isFocusVisible, focusProps } = useFocusVisible();\n\n // Dev warnings\n useEffect(() => {\n if (process.env.NODE_ENV !== 'production') {\n if (!children && !ariaLabel && !rest['aria-labelledby']) {\n console.warn(\n '[Compa11y Button]: Button has no accessible label. Screen readers need this to identify the button. ' +\n 'Add text content, aria-label, or aria-labelledby.'\n );\n }\n }\n }, [children, ariaLabel, rest['aria-labelledby']]);\n\n // Use native disabled only when NOT discoverable — removes from tab order entirely.\n // When discoverable, aria-disabled + event prevention keeps it in tab order.\n const useNativeDisabled = disabled && !discoverable;\n const isInteractionDisabled = disabled || loading;\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n if (isInteractionDisabled) {\n event.preventDefault();\n return;\n }\n onClick?.(event);\n },\n [isInteractionDisabled, onClick]\n );\n\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLButtonElement>) => {\n focusProps.onFocus();\n providedOnFocus?.(event);\n },\n [focusProps, providedOnFocus]\n );\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLButtonElement>) => {\n focusProps.onBlur();\n providedOnBlur?.(event);\n },\n [focusProps, providedOnBlur]\n );\n\n // Data attributes\n const dataAttrs = {\n 'data-compa11y-button': '',\n 'data-variant': variant,\n 'data-size': size,\n 'data-disabled': disabled ? 'true' : 'false',\n 'data-loading': loading ? 'true' : 'false',\n };\n\n const baseStyle: React.CSSProperties = unstyled\n ? {}\n : {\n display: 'inline-flex',\n alignItems: 'center',\n justifyContent: 'center',\n gap: '0.5rem',\n borderRadius: 'var(--compa11y-button-radius, 4px)',\n fontFamily: 'inherit',\n fontWeight: 'var(--compa11y-button-font-weight, 500)' as any,\n lineHeight: '1.5',\n cursor: isInteractionDisabled ? 'not-allowed' : 'pointer',\n opacity: disabled\n ? ('var(--compa11y-button-disabled-opacity, 0.5)' as any)\n : undefined,\n transition: 'background-color 0.15s ease, border-color 0.15s ease',\n ...VARIANT_STYLES[variant],\n ...SIZE_STYLES[size],\n ...(isFocusVisible && !useNativeDisabled\n ? {\n outline: '2px solid var(--compa11y-focus-color, #0066cc)',\n outlineOffset: '2px',\n }\n : {}),\n };\n\n return (\n <button\n ref={mergedRef}\n id={generatedId}\n type={type}\n disabled={useNativeDisabled}\n tabIndex={disabled && !discoverable ? undefined : 0}\n aria-disabled={isInteractionDisabled ? 'true' : undefined}\n aria-busy={loading ? 'true' : undefined}\n aria-label={ariaLabel}\n onClick={handleClick}\n onFocus={handleFocus}\n onBlur={handleBlur}\n className={className}\n style={{ ...baseStyle, ...style }}\n {...dataAttrs}\n {...rest}\n >\n {loading && (\n <span\n data-compa11y-button-spinner=\"\"\n aria-hidden=\"true\"\n style={\n unstyled\n ? {}\n : {\n display: 'inline-block',\n width: '1em',\n height: '1em',\n border: '2px solid currentColor',\n borderRightColor: 'transparent',\n borderRadius: '50%',\n animation: 'compa11y-spin 0.6s linear infinite',\n }\n }\n />\n )}\n {children}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n","/**\n * Textarea Component\n *\n * A foundational accessible textarea with label, hint, and error support.\n * Supports both a simple props-based API and a compound component API\n * for custom layouts.\n *\n * @example\n * ```tsx\n * // Simple props mode\n * <Textarea\n * label=\"Description\"\n * hint=\"Provide a brief summary\"\n * error={descError}\n * required\n * rows={4}\n * value={desc}\n * onValueChange={setDesc}\n * />\n *\n * // Compound mode\n * <Textarea value={bio} onValueChange={setBio}>\n * <Textarea.Label>Bio</Textarea.Label>\n * <Textarea.Field rows={5} placeholder=\"Tell us about yourself...\" />\n * <Textarea.Hint>Markdown is supported</Textarea.Hint>\n * <Textarea.Error>{bioError}</Textarea.Error>\n * </Textarea>\n * ```\n */\n\nimport {\n Children,\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type ReactNode,\n type TextareaHTMLAttributes,\n} from 'react';\nimport { useId } from '../../hooks/use-id';\nimport { useFocusVisible } from '../../hooks/use-focus-visible';\n\n// =============================================================================\n// Types\n// =============================================================================\n\ntype TextareaResize = 'none' | 'both' | 'horizontal' | 'vertical';\n\nexport interface TextareaProps {\n /** Controlled value */\n value?: string;\n /** Uncontrolled default value */\n defaultValue?: string;\n /** Called when value changes */\n onValueChange?: (value: string) => void;\n\n /** Number of visible text rows */\n rows?: number;\n /** Resize behavior */\n resize?: TextareaResize;\n\n /** Visible label text (props mode) */\n label?: ReactNode;\n /** Hint/description text (props mode) */\n hint?: ReactNode;\n /** Error message (props mode) */\n error?: ReactNode;\n\n /** Whether the textarea is required */\n required?: boolean;\n /** Whether the textarea is disabled */\n disabled?: boolean;\n /** Whether the textarea is read-only */\n readOnly?: boolean;\n\n /** Accessible label when no visible label */\n 'aria-label'?: string;\n /** ID of external labelling element */\n 'aria-labelledby'?: string;\n\n /** Placeholder text */\n placeholder?: string;\n /** Textarea name for form submission */\n name?: string;\n /** Autocomplete hint */\n autoComplete?: string;\n /** Maximum character length */\n maxLength?: number;\n /** Minimum character length */\n minLength?: number;\n\n /** Provided element ID (overrides generated) */\n id?: string;\n\n /** Remove default styles for full customization */\n unstyled?: boolean;\n /** CSS class name */\n className?: string;\n\n /** Focus event handler */\n onFocus?: React.FocusEventHandler<HTMLTextAreaElement>;\n /** Blur event handler */\n onBlur?: React.FocusEventHandler<HTMLTextAreaElement>;\n\n /** Children for compound mode */\n children?: ReactNode;\n}\n\nexport interface TextareaFieldProps\n extends Omit<\n TextareaHTMLAttributes<HTMLTextAreaElement>,\n 'onChange' | 'value'\n > {}\n\nexport interface TextareaLabelProps {\n children: ReactNode;\n className?: string;\n}\n\nexport interface TextareaHintProps {\n children: ReactNode;\n className?: string;\n}\n\nexport interface TextareaErrorProps {\n children?: ReactNode;\n className?: string;\n}\n\n// =============================================================================\n// Context\n// =============================================================================\n\ninterface TextareaContextValue {\n fieldId: string;\n labelId: string;\n hintId: string;\n errorId: string;\n value: string;\n setValue: (value: string) => void;\n hasError: boolean;\n disabled: boolean;\n readOnly: boolean;\n required: boolean;\n rows: number;\n resize: TextareaResize;\n isFocusVisible: boolean;\n focusProps: { onFocus: () => void; onBlur: () => void };\n unstyled: boolean;\n}\n\nconst TextareaContext = createContext<TextareaContextValue | null>(null);\n\nfunction useTextareaContext(): TextareaContextValue {\n const ctx = useContext(TextareaContext);\n if (!ctx) {\n throw new Error(\n '[Compa11y Textarea]: Textarea sub-components (Textarea.Label, Textarea.Field, etc.) must be used within <Textarea>.'\n );\n }\n return ctx;\n}\n\nexport { useTextareaContext, type TextareaContextValue };\n\n// =============================================================================\n// Sub-components (for compound mode)\n// =============================================================================\n\n/**\n * Textarea label sub-component\n */\nexport const TextareaLabel = forwardRef<HTMLLabelElement, TextareaLabelProps>(\n function TextareaLabel({ children, className }, ref) {\n const ctx = useTextareaContext();\n\n return (\n <label\n ref={ref}\n id={ctx.labelId}\n htmlFor={ctx.fieldId}\n data-compa11y-textarea-label=\"\"\n className={className}\n style={\n ctx.unstyled\n ? {}\n : {\n display: 'block',\n color: ctx.disabled\n ? 'var(--compa11y-textarea-disabled-color, #999)'\n : 'var(--compa11y-textarea-label-color, inherit)',\n fontSize: 'var(--compa11y-textarea-label-size, 0.875rem)',\n fontWeight:\n 'var(--compa11y-textarea-label-weight, 500)' as any,\n }\n }\n >\n {children}\n {ctx.required && (\n <span\n data-compa11y-textarea-required=\"\"\n aria-hidden=\"true\"\n style={\n ctx.unstyled\n ? {}\n : {\n color: 'var(--compa11y-textarea-required-color, #ef4444)',\n marginLeft: '0.125rem',\n }\n }\n >\n *\n </span>\n )}\n </label>\n );\n }\n);\n\nTextareaLabel.displayName = 'TextareaLabel';\n\n/**\n * Textarea field sub-component (the actual <textarea> element)\n */\nexport const TextareaField = forwardRef<\n HTMLTextAreaElement,\n TextareaFieldProps\n>(\n function TextareaField(\n {\n onFocus: providedOnFocus,\n onBlur: providedOnBlur,\n className,\n style,\n rows: rowsOverride,\n ...rest\n },\n ref\n ) {\n const ctx = useTextareaContext();\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const mergedRef = useCallback(\n (node: HTMLTextAreaElement | null) => {\n (\n textareaRef as React.MutableRefObject<HTMLTextAreaElement | null>\n ).current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (\n ref as React.MutableRefObject<HTMLTextAreaElement | null>\n ).current = node;\n }\n },\n [ref]\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n ctx.setValue(event.target.value);\n },\n [ctx.setValue]\n );\n\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLTextAreaElement>) => {\n ctx.focusProps.onFocus();\n providedOnFocus?.(event);\n },\n [ctx.focusProps, providedOnFocus]\n );\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLTextAreaElement>) => {\n ctx.focusProps.onBlur();\n providedOnBlur?.(event);\n },\n [ctx.focusProps, providedOnBlur]\n );\n\n // Build aria-describedby\n const describedByParts: string[] = [];\n describedByParts.push(ctx.hintId);\n if (ctx.hasError) {\n describedByParts.push(ctx.errorId);\n }\n\n return (\n <textarea\n ref={mergedRef}\n id={ctx.fieldId}\n rows={rowsOverride ?? ctx.rows}\n value={ctx.value}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={ctx.disabled}\n readOnly={ctx.readOnly}\n aria-describedby={describedByParts.join(' ') || undefined}\n aria-invalid={ctx.hasError ? 'true' : undefined}\n aria-required={ctx.required ? 'true' : undefined}\n data-compa11y-textarea-field=\"\"\n className={className}\n style={\n ctx.unstyled\n ? style\n : {\n width: '100%',\n padding: 'var(--compa11y-textarea-padding, 0.5rem 0.75rem)',\n border: ctx.hasError\n ? '1px solid var(--compa11y-textarea-border-error, #ef4444)'\n : 'var(--compa11y-textarea-border, 1px solid #ccc)',\n borderRadius: 'var(--compa11y-textarea-radius, 4px)',\n fontSize: 'var(--compa11y-textarea-font-size, 0.875rem)',\n fontFamily: 'inherit',\n lineHeight: '1.5',\n resize: ctx.resize,\n background: ctx.disabled\n ? 'var(--compa11y-textarea-disabled-bg, #f5f5f5)'\n : ctx.readOnly\n ? 'var(--compa11y-textarea-readonly-bg, #f9f9f9)'\n : 'var(--compa11y-textarea-bg, white)',\n color: 'inherit',\n cursor: ctx.disabled ? 'not-allowed' : undefined,\n opacity: ctx.disabled\n ? ('var(--compa11y-textarea-disabled-opacity, 0.7)' as any)\n : undefined,\n ...(ctx.isFocusVisible && !ctx.disabled\n ? {\n outline: ctx.hasError\n ? '2px solid var(--compa11y-textarea-border-error, #ef4444)'\n : '2px solid var(--compa11y-focus-color, #0066cc)',\n outlineOffset: '-1px',\n borderColor: ctx.hasError\n ? 'var(--compa11y-textarea-border-error, #ef4444)'\n : 'var(--compa11y-textarea-border-focus, #0066cc)',\n }\n : {}),\n ...style,\n }\n }\n {...rest}\n />\n );\n }\n);\n\nTextareaField.displayName = 'TextareaField';\n\n/**\n * Textarea hint sub-component\n */\nexport const TextareaHint = forwardRef<HTMLDivElement, TextareaHintProps>(\n function TextareaHint({ children, className }, ref) {\n const ctx = useTextareaContext();\n\n return (\n <div\n ref={ref}\n id={ctx.hintId}\n data-compa11y-textarea-hint=\"\"\n className={className}\n style={\n ctx.unstyled\n ? {}\n : {\n color: 'var(--compa11y-textarea-hint-color, #666)',\n fontSize: 'var(--compa11y-textarea-hint-size, 0.8125rem)',\n }\n }\n >\n {children}\n </div>\n );\n }\n);\n\nTextareaHint.displayName = 'TextareaHint';\n\n/**\n * Textarea error sub-component - only renders when children are truthy\n */\nexport const TextareaError = forwardRef<HTMLDivElement, TextareaErrorProps>(\n function TextareaError({ children, className }, ref) {\n const ctx = useTextareaContext();\n\n if (!children) return null;\n\n return (\n <div\n ref={ref}\n id={ctx.errorId}\n role=\"alert\"\n data-compa11y-textarea-error=\"\"\n className={className}\n style={\n ctx.unstyled\n ? {}\n : {\n color: 'var(--compa11y-textarea-error-color, #ef4444)',\n fontSize: 'var(--compa11y-textarea-error-size, 0.8125rem)',\n }\n }\n >\n {children}\n </div>\n );\n }\n);\n\nTextareaError.displayName = 'TextareaError';\n\n// =============================================================================\n// Root Textarea component\n// =============================================================================\n\n/**\n * Accessible Textarea component with label, hint, and error support.\n *\n * Supports two modes:\n * - **Props mode**: Pass `label`, `hint`, `error` as props for automatic layout\n * - **Compound mode**: Use `<Textarea.Label>`, `<Textarea.Field>`, etc. as children for custom layout\n */\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function Textarea(\n {\n value: controlledValue,\n defaultValue = '',\n onValueChange,\n rows = 3,\n resize = 'vertical',\n label,\n hint,\n error,\n required = false,\n disabled = false,\n readOnly = false,\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledBy,\n placeholder,\n name,\n autoComplete,\n maxLength,\n minLength,\n id: providedId,\n unstyled = false,\n className,\n onFocus: providedOnFocus,\n onBlur: providedOnBlur,\n children,\n },\n ref\n ) {\n const generatedId = useId('textarea');\n const baseId = providedId || generatedId;\n const fieldId = `${baseId}-field`;\n const labelId = `${baseId}-label`;\n const hintId = `${baseId}-hint`;\n const errorId = `${baseId}-error`;\n\n // Controlled / Uncontrolled\n const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);\n const isControlled = controlledValue !== undefined;\n const currentValue = isControlled ? controlledValue : uncontrolledValue;\n\n const setValue = useCallback(\n (newValue: string) => {\n if (!isControlled) {\n setUncontrolledValue(newValue);\n }\n onValueChange?.(newValue);\n },\n [isControlled, onValueChange]\n );\n\n // Focus visible\n const { isFocusVisible, focusProps } = useFocusVisible();\n\n // Dev warnings\n useEffect(() => {\n if (process.env.NODE_ENV !== 'production') {\n const isCompound = Children.count(children) > 0;\n if (!isCompound && !label && !ariaLabel && !ariaLabelledBy) {\n console.warn(\n '[Compa11y Textarea]: Textarea has no accessible label. Screen readers need this to identify the textarea. ' +\n 'Use label prop, aria-label, or aria-labelledby.'\n );\n }\n }\n }, [children, label, ariaLabel, ariaLabelledBy]);\n\n const hasError = Boolean(error);\n const isCompound = Children.count(children) > 0;\n\n const contextValue: TextareaContextValue = {\n fieldId,\n labelId,\n hintId,\n errorId,\n value: currentValue,\n setValue,\n hasError,\n disabled,\n readOnly,\n required,\n rows,\n resize,\n isFocusVisible,\n focusProps,\n unstyled,\n };\n\n // Data attributes for the wrapper\n const dataAttrs = {\n 'data-compa11y-textarea': '',\n 'data-error': hasError ? 'true' : 'false',\n 'data-disabled': disabled ? 'true' : 'false',\n 'data-required': required ? 'true' : 'false',\n 'data-readonly': readOnly ? 'true' : 'false',\n };\n\n const wrapperStyle = unstyled\n ? {}\n : {\n display: 'flex',\n flexDirection: 'column' as const,\n gap: '0.25rem',\n };\n\n // ----- Compound mode -----\n if (isCompound) {\n return (\n <TextareaContext.Provider value={contextValue}>\n <div {...dataAttrs} className={className} style={wrapperStyle}>\n {children}\n </div>\n </TextareaContext.Provider>\n );\n }\n\n // ----- Props mode -----\n const textareaRef = useRef<HTMLTextAreaElement>(null);\n\n const mergedRef = useCallback(\n (node: HTMLTextAreaElement | null) => {\n (\n textareaRef as React.MutableRefObject<HTMLTextAreaElement | null>\n ).current = node;\n if (typeof ref === 'function') {\n ref(node);\n } else if (ref) {\n (\n ref as React.MutableRefObject<HTMLTextAreaElement | null>\n ).current = node;\n }\n },\n [ref]\n );\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLTextAreaElement>) => {\n setValue(event.target.value);\n },\n [setValue]\n );\n\n const handleFocus = useCallback(\n (event: React.FocusEvent<HTMLTextAreaElement>) => {\n focusProps.onFocus();\n providedOnFocus?.(event);\n },\n [focusProps, providedOnFocus]\n );\n\n const handleBlur = useCallback(\n (event: React.FocusEvent<HTMLTextAreaElement>) => {\n focusProps.onBlur();\n providedOnBlur?.(event);\n },\n [focusProps, providedOnBlur]\n );\n\n // Build aria-describedby\n const describedByParts: string[] = [];\n if (hint) describedByParts.push(hintId);\n if (hasError) describedByParts.push(errorId);\n const ariaDescribedBy =\n describedByParts.length > 0 ? describedByParts.join(' ') : undefined;\n\n return (\n <div {...dataAttrs} className={className} style={wrapperStyle}>\n {/* Label */}\n {label && (\n <label\n id={labelId}\n htmlFor={fieldId}\n data-compa11y-textarea-label=\"\"\n style={\n unstyled\n ? {}\n : {\n display: 'block',\n color: disabled\n ? 'var(--compa11y-textarea-disabled-color, #999)'\n : 'var(--compa11y-textarea-label-color, inherit)',\n fontSize: 'var(--compa11y-textarea-label-size, 0.875rem)',\n fontWeight:\n 'var(--compa11y-textarea-label-weight, 500)' as any,\n }\n }\n >\n {label}\n {required && (\n <span\n data-compa11y-textarea-required=\"\"\n aria-hidden=\"true\"\n style={\n unstyled\n ? {}\n : {\n color:\n 'var(--compa11y-textarea-required-color, #ef4444)',\n marginLeft: '0.125rem',\n }\n }\n >\n *\n </span>\n )}\n </label>\n )}\n\n {/* Textarea field */}\n <textarea\n ref={mergedRef}\n id={fieldId}\n rows={rows}\n value={currentValue}\n onChange={handleChange}\n onFocus={handleFocus}\n onBlur={handleBlur}\n disabled={disabled}\n readOnly={readOnly}\n required={required}\n placeholder={placeholder}\n name={name}\n autoComplete={autoComplete}\n maxLength={maxLength}\n minLength={minLength}\n aria-label={!label ? ariaLabel : undefined}\n aria-labelledby={\n !label && ariaLabelledBy\n ? ariaLabelledBy\n : label\n ? labelId\n : undefined\n }\n aria-describedby={ariaDescribedBy}\n aria-invalid={hasError ? 'true' : undefined}\n aria-required={required ? 'true' : undefined}\n data-compa11y-textarea-field=\"\"\n style={\n unstyled\n ? {}\n : {\n width: '100%',\n padding: 'var(--compa11y-textarea-padding, 0.5rem 0.75rem)',\n border: hasError\n ? '1px solid var(--compa11y-textarea-border-error, #ef4444)'\n : 'var(--compa11y-textarea-border, 1px solid #ccc)',\n borderRadius: 'var(--compa11y-textarea-radius, 4px)',\n fontSize: 'var(--compa11y-textarea-font-size, 0.875rem)',\n fontFamily: 'inherit',\n lineHeight: '1.5',\n resize,\n background: disabled\n ? 'var(--compa11y-textarea-disabled-bg, #f5f5f5)'\n : readOnly\n ? 'var(--compa11y-textarea-readonly-bg, #f9f9f9)'\n : 'var(--compa11y-textarea-bg, white)',\n color: 'inherit',\n cursor: disabled ? 'not-allowed' : undefined,\n opacity: disabled\n ? ('var(--compa11y-textarea-disabled-opacity, 0.7)' as any)\n : undefined,\n ...(isFocusVisible && !disabled\n ? {\n outline: hasError\n ? '2px solid var(--compa11y-textarea-border-error, #ef4444)'\n : '2px solid var(--compa11y-focus-color, #0066cc)',\n outlineOffset: '-1px',\n borderColor: hasError\n ? 'var(--compa11y-textarea-border-error, #ef4444)'\n : 'var(--compa11y-textarea-border-focus, #0066cc)',\n }\n : {}),\n }\n }\n />\n\n {/* Hint */}\n {hint && (\n <div\n id={hintId}\n data-compa11y-textarea-hint=\"\"\n style={\n unstyled\n ? {}\n : {\n color: 'var(--compa11y-textarea-hint-color, #666)',\n fontSize: 'var(--compa11y-textarea-hint-size, 0.8125rem)',\n }\n }\n >\n {hint}\n </div>\n )}\n\n {/* Error */}\n {hasError && (\n <div\n id={errorId}\n role=\"alert\"\n data-compa11y-textarea-error=\"\"\n style={\n unstyled\n ? {}\n : {\n color: 'var(--compa11y-textarea-error-color, #ef4444)',\n fontSize:\n 'var(--compa11y-textarea-error-size, 0.8125rem)',\n }\n }\n >\n {error}\n </div>\n )}\n </div>\n );\n }\n);\n\nTextarea.displayName = 'Textarea';\n\n// =============================================================================\n// Compound export\n// =============================================================================\n\nexport const TextareaCompound = Object.assign(Textarea, {\n Label: TextareaLabel,\n Field: TextareaField,\n Hint: TextareaHint,\n Error: TextareaError,\n});\n"]}