@a13y/react 0.1.4 → 0.1.5

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-accessible-button.ts","../src/components/AccessibleButton.tsx","../src/hooks/use-focus-trap.ts","../src/hooks/use-accessible-dialog.ts","../src/components/AccessibleDialog.tsx","../src/hooks/use-keyboard-navigation.ts","../src/components/AccessibleMenu.tsx","../src/components/AccessibleModal.tsx","../src/components/AccessibleTabs.tsx","../src/hooks/use-id.ts","../src/components/AccessibleTooltip.tsx","../src/components/AccessibleToggle.tsx","../src/components/AccessibleToast.tsx","../src/components/AccessibleAccordion.tsx","../src/components/AccessibleBreadcrumb.tsx","../src/components/AccessibleCheckboxGroup.tsx","../src/components/AccessibleRadioGroup.tsx","../src/hooks/use-aria-live.ts","../src/components/AccessibleProgress.tsx","../src/components/SkipLinks.tsx","../src/components/AccessiblePagination.tsx","../src/hooks/use-click-outside.ts","../src/components/AccessibleCombobox.tsx","../src/components/AccessibleDatePicker.tsx","../src/components/AccessibleTreeView.tsx","../src/components/AccessibleTable.tsx","../src/hooks/use-reduced-motion.ts","../src/hooks/use-announce.ts","../src/components/AccessibleCarousel.tsx","../src/components/AccessibleDrawer.tsx","../src/hooks/use-accessible-form.ts","../src/hooks/use-form-field.ts","../src/hooks/use-media-query.ts","../src/patterns/DialogStack.tsx","../src/patterns/InfiniteList.tsx","../src/patterns/NestedMenu.tsx","../src/patterns/VirtualizedList.tsx","../src/patterns/Wizard.tsx","../src/index.ts"],"names":["useRef","useEffect","jsx","useCallback","useState","jsxs","Fragment","useId","React","pages","days","allNodes","announce","isValid","createContext","useContext"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @a13y/react - useAccessibleButton\n * Type-safe button hook with keyboard support\n */\n\nimport type { AriaRole } from 'react';\nimport { useCallback, useEffect, useRef } from 'react';\n\n/**\n * Button press event (mouse or keyboard)\n */\nexport interface PressEvent {\n type: 'mouse' | 'keyboard';\n key?: string;\n}\n\n/**\n * Props for useAccessibleButton\n */\nexport interface UseAccessibleButtonProps {\n /**\n * Accessible label for the button\n * Required if button content is not text (e.g., icon-only)\n */\n label?: string;\n\n /**\n * Press handler - called on click or Enter/Space\n */\n onPress: (event: PressEvent) => void;\n\n /**\n * Whether the button is disabled\n */\n isDisabled?: boolean;\n\n /**\n * ARIA role override\n * @default 'button'\n */\n role?: Extract<AriaRole, 'button' | 'link'>;\n\n /**\n * Element type - only 'button' or 'a' allowed\n * @default 'button'\n */\n elementType?: 'button' | 'a';\n}\n\n/**\n * Button props returned by the hook\n */\nexport interface AccessibleButtonProps {\n role: AriaRole;\n tabIndex: number;\n 'aria-label'?: string;\n 'aria-disabled'?: boolean;\n disabled?: boolean;\n onPointerDown: (event: React.PointerEvent) => void;\n onKeyDown: (event: React.KeyboardEvent) => void;\n}\n\n/**\n * Return type\n */\nexport interface UseAccessibleButtonReturn {\n buttonProps: AccessibleButtonProps;\n isPressed: boolean;\n}\n\n/**\n * Hook for creating accessible buttons\n *\n * Features:\n * - Keyboard support (Enter, Space)\n * - Disabled state handling\n * - Automatic ARIA attributes\n * - Development-time validation\n *\n * @example\n * ```tsx\n * const { buttonProps } = useAccessibleButton({\n * label: 'Delete item',\n * onPress: () => console.log('Pressed!'),\n * });\n *\n * return <button {...buttonProps}>🗑️</button>;\n * ```\n */\nexport const useAccessibleButton = (props: UseAccessibleButtonProps): UseAccessibleButtonReturn => {\n const { label, onPress, isDisabled = false, role = 'button', elementType = 'button' } = props;\n\n const buttonRef = useRef<HTMLElement | null>(null);\n const isPressedRef = useRef(false);\n\n // Development-time validation\n useEffect(() => {\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n import('@a13y/devtools/runtime/invariants').then(\n ({ assertHasAccessibleName, assertKeyboardAccessible }) => {\n if (buttonRef.current) {\n // Validate accessible name\n assertHasAccessibleName(buttonRef.current, 'useAccessibleButton');\n\n // Validate keyboard accessibility\n assertKeyboardAccessible(buttonRef.current, 'useAccessibleButton');\n }\n }\n );\n }\n }, []);\n\n const handlePress = useCallback(\n (event: PressEvent) => {\n if (isDisabled) {\n return;\n }\n onPress(event);\n },\n [onPress, isDisabled]\n );\n\n const handlePointerDown = useCallback(\n (event: React.PointerEvent) => {\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n\n isPressedRef.current = true;\n handlePress({ type: 'mouse' });\n },\n [handlePress, isDisabled]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (isDisabled) {\n return;\n }\n\n // Enter or Space activates button\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handlePress({ type: 'keyboard', key: event.key });\n }\n },\n [handlePress, isDisabled]\n );\n\n const buttonProps: AccessibleButtonProps = {\n role,\n tabIndex: isDisabled ? -1 : 0,\n 'aria-label': label,\n 'aria-disabled': isDisabled ? true : undefined,\n disabled: elementType === 'button' ? isDisabled : undefined,\n onPointerDown: handlePointerDown,\n onKeyDown: handleKeyDown,\n };\n\n return {\n buttonProps,\n isPressed: isPressedRef.current,\n };\n};\n","/**\n * @a13y/react - AccessibleButton Component\n * Type-safe button component with enforced accessible name\n */\n\nimport type { ReactNode } from 'react';\nimport { useAccessibleButton } from '../hooks/use-accessible-button';\n\n/**\n * Button variants\n */\nexport type ButtonVariant = 'primary' | 'secondary' | 'danger' | 'ghost';\n\n/**\n * Props for AccessibleButton\n */\nexport interface AccessibleButtonProps {\n /**\n * Button content\n * If content is not text (e.g., icon only), label is REQUIRED\n */\n children: ReactNode;\n\n /**\n * Accessible label\n * REQUIRED if children is not text (e.g., icon-only button)\n */\n label?: string;\n\n /**\n * Click handler\n */\n onPress: (event: import('../hooks/use-accessible-button').PressEvent) => void;\n\n /**\n * Whether button is disabled\n */\n disabled?: boolean;\n\n /**\n * Visual variant (does not affect accessibility)\n */\n variant?: ButtonVariant;\n\n /**\n * Custom className\n */\n className?: string;\n\n /**\n * Button type\n */\n type?: 'button' | 'submit' | 'reset';\n}\n\n/**\n * Accessible Button Component\n *\n * Features:\n * - Automatic keyboard support (Enter, Space)\n * - Required accessible name (compile-time + runtime)\n * - Disabled state handling\n * - Development-time validation\n *\n * @example\n * ```tsx\n * // Text button (label optional)\n * <AccessibleButton onPress={() => console.log('Clicked')}>\n * Save\n * </AccessibleButton>\n *\n * // Icon button (label REQUIRED)\n * <AccessibleButton\n * label=\"Delete item\"\n * onPress={() => console.log('Deleted')}\n * >\n * 🗑️\n * </AccessibleButton>\n * ```\n */\nexport const AccessibleButton = (props: AccessibleButtonProps) => {\n const {\n children,\n label,\n onPress,\n disabled = false,\n variant = 'primary',\n className = '',\n type = 'button',\n } = props;\n\n const { buttonProps } = useAccessibleButton({\n label,\n onPress,\n isDisabled: disabled,\n });\n\n // Base styles (minimal, no framework dependency)\n const baseStyles =\n 'inline-flex items-center justify-center font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed';\n\n // Variant styles\n const variantStyles: Record<ButtonVariant, string> = {\n primary: 'bg-blue-600 text-white hover:bg-blue-700 focus-visible:outline-blue-600',\n secondary: 'bg-gray-200 text-gray-900 hover:bg-gray-300 focus-visible:outline-gray-500',\n danger: 'bg-red-600 text-white hover:bg-red-700 focus-visible:outline-red-600',\n ghost: 'bg-transparent text-gray-700 hover:bg-gray-100 focus-visible:outline-gray-500',\n };\n\n const combinedClassName = `${baseStyles} ${variantStyles[variant]} ${className}`.trim();\n\n return (\n <button\n {...buttonProps}\n type={type}\n className={combinedClassName}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '0.375rem',\n border: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n {children}\n </button>\n );\n};\n","/**\n * @a13y/react - useFocusTrap\n * Focus trap hook for modals and dialogs\n */\n\nimport type { FocusTrap } from '@a13y/core/runtime/focus';\nimport { useEffect, useRef } from 'react';\n\n/**\n * Props for useFocusTrap\n */\nexport interface UseFocusTrapProps {\n /**\n * Whether the focus trap is active\n */\n isActive: boolean;\n\n /**\n * Callback when Escape key is pressed\n */\n onEscape?: () => void;\n\n /**\n * Whether to restore focus when trap is deactivated\n * @default true\n */\n restoreFocus?: boolean;\n\n /**\n * Whether to auto-focus first element when activated\n * @default true\n */\n autoFocus?: boolean;\n}\n\n/**\n * Return type\n */\nexport interface UseFocusTrapReturn {\n /**\n * Ref to attach to the container element\n */\n trapRef: React.RefObject<HTMLElement | null>;\n}\n\n/**\n * Hook for creating focus traps\n *\n * Features:\n * - Traps Tab/Shift+Tab within container\n * - Handles Escape key\n * - Restores focus on deactivation\n * - Auto-focuses first element\n * - Development-time validation\n *\n * @example\n * ```tsx\n * const { trapRef } = useFocusTrap({\n * isActive: isOpen,\n * onEscape: () => setIsOpen(false),\n * });\n *\n * return (\n * <div ref={trapRef} role=\"dialog\">\n * <button>Close</button>\n * </div>\n * );\n * ```\n */\nexport const useFocusTrap = (props: UseFocusTrapProps): UseFocusTrapReturn => {\n const { isActive, onEscape, restoreFocus = true, autoFocus = true } = props;\n\n const trapRef = useRef<HTMLElement>(null);\n const focusTrapRef = useRef<FocusTrap | null>(null);\n const previousFocusRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (!isActive || !trapRef.current) {\n return;\n }\n\n // Save previous focus\n if (restoreFocus) {\n previousFocusRef.current = document.activeElement as HTMLElement;\n }\n\n // Create focus trap\n import('@a13y/core/runtime/focus').then(({ createFocusTrap }) => {\n if (!trapRef.current) {\n return;\n }\n\n const options: import('@a13y/core/runtime/focus').FocusTrapOptions = {\n returnFocus: false,\n onEscape: onEscape,\n };\n\n // Only set initialFocus if autoFocus is enabled\n if (autoFocus) {\n // undefined means auto-focus first focusable element\n options.initialFocus = undefined;\n }\n\n const trap = createFocusTrap(trapRef.current, options);\n\n trap.activate();\n focusTrapRef.current = trap;\n\n // Development-time validation\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n import('@a13y/devtools/runtime/validators').then(({ focusValidator }) => {\n if (trapRef.current) {\n focusValidator.validateFocusTrap(trapRef.current, true);\n }\n });\n }\n });\n\n // Cleanup\n return () => {\n if (focusTrapRef.current) {\n focusTrapRef.current.deactivate();\n focusTrapRef.current = null;\n }\n\n // Restore focus\n if (restoreFocus && previousFocusRef.current) {\n previousFocusRef.current.focus();\n\n // Validate focus restoration in dev\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n import('@a13y/devtools/runtime/validators').then(({ focusValidator }) => {\n if (previousFocusRef.current) {\n focusValidator.expectFocusRestoration(\n previousFocusRef.current,\n 'focus trap deactivation'\n );\n }\n });\n }\n }\n };\n }, [isActive, onEscape, restoreFocus, autoFocus]);\n\n return {\n trapRef,\n };\n};\n","/**\n * @a13y/react - useAccessibleDialog\n * Type-safe dialog/modal hook with full ARIA support\n */\n\nimport type { AriaRole } from 'react';\nimport { useEffect, useId, useRef } from 'react';\nimport { useFocusTrap } from './use-focus-trap';\n\n/**\n * Props for useAccessibleDialog\n */\nexport interface UseAccessibleDialogProps {\n /**\n * Whether the dialog is open\n */\n isOpen: boolean;\n\n /**\n * Callback when dialog should close\n * Called on Escape key or backdrop click\n */\n onClose: () => void;\n\n /**\n * Dialog title - REQUIRED for accessibility\n * This becomes the aria-labelledby target\n */\n title: string;\n\n /**\n * Optional dialog description\n * This becomes the aria-describedby target\n */\n description?: string;\n\n /**\n * ARIA role\n * @default 'dialog'\n */\n role?: Extract<AriaRole, 'dialog' | 'alertdialog'>;\n\n /**\n * Whether dialog is modal (blocking)\n * @default true\n */\n isModal?: boolean;\n\n /**\n * Whether clicking backdrop closes dialog\n * @default true\n */\n closeOnBackdropClick?: boolean;\n}\n\n/**\n * Dialog container props\n */\nexport interface DialogContainerProps {\n ref: React.RefObject<HTMLElement | null>;\n role: AriaRole;\n 'aria-labelledby': string;\n 'aria-describedby'?: string;\n 'aria-modal': boolean;\n tabIndex: -1;\n}\n\n/**\n * Title props\n */\nexport interface DialogTitleProps {\n id: string;\n}\n\n/**\n * Description props\n */\nexport interface DialogDescriptionProps {\n id: string;\n}\n\n/**\n * Backdrop props\n */\nexport interface DialogBackdropProps {\n onClick: () => void;\n 'aria-hidden': true;\n}\n\n/**\n * Return type\n */\nexport interface UseAccessibleDialogReturn {\n dialogProps: DialogContainerProps;\n titleProps: DialogTitleProps;\n descriptionProps: DialogDescriptionProps | null;\n backdropProps: DialogBackdropProps | null;\n close: () => void;\n}\n\n/**\n * Hook for creating accessible dialogs/modals\n *\n * Features:\n * - Focus trap with Tab/Shift+Tab cycling\n * - Escape key to close\n * - Focus restoration on close\n * - ARIA attributes (modal, labelledby, describedby)\n * - Backdrop click handling\n * - Development-time validation\n *\n * @example\n * ```tsx\n * const { dialogProps, titleProps, descriptionProps, backdropProps } =\n * useAccessibleDialog({\n * isOpen,\n * onClose: () => setIsOpen(false),\n * title: 'Delete Item',\n * description: 'This action cannot be undone',\n * });\n *\n * if (!isOpen) return null;\n *\n * return (\n * <>\n * <div {...backdropProps} />\n * <div {...dialogProps}>\n * <h2 {...titleProps}>Delete Item</h2>\n * <p {...descriptionProps}>This action cannot be undone</p>\n * <button onClick={close}>Cancel</button>\n * </div>\n * </>\n * );\n * ```\n */\nexport const useAccessibleDialog = (props: UseAccessibleDialogProps): UseAccessibleDialogReturn => {\n const {\n isOpen,\n onClose,\n title,\n description,\n role = 'dialog',\n isModal = true,\n closeOnBackdropClick = true,\n } = props;\n\n // Compile-time validation: title is required\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n if (!title || title.trim().length === 0) {\n throw new Error(\n '@a13y/react [useAccessibleDialog]: \"title\" prop is required for accessibility'\n );\n }\n }\n\n const dialogRef = useRef<HTMLElement>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n // Focus trap\n const { trapRef } = useFocusTrap({\n isActive: isOpen,\n onEscape: onClose,\n restoreFocus: true,\n autoFocus: true,\n });\n\n // Sync refs (trapRef and dialogRef point to same element)\n useEffect(() => {\n if (dialogRef.current && trapRef.current !== dialogRef.current) {\n (trapRef as React.MutableRefObject<HTMLElement | null>).current = dialogRef.current;\n }\n }, [trapRef]);\n\n // Body scroll lock when modal is open\n useEffect(() => {\n if (!isOpen || !isModal) {\n return;\n }\n\n const originalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = originalOverflow;\n };\n }, [isOpen, isModal]);\n\n // Development-time validation\n useEffect(() => {\n if (typeof __DEV__ !== 'undefined' && __DEV__ && isOpen) {\n import('@a13y/devtools/runtime/invariants').then(\n ({ assertHasAccessibleName, assertValidAriaAttributes }) => {\n if (dialogRef.current) {\n assertHasAccessibleName(dialogRef.current, 'useAccessibleDialog');\n assertValidAriaAttributes(dialogRef.current);\n }\n }\n );\n }\n }, [isOpen]);\n\n const dialogProps: DialogContainerProps = {\n ref: dialogRef,\n role,\n 'aria-labelledby': titleId,\n 'aria-describedby': description ? descriptionId : undefined,\n 'aria-modal': isModal,\n tabIndex: -1,\n };\n\n const titleProps: DialogTitleProps = {\n id: titleId,\n };\n\n const descriptionProps: DialogDescriptionProps | null = description\n ? { id: descriptionId }\n : null;\n\n const backdropProps: DialogBackdropProps | null =\n closeOnBackdropClick && isModal\n ? {\n onClick: onClose,\n 'aria-hidden': true,\n }\n : null;\n\n return {\n dialogProps,\n titleProps,\n descriptionProps,\n backdropProps,\n close: onClose,\n };\n};\n","/**\n * @a13y/react - AccessibleDialog Component\n * Type-safe dialog component with enforced title\n */\n\nimport type { ReactNode } from 'react';\nimport { useAccessibleDialog } from '../hooks/use-accessible-dialog';\n\n/**\n * Props for AccessibleDialog\n */\nexport interface AccessibleDialogProps {\n /**\n * Whether dialog is open\n */\n isOpen: boolean;\n\n /**\n * Called when dialog should close\n */\n onClose: () => void;\n\n /**\n * Dialog title - REQUIRED for accessibility\n * This will be announced to screen readers\n */\n title: string;\n\n /**\n * Dialog content\n */\n children: ReactNode;\n\n /**\n * Optional description\n * Provides additional context to screen readers\n */\n description?: string;\n\n /**\n * ARIA role\n */\n role?: 'dialog' | 'alertdialog';\n\n /**\n * Whether to show close button\n */\n showCloseButton?: boolean;\n\n /**\n * Custom className for dialog container\n */\n className?: string;\n\n /**\n * Custom className for backdrop\n */\n backdropClassName?: string;\n}\n\n/**\n * Accessible Dialog Component\n *\n * Features:\n * - Focus trap with Tab/Shift+Tab cycling\n * - Escape key to close\n * - Focus restoration on close\n * - Click outside to close\n * - Required title for screen readers\n * - Body scroll lock when open\n *\n * @example\n * ```tsx\n * <AccessibleDialog\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Confirm Action\"\n * description=\"This action cannot be undone\"\n * >\n * <p>Are you sure you want to delete this item?</p>\n * <button onClick={handleConfirm}>Confirm</button>\n * <button onClick={() => setIsOpen(false)}>Cancel</button>\n * </AccessibleDialog>\n * ```\n */\nexport const AccessibleDialog = (props: AccessibleDialogProps) => {\n const {\n isOpen,\n onClose,\n title,\n children,\n description,\n role = 'dialog',\n showCloseButton = true,\n className = '',\n backdropClassName = '',\n } = props;\n\n const { dialogProps, titleProps, descriptionProps, backdropProps, close } = useAccessibleDialog({\n isOpen,\n onClose,\n title,\n description,\n role,\n isModal: true,\n closeOnBackdropClick: true,\n });\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <>\n {/* Backdrop */}\n {backdropProps && (\n <div\n {...backdropProps}\n className={backdropClassName}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 50,\n }}\n />\n )}\n\n {/* Dialog */}\n <div\n ref={dialogProps.ref as React.RefObject<HTMLDivElement>}\n role={dialogProps.role}\n aria-labelledby={dialogProps['aria-labelledby']}\n aria-describedby={dialogProps['aria-describedby']}\n aria-modal={dialogProps['aria-modal']}\n tabIndex={dialogProps.tabIndex}\n className={className}\n style={{\n position: 'fixed',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n backgroundColor: 'white',\n borderRadius: '0.5rem',\n boxShadow: '0 20px 25px -5px rgba(0, 0, 0, 0.1)',\n padding: '1.5rem',\n maxWidth: '32rem',\n width: '90vw',\n maxHeight: '90vh',\n overflow: 'auto',\n zIndex: 51,\n }}\n >\n {/* Close button */}\n {showCloseButton && (\n <button\n type=\"button\"\n onClick={close}\n aria-label=\"Close dialog\"\n style={{\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n padding: '0.5rem',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n fontSize: '1.25rem',\n lineHeight: 1,\n color: '#6b7280',\n }}\n >\n ✕\n </button>\n )}\n\n {/* Title */}\n <h2\n {...titleProps}\n style={{\n fontSize: '1.25rem',\n fontWeight: 600,\n marginBottom: description ? '0.5rem' : '1rem',\n paddingRight: showCloseButton ? '2rem' : 0,\n }}\n >\n {title}\n </h2>\n\n {/* Description */}\n {descriptionProps && description && (\n <p\n {...descriptionProps}\n style={{\n fontSize: '0.875rem',\n color: '#6b7280',\n marginBottom: '1rem',\n }}\n >\n {description}\n </p>\n )}\n\n {/* Content */}\n <div>{children}</div>\n </div>\n </>\n );\n};\n","/**\n * @a13y/react - useKeyboardNavigation\n * Roving tabindex keyboard navigation hook\n */\n\nimport type { NavigationDirection } from '@a13y/core/runtime/keyboard';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\n/**\n * Navigation orientation\n */\nexport type Orientation = 'horizontal' | 'vertical' | 'both';\n\n/**\n * Props for useKeyboardNavigation\n */\nexport interface UseKeyboardNavigationProps {\n /**\n * Navigation orientation\n * - 'horizontal': Arrow Left/Right\n * - 'vertical': Arrow Up/Down\n * - 'both': All arrow keys\n */\n orientation: Orientation;\n\n /**\n * Whether to loop at boundaries\n * @default false\n */\n loop?: boolean;\n\n /**\n * Callback when navigation occurs\n */\n onNavigate?: (index: number) => void;\n\n /**\n * Initial focused index\n * @default 0\n */\n defaultIndex?: number;\n\n /**\n * Controlled current index\n */\n currentIndex?: number;\n}\n\n/**\n * Item props for navigable items\n */\nexport interface NavigableItemProps {\n ref: (element: HTMLElement | null) => void;\n tabIndex: number;\n onKeyDown: (event: React.KeyboardEvent) => void;\n 'data-index': number;\n}\n\n/**\n * Return type\n */\nexport interface UseKeyboardNavigationReturn {\n /**\n * Current focused index\n */\n currentIndex: number;\n\n /**\n * Navigate to specific index\n */\n setCurrentIndex: (index: number) => void;\n\n /**\n * Get props for navigable item\n */\n getItemProps: (index: number) => NavigableItemProps;\n\n /**\n * Container props\n */\n containerProps: {\n role: 'toolbar' | 'listbox' | 'menu';\n 'aria-orientation': Orientation;\n };\n}\n\n/**\n * Hook for keyboard navigation with roving tabindex\n *\n * Features:\n * - Arrow key navigation\n * - Home/End navigation\n * - Roving tabindex pattern\n * - Automatic focus management\n * - Development-time validation\n *\n * @example\n * ```tsx\n * const { containerProps, getItemProps, currentIndex } =\n * useKeyboardNavigation({\n * orientation: 'horizontal',\n * loop: true,\n * });\n *\n * return (\n * <div {...containerProps}>\n * {items.map((item, index) => (\n * <button key={index} {...getItemProps(index)}>\n * {item.label}\n * </button>\n * ))}\n * </div>\n * );\n * ```\n */\nexport const useKeyboardNavigation = (\n props: UseKeyboardNavigationProps\n): UseKeyboardNavigationReturn => {\n const {\n orientation,\n loop = false,\n onNavigate,\n defaultIndex = 0,\n currentIndex: controlledIndex,\n } = props;\n\n const isControlled = controlledIndex !== undefined;\n const [uncontrolledIndex, setUncontrolledIndex] = useState(defaultIndex);\n const currentIndex = isControlled ? controlledIndex : uncontrolledIndex;\n\n const itemsRef = useRef<Map<number, HTMLElement>>(new Map());\n const containerRef = useRef<HTMLElement | null>(null);\n\n // Update current index\n const setCurrentIndex = useCallback(\n (index: number) => {\n if (!isControlled) {\n setUncontrolledIndex(index);\n }\n onNavigate?.(index);\n\n // Focus the element\n const element = itemsRef.current.get(index);\n if (element) {\n element.focus();\n }\n },\n [isControlled, onNavigate]\n );\n\n // Navigate in direction\n const navigate = useCallback(\n (direction: NavigationDirection) => {\n const itemCount = itemsRef.current.size;\n if (itemCount === 0) {\n return;\n }\n\n let nextIndex = currentIndex;\n\n switch (direction) {\n case 'forward':\n nextIndex = currentIndex + 1;\n if (nextIndex >= itemCount) {\n nextIndex = loop ? 0 : itemCount - 1;\n }\n break;\n\n case 'backward':\n nextIndex = currentIndex - 1;\n if (nextIndex < 0) {\n nextIndex = loop ? itemCount - 1 : 0;\n }\n break;\n\n case 'first':\n nextIndex = 0;\n break;\n\n case 'last':\n nextIndex = itemCount - 1;\n break;\n }\n\n if (nextIndex !== currentIndex) {\n setCurrentIndex(nextIndex);\n }\n },\n [currentIndex, loop, setCurrentIndex]\n );\n\n // Handle keyboard events\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n const { key } = event;\n\n let direction: NavigationDirection | null = null;\n\n // Arrow keys\n if (key === 'ArrowRight') {\n if (orientation === 'horizontal' || orientation === 'both') {\n direction = 'forward';\n }\n } else if (key === 'ArrowLeft') {\n if (orientation === 'horizontal' || orientation === 'both') {\n direction = 'backward';\n }\n } else if (key === 'ArrowDown') {\n if (orientation === 'vertical' || orientation === 'both') {\n direction = 'forward';\n }\n } else if (key === 'ArrowUp') {\n if (orientation === 'vertical' || orientation === 'both') {\n direction = 'backward';\n }\n }\n\n // Home/End\n else if (key === 'Home') {\n direction = 'first';\n } else if (key === 'End') {\n direction = 'last';\n }\n\n if (direction) {\n event.preventDefault();\n navigate(direction);\n }\n },\n [orientation, navigate]\n );\n\n // Get props for individual item\n const getItemProps = useCallback(\n (index: number): NavigableItemProps => {\n return {\n ref: (element: HTMLElement | null) => {\n if (element) {\n itemsRef.current.set(index, element);\n } else {\n itemsRef.current.delete(index);\n }\n },\n tabIndex: index === currentIndex ? 0 : -1,\n onKeyDown: handleKeyDown,\n 'data-index': index,\n };\n },\n [currentIndex, handleKeyDown]\n );\n\n // Development-time validation\n useEffect(() => {\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n import('@a13y/devtools/runtime/validators').then(({ keyboardValidator }) => {\n // Validate container\n if (containerRef.current) {\n keyboardValidator.validateContainer(containerRef.current);\n }\n\n // Validate roving tabindex\n const container = Array.from(itemsRef.current.values())[0]?.parentElement;\n if (container) {\n keyboardValidator.validateRovingTabindex(container);\n }\n });\n }\n }, []);\n\n const containerProps = {\n role: 'toolbar' as const,\n 'aria-orientation': orientation,\n };\n\n return {\n currentIndex,\n setCurrentIndex,\n getItemProps,\n containerProps,\n };\n};\n","/**\n * @a13y/react - AccessibleMenu Component\n * Dropdown menu with keyboard navigation\n */\n\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\nimport { useAccessibleButton } from '../hooks/use-accessible-button';\nimport { useFocusTrap } from '../hooks/use-focus-trap';\nimport { useKeyboardNavigation } from '../hooks/use-keyboard-navigation';\n\n/**\n * Menu item definition\n */\nexport interface MenuItem {\n /**\n * Unique identifier\n */\n id: string;\n\n /**\n * Item label\n */\n label: string;\n\n /**\n * Click handler\n */\n onPress: () => void;\n\n /**\n * Whether item is disabled\n */\n disabled?: boolean;\n\n /**\n * Optional icon\n */\n icon?: ReactNode;\n}\n\n/**\n * Props for AccessibleMenu\n */\nexport interface AccessibleMenuProps {\n /**\n * Menu trigger button label\n */\n label: string;\n\n /**\n * Trigger button content\n */\n trigger: ReactNode;\n\n /**\n * Menu items\n */\n items: MenuItem[];\n\n /**\n * Custom className for trigger button\n */\n className?: string;\n\n /**\n * Custom className for menu container\n */\n menuClassName?: string;\n}\n\n/**\n * Accessible Menu Component\n *\n * Dropdown menu with full keyboard navigation:\n * - Arrow Up/Down to navigate items\n * - Enter/Space to select\n * - Escape to close\n * - Focus trap when open\n *\n * @example\n * ```tsx\n * <AccessibleMenu\n * label=\"Open actions menu\"\n * trigger=\"Actions ▼\"\n * items={[\n * { id: 'edit', label: 'Edit', onPress: () => console.log('Edit') },\n * { id: 'delete', label: 'Delete', onPress: () => console.log('Delete'), disabled: true },\n * { id: 'share', label: 'Share', onPress: () => console.log('Share') },\n * ]}\n * />\n * ```\n */\nexport const AccessibleMenu = (props: AccessibleMenuProps) => {\n const { label, trigger, items, className = '', menuClassName = '' } = props;\n\n const [isOpen, setIsOpen] = useState(false);\n\n // Trigger button\n const { buttonProps: triggerProps } = useAccessibleButton({\n label,\n onPress: () => setIsOpen(!isOpen),\n });\n\n // Focus trap for menu\n const { trapRef } = useFocusTrap({\n isActive: isOpen,\n onEscape: () => setIsOpen(false),\n restoreFocus: true,\n });\n\n // Keyboard navigation for menu items\n const { getItemProps } = useKeyboardNavigation({\n orientation: 'vertical',\n loop: true,\n });\n\n const handleItemPress = (item: MenuItem) => {\n if (item.disabled) {\n return;\n }\n item.onPress();\n setIsOpen(false);\n };\n\n return (\n <div style={{ position: 'relative', display: 'inline-block' }}>\n {/* Trigger */}\n <button\n {...triggerProps}\n className={className}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n style={{\n padding: '0.5rem 1rem',\n border: '1px solid #d1d5db',\n borderRadius: '0.375rem',\n backgroundColor: 'white',\n cursor: 'pointer',\n fontSize: '0.875rem',\n fontWeight: 500,\n }}\n >\n {trigger}\n </button>\n\n {/* Menu */}\n {isOpen && (\n <div\n ref={trapRef as React.RefObject<HTMLDivElement>}\n role=\"menu\"\n aria-orientation=\"vertical\"\n className={menuClassName}\n style={{\n position: 'absolute',\n top: 'calc(100% + 0.25rem)',\n left: 0,\n minWidth: '12rem',\n backgroundColor: 'white',\n border: '1px solid #e5e7eb',\n borderRadius: '0.375rem',\n boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1)',\n padding: '0.25rem',\n zIndex: 50,\n }}\n >\n {items.map((item, index) => {\n const itemProps = getItemProps(index);\n\n return (\n <button\n key={item.id}\n {...itemProps}\n role=\"menuitem\"\n disabled={item.disabled}\n onClick={() => handleItemPress(item)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n width: '100%',\n padding: '0.5rem 0.75rem',\n border: 'none',\n background: 'transparent',\n textAlign: 'left',\n fontSize: '0.875rem',\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n borderRadius: '0.25rem',\n color: item.disabled ? '#9ca3af' : '#111827',\n opacity: item.disabled ? 0.5 : 1,\n }}\n onMouseEnter={(e) => {\n if (!item.disabled) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n {item.icon && <span>{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","/**\n * @a13y/react - AccessibleModal Component\n * Full-screen modal with header, body, footer sections\n */\n\nimport type { ReactNode } from 'react';\nimport { useAccessibleDialog } from '../hooks/use-accessible-dialog';\n\n/**\n * Props for AccessibleModal\n */\nexport interface AccessibleModalProps {\n /**\n * Whether modal is open\n */\n isOpen: boolean;\n\n /**\n * Called when modal should close\n */\n onClose: () => void;\n\n /**\n * Modal title - REQUIRED\n */\n title: string;\n\n /**\n * Modal body content\n */\n children: ReactNode;\n\n /**\n * Footer content (typically action buttons)\n */\n footer?: ReactNode;\n\n /**\n * Modal size\n */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n /**\n * Whether modal can be closed by clicking outside\n */\n closeOnBackdropClick?: boolean;\n\n /**\n * Custom className for modal container\n */\n className?: string;\n}\n\n/**\n * Accessible Modal Component\n *\n * Full-featured modal with header, body, and footer sections.\n *\n * @example\n * ```tsx\n * <AccessibleModal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Edit Profile\"\n * size=\"md\"\n * footer={\n * <>\n * <AccessibleButton onPress={() => setIsOpen(false)}>\n * Cancel\n * </AccessibleButton>\n * <AccessibleButton onPress={handleSave} variant=\"primary\">\n * Save Changes\n * </AccessibleButton>\n * </>\n * }\n * >\n * <form>\n * <input type=\"text\" placeholder=\"Name\" />\n * <input type=\"email\" placeholder=\"Email\" />\n * </form>\n * </AccessibleModal>\n * ```\n */\nexport const AccessibleModal = (props: AccessibleModalProps) => {\n const {\n isOpen,\n onClose,\n title,\n children,\n footer,\n size = 'md',\n closeOnBackdropClick = false,\n className = '',\n } = props;\n\n const { dialogProps, titleProps, backdropProps, close } = useAccessibleDialog({\n isOpen,\n onClose,\n title,\n role: 'dialog',\n isModal: true,\n closeOnBackdropClick,\n });\n\n if (!isOpen) {\n return null;\n }\n\n // Size variants\n const sizeStyles: Record<NonNullable<AccessibleModalProps['size']>, React.CSSProperties> = {\n sm: { maxWidth: '24rem' },\n md: { maxWidth: '32rem' },\n lg: { maxWidth: '48rem' },\n xl: { maxWidth: '64rem' },\n full: { maxWidth: '95vw', maxHeight: '95vh' },\n };\n\n return (\n <>\n {/* Backdrop */}\n {backdropProps && (\n <div\n {...backdropProps}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 50,\n }}\n />\n )}\n\n {/* Modal */}\n <div\n ref={dialogProps.ref as React.RefObject<HTMLDivElement>}\n role={dialogProps.role}\n aria-labelledby={dialogProps['aria-labelledby']}\n aria-describedby={dialogProps['aria-describedby']}\n aria-modal={dialogProps['aria-modal']}\n tabIndex={dialogProps.tabIndex}\n className={className}\n style={{\n position: 'fixed',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n backgroundColor: 'white',\n borderRadius: '0.5rem',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n width: '90vw',\n maxHeight: '90vh',\n display: 'flex',\n flexDirection: 'column',\n zIndex: 51,\n ...sizeStyles[size],\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '1.5rem',\n borderBottom: '1px solid #e5e7eb',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h2\n {...titleProps}\n style={{\n fontSize: '1.25rem',\n fontWeight: 600,\n margin: 0,\n }}\n >\n {title}\n </h2>\n\n <button\n type=\"button\"\n onClick={close}\n aria-label=\"Close modal\"\n style={{\n padding: '0.5rem',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n fontSize: '1.25rem',\n lineHeight: 1,\n color: '#6b7280',\n borderRadius: '0.25rem',\n }}\n >\n ✕\n </button>\n </div>\n\n {/* Body */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '1.5rem',\n }}\n >\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div\n style={{\n padding: '1.5rem',\n borderTop: '1px solid #e5e7eb',\n display: 'flex',\n gap: '0.75rem',\n justifyContent: 'flex-end',\n }}\n >\n {footer}\n </div>\n )}\n </div>\n </>\n );\n};\n","/**\n * @a13y/react - AccessibleTabs Component\n * Tab interface with keyboard navigation\n */\n\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\nimport { useKeyboardNavigation } from '../hooks/use-keyboard-navigation';\n\n/**\n * Tab definition\n */\nexport interface Tab {\n /**\n * Unique identifier\n */\n id: string;\n\n /**\n * Tab label - REQUIRED for accessibility\n */\n label: string;\n\n /**\n * Tab panel content\n */\n content: ReactNode;\n\n /**\n * Whether tab is disabled\n */\n disabled?: boolean;\n\n /**\n * Optional icon\n */\n icon?: ReactNode;\n}\n\n/**\n * Props for AccessibleTabs\n */\nexport interface AccessibleTabsProps {\n /**\n * Tabs configuration - REQUIRED\n * Must have at least one tab\n */\n tabs: [Tab, ...Tab[]]; // Non-empty array\n\n /**\n * Initially selected tab index\n */\n defaultTab?: number;\n\n /**\n * Controlled selected tab index\n */\n selectedTab?: number;\n\n /**\n * Called when tab changes\n */\n onTabChange?: (index: number) => void;\n\n /**\n * Custom className for tabs container\n */\n className?: string;\n\n /**\n * Custom className for panel\n */\n panelClassName?: string;\n}\n\n/**\n * Accessible Tabs Component\n *\n * Tab interface following WAI-ARIA Tabs pattern:\n * - Arrow Left/Right to navigate tabs\n * - Home/End to jump to first/last\n * - Automatic panel switching\n * - Proper ARIA attributes\n *\n * @example\n * ```tsx\n * <AccessibleTabs\n * tabs={[\n * {\n * id: 'account',\n * label: 'Account',\n * content: <div>Account settings...</div>,\n * },\n * {\n * id: 'security',\n * label: 'Security',\n * content: <div>Security settings...</div>,\n * },\n * {\n * id: 'billing',\n * label: 'Billing',\n * content: <div>Billing information...</div>,\n * disabled: true,\n * },\n * ]}\n * />\n * ```\n */\nexport const AccessibleTabs = (props: AccessibleTabsProps) => {\n const {\n tabs,\n defaultTab = 0,\n selectedTab: controlledTab,\n onTabChange,\n className = '',\n panelClassName = '',\n } = props;\n\n const isControlled = controlledTab !== undefined;\n const [uncontrolledTab, setUncontrolledTab] = useState(defaultTab);\n const selectedIndex = isControlled ? controlledTab : uncontrolledTab;\n\n // Keyboard navigation\n const { getItemProps, setCurrentIndex } = useKeyboardNavigation({\n orientation: 'horizontal',\n loop: false,\n currentIndex: selectedIndex,\n onNavigate: (index) => {\n // Skip disabled tabs\n if (tabs[index]?.disabled) {\n return;\n }\n\n if (!isControlled) {\n setUncontrolledTab(index);\n }\n onTabChange?.(index);\n },\n });\n\n const handleTabClick = (index: number) => {\n if (tabs[index]?.disabled) {\n return;\n }\n\n setCurrentIndex(index);\n\n if (!isControlled) {\n setUncontrolledTab(index);\n }\n onTabChange?.(index);\n };\n\n const selectedTab = tabs[selectedIndex];\n\n return (\n <div className={className}>\n {/* Tab List */}\n <div\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n style={{\n display: 'flex',\n borderBottom: '2px solid #e5e7eb',\n gap: '0.25rem',\n }}\n >\n {tabs.map((tab, index) => {\n const itemProps = getItemProps(index);\n const isSelected = index === selectedIndex;\n\n return (\n <button\n key={tab.id}\n {...itemProps}\n id={`tab-${tab.id}`}\n role=\"tab\"\n aria-selected={isSelected}\n aria-controls={`panel-${tab.id}`}\n disabled={tab.disabled}\n onClick={() => handleTabClick(index)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.75rem 1rem',\n border: 'none',\n background: 'transparent',\n cursor: tab.disabled ? 'not-allowed' : 'pointer',\n fontSize: '0.875rem',\n fontWeight: isSelected ? 600 : 400,\n color: tab.disabled ? '#9ca3af' : isSelected ? '#2563eb' : '#6b7280',\n borderBottom: isSelected ? '2px solid #2563eb' : 'none',\n marginBottom: '-2px',\n opacity: tab.disabled ? 0.5 : 1,\n transition: 'color 0.2s',\n }}\n >\n {tab.icon && <span>{tab.icon}</span>}\n <span>{tab.label}</span>\n </button>\n );\n })}\n </div>\n\n {/* Tab Panel */}\n {selectedTab && (\n <div\n id={`panel-${selectedTab.id}`}\n role=\"tabpanel\"\n aria-labelledby={`tab-${selectedTab.id}`}\n className={panelClassName}\n style={{\n padding: '1.5rem',\n }}\n >\n {selectedTab.content}\n </div>\n )}\n </div>\n );\n};\n","/**\n * useId Hook\n * Generates unique IDs for accessibility attributes\n * Provides backward compatibility for React < 18\n */\n\nimport { useRef } from 'react';\n\nlet idCounter = 0;\n\n/**\n * Generates a unique ID for accessibility attributes\n * @param prefix - Optional prefix for the ID\n * @returns A unique ID string\n *\n * @example\n * ```tsx\n * const tooltipId = useId('tooltip');\n * // Returns: \"tooltip-1\"\n * ```\n */\nexport function useId(prefix = 'a13y'): string {\n const idRef = useRef<string | undefined>(undefined);\n\n if (!idRef.current) {\n idRef.current = `${prefix}-${++idCounter}`;\n }\n\n return idRef.current;\n}\n","/**\n * AccessibleTooltip Component\n * A fully accessible tooltip with proper ARIA attributes and keyboard support\n */\n\nimport React, { type ReactElement, cloneElement, useState, useRef, useEffect } from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface AccessibleTooltipProps {\n /** Content to display in the tooltip */\n content: string;\n /** Placement of the tooltip relative to the trigger */\n placement?: 'top' | 'bottom' | 'left' | 'right';\n /** Delay before showing the tooltip (in milliseconds) */\n delay?: number;\n /** Trigger method for showing the tooltip */\n trigger?: 'hover' | 'focus' | 'both';\n /** The element that triggers the tooltip */\n children: ReactElement;\n /** Optional className for the tooltip container */\n className?: string;\n /** Optional styles for the tooltip container */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible tooltip component that properly announces content to screen readers\n *\n * @example\n * ```tsx\n * <AccessibleTooltip content=\"This is helpful information\">\n * <button>Hover me</button>\n * </AccessibleTooltip>\n * ```\n */\nexport const AccessibleTooltip: React.FC<AccessibleTooltipProps> = ({\n content,\n placement = 'top',\n delay = 300,\n trigger = 'both',\n children,\n className = '',\n style = {},\n}) => {\n const tooltipId = useId('tooltip');\n const [isVisible, setIsVisible] = useState(false);\n const timeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n const triggerRef = useRef<HTMLElement>(null);\n\n const showTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n setIsVisible(true);\n }, delay);\n };\n\n const hideTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsVisible(false);\n };\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n // Handle ESC key to close tooltip\n useEffect(() => {\n if (!isVisible) return;\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n hideTooltip();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isVisible]);\n\n const shouldTriggerOnHover = trigger === 'hover' || trigger === 'both';\n const shouldTriggerOnFocus = trigger === 'focus' || trigger === 'both';\n\n const childProps: Record<string, unknown> = {\n ref: triggerRef,\n 'aria-describedby': isVisible ? tooltipId : undefined,\n };\n\n if (shouldTriggerOnHover) {\n childProps.onMouseEnter = () => showTooltip();\n childProps.onMouseLeave = () => hideTooltip();\n }\n\n if (shouldTriggerOnFocus) {\n childProps.onFocus = () => showTooltip();\n childProps.onBlur = () => hideTooltip();\n }\n\n const getTooltipPosition = (): React.CSSProperties => {\n const baseStyles: React.CSSProperties = {\n position: 'absolute',\n zIndex: 1000,\n padding: '8px 12px',\n backgroundColor: '#333',\n color: '#fff',\n borderRadius: '4px',\n fontSize: '14px',\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n };\n\n switch (placement) {\n case 'top':\n return { ...baseStyles, bottom: '100%', left: '50%', transform: 'translateX(-50%)', marginBottom: '8px' };\n case 'bottom':\n return { ...baseStyles, top: '100%', left: '50%', transform: 'translateX(-50%)', marginTop: '8px' };\n case 'left':\n return { ...baseStyles, right: '100%', top: '50%', transform: 'translateY(-50%)', marginRight: '8px' };\n case 'right':\n return { ...baseStyles, left: '100%', top: '50%', transform: 'translateY(-50%)', marginLeft: '8px' };\n default:\n return baseStyles;\n }\n };\n\n return (\n <span style={{ position: 'relative', display: 'inline-block' }}>\n {cloneElement(children, childProps)}\n {isVisible && (\n <span\n role=\"tooltip\"\n id={tooltipId}\n className={className}\n style={{ ...getTooltipPosition(), ...style }}\n >\n {content}\n </span>\n )}\n </span>\n );\n};\n","/**\n * AccessibleToggle Component\n * A fully accessible toggle/switch component with ARIA support\n */\n\nimport React from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface AccessibleToggleProps {\n /** Whether the toggle is checked */\n checked: boolean;\n /** Callback when the toggle state changes */\n onChange: (checked: boolean) => void;\n /** Label for the toggle */\n label: string;\n /** Optional description for additional context */\n description?: string;\n /** Whether the toggle is disabled */\n disabled?: boolean;\n /** Optional className for the container */\n className?: string;\n /** Optional className for the switch element */\n switchClassName?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible toggle/switch component with proper ARIA attributes\n *\n * @example\n * ```tsx\n * const [enabled, setEnabled] = useState(false);\n *\n * <AccessibleToggle\n * checked={enabled}\n * onChange={setEnabled}\n * label=\"Enable notifications\"\n * description=\"Receive email notifications for updates\"\n * />\n * ```\n */\nexport const AccessibleToggle: React.FC<AccessibleToggleProps> = ({\n checked,\n onChange,\n label,\n description,\n disabled = false,\n className = '',\n switchClassName = '',\n style = {},\n}) => {\n const toggleId = useId('toggle');\n const descriptionId = useId('toggle-description');\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n if (!disabled) {\n onChange(!checked);\n }\n }\n };\n\n const handleClick = () => {\n if (!disabled) {\n onChange(!checked);\n }\n };\n\n const containerStyles: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '12px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n ...style,\n };\n\n const switchStyles: React.CSSProperties = {\n position: 'relative',\n width: '44px',\n height: '24px',\n backgroundColor: checked ? '#007bff' : '#ccc',\n borderRadius: '12px',\n transition: 'background-color 0.2s',\n flexShrink: 0,\n };\n\n const thumbStyles: React.CSSProperties = {\n position: 'absolute',\n top: '2px',\n left: checked ? '22px' : '2px',\n width: '20px',\n height: '20px',\n backgroundColor: '#fff',\n borderRadius: '50%',\n transition: 'left 0.2s',\n };\n\n const labelStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n };\n\n const descriptionStyles: React.CSSProperties = {\n fontSize: '0.875rem',\n color: '#666',\n };\n\n return (\n <div\n className={className}\n style={containerStyles}\n onClick={handleClick}\n >\n <div\n role=\"switch\"\n aria-checked={checked}\n aria-labelledby={toggleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n className={switchClassName}\n style={switchStyles}\n >\n <div style={thumbStyles} />\n </div>\n <div style={labelStyles}>\n <label\n id={toggleId}\n htmlFor={toggleId}\n style={{ fontWeight: 500, cursor: disabled ? 'not-allowed' : 'pointer' }}\n >\n {label}\n </label>\n {description && (\n <span id={descriptionId} style={descriptionStyles}>\n {description}\n </span>\n )}\n </div>\n </div>\n );\n};\n","/**\n * AccessibleToast Component\n * Accessible toast notifications with proper ARIA live regions\n */\n\nimport React, { useEffect, useState } from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\nexport type ToastPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\n\nexport interface ToastAction {\n /** Label for the action button */\n label: string;\n /** Callback when action is clicked */\n onClick: () => void;\n}\n\nexport interface AccessibleToastProps {\n /** The message to display */\n message: string;\n /** Type of toast (affects styling and ARIA role) */\n type?: ToastType;\n /** Duration in milliseconds (0 = no auto-dismiss) */\n duration?: number;\n /** Position of the toast */\n position?: ToastPosition;\n /** Optional action button */\n action?: ToastAction;\n /** Whether the toast is visible */\n isOpen: boolean;\n /** Callback when toast is dismissed */\n onClose: () => void;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible toast notification component with ARIA live regions\n *\n * @example\n * ```tsx\n * const [showToast, setShowToast] = useState(false);\n *\n * <AccessibleToast\n * message=\"Item added to cart\"\n * type=\"success\"\n * duration={5000}\n * isOpen={showToast}\n * onClose={() => setShowToast(false)}\n * action={{\n * label: 'Undo',\n * onClick: () => removeItem()\n * }}\n * />\n * ```\n */\nexport const AccessibleToast: React.FC<AccessibleToastProps> = ({\n message,\n type = 'info',\n duration = 5000,\n position = 'top-right',\n action,\n isOpen,\n onClose,\n className = '',\n style = {},\n}) => {\n const toastId = useId('toast');\n const [isVisible, setIsVisible] = useState(isOpen);\n\n useEffect(() => {\n setIsVisible(isOpen);\n }, [isOpen]);\n\n useEffect(() => {\n if (!isVisible || duration === 0) return;\n\n const timer = setTimeout(() => {\n setIsVisible(false);\n onClose();\n }, duration);\n\n return () => clearTimeout(timer);\n }, [isVisible, duration, onClose]);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsVisible(false);\n onClose();\n }\n };\n\n if (!isVisible) return null;\n\n const getAriaRole = (): 'status' | 'alert' => {\n return type === 'error' ? 'alert' : 'status';\n };\n\n const getAriaPoliteness = (): 'polite' | 'assertive' => {\n return type === 'error' ? 'assertive' : 'polite';\n };\n\n const getPositionStyles = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n position: 'fixed',\n zIndex: 9999,\n };\n\n switch (position) {\n case 'top-right':\n return { ...base, top: '16px', right: '16px' };\n case 'top-left':\n return { ...base, top: '16px', left: '16px' };\n case 'bottom-right':\n return { ...base, bottom: '16px', right: '16px' };\n case 'bottom-left':\n return { ...base, bottom: '16px', left: '16px' };\n case 'top-center':\n return { ...base, top: '16px', left: '50%', transform: 'translateX(-50%)' };\n case 'bottom-center':\n return { ...base, bottom: '16px', left: '50%', transform: 'translateX(-50%)' };\n default:\n return base;\n }\n };\n\n const getTypeStyles = (): React.CSSProperties => {\n const baseTypeStyles: Record<ToastType, React.CSSProperties> = {\n success: { backgroundColor: '#10b981', color: '#fff' },\n error: { backgroundColor: '#ef4444', color: '#fff' },\n warning: { backgroundColor: '#f59e0b', color: '#fff' },\n info: { backgroundColor: '#3b82f6', color: '#fff' },\n };\n\n return baseTypeStyles[type];\n };\n\n const toastStyles: React.CSSProperties = {\n ...getPositionStyles(),\n ...getTypeStyles(),\n minWidth: '300px',\n maxWidth: '500px',\n padding: '16px',\n borderRadius: '8px',\n boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n animation: 'slideIn 0.3s ease-out',\n ...style,\n };\n\n const messageStyles: React.CSSProperties = {\n flex: 1,\n fontSize: '14px',\n lineHeight: '1.5',\n };\n\n const buttonStyles: React.CSSProperties = {\n background: 'transparent',\n border: '1px solid currentColor',\n color: 'inherit',\n padding: '4px 12px',\n borderRadius: '4px',\n fontSize: '14px',\n cursor: 'pointer',\n transition: 'opacity 0.2s',\n };\n\n const closeButtonStyles: React.CSSProperties = {\n ...buttonStyles,\n border: 'none',\n padding: '4px 8px',\n fontSize: '18px',\n lineHeight: '1',\n };\n\n return (\n <div\n id={toastId}\n role={getAriaRole()}\n aria-live={getAriaPoliteness()}\n aria-atomic=\"true\"\n className={className}\n style={toastStyles}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n >\n <div style={messageStyles}>{message}</div>\n {action && (\n <button\n type=\"button\"\n onClick={() => {\n action.onClick();\n setIsVisible(false);\n onClose();\n }}\n style={buttonStyles}\n onMouseEnter={(e) => (e.currentTarget.style.opacity = '0.8')}\n onMouseLeave={(e) => (e.currentTarget.style.opacity = '1')}\n >\n {action.label}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => {\n setIsVisible(false);\n onClose();\n }}\n aria-label=\"Close notification\"\n style={closeButtonStyles}\n onMouseEnter={(e) => (e.currentTarget.style.opacity = '0.8')}\n onMouseLeave={(e) => (e.currentTarget.style.opacity = '1')}\n >\n ×\n </button>\n </div>\n );\n};\n\n/**\n * ToastContainer component to manage multiple toasts\n */\nexport interface Toast {\n id: string;\n message: string;\n type?: ToastType;\n duration?: number;\n action?: ToastAction;\n}\n\nexport interface ToastContainerProps {\n /** Array of toasts to display */\n toasts: Toast[];\n /** Callback to remove a toast */\n onRemove: (id: string) => void;\n /** Position for all toasts */\n position?: ToastPosition;\n}\n\n/**\n * Container component to manage multiple toast notifications\n *\n * @example\n * ```tsx\n * const [toasts, setToasts] = useState<Toast[]>([]);\n *\n * const addToast = (message: string, type: ToastType) => {\n * const id = Date.now().toString();\n * setToasts(prev => [...prev, { id, message, type }]);\n * };\n *\n * const removeToast = (id: string) => {\n * setToasts(prev => prev.filter(t => t.id !== id));\n * };\n *\n * <ToastContainer toasts={toasts} onRemove={removeToast} />\n * ```\n */\nexport const ToastContainer: React.FC<ToastContainerProps> = ({\n toasts,\n onRemove,\n position = 'top-right',\n}) => {\n return (\n <>\n {toasts.map((toast) => (\n <AccessibleToast\n key={toast.id}\n message={toast.message}\n type={toast.type}\n duration={toast.duration}\n position={position}\n action={toast.action}\n isOpen={true}\n onClose={() => onRemove(toast.id)}\n />\n ))}\n </>\n );\n};\n","/**\n * AccessibleAccordion Component\n * Fully accessible accordion with ARIA attributes and keyboard navigation\n */\n\nimport React, { useState, type ReactNode } from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface AccordionItem {\n /** Unique identifier for the item */\n id: string;\n /** Title/header for the accordion item */\n title: string;\n /** Content to display when expanded */\n content: ReactNode;\n /** Whether this item is disabled */\n disabled?: boolean;\n}\n\nexport interface AccessibleAccordionProps {\n /** Array of accordion items */\n items: AccordionItem[];\n /** Allow multiple items to be open at once */\n allowMultiple?: boolean;\n /** IDs of items that should be open by default */\n defaultOpenItems?: string[];\n /** Callback when item is toggled */\n onToggle?: (itemId: string, isOpen: boolean) => void;\n /** Optional className for the container */\n className?: string;\n /** Optional className for each item */\n itemClassName?: string;\n /** Optional className for headers */\n headerClassName?: string;\n /** Optional className for content */\n contentClassName?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible accordion component with keyboard navigation\n *\n * @example\n * ```tsx\n * const items = [\n * {\n * id: '1',\n * title: 'What is accessibility?',\n * content: 'Accessibility ensures that people with disabilities can use your website.'\n * },\n * {\n * id: '2',\n * title: 'Why is it important?',\n * content: 'It makes your content available to everyone, regardless of ability.'\n * }\n * ];\n *\n * <AccessibleAccordion\n * items={items}\n * allowMultiple={false}\n * defaultOpenItems={['1']}\n * />\n * ```\n */\nexport const AccessibleAccordion: React.FC<AccessibleAccordionProps> = ({\n items,\n allowMultiple = false,\n defaultOpenItems = [],\n onToggle,\n className = '',\n itemClassName = '',\n headerClassName = '',\n contentClassName = '',\n style = {},\n}) => {\n const [openItems, setOpenItems] = useState<Set<string>>(\n new Set(defaultOpenItems)\n );\n\n const toggleItem = (itemId: string) => {\n setOpenItems((prev) => {\n const newOpenItems = new Set(prev);\n\n if (newOpenItems.has(itemId)) {\n newOpenItems.delete(itemId);\n onToggle?.(itemId, false);\n } else {\n if (!allowMultiple) {\n newOpenItems.clear();\n }\n newOpenItems.add(itemId);\n onToggle?.(itemId, true);\n }\n\n return newOpenItems;\n });\n };\n\n const handleKeyDown = (event: React.KeyboardEvent, itemId: string, index: number) => {\n const item = items.find((i) => i.id === itemId);\n if (item?.disabled) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n toggleItem(itemId);\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n focusNextItem(index);\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n focusPreviousItem(index);\n break;\n\n case 'Home':\n event.preventDefault();\n focusFirstItem();\n break;\n\n case 'End':\n event.preventDefault();\n focusLastItem();\n break;\n }\n };\n\n const focusNextItem = (currentIndex: number) => {\n const nextIndex = (currentIndex + 1) % items.length;\n focusItemByIndex(nextIndex);\n };\n\n const focusPreviousItem = (currentIndex: number) => {\n const prevIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1;\n focusItemByIndex(prevIndex);\n };\n\n const focusFirstItem = () => {\n focusItemByIndex(0);\n };\n\n const focusLastItem = () => {\n focusItemByIndex(items.length - 1);\n };\n\n const focusItemByIndex = (index: number) => {\n const button = document.querySelector(\n `[data-accordion-button][data-index=\"${index}\"]`\n ) as HTMLButtonElement;\n button?.focus();\n };\n\n const containerStyles: React.CSSProperties = {\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n overflow: 'hidden',\n ...style,\n };\n\n const itemStyles: React.CSSProperties = {\n borderBottom: '1px solid #e5e7eb',\n };\n\n const headerStyles: React.CSSProperties = {\n width: '100%',\n padding: '16px',\n backgroundColor: '#fff',\n border: 'none',\n textAlign: 'left',\n fontSize: '16px',\n fontWeight: 500,\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n transition: 'background-color 0.2s',\n };\n\n const contentStyles: React.CSSProperties = {\n padding: '16px',\n backgroundColor: '#f9fafb',\n };\n\n const iconStyles = (isOpen: boolean): React.CSSProperties => ({\n transition: 'transform 0.2s',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n });\n\n return (\n <div className={className} style={containerStyles}>\n {items.map((item, index) => {\n const isOpen = openItems.has(item.id);\n const buttonId = useId(`accordion-button-${item.id}`);\n const panelId = useId(`accordion-panel-${item.id}`);\n\n return (\n <div\n key={item.id}\n className={itemClassName}\n style={{ ...itemStyles, borderBottom: index === items.length - 1 ? 'none' : itemStyles.borderBottom }}\n >\n <h3 style={{ margin: 0 }}>\n <button\n id={buttonId}\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n aria-disabled={item.disabled}\n disabled={item.disabled}\n onClick={() => !item.disabled && toggleItem(item.id)}\n onKeyDown={(e) => handleKeyDown(e, item.id, index)}\n className={headerClassName}\n style={{\n ...headerStyles,\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n opacity: item.disabled ? 0.6 : 1,\n }}\n data-accordion-button\n data-index={index}\n onMouseEnter={(e) => !item.disabled && (e.currentTarget.style.backgroundColor = '#f9fafb')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = '#fff')}\n >\n <span>{item.title}</span>\n <span aria-hidden=\"true\" style={iconStyles(isOpen)}>\n ▼\n </span>\n </button>\n </h3>\n {isOpen && (\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={buttonId}\n className={contentClassName}\n style={contentStyles}\n >\n {item.content}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n","/**\n * AccessibleBreadcrumb Component\n * Accessible breadcrumb navigation with proper ARIA attributes\n */\n\nimport React, { type ReactNode } from 'react';\n\nexport interface BreadcrumbItem {\n /** Label to display */\n label: string;\n /** Optional href for link */\n href?: string;\n /** Optional click handler (alternative to href) */\n onClick?: () => void;\n}\n\nexport interface AccessibleBreadcrumbProps {\n /** Array of breadcrumb items */\n items: BreadcrumbItem[];\n /** Optional separator between items */\n separator?: ReactNode;\n /** Optional aria-label for the navigation */\n ariaLabel?: string;\n /** Optional className for the nav element */\n className?: string;\n /** Optional className for items */\n itemClassName?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible breadcrumb navigation component\n *\n * @example\n * ```tsx\n * const items = [\n * { label: 'Home', href: '/' },\n * { label: 'Products', href: '/products' },\n * { label: 'Electronics', href: '/products/electronics' },\n * { label: 'Laptops' }\n * ];\n *\n * <AccessibleBreadcrumb items={items} />\n * ```\n */\nexport const AccessibleBreadcrumb: React.FC<AccessibleBreadcrumbProps> = ({\n items,\n separator = '/',\n ariaLabel = 'Breadcrumb',\n className = '',\n itemClassName = '',\n style = {},\n}) => {\n if (items.length === 0) return null;\n\n const navStyles: React.CSSProperties = {\n ...style,\n };\n\n const listStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n flexWrap: 'wrap',\n };\n\n const itemStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n };\n\n const linkStyles: React.CSSProperties = {\n color: '#3b82f6',\n textDecoration: 'none',\n transition: 'color 0.2s',\n };\n\n const currentStyles: React.CSSProperties = {\n color: '#6b7280',\n fontWeight: 500,\n };\n\n const separatorStyles: React.CSSProperties = {\n color: '#9ca3af',\n userSelect: 'none',\n };\n\n return (\n <nav aria-label={ariaLabel} className={className} style={navStyles}>\n <ol style={listStyles}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const isCurrent = isLast;\n\n return (\n <li key={index} className={itemClassName} style={itemStyles}>\n {isCurrent ? (\n <span aria-current=\"page\" style={currentStyles}>\n {item.label}\n </span>\n ) : item.href ? (\n <a\n href={item.href}\n style={linkStyles}\n onMouseEnter={(e) => (e.currentTarget.style.color = '#2563eb')}\n onMouseLeave={(e) => (e.currentTarget.style.color = '#3b82f6')}\n >\n {item.label}\n </a>\n ) : item.onClick ? (\n <button\n type=\"button\"\n onClick={item.onClick}\n style={{\n ...linkStyles,\n background: 'transparent',\n border: 'none',\n padding: 0,\n cursor: 'pointer',\n font: 'inherit',\n }}\n onMouseEnter={(e) => (e.currentTarget.style.color = '#2563eb')}\n onMouseLeave={(e) => (e.currentTarget.style.color = '#3b82f6')}\n >\n {item.label}\n </button>\n ) : (\n <span style={currentStyles}>{item.label}</span>\n )}\n {!isLast && (\n <span aria-hidden=\"true\" style={separatorStyles}>\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n","/**\n * AccessibleCheckboxGroup Component\n * Accessible checkbox group with proper fieldset/legend and ARIA attributes\n */\n\nimport React from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface CheckboxOption {\n /** Unique value for the option */\n value: string;\n /** Label to display */\n label: string;\n /** Optional description */\n description?: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n}\n\nexport interface AccessibleCheckboxGroupProps {\n /** Array of checkbox options */\n options: CheckboxOption[];\n /** Currently selected values */\n value: string[];\n /** Callback when selection changes */\n onChange: (value: string[]) => void;\n /** Label for the group */\n label: string;\n /** Optional description for the group */\n description?: string;\n /** Whether the group is required */\n required?: boolean;\n /** Whether the group is disabled */\n disabled?: boolean;\n /** Error message to display */\n error?: string;\n /** Optional className for the fieldset */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible checkbox group component with proper ARIA attributes\n *\n * @example\n * ```tsx\n * const [selected, setSelected] = useState<string[]>(['email']);\n *\n * const options = [\n * { value: 'email', label: 'Email notifications' },\n * { value: 'sms', label: 'SMS notifications' },\n * { value: 'push', label: 'Push notifications', description: 'Requires app installation' }\n * ];\n *\n * <AccessibleCheckboxGroup\n * options={options}\n * value={selected}\n * onChange={setSelected}\n * label=\"Notification preferences\"\n * required\n * />\n * ```\n */\nexport const AccessibleCheckboxGroup: React.FC<AccessibleCheckboxGroupProps> = ({\n options,\n value,\n onChange,\n label,\n description,\n required = false,\n disabled = false,\n error,\n className = '',\n style = {},\n}) => {\n const descriptionId = useId('checkbox-description');\n const errorId = useId('checkbox-error');\n\n const handleChange = (optionValue: string, checked: boolean) => {\n if (disabled) return;\n\n const newValue = checked\n ? [...value, optionValue]\n : value.filter((v) => v !== optionValue);\n\n onChange(newValue);\n };\n\n const fieldsetStyles: React.CSSProperties = {\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n padding: '16px',\n margin: 0,\n ...style,\n };\n\n const legendStyles: React.CSSProperties = {\n fontWeight: 600,\n fontSize: '16px',\n marginBottom: '8px',\n padding: '0 4px',\n };\n\n const descriptionStyles: React.CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n marginBottom: '12px',\n };\n\n const optionContainerStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n };\n\n const optionStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '8px',\n };\n\n const checkboxStyles: React.CSSProperties = {\n width: '18px',\n height: '18px',\n marginTop: '2px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n };\n\n const labelStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n flex: 1,\n };\n\n const optionDescriptionStyles: React.CSSProperties = {\n fontSize: '13px',\n color: '#9ca3af',\n };\n\n const errorStyles: React.CSSProperties = {\n color: '#ef4444',\n fontSize: '14px',\n marginTop: '8px',\n };\n\n return (\n <fieldset\n className={className}\n style={fieldsetStyles}\n aria-describedby={\n [description && descriptionId, error && errorId].filter(Boolean).join(' ') || undefined\n }\n disabled={disabled}\n >\n <legend style={legendStyles}>\n {label}\n {required && (\n <span aria-label=\"required\" style={{ color: '#ef4444' }}>\n {' '}*\n </span>\n )}\n </legend>\n\n {description && (\n <div id={descriptionId} style={descriptionStyles}>\n {description}\n </div>\n )}\n\n <div style={optionContainerStyles} role=\"group\">\n {options.map((option) => {\n const checkboxId = useId(`checkbox-${option.value}`);\n const optionDescId = option.description ? useId(`checkbox-desc-${option.value}`) : undefined;\n const isChecked = value.includes(option.value);\n const isDisabled = disabled || option.disabled;\n\n return (\n <div key={option.value} style={optionStyles}>\n <input\n type=\"checkbox\"\n id={checkboxId}\n checked={isChecked}\n onChange={(e) => handleChange(option.value, e.target.checked)}\n disabled={isDisabled}\n aria-describedby={optionDescId}\n style={checkboxStyles}\n />\n <label htmlFor={checkboxId} style={{ ...labelStyles, opacity: isDisabled ? 0.6 : 1 }}>\n <span style={{ fontWeight: 500 }}>{option.label}</span>\n {option.description && (\n <span id={optionDescId} style={optionDescriptionStyles}>\n {option.description}\n </span>\n )}\n </label>\n </div>\n );\n })}\n </div>\n\n {error && (\n <div id={errorId} role=\"alert\" style={errorStyles}>\n {error}\n </div>\n )}\n </fieldset>\n );\n};\n","/**\n * AccessibleRadioGroup Component\n * Accessible radio button group with proper fieldset/legend and ARIA attributes\n */\n\nimport React from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface RadioOption {\n /** Unique value for the option */\n value: string;\n /** Label to display */\n label: string;\n /** Optional description */\n description?: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n}\n\nexport interface AccessibleRadioGroupProps {\n /** Array of radio options */\n options: RadioOption[];\n /** Currently selected value */\n value: string | null;\n /** Callback when selection changes */\n onChange: (value: string) => void;\n /** Name attribute for the radio group */\n name: string;\n /** Label for the group */\n label: string;\n /** Optional description for the group */\n description?: string;\n /** Whether the group is required */\n required?: boolean;\n /** Whether the group is disabled */\n disabled?: boolean;\n /** Error message to display */\n error?: string;\n /** Optional className for the fieldset */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible radio button group component with proper ARIA attributes\n *\n * @example\n * ```tsx\n * const [selected, setSelected] = useState<string | null>(null);\n *\n * const options = [\n * { value: 'small', label: 'Small', description: 'Up to 10 users' },\n * { value: 'medium', label: 'Medium', description: 'Up to 50 users' },\n * { value: 'large', label: 'Large', description: 'Unlimited users' }\n * ];\n *\n * <AccessibleRadioGroup\n * name=\"plan\"\n * options={options}\n * value={selected}\n * onChange={setSelected}\n * label=\"Choose your plan\"\n * required\n * />\n * ```\n */\nexport const AccessibleRadioGroup: React.FC<AccessibleRadioGroupProps> = ({\n options,\n value,\n onChange,\n name,\n label,\n description,\n required = false,\n disabled = false,\n error,\n className = '',\n style = {},\n}) => {\n const groupId = useId('radio-group');\n const descriptionId = useId('radio-description');\n const errorId = useId('radio-error');\n\n const handleKeyDown = (event: React.KeyboardEvent, currentIndex: number) => {\n let nextIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n event.preventDefault();\n nextIndex = (currentIndex + 1) % options.length;\n break;\n\n case 'ArrowUp':\n case 'ArrowLeft':\n event.preventDefault();\n nextIndex = currentIndex === 0 ? options.length - 1 : currentIndex - 1;\n break;\n\n default:\n return;\n }\n\n // Find the next non-disabled option\n while (options[nextIndex]?.disabled && nextIndex !== currentIndex) {\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n nextIndex = (nextIndex + 1) % options.length;\n } else {\n nextIndex = nextIndex === 0 ? options.length - 1 : nextIndex - 1;\n }\n }\n\n if (!options[nextIndex]?.disabled) {\n onChange(options[nextIndex].value);\n // Focus the next radio button\n const nextRadio = document.getElementById(`${groupId}-${options[nextIndex].value}`);\n nextRadio?.focus();\n }\n };\n\n const fieldsetStyles: React.CSSProperties = {\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n padding: '16px',\n margin: 0,\n ...style,\n };\n\n const legendStyles: React.CSSProperties = {\n fontWeight: 600,\n fontSize: '16px',\n marginBottom: '8px',\n padding: '0 4px',\n };\n\n const descriptionStyles: React.CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n marginBottom: '12px',\n };\n\n const optionContainerStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n };\n\n const optionStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '8px',\n };\n\n const radioStyles: React.CSSProperties = {\n width: '18px',\n height: '18px',\n marginTop: '2px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n };\n\n const labelStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n flex: 1,\n };\n\n const optionDescriptionStyles: React.CSSProperties = {\n fontSize: '13px',\n color: '#9ca3af',\n };\n\n const errorStyles: React.CSSProperties = {\n color: '#ef4444',\n fontSize: '14px',\n marginTop: '8px',\n };\n\n return (\n <fieldset\n className={className}\n style={fieldsetStyles}\n aria-describedby={\n [description && descriptionId, error && errorId].filter(Boolean).join(' ') || undefined\n }\n disabled={disabled}\n >\n <legend style={legendStyles}>\n {label}\n {required && (\n <span aria-label=\"required\" style={{ color: '#ef4444' }}>\n {' '}*\n </span>\n )}\n </legend>\n\n {description && (\n <div id={descriptionId} style={descriptionStyles}>\n {description}\n </div>\n )}\n\n <div style={optionContainerStyles} role=\"radiogroup\" aria-labelledby={groupId}>\n {options.map((option, index) => {\n const radioId = `${groupId}-${option.value}`;\n const optionDescId = option.description ? useId(`radio-desc-${option.value}`) : undefined;\n const isChecked = value === option.value;\n const isDisabled = disabled || option.disabled;\n\n return (\n <div key={option.value} style={optionStyles}>\n <input\n type=\"radio\"\n id={radioId}\n name={name}\n value={option.value}\n checked={isChecked}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={(e) => handleKeyDown(e, index)}\n disabled={isDisabled}\n aria-describedby={optionDescId}\n style={radioStyles}\n tabIndex={isChecked ? 0 : -1}\n />\n <label htmlFor={radioId} style={{ ...labelStyles, opacity: isDisabled ? 0.6 : 1 }}>\n <span style={{ fontWeight: 500 }}>{option.label}</span>\n {option.description && (\n <span id={optionDescId} style={optionDescriptionStyles}>\n {option.description}\n </span>\n )}\n </label>\n </div>\n );\n })}\n </div>\n\n {error && (\n <div id={errorId} role=\"alert\" style={errorStyles}>\n {error}\n </div>\n )}\n </fieldset>\n );\n};\n","/**\n * useAriaLive Hook\n * Manages ARIA live regions for dynamic announcements\n */\n\nimport { useEffect, useRef, useState } from 'react';\n\nexport type AriaLivePoliteness = 'polite' | 'assertive' | 'off';\n\nexport interface UseAriaLiveReturn {\n /** Sets a message to be announced */\n setMessage: (message: string) => void;\n /** Clears the current message */\n clearMessage: () => void;\n /** Current message */\n message: string;\n /** Props to spread on the live region element */\n liveRegionProps: {\n role: 'status' | 'alert';\n 'aria-live': AriaLivePoliteness;\n 'aria-atomic': 'true';\n 'aria-relevant': 'additions text';\n };\n}\n\n/**\n * Creates a managed ARIA live region\n * @param politeness - How urgently the message should be announced\n * @returns Object with message management functions and props\n *\n * @example\n * ```tsx\n * const { setMessage, liveRegionProps } = useAriaLive('polite');\n *\n * <button onClick={() => setMessage('Item added to cart')}>\n * Add to cart\n * </button>\n *\n * <div {...liveRegionProps} className=\"sr-only\">\n * {message}\n * </div>\n * ```\n */\nexport function useAriaLive(\n politeness: AriaLivePoliteness = 'polite',\n): UseAriaLiveReturn {\n const [message, setMessage] = useState('');\n const timeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n const clearMessage = () => {\n setMessage('');\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n\n const setMessageWithClear = (newMessage: string) => {\n setMessage(newMessage);\n\n // Auto-clear after 5 seconds\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n setMessage('');\n }, 5000);\n };\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return {\n setMessage: setMessageWithClear,\n clearMessage,\n message,\n liveRegionProps: {\n role: politeness === 'assertive' ? 'alert' : 'status',\n 'aria-live': politeness,\n 'aria-atomic': 'true',\n 'aria-relevant': 'additions text',\n },\n };\n}\n","/**\n * AccessibleProgress Component\n * Accessible progress bar and spinner with proper ARIA attributes\n */\n\nimport React from 'react';\nimport { useId } from '../hooks/use-id';\nimport { useAriaLive } from '../hooks/use-aria-live';\n\nexport type ProgressVariant = 'linear' | 'circular';\n\nexport interface AccessibleProgressProps {\n /** Current progress value (undefined for indeterminate) */\n value?: number;\n /** Maximum value */\n max?: number;\n /** Minimum value */\n min?: number;\n /** Label for the progress indicator */\n label: string;\n /** Visual variant */\n variant?: ProgressVariant;\n /** Whether to show percentage text */\n showValue?: boolean;\n /** Whether to announce progress changes */\n announceChanges?: boolean;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible progress indicator with ARIA live regions\n *\n * @example\n * ```tsx\n * // Determinate progress\n * <AccessibleProgress\n * value={75}\n * label=\"Upload progress\"\n * showValue\n * />\n *\n * // Indeterminate progress\n * <AccessibleProgress\n * label=\"Loading...\"\n * variant=\"circular\"\n * />\n * ```\n */\nexport const AccessibleProgress: React.FC<AccessibleProgressProps> = ({\n value,\n max = 100,\n min = 0,\n label,\n variant = 'linear',\n showValue = false,\n announceChanges = false,\n className = '',\n style = {},\n}) => {\n const progressId = useId('progress');\n const labelId = useId('progress-label');\n const { setMessage, liveRegionProps, message } = useAriaLive('polite');\n\n const isIndeterminate = value === undefined;\n const percentage = isIndeterminate ? 0 : Math.round(((value - min) / (max - min)) * 100);\n\n React.useEffect(() => {\n if (announceChanges && !isIndeterminate && value !== undefined) {\n const milestones = [25, 50, 75, 100];\n if (milestones.includes(percentage)) {\n setMessage(`${label}: ${percentage}% complete`);\n }\n }\n }, [percentage, announceChanges, isIndeterminate, value, label, setMessage]);\n\n const containerStyles: React.CSSProperties = {\n display: 'inline-flex',\n flexDirection: variant === 'linear' ? 'column' : 'row',\n alignItems: variant === 'linear' ? 'stretch' : 'center',\n gap: variant === 'linear' ? '8px' : '12px',\n width: variant === 'linear' ? '100%' : 'auto',\n ...style,\n };\n\n const labelContainerStyles: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n fontSize: '14px',\n fontWeight: 500,\n };\n\n const renderLinearProgress = () => {\n const trackStyles: React.CSSProperties = {\n width: '100%',\n height: '8px',\n backgroundColor: '#e5e7eb',\n borderRadius: '4px',\n overflow: 'hidden',\n position: 'relative',\n };\n\n const barStyles: React.CSSProperties = {\n height: '100%',\n backgroundColor: '#3b82f6',\n transition: isIndeterminate ? 'none' : 'width 0.3s ease',\n width: isIndeterminate ? '30%' : `${percentage}%`,\n animation: isIndeterminate ? 'indeterminateLinear 1.5s infinite ease-in-out' : 'none',\n };\n\n return (\n <>\n <style>\n {`\n @keyframes indeterminateLinear {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n }\n `}\n </style>\n <div style={labelContainerStyles}>\n <span id={labelId}>{label}</span>\n {showValue && !isIndeterminate && <span>{percentage}%</span>}\n </div>\n <div style={trackStyles}>\n <div style={barStyles} />\n </div>\n </>\n );\n };\n\n const renderCircularProgress = () => {\n const size = 48;\n const strokeWidth = 4;\n const radius = (size - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = isIndeterminate ? circumference * 0.25 : circumference - (percentage / 100) * circumference;\n\n const svgStyles: React.CSSProperties = {\n transform: 'rotate(-90deg)',\n animation: isIndeterminate ? 'spin 1s linear infinite' : 'none',\n };\n\n const circleStyles: React.CSSProperties = {\n transition: isIndeterminate ? 'none' : 'stroke-dashoffset 0.3s ease',\n };\n\n return (\n <>\n <style>\n {`\n @keyframes spin {\n from { transform: rotate(-90deg); }\n to { transform: rotate(270deg); }\n }\n `}\n </style>\n <svg width={size} height={size} style={svgStyles}>\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"#e5e7eb\"\n strokeWidth={strokeWidth}\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"#3b82f6\"\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n style={circleStyles}\n />\n </svg>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <span id={labelId} style={{ fontSize: '14px', fontWeight: 500 }}>\n {label}\n </span>\n {showValue && !isIndeterminate && (\n <span style={{ fontSize: '12px', color: '#6b7280' }}>{percentage}%</span>\n )}\n </div>\n </>\n );\n };\n\n return (\n <div className={className} style={containerStyles}>\n <div\n id={progressId}\n role=\"progressbar\"\n aria-labelledby={labelId}\n aria-valuenow={isIndeterminate ? undefined : value}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={isIndeterminate ? 'Loading...' : `${percentage}%`}\n >\n {variant === 'linear' ? renderLinearProgress() : renderCircularProgress()}\n </div>\n {announceChanges && (\n <div {...liveRegionProps} style={{ position: 'absolute', left: '-10000px', width: '1px', height: '1px', overflow: 'hidden' }}>\n {message}\n </div>\n )}\n </div>\n );\n};\n","/**\n * SkipLinks Component\n * Accessible skip navigation links for keyboard users\n */\n\nimport React from 'react';\n\nexport interface SkipLink {\n /** Target element ID (without #) */\n href: string;\n /** Label for the skip link */\n label: string;\n}\n\nexport interface SkipLinksProps {\n /** Array of skip links */\n links: SkipLink[];\n /** Optional className for the container */\n className?: string;\n /** Optional styles for the container */\n style?: React.CSSProperties;\n /** Optional styles for individual links */\n linkStyle?: React.CSSProperties;\n}\n\n/**\n * Skip navigation links component, visible only on keyboard focus\n * Should be the first focusable element on the page\n *\n * @example\n * ```tsx\n * const links = [\n * { href: 'main-content', label: 'Skip to main content' },\n * { href: 'navigation', label: 'Skip to navigation' },\n * { href: 'footer', label: 'Skip to footer' }\n * ];\n *\n * <SkipLinks links={links} />\n *\n * // In your page layout:\n * <main id=\"main-content\">...</main>\n * <nav id=\"navigation\">...</nav>\n * <footer id=\"footer\">...</footer>\n * ```\n */\nexport const SkipLinks: React.FC<SkipLinksProps> = ({\n links,\n className = '',\n style = {},\n linkStyle = {},\n}) => {\n if (links.length === 0) return null;\n\n const containerStyles: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n zIndex: 10000,\n ...style,\n };\n\n const listStyles: React.CSSProperties = {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n };\n\n const defaultLinkStyles: React.CSSProperties = {\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n display: 'block',\n padding: '12px 24px',\n backgroundColor: '#000',\n color: '#fff',\n textDecoration: 'none',\n fontWeight: 600,\n fontSize: '14px',\n borderRadius: '0 0 4px 0',\n transition: 'none',\n ...linkStyle,\n };\n\n const focusStyles: React.CSSProperties = {\n position: 'static',\n width: 'auto',\n height: 'auto',\n overflow: 'visible',\n left: 'auto',\n };\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>, href: string) => {\n e.preventDefault();\n\n // Find the target element\n const target = document.getElementById(href);\n if (target) {\n // Scroll to the element\n target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\n // Set focus to the target\n // If the element is not focusable, make it focusable temporarily\n const originalTabIndex = target.getAttribute('tabindex');\n if (!target.hasAttribute('tabindex')) {\n target.setAttribute('tabindex', '-1');\n }\n\n target.focus();\n\n // Restore original tabindex after focus\n if (originalTabIndex === null) {\n setTimeout(() => {\n target.removeAttribute('tabindex');\n }, 100);\n }\n }\n };\n\n return (\n <nav\n aria-label=\"Skip navigation\"\n className={className}\n style={containerStyles}\n >\n <ul style={listStyles}>\n {links.map((link, index) => (\n <li key={index}>\n <a\n href={`#${link.href}`}\n onClick={(e) => handleClick(e, link.href)}\n style={defaultLinkStyles}\n onFocus={(e) => {\n Object.assign(e.currentTarget.style, focusStyles);\n }}\n onBlur={(e) => {\n Object.assign(e.currentTarget.style, defaultLinkStyles);\n }}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n );\n};\n","/**\n * AccessiblePagination Component\n * Accessible pagination with proper ARIA attributes and keyboard navigation\n */\n\nimport React from 'react';\n\nexport interface AccessiblePaginationProps {\n /** Current active page (1-indexed) */\n currentPage: number;\n /** Total number of pages */\n totalPages: number;\n /** Callback when page changes */\n onPageChange: (page: number) => void;\n /** Number of sibling pages to show on each side */\n siblingCount?: number;\n /** Whether to show first/last buttons */\n showFirstLast?: boolean;\n /** Optional aria-label for the navigation */\n ariaLabel?: string;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible pagination component with keyboard navigation\n *\n * @example\n * ```tsx\n * const [page, setPage] = useState(1);\n *\n * <AccessiblePagination\n * currentPage={page}\n * totalPages={10}\n * onPageChange={setPage}\n * siblingCount={1}\n * showFirstLast\n * />\n * ```\n */\nexport const AccessiblePagination: React.FC<AccessiblePaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showFirstLast = false,\n ariaLabel = 'Pagination',\n className = '',\n style = {},\n}) => {\n if (totalPages <= 1) return null;\n\n const generatePageNumbers = (): (number | string)[] => {\n const pages: (number | string)[] = [];\n\n // Always show first page\n pages.push(1);\n\n // Calculate start and end of sibling range\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 2);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages - 1);\n\n // Add ellipsis before siblings if needed\n if (leftSiblingIndex > 2) {\n pages.push('...');\n }\n\n // Add sibling pages\n for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n pages.push(i);\n }\n\n // Add ellipsis after siblings if needed\n if (rightSiblingIndex < totalPages - 1) {\n pages.push('...');\n }\n\n // Always show last page\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n const pages = generatePageNumbers();\n\n const navStyles: React.CSSProperties = {\n ...style,\n };\n\n const listStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n };\n\n const buttonBaseStyles: React.CSSProperties = {\n minWidth: '40px',\n height: '40px',\n padding: '8px 12px',\n border: '1px solid #e5e7eb',\n backgroundColor: '#fff',\n borderRadius: '6px',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'all 0.2s',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n };\n\n const activeButtonStyles: React.CSSProperties = {\n ...buttonBaseStyles,\n backgroundColor: '#3b82f6',\n color: '#fff',\n borderColor: '#3b82f6',\n };\n\n const disabledButtonStyles: React.CSSProperties = {\n ...buttonBaseStyles,\n opacity: 0.5,\n cursor: 'not-allowed',\n };\n\n const ellipsisStyles: React.CSSProperties = {\n minWidth: '40px',\n height: '40px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#9ca3af',\n };\n\n const handlePageChange = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page);\n }\n };\n\n return (\n <nav aria-label={ariaLabel} className={className} style={navStyles}>\n <ul style={listStyles}>\n {/* First Page Button */}\n {showFirstLast && (\n <li>\n <button\n type=\"button\"\n onClick={() => handlePageChange(1)}\n disabled={currentPage === 1}\n aria-label=\"Go to first page\"\n style={currentPage === 1 ? disabledButtonStyles : buttonBaseStyles}\n onMouseEnter={(e) => {\n if (currentPage !== 1) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }\n }}\n onMouseLeave={(e) => {\n if (currentPage !== 1) {\n e.currentTarget.style.backgroundColor = '#fff';\n }\n }}\n >\n ««\n </button>\n </li>\n )}\n\n {/* Previous Button */}\n <li>\n <button\n type=\"button\"\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={currentPage === 1}\n aria-label=\"Go to previous page\"\n style={currentPage === 1 ? disabledButtonStyles : buttonBaseStyles}\n onMouseEnter={(e) => {\n if (currentPage !== 1) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }\n }}\n onMouseLeave={(e) => {\n if (currentPage !== 1) {\n e.currentTarget.style.backgroundColor = '#fff';\n }\n }}\n >\n «\n </button>\n </li>\n\n {/* Page Numbers */}\n {pages.map((page, index) => {\n if (page === '...') {\n return (\n <li key={`ellipsis-${index}`}>\n <span style={ellipsisStyles} aria-hidden=\"true\">\n …\n </span>\n </li>\n );\n }\n\n const pageNumber = page as number;\n const isActive = pageNumber === currentPage;\n\n return (\n <li key={pageNumber}>\n <button\n type=\"button\"\n onClick={() => handlePageChange(pageNumber)}\n aria-label={`Go to page ${pageNumber}`}\n aria-current={isActive ? 'page' : undefined}\n style={isActive ? activeButtonStyles : buttonBaseStyles}\n onMouseEnter={(e) => {\n if (!isActive) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }\n }}\n onMouseLeave={(e) => {\n if (!isActive) {\n e.currentTarget.style.backgroundColor = '#fff';\n }\n }}\n >\n {pageNumber}\n </button>\n </li>\n );\n })}\n\n {/* Next Button */}\n <li>\n <button\n type=\"button\"\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n aria-label=\"Go to next page\"\n style={currentPage === totalPages ? disabledButtonStyles : buttonBaseStyles}\n onMouseEnter={(e) => {\n if (currentPage !== totalPages) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }\n }}\n onMouseLeave={(e) => {\n if (currentPage !== totalPages) {\n e.currentTarget.style.backgroundColor = '#fff';\n }\n }}\n >\n »\n </button>\n </li>\n\n {/* Last Page Button */}\n {showFirstLast && (\n <li>\n <button\n type=\"button\"\n onClick={() => handlePageChange(totalPages)}\n disabled={currentPage === totalPages}\n aria-label=\"Go to last page\"\n style={currentPage === totalPages ? disabledButtonStyles : buttonBaseStyles}\n onMouseEnter={(e) => {\n if (currentPage !== totalPages) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }\n }}\n onMouseLeave={(e) => {\n if (currentPage !== totalPages) {\n e.currentTarget.style.backgroundColor = '#fff';\n }\n }}\n >\n »»\n </button>\n </li>\n )}\n </ul>\n </nav>\n );\n};\n","/**\n * useClickOutside Hook\n * Detects clicks outside of a referenced element\n */\n\nimport { type RefObject, useEffect } from 'react';\n\n/**\n * Calls a handler when user clicks outside of the referenced element\n * @param ref - React ref to the element\n * @param handler - Function to call when clicking outside\n * @param enabled - Whether the hook is enabled (default: true)\n *\n * @example\n * ```tsx\n * const menuRef = useRef<HTMLDivElement>(null);\n * useClickOutside(menuRef, () => setIsOpen(false));\n *\n * <div ref={menuRef}>\n * Menu content\n * </div>\n * ```\n */\nexport function useClickOutside(\n ref: RefObject<HTMLElement | null>,\n handler: (event: MouseEvent | TouchEvent) => void,\n enabled = true,\n): void {\n useEffect(() => {\n if (!enabled) return;\n\n const handleClickOutside = (event: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(event.target as Node)) {\n return;\n }\n\n handler(event);\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('touchstart', handleClickOutside);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('touchstart', handleClickOutside);\n };\n }, [ref, handler, enabled]);\n}\n","/**\n * AccessibleCombobox Component\n * Fully accessible combobox/select with autocomplete, keyboard navigation, and ARIA support\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useId } from '../hooks/use-id';\nimport { useClickOutside } from '../hooks/use-click-outside';\n\nexport interface ComboboxOption<T = string> {\n /** Unique value */\n value: T;\n /** Display label */\n label: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n}\n\nexport interface AccessibleComboboxProps<T = string> {\n /** Array of options */\n options: ComboboxOption<T>[];\n /** Currently selected value */\n value: T | null;\n /** Callback when selection changes */\n onChange: (value: T | null) => void;\n /** Label for the combobox */\n label: string;\n /** Placeholder text */\n placeholder?: string;\n /** Whether search is enabled */\n searchable?: boolean;\n /** Whether the combobox is required */\n required?: boolean;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Error message */\n error?: string;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible combobox/select component with autocomplete\n *\n * @example\n * ```tsx\n * const countries = [\n * { value: 'us', label: 'United States' },\n * { value: 'uk', label: 'United Kingdom' },\n * { value: 'ca', label: 'Canada' }\n * ];\n *\n * const [country, setCountry] = useState<string | null>(null);\n *\n * <AccessibleCombobox\n * options={countries}\n * value={country}\n * onChange={setCountry}\n * label=\"Select country\"\n * searchable\n * />\n * ```\n */\nexport function AccessibleCombobox<T = string>({\n options,\n value,\n onChange,\n label,\n placeholder = 'Select an option',\n searchable = false,\n required = false,\n disabled = false,\n error,\n className = '',\n style = {},\n}: AccessibleComboboxProps<T>): React.ReactElement {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n\n const comboboxId = useId('combobox');\n const labelId = useId('combobox-label');\n const listboxId = useId('combobox-listbox');\n const errorId = useId('combobox-error');\n\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listboxRef = useRef<HTMLUListElement>(null);\n\n useClickOutside(containerRef, () => setIsOpen(false), isOpen);\n\n const filteredOptions = searchable\n ? options.filter((option) =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : options;\n\n const selectedOption = options.find((opt) => opt.value === value);\n\n useEffect(() => {\n if (isOpen && listboxRef.current) {\n const highlightedElement = listboxRef.current.querySelector(\n `[data-index=\"${highlightedIndex}\"]`\n ) as HTMLElement;\n highlightedElement?.scrollIntoView({ block: 'nearest' });\n }\n }, [highlightedIndex, isOpen]);\n\n const handleToggle = () => {\n if (disabled) return;\n setIsOpen(!isOpen);\n if (!isOpen) {\n setSearchQuery('');\n setHighlightedIndex(0);\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n };\n\n const handleSelect = (option: ComboboxOption<T>) => {\n if (option.disabled) return;\n onChange(option.value);\n setIsOpen(false);\n setSearchQuery('');\n inputRef.current?.blur();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n if (isOpen && filteredOptions[highlightedIndex]) {\n handleSelect(filteredOptions[highlightedIndex]);\n } else {\n setIsOpen(!isOpen);\n }\n break;\n\n case ' ':\n if (!searchable || !isOpen) {\n event.preventDefault();\n setIsOpen(!isOpen);\n }\n break;\n\n case 'Escape':\n event.preventDefault();\n setIsOpen(false);\n setSearchQuery('');\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : prev\n );\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (isOpen) {\n setHighlightedIndex((prev) => (prev > 0 ? prev - 1 : prev));\n }\n break;\n\n case 'Home':\n if (isOpen) {\n event.preventDefault();\n setHighlightedIndex(0);\n }\n break;\n\n case 'End':\n if (isOpen) {\n event.preventDefault();\n setHighlightedIndex(filteredOptions.length - 1);\n }\n break;\n }\n };\n\n const containerStyles: React.CSSProperties = {\n position: 'relative',\n width: '100%',\n ...style,\n };\n\n const labelStyles: React.CSSProperties = {\n display: 'block',\n fontWeight: 600,\n fontSize: '14px',\n marginBottom: '6px',\n };\n\n const inputContainerStyles: React.CSSProperties = {\n position: 'relative',\n width: '100%',\n };\n\n const inputStyles: React.CSSProperties = {\n width: '100%',\n padding: '10px 36px 10px 12px',\n border: `1px solid ${error ? '#ef4444' : '#e5e7eb'}`,\n borderRadius: '6px',\n fontSize: '14px',\n backgroundColor: disabled ? '#f9fafb' : '#fff',\n cursor: disabled ? 'not-allowed' : 'pointer',\n outline: 'none',\n };\n\n const iconStyles: React.CSSProperties = {\n position: 'absolute',\n right: '12px',\n top: '50%',\n transform: 'translateY(-50%)',\n pointerEvents: 'none',\n transition: 'transform 0.2s',\n };\n\n const listboxStyles: React.CSSProperties = {\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '4px',\n maxHeight: '240px',\n overflowY: 'auto',\n backgroundColor: '#fff',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',\n zIndex: 1000,\n listStyle: 'none',\n margin: 0,\n padding: '4px',\n };\n\n const optionStyles = (isHighlighted: boolean, isSelected: boolean, isDisabled: boolean): React.CSSProperties => ({\n padding: '10px 12px',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n backgroundColor: isHighlighted ? '#f3f4f6' : isSelected ? '#e5e7eb' : 'transparent',\n borderRadius: '4px',\n fontSize: '14px',\n opacity: isDisabled ? 0.5 : 1,\n });\n\n const errorStyles: React.CSSProperties = {\n marginTop: '6px',\n fontSize: '13px',\n color: '#ef4444',\n };\n\n return (\n <div ref={containerRef} className={className} style={containerStyles}>\n <label id={labelId} htmlFor={comboboxId} style={labelStyles}>\n {label}\n {required && (\n <span aria-label=\"required\" style={{ color: '#ef4444' }}>\n {' '}*\n </span>\n )}\n </label>\n\n <div style={inputContainerStyles}>\n <input\n ref={inputRef}\n id={comboboxId}\n type=\"text\"\n role=\"combobox\"\n aria-labelledby={labelId}\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-autocomplete={searchable ? 'list' : 'none'}\n aria-activedescendant={\n isOpen && filteredOptions[highlightedIndex]\n ? `${listboxId}-option-${highlightedIndex}`\n : undefined\n }\n aria-describedby={error ? errorId : undefined}\n aria-required={required}\n aria-invalid={!!error}\n disabled={disabled}\n value={searchable && isOpen ? searchQuery : selectedOption?.label || ''}\n onChange={(e) => {\n if (searchable) {\n setSearchQuery(e.target.value);\n setHighlightedIndex(0);\n if (!isOpen) setIsOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n onClick={handleToggle}\n placeholder={placeholder}\n style={inputStyles}\n readOnly={!searchable}\n />\n <span\n aria-hidden=\"true\"\n style={{\n ...iconStyles,\n transform: `translateY(-50%) rotate(${isOpen ? '180deg' : '0deg'})`,\n }}\n >\n ▼\n </span>\n </div>\n\n {isOpen && (\n <ul\n ref={listboxRef}\n id={listboxId}\n role=\"listbox\"\n aria-labelledby={labelId}\n style={listboxStyles}\n >\n {filteredOptions.length === 0 ? (\n <li role=\"option\" aria-disabled=\"true\" style={{ padding: '10px 12px', color: '#9ca3af' }}>\n No options found\n </li>\n ) : (\n filteredOptions.map((option, index) => {\n const isHighlighted = index === highlightedIndex;\n const isSelected = option.value === value;\n\n return (\n <li\n key={String(option.value)}\n id={`${listboxId}-option-${index}`}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-index={index}\n onClick={() => handleSelect(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n style={optionStyles(isHighlighted, isSelected, !!option.disabled)}\n >\n {option.label}\n </li>\n );\n })\n )}\n </ul>\n )}\n\n {error && (\n <div id={errorId} role=\"alert\" style={errorStyles}>\n {error}\n </div>\n )}\n </div>\n );\n}\n","/**\n * AccessibleDatePicker Component\n * Fully accessible date picker with calendar grid and keyboard navigation\n */\n\nimport React, { useState, useRef } from 'react';\nimport { useId } from '../hooks/use-id';\nimport { useClickOutside } from '../hooks/use-click-outside';\n\nexport interface AccessibleDatePickerProps {\n /** Currently selected date */\n value: Date | null;\n /** Callback when date changes */\n onChange: (date: Date | null) => void;\n /** Label for the date picker */\n label: string;\n /** Minimum selectable date */\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Array of disabled dates */\n disabledDates?: Date[];\n /** Whether the field is required */\n required?: boolean;\n /** Whether the field is disabled */\n disabled?: boolean;\n /** Error message */\n error?: string;\n /** Date format for display (default: MM/DD/YYYY) */\n dateFormat?: 'MM/DD/YYYY' | 'DD/MM/YYYY' | 'YYYY-MM-DD';\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible date picker with calendar grid\n *\n * @example\n * ```tsx\n * const [date, setDate] = useState<Date | null>(null);\n *\n * <AccessibleDatePicker\n * value={date}\n * onChange={setDate}\n * label=\"Select date\"\n * minDate={new Date()}\n * required\n * />\n * ```\n */\nexport const AccessibleDatePicker: React.FC<AccessibleDatePickerProps> = ({\n value,\n onChange,\n label,\n minDate,\n maxDate,\n disabledDates = [],\n required = false,\n disabled = false,\n error,\n dateFormat = 'MM/DD/YYYY',\n className = '',\n style = {},\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [viewDate, setViewDate] = useState(value || new Date());\n const [focusedDate, setFocusedDate] = useState<Date | null>(null);\n\n const pickerId = useId('datepicker');\n const labelId = useId('datepicker-label');\n const calendarId = useId('datepicker-calendar');\n const errorId = useId('datepicker-error');\n\n const containerRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n useClickOutside(containerRef, () => setIsOpen(false), isOpen);\n\n const formatDate = (date: Date | null): string => {\n if (!date) return '';\n\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n\n switch (dateFormat) {\n case 'DD/MM/YYYY':\n return `${day}/${month}/${year}`;\n case 'YYYY-MM-DD':\n return `${year}-${month}-${day}`;\n case 'MM/DD/YYYY':\n default:\n return `${month}/${day}/${year}`;\n }\n };\n\n const isSameDay = (date1: Date, date2: Date): boolean => {\n return (\n date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear()\n );\n };\n\n const isDateDisabled = (date: Date): boolean => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return disabledDates.some((disabledDate) => isSameDay(date, disabledDate));\n };\n\n const getDaysInMonth = (date: Date): Date[] => {\n const year = date.getFullYear();\n const month = date.getMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const days: Date[] = [];\n\n // Add empty cells for days before month starts\n const startDayOfWeek = firstDay.getDay();\n for (let i = 0; i < startDayOfWeek; i++) {\n days.push(new Date(year, month, -startDayOfWeek + i + 1));\n }\n\n // Add all days in month\n for (let day = 1; day <= lastDay.getDate(); day++) {\n days.push(new Date(year, month, day));\n }\n\n return days;\n };\n\n const handlePreviousMonth = () => {\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() - 1, 1));\n };\n\n const handleNextMonth = () => {\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1));\n };\n\n const handleDateSelect = (date: Date) => {\n if (isDateDisabled(date)) return;\n onChange(date);\n setIsOpen(false);\n buttonRef.current?.focus();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent, date: Date) => {\n let nextDate: Date | null = null;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n handleDateSelect(date);\n return;\n\n case 'Escape':\n event.preventDefault();\n setIsOpen(false);\n buttonRef.current?.focus();\n return;\n\n case 'ArrowLeft':\n event.preventDefault();\n nextDate = new Date(date);\n nextDate.setDate(date.getDate() - 1);\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n nextDate = new Date(date);\n nextDate.setDate(date.getDate() + 1);\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n nextDate = new Date(date);\n nextDate.setDate(date.getDate() - 7);\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n nextDate = new Date(date);\n nextDate.setDate(date.getDate() + 7);\n break;\n\n case 'Home':\n event.preventDefault();\n nextDate = new Date(date.getFullYear(), date.getMonth(), 1);\n break;\n\n case 'End':\n event.preventDefault();\n nextDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n break;\n\n case 'PageUp':\n event.preventDefault();\n nextDate = new Date(date.getFullYear(), date.getMonth() - 1, date.getDate());\n break;\n\n case 'PageDown':\n event.preventDefault();\n nextDate = new Date(date.getFullYear(), date.getMonth() + 1, date.getDate());\n break;\n }\n\n if (nextDate) {\n setFocusedDate(nextDate);\n if (nextDate.getMonth() !== viewDate.getMonth()) {\n setViewDate(new Date(nextDate.getFullYear(), nextDate.getMonth(), 1));\n }\n }\n };\n\n const days = getDaysInMonth(viewDate);\n const monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n ];\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n const containerStyles: React.CSSProperties = {\n position: 'relative',\n width: '100%',\n ...style,\n };\n\n const labelStyles: React.CSSProperties = {\n display: 'block',\n fontWeight: 600,\n fontSize: '14px',\n marginBottom: '6px',\n };\n\n const buttonStyles: React.CSSProperties = {\n width: '100%',\n padding: '10px 36px 10px 12px',\n border: `1px solid ${error ? '#ef4444' : '#e5e7eb'}`,\n borderRadius: '6px',\n fontSize: '14px',\n backgroundColor: disabled ? '#f9fafb' : '#fff',\n cursor: disabled ? 'not-allowed' : 'pointer',\n textAlign: 'left',\n position: 'relative',\n };\n\n const calendarStyles: React.CSSProperties = {\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: '4px',\n backgroundColor: '#fff',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',\n padding: '16px',\n zIndex: 1000,\n minWidth: '280px',\n };\n\n const headerStyles: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '12px',\n };\n\n const navButtonStyles: React.CSSProperties = {\n padding: '6px 12px',\n border: '1px solid #e5e7eb',\n borderRadius: '4px',\n backgroundColor: '#fff',\n cursor: 'pointer',\n fontSize: '14px',\n };\n\n const gridStyles: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: '4px',\n };\n\n const dayHeaderStyles: React.CSSProperties = {\n textAlign: 'center',\n fontWeight: 600,\n fontSize: '12px',\n padding: '8px 0',\n color: '#6b7280',\n };\n\n const dayCellStyles = (\n _date: Date,\n isCurrentMonth: boolean,\n isSelected: boolean,\n isToday: boolean,\n isDisabled: boolean\n ): React.CSSProperties => ({\n padding: '8px',\n border: 'none',\n borderRadius: '4px',\n fontSize: '14px',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n backgroundColor: isSelected ? '#3b82f6' : isToday ? '#e5e7eb' : 'transparent',\n color: isSelected ? '#fff' : !isCurrentMonth ? '#9ca3af' : isDisabled ? '#d1d5db' : '#1f2937',\n fontWeight: isSelected || isToday ? 600 : 400,\n opacity: isDisabled ? 0.5 : 1,\n });\n\n const errorStyles: React.CSSProperties = {\n marginTop: '6px',\n fontSize: '13px',\n color: '#ef4444',\n };\n\n return (\n <div ref={containerRef} className={className} style={containerStyles}>\n <label id={labelId} htmlFor={pickerId} style={labelStyles}>\n {label}\n {required && (\n <span aria-label=\"required\" style={{ color: '#ef4444' }}>\n {' '}*\n </span>\n )}\n </label>\n\n <button\n ref={buttonRef}\n id={pickerId}\n type=\"button\"\n aria-labelledby={labelId}\n aria-expanded={isOpen}\n aria-controls={calendarId}\n aria-describedby={error ? errorId : undefined}\n aria-required={required}\n aria-invalid={!!error}\n disabled={disabled}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n style={buttonStyles}\n >\n {value ? formatDate(value) : 'Select date'}\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n right: '12px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n 📅\n </span>\n </button>\n\n {isOpen && (\n <div id={calendarId} role=\"dialog\" aria-modal=\"false\" aria-label=\"Calendar\" style={calendarStyles}>\n <div style={headerStyles}>\n <button\n type=\"button\"\n onClick={handlePreviousMonth}\n aria-label=\"Previous month\"\n style={navButtonStyles}\n >\n ‹\n </button>\n <span style={{ fontWeight: 600 }}>\n {monthNames[viewDate.getMonth()]} {viewDate.getFullYear()}\n </span>\n <button\n type=\"button\"\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n style={navButtonStyles}\n >\n ›\n </button>\n </div>\n\n <div role=\"grid\" aria-labelledby={labelId} style={gridStyles}>\n {dayNames.map((day) => (\n <div key={day} role=\"columnheader\" style={dayHeaderStyles}>\n {day}\n </div>\n ))}\n\n {days.map((cellDate, index) => {\n const isCurrentMonth = cellDate.getMonth() === viewDate.getMonth();\n const isSelected = value ? isSameDay(cellDate, value) : false;\n const isToday = isSameDay(cellDate, new Date());\n const isDisabled = isDateDisabled(cellDate);\n const isFocused = focusedDate ? isSameDay(cellDate, focusedDate) : false;\n\n return (\n <button\n key={index}\n type=\"button\"\n role=\"gridcell\"\n aria-label={formatDate(cellDate)}\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n disabled={isDisabled}\n tabIndex={isFocused || (isSelected && !focusedDate) ? 0 : -1}\n onClick={() => handleDateSelect(cellDate)}\n onKeyDown={(e) => handleKeyDown(e, cellDate)}\n style={dayCellStyles(cellDate, isCurrentMonth, isSelected, isToday, isDisabled)}\n onMouseEnter={(e) => {\n if (!isDisabled && !isSelected) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }\n }}\n onMouseLeave={(e) => {\n if (!isDisabled && !isSelected) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n {cellDate.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {error && (\n <div id={errorId} role=\"alert\" style={errorStyles}>\n {error}\n </div>\n )}\n </div>\n );\n};\n","/**\n * AccessibleTreeView Component\n * Accessible tree navigation with keyboard support and ARIA\n */\n\nimport React, { useState } from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface TreeNode<T = unknown> {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Optional data payload */\n data?: T;\n /** Child nodes */\n children?: TreeNode<T>[];\n /** Whether node is disabled */\n disabled?: boolean;\n}\n\nexport interface AccessibleTreeViewProps<T = unknown> {\n /** Tree data */\n data: TreeNode<T>[];\n /** Callback when node is selected */\n onSelect?: (node: TreeNode<T>) => void;\n /** IDs of expanded nodes */\n expandedNodes?: string[];\n /** Callback when node is expanded/collapsed */\n onToggle?: (nodeId: string, isExpanded: boolean) => void;\n /** Allow multiple selection */\n multiSelect?: boolean;\n /** Selected node IDs */\n selectedNodes?: string[];\n /** Optional aria-label */\n ariaLabel?: string;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible tree view component with keyboard navigation\n *\n * @example\n * ```tsx\n * const treeData = [\n * {\n * id: '1',\n * label: 'Documents',\n * children: [\n * { id: '1-1', label: 'Reports' },\n * { id: '1-2', label: 'Invoices' }\n * ]\n * },\n * { id: '2', label: 'Images' }\n * ];\n *\n * <AccessibleTreeView\n * data={treeData}\n * onSelect={(node) => console.log(node)}\n * />\n * ```\n */\nexport function AccessibleTreeView<T = unknown>({\n data,\n onSelect,\n expandedNodes: controlledExpanded,\n onToggle,\n multiSelect = false,\n selectedNodes: controlledSelected = [],\n ariaLabel = 'Tree navigation',\n className = '',\n style = {},\n}: AccessibleTreeViewProps<T>): React.ReactElement {\n const [internalExpanded, setInternalExpanded] = useState<Set<string>>(new Set());\n const [internalSelected, setInternalSelected] = useState<Set<string>>(new Set());\n const treeId = useId('tree');\n\n const expandedSet = controlledExpanded\n ? new Set(controlledExpanded)\n : internalExpanded;\n\n const selectedSet = new Set(controlledSelected.length > 0 ? controlledSelected : Array.from(internalSelected));\n\n const toggleNode = (nodeId: string) => {\n const isExpanded = expandedSet.has(nodeId);\n\n if (controlledExpanded) {\n onToggle?.(nodeId, !isExpanded);\n } else {\n setInternalExpanded((prev) => {\n const next = new Set(prev);\n if (isExpanded) {\n next.delete(nodeId);\n } else {\n next.add(nodeId);\n }\n return next;\n });\n }\n };\n\n const selectNode = (node: TreeNode<T>) => {\n if (node.disabled) return;\n\n if (multiSelect) {\n setInternalSelected((prev) => {\n const next = new Set(prev);\n if (next.has(node.id)) {\n next.delete(node.id);\n } else {\n next.add(node.id);\n }\n return next;\n });\n } else {\n setInternalSelected(new Set([node.id]));\n }\n\n onSelect?.(node);\n };\n\n const getAllNodes = (nodes: TreeNode<T>[]): TreeNode<T>[] => {\n const result: TreeNode<T>[] = [];\n const traverse = (nodeList: TreeNode<T>[]) => {\n for (const node of nodeList) {\n result.push(node);\n if (node.children && expandedSet.has(node.id)) {\n traverse(node.children);\n }\n }\n };\n traverse(nodes);\n return result;\n };\n\n const handleKeyDown = (event: React.KeyboardEvent, node: TreeNode<T>, allNodes: TreeNode<T>[]) => {\n const currentIndex = allNodes.findIndex((n) => n.id === node.id);\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n selectNode(node);\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n if (currentIndex < allNodes.length - 1) {\n const nextNode = allNodes[currentIndex + 1];\n document.getElementById(`${treeId}-${nextNode.id}`)?.focus();\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (currentIndex > 0) {\n const prevNode = allNodes[currentIndex - 1];\n document.getElementById(`${treeId}-${prevNode.id}`)?.focus();\n }\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n if (node.children && node.children.length > 0) {\n if (!expandedSet.has(node.id)) {\n toggleNode(node.id);\n } else if (node.children[0]) {\n document.getElementById(`${treeId}-${node.children[0].id}`)?.focus();\n }\n }\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n if (node.children && expandedSet.has(node.id)) {\n toggleNode(node.id);\n }\n break;\n\n case 'Home':\n event.preventDefault();\n if (allNodes[0]) {\n document.getElementById(`${treeId}-${allNodes[0].id}`)?.focus();\n }\n break;\n\n case 'End':\n event.preventDefault();\n if (allNodes[allNodes.length - 1]) {\n document.getElementById(`${treeId}-${allNodes[allNodes.length - 1].id}`)?.focus();\n }\n break;\n }\n };\n\n const renderNode = (node: TreeNode<T>, level: number, allNodes: TreeNode<T>[]): React.ReactNode => {\n const hasChildren = node.children && node.children.length > 0;\n const isExpanded = expandedSet.has(node.id);\n const isSelected = selectedSet.has(node.id);\n\n const nodeStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n paddingLeft: `${12 + level * 24}px`,\n cursor: node.disabled ? 'not-allowed' : 'pointer',\n backgroundColor: isSelected ? '#e5e7eb' : 'transparent',\n borderRadius: '4px',\n opacity: node.disabled ? 0.5 : 1,\n };\n\n const iconStyles: React.CSSProperties = {\n width: '16px',\n textAlign: 'center',\n transition: 'transform 0.2s',\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n };\n\n return (\n <React.Fragment key={node.id}>\n <div\n id={`${treeId}-${node.id}`}\n role=\"treeitem\"\n aria-expanded={hasChildren ? isExpanded : undefined}\n aria-selected={isSelected}\n aria-level={level + 1}\n aria-disabled={node.disabled}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => {\n if (!node.disabled) {\n if (hasChildren) {\n toggleNode(node.id);\n }\n selectNode(node);\n }\n }}\n onKeyDown={(e) => handleKeyDown(e, node, allNodes)}\n style={nodeStyles}\n onMouseEnter={(e) => {\n if (!node.disabled && !isSelected) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }\n }}\n onMouseLeave={(e) => {\n if (!node.disabled && !isSelected) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n {hasChildren ? (\n <span aria-hidden=\"true\" style={iconStyles}>\n ▶\n </span>\n ) : (\n <span style={{ width: '16px' }} />\n )}\n <span>{node.label}</span>\n </div>\n {hasChildren && isExpanded && (\n <div role=\"group\">\n {node.children!.map((child) => renderNode(child, level + 1, allNodes))}\n </div>\n )}\n </React.Fragment>\n );\n };\n\n const allNodes = getAllNodes(data);\n\n const containerStyles: React.CSSProperties = {\n ...style,\n };\n\n return (\n <div\n id={treeId}\n role=\"tree\"\n aria-label={ariaLabel}\n aria-multiselectable={multiSelect}\n className={className}\n style={containerStyles}\n >\n {data.map((node) => renderNode(node, 0, allNodes))}\n </div>\n );\n}\n","/**\n * AccessibleTable Component\n * Fully accessible data table with sorting, selection, and keyboard navigation\n */\n\nimport React, { useState } from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface TableColumn<T> {\n /** Unique key for the column */\n key: string;\n /** Header label */\n label: string;\n /** Render function for cell content */\n render?: (item: T, index: number) => React.ReactNode;\n /** Whether column is sortable */\n sortable?: boolean;\n /** Width of the column */\n width?: string;\n}\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport interface AccessibleTableProps<T> {\n /** Table data */\n data: T[];\n /** Column definitions */\n columns: TableColumn<T>[];\n /** Table caption (required for accessibility) */\n caption: string;\n /** Whether rows are selectable */\n selectable?: boolean;\n /** Selected row indices */\n selectedRows?: number[];\n /** Callback when selection changes */\n onSelectionChange?: (selectedIndices: number[]) => void;\n /** Row key extractor */\n getRowKey?: (item: T, index: number) => string;\n /** Whether table is sortable */\n sortable?: boolean;\n /** Current sort column */\n sortColumn?: string;\n /** Current sort direction */\n sortDirection?: SortDirection;\n /** Callback when sort changes */\n onSort?: (column: string, direction: SortDirection) => void;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible data table with sorting and selection\n *\n * @example\n * ```tsx\n * interface User {\n * id: number;\n * name: string;\n * email: string;\n * }\n *\n * const columns: TableColumn<User>[] = [\n * { key: 'name', label: 'Name', sortable: true },\n * { key: 'email', label: 'Email', sortable: true }\n * ];\n *\n * <AccessibleTable\n * data={users}\n * columns={columns}\n * caption=\"User list\"\n * selectable\n * sortable\n * />\n * ```\n */\nexport function AccessibleTable<T extends Record<string, unknown>>({\n data,\n columns,\n caption,\n selectable = false,\n selectedRows: controlledSelected = [],\n onSelectionChange,\n getRowKey = (_, index) => String(index),\n sortable = false,\n sortColumn: controlledSortColumn,\n sortDirection: controlledSortDirection,\n onSort,\n className = '',\n style = {},\n}: AccessibleTableProps<T>): React.ReactElement {\n const [internalSelected, setInternalSelected] = useState<Set<number>>(new Set());\n const [internalSortColumn, setInternalSortColumn] = useState<string | null>(null);\n const [internalSortDirection, setInternalSortDirection] = useState<SortDirection>(null);\n\n const tableId = useId('table');\n\n const selectedSet = new Set(controlledSelected.length > 0 ? controlledSelected : Array.from(internalSelected));\n const sortColumn = controlledSortColumn !== undefined ? controlledSortColumn : internalSortColumn;\n const sortDirection = controlledSortDirection !== undefined ? controlledSortDirection : internalSortDirection;\n\n const handleSelectAll = (checked: boolean) => {\n if (checked) {\n const allIndices = data.map((_, index) => index);\n setInternalSelected(new Set(allIndices));\n onSelectionChange?.(allIndices);\n } else {\n setInternalSelected(new Set());\n onSelectionChange?.([]);\n }\n };\n\n const handleSelectRow = (index: number, checked: boolean) => {\n const newSelected = new Set(selectedSet);\n if (checked) {\n newSelected.add(index);\n } else {\n newSelected.delete(index);\n }\n setInternalSelected(newSelected);\n onSelectionChange?.(Array.from(newSelected));\n };\n\n const handleSort = (column: string) => {\n const col = columns.find((c) => c.key === column);\n if (!col?.sortable && !sortable) return;\n\n let newDirection: SortDirection = 'asc';\n\n if (sortColumn === column) {\n if (sortDirection === 'asc') {\n newDirection = 'desc';\n } else if (sortDirection === 'desc') {\n newDirection = null;\n }\n }\n\n if (onSort) {\n onSort(column, newDirection);\n } else {\n setInternalSortColumn(newDirection ? column : null);\n setInternalSortDirection(newDirection);\n }\n };\n\n const isAllSelected = data.length > 0 && selectedSet.size === data.length;\n const isSomeSelected = selectedSet.size > 0 && selectedSet.size < data.length;\n\n const tableStyles: React.CSSProperties = {\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: '14px',\n ...style,\n };\n\n const thStyles: React.CSSProperties = {\n padding: '12px',\n textAlign: 'left',\n borderBottom: '2px solid #e5e7eb',\n fontWeight: 600,\n backgroundColor: '#f9fafb',\n };\n\n const sortButtonStyles: React.CSSProperties = {\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n font: 'inherit',\n fontWeight: 600,\n padding: 0,\n width: '100%',\n };\n\n const tdStyles: React.CSSProperties = {\n padding: '12px',\n borderBottom: '1px solid #e5e7eb',\n };\n\n const rowStyles = (isSelected: boolean): React.CSSProperties => ({\n backgroundColor: isSelected ? '#eff6ff' : 'transparent',\n });\n\n const getSortIcon = (column: string): string => {\n if (sortColumn !== column) return '⇅';\n if (sortDirection === 'asc') return '↑';\n if (sortDirection === 'desc') return '↓';\n return '⇅';\n };\n\n return (\n <table\n id={tableId}\n className={className}\n style={tableStyles}\n role=\"table\"\n aria-label={caption}\n >\n <caption style={{ padding: '12px', textAlign: 'left', fontWeight: 600, fontSize: '16px' }}>\n {caption}\n </caption>\n <thead>\n <tr>\n {selectable && (\n <th scope=\"col\" style={{ ...thStyles, width: '50px' }}>\n <input\n type=\"checkbox\"\n checked={isAllSelected}\n ref={(el) => {\n if (el) {\n el.indeterminate = isSomeSelected;\n }\n }}\n onChange={(e) => handleSelectAll(e.target.checked)}\n aria-label=\"Select all rows\"\n />\n </th>\n )}\n {columns.map((column) => {\n const isSortable = column.sortable || sortable;\n\n return (\n <th\n key={column.key}\n scope=\"col\"\n style={{ ...thStyles, width: column.width }}\n aria-sort={\n sortColumn === column.key\n ? sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : 'none'\n : undefined\n }\n >\n {isSortable ? (\n <button\n type=\"button\"\n onClick={() => handleSort(column.key)}\n style={sortButtonStyles}\n aria-label={`Sort by ${column.label}`}\n >\n <span>{column.label}</span>\n <span aria-hidden=\"true\">{getSortIcon(column.key)}</span>\n </button>\n ) : (\n column.label\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {data.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length + (selectable ? 1 : 0)}\n style={{ ...tdStyles, textAlign: 'center', color: '#9ca3af' }}\n >\n No data available\n </td>\n </tr>\n ) : (\n data.map((item, index) => {\n const isSelected = selectedSet.has(index);\n const rowKey = getRowKey(item, index);\n\n return (\n <tr key={rowKey} style={rowStyles(isSelected)}>\n {selectable && (\n <td style={tdStyles}>\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={(e) => handleSelectRow(index, e.target.checked)}\n aria-label={`Select row ${index + 1}`}\n />\n </td>\n )}\n {columns.map((column) => (\n <td key={column.key} style={tdStyles}>\n {column.render\n ? column.render(item, index)\n : String(item[column.key] ?? '')}\n </td>\n ))}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n );\n}\n","/**\n * useReducedMotion Hook\n * Detects user's preference for reduced motion\n */\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Detects if the user prefers reduced motion\n * @returns true if the user prefers reduced motion\n *\n * @example\n * ```tsx\n * const prefersReducedMotion = useReducedMotion();\n *\n * <div style={{\n * transition: prefersReducedMotion ? 'none' : 'all 0.3s ease'\n * }}>\n * Content\n * </div>\n * ```\n */\nexport function useReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(() => {\n if (typeof window === 'undefined') return false;\n\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n return mediaQuery.matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n const handleChange = (event: MediaQueryListEvent) => {\n setPrefersReducedMotion(event.matches);\n };\n\n // Modern browsers\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }\n\n // Legacy browsers\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }, []);\n\n return prefersReducedMotion;\n}\n","/**\n * useAnnounce Hook\n * Provides a simple way to make screen reader announcements\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { AriaLivePoliteness } from './use-aria-live';\n\n/**\n * Creates a function to announce messages to screen readers\n * @returns Function to announce messages\n *\n * @example\n * ```tsx\n * const announce = useAnnounce();\n *\n * const handleAddToCart = () => {\n * addItem(item);\n * announce('Item added to cart', 'polite');\n * };\n * ```\n */\nexport function useAnnounce(): (\n message: string,\n politeness?: AriaLivePoliteness,\n) => void {\n const regionRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n // Create a hidden live region if it doesn't exist\n if (!regionRef.current) {\n const region = document.createElement('div');\n region.setAttribute('role', 'status');\n region.setAttribute('aria-live', 'polite');\n region.setAttribute('aria-atomic', 'true');\n region.style.position = 'absolute';\n region.style.left = '-10000px';\n region.style.width = '1px';\n region.style.height = '1px';\n region.style.overflow = 'hidden';\n\n document.body.appendChild(region);\n regionRef.current = region;\n }\n\n return () => {\n if (regionRef.current) {\n document.body.removeChild(regionRef.current);\n regionRef.current = null;\n }\n };\n }, []);\n\n const announce = useCallback(\n (message: string, politeness: AriaLivePoliteness = 'polite') => {\n if (!regionRef.current) return;\n\n // Update aria-live attribute\n regionRef.current.setAttribute('aria-live', politeness);\n\n // Clear the region\n regionRef.current.textContent = '';\n\n // Use setTimeout to ensure the clear is processed first\n setTimeout(() => {\n if (regionRef.current) {\n regionRef.current.textContent = message;\n }\n }, 100);\n\n // Auto-clear after 5 seconds\n setTimeout(() => {\n if (regionRef.current) {\n regionRef.current.textContent = '';\n }\n }, 5100);\n },\n [],\n );\n\n return announce;\n}\n","/**\n * AccessibleCarousel Component\n * Fully accessible carousel with keyboard navigation and proper ARIA attributes\n */\n\nimport React, { useState, useEffect, useRef, type ReactNode } from 'react';\nimport { useId } from '../hooks/use-id';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useAnnounce } from '../hooks/use-announce';\n\nexport interface AccessibleCarouselProps {\n /** Array of carousel items */\n items: ReactNode[];\n /** Whether to auto-play the carousel */\n autoPlay?: boolean;\n /** Interval between slides in milliseconds */\n interval?: number;\n /** Whether to show navigation controls */\n controls?: boolean;\n /** Whether to show slide indicators */\n indicators?: boolean;\n /** Whether to loop back to start/end */\n loop?: boolean;\n /** Optional aria-label */\n ariaLabel?: string;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible carousel component with auto-play and keyboard navigation\n *\n * @example\n * ```tsx\n * const slides = [\n * <div>Slide 1</div>,\n * <div>Slide 2</div>,\n * <div>Slide 3</div>\n * ];\n *\n * <AccessibleCarousel\n * items={slides}\n * autoPlay\n * interval={5000}\n * controls\n * indicators\n * />\n * ```\n */\nexport const AccessibleCarousel: React.FC<AccessibleCarouselProps> = ({\n items,\n autoPlay = false,\n interval = 5000,\n controls = true,\n indicators = true,\n loop = true,\n ariaLabel = 'Carousel',\n className = '',\n style = {},\n}) => {\n const [currentIndex, setCurrentIndex] = useState(0);\n const [isPlaying, setIsPlaying] = useState(autoPlay);\n const [isPaused, setIsPaused] = useState(false);\n\n const carouselId = useId('carousel');\n const regionRef = useRef<HTMLDivElement>(null);\n const intervalRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n const prefersReducedMotion = useReducedMotion();\n const announce = useAnnounce();\n\n const totalSlides = items.length;\n\n useEffect(() => {\n if (isPlaying && !isPaused && !prefersReducedMotion) {\n intervalRef.current = setInterval(() => {\n handleNext();\n }, interval);\n }\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n }\n };\n }, [isPlaying, isPaused, currentIndex, interval, prefersReducedMotion]);\n\n const handlePrevious = () => {\n const newIndex = currentIndex === 0 ? (loop ? totalSlides - 1 : 0) : currentIndex - 1;\n setCurrentIndex(newIndex);\n announce(`Slide ${newIndex + 1} of ${totalSlides}`, 'polite');\n };\n\n const handleNext = () => {\n const newIndex = currentIndex === totalSlides - 1 ? (loop ? 0 : totalSlides - 1) : currentIndex + 1;\n setCurrentIndex(newIndex);\n announce(`Slide ${newIndex + 1} of ${totalSlides}`, 'polite');\n };\n\n const handleGoToSlide = (index: number) => {\n setCurrentIndex(index);\n announce(`Slide ${index + 1} of ${totalSlides}`, 'polite');\n };\n\n const handlePlayPause = () => {\n setIsPlaying(!isPlaying);\n announce(isPlaying ? 'Carousel paused' : 'Carousel playing', 'polite');\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n handlePrevious();\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n handleNext();\n break;\n\n case 'Home':\n event.preventDefault();\n handleGoToSlide(0);\n break;\n\n case 'End':\n event.preventDefault();\n handleGoToSlide(totalSlides - 1);\n break;\n }\n };\n\n const containerStyles: React.CSSProperties = {\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n ...style,\n };\n\n const slidesContainerStyles: React.CSSProperties = {\n display: 'flex',\n transition: prefersReducedMotion ? 'none' : 'transform 0.5s ease-in-out',\n transform: `translateX(-${currentIndex * 100}%)`,\n };\n\n const slideStyles: React.CSSProperties = {\n minWidth: '100%',\n flex: '0 0 auto',\n };\n\n const controlsContainerStyles: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: 0,\n right: 0,\n transform: 'translateY(-50%)',\n display: 'flex',\n justifyContent: 'space-between',\n padding: '0 16px',\n pointerEvents: 'none',\n };\n\n const controlButtonStyles: React.CSSProperties = {\n pointerEvents: 'auto',\n width: '48px',\n height: '48px',\n borderRadius: '50%',\n border: 'none',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n color: '#fff',\n fontSize: '20px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background-color 0.2s',\n };\n\n const indicatorsStyles: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n gap: '8px',\n marginTop: '16px',\n };\n\n const indicatorButtonStyles = (isActive: boolean): React.CSSProperties => ({\n width: '12px',\n height: '12px',\n borderRadius: '50%',\n border: 'none',\n backgroundColor: isActive ? '#3b82f6' : '#d1d5db',\n cursor: 'pointer',\n padding: 0,\n transition: 'background-color 0.2s',\n });\n\n const playPauseButtonStyles: React.CSSProperties = {\n position: 'absolute',\n bottom: '16px',\n right: '16px',\n padding: '8px 16px',\n borderRadius: '4px',\n border: 'none',\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n color: '#fff',\n fontSize: '14px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n };\n\n return (\n <section\n ref={regionRef}\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n className={className}\n onMouseEnter={() => setIsPaused(true)}\n onMouseLeave={() => setIsPaused(false)}\n onFocus={() => setIsPaused(true)}\n onBlur={() => setIsPaused(false)}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n >\n <div style={containerStyles}>\n <div\n id={`${carouselId}-slides`}\n style={slidesContainerStyles}\n aria-live=\"polite\"\n aria-atomic=\"false\"\n >\n {items.map((item, index) => (\n <div\n key={index}\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`Slide ${index + 1} of ${totalSlides}`}\n aria-hidden={index !== currentIndex}\n style={slideStyles}\n >\n {item}\n </div>\n ))}\n </div>\n\n {controls && (\n <div style={controlsContainerStyles}>\n <button\n type=\"button\"\n onClick={handlePrevious}\n aria-label=\"Previous slide\"\n aria-controls={`${carouselId}-slides`}\n disabled={!loop && currentIndex === 0}\n style={{\n ...controlButtonStyles,\n opacity: !loop && currentIndex === 0 ? 0.5 : 1,\n cursor: !loop && currentIndex === 0 ? 'not-allowed' : 'pointer',\n }}\n onMouseEnter={(e) => {\n if (loop || currentIndex !== 0) {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n }}\n >\n ‹\n </button>\n <button\n type=\"button\"\n onClick={handleNext}\n aria-label=\"Next slide\"\n aria-controls={`${carouselId}-slides`}\n disabled={!loop && currentIndex === totalSlides - 1}\n style={{\n ...controlButtonStyles,\n opacity: !loop && currentIndex === totalSlides - 1 ? 0.5 : 1,\n cursor: !loop && currentIndex === totalSlides - 1 ? 'not-allowed' : 'pointer',\n }}\n onMouseEnter={(e) => {\n if (loop || currentIndex !== totalSlides - 1) {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n }}\n >\n ›\n </button>\n </div>\n )}\n\n {autoPlay && (\n <button\n type=\"button\"\n onClick={handlePlayPause}\n aria-label={isPlaying ? 'Pause carousel' : 'Play carousel'}\n style={playPauseButtonStyles}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.9)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n }}\n >\n {isPlaying ? '⏸' : '▶'} {isPlaying ? 'Pause' : 'Play'}\n </button>\n )}\n </div>\n\n {indicators && (\n <div role=\"group\" aria-label=\"Slide indicators\" style={indicatorsStyles}>\n {items.map((_, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => handleGoToSlide(index)}\n aria-label={`Go to slide ${index + 1}`}\n aria-current={index === currentIndex ? 'true' : 'false'}\n style={indicatorButtonStyles(index === currentIndex)}\n onMouseEnter={(e) => {\n if (index !== currentIndex) {\n e.currentTarget.style.backgroundColor = '#9ca3af';\n }\n }}\n onMouseLeave={(e) => {\n if (index !== currentIndex) {\n e.currentTarget.style.backgroundColor = '#d1d5db';\n }\n }}\n />\n ))}\n </div>\n )}\n </section>\n );\n};\n","/**\n * AccessibleDrawer Component\n * Accessible drawer/sidebar with focus trap and proper ARIA attributes\n */\n\nimport React, { useEffect, type ReactNode } from 'react';\nimport { useId } from '../hooks/use-id';\nimport { useFocusTrap } from '../hooks/use-focus-trap';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport type DrawerSide = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface AccessibleDrawerProps {\n /** Whether the drawer is open */\n isOpen: boolean;\n /** Callback when drawer should close */\n onClose: () => void;\n /** Side from which the drawer appears */\n side?: DrawerSide;\n /** Whether drawer is modal (blocks interaction with background) */\n modal?: boolean;\n /** Drawer title */\n title?: string;\n /** Drawer content */\n children: ReactNode;\n /** Optional className for the drawer */\n className?: string;\n /** Optional className for the backdrop */\n backdropClassName?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible drawer/sidebar component with focus trap\n *\n * @example\n * ```tsx\n * const [isOpen, setIsOpen] = useState(false);\n *\n * <AccessibleDrawer\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * side=\"right\"\n * modal\n * title=\"Settings\"\n * >\n * <div>Drawer content here</div>\n * </AccessibleDrawer>\n * ```\n */\nexport const AccessibleDrawer: React.FC<AccessibleDrawerProps> = ({\n isOpen,\n onClose,\n side = 'right',\n modal = true,\n title,\n children,\n className = '',\n backdropClassName = '',\n style = {},\n}) => {\n const drawerId = useId('drawer');\n const titleId = useId('drawer-title');\n\n const { trapRef } = useFocusTrap({\n isActive: isOpen && modal,\n onEscape: onClose,\n });\n\n const prefersReducedMotion = useReducedMotion();\n\n useEffect(() => {\n if (isOpen && modal) {\n // Prevent body scroll when modal drawer is open\n const originalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = originalOverflow;\n };\n }\n }, [isOpen, modal]);\n\n if (!isOpen) return null;\n\n const getDrawerPosition = (): React.CSSProperties => {\n const baseStyles: React.CSSProperties = {\n position: 'fixed',\n zIndex: 1000,\n backgroundColor: '#fff',\n boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',\n transition: prefersReducedMotion ? 'none' : 'transform 0.3s ease-in-out',\n };\n\n switch (side) {\n case 'left':\n return {\n ...baseStyles,\n top: 0,\n left: 0,\n bottom: 0,\n width: '320px',\n maxWidth: '80vw',\n };\n case 'right':\n return {\n ...baseStyles,\n top: 0,\n right: 0,\n bottom: 0,\n width: '320px',\n maxWidth: '80vw',\n };\n case 'top':\n return {\n ...baseStyles,\n top: 0,\n left: 0,\n right: 0,\n height: '320px',\n maxHeight: '80vh',\n };\n case 'bottom':\n return {\n ...baseStyles,\n bottom: 0,\n left: 0,\n right: 0,\n height: '320px',\n maxHeight: '80vh',\n };\n default:\n return baseStyles;\n }\n };\n\n const backdropStyles: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 999,\n opacity: isOpen ? 1 : 0,\n transition: prefersReducedMotion ? 'none' : 'opacity 0.3s ease-in-out',\n };\n\n const drawerStyles: React.CSSProperties = {\n ...getDrawerPosition(),\n display: 'flex',\n flexDirection: 'column',\n overflowY: 'auto',\n ...style,\n };\n\n const headerStyles: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '16px 20px',\n borderBottom: '1px solid #e5e7eb',\n };\n\n const titleStyles: React.CSSProperties = {\n fontSize: '18px',\n fontWeight: 600,\n margin: 0,\n };\n\n const closeButtonStyles: React.CSSProperties = {\n width: '32px',\n height: '32px',\n borderRadius: '4px',\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '20px',\n transition: 'background-color 0.2s',\n };\n\n const contentStyles: React.CSSProperties = {\n flex: 1,\n padding: '20px',\n overflowY: 'auto',\n };\n\n return (\n <>\n {modal && (\n <div\n className={backdropClassName}\n style={backdropStyles}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n )}\n <div\n ref={modal ? (trapRef as React.RefObject<HTMLDivElement>) : null}\n id={drawerId}\n role=\"dialog\"\n aria-modal={modal}\n aria-labelledby={title ? titleId : undefined}\n className={className}\n style={drawerStyles}\n >\n <div style={headerStyles}>\n {title && (\n <h2 id={titleId} style={titleStyles}>\n {title}\n </h2>\n )}\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close drawer\"\n style={closeButtonStyles}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n ×\n </button>\n </div>\n <div style={contentStyles}>{children}</div>\n </div>\n </>\n );\n};\n","/**\n * @a13y/react - useAccessibleForm Hook\n * Form management with accessibility built-in\n */\n\nimport { announce } from '@a13y/core/runtime/announce';\nimport { useCallback, useRef, useState } from 'react';\n\n/**\n * Field-level validation function\n */\nexport type FieldValidator<T> = (value: T) => string | true;\n\n/**\n * Form-level validation function (for cross-field validation)\n */\nexport type FormValidator<T> = (values: T) => Record<string, string> | null;\n\n/**\n * Field configuration\n */\nexport interface FieldConfig<T> {\n /**\n * Initial value\n */\n initialValue: T;\n\n /**\n * Validation function (optional)\n * Return true if valid, or error message if invalid\n */\n validate?: FieldValidator<T>;\n\n /**\n * Required field\n * @default false\n */\n required?: boolean;\n\n /**\n * Custom required message\n */\n requiredMessage?: string;\n}\n\n/**\n * Form configuration\n */\nexport interface FormConfig<T extends Record<string, unknown>> {\n /**\n * Field configurations\n */\n fields: {\n [K in keyof T]: FieldConfig<T[K]>;\n };\n\n /**\n * Form-level validation (optional)\n * For cross-field validation\n */\n validate?: FormValidator<T>;\n\n /**\n * Called when form is successfully submitted\n */\n onSubmit: (values: T) => void | Promise<void>;\n\n /**\n * Auto-focus first error on validation failure\n * @default true\n */\n autoFocusError?: boolean;\n\n /**\n * Announce errors to screen readers\n * @default true\n */\n announceErrors?: boolean;\n\n /**\n * Validate on blur\n * @default true\n */\n validateOnBlur?: boolean;\n\n /**\n * Validate on change (after first blur)\n * @default true\n */\n validateOnChange?: boolean;\n}\n\n/**\n * Form state\n */\nexport interface FormState<T extends Record<string, unknown>> {\n /**\n * Current form values\n */\n values: T;\n\n /**\n * Field errors\n */\n errors: Partial<Record<keyof T, string>>;\n\n /**\n * Fields that have been touched (blurred at least once)\n */\n touched: Partial<Record<keyof T, boolean>>;\n\n /**\n * Is form submitting\n */\n isSubmitting: boolean;\n\n /**\n * Is form valid (no errors)\n */\n isValid: boolean;\n\n /**\n * Has form been submitted at least once\n */\n hasSubmitted: boolean;\n}\n\n/**\n * Field props for binding to input elements\n */\nexport interface FieldProps<T> {\n name: string;\n value: T;\n onChange: (value: T) => void;\n onBlur: () => void;\n 'aria-invalid': boolean;\n 'aria-describedby'?: string;\n 'aria-required'?: boolean;\n}\n\n/**\n * Form return value\n */\nexport interface UseAccessibleFormReturn<T extends Record<string, unknown>> {\n /**\n * Form state\n */\n state: FormState<T>;\n\n /**\n * Get props for a field\n */\n getFieldProps: <K extends keyof T>(\n name: K,\n options?: { 'aria-describedby'?: string }\n ) => FieldProps<T[K]>;\n\n /**\n * Set field value programmatically\n */\n setFieldValue: <K extends keyof T>(name: K, value: T[K]) => void;\n\n /**\n * Set field error programmatically\n */\n setFieldError: <K extends keyof T>(name: K, error: string) => void;\n\n /**\n * Set multiple field errors at once\n */\n setErrors: (errors: Partial<Record<keyof T, string>>) => void;\n\n /**\n * Validate a single field\n */\n validateField: <K extends keyof T>(name: K) => boolean;\n\n /**\n * Validate entire form\n */\n validateForm: () => boolean;\n\n /**\n * Handle form submit\n */\n handleSubmit: (e?: React.FormEvent) => void;\n\n /**\n * Reset form to initial values\n */\n reset: () => void;\n\n /**\n * Clear all errors\n */\n clearErrors: () => void;\n\n /**\n * Field refs for focus management\n */\n fieldRefs: Map<keyof T, HTMLElement>;\n}\n\n/**\n * useAccessibleForm Hook\n *\n * Comprehensive form management with accessibility built-in:\n * - Automatic error announcements to screen readers\n * - Auto-focus first error field on validation failure\n * - Required field validation\n * - Field-level and form-level validation\n * - aria-invalid and aria-describedby management\n * - Touch tracking for better UX\n *\n * Pattern Explanation:\n * - Each field gets automatic ARIA attributes\n * - Errors are announced via screen reader\n * - First error field receives focus on submit\n * - Validation can run on blur or change\n * - Required fields enforced via TypeScript\n *\n * @example\n * ```tsx\n * const form = useAccessibleForm({\n * fields: {\n * email: {\n * initialValue: '',\n * required: true,\n * validate: (value) => {\n * if (!value.includes('@')) return 'Invalid email';\n * return true;\n * },\n * },\n * password: {\n * initialValue: '',\n * required: true,\n * validate: (value) => {\n * if (value.length < 8) return 'Password must be at least 8 characters';\n * return true;\n * },\n * },\n * },\n * onSubmit: (values) => {\n * console.log('Form submitted:', values);\n * },\n * });\n *\n * return (\n * <form onSubmit={form.handleSubmit}>\n * <input {...form.getFieldProps('email')} type=\"email\" />\n * {form.state.errors.email && (\n * <span id=\"email-error\">{form.state.errors.email}</span>\n * )}\n * </form>\n * );\n * ```\n */\nexport const useAccessibleForm = <T extends Record<string, unknown>>(\n config: FormConfig<T>\n): UseAccessibleFormReturn<T> => {\n const {\n fields,\n validate: formValidator,\n onSubmit,\n autoFocusError = true,\n announceErrors = true,\n validateOnBlur = true,\n validateOnChange = true,\n } = config;\n\n // Initialize form values from field configs\n const initialValues = Object.keys(fields).reduce((acc, key) => {\n acc[key as keyof T] = fields[key as keyof T].initialValue;\n return acc;\n }, {} as T);\n\n const [values, setValues] = useState<T>(initialValues);\n const [errors, setErrors] = useState<Partial<Record<keyof T, string>>>({});\n const [touched, setTouched] = useState<Partial<Record<keyof T, boolean>>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [hasSubmitted, setHasSubmitted] = useState(false);\n\n // Field refs for focus management\n const fieldRefs = useRef<Map<keyof T, HTMLElement>>(new Map());\n\n // Validate a single field\n const validateField = useCallback(\n <K extends keyof T>(name: K): boolean => {\n const fieldConfig = fields[name];\n const value = values[name];\n\n // Check required\n if (fieldConfig.required) {\n const isEmpty =\n value === '' ||\n value === null ||\n value === undefined ||\n (Array.isArray(value) && value.length === 0);\n\n if (isEmpty) {\n const errorMessage = fieldConfig.requiredMessage || `${String(name)} is required`;\n setErrors((prev) => ({ ...prev, [name]: errorMessage }));\n return false;\n }\n }\n\n // Run custom validator\n if (fieldConfig.validate) {\n const result = fieldConfig.validate(value);\n if (result !== true) {\n setErrors((prev) => ({ ...prev, [name]: result }));\n return false;\n }\n }\n\n // Clear error if valid\n setErrors((prev) => {\n const newErrors = { ...prev };\n delete newErrors[name];\n return newErrors;\n });\n return true;\n },\n [fields, values]\n );\n\n // Validate entire form\n const validateForm = useCallback((): boolean => {\n let isValid = true;\n const newErrors: Partial<Record<keyof T, string>> = {};\n\n // Validate all fields\n for (const name of Object.keys(fields) as Array<keyof T>) {\n const fieldConfig = fields[name];\n const value = values[name];\n\n // Check required\n if (fieldConfig.required) {\n const isEmpty =\n value === '' ||\n value === null ||\n value === undefined ||\n (Array.isArray(value) && value.length === 0);\n\n if (isEmpty) {\n const errorMessage = fieldConfig.requiredMessage || `${String(name)} is required`;\n newErrors[name] = errorMessage;\n isValid = false;\n continue;\n }\n }\n\n // Run custom validator\n if (fieldConfig.validate) {\n const result = fieldConfig.validate(value);\n if (result !== true) {\n newErrors[name] = result;\n isValid = false;\n }\n }\n }\n\n // Run form-level validator\n if (formValidator) {\n const formErrors = formValidator(values);\n if (formErrors) {\n Object.assign(newErrors, formErrors);\n isValid = false;\n }\n }\n\n setErrors(newErrors);\n return isValid;\n }, [fields, values, formValidator]);\n\n // Set field value\n const setFieldValue = useCallback(<K extends keyof T>(name: K, value: T[K]) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n }, []);\n\n // Set field error\n const setFieldError = useCallback(<K extends keyof T>(name: K, error: string) => {\n setErrors((prev) => ({ ...prev, [name]: error }));\n }, []);\n\n // Get field props\n const getFieldProps = useCallback(\n <K extends keyof T>(name: K, options?: { 'aria-describedby'?: string }): FieldProps<T[K]> => {\n const fieldConfig = fields[name];\n const hasError = !!errors[name];\n const errorId = `${String(name)}-error`;\n\n return {\n name: String(name),\n value: values[name],\n onChange: (value: T[K]) => {\n setFieldValue(name, value);\n // Validate on change if field has been touched\n if (validateOnChange && touched[name]) {\n validateField(name);\n }\n },\n onBlur: () => {\n setTouched((prev) => ({ ...prev, [name]: true }));\n if (validateOnBlur) {\n validateField(name);\n }\n },\n 'aria-invalid': hasError,\n 'aria-describedby': hasError\n ? options?.['aria-describedby']\n ? `${errorId} ${options['aria-describedby']}`\n : errorId\n : options?.['aria-describedby'],\n 'aria-required': fieldConfig.required,\n };\n },\n [\n fields,\n values,\n errors,\n touched,\n setFieldValue,\n validateField,\n validateOnBlur,\n validateOnChange,\n ]\n );\n\n // Handle form submit\n const handleSubmit = useCallback(\n async (e?: React.FormEvent) => {\n e?.preventDefault();\n\n setHasSubmitted(true);\n const isValid = validateForm();\n\n if (!isValid) {\n // Count errors\n const errorCount = Object.keys(errors).length;\n\n // Announce errors to screen reader\n if (announceErrors) {\n const errorMessage =\n errorCount === 1\n ? 'Form has 1 error. Please correct it and try again.'\n : `Form has ${errorCount} errors. Please correct them and try again.`;\n announce(errorMessage, { politeness: 'assertive' });\n }\n\n // Focus first error field\n if (autoFocusError) {\n const firstErrorField = Object.keys(errors)[0] as keyof T;\n const fieldElement = fieldRefs.current.get(firstErrorField);\n if (fieldElement) {\n fieldElement.focus();\n }\n }\n\n return;\n }\n\n // Submit form\n setIsSubmitting(true);\n try {\n await onSubmit(values);\n announce('Form submitted successfully', { politeness: 'polite' });\n } catch (error) {\n if (announceErrors) {\n announce('Form submission failed. Please try again.', {\n politeness: 'assertive',\n });\n }\n throw error;\n } finally {\n setIsSubmitting(false);\n }\n },\n [validateForm, errors, announceErrors, autoFocusError, onSubmit, values]\n );\n\n // Reset form\n const reset = useCallback(() => {\n setValues(initialValues);\n setErrors({});\n setTouched({});\n setHasSubmitted(false);\n }, [initialValues]);\n\n // Clear all errors\n const clearErrors = useCallback(() => {\n setErrors({});\n }, []);\n\n const isValid = Object.keys(errors).length === 0;\n\n return {\n state: {\n values,\n errors,\n touched,\n isSubmitting,\n isValid,\n hasSubmitted,\n },\n getFieldProps,\n setFieldValue,\n setFieldError,\n setErrors,\n validateField,\n validateForm,\n handleSubmit,\n reset,\n clearErrors,\n fieldRefs: fieldRefs.current,\n };\n};\n","/**\n * @a13y/react - useFormField Hook\n * Individual form field management with accessibility built-in\n */\n\nimport { announce } from '@a13y/core/runtime/announce';\nimport { useCallback, useEffect, useId, useRef, useState } from 'react';\n\n/**\n * Props for useFormField\n */\nexport interface UseFormFieldProps<T = string> {\n /**\n * Field label (required for accessibility)\n * This will be used as the accessible name\n */\n label: string;\n\n /**\n * Initial field value\n */\n initialValue?: T;\n\n /**\n * Validation function\n * Return true if valid, or error message if invalid\n */\n validate?: (value: T) => string | true;\n\n /**\n * Is field required\n * @default false\n */\n required?: boolean;\n\n /**\n * Custom required message\n */\n requiredMessage?: string;\n\n /**\n * Help text to display\n */\n helpText?: string;\n\n /**\n * Validate on blur\n * @default true\n */\n validateOnBlur?: boolean;\n\n /**\n * Validate on change (after first blur)\n * @default true\n */\n validateOnChange?: boolean;\n\n /**\n * Announce errors to screen readers\n * @default true\n */\n announceErrors?: boolean;\n\n /**\n * Called when value changes\n */\n onChange?: (value: T) => void;\n\n /**\n * Called when field is blurred\n */\n onBlur?: () => void;\n}\n\n/**\n * Return value from useFormField\n */\nexport interface UseFormFieldReturn<T = string> {\n /**\n * Field ID (generated)\n */\n id: string;\n\n /**\n * Label ID (generated)\n */\n labelId: string;\n\n /**\n * Error message ID (generated)\n */\n errorId: string;\n\n /**\n * Help text ID (generated)\n */\n helpTextId: string;\n\n /**\n * Current field value\n */\n value: T;\n\n /**\n * Current error message (if any)\n */\n error: string | null;\n\n /**\n * Has field been touched (blurred at least once)\n */\n isTouched: boolean;\n\n /**\n * Is field valid\n */\n isValid: boolean;\n\n /**\n * Set field value\n */\n setValue: (value: T) => void;\n\n /**\n * Set field error\n */\n setError: (error: string | null) => void;\n\n /**\n * Validate field\n */\n validate: () => boolean;\n\n /**\n * Clear error\n */\n clearError: () => void;\n\n /**\n * Reset field to initial value\n */\n reset: () => void;\n\n /**\n * Props for label element\n */\n labelProps: {\n id: string;\n htmlFor: string;\n };\n\n /**\n * Props for input element\n */\n inputProps: {\n id: string;\n name: string;\n value: T;\n onChange: (value: T) => void;\n onBlur: () => void;\n 'aria-labelledby': string;\n 'aria-describedby'?: string;\n 'aria-invalid': boolean;\n 'aria-required'?: boolean;\n ref: React.RefObject<HTMLInputElement | null>;\n };\n\n /**\n * Props for error message element\n */\n errorProps: {\n id: string;\n role: 'alert';\n 'aria-live': 'polite';\n };\n\n /**\n * Props for help text element\n */\n helpTextProps: {\n id: string;\n };\n\n /**\n * Field ref for focus management\n */\n fieldRef: React.RefObject<HTMLInputElement | null>;\n}\n\n/**\n * useFormField Hook\n *\n * Manages a single form field with accessibility built-in:\n * - Required label via TypeScript\n * - Automatic ARIA attributes\n * - Error announcements to screen readers\n * - Help text support\n * - Validation on blur/change\n * - ID generation for ARIA relationships\n *\n * Pattern Explanation:\n * - Label is required (enforced at compile-time)\n * - aria-labelledby automatically connects label to input\n * - aria-describedby automatically connects errors and help text\n * - aria-invalid automatically set when error exists\n * - Errors announced to screen readers when they appear\n *\n * @example\n * ```tsx\n * const emailField = useFormField({\n * label: 'Email Address',\n * required: true,\n * validate: (value) => {\n * if (!value.includes('@')) return 'Invalid email address';\n * return true;\n * },\n * helpText: 'We will never share your email',\n * });\n *\n * return (\n * <div>\n * <label {...emailField.labelProps}>{emailField.label}</label>\n * <input\n * {...emailField.inputProps}\n * type=\"email\"\n * onChange={(e) => emailField.inputProps.onChange(e.target.value)}\n * />\n * {emailField.helpText && (\n * <span {...emailField.helpTextProps}>{emailField.helpText}</span>\n * )}\n * {emailField.error && (\n * <span {...emailField.errorProps}>{emailField.error}</span>\n * )}\n * </div>\n * );\n * ```\n */\nexport const useFormField = <T = string>(props: UseFormFieldProps<T>): UseFormFieldReturn<T> => {\n const {\n label,\n initialValue = '' as T,\n validate: validator,\n required = false,\n requiredMessage,\n helpText,\n validateOnBlur = true,\n validateOnChange = true,\n announceErrors = true,\n onChange,\n onBlur,\n } = props;\n\n // Development-time validation\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n if (!label || label.trim().length === 0) {\n throw new Error('@a13y/react [useFormField]: \"label\" prop is required for accessibility');\n }\n }\n\n const [value, setValue] = useState<T>(initialValue);\n const [error, setError] = useState<string | null>(null);\n const [isTouched, setIsTouched] = useState(false);\n\n const fieldRef = useRef<HTMLInputElement>(null);\n\n // Generate unique IDs\n const id = useId();\n const labelId = `${id}-label`;\n const errorId = `${id}-error`;\n const helpTextId = `${id}-help`;\n\n // Validate field\n const validate = useCallback((): boolean => {\n // Check required\n if (required) {\n const isEmpty =\n value === '' ||\n value === null ||\n value === undefined ||\n (Array.isArray(value) && value.length === 0);\n\n if (isEmpty) {\n const errorMessage = requiredMessage || `${label} is required`;\n setError(errorMessage);\n return false;\n }\n }\n\n // Run custom validator\n if (validator) {\n const result = validator(value);\n if (result !== true) {\n setError(result);\n return false;\n }\n }\n\n // Clear error if valid\n setError(null);\n return true;\n }, [value, required, validator, label, requiredMessage]);\n\n // Announce error to screen reader when it changes\n useEffect(() => {\n if (error && isTouched && announceErrors) {\n announce(error, { politeness: 'assertive', delay: 100 });\n }\n }, [error, isTouched, announceErrors]);\n\n // Handle value change\n const handleChange = useCallback(\n (newValue: T) => {\n setValue(newValue);\n onChange?.(newValue);\n\n // Validate on change if field has been touched\n if (validateOnChange && isTouched) {\n // Validate in next tick to ensure state is updated\n setTimeout(() => validate(), 0);\n }\n },\n [onChange, validateOnChange, isTouched, validate]\n );\n\n // Handle blur\n const handleBlur = useCallback(() => {\n setIsTouched(true);\n onBlur?.();\n\n if (validateOnBlur) {\n validate();\n }\n }, [onBlur, validateOnBlur, validate]);\n\n // Clear error\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n // Reset field\n const reset = useCallback(() => {\n setValue(initialValue);\n setError(null);\n setIsTouched(false);\n }, [initialValue]);\n\n const isValid = error === null;\n\n // Build aria-describedby\n const describedBy = [helpText ? helpTextId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ');\n\n return {\n id,\n labelId,\n errorId,\n helpTextId,\n value,\n error,\n isTouched,\n isValid,\n setValue: handleChange,\n setError,\n validate,\n clearError,\n reset,\n labelProps: {\n id: labelId,\n htmlFor: id,\n },\n inputProps: {\n id,\n name: id,\n value,\n onChange: handleChange,\n onBlur: handleBlur,\n 'aria-labelledby': labelId,\n 'aria-describedby': describedBy || undefined,\n 'aria-invalid': !isValid,\n 'aria-required': required ? true : undefined,\n ref: fieldRef,\n },\n errorProps: {\n id: errorId,\n role: 'alert',\n 'aria-live': 'polite',\n },\n helpTextProps: {\n id: helpTextId,\n },\n fieldRef,\n };\n};\n\n/**\n * Helper type to ensure label is provided\n * Use this in component props to enforce accessible labels\n */\nexport type RequireLabel<T> = T & {\n label: string;\n};\n","/**\n * useMediaQuery Hook\n * Tracks the state of a CSS media query\n */\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Tracks whether a media query matches\n * @param query - CSS media query string\n * @returns true if the media query matches\n *\n * @example\n * ```tsx\n * const isMobile = useMediaQuery('(max-width: 768px)');\n * const prefersDark = useMediaQuery('(prefers-color-scheme: dark)');\n *\n * {isMobile ? <MobileView /> : <DesktopView />}\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') return false;\n\n const mediaQuery = window.matchMedia(query);\n return mediaQuery.matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia(query);\n\n // Set initial value\n setMatches(mediaQuery.matches);\n\n const handleChange = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n // Modern browsers\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }\n\n // Legacy browsers\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }, [query]);\n\n return matches;\n}\n","/**\n * @a13y/react - DialogStack Pattern\n * Manages nested modals with proper focus restoration and z-index layering\n */\n\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useEffect, useState } from 'react';\nimport { AccessibleDialog } from '../components/AccessibleDialog';\n\n/**\n * Dialog in the stack\n */\ninterface StackedDialog {\n id: string;\n title: string;\n content: ReactNode;\n description?: string;\n onClose: () => void;\n zIndex: number;\n}\n\n/**\n * Dialog stack context\n */\ninterface DialogStackContextValue {\n /**\n * Push a new dialog onto the stack\n */\n push: (dialog: Omit<StackedDialog, 'zIndex'>) => void;\n\n /**\n * Pop the topmost dialog\n */\n pop: () => void;\n\n /**\n * Close a specific dialog by ID\n */\n close: (id: string) => void;\n\n /**\n * Close all dialogs\n */\n closeAll: () => void;\n\n /**\n * Current stack depth\n */\n depth: number;\n}\n\nconst DialogStackContext = createContext<DialogStackContextValue | null>(null);\n\n/**\n * Hook to access dialog stack\n */\nexport const useDialogStack = (): DialogStackContextValue => {\n const context = useContext(DialogStackContext);\n if (!context) {\n throw new Error('useDialogStack must be used within DialogStackProvider');\n }\n return context;\n};\n\n/**\n * Props for DialogStackProvider\n */\nexport interface DialogStackProviderProps {\n children: ReactNode;\n /**\n * Base z-index for dialogs\n * @default 1000\n */\n baseZIndex?: number;\n /**\n * Z-index increment between layers\n * @default 10\n */\n zIndexIncrement?: number;\n}\n\n/**\n * Dialog Stack Provider\n *\n * Manages a stack of nested dialogs with:\n * - Automatic z-index management\n * - Focus restoration chain\n * - Escape key closes topmost dialog only\n * - Backdrop isolation per layer\n *\n * Pattern Explanation:\n * - Each dialog gets a unique z-index: base + (depth * increment)\n * - Focus is trapped in the topmost dialog\n * - When a dialog closes, focus returns to the previous dialog\n * - Escape key only affects the topmost dialog\n * - Body scroll is locked when any dialog is open\n *\n * @example\n * ```tsx\n * function App() {\n * return (\n * <DialogStackProvider>\n * <MyComponent />\n * </DialogStackProvider>\n * );\n * }\n *\n * function MyComponent() {\n * const { push, pop } = useDialogStack();\n *\n * return (\n * <button onClick={() => push({\n * id: 'dialog1',\n * title: 'First Dialog',\n * content: <SecondLevelDialog />,\n * onClose: () => pop(),\n * })}>\n * Open Dialog\n * </button>\n * );\n * }\n *\n * function SecondLevelDialog() {\n * const { push, pop } = useDialogStack();\n *\n * return (\n * <button onClick={() => push({\n * id: 'dialog2',\n * title: 'Nested Dialog',\n * content: <p>This is nested!</p>,\n * onClose: () => pop(),\n * })}>\n * Open Nested Dialog\n * </button>\n * );\n * }\n * ```\n */\nexport const DialogStackProvider = (props: DialogStackProviderProps) => {\n const { children, baseZIndex = 1000, zIndexIncrement = 10 } = props;\n\n const [stack, setStack] = useState<StackedDialog[]>([]);\n\n const push = (dialog: Omit<StackedDialog, 'zIndex'>) => {\n const zIndex = baseZIndex + stack.length * zIndexIncrement;\n setStack((prev) => [...prev, { ...dialog, zIndex }]);\n };\n\n const pop = () => {\n setStack((prev) => {\n const newStack = [...prev];\n const dialog = newStack.pop();\n dialog?.onClose();\n return newStack;\n });\n };\n\n const close = (id: string) => {\n setStack((prev) => {\n const index = prev.findIndex((d) => d.id === id);\n if (index === -1) return prev;\n\n // Close this dialog and all dialogs above it\n const closedDialogs = prev.slice(index);\n for (const d of closedDialogs) {\n d.onClose();\n }\n\n return prev.slice(0, index);\n });\n };\n\n const closeAll = () => {\n for (const d of stack) {\n d.onClose();\n }\n setStack([]);\n };\n\n // Body scroll lock when stack is not empty\n useEffect(() => {\n if (stack.length > 0) {\n const originalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = originalOverflow;\n };\n }\n }, [stack.length]);\n\n const contextValue: DialogStackContextValue = {\n push,\n pop,\n close,\n closeAll,\n depth: stack.length,\n };\n\n return (\n <DialogStackContext.Provider value={contextValue}>\n {children}\n\n {/* Render all dialogs in the stack */}\n {stack.map((dialog) => (\n <div key={dialog.id} style={{ zIndex: dialog.zIndex }}>\n <AccessibleDialog\n isOpen={true}\n onClose={() => close(dialog.id)}\n title={dialog.title}\n description={dialog.description}\n backdropClassName=\"dialog-stack-backdrop\"\n >\n {dialog.content}\n </AccessibleDialog>\n </div>\n ))}\n </DialogStackContext.Provider>\n );\n};\n","/**\n * @a13y/react - InfiniteList Pattern\n * Accessible infinite scroll with lazy loading\n */\n\nimport { announce } from '@a13y/core/runtime/announce';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\n/**\n * Props for InfiniteList\n */\nexport interface InfiniteListProps<T> {\n /**\n * Current items in the list\n */\n items: T[];\n\n /**\n * Function to load more items\n * Should return a promise that resolves to new items\n */\n loadMore: () => Promise<T[]>;\n\n /**\n * Check if there are more items to load\n */\n hasMore: boolean;\n\n /**\n * Check if currently loading\n */\n isLoading: boolean;\n\n /**\n * Render function for each item\n */\n renderItem: (item: T, index: number) => ReactNode;\n\n /**\n * Unique key extractor\n */\n getItemKey: (item: T, index: number) => string;\n\n /**\n * Loading indicator\n */\n loadingIndicator?: ReactNode;\n\n /**\n * Empty state\n */\n emptyState?: ReactNode;\n\n /**\n * Accessible label for the list\n */\n 'aria-label': string;\n\n /**\n * Distance from bottom to trigger load (px)\n * @default 200\n */\n threshold?: number;\n\n /**\n * Custom className\n */\n className?: string;\n}\n\n/**\n * Infinite List Component\n *\n * Accessible infinite scroll with:\n * - Intersection Observer for lazy loading\n * - Screen reader announcements for new items\n * - Keyboard navigation (Tab through items)\n * - Loading states announced\n * - Total count announcements\n *\n * Pattern Explanation:\n * - Uses Intersection Observer to detect when user scrolls near bottom\n * - Announces new items loaded to screen readers\n * - Maintains focus position when new items are added\n * - Works with keyboard navigation (no mouse required)\n * - Provides loading and empty states\n *\n * @example\n * ```tsx\n * const [items, setItems] = useState<Item[]>([]);\n * const [hasMore, setHasMore] = useState(true);\n * const [isLoading, setIsLoading] = useState(false);\n *\n * const loadMore = async () => {\n * setIsLoading(true);\n * const newItems = await fetchItems(items.length, 20);\n * setItems([...items, ...newItems]);\n * setHasMore(newItems.length === 20);\n * setIsLoading(false);\n * return newItems;\n * };\n *\n * return (\n * <InfiniteList\n * items={items}\n * loadMore={loadMore}\n * hasMore={hasMore}\n * isLoading={isLoading}\n * renderItem={(item) => <ItemCard item={item} />}\n * getItemKey={(item) => item.id}\n * aria-label=\"Products list\"\n * />\n * );\n * ```\n */\nexport const InfiniteList = <T,>(props: InfiniteListProps<T>) => {\n const {\n items,\n loadMore,\n hasMore,\n isLoading,\n renderItem,\n getItemKey,\n loadingIndicator,\n emptyState,\n 'aria-label': ariaLabel,\n threshold = 200,\n className = '',\n } = props;\n\n const [previousCount, setPreviousCount] = useState(items.length);\n const sentinelRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n // Announce new items to screen readers\n useEffect(() => {\n if (items.length > previousCount && !isLoading) {\n const newItemsCount = items.length - previousCount;\n announce(\n `${newItemsCount} new item${newItemsCount === 1 ? '' : 's'} loaded. Total: ${items.length}`,\n { politeness: 'polite', delay: 500 }\n );\n setPreviousCount(items.length);\n }\n }, [items.length, previousCount, isLoading]);\n\n // Announce loading state\n useEffect(() => {\n if (isLoading) {\n announce('Loading more items', { politeness: 'polite' });\n }\n }, [isLoading]);\n\n // Intersection Observer for infinite scroll\n useEffect(() => {\n if (!hasMore || isLoading || !sentinelRef.current) {\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n const sentinel = entries[0];\n if (sentinel?.isIntersecting) {\n loadMore();\n }\n },\n {\n root: null,\n rootMargin: `${threshold}px`,\n threshold: 0,\n }\n );\n\n observer.observe(sentinelRef.current);\n\n return () => observer.disconnect();\n }, [hasMore, isLoading, loadMore, threshold]);\n\n // Empty state\n if (items.length === 0 && !isLoading) {\n return (\n <div role=\"status\" aria-live=\"polite\">\n {emptyState || <p>No items to display</p>}\n </div>\n );\n }\n\n return (\n <div ref={listRef} className={className}>\n {/* List */}\n <div role=\"list\" aria-label={ariaLabel} aria-busy={isLoading}>\n {items.map((item, index) => (\n <div key={getItemKey(item, index)} role=\"listitem\">\n {renderItem(item, index)}\n </div>\n ))}\n </div>\n\n {/* Loading indicator */}\n {isLoading && (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading more items\"\n style={{\n padding: '1rem',\n textAlign: 'center',\n }}\n >\n {loadingIndicator || <span>Loading...</span>}\n </div>\n )}\n\n {/* Sentinel for intersection observer */}\n {hasMore && !isLoading && (\n <div ref={sentinelRef} aria-hidden=\"true\" style={{ height: '1px', visibility: 'hidden' }} />\n )}\n\n {/* End message */}\n {!hasMore && items.length > 0 && (\n <div\n role=\"status\"\n aria-live=\"polite\"\n style={{\n padding: '1rem',\n textAlign: 'center',\n color: '#6b7280',\n fontSize: '0.875rem',\n }}\n >\n End of list. Total: {items.length} items.\n </div>\n )}\n </div>\n );\n};\n","/**\n * @a13y/react - NestedMenu Pattern\n * Multi-level dropdown menu with keyboard navigation\n */\n\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { useAccessibleButton } from '../hooks/use-accessible-button';\nimport { useKeyboardNavigation } from '../hooks/use-keyboard-navigation';\n\n/**\n * Menu item with optional submenu\n */\nexport interface NestedMenuItem {\n id: string;\n label: string;\n icon?: ReactNode;\n disabled?: boolean;\n /**\n * Action when item is selected\n * Omit for items with submenu\n */\n onPress?: () => void;\n /**\n * Submenu items\n */\n submenu?: NestedMenuItem[];\n}\n\n/**\n * Props for NestedMenu\n */\nexport interface NestedMenuProps {\n /**\n * Menu trigger label for screen readers\n */\n label: string;\n /**\n * Trigger content\n */\n trigger: ReactNode;\n /**\n * Menu items (can have nested submenus)\n */\n items: NestedMenuItem[];\n /**\n * Custom className for trigger\n */\n className?: string;\n}\n\n/**\n * Nested Menu Component\n *\n * Multi-level dropdown menu with full keyboard navigation:\n * - Arrow Up/Down: Navigate items\n * - Arrow Right: Open submenu\n * - Arrow Left: Close submenu and return to parent\n * - Enter/Space: Select item or open submenu\n * - Escape: Close current menu level\n *\n * Pattern Explanation:\n * - Each submenu level maintains its own navigation state\n * - Arrow Right on item with submenu opens it\n * - Arrow Left closes submenu and returns focus to parent item\n * - Screen readers announce submenu availability via aria-haspopup\n * - Submenus are positioned relative to parent items\n * - Focus is trapped within the active menu level\n *\n * @example\n * ```tsx\n * <NestedMenu\n * label=\"File menu\"\n * trigger=\"File ▼\"\n * items={[\n * {\n * id: 'new',\n * label: 'New',\n * submenu: [\n * { id: 'file', label: 'File', onPress: () => console.log('New File') },\n * { id: 'folder', label: 'Folder', onPress: () => console.log('New Folder') },\n * ],\n * },\n * { id: 'open', label: 'Open', onPress: () => console.log('Open') },\n * {\n * id: 'recent',\n * label: 'Open Recent',\n * submenu: [\n * { id: 'file1', label: 'document.txt', onPress: () => {} },\n * { id: 'file2', label: 'project.json', onPress: () => {} },\n * ],\n * },\n * ]}\n * />\n * ```\n */\nexport const NestedMenu = (props: NestedMenuProps) => {\n const { label, trigger, items, className = '' } = props;\n\n const [isOpen, setIsOpen] = useState(false);\n const [openSubmenuId, setOpenSubmenuId] = useState<string | null>(null);\n\n // Trigger button\n const { buttonProps } = useAccessibleButton({\n label,\n onPress: () => setIsOpen(!isOpen),\n });\n\n // Close menu on Escape\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n setIsOpen(false);\n setOpenSubmenuId(null);\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen]);\n\n return (\n <div style={{ position: 'relative', display: 'inline-block' }}>\n <button\n {...buttonProps}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n className={className}\n style={{\n padding: '0.5rem 1rem',\n border: '1px solid #d1d5db',\n borderRadius: '0.375rem',\n backgroundColor: 'white',\n cursor: 'pointer',\n }}\n >\n {trigger}\n </button>\n\n {isOpen && (\n <MenuLevel\n items={items}\n onClose={() => setIsOpen(false)}\n openSubmenuId={openSubmenuId}\n onSubmenuChange={setOpenSubmenuId}\n depth={0}\n />\n )}\n </div>\n );\n};\n\n/**\n * Single menu level (supports recursion for submenus)\n */\ninterface MenuLevelProps {\n items: NestedMenuItem[];\n onClose: () => void;\n openSubmenuId: string | null;\n onSubmenuChange: (id: string | null) => void;\n depth: number;\n}\n\nconst MenuLevel = (props: MenuLevelProps) => {\n const { items, onClose, openSubmenuId, onSubmenuChange, depth } = props;\n\n const menuRef = useRef<HTMLDivElement>(null);\n\n // Keyboard navigation\n const { getItemProps, setCurrentIndex } = useKeyboardNavigation({\n orientation: 'vertical',\n loop: true,\n });\n\n const handleItemKeyDown = (e: React.KeyboardEvent, item: NestedMenuItem) => {\n // Arrow Right: Open submenu\n if (e.key === 'ArrowRight' && item.submenu) {\n e.preventDefault();\n e.stopPropagation();\n onSubmenuChange(item.id);\n }\n\n // Arrow Left: Close submenu (only if this is a submenu)\n if (e.key === 'ArrowLeft' && depth > 0) {\n e.preventDefault();\n e.stopPropagation();\n onSubmenuChange(null);\n }\n\n // Enter/Space: Execute action or open submenu\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n\n if (item.submenu) {\n onSubmenuChange(item.id);\n } else if (item.onPress && !item.disabled) {\n item.onPress();\n onClose();\n }\n }\n };\n\n const handleItemClick = (item: NestedMenuItem) => {\n if (item.disabled) return;\n\n if (item.submenu) {\n onSubmenuChange(openSubmenuId === item.id ? null : item.id);\n } else if (item.onPress) {\n item.onPress();\n onClose();\n }\n };\n\n return (\n <div\n ref={menuRef}\n role=\"menu\"\n aria-orientation=\"vertical\"\n style={{\n position: depth === 0 ? 'absolute' : 'absolute',\n top: depth === 0 ? 'calc(100% + 0.25rem)' : 0,\n left: depth === 0 ? 0 : '100%',\n minWidth: '12rem',\n backgroundColor: 'white',\n border: '1px solid #e5e7eb',\n borderRadius: '0.375rem',\n boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1)',\n padding: '0.25rem',\n zIndex: 50 + depth,\n }}\n >\n {items.map((item, index) => {\n const itemProps = getItemProps(index);\n const hasSubmenu = !!item.submenu;\n const isSubmenuOpen = openSubmenuId === item.id;\n\n return (\n <div key={item.id} style={{ position: 'relative' }}>\n <button\n {...itemProps}\n role=\"menuitem\"\n aria-haspopup={hasSubmenu ? 'true' : undefined}\n aria-expanded={hasSubmenu ? isSubmenuOpen : undefined}\n disabled={item.disabled}\n onClick={() => handleItemClick(item)}\n onKeyDown={(e) => handleItemKeyDown(e, item)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '0.75rem',\n width: '100%',\n padding: '0.5rem 0.75rem',\n border: 'none',\n background: 'transparent',\n textAlign: 'left',\n fontSize: '0.875rem',\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n borderRadius: '0.25rem',\n color: item.disabled ? '#9ca3af' : '#111827',\n opacity: item.disabled ? 0.5 : 1,\n }}\n onMouseEnter={(e) => {\n if (!item.disabled) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n setCurrentIndex(index);\n if (hasSubmenu) {\n onSubmenuChange(item.id);\n }\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n {item.icon && <span>{item.icon}</span>}\n <span>{item.label}</span>\n </span>\n {hasSubmenu && <span aria-hidden=\"true\">▶</span>}\n </button>\n\n {/* Render submenu recursively */}\n {hasSubmenu && isSubmenuOpen && item.submenu && (\n <MenuLevel\n items={item.submenu}\n onClose={onClose}\n openSubmenuId={null}\n onSubmenuChange={() => {}}\n depth={depth + 1}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n};\n","/**\n * @a13y/react - VirtualizedList Pattern\n * Accessible virtualized list with screen reader support\n */\n\nimport { announce } from '@a13y/core/runtime/announce';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\n/**\n * Props for VirtualizedList\n */\nexport interface VirtualizedListProps<T> {\n /**\n * All items in the list\n */\n items: T[];\n\n /**\n * Height of each item (fixed)\n */\n itemHeight: number;\n\n /**\n * Height of the visible container\n */\n height: number;\n\n /**\n * Render function for each item\n */\n renderItem: (item: T, index: number) => ReactNode;\n\n /**\n * Unique key extractor\n */\n getItemKey: (item: T, index: number) => string;\n\n /**\n * Accessible label for the list\n */\n 'aria-label': string;\n\n /**\n * Number of items to render outside viewport (overscan)\n * @default 3\n */\n overscan?: number;\n\n /**\n * Custom className\n */\n className?: string;\n\n /**\n * Empty state\n */\n emptyState?: ReactNode;\n}\n\n/**\n * Virtualized List Component\n *\n * Accessible virtualized list that works with screen readers:\n * - Only renders visible items + overscan\n * - Maintains total height for scrollbar\n * - Announces visible range to screen readers\n * - Keyboard navigation works correctly\n * - Focus management when scrolling\n *\n * Pattern Explanation:\n * - Calculates visible range based on scroll position\n * - Renders only visible items + overscan buffer\n * - Uses absolute positioning to maintain item positions\n * - Announces visible range changes to screen readers\n * - Total height maintained for accurate scrollbar\n * - Works with keyboard navigation (Page Up/Down, Home/End)\n *\n * Screen Reader Strategy:\n * - aria-setsize and aria-posinset tell screen readers total count\n * - Visible range announced when user scrolls\n * - Focus is maintained when items are virtualized\n *\n * @example\n * ```tsx\n * const items = Array.from({ length: 10000 }, (_, i) => ({\n * id: i,\n * name: `Item ${i}`,\n * }));\n *\n * return (\n * <VirtualizedList\n * items={items}\n * itemHeight={48}\n * height={600}\n * renderItem={(item) => (\n * <div style={{ padding: '0.75rem' }}>\n * {item.name}\n * </div>\n * )}\n * getItemKey={(item) => item.id.toString()}\n * aria-label=\"Large list of items\"\n * />\n * );\n * ```\n */\nexport const VirtualizedList = <T,>(props: VirtualizedListProps<T>) => {\n const {\n items,\n itemHeight,\n height,\n renderItem,\n getItemKey,\n 'aria-label': ariaLabel,\n overscan = 3,\n className = '',\n emptyState,\n } = props;\n\n const [scrollTop, setScrollTop] = useState(0);\n const [visibleRange, setVisibleRange] = useState({ start: 0, end: 0 });\n const containerRef = useRef<HTMLDivElement>(null);\n const previousRangeRef = useRef({ start: 0, end: 0 });\n\n const totalHeight = items.length * itemHeight;\n const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);\n const endIndex = Math.min(\n items.length - 1,\n Math.ceil((scrollTop + height) / itemHeight) + overscan\n );\n\n const visibleItems = items.slice(startIndex, endIndex + 1);\n\n // Announce visible range to screen readers (throttled)\n useEffect(() => {\n const newRange = { start: startIndex, end: endIndex };\n\n // Only announce if range changed significantly (more than 10 items)\n const rangeChanged =\n Math.abs(newRange.start - previousRangeRef.current.start) > 10 ||\n Math.abs(newRange.end - previousRangeRef.current.end) > 10;\n\n if (rangeChanged && items.length > 0) {\n setVisibleRange(newRange);\n previousRangeRef.current = newRange;\n\n // Announce visible range\n const message = `Showing items ${newRange.start + 1} to ${newRange.end + 1} of ${items.length}`;\n announce(message, { politeness: 'polite', delay: 300 });\n }\n }, [startIndex, endIndex, items.length]);\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n setScrollTop(e.currentTarget.scrollTop);\n };\n\n // Keyboard navigation helpers\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!containerRef.current) return;\n\n const scrollAmount = itemHeight * 5; // Scroll 5 items at a time\n\n switch (e.key) {\n case 'PageDown':\n e.preventDefault();\n containerRef.current.scrollBy({ top: scrollAmount, behavior: 'smooth' });\n break;\n\n case 'PageUp':\n e.preventDefault();\n containerRef.current.scrollBy({ top: -scrollAmount, behavior: 'smooth' });\n break;\n\n case 'Home':\n e.preventDefault();\n containerRef.current.scrollTo({ top: 0, behavior: 'smooth' });\n break;\n\n case 'End':\n e.preventDefault();\n containerRef.current.scrollTo({ top: totalHeight, behavior: 'smooth' });\n break;\n }\n };\n\n // Empty state\n if (items.length === 0) {\n return (\n <div role=\"status\" aria-live=\"polite\">\n {emptyState || <p>No items to display</p>}\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n role=\"list\"\n aria-label={ariaLabel}\n tabIndex={0}\n className={className}\n onScroll={handleScroll}\n onKeyDown={handleKeyDown}\n style={{\n height: `${height}px`,\n overflow: 'auto',\n position: 'relative',\n outline: 'none',\n }}\n >\n {/* Total height spacer */}\n <div style={{ height: `${totalHeight}px`, position: 'relative' }}>\n {/* Visible items */}\n {visibleItems.map((item, virtualIndex) => {\n const actualIndex = startIndex + virtualIndex;\n const itemStyle: CSSProperties = {\n position: 'absolute',\n top: `${actualIndex * itemHeight}px`,\n left: 0,\n right: 0,\n height: `${itemHeight}px`,\n };\n\n return (\n <div\n key={getItemKey(item, actualIndex)}\n role=\"listitem\"\n aria-setsize={items.length}\n aria-posinset={actualIndex + 1}\n style={itemStyle}\n >\n {renderItem(item, actualIndex)}\n </div>\n );\n })}\n </div>\n\n {/* Screen reader helper */}\n <div\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style={{\n position: 'absolute',\n left: '-10000px',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n }}\n >\n {`Showing items ${visibleRange.start + 1} to ${visibleRange.end + 1} of ${items.length}`}\n </div>\n </div>\n );\n};\n","/**\n * @a13y/react - Wizard Pattern\n * Multi-step form with validation and keyboard navigation\n */\n\nimport { announce } from '@a13y/core/runtime/announce';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useState } from 'react';\n\n/**\n * Wizard step definition\n */\nexport interface WizardStep {\n /**\n * Unique step ID\n */\n id: string;\n\n /**\n * Step label (shown in progress indicator)\n */\n label: string;\n\n /**\n * Step content\n */\n content: ReactNode;\n\n /**\n * Optional validation before proceeding\n * Return true if valid, or error message if invalid\n */\n validate?: () => true | string;\n\n /**\n * Whether this step can be skipped\n */\n optional?: boolean;\n}\n\n/**\n * Wizard context value\n */\ninterface WizardContextValue {\n /**\n * Current step index\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Current step data\n */\n step: WizardStep;\n\n /**\n * Navigate to next step\n */\n next: () => void;\n\n /**\n * Navigate to previous step\n */\n previous: () => void;\n\n /**\n * Navigate to specific step (if valid)\n */\n goToStep: (index: number) => void;\n\n /**\n * Check if can go to next step\n */\n canGoNext: boolean;\n\n /**\n * Check if can go to previous step\n */\n canGoPrevious: boolean;\n\n /**\n * Check if on last step\n */\n isLastStep: boolean;\n\n /**\n * Validation error (if any)\n */\n validationError: string | null;\n}\n\nconst WizardContext = createContext<WizardContextValue | null>(null);\n\n/**\n * Hook to access wizard context\n */\nexport const useWizard = (): WizardContextValue => {\n const context = useContext(WizardContext);\n if (!context) {\n throw new Error('useWizard must be used within Wizard component');\n }\n return context;\n};\n\n/**\n * Props for Wizard\n */\nexport interface WizardProps {\n /**\n * Wizard steps (must have at least one)\n */\n steps: [WizardStep, ...WizardStep[]];\n\n /**\n * Called when wizard is completed\n */\n onComplete: () => void;\n\n /**\n * Called when wizard is cancelled\n */\n onCancel?: () => void;\n\n /**\n * Initial step index\n */\n initialStep?: number;\n\n /**\n * Custom className\n */\n className?: string;\n}\n\n/**\n * Wizard Component\n *\n * Multi-step form with:\n * - Progress indicator\n * - Keyboard navigation (arrows, Home, End)\n * - Step validation\n * - Screen reader announcements\n * - Focus management between steps\n *\n * Pattern Explanation:\n * - Each step can have validation before proceeding\n * - Arrow keys navigate between steps (if valid)\n * - Progress indicator shows current position\n * - Screen readers announce step changes\n * - Optional steps can be skipped\n * - Validation errors are announced to screen readers\n *\n * @example\n * ```tsx\n * <Wizard\n * steps={[\n * {\n * id: 'account',\n * label: 'Account Info',\n * content: <AccountForm />,\n * validate: () => isValidEmail(email) || 'Invalid email',\n * },\n * {\n * id: 'preferences',\n * label: 'Preferences',\n * content: <PreferencesForm />,\n * optional: true,\n * },\n * {\n * id: 'review',\n * label: 'Review',\n * content: <ReviewScreen />,\n * },\n * ]}\n * onComplete={() => console.log('Wizard completed!')}\n * />\n * ```\n */\nexport const Wizard = (props: WizardProps) => {\n const { steps, onComplete, onCancel, initialStep = 0, className = '' } = props;\n\n const [currentStep, setCurrentStep] = useState(initialStep);\n const [validationError, setValidationError] = useState<string | null>(null);\n const [visitedSteps, setVisitedSteps] = useState<Set<number>>(new Set([initialStep]));\n\n const totalSteps = steps.length;\n const step = steps[currentStep] ?? steps[0];\n\n // Ensure currentStep is always within bounds\n if (currentStep < 0 || currentStep >= totalSteps) {\n setCurrentStep(0);\n }\n const isLastStep = currentStep === totalSteps - 1;\n const canGoPrevious = currentStep > 0;\n const canGoNext = currentStep < totalSteps - 1;\n\n const validateCurrentStep = (): boolean => {\n if (!step.validate) return true;\n\n const result = step.validate();\n if (result === true) {\n setValidationError(null);\n return true;\n }\n\n setValidationError(result);\n announce(`Validation error: ${result}`, { politeness: 'assertive' });\n return false;\n };\n\n const goToStep = (index: number) => {\n if (index < 0 || index >= totalSteps) return;\n\n // Can only go forward if current step is valid\n if (index > currentStep && !validateCurrentStep()) {\n return;\n }\n\n setCurrentStep(index);\n setVisitedSteps((prev) => new Set([...prev, index]));\n setValidationError(null);\n\n // Announce to screen readers\n const newStep = steps[index];\n if (newStep) {\n announce(\n `Step ${index + 1} of ${totalSteps}: ${newStep.label}${newStep.optional ? ' (optional)' : ''}`,\n { politeness: 'polite' }\n );\n }\n };\n\n const next = () => {\n if (!canGoNext) return;\n\n if (validateCurrentStep()) {\n goToStep(currentStep + 1);\n }\n };\n\n const previous = () => {\n if (!canGoPrevious) return;\n goToStep(currentStep - 1);\n };\n\n const handleComplete = () => {\n if (validateCurrentStep()) {\n announce('Wizard completed', { politeness: 'polite' });\n onComplete();\n }\n };\n\n const contextValue: WizardContextValue = {\n currentStep,\n totalSteps,\n step,\n next,\n previous,\n goToStep,\n canGoNext,\n canGoPrevious,\n isLastStep,\n validationError,\n };\n\n return (\n <WizardContext.Provider value={contextValue}>\n <div className={className} style={{ maxWidth: '48rem', margin: '0 auto' }}>\n {/* Progress Indicator */}\n <nav aria-label=\"Wizard progress\">\n <ol\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '2rem',\n padding: 0,\n listStyle: 'none',\n }}\n >\n {steps.map((s, index) => {\n const isActive = index === currentStep;\n const isCompleted = visitedSteps.has(index) && index < currentStep;\n const isClickable = visitedSteps.has(index) || index === currentStep;\n\n return (\n <li\n key={s.id}\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <button\n type=\"button\"\n onClick={() => isClickable && goToStep(index)}\n aria-current={isActive ? 'step' : undefined}\n disabled={!isClickable}\n style={{\n width: '2.5rem',\n height: '2.5rem',\n borderRadius: '50%',\n border: `2px solid ${isActive || isCompleted ? '#2563eb' : '#d1d5db'}`,\n backgroundColor: isCompleted ? '#2563eb' : isActive ? 'white' : '#f3f4f6',\n color: isCompleted ? 'white' : isActive ? '#2563eb' : '#9ca3af',\n fontWeight: 600,\n cursor: isClickable ? 'pointer' : 'not-allowed',\n marginBottom: '0.5rem',\n }}\n >\n {isCompleted ? '✓' : index + 1}\n </button>\n <span\n style={{\n fontSize: '0.875rem',\n color: isActive ? '#2563eb' : '#6b7280',\n fontWeight: isActive ? 600 : 400,\n textAlign: 'center',\n }}\n >\n {s.label}\n {s.optional && (\n <span style={{ display: 'block', fontSize: '0.75rem', color: '#9ca3af' }}>\n (Optional)\n </span>\n )}\n </span>\n </li>\n );\n })}\n </ol>\n </nav>\n\n {/* Validation Error */}\n {validationError && (\n <div\n role=\"alert\"\n aria-live=\"assertive\"\n style={{\n padding: '0.75rem',\n marginBottom: '1rem',\n backgroundColor: '#fef2f2',\n border: '1px solid #fecaca',\n borderRadius: '0.375rem',\n color: '#991b1b',\n }}\n >\n {validationError}\n </div>\n )}\n\n {/* Step Content */}\n <div\n role=\"region\"\n aria-labelledby={`step-${step.id}-label`}\n style={{ marginBottom: '2rem' }}\n >\n <h2\n id={`step-${step.id}-label`}\n style={{ fontSize: '1.5rem', fontWeight: 600, marginBottom: '1rem' }}\n >\n {step.label}\n </h2>\n {step.content}\n </div>\n\n {/* Navigation Buttons */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n gap: '1rem',\n }}\n >\n <div style={{ display: 'flex', gap: '0.5rem' }}>\n {onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n style={{\n padding: '0.5rem 1rem',\n border: '1px solid #d1d5db',\n borderRadius: '0.375rem',\n backgroundColor: 'white',\n cursor: 'pointer',\n }}\n >\n Cancel\n </button>\n )}\n\n {canGoPrevious && (\n <button\n type=\"button\"\n onClick={previous}\n style={{\n padding: '0.5rem 1rem',\n border: '1px solid #d1d5db',\n borderRadius: '0.375rem',\n backgroundColor: 'white',\n cursor: 'pointer',\n }}\n >\n ← Previous\n </button>\n )}\n </div>\n\n <div>\n {isLastStep ? (\n <button\n type=\"button\"\n onClick={handleComplete}\n style={{\n padding: '0.5rem 1.5rem',\n border: 'none',\n borderRadius: '0.375rem',\n backgroundColor: '#2563eb',\n color: 'white',\n fontWeight: 600,\n cursor: 'pointer',\n }}\n >\n Complete\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={next}\n disabled={!canGoNext}\n style={{\n padding: '0.5rem 1.5rem',\n border: 'none',\n borderRadius: '0.375rem',\n backgroundColor: '#2563eb',\n color: 'white',\n fontWeight: 600,\n cursor: canGoNext ? 'pointer' : 'not-allowed',\n opacity: canGoNext ? 1 : 0.5,\n }}\n >\n Next →\n </button>\n )}\n </div>\n </div>\n </div>\n </WizardContext.Provider>\n );\n};\n","/**\n * @a13y/react\n * Type-safe React hooks and components for accessibility\n * @packageDocumentation\n */\n\nexport const VERSION = '0.0.0' as const;\n\n// Re-export all components\nexport * from './components';\n// Re-export all hooks\nexport * from './hooks';\n// Re-export all patterns\nexport * from './patterns';\n"]}
1
+ {"version":3,"sources":["../src/hooks/use-accessible-button.ts","../src/components/AccessibleButton.tsx","../src/hooks/use-focus-trap.ts","../src/hooks/use-accessible-dialog.ts","../src/components/AccessibleDialog.tsx","../src/hooks/use-keyboard-navigation.ts","../src/components/AccessibleMenu.tsx","../src/components/AccessibleModal.tsx","../src/components/AccessibleTabs.tsx","../src/hooks/use-id.ts","../src/components/AccessibleTooltip.tsx","../src/components/AccessibleToggle.tsx","../src/components/AccessibleToast.tsx","../src/components/AccessibleAccordion.tsx","../src/components/AccessibleBreadcrumb.tsx","../src/components/AccessibleCheckboxGroup.tsx","../src/components/AccessibleRadioGroup.tsx","../src/hooks/use-aria-live.ts","../src/components/AccessibleProgress.tsx","../src/components/SkipLinks.tsx","../src/components/AccessiblePagination.tsx","../src/hooks/use-click-outside.ts","../src/components/AccessibleCombobox.tsx","../src/components/AccessibleDatePicker.tsx","../src/components/AccessibleTreeView.tsx","../src/components/AccessibleTable.tsx","../src/hooks/use-reduced-motion.ts","../src/hooks/use-announce.ts","../src/components/AccessibleCarousel.tsx","../src/components/AccessibleDrawer.tsx","../src/hooks/use-accessible-form.ts","../src/hooks/use-form-field.ts","../src/hooks/use-media-query.ts","../src/patterns/DialogStack.tsx","../src/patterns/InfiniteList.tsx","../src/patterns/NestedMenu.tsx","../src/patterns/VirtualizedList.tsx","../src/patterns/Wizard.tsx","../src/index.ts"],"names":["useRef","useEffect","jsx","useCallback","useState","jsxs","Fragment","useId","React","pages","days","allNodes","announce","isValid","createContext","useContext"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @a13y/react - useAccessibleButton\n * Type-safe button hook with keyboard support\n */\n\nimport type { AriaRole } from 'react';\nimport { useCallback, useEffect, useRef } from 'react';\n\n/**\n * Button press event (mouse or keyboard)\n */\nexport interface PressEvent {\n type: 'mouse' | 'keyboard';\n key?: string;\n}\n\n/**\n * Props for useAccessibleButton\n */\nexport interface UseAccessibleButtonProps {\n /**\n * Accessible label for the button\n * Required if button content is not text (e.g., icon-only)\n */\n label?: string;\n\n /**\n * Press handler - called on click or Enter/Space\n */\n onPress: (event: PressEvent) => void;\n\n /**\n * Whether the button is disabled\n */\n isDisabled?: boolean;\n\n /**\n * ARIA role override\n * @default 'button'\n */\n role?: Extract<AriaRole, 'button' | 'link'>;\n\n /**\n * Element type - only 'button' or 'a' allowed\n * @default 'button'\n */\n elementType?: 'button' | 'a';\n}\n\n/**\n * Button props returned by the hook\n */\nexport interface AccessibleButtonProps {\n role: AriaRole;\n tabIndex: number;\n 'aria-label'?: string;\n 'aria-disabled'?: boolean;\n disabled?: boolean;\n onPointerDown: (event: React.PointerEvent) => void;\n onKeyDown: (event: React.KeyboardEvent) => void;\n}\n\n/**\n * Return type\n */\nexport interface UseAccessibleButtonReturn {\n buttonProps: AccessibleButtonProps;\n isPressed: boolean;\n}\n\n/**\n * Hook for creating accessible buttons\n *\n * Features:\n * - Keyboard support (Enter, Space)\n * - Disabled state handling\n * - Automatic ARIA attributes\n * - Development-time validation\n *\n * @example\n * ```tsx\n * const { buttonProps } = useAccessibleButton({\n * label: 'Delete item',\n * onPress: () => console.log('Pressed!'),\n * });\n *\n * return <button {...buttonProps}>🗑️</button>;\n * ```\n */\nexport const useAccessibleButton = (props: UseAccessibleButtonProps): UseAccessibleButtonReturn => {\n const { label, onPress, isDisabled = false, role = 'button', elementType = 'button' } = props;\n\n const buttonRef = useRef<HTMLElement | null>(null);\n const isPressedRef = useRef(false);\n\n // Development-time validation\n useEffect(() => {\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n import('@a13y/devtools/runtime/invariants').then(\n ({ assertHasAccessibleName, assertKeyboardAccessible }) => {\n if (buttonRef.current) {\n // Validate accessible name\n assertHasAccessibleName(buttonRef.current, 'useAccessibleButton');\n\n // Validate keyboard accessibility\n assertKeyboardAccessible(buttonRef.current, 'useAccessibleButton');\n }\n }\n );\n }\n }, []);\n\n const handlePress = useCallback(\n (event: PressEvent) => {\n if (isDisabled) {\n return;\n }\n onPress(event);\n },\n [onPress, isDisabled]\n );\n\n const handlePointerDown = useCallback(\n (event: React.PointerEvent) => {\n if (isDisabled) {\n event.preventDefault();\n return;\n }\n\n isPressedRef.current = true;\n handlePress({ type: 'mouse' });\n },\n [handlePress, isDisabled]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n if (isDisabled) {\n return;\n }\n\n // Enter or Space activates button\n if (event.key === 'Enter' || event.key === ' ') {\n event.preventDefault();\n handlePress({ type: 'keyboard', key: event.key });\n }\n },\n [handlePress, isDisabled]\n );\n\n const buttonProps: AccessibleButtonProps = {\n role,\n tabIndex: isDisabled ? -1 : 0,\n 'aria-label': label,\n 'aria-disabled': isDisabled ? true : undefined,\n disabled: elementType === 'button' ? isDisabled : undefined,\n onPointerDown: handlePointerDown,\n onKeyDown: handleKeyDown,\n };\n\n return {\n buttonProps,\n isPressed: isPressedRef.current,\n };\n};\n","/**\n * @a13y/react - AccessibleButton Component\n * Type-safe button component with enforced accessible name\n */\n\nimport type { ReactNode } from 'react';\nimport { useAccessibleButton } from '../hooks/use-accessible-button';\n\n/**\n * Button variants\n */\nexport type ButtonVariant = 'primary' | 'secondary' | 'danger' | 'ghost';\n\n/**\n * Props for AccessibleButton\n */\nexport interface AccessibleButtonProps {\n /**\n * Button content\n * If content is not text (e.g., icon only), label is REQUIRED\n */\n children: ReactNode;\n\n /**\n * Accessible label\n * REQUIRED if children is not text (e.g., icon-only button)\n */\n label?: string;\n\n /**\n * Click handler\n */\n onPress: (event: import('../hooks/use-accessible-button').PressEvent) => void;\n\n /**\n * Whether button is disabled\n */\n disabled?: boolean;\n\n /**\n * Visual variant (does not affect accessibility)\n */\n variant?: ButtonVariant;\n\n /**\n * Custom className\n */\n className?: string;\n\n /**\n * Button type\n */\n type?: 'button' | 'submit' | 'reset';\n}\n\n/**\n * Accessible Button Component\n *\n * Features:\n * - Automatic keyboard support (Enter, Space)\n * - Required accessible name (compile-time + runtime)\n * - Disabled state handling\n * - Development-time validation\n *\n * @example\n * ```tsx\n * // Text button (label optional)\n * <AccessibleButton onPress={() => console.log('Clicked')}>\n * Save\n * </AccessibleButton>\n *\n * // Icon button (label REQUIRED)\n * <AccessibleButton\n * label=\"Delete item\"\n * onPress={() => console.log('Deleted')}\n * >\n * 🗑️\n * </AccessibleButton>\n * ```\n */\nexport const AccessibleButton = (props: AccessibleButtonProps) => {\n const {\n children,\n label,\n onPress,\n disabled = false,\n variant = 'primary',\n className = '',\n type = 'button',\n } = props;\n\n const { buttonProps } = useAccessibleButton({\n label,\n onPress,\n isDisabled: disabled,\n });\n\n // Base styles (minimal, no framework dependency)\n const baseStyles =\n 'inline-flex items-center justify-center font-medium transition-colors focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 disabled:opacity-50 disabled:cursor-not-allowed';\n\n // Variant styles\n const variantStyles: Record<ButtonVariant, string> = {\n primary: 'bg-blue-600 text-white hover:bg-blue-700 focus-visible:outline-blue-600',\n secondary: 'bg-gray-200 text-gray-900 hover:bg-gray-300 focus-visible:outline-gray-500',\n danger: 'bg-red-600 text-white hover:bg-red-700 focus-visible:outline-red-600',\n ghost: 'bg-transparent text-gray-700 hover:bg-gray-100 focus-visible:outline-gray-500',\n };\n\n const combinedClassName = `${baseStyles} ${variantStyles[variant]} ${className}`.trim();\n\n return (\n <button\n {...buttonProps}\n type={type}\n className={combinedClassName}\n style={{\n padding: '0.5rem 1rem',\n borderRadius: '0.375rem',\n border: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }}\n >\n {children}\n </button>\n );\n};\n","/**\n * @a13y/react - useFocusTrap\n * Focus trap hook for modals and dialogs\n */\n\nimport type { FocusTrap } from '@a13y/core/runtime/focus';\nimport { useEffect, useRef } from 'react';\n\n/**\n * Props for useFocusTrap\n */\nexport interface UseFocusTrapProps {\n /**\n * Whether the focus trap is active\n */\n isActive: boolean;\n\n /**\n * Callback when Escape key is pressed\n */\n onEscape?: () => void;\n\n /**\n * Whether to restore focus when trap is deactivated\n * @default true\n */\n restoreFocus?: boolean;\n\n /**\n * Whether to auto-focus first element when activated\n * @default true\n */\n autoFocus?: boolean;\n}\n\n/**\n * Return type\n */\nexport interface UseFocusTrapReturn {\n /**\n * Ref to attach to the container element\n */\n trapRef: React.RefObject<HTMLElement | null>;\n}\n\n/**\n * Hook for creating focus traps\n *\n * Features:\n * - Traps Tab/Shift+Tab within container\n * - Handles Escape key\n * - Restores focus on deactivation\n * - Auto-focuses first element\n * - Development-time validation\n *\n * @example\n * ```tsx\n * const { trapRef } = useFocusTrap({\n * isActive: isOpen,\n * onEscape: () => setIsOpen(false),\n * });\n *\n * return (\n * <div ref={trapRef} role=\"dialog\">\n * <button>Close</button>\n * </div>\n * );\n * ```\n */\nexport const useFocusTrap = (props: UseFocusTrapProps): UseFocusTrapReturn => {\n const { isActive, onEscape, restoreFocus = true, autoFocus = true } = props;\n\n const trapRef = useRef<HTMLElement>(null);\n const focusTrapRef = useRef<FocusTrap | null>(null);\n const previousFocusRef = useRef<HTMLElement | null>(null);\n\n useEffect(() => {\n if (!isActive || !trapRef.current) {\n return;\n }\n\n // Save previous focus\n if (restoreFocus) {\n previousFocusRef.current = document.activeElement as HTMLElement;\n }\n\n // Create focus trap\n import('@a13y/core/runtime/focus').then(({ createFocusTrap }) => {\n if (!trapRef.current) {\n return;\n }\n\n const options: import('@a13y/core/runtime/focus').FocusTrapOptions = {\n returnFocus: false,\n onEscape: onEscape,\n };\n\n // Only set initialFocus if autoFocus is enabled\n if (autoFocus) {\n // undefined means auto-focus first focusable element\n options.initialFocus = undefined;\n }\n\n const trap = createFocusTrap(trapRef.current, options);\n\n trap.activate();\n focusTrapRef.current = trap;\n\n // Development-time validation\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n import('@a13y/devtools/runtime/validators').then(({ focusValidator }) => {\n if (trapRef.current) {\n focusValidator.validateFocusTrap(trapRef.current, true);\n }\n });\n }\n });\n\n // Cleanup\n return () => {\n if (focusTrapRef.current) {\n focusTrapRef.current.deactivate();\n focusTrapRef.current = null;\n }\n\n // Restore focus\n if (restoreFocus && previousFocusRef.current) {\n previousFocusRef.current.focus();\n\n // Validate focus restoration in dev\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n import('@a13y/devtools/runtime/validators').then(({ focusValidator }) => {\n if (previousFocusRef.current) {\n focusValidator.expectFocusRestoration(\n previousFocusRef.current,\n 'focus trap deactivation'\n );\n }\n });\n }\n }\n };\n }, [isActive, onEscape, restoreFocus, autoFocus]);\n\n return {\n trapRef,\n };\n};\n","/**\n * @a13y/react - useAccessibleDialog\n * Type-safe dialog/modal hook with full ARIA support\n */\n\nimport type { AriaRole } from 'react';\nimport { useEffect, useId, useRef } from 'react';\nimport { useFocusTrap } from './use-focus-trap';\n\n/**\n * Props for useAccessibleDialog\n */\nexport interface UseAccessibleDialogProps {\n /**\n * Whether the dialog is open\n */\n isOpen: boolean;\n\n /**\n * Callback when dialog should close\n * Called on Escape key or backdrop click\n */\n onClose: () => void;\n\n /**\n * Dialog title - REQUIRED for accessibility\n * This becomes the aria-labelledby target\n */\n title: string;\n\n /**\n * Optional dialog description\n * This becomes the aria-describedby target\n */\n description?: string;\n\n /**\n * ARIA role\n * @default 'dialog'\n */\n role?: Extract<AriaRole, 'dialog' | 'alertdialog'>;\n\n /**\n * Whether dialog is modal (blocking)\n * @default true\n */\n isModal?: boolean;\n\n /**\n * Whether clicking backdrop closes dialog\n * @default true\n */\n closeOnBackdropClick?: boolean;\n}\n\n/**\n * Dialog container props\n */\nexport interface DialogContainerProps {\n ref: React.RefObject<HTMLElement | null>;\n role: AriaRole;\n 'aria-labelledby': string;\n 'aria-describedby'?: string;\n 'aria-modal': boolean;\n tabIndex: -1;\n}\n\n/**\n * Title props\n */\nexport interface DialogTitleProps {\n id: string;\n}\n\n/**\n * Description props\n */\nexport interface DialogDescriptionProps {\n id: string;\n}\n\n/**\n * Backdrop props\n */\nexport interface DialogBackdropProps {\n onClick: () => void;\n 'aria-hidden': true;\n}\n\n/**\n * Return type\n */\nexport interface UseAccessibleDialogReturn {\n dialogProps: DialogContainerProps;\n titleProps: DialogTitleProps;\n descriptionProps: DialogDescriptionProps | null;\n backdropProps: DialogBackdropProps | null;\n close: () => void;\n}\n\n/**\n * Hook for creating accessible dialogs/modals\n *\n * Features:\n * - Focus trap with Tab/Shift+Tab cycling\n * - Escape key to close\n * - Focus restoration on close\n * - ARIA attributes (modal, labelledby, describedby)\n * - Backdrop click handling\n * - Development-time validation\n *\n * @example\n * ```tsx\n * const { dialogProps, titleProps, descriptionProps, backdropProps } =\n * useAccessibleDialog({\n * isOpen,\n * onClose: () => setIsOpen(false),\n * title: 'Delete Item',\n * description: 'This action cannot be undone',\n * });\n *\n * if (!isOpen) return null;\n *\n * return (\n * <>\n * <div {...backdropProps} />\n * <div {...dialogProps}>\n * <h2 {...titleProps}>Delete Item</h2>\n * <p {...descriptionProps}>This action cannot be undone</p>\n * <button onClick={close}>Cancel</button>\n * </div>\n * </>\n * );\n * ```\n */\nexport const useAccessibleDialog = (props: UseAccessibleDialogProps): UseAccessibleDialogReturn => {\n const {\n isOpen,\n onClose,\n title,\n description,\n role = 'dialog',\n isModal = true,\n closeOnBackdropClick = true,\n } = props;\n\n // Compile-time validation: title is required\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n if (!title || title.trim().length === 0) {\n throw new Error(\n '@a13y/react [useAccessibleDialog]: \"title\" prop is required for accessibility'\n );\n }\n }\n\n const dialogRef = useRef<HTMLElement>(null);\n const titleId = useId();\n const descriptionId = useId();\n\n // Focus trap\n const { trapRef } = useFocusTrap({\n isActive: isOpen,\n onEscape: onClose,\n restoreFocus: true,\n autoFocus: true,\n });\n\n // Sync refs (trapRef and dialogRef point to same element)\n useEffect(() => {\n if (dialogRef.current && trapRef.current !== dialogRef.current) {\n (trapRef as React.MutableRefObject<HTMLElement | null>).current = dialogRef.current;\n }\n }, [trapRef]);\n\n // Body scroll lock when modal is open\n useEffect(() => {\n if (!isOpen || !isModal) {\n return;\n }\n\n const originalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = originalOverflow;\n };\n }, [isOpen, isModal]);\n\n // Development-time validation\n useEffect(() => {\n if (typeof __DEV__ !== 'undefined' && __DEV__ && isOpen) {\n import('@a13y/devtools/runtime/invariants').then(\n ({ assertHasAccessibleName, assertValidAriaAttributes }) => {\n if (dialogRef.current) {\n assertHasAccessibleName(dialogRef.current, 'useAccessibleDialog');\n assertValidAriaAttributes(dialogRef.current);\n }\n }\n );\n }\n }, [isOpen]);\n\n const dialogProps: DialogContainerProps = {\n ref: dialogRef,\n role,\n 'aria-labelledby': titleId,\n 'aria-describedby': description ? descriptionId : undefined,\n 'aria-modal': isModal,\n tabIndex: -1,\n };\n\n const titleProps: DialogTitleProps = {\n id: titleId,\n };\n\n const descriptionProps: DialogDescriptionProps | null = description\n ? { id: descriptionId }\n : null;\n\n const backdropProps: DialogBackdropProps | null =\n closeOnBackdropClick && isModal\n ? {\n onClick: onClose,\n 'aria-hidden': true,\n }\n : null;\n\n return {\n dialogProps,\n titleProps,\n descriptionProps,\n backdropProps,\n close: onClose,\n };\n};\n","/**\n * @a13y/react - AccessibleDialog Component\n * Type-safe dialog component with enforced title\n */\n\nimport type { ReactNode } from 'react';\nimport { useAccessibleDialog } from '../hooks/use-accessible-dialog';\n\n/**\n * Props for AccessibleDialog\n */\nexport interface AccessibleDialogProps {\n /**\n * Whether dialog is open\n */\n isOpen: boolean;\n\n /**\n * Called when dialog should close\n */\n onClose: () => void;\n\n /**\n * Dialog title - REQUIRED for accessibility\n * This will be announced to screen readers\n */\n title: string;\n\n /**\n * Dialog content\n */\n children: ReactNode;\n\n /**\n * Optional description\n * Provides additional context to screen readers\n */\n description?: string;\n\n /**\n * ARIA role\n */\n role?: 'dialog' | 'alertdialog';\n\n /**\n * Whether to show close button\n */\n showCloseButton?: boolean;\n\n /**\n * Custom className for dialog container\n */\n className?: string;\n\n /**\n * Custom className for backdrop\n */\n backdropClassName?: string;\n}\n\n/**\n * Accessible Dialog Component\n *\n * Features:\n * - Focus trap with Tab/Shift+Tab cycling\n * - Escape key to close\n * - Focus restoration on close\n * - Click outside to close\n * - Required title for screen readers\n * - Body scroll lock when open\n *\n * @example\n * ```tsx\n * <AccessibleDialog\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Confirm Action\"\n * description=\"This action cannot be undone\"\n * >\n * <p>Are you sure you want to delete this item?</p>\n * <button onClick={handleConfirm}>Confirm</button>\n * <button onClick={() => setIsOpen(false)}>Cancel</button>\n * </AccessibleDialog>\n * ```\n */\nexport const AccessibleDialog = (props: AccessibleDialogProps) => {\n const {\n isOpen,\n onClose,\n title,\n children,\n description,\n role = 'dialog',\n showCloseButton = true,\n className = '',\n backdropClassName = '',\n } = props;\n\n const { dialogProps, titleProps, descriptionProps, backdropProps, close } = useAccessibleDialog({\n isOpen,\n onClose,\n title,\n description,\n role,\n isModal: true,\n closeOnBackdropClick: true,\n });\n\n if (!isOpen) {\n return null;\n }\n\n return (\n <>\n {/* Backdrop */}\n {backdropProps && (\n <div\n {...backdropProps}\n className={backdropClassName}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 50,\n }}\n />\n )}\n\n {/* Dialog */}\n <div\n ref={dialogProps.ref as React.RefObject<HTMLDivElement>}\n role={dialogProps.role}\n aria-labelledby={dialogProps['aria-labelledby']}\n aria-describedby={dialogProps['aria-describedby']}\n aria-modal={dialogProps['aria-modal']}\n tabIndex={dialogProps.tabIndex}\n className={className}\n style={{\n position: 'fixed',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n backgroundColor: 'white',\n borderRadius: '0.5rem',\n boxShadow: '0 20px 25px -5px rgba(0, 0, 0, 0.1)',\n padding: '1.5rem',\n maxWidth: '32rem',\n width: '90vw',\n maxHeight: '90vh',\n overflow: 'auto',\n zIndex: 51,\n }}\n >\n {/* Close button */}\n {showCloseButton && (\n <button\n type=\"button\"\n onClick={close}\n aria-label=\"Close dialog\"\n style={{\n position: 'absolute',\n top: '1rem',\n right: '1rem',\n padding: '0.5rem',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n fontSize: '1.25rem',\n lineHeight: 1,\n color: '#6b7280',\n }}\n >\n ✕\n </button>\n )}\n\n {/* Title */}\n <h2\n {...titleProps}\n style={{\n fontSize: '1.25rem',\n fontWeight: 600,\n marginBottom: description ? '0.5rem' : '1rem',\n paddingRight: showCloseButton ? '2rem' : 0,\n }}\n >\n {title}\n </h2>\n\n {/* Description */}\n {descriptionProps && description && (\n <p\n {...descriptionProps}\n style={{\n fontSize: '0.875rem',\n color: '#6b7280',\n marginBottom: '1rem',\n }}\n >\n {description}\n </p>\n )}\n\n {/* Content */}\n <div>{children}</div>\n </div>\n </>\n );\n};\n","/**\n * @a13y/react - useKeyboardNavigation\n * Roving tabindex keyboard navigation hook\n */\n\nimport type { NavigationDirection } from '@a13y/core/runtime/keyboard';\nimport { useCallback, useEffect, useRef, useState } from 'react';\n\n/**\n * Navigation orientation\n */\nexport type Orientation = 'horizontal' | 'vertical' | 'both';\n\n/**\n * Props for useKeyboardNavigation\n */\nexport interface UseKeyboardNavigationProps {\n /**\n * Navigation orientation\n * - 'horizontal': Arrow Left/Right\n * - 'vertical': Arrow Up/Down\n * - 'both': All arrow keys\n */\n orientation: Orientation;\n\n /**\n * Whether to loop at boundaries\n * @default false\n */\n loop?: boolean;\n\n /**\n * Callback when navigation occurs\n */\n onNavigate?: (index: number) => void;\n\n /**\n * Initial focused index\n * @default 0\n */\n defaultIndex?: number;\n\n /**\n * Controlled current index\n */\n currentIndex?: number;\n}\n\n/**\n * Item props for navigable items\n */\nexport interface NavigableItemProps {\n ref: (element: HTMLElement | null) => void;\n tabIndex: number;\n onKeyDown: (event: React.KeyboardEvent) => void;\n 'data-index': number;\n}\n\n/**\n * Return type\n */\nexport interface UseKeyboardNavigationReturn {\n /**\n * Current focused index\n */\n currentIndex: number;\n\n /**\n * Navigate to specific index\n */\n setCurrentIndex: (index: number) => void;\n\n /**\n * Get props for navigable item\n */\n getItemProps: (index: number) => NavigableItemProps;\n\n /**\n * Container props\n */\n containerProps: {\n role: 'toolbar' | 'listbox' | 'menu';\n 'aria-orientation': Orientation;\n };\n}\n\n/**\n * Hook for keyboard navigation with roving tabindex\n *\n * Features:\n * - Arrow key navigation\n * - Home/End navigation\n * - Roving tabindex pattern\n * - Automatic focus management\n * - Development-time validation\n *\n * @example\n * ```tsx\n * const { containerProps, getItemProps, currentIndex } =\n * useKeyboardNavigation({\n * orientation: 'horizontal',\n * loop: true,\n * });\n *\n * return (\n * <div {...containerProps}>\n * {items.map((item, index) => (\n * <button key={index} {...getItemProps(index)}>\n * {item.label}\n * </button>\n * ))}\n * </div>\n * );\n * ```\n */\nexport const useKeyboardNavigation = (\n props: UseKeyboardNavigationProps\n): UseKeyboardNavigationReturn => {\n const {\n orientation,\n loop = false,\n onNavigate,\n defaultIndex = 0,\n currentIndex: controlledIndex,\n } = props;\n\n const isControlled = controlledIndex !== undefined;\n const [uncontrolledIndex, setUncontrolledIndex] = useState(defaultIndex);\n const currentIndex = isControlled ? controlledIndex : uncontrolledIndex;\n\n const itemsRef = useRef<Map<number, HTMLElement>>(new Map());\n const containerRef = useRef<HTMLElement | null>(null);\n\n // Update current index\n const setCurrentIndex = useCallback(\n (index: number) => {\n if (!isControlled) {\n setUncontrolledIndex(index);\n }\n onNavigate?.(index);\n\n // Focus the element\n const element = itemsRef.current.get(index);\n if (element) {\n element.focus();\n }\n },\n [isControlled, onNavigate]\n );\n\n // Navigate in direction\n const navigate = useCallback(\n (direction: NavigationDirection) => {\n const itemCount = itemsRef.current.size;\n if (itemCount === 0) {\n return;\n }\n\n let nextIndex = currentIndex;\n\n switch (direction) {\n case 'forward':\n nextIndex = currentIndex + 1;\n if (nextIndex >= itemCount) {\n nextIndex = loop ? 0 : itemCount - 1;\n }\n break;\n\n case 'backward':\n nextIndex = currentIndex - 1;\n if (nextIndex < 0) {\n nextIndex = loop ? itemCount - 1 : 0;\n }\n break;\n\n case 'first':\n nextIndex = 0;\n break;\n\n case 'last':\n nextIndex = itemCount - 1;\n break;\n }\n\n if (nextIndex !== currentIndex) {\n setCurrentIndex(nextIndex);\n }\n },\n [currentIndex, loop, setCurrentIndex]\n );\n\n // Handle keyboard events\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent) => {\n const { key } = event;\n\n let direction: NavigationDirection | null = null;\n\n // Arrow keys\n if (key === 'ArrowRight') {\n if (orientation === 'horizontal' || orientation === 'both') {\n direction = 'forward';\n }\n } else if (key === 'ArrowLeft') {\n if (orientation === 'horizontal' || orientation === 'both') {\n direction = 'backward';\n }\n } else if (key === 'ArrowDown') {\n if (orientation === 'vertical' || orientation === 'both') {\n direction = 'forward';\n }\n } else if (key === 'ArrowUp') {\n if (orientation === 'vertical' || orientation === 'both') {\n direction = 'backward';\n }\n }\n\n // Home/End\n else if (key === 'Home') {\n direction = 'first';\n } else if (key === 'End') {\n direction = 'last';\n }\n\n if (direction) {\n event.preventDefault();\n navigate(direction);\n }\n },\n [orientation, navigate]\n );\n\n // Get props for individual item\n const getItemProps = useCallback(\n (index: number): NavigableItemProps => {\n return {\n ref: (element: HTMLElement | null) => {\n if (element) {\n itemsRef.current.set(index, element);\n } else {\n itemsRef.current.delete(index);\n }\n },\n tabIndex: index === currentIndex ? 0 : -1,\n onKeyDown: handleKeyDown,\n 'data-index': index,\n };\n },\n [currentIndex, handleKeyDown]\n );\n\n // Development-time validation\n useEffect(() => {\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n import('@a13y/devtools/runtime/validators').then(({ keyboardValidator }) => {\n // Validate container\n if (containerRef.current) {\n keyboardValidator.validateContainer(containerRef.current);\n }\n\n // Validate roving tabindex\n const container = Array.from(itemsRef.current.values())[0]?.parentElement;\n if (container) {\n keyboardValidator.validateRovingTabindex(container);\n }\n });\n }\n }, []);\n\n const containerProps = {\n role: 'toolbar' as const,\n 'aria-orientation': orientation,\n };\n\n return {\n currentIndex,\n setCurrentIndex,\n getItemProps,\n containerProps,\n };\n};\n","/**\n * @a13y/react - AccessibleMenu Component\n * Dropdown menu with keyboard navigation\n */\n\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\nimport { useAccessibleButton } from '../hooks/use-accessible-button';\nimport { useFocusTrap } from '../hooks/use-focus-trap';\nimport { useKeyboardNavigation } from '../hooks/use-keyboard-navigation';\n\n/**\n * Menu item definition\n */\nexport interface MenuItem {\n /**\n * Unique identifier\n */\n id: string;\n\n /**\n * Item label\n */\n label: string;\n\n /**\n * Click handler\n */\n onPress: () => void;\n\n /**\n * Whether item is disabled\n */\n disabled?: boolean;\n\n /**\n * Optional icon\n */\n icon?: ReactNode;\n}\n\n/**\n * Props for AccessibleMenu\n */\nexport interface AccessibleMenuProps {\n /**\n * Menu trigger button label\n */\n label: string;\n\n /**\n * Trigger button content\n */\n trigger: ReactNode;\n\n /**\n * Menu items\n */\n items: MenuItem[];\n\n /**\n * Custom className for trigger button\n */\n className?: string;\n\n /**\n * Custom className for menu container\n */\n menuClassName?: string;\n}\n\n/**\n * Accessible Menu Component\n *\n * Dropdown menu with full keyboard navigation:\n * - Arrow Up/Down to navigate items\n * - Enter/Space to select\n * - Escape to close\n * - Focus trap when open\n *\n * @example\n * ```tsx\n * <AccessibleMenu\n * label=\"Open actions menu\"\n * trigger=\"Actions ▼\"\n * items={[\n * { id: 'edit', label: 'Edit', onPress: () => console.log('Edit') },\n * { id: 'delete', label: 'Delete', onPress: () => console.log('Delete'), disabled: true },\n * { id: 'share', label: 'Share', onPress: () => console.log('Share') },\n * ]}\n * />\n * ```\n */\nexport const AccessibleMenu = (props: AccessibleMenuProps) => {\n const { label, trigger, items, className = '', menuClassName = '' } = props;\n\n const [isOpen, setIsOpen] = useState(false);\n\n // Trigger button\n const { buttonProps: triggerProps } = useAccessibleButton({\n label,\n onPress: () => setIsOpen(!isOpen),\n });\n\n // Focus trap for menu\n const { trapRef } = useFocusTrap({\n isActive: isOpen,\n onEscape: () => setIsOpen(false),\n restoreFocus: true,\n });\n\n // Keyboard navigation for menu items\n const { getItemProps } = useKeyboardNavigation({\n orientation: 'vertical',\n loop: true,\n });\n\n const handleItemPress = (item: MenuItem) => {\n if (item.disabled) {\n return;\n }\n item.onPress();\n setIsOpen(false);\n };\n\n return (\n <div style={{ position: 'relative', display: 'inline-block' }}>\n {/* Trigger */}\n <button\n {...triggerProps}\n className={className}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n style={{\n padding: '0.5rem 1rem',\n border: '1px solid #d1d5db',\n borderRadius: '0.375rem',\n backgroundColor: 'white',\n cursor: 'pointer',\n fontSize: '0.875rem',\n fontWeight: 500,\n }}\n >\n {trigger}\n </button>\n\n {/* Menu */}\n {isOpen && (\n <div\n ref={trapRef as React.RefObject<HTMLDivElement>}\n role=\"menu\"\n aria-orientation=\"vertical\"\n className={menuClassName}\n style={{\n position: 'absolute',\n top: 'calc(100% + 0.25rem)',\n left: 0,\n minWidth: '12rem',\n backgroundColor: 'white',\n border: '1px solid #e5e7eb',\n borderRadius: '0.375rem',\n boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1)',\n padding: '0.25rem',\n zIndex: 50,\n }}\n >\n {items.map((item, index) => {\n const itemProps = getItemProps(index);\n\n return (\n <button\n key={item.id}\n {...itemProps}\n role=\"menuitem\"\n disabled={item.disabled}\n onClick={() => handleItemPress(item)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.75rem',\n width: '100%',\n padding: '0.5rem 0.75rem',\n border: 'none',\n background: 'transparent',\n textAlign: 'left',\n fontSize: '0.875rem',\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n borderRadius: '0.25rem',\n color: item.disabled ? '#9ca3af' : '#111827',\n opacity: item.disabled ? 0.5 : 1,\n }}\n onMouseEnter={(e) => {\n if (!item.disabled) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n {item.icon && <span>{item.icon}</span>}\n <span>{item.label}</span>\n </button>\n );\n })}\n </div>\n )}\n </div>\n );\n};\n","/**\n * @a13y/react - AccessibleModal Component\n * Full-screen modal with header, body, footer sections\n */\n\nimport type { ReactNode } from 'react';\nimport { useAccessibleDialog } from '../hooks/use-accessible-dialog';\n\n/**\n * Props for AccessibleModal\n */\nexport interface AccessibleModalProps {\n /**\n * Whether modal is open\n */\n isOpen: boolean;\n\n /**\n * Called when modal should close\n */\n onClose: () => void;\n\n /**\n * Modal title - REQUIRED\n */\n title: string;\n\n /**\n * Modal body content\n */\n children: ReactNode;\n\n /**\n * Footer content (typically action buttons)\n */\n footer?: ReactNode;\n\n /**\n * Modal size\n */\n size?: 'sm' | 'md' | 'lg' | 'xl' | 'full';\n\n /**\n * Whether modal can be closed by clicking outside\n */\n closeOnBackdropClick?: boolean;\n\n /**\n * Custom className for modal container\n */\n className?: string;\n}\n\n/**\n * Accessible Modal Component\n *\n * Full-featured modal with header, body, and footer sections.\n *\n * @example\n * ```tsx\n * <AccessibleModal\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * title=\"Edit Profile\"\n * size=\"md\"\n * footer={\n * <>\n * <AccessibleButton onPress={() => setIsOpen(false)}>\n * Cancel\n * </AccessibleButton>\n * <AccessibleButton onPress={handleSave} variant=\"primary\">\n * Save Changes\n * </AccessibleButton>\n * </>\n * }\n * >\n * <form>\n * <input type=\"text\" placeholder=\"Name\" />\n * <input type=\"email\" placeholder=\"Email\" />\n * </form>\n * </AccessibleModal>\n * ```\n */\nexport const AccessibleModal = (props: AccessibleModalProps) => {\n const {\n isOpen,\n onClose,\n title,\n children,\n footer,\n size = 'md',\n closeOnBackdropClick = false,\n className = '',\n } = props;\n\n const { dialogProps, titleProps, backdropProps, close } = useAccessibleDialog({\n isOpen,\n onClose,\n title,\n role: 'dialog',\n isModal: true,\n closeOnBackdropClick,\n });\n\n if (!isOpen) {\n return null;\n }\n\n // Size variants\n const sizeStyles: Record<NonNullable<AccessibleModalProps['size']>, React.CSSProperties> = {\n sm: { maxWidth: '24rem' },\n md: { maxWidth: '32rem' },\n lg: { maxWidth: '48rem' },\n xl: { maxWidth: '64rem' },\n full: { maxWidth: '95vw', maxHeight: '95vh' },\n };\n\n return (\n <>\n {/* Backdrop */}\n {backdropProps && (\n <div\n {...backdropProps}\n style={{\n position: 'fixed',\n inset: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.6)',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n zIndex: 50,\n }}\n />\n )}\n\n {/* Modal */}\n <div\n ref={dialogProps.ref as React.RefObject<HTMLDivElement>}\n role={dialogProps.role}\n aria-labelledby={dialogProps['aria-labelledby']}\n aria-describedby={dialogProps['aria-describedby']}\n aria-modal={dialogProps['aria-modal']}\n tabIndex={dialogProps.tabIndex}\n className={className}\n style={{\n position: 'fixed',\n top: '50%',\n left: '50%',\n transform: 'translate(-50%, -50%)',\n backgroundColor: 'white',\n borderRadius: '0.5rem',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25)',\n width: '90vw',\n maxHeight: '90vh',\n display: 'flex',\n flexDirection: 'column',\n zIndex: 51,\n ...sizeStyles[size],\n }}\n >\n {/* Header */}\n <div\n style={{\n padding: '1.5rem',\n borderBottom: '1px solid #e5e7eb',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n }}\n >\n <h2\n {...titleProps}\n style={{\n fontSize: '1.25rem',\n fontWeight: 600,\n margin: 0,\n }}\n >\n {title}\n </h2>\n\n <button\n type=\"button\"\n onClick={close}\n aria-label=\"Close modal\"\n style={{\n padding: '0.5rem',\n border: 'none',\n background: 'transparent',\n cursor: 'pointer',\n fontSize: '1.25rem',\n lineHeight: 1,\n color: '#6b7280',\n borderRadius: '0.25rem',\n }}\n >\n ✕\n </button>\n </div>\n\n {/* Body */}\n <div\n style={{\n flex: 1,\n overflowY: 'auto',\n padding: '1.5rem',\n }}\n >\n {children}\n </div>\n\n {/* Footer */}\n {footer && (\n <div\n style={{\n padding: '1.5rem',\n borderTop: '1px solid #e5e7eb',\n display: 'flex',\n gap: '0.75rem',\n justifyContent: 'flex-end',\n }}\n >\n {footer}\n </div>\n )}\n </div>\n </>\n );\n};\n","/**\n * @a13y/react - AccessibleTabs Component\n * Tab interface with keyboard navigation\n */\n\nimport type { ReactNode } from 'react';\nimport { useState } from 'react';\nimport { useKeyboardNavigation } from '../hooks/use-keyboard-navigation';\n\n/**\n * Tab definition\n */\nexport interface Tab {\n /**\n * Unique identifier\n */\n id: string;\n\n /**\n * Tab label - REQUIRED for accessibility\n */\n label: string;\n\n /**\n * Tab panel content\n */\n content: ReactNode;\n\n /**\n * Whether tab is disabled\n */\n disabled?: boolean;\n\n /**\n * Optional icon\n */\n icon?: ReactNode;\n}\n\n/**\n * Props for AccessibleTabs\n */\nexport interface AccessibleTabsProps {\n /**\n * Tabs configuration - REQUIRED\n * Must have at least one tab\n */\n tabs: [Tab, ...Tab[]]; // Non-empty array\n\n /**\n * Initially selected tab index\n */\n defaultTab?: number;\n\n /**\n * Controlled selected tab index\n */\n selectedTab?: number;\n\n /**\n * Called when tab changes\n */\n onTabChange?: (index: number) => void;\n\n /**\n * Custom className for tabs container\n */\n className?: string;\n\n /**\n * Custom className for panel\n */\n panelClassName?: string;\n}\n\n/**\n * Accessible Tabs Component\n *\n * Tab interface following WAI-ARIA Tabs pattern:\n * - Arrow Left/Right to navigate tabs\n * - Home/End to jump to first/last\n * - Automatic panel switching\n * - Proper ARIA attributes\n *\n * @example\n * ```tsx\n * <AccessibleTabs\n * tabs={[\n * {\n * id: 'account',\n * label: 'Account',\n * content: <div>Account settings...</div>,\n * },\n * {\n * id: 'security',\n * label: 'Security',\n * content: <div>Security settings...</div>,\n * },\n * {\n * id: 'billing',\n * label: 'Billing',\n * content: <div>Billing information...</div>,\n * disabled: true,\n * },\n * ]}\n * />\n * ```\n */\nexport const AccessibleTabs = (props: AccessibleTabsProps) => {\n const {\n tabs,\n defaultTab = 0,\n selectedTab: controlledTab,\n onTabChange,\n className = '',\n panelClassName = '',\n } = props;\n\n const isControlled = controlledTab !== undefined;\n const [uncontrolledTab, setUncontrolledTab] = useState(defaultTab);\n const selectedIndex = isControlled ? controlledTab : uncontrolledTab;\n\n // Keyboard navigation\n const { getItemProps, setCurrentIndex } = useKeyboardNavigation({\n orientation: 'horizontal',\n loop: false,\n currentIndex: selectedIndex,\n onNavigate: (index) => {\n // Skip disabled tabs\n if (tabs[index]?.disabled) {\n return;\n }\n\n if (!isControlled) {\n setUncontrolledTab(index);\n }\n onTabChange?.(index);\n },\n });\n\n const handleTabClick = (index: number) => {\n if (tabs[index]?.disabled) {\n return;\n }\n\n setCurrentIndex(index);\n\n if (!isControlled) {\n setUncontrolledTab(index);\n }\n onTabChange?.(index);\n };\n\n const selectedTab = tabs[selectedIndex];\n\n return (\n <div className={className}>\n {/* Tab List */}\n <div\n role=\"tablist\"\n aria-orientation=\"horizontal\"\n style={{\n display: 'flex',\n borderBottom: '2px solid #e5e7eb',\n gap: '0.25rem',\n }}\n >\n {tabs.map((tab, index) => {\n const itemProps = getItemProps(index);\n const isSelected = index === selectedIndex;\n\n return (\n <button\n key={tab.id}\n {...itemProps}\n id={`tab-${tab.id}`}\n role=\"tab\"\n aria-selected={isSelected}\n aria-controls={`panel-${tab.id}`}\n disabled={tab.disabled}\n onClick={() => handleTabClick(index)}\n style={{\n display: 'flex',\n alignItems: 'center',\n gap: '0.5rem',\n padding: '0.75rem 1rem',\n border: 'none',\n background: 'transparent',\n cursor: tab.disabled ? 'not-allowed' : 'pointer',\n fontSize: '0.875rem',\n fontWeight: isSelected ? 600 : 400,\n color: tab.disabled ? '#9ca3af' : isSelected ? '#2563eb' : '#6b7280',\n borderBottom: isSelected ? '2px solid #2563eb' : 'none',\n marginBottom: '-2px',\n opacity: tab.disabled ? 0.5 : 1,\n transition: 'color 0.2s',\n }}\n >\n {tab.icon && <span>{tab.icon}</span>}\n <span>{tab.label}</span>\n </button>\n );\n })}\n </div>\n\n {/* Tab Panel */}\n {selectedTab && (\n <div\n id={`panel-${selectedTab.id}`}\n role=\"tabpanel\"\n aria-labelledby={`tab-${selectedTab.id}`}\n className={panelClassName}\n style={{\n padding: '1.5rem',\n }}\n >\n {selectedTab.content}\n </div>\n )}\n </div>\n );\n};\n","/**\n * useId Hook\n * Generates unique IDs for accessibility attributes\n * Provides backward compatibility for React < 18\n */\n\nimport { useRef } from 'react';\n\nlet idCounter = 0;\n\n/**\n * Generates a unique ID for accessibility attributes\n * @param prefix - Optional prefix for the ID\n * @returns A unique ID string\n *\n * @example\n * ```tsx\n * const tooltipId = useId('tooltip');\n * // Returns: \"tooltip-1\"\n * ```\n */\nexport function useId(prefix = 'a13y'): string {\n const idRef = useRef<string | undefined>(undefined);\n\n if (!idRef.current) {\n idRef.current = `${prefix}-${++idCounter}`;\n }\n\n return idRef.current;\n}\n","/**\n * AccessibleTooltip Component\n * A fully accessible tooltip with proper ARIA attributes and keyboard support\n */\n\nimport React, { type ReactElement, cloneElement, useState, useRef, useEffect } from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface AccessibleTooltipProps {\n /** Content to display in the tooltip */\n content: string;\n /** Placement of the tooltip relative to the trigger */\n placement?: 'top' | 'bottom' | 'left' | 'right';\n /** Delay before showing the tooltip (in milliseconds) */\n delay?: number;\n /** Trigger method for showing the tooltip */\n trigger?: 'hover' | 'focus' | 'both';\n /** The element that triggers the tooltip */\n children: ReactElement;\n /** Optional className for the tooltip container */\n className?: string;\n /** Optional styles for the tooltip container */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible tooltip component that properly announces content to screen readers\n *\n * @example\n * ```tsx\n * <AccessibleTooltip content=\"This is helpful information\">\n * <button>Hover me</button>\n * </AccessibleTooltip>\n * ```\n */\nexport const AccessibleTooltip: React.FC<AccessibleTooltipProps> = ({\n content,\n placement = 'top',\n delay = 300,\n trigger = 'both',\n children,\n className = '',\n style = {},\n}) => {\n const tooltipId = useId('tooltip');\n const [isVisible, setIsVisible] = useState(false);\n const timeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n const triggerRef = useRef<HTMLElement>(null);\n\n const showTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n setIsVisible(true);\n }, delay);\n };\n\n const hideTooltip = () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n setIsVisible(false);\n };\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n // Handle ESC key to close tooltip\n useEffect(() => {\n if (!isVisible) return;\n\n const handleEscape = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n hideTooltip();\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isVisible]);\n\n const shouldTriggerOnHover = trigger === 'hover' || trigger === 'both';\n const shouldTriggerOnFocus = trigger === 'focus' || trigger === 'both';\n\n const childProps: Record<string, unknown> = {\n ref: triggerRef,\n 'aria-describedby': isVisible ? tooltipId : undefined,\n };\n\n if (shouldTriggerOnHover) {\n childProps.onMouseEnter = () => showTooltip();\n childProps.onMouseLeave = () => hideTooltip();\n }\n\n if (shouldTriggerOnFocus) {\n childProps.onFocus = () => showTooltip();\n childProps.onBlur = () => hideTooltip();\n }\n\n const getTooltipPosition = (): React.CSSProperties => {\n const baseStyles: React.CSSProperties = {\n position: 'absolute',\n zIndex: 1000,\n padding: '8px 12px',\n backgroundColor: '#333',\n color: '#fff',\n borderRadius: '4px',\n fontSize: '14px',\n whiteSpace: 'nowrap',\n pointerEvents: 'none',\n };\n\n switch (placement) {\n case 'top':\n return { ...baseStyles, bottom: '100%', left: '50%', transform: 'translateX(-50%)', marginBottom: '8px' };\n case 'bottom':\n return { ...baseStyles, top: '100%', left: '50%', transform: 'translateX(-50%)', marginTop: '8px' };\n case 'left':\n return { ...baseStyles, right: '100%', top: '50%', transform: 'translateY(-50%)', marginRight: '8px' };\n case 'right':\n return { ...baseStyles, left: '100%', top: '50%', transform: 'translateY(-50%)', marginLeft: '8px' };\n default:\n return baseStyles;\n }\n };\n\n return (\n <span style={{ position: 'relative', display: 'inline-block' }}>\n {cloneElement(children, childProps)}\n {isVisible && (\n <span\n role=\"tooltip\"\n id={tooltipId}\n className={className}\n style={{ ...getTooltipPosition(), ...style }}\n >\n {content}\n </span>\n )}\n </span>\n );\n};\n","/**\n * AccessibleToggle Component\n * A fully accessible toggle/switch component with ARIA support\n */\n\nimport React from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface AccessibleToggleProps {\n /** Whether the toggle is checked */\n checked: boolean;\n /** Callback when the toggle state changes */\n onChange: (checked: boolean) => void;\n /** Label for the toggle */\n label: string;\n /** Optional description for additional context */\n description?: string;\n /** Whether the toggle is disabled */\n disabled?: boolean;\n /** Optional className for the container */\n className?: string;\n /** Optional className for the switch element */\n switchClassName?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible toggle/switch component with proper ARIA attributes\n *\n * @example\n * ```tsx\n * const [enabled, setEnabled] = useState(false);\n *\n * <AccessibleToggle\n * checked={enabled}\n * onChange={setEnabled}\n * label=\"Enable notifications\"\n * description=\"Receive email notifications for updates\"\n * />\n * ```\n */\nexport const AccessibleToggle: React.FC<AccessibleToggleProps> = ({\n checked,\n onChange,\n label,\n description,\n disabled = false,\n className = '',\n switchClassName = '',\n style = {},\n}) => {\n const toggleId = useId('toggle');\n const descriptionId = useId('toggle-description');\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === ' ' || event.key === 'Enter') {\n event.preventDefault();\n if (!disabled) {\n onChange(!checked);\n }\n }\n };\n\n const handleClick = () => {\n if (!disabled) {\n onChange(!checked);\n }\n };\n\n const containerStyles: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n gap: '12px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.6 : 1,\n ...style,\n };\n\n const switchStyles: React.CSSProperties = {\n position: 'relative',\n width: '44px',\n height: '24px',\n backgroundColor: checked ? '#007bff' : '#ccc',\n borderRadius: '12px',\n transition: 'background-color 0.2s',\n flexShrink: 0,\n };\n\n const thumbStyles: React.CSSProperties = {\n position: 'absolute',\n top: '2px',\n left: checked ? '22px' : '2px',\n width: '20px',\n height: '20px',\n backgroundColor: '#fff',\n borderRadius: '50%',\n transition: 'left 0.2s',\n };\n\n const labelStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n };\n\n const descriptionStyles: React.CSSProperties = {\n fontSize: '0.875rem',\n color: '#666',\n };\n\n return (\n <div\n className={className}\n style={containerStyles}\n onClick={handleClick}\n >\n <div\n role=\"switch\"\n aria-checked={checked}\n aria-labelledby={toggleId}\n aria-describedby={description ? descriptionId : undefined}\n aria-disabled={disabled}\n tabIndex={disabled ? -1 : 0}\n onKeyDown={handleKeyDown}\n className={switchClassName}\n style={switchStyles}\n >\n <div style={thumbStyles} />\n </div>\n <div style={labelStyles}>\n <label\n id={toggleId}\n htmlFor={toggleId}\n style={{ fontWeight: 500, cursor: disabled ? 'not-allowed' : 'pointer' }}\n >\n {label}\n </label>\n {description && (\n <span id={descriptionId} style={descriptionStyles}>\n {description}\n </span>\n )}\n </div>\n </div>\n );\n};\n","/**\n * AccessibleToast Component\n * Accessible toast notifications with proper ARIA live regions\n */\n\nimport React, { useEffect, useState } from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport type ToastType = 'success' | 'error' | 'warning' | 'info';\nexport type ToastPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';\n\nexport interface ToastAction {\n /** Label for the action button */\n label: string;\n /** Callback when action is clicked */\n onClick: () => void;\n}\n\nexport interface AccessibleToastProps {\n /** The message to display */\n message: string;\n /** Type of toast (affects styling and ARIA role) */\n type?: ToastType;\n /** Duration in milliseconds (0 = no auto-dismiss) */\n duration?: number;\n /** Position of the toast */\n position?: ToastPosition;\n /** Optional action button */\n action?: ToastAction;\n /** Whether the toast is visible */\n isOpen: boolean;\n /** Callback when toast is dismissed */\n onClose: () => void;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible toast notification component with ARIA live regions\n *\n * @example\n * ```tsx\n * const [showToast, setShowToast] = useState(false);\n *\n * <AccessibleToast\n * message=\"Item added to cart\"\n * type=\"success\"\n * duration={5000}\n * isOpen={showToast}\n * onClose={() => setShowToast(false)}\n * action={{\n * label: 'Undo',\n * onClick: () => removeItem()\n * }}\n * />\n * ```\n */\nexport const AccessibleToast: React.FC<AccessibleToastProps> = ({\n message,\n type = 'info',\n duration = 5000,\n position = 'top-right',\n action,\n isOpen,\n onClose,\n className = '',\n style = {},\n}) => {\n const toastId = useId('toast');\n const [isVisible, setIsVisible] = useState(isOpen);\n\n useEffect(() => {\n setIsVisible(isOpen);\n }, [isOpen]);\n\n useEffect(() => {\n if (!isVisible || duration === 0) return;\n\n const timer = setTimeout(() => {\n setIsVisible(false);\n onClose();\n }, duration);\n\n return () => clearTimeout(timer);\n }, [isVisible, duration, onClose]);\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (event.key === 'Escape') {\n setIsVisible(false);\n onClose();\n }\n };\n\n if (!isVisible) return null;\n\n const getAriaRole = (): 'status' | 'alert' => {\n return type === 'error' ? 'alert' : 'status';\n };\n\n const getAriaPoliteness = (): 'polite' | 'assertive' => {\n return type === 'error' ? 'assertive' : 'polite';\n };\n\n const getPositionStyles = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n position: 'fixed',\n zIndex: 9999,\n };\n\n switch (position) {\n case 'top-right':\n return { ...base, top: '16px', right: '16px' };\n case 'top-left':\n return { ...base, top: '16px', left: '16px' };\n case 'bottom-right':\n return { ...base, bottom: '16px', right: '16px' };\n case 'bottom-left':\n return { ...base, bottom: '16px', left: '16px' };\n case 'top-center':\n return { ...base, top: '16px', left: '50%', transform: 'translateX(-50%)' };\n case 'bottom-center':\n return { ...base, bottom: '16px', left: '50%', transform: 'translateX(-50%)' };\n default:\n return base;\n }\n };\n\n const getTypeStyles = (): React.CSSProperties => {\n const baseTypeStyles: Record<ToastType, React.CSSProperties> = {\n success: { backgroundColor: '#10b981', color: '#fff' },\n error: { backgroundColor: '#ef4444', color: '#fff' },\n warning: { backgroundColor: '#f59e0b', color: '#fff' },\n info: { backgroundColor: '#3b82f6', color: '#fff' },\n };\n\n return baseTypeStyles[type];\n };\n\n const toastStyles: React.CSSProperties = {\n ...getPositionStyles(),\n ...getTypeStyles(),\n minWidth: '300px',\n maxWidth: '500px',\n padding: '16px',\n borderRadius: '8px',\n boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',\n display: 'flex',\n alignItems: 'center',\n gap: '12px',\n animation: 'slideIn 0.3s ease-out',\n ...style,\n };\n\n const messageStyles: React.CSSProperties = {\n flex: 1,\n fontSize: '14px',\n lineHeight: '1.5',\n };\n\n const buttonStyles: React.CSSProperties = {\n background: 'transparent',\n border: '1px solid currentColor',\n color: 'inherit',\n padding: '4px 12px',\n borderRadius: '4px',\n fontSize: '14px',\n cursor: 'pointer',\n transition: 'opacity 0.2s',\n };\n\n const closeButtonStyles: React.CSSProperties = {\n ...buttonStyles,\n border: 'none',\n padding: '4px 8px',\n fontSize: '18px',\n lineHeight: '1',\n };\n\n return (\n <div\n id={toastId}\n role={getAriaRole()}\n aria-live={getAriaPoliteness()}\n aria-atomic=\"true\"\n className={className}\n style={toastStyles}\n onKeyDown={handleKeyDown}\n tabIndex={-1}\n >\n <div style={messageStyles}>{message}</div>\n {action && (\n <button\n type=\"button\"\n onClick={() => {\n action.onClick();\n setIsVisible(false);\n onClose();\n }}\n style={buttonStyles}\n onMouseEnter={(e) => (e.currentTarget.style.opacity = '0.8')}\n onMouseLeave={(e) => (e.currentTarget.style.opacity = '1')}\n >\n {action.label}\n </button>\n )}\n <button\n type=\"button\"\n onClick={() => {\n setIsVisible(false);\n onClose();\n }}\n aria-label=\"Close notification\"\n style={closeButtonStyles}\n onMouseEnter={(e) => (e.currentTarget.style.opacity = '0.8')}\n onMouseLeave={(e) => (e.currentTarget.style.opacity = '1')}\n >\n ×\n </button>\n </div>\n );\n};\n\n/**\n * ToastContainer component to manage multiple toasts\n */\nexport interface Toast {\n id: string;\n message: string;\n type?: ToastType;\n duration?: number;\n action?: ToastAction;\n}\n\nexport interface ToastContainerProps {\n /** Array of toasts to display */\n toasts: Toast[];\n /** Callback to remove a toast */\n onRemove: (id: string) => void;\n /** Position for all toasts */\n position?: ToastPosition;\n}\n\n/**\n * Container component to manage multiple toast notifications\n *\n * @example\n * ```tsx\n * const [toasts, setToasts] = useState<Toast[]>([]);\n *\n * const addToast = (message: string, type: ToastType) => {\n * const id = Date.now().toString();\n * setToasts(prev => [...prev, { id, message, type }]);\n * };\n *\n * const removeToast = (id: string) => {\n * setToasts(prev => prev.filter(t => t.id !== id));\n * };\n *\n * <ToastContainer toasts={toasts} onRemove={removeToast} />\n * ```\n */\nexport const ToastContainer: React.FC<ToastContainerProps> = ({\n toasts,\n onRemove,\n position = 'top-right',\n}) => {\n return (\n <>\n {toasts.map((toast) => (\n <AccessibleToast\n key={toast.id}\n message={toast.message}\n type={toast.type}\n duration={toast.duration}\n position={position}\n action={toast.action}\n isOpen={true}\n onClose={() => onRemove(toast.id)}\n />\n ))}\n </>\n );\n};\n","/**\n * AccessibleAccordion Component\n * Fully accessible accordion with ARIA attributes and keyboard navigation\n */\n\nimport React, { useState, type ReactNode } from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface AccordionItem {\n /** Unique identifier for the item */\n id: string;\n /** Title/header for the accordion item */\n title: string;\n /** Content to display when expanded */\n content: ReactNode;\n /** Whether this item is disabled */\n disabled?: boolean;\n}\n\nexport interface AccessibleAccordionProps {\n /** Array of accordion items */\n items: AccordionItem[];\n /** Allow multiple items to be open at once */\n allowMultiple?: boolean;\n /** IDs of items that should be open by default */\n defaultOpenItems?: string[];\n /** Callback when item is toggled */\n onToggle?: (itemId: string, isOpen: boolean) => void;\n /** Optional className for the container */\n className?: string;\n /** Optional className for each item */\n itemClassName?: string;\n /** Optional className for headers */\n headerClassName?: string;\n /** Optional className for content */\n contentClassName?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible accordion component with keyboard navigation\n *\n * @example\n * ```tsx\n * const items = [\n * {\n * id: '1',\n * title: 'What is accessibility?',\n * content: 'Accessibility ensures that people with disabilities can use your website.'\n * },\n * {\n * id: '2',\n * title: 'Why is it important?',\n * content: 'It makes your content available to everyone, regardless of ability.'\n * }\n * ];\n *\n * <AccessibleAccordion\n * items={items}\n * allowMultiple={false}\n * defaultOpenItems={['1']}\n * />\n * ```\n */\nexport const AccessibleAccordion: React.FC<AccessibleAccordionProps> = ({\n items,\n allowMultiple = false,\n defaultOpenItems = [],\n onToggle,\n className = '',\n itemClassName = '',\n headerClassName = '',\n contentClassName = '',\n style = {},\n}) => {\n const [openItems, setOpenItems] = useState<Set<string>>(\n new Set(defaultOpenItems)\n );\n\n const toggleItem = (itemId: string) => {\n setOpenItems((prev) => {\n const newOpenItems = new Set(prev);\n\n if (newOpenItems.has(itemId)) {\n newOpenItems.delete(itemId);\n onToggle?.(itemId, false);\n } else {\n if (!allowMultiple) {\n newOpenItems.clear();\n }\n newOpenItems.add(itemId);\n onToggle?.(itemId, true);\n }\n\n return newOpenItems;\n });\n };\n\n const handleKeyDown = (event: React.KeyboardEvent, itemId: string, index: number) => {\n const item = items.find((i) => i.id === itemId);\n if (item?.disabled) return;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n toggleItem(itemId);\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n focusNextItem(index);\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n focusPreviousItem(index);\n break;\n\n case 'Home':\n event.preventDefault();\n focusFirstItem();\n break;\n\n case 'End':\n event.preventDefault();\n focusLastItem();\n break;\n }\n };\n\n const focusNextItem = (currentIndex: number) => {\n const nextIndex = (currentIndex + 1) % items.length;\n focusItemByIndex(nextIndex);\n };\n\n const focusPreviousItem = (currentIndex: number) => {\n const prevIndex = currentIndex === 0 ? items.length - 1 : currentIndex - 1;\n focusItemByIndex(prevIndex);\n };\n\n const focusFirstItem = () => {\n focusItemByIndex(0);\n };\n\n const focusLastItem = () => {\n focusItemByIndex(items.length - 1);\n };\n\n const focusItemByIndex = (index: number) => {\n const button = document.querySelector(\n `[data-accordion-button][data-index=\"${index}\"]`\n ) as HTMLButtonElement;\n button?.focus();\n };\n\n const containerStyles: React.CSSProperties = {\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n overflow: 'hidden',\n ...style,\n };\n\n const itemStyles: React.CSSProperties = {\n borderBottom: '1px solid #e5e7eb',\n };\n\n const headerStyles: React.CSSProperties = {\n width: '100%',\n padding: '16px',\n backgroundColor: 'rgba(128, 128, 128, 0.08)',\n border: 'none',\n textAlign: 'left',\n fontSize: '16px',\n fontWeight: 500,\n cursor: 'pointer',\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n transition: 'background-color 0.2s',\n color: 'inherit',\n };\n\n const contentStyles: React.CSSProperties = {\n padding: '16px',\n backgroundColor: 'rgba(128, 128, 128, 0.05)',\n color: 'inherit',\n };\n\n const iconStyles = (isOpen: boolean): React.CSSProperties => ({\n transition: 'transform 0.2s',\n transform: isOpen ? 'rotate(180deg)' : 'rotate(0deg)',\n });\n\n return (\n <div className={className} style={containerStyles}>\n {items.map((item, index) => {\n const isOpen = openItems.has(item.id);\n const buttonId = useId(`accordion-button-${item.id}`);\n const panelId = useId(`accordion-panel-${item.id}`);\n\n return (\n <div\n key={item.id}\n className={itemClassName}\n style={{ ...itemStyles, borderBottom: index === items.length - 1 ? 'none' : itemStyles.borderBottom }}\n >\n <h3 style={{ margin: 0 }}>\n <button\n id={buttonId}\n type=\"button\"\n aria-expanded={isOpen}\n aria-controls={panelId}\n aria-disabled={item.disabled}\n disabled={item.disabled}\n onClick={() => !item.disabled && toggleItem(item.id)}\n onKeyDown={(e) => handleKeyDown(e, item.id, index)}\n className={headerClassName}\n style={{\n ...headerStyles,\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n opacity: item.disabled ? 0.6 : 1,\n }}\n data-accordion-button\n data-index={index}\n onMouseEnter={(e) => !item.disabled && (e.currentTarget.style.backgroundColor = 'rgba(128, 128, 128, 0.15)')}\n onMouseLeave={(e) => (e.currentTarget.style.backgroundColor = 'rgba(128, 128, 128, 0.08)')}\n >\n <span>{item.title}</span>\n <span aria-hidden=\"true\" style={iconStyles(isOpen)}>\n ▼\n </span>\n </button>\n </h3>\n {isOpen && (\n <div\n id={panelId}\n role=\"region\"\n aria-labelledby={buttonId}\n className={contentClassName}\n style={contentStyles}\n >\n {item.content}\n </div>\n )}\n </div>\n );\n })}\n </div>\n );\n};\n","/**\n * AccessibleBreadcrumb Component\n * Accessible breadcrumb navigation with proper ARIA attributes\n */\n\nimport React, { type ReactNode } from 'react';\n\nexport interface BreadcrumbItem {\n /** Label to display */\n label: string;\n /** Optional href for link */\n href?: string;\n /** Optional click handler (alternative to href) */\n onClick?: () => void;\n}\n\nexport interface AccessibleBreadcrumbProps {\n /** Array of breadcrumb items */\n items: BreadcrumbItem[];\n /** Optional separator between items */\n separator?: ReactNode;\n /** Optional aria-label for the navigation */\n ariaLabel?: string;\n /** Optional className for the nav element */\n className?: string;\n /** Optional className for items */\n itemClassName?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible breadcrumb navigation component\n *\n * @example\n * ```tsx\n * const items = [\n * { label: 'Home', href: '/' },\n * { label: 'Products', href: '/products' },\n * { label: 'Electronics', href: '/products/electronics' },\n * { label: 'Laptops' }\n * ];\n *\n * <AccessibleBreadcrumb items={items} />\n * ```\n */\nexport const AccessibleBreadcrumb: React.FC<AccessibleBreadcrumbProps> = ({\n items,\n separator = '/',\n ariaLabel = 'Breadcrumb',\n className = '',\n itemClassName = '',\n style = {},\n}) => {\n if (items.length === 0) return null;\n\n const navStyles: React.CSSProperties = {\n ...style,\n };\n\n const listStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n flexWrap: 'wrap',\n };\n\n const itemStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n };\n\n const linkStyles: React.CSSProperties = {\n color: '#3b82f6',\n textDecoration: 'none',\n transition: 'color 0.2s',\n };\n\n const currentStyles: React.CSSProperties = {\n color: '#6b7280',\n fontWeight: 500,\n };\n\n const separatorStyles: React.CSSProperties = {\n color: '#9ca3af',\n userSelect: 'none',\n };\n\n return (\n <nav aria-label={ariaLabel} className={className} style={navStyles}>\n <ol style={listStyles}>\n {items.map((item, index) => {\n const isLast = index === items.length - 1;\n const isCurrent = isLast;\n\n return (\n <li key={index} className={itemClassName} style={itemStyles}>\n {isCurrent ? (\n <span aria-current=\"page\" style={currentStyles}>\n {item.label}\n </span>\n ) : item.href ? (\n <a\n href={item.href}\n style={linkStyles}\n onMouseEnter={(e) => (e.currentTarget.style.color = '#2563eb')}\n onMouseLeave={(e) => (e.currentTarget.style.color = '#3b82f6')}\n >\n {item.label}\n </a>\n ) : item.onClick ? (\n <button\n type=\"button\"\n onClick={item.onClick}\n style={{\n ...linkStyles,\n background: 'transparent',\n border: 'none',\n padding: 0,\n cursor: 'pointer',\n font: 'inherit',\n }}\n onMouseEnter={(e) => (e.currentTarget.style.color = '#2563eb')}\n onMouseLeave={(e) => (e.currentTarget.style.color = '#3b82f6')}\n >\n {item.label}\n </button>\n ) : (\n <span style={currentStyles}>{item.label}</span>\n )}\n {!isLast && (\n <span aria-hidden=\"true\" style={separatorStyles}>\n {separator}\n </span>\n )}\n </li>\n );\n })}\n </ol>\n </nav>\n );\n};\n","/**\n * AccessibleCheckboxGroup Component\n * Accessible checkbox group with proper fieldset/legend and ARIA attributes\n */\n\nimport React from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface CheckboxOption {\n /** Unique value for the option */\n value: string;\n /** Label to display */\n label: string;\n /** Optional description */\n description?: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n}\n\nexport interface AccessibleCheckboxGroupProps {\n /** Array of checkbox options */\n options: CheckboxOption[];\n /** Currently selected values */\n value: string[];\n /** Callback when selection changes */\n onChange: (value: string[]) => void;\n /** Label for the group */\n label: string;\n /** Optional description for the group */\n description?: string;\n /** Whether the group is required */\n required?: boolean;\n /** Whether the group is disabled */\n disabled?: boolean;\n /** Error message to display */\n error?: string;\n /** Optional className for the fieldset */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible checkbox group component with proper ARIA attributes\n *\n * @example\n * ```tsx\n * const [selected, setSelected] = useState<string[]>(['email']);\n *\n * const options = [\n * { value: 'email', label: 'Email notifications' },\n * { value: 'sms', label: 'SMS notifications' },\n * { value: 'push', label: 'Push notifications', description: 'Requires app installation' }\n * ];\n *\n * <AccessibleCheckboxGroup\n * options={options}\n * value={selected}\n * onChange={setSelected}\n * label=\"Notification preferences\"\n * required\n * />\n * ```\n */\nexport const AccessibleCheckboxGroup: React.FC<AccessibleCheckboxGroupProps> = ({\n options,\n value,\n onChange,\n label,\n description,\n required = false,\n disabled = false,\n error,\n className = '',\n style = {},\n}) => {\n const descriptionId = useId('checkbox-description');\n const errorId = useId('checkbox-error');\n\n const handleChange = (optionValue: string, checked: boolean) => {\n if (disabled) return;\n\n const newValue = checked\n ? [...value, optionValue]\n : value.filter((v) => v !== optionValue);\n\n onChange(newValue);\n };\n\n const fieldsetStyles: React.CSSProperties = {\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n padding: '16px',\n margin: 0,\n ...style,\n };\n\n const legendStyles: React.CSSProperties = {\n fontWeight: 600,\n fontSize: '16px',\n marginBottom: '8px',\n padding: '0 4px',\n };\n\n const descriptionStyles: React.CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n marginBottom: '12px',\n };\n\n const optionContainerStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n };\n\n const optionStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '8px',\n };\n\n const checkboxStyles: React.CSSProperties = {\n width: '18px',\n height: '18px',\n marginTop: '2px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n };\n\n const labelStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n flex: 1,\n };\n\n const optionDescriptionStyles: React.CSSProperties = {\n fontSize: '13px',\n color: '#9ca3af',\n };\n\n const errorStyles: React.CSSProperties = {\n color: '#ef4444',\n fontSize: '14px',\n marginTop: '8px',\n };\n\n return (\n <fieldset\n className={className}\n style={fieldsetStyles}\n aria-describedby={\n [description && descriptionId, error && errorId].filter(Boolean).join(' ') || undefined\n }\n disabled={disabled}\n >\n <legend style={legendStyles}>\n {label}\n {required && (\n <span aria-label=\"required\" style={{ color: '#ef4444' }}>\n {' '}*\n </span>\n )}\n </legend>\n\n {description && (\n <div id={descriptionId} style={descriptionStyles}>\n {description}\n </div>\n )}\n\n <div style={optionContainerStyles} role=\"group\">\n {options.map((option) => {\n const checkboxId = useId(`checkbox-${option.value}`);\n const optionDescId = option.description ? useId(`checkbox-desc-${option.value}`) : undefined;\n const isChecked = value.includes(option.value);\n const isDisabled = disabled || option.disabled;\n\n return (\n <div key={option.value} style={optionStyles}>\n <input\n type=\"checkbox\"\n id={checkboxId}\n checked={isChecked}\n onChange={(e) => handleChange(option.value, e.target.checked)}\n disabled={isDisabled}\n aria-describedby={optionDescId}\n style={checkboxStyles}\n />\n <label htmlFor={checkboxId} style={{ ...labelStyles, opacity: isDisabled ? 0.6 : 1 }}>\n <span style={{ fontWeight: 500 }}>{option.label}</span>\n {option.description && (\n <span id={optionDescId} style={optionDescriptionStyles}>\n {option.description}\n </span>\n )}\n </label>\n </div>\n );\n })}\n </div>\n\n {error && (\n <div id={errorId} role=\"alert\" style={errorStyles}>\n {error}\n </div>\n )}\n </fieldset>\n );\n};\n","/**\n * AccessibleRadioGroup Component\n * Accessible radio button group with proper fieldset/legend and ARIA attributes\n */\n\nimport React from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface RadioOption {\n /** Unique value for the option */\n value: string;\n /** Label to display */\n label: string;\n /** Optional description */\n description?: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n}\n\nexport interface AccessibleRadioGroupProps {\n /** Array of radio options */\n options: RadioOption[];\n /** Currently selected value */\n value: string | null;\n /** Callback when selection changes */\n onChange: (value: string) => void;\n /** Name attribute for the radio group */\n name: string;\n /** Label for the group */\n label: string;\n /** Optional description for the group */\n description?: string;\n /** Whether the group is required */\n required?: boolean;\n /** Whether the group is disabled */\n disabled?: boolean;\n /** Error message to display */\n error?: string;\n /** Optional className for the fieldset */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible radio button group component with proper ARIA attributes\n *\n * @example\n * ```tsx\n * const [selected, setSelected] = useState<string | null>(null);\n *\n * const options = [\n * { value: 'small', label: 'Small', description: 'Up to 10 users' },\n * { value: 'medium', label: 'Medium', description: 'Up to 50 users' },\n * { value: 'large', label: 'Large', description: 'Unlimited users' }\n * ];\n *\n * <AccessibleRadioGroup\n * name=\"plan\"\n * options={options}\n * value={selected}\n * onChange={setSelected}\n * label=\"Choose your plan\"\n * required\n * />\n * ```\n */\nexport const AccessibleRadioGroup: React.FC<AccessibleRadioGroupProps> = ({\n options,\n value,\n onChange,\n name,\n label,\n description,\n required = false,\n disabled = false,\n error,\n className = '',\n style = {},\n}) => {\n const groupId = useId('radio-group');\n const descriptionId = useId('radio-description');\n const errorId = useId('radio-error');\n\n const handleKeyDown = (event: React.KeyboardEvent, currentIndex: number) => {\n let nextIndex = currentIndex;\n\n switch (event.key) {\n case 'ArrowDown':\n case 'ArrowRight':\n event.preventDefault();\n nextIndex = (currentIndex + 1) % options.length;\n break;\n\n case 'ArrowUp':\n case 'ArrowLeft':\n event.preventDefault();\n nextIndex = currentIndex === 0 ? options.length - 1 : currentIndex - 1;\n break;\n\n default:\n return;\n }\n\n // Find the next non-disabled option\n while (options[nextIndex]?.disabled && nextIndex !== currentIndex) {\n if (event.key === 'ArrowDown' || event.key === 'ArrowRight') {\n nextIndex = (nextIndex + 1) % options.length;\n } else {\n nextIndex = nextIndex === 0 ? options.length - 1 : nextIndex - 1;\n }\n }\n\n if (!options[nextIndex]?.disabled) {\n onChange(options[nextIndex].value);\n // Focus the next radio button\n const nextRadio = document.getElementById(`${groupId}-${options[nextIndex].value}`);\n nextRadio?.focus();\n }\n };\n\n const fieldsetStyles: React.CSSProperties = {\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n padding: '16px',\n margin: 0,\n ...style,\n };\n\n const legendStyles: React.CSSProperties = {\n fontWeight: 600,\n fontSize: '16px',\n marginBottom: '8px',\n padding: '0 4px',\n };\n\n const descriptionStyles: React.CSSProperties = {\n fontSize: '14px',\n color: '#6b7280',\n marginBottom: '12px',\n };\n\n const optionContainerStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '12px',\n };\n\n const optionStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'flex-start',\n gap: '8px',\n };\n\n const radioStyles: React.CSSProperties = {\n width: '18px',\n height: '18px',\n marginTop: '2px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n };\n\n const labelStyles: React.CSSProperties = {\n display: 'flex',\n flexDirection: 'column',\n gap: '2px',\n cursor: disabled ? 'not-allowed' : 'pointer',\n flex: 1,\n };\n\n const optionDescriptionStyles: React.CSSProperties = {\n fontSize: '13px',\n color: '#9ca3af',\n };\n\n const errorStyles: React.CSSProperties = {\n color: '#ef4444',\n fontSize: '14px',\n marginTop: '8px',\n };\n\n return (\n <fieldset\n className={className}\n style={fieldsetStyles}\n aria-describedby={\n [description && descriptionId, error && errorId].filter(Boolean).join(' ') || undefined\n }\n disabled={disabled}\n >\n <legend style={legendStyles}>\n {label}\n {required && (\n <span aria-label=\"required\" style={{ color: '#ef4444' }}>\n {' '}*\n </span>\n )}\n </legend>\n\n {description && (\n <div id={descriptionId} style={descriptionStyles}>\n {description}\n </div>\n )}\n\n <div style={optionContainerStyles} role=\"radiogroup\" aria-labelledby={groupId}>\n {options.map((option, index) => {\n const radioId = `${groupId}-${option.value}`;\n const optionDescId = option.description ? useId(`radio-desc-${option.value}`) : undefined;\n const isChecked = value === option.value;\n const isDisabled = disabled || option.disabled;\n\n return (\n <div key={option.value} style={optionStyles}>\n <input\n type=\"radio\"\n id={radioId}\n name={name}\n value={option.value}\n checked={isChecked}\n onChange={(e) => onChange(e.target.value)}\n onKeyDown={(e) => handleKeyDown(e, index)}\n disabled={isDisabled}\n aria-describedby={optionDescId}\n style={radioStyles}\n tabIndex={isChecked ? 0 : -1}\n />\n <label htmlFor={radioId} style={{ ...labelStyles, opacity: isDisabled ? 0.6 : 1 }}>\n <span style={{ fontWeight: 500 }}>{option.label}</span>\n {option.description && (\n <span id={optionDescId} style={optionDescriptionStyles}>\n {option.description}\n </span>\n )}\n </label>\n </div>\n );\n })}\n </div>\n\n {error && (\n <div id={errorId} role=\"alert\" style={errorStyles}>\n {error}\n </div>\n )}\n </fieldset>\n );\n};\n","/**\n * useAriaLive Hook\n * Manages ARIA live regions for dynamic announcements\n */\n\nimport { useEffect, useRef, useState } from 'react';\n\nexport type AriaLivePoliteness = 'polite' | 'assertive' | 'off';\n\nexport interface UseAriaLiveReturn {\n /** Sets a message to be announced */\n setMessage: (message: string) => void;\n /** Clears the current message */\n clearMessage: () => void;\n /** Current message */\n message: string;\n /** Props to spread on the live region element */\n liveRegionProps: {\n role: 'status' | 'alert';\n 'aria-live': AriaLivePoliteness;\n 'aria-atomic': 'true';\n 'aria-relevant': 'additions text';\n };\n}\n\n/**\n * Creates a managed ARIA live region\n * @param politeness - How urgently the message should be announced\n * @returns Object with message management functions and props\n *\n * @example\n * ```tsx\n * const { setMessage, liveRegionProps } = useAriaLive('polite');\n *\n * <button onClick={() => setMessage('Item added to cart')}>\n * Add to cart\n * </button>\n *\n * <div {...liveRegionProps} className=\"sr-only\">\n * {message}\n * </div>\n * ```\n */\nexport function useAriaLive(\n politeness: AriaLivePoliteness = 'polite',\n): UseAriaLiveReturn {\n const [message, setMessage] = useState('');\n const timeoutRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n const clearMessage = () => {\n setMessage('');\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n\n const setMessageWithClear = (newMessage: string) => {\n setMessage(newMessage);\n\n // Auto-clear after 5 seconds\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n\n timeoutRef.current = setTimeout(() => {\n setMessage('');\n }, 5000);\n };\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) {\n clearTimeout(timeoutRef.current);\n }\n };\n }, []);\n\n return {\n setMessage: setMessageWithClear,\n clearMessage,\n message,\n liveRegionProps: {\n role: politeness === 'assertive' ? 'alert' : 'status',\n 'aria-live': politeness,\n 'aria-atomic': 'true',\n 'aria-relevant': 'additions text',\n },\n };\n}\n","/**\n * AccessibleProgress Component\n * Accessible progress bar and spinner with proper ARIA attributes\n */\n\nimport React from 'react';\nimport { useId } from '../hooks/use-id';\nimport { useAriaLive } from '../hooks/use-aria-live';\n\nexport type ProgressVariant = 'linear' | 'circular';\n\nexport interface AccessibleProgressProps {\n /** Current progress value (undefined for indeterminate) */\n value?: number;\n /** Maximum value */\n max?: number;\n /** Minimum value */\n min?: number;\n /** Label for the progress indicator */\n label: string;\n /** Visual variant */\n variant?: ProgressVariant;\n /** Whether to show percentage text */\n showValue?: boolean;\n /** Whether to announce progress changes */\n announceChanges?: boolean;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible progress indicator with ARIA live regions\n *\n * @example\n * ```tsx\n * // Determinate progress\n * <AccessibleProgress\n * value={75}\n * label=\"Upload progress\"\n * showValue\n * />\n *\n * // Indeterminate progress\n * <AccessibleProgress\n * label=\"Loading...\"\n * variant=\"circular\"\n * />\n * ```\n */\nexport const AccessibleProgress: React.FC<AccessibleProgressProps> = ({\n value,\n max = 100,\n min = 0,\n label,\n variant = 'linear',\n showValue = false,\n announceChanges = false,\n className = '',\n style = {},\n}) => {\n const progressId = useId('progress');\n const labelId = useId('progress-label');\n const { setMessage, liveRegionProps, message } = useAriaLive('polite');\n\n const isIndeterminate = value === undefined;\n const percentage = isIndeterminate ? 0 : Math.round(((value - min) / (max - min)) * 100);\n\n React.useEffect(() => {\n if (announceChanges && !isIndeterminate && value !== undefined) {\n const milestones = [25, 50, 75, 100];\n if (milestones.includes(percentage)) {\n setMessage(`${label}: ${percentage}% complete`);\n }\n }\n }, [percentage, announceChanges, isIndeterminate, value, label, setMessage]);\n\n const containerStyles: React.CSSProperties = {\n display: 'inline-flex',\n flexDirection: variant === 'linear' ? 'column' : 'row',\n alignItems: variant === 'linear' ? 'stretch' : 'center',\n gap: variant === 'linear' ? '8px' : '12px',\n width: variant === 'linear' ? '100%' : 'auto',\n ...style,\n };\n\n const labelContainerStyles: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n fontSize: '14px',\n fontWeight: 500,\n };\n\n const renderLinearProgress = () => {\n const trackStyles: React.CSSProperties = {\n width: '100%',\n height: '8px',\n backgroundColor: '#e5e7eb',\n borderRadius: '4px',\n overflow: 'hidden',\n position: 'relative',\n };\n\n const barStyles: React.CSSProperties = {\n height: '100%',\n backgroundColor: '#3b82f6',\n transition: isIndeterminate ? 'none' : 'width 0.3s ease',\n width: isIndeterminate ? '30%' : `${percentage}%`,\n animation: isIndeterminate ? 'indeterminateLinear 1.5s infinite ease-in-out' : 'none',\n };\n\n return (\n <>\n <style>\n {`\n @keyframes indeterminateLinear {\n 0% { transform: translateX(-100%); }\n 100% { transform: translateX(400%); }\n }\n `}\n </style>\n <div style={labelContainerStyles}>\n <span id={labelId}>{label}</span>\n {showValue && !isIndeterminate && <span>{percentage}%</span>}\n </div>\n <div style={trackStyles}>\n <div style={barStyles} />\n </div>\n </>\n );\n };\n\n const renderCircularProgress = () => {\n const size = 48;\n const strokeWidth = 4;\n const radius = (size - strokeWidth) / 2;\n const circumference = 2 * Math.PI * radius;\n const offset = isIndeterminate ? circumference * 0.25 : circumference - (percentage / 100) * circumference;\n\n const svgStyles: React.CSSProperties = {\n transform: 'rotate(-90deg)',\n animation: isIndeterminate ? 'spin 1s linear infinite' : 'none',\n };\n\n const circleStyles: React.CSSProperties = {\n transition: isIndeterminate ? 'none' : 'stroke-dashoffset 0.3s ease',\n };\n\n return (\n <>\n <style>\n {`\n @keyframes spin {\n from { transform: rotate(-90deg); }\n to { transform: rotate(270deg); }\n }\n `}\n </style>\n <svg width={size} height={size} style={svgStyles}>\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"#e5e7eb\"\n strokeWidth={strokeWidth}\n />\n <circle\n cx={size / 2}\n cy={size / 2}\n r={radius}\n fill=\"none\"\n stroke=\"#3b82f6\"\n strokeWidth={strokeWidth}\n strokeDasharray={circumference}\n strokeDashoffset={offset}\n strokeLinecap=\"round\"\n style={circleStyles}\n />\n </svg>\n <div style={{ display: 'flex', flexDirection: 'column', gap: '4px' }}>\n <span id={labelId} style={{ fontSize: '14px', fontWeight: 500 }}>\n {label}\n </span>\n {showValue && !isIndeterminate && (\n <span style={{ fontSize: '12px', color: '#6b7280' }}>{percentage}%</span>\n )}\n </div>\n </>\n );\n };\n\n return (\n <div className={className} style={containerStyles}>\n <div\n id={progressId}\n role=\"progressbar\"\n aria-labelledby={labelId}\n aria-valuenow={isIndeterminate ? undefined : value}\n aria-valuemin={min}\n aria-valuemax={max}\n aria-valuetext={isIndeterminate ? 'Loading...' : `${percentage}%`}\n >\n {variant === 'linear' ? renderLinearProgress() : renderCircularProgress()}\n </div>\n {announceChanges && (\n <div {...liveRegionProps} style={{ position: 'absolute', left: '-10000px', width: '1px', height: '1px', overflow: 'hidden' }}>\n {message}\n </div>\n )}\n </div>\n );\n};\n","/**\n * SkipLinks Component\n * Accessible skip navigation links for keyboard users\n */\n\nimport React from 'react';\n\nexport interface SkipLink {\n /** Target element ID (without #) */\n href: string;\n /** Label for the skip link */\n label: string;\n}\n\nexport interface SkipLinksProps {\n /** Array of skip links */\n links: SkipLink[];\n /** Optional className for the container */\n className?: string;\n /** Optional styles for the container */\n style?: React.CSSProperties;\n /** Optional styles for individual links */\n linkStyle?: React.CSSProperties;\n}\n\n/**\n * Skip navigation links component, visible only on keyboard focus\n * Should be the first focusable element on the page\n *\n * @example\n * ```tsx\n * const links = [\n * { href: 'main-content', label: 'Skip to main content' },\n * { href: 'navigation', label: 'Skip to navigation' },\n * { href: 'footer', label: 'Skip to footer' }\n * ];\n *\n * <SkipLinks links={links} />\n *\n * // In your page layout:\n * <main id=\"main-content\">...</main>\n * <nav id=\"navigation\">...</nav>\n * <footer id=\"footer\">...</footer>\n * ```\n */\nexport const SkipLinks: React.FC<SkipLinksProps> = ({\n links,\n className = '',\n style = {},\n linkStyle = {},\n}) => {\n if (links.length === 0) return null;\n\n const containerStyles: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n zIndex: 10000,\n ...style,\n };\n\n const listStyles: React.CSSProperties = {\n listStyle: 'none',\n margin: 0,\n padding: 0,\n display: 'flex',\n flexDirection: 'column',\n gap: '4px',\n };\n\n const defaultLinkStyles: React.CSSProperties = {\n position: 'absolute',\n left: '-10000px',\n top: 'auto',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n display: 'block',\n padding: '12px 24px',\n backgroundColor: '#000',\n color: '#fff',\n textDecoration: 'none',\n fontWeight: 600,\n fontSize: '14px',\n borderRadius: '0 0 4px 0',\n transition: 'none',\n ...linkStyle,\n };\n\n const focusStyles: React.CSSProperties = {\n position: 'static',\n width: 'auto',\n height: 'auto',\n overflow: 'visible',\n left: 'auto',\n };\n\n const handleClick = (e: React.MouseEvent<HTMLAnchorElement>, href: string) => {\n e.preventDefault();\n\n // Find the target element\n const target = document.getElementById(href);\n if (target) {\n // Scroll to the element\n target.scrollIntoView({ behavior: 'smooth', block: 'start' });\n\n // Set focus to the target\n // If the element is not focusable, make it focusable temporarily\n const originalTabIndex = target.getAttribute('tabindex');\n if (!target.hasAttribute('tabindex')) {\n target.setAttribute('tabindex', '-1');\n }\n\n target.focus();\n\n // Restore original tabindex after focus\n if (originalTabIndex === null) {\n setTimeout(() => {\n target.removeAttribute('tabindex');\n }, 100);\n }\n }\n };\n\n return (\n <nav\n aria-label=\"Skip navigation\"\n className={className}\n style={containerStyles}\n >\n <ul style={listStyles}>\n {links.map((link, index) => (\n <li key={index}>\n <a\n href={`#${link.href}`}\n onClick={(e) => handleClick(e, link.href)}\n style={defaultLinkStyles}\n onFocus={(e) => {\n Object.assign(e.currentTarget.style, focusStyles);\n }}\n onBlur={(e) => {\n Object.assign(e.currentTarget.style, defaultLinkStyles);\n }}\n >\n {link.label}\n </a>\n </li>\n ))}\n </ul>\n </nav>\n );\n};\n","/**\n * AccessiblePagination Component\n * Accessible pagination with proper ARIA attributes and keyboard navigation\n */\n\nimport React from 'react';\n\nexport interface AccessiblePaginationProps {\n /** Current active page (1-indexed) */\n currentPage: number;\n /** Total number of pages */\n totalPages: number;\n /** Callback when page changes */\n onPageChange: (page: number) => void;\n /** Number of sibling pages to show on each side */\n siblingCount?: number;\n /** Whether to show first/last buttons */\n showFirstLast?: boolean;\n /** Optional aria-label for the navigation */\n ariaLabel?: string;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible pagination component with keyboard navigation\n *\n * @example\n * ```tsx\n * const [page, setPage] = useState(1);\n *\n * <AccessiblePagination\n * currentPage={page}\n * totalPages={10}\n * onPageChange={setPage}\n * siblingCount={1}\n * showFirstLast\n * />\n * ```\n */\nexport const AccessiblePagination: React.FC<AccessiblePaginationProps> = ({\n currentPage,\n totalPages,\n onPageChange,\n siblingCount = 1,\n showFirstLast = false,\n ariaLabel = 'Pagination',\n className = '',\n style = {},\n}) => {\n if (totalPages <= 1) return null;\n\n const generatePageNumbers = (): (number | string)[] => {\n const pages: (number | string)[] = [];\n\n // Always show first page\n pages.push(1);\n\n // Calculate start and end of sibling range\n const leftSiblingIndex = Math.max(currentPage - siblingCount, 2);\n const rightSiblingIndex = Math.min(currentPage + siblingCount, totalPages - 1);\n\n // Add ellipsis before siblings if needed\n if (leftSiblingIndex > 2) {\n pages.push('...');\n }\n\n // Add sibling pages\n for (let i = leftSiblingIndex; i <= rightSiblingIndex; i++) {\n pages.push(i);\n }\n\n // Add ellipsis after siblings if needed\n if (rightSiblingIndex < totalPages - 1) {\n pages.push('...');\n }\n\n // Always show last page\n if (totalPages > 1) {\n pages.push(totalPages);\n }\n\n return pages;\n };\n\n const pages = generatePageNumbers();\n\n const navStyles: React.CSSProperties = {\n ...style,\n };\n\n const listStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '4px',\n listStyle: 'none',\n margin: 0,\n padding: 0,\n };\n\n const buttonBaseStyles: React.CSSProperties = {\n minWidth: '40px',\n height: '40px',\n padding: '8px 12px',\n border: '1px solid #d1d5db',\n backgroundColor: '#f9fafb',\n borderRadius: '6px',\n fontSize: '14px',\n fontWeight: 500,\n cursor: 'pointer',\n transition: 'all 0.2s',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#374151',\n };\n\n const activeButtonStyles: React.CSSProperties = {\n ...buttonBaseStyles,\n backgroundColor: '#3b82f6',\n color: '#fff',\n borderColor: '#3b82f6',\n };\n\n const disabledButtonStyles: React.CSSProperties = {\n ...buttonBaseStyles,\n opacity: 0.5,\n cursor: 'not-allowed',\n };\n\n const ellipsisStyles: React.CSSProperties = {\n minWidth: '40px',\n height: '40px',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n color: '#9ca3af',\n };\n\n const handlePageChange = (page: number) => {\n if (page >= 1 && page <= totalPages && page !== currentPage) {\n onPageChange(page);\n }\n };\n\n return (\n <nav aria-label={ariaLabel} className={className} style={navStyles}>\n <ul style={listStyles}>\n {/* First Page Button */}\n {showFirstLast && (\n <li>\n <button\n type=\"button\"\n onClick={() => handlePageChange(1)}\n disabled={currentPage === 1}\n aria-label=\"Go to first page\"\n style={currentPage === 1 ? disabledButtonStyles : buttonBaseStyles}\n onMouseEnter={(e) => {\n if (currentPage !== 1) {\n e.currentTarget.style.backgroundColor = '#e5e7eb';\n }\n }}\n onMouseLeave={(e) => {\n if (currentPage !== 1) {\n e.currentTarget.style.backgroundColor = '#f9fafb';\n }\n }}\n >\n ««\n </button>\n </li>\n )}\n\n {/* Previous Button */}\n <li>\n <button\n type=\"button\"\n onClick={() => handlePageChange(currentPage - 1)}\n disabled={currentPage === 1}\n aria-label=\"Go to previous page\"\n style={currentPage === 1 ? disabledButtonStyles : buttonBaseStyles}\n onMouseEnter={(e) => {\n if (currentPage !== 1) {\n e.currentTarget.style.backgroundColor = '#e5e7eb';\n }\n }}\n onMouseLeave={(e) => {\n if (currentPage !== 1) {\n e.currentTarget.style.backgroundColor = '#f9fafb';\n }\n }}\n >\n «\n </button>\n </li>\n\n {/* Page Numbers */}\n {pages.map((page, index) => {\n if (page === '...') {\n return (\n <li key={`ellipsis-${index}`}>\n <span style={ellipsisStyles} aria-hidden=\"true\">\n …\n </span>\n </li>\n );\n }\n\n const pageNumber = page as number;\n const isActive = pageNumber === currentPage;\n\n return (\n <li key={pageNumber}>\n <button\n type=\"button\"\n onClick={() => handlePageChange(pageNumber)}\n aria-label={`Go to page ${pageNumber}`}\n aria-current={isActive ? 'page' : undefined}\n style={isActive ? activeButtonStyles : buttonBaseStyles}\n onMouseEnter={(e) => {\n if (!isActive) {\n e.currentTarget.style.backgroundColor = '#e5e7eb';\n }\n }}\n onMouseLeave={(e) => {\n if (!isActive) {\n e.currentTarget.style.backgroundColor = '#f9fafb';\n }\n }}\n >\n {pageNumber}\n </button>\n </li>\n );\n })}\n\n {/* Next Button */}\n <li>\n <button\n type=\"button\"\n onClick={() => handlePageChange(currentPage + 1)}\n disabled={currentPage === totalPages}\n aria-label=\"Go to next page\"\n style={currentPage === totalPages ? disabledButtonStyles : buttonBaseStyles}\n onMouseEnter={(e) => {\n if (currentPage !== totalPages) {\n e.currentTarget.style.backgroundColor = '#e5e7eb';\n }\n }}\n onMouseLeave={(e) => {\n if (currentPage !== totalPages) {\n e.currentTarget.style.backgroundColor = '#f9fafb';\n }\n }}\n >\n »\n </button>\n </li>\n\n {/* Last Page Button */}\n {showFirstLast && (\n <li>\n <button\n type=\"button\"\n onClick={() => handlePageChange(totalPages)}\n disabled={currentPage === totalPages}\n aria-label=\"Go to last page\"\n style={currentPage === totalPages ? disabledButtonStyles : buttonBaseStyles}\n onMouseEnter={(e) => {\n if (currentPage !== totalPages) {\n e.currentTarget.style.backgroundColor = '#e5e7eb';\n }\n }}\n onMouseLeave={(e) => {\n if (currentPage !== totalPages) {\n e.currentTarget.style.backgroundColor = '#f9fafb';\n }\n }}\n >\n »»\n </button>\n </li>\n )}\n </ul>\n </nav>\n );\n};\n","/**\n * useClickOutside Hook\n * Detects clicks outside of a referenced element\n */\n\nimport { type RefObject, useEffect } from 'react';\n\n/**\n * Calls a handler when user clicks outside of the referenced element\n * @param ref - React ref to the element\n * @param handler - Function to call when clicking outside\n * @param enabled - Whether the hook is enabled (default: true)\n *\n * @example\n * ```tsx\n * const menuRef = useRef<HTMLDivElement>(null);\n * useClickOutside(menuRef, () => setIsOpen(false));\n *\n * <div ref={menuRef}>\n * Menu content\n * </div>\n * ```\n */\nexport function useClickOutside(\n ref: RefObject<HTMLElement | null>,\n handler: (event: MouseEvent | TouchEvent) => void,\n enabled = true,\n): void {\n useEffect(() => {\n if (!enabled) return;\n\n const handleClickOutside = (event: MouseEvent | TouchEvent) => {\n if (!ref.current || ref.current.contains(event.target as Node)) {\n return;\n }\n\n handler(event);\n };\n\n document.addEventListener('mousedown', handleClickOutside);\n document.addEventListener('touchstart', handleClickOutside);\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n document.removeEventListener('touchstart', handleClickOutside);\n };\n }, [ref, handler, enabled]);\n}\n","/**\n * AccessibleCombobox Component\n * Fully accessible combobox/select with autocomplete, keyboard navigation, and ARIA support\n */\n\nimport React, { useState, useRef, useEffect } from 'react';\nimport { useId } from '../hooks/use-id';\nimport { useClickOutside } from '../hooks/use-click-outside';\n\nexport interface ComboboxOption<T = string> {\n /** Unique value */\n value: T;\n /** Display label */\n label: string;\n /** Whether this option is disabled */\n disabled?: boolean;\n}\n\nexport interface AccessibleComboboxProps<T = string> {\n /** Array of options */\n options: ComboboxOption<T>[];\n /** Currently selected value */\n value: T | null;\n /** Callback when selection changes */\n onChange: (value: T | null) => void;\n /** Label for the combobox */\n label: string;\n /** Placeholder text */\n placeholder?: string;\n /** Whether search is enabled */\n searchable?: boolean;\n /** Whether the combobox is required */\n required?: boolean;\n /** Whether the combobox is disabled */\n disabled?: boolean;\n /** Error message */\n error?: string;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible combobox/select component with autocomplete\n *\n * @example\n * ```tsx\n * const countries = [\n * { value: 'us', label: 'United States' },\n * { value: 'uk', label: 'United Kingdom' },\n * { value: 'ca', label: 'Canada' }\n * ];\n *\n * const [country, setCountry] = useState<string | null>(null);\n *\n * <AccessibleCombobox\n * options={countries}\n * value={country}\n * onChange={setCountry}\n * label=\"Select country\"\n * searchable\n * />\n * ```\n */\nexport function AccessibleCombobox<T = string>({\n options,\n value,\n onChange,\n label,\n placeholder = 'Select an option',\n searchable = false,\n required = false,\n disabled = false,\n error,\n className = '',\n style = {},\n}: AccessibleComboboxProps<T>): React.ReactElement {\n const [isOpen, setIsOpen] = useState(false);\n const [searchQuery, setSearchQuery] = useState('');\n const [highlightedIndex, setHighlightedIndex] = useState(0);\n\n const comboboxId = useId('combobox');\n const labelId = useId('combobox-label');\n const listboxId = useId('combobox-listbox');\n const errorId = useId('combobox-error');\n\n const containerRef = useRef<HTMLDivElement>(null);\n const inputRef = useRef<HTMLInputElement>(null);\n const listboxRef = useRef<HTMLUListElement>(null);\n\n useClickOutside(containerRef, () => setIsOpen(false), isOpen);\n\n const filteredOptions = searchable\n ? options.filter((option) =>\n option.label.toLowerCase().includes(searchQuery.toLowerCase())\n )\n : options;\n\n const selectedOption = options.find((opt) => opt.value === value);\n\n useEffect(() => {\n if (isOpen && listboxRef.current) {\n const highlightedElement = listboxRef.current.querySelector(\n `[data-index=\"${highlightedIndex}\"]`\n ) as HTMLElement;\n highlightedElement?.scrollIntoView({ block: 'nearest' });\n }\n }, [highlightedIndex, isOpen]);\n\n const handleToggle = () => {\n if (disabled) return;\n setIsOpen(!isOpen);\n if (!isOpen) {\n setSearchQuery('');\n setHighlightedIndex(0);\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n };\n\n const handleSelect = (option: ComboboxOption<T>) => {\n if (option.disabled) return;\n onChange(option.value);\n setIsOpen(false);\n setSearchQuery('');\n inputRef.current?.blur();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n if (disabled) return;\n\n switch (event.key) {\n case 'Enter':\n event.preventDefault();\n if (isOpen && filteredOptions[highlightedIndex]) {\n handleSelect(filteredOptions[highlightedIndex]);\n } else {\n setIsOpen(!isOpen);\n }\n break;\n\n case ' ':\n if (!searchable || !isOpen) {\n event.preventDefault();\n setIsOpen(!isOpen);\n }\n break;\n\n case 'Escape':\n event.preventDefault();\n setIsOpen(false);\n setSearchQuery('');\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n if (!isOpen) {\n setIsOpen(true);\n } else {\n setHighlightedIndex((prev) =>\n prev < filteredOptions.length - 1 ? prev + 1 : prev\n );\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (isOpen) {\n setHighlightedIndex((prev) => (prev > 0 ? prev - 1 : prev));\n }\n break;\n\n case 'Home':\n if (isOpen) {\n event.preventDefault();\n setHighlightedIndex(0);\n }\n break;\n\n case 'End':\n if (isOpen) {\n event.preventDefault();\n setHighlightedIndex(filteredOptions.length - 1);\n }\n break;\n }\n };\n\n const containerStyles: React.CSSProperties = {\n position: 'relative',\n width: '100%',\n ...style,\n };\n\n const labelStyles: React.CSSProperties = {\n display: 'block',\n fontWeight: 600,\n fontSize: '14px',\n marginBottom: '6px',\n color: 'inherit',\n };\n\n const inputContainerStyles: React.CSSProperties = {\n position: 'relative',\n width: '100%',\n };\n\n const inputStyles: React.CSSProperties = {\n width: '100%',\n padding: '10px 36px 10px 12px',\n border: `1px solid ${error ? '#ef4444' : '#e5e7eb'}`,\n borderRadius: '6px',\n fontSize: '14px',\n backgroundColor: 'rgba(128, 128, 128, 0.08)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n outline: 'none',\n color: 'inherit',\n };\n\n const iconStyles: React.CSSProperties = {\n position: 'absolute',\n right: '12px',\n top: '50%',\n transform: 'translateY(-50%)',\n pointerEvents: 'none',\n transition: 'transform 0.2s',\n };\n\n const listboxStyles: React.CSSProperties = {\n position: 'absolute',\n top: '100%',\n left: 0,\n right: 0,\n marginTop: '4px',\n maxHeight: '240px',\n overflowY: 'auto',\n backgroundColor: '#ffffff',\n border: '1px solid #e5e7eb',\n borderRadius: '6px',\n boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',\n zIndex: 1000,\n listStyle: 'none',\n margin: 0,\n padding: '4px',\n color: '#1f2937',\n };\n\n const optionStyles = (isHighlighted: boolean, isSelected: boolean, isDisabled: boolean): React.CSSProperties => ({\n padding: '10px 12px',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n backgroundColor: isHighlighted ? '#e5e7eb' : isSelected ? '#f3f4f6' : 'transparent',\n borderRadius: '4px',\n fontSize: '14px',\n opacity: isDisabled ? 0.5 : 1,\n color: '#1f2937',\n });\n\n const errorStyles: React.CSSProperties = {\n marginTop: '6px',\n fontSize: '13px',\n color: '#ef4444',\n };\n\n return (\n <div ref={containerRef} className={className} style={containerStyles}>\n <label id={labelId} htmlFor={comboboxId} style={labelStyles}>\n {label}\n {required && (\n <span aria-label=\"required\" style={{ color: '#ef4444' }}>\n {' '}*\n </span>\n )}\n </label>\n\n <div style={inputContainerStyles}>\n <input\n ref={inputRef}\n id={comboboxId}\n type=\"text\"\n role=\"combobox\"\n aria-labelledby={labelId}\n aria-controls={listboxId}\n aria-expanded={isOpen}\n aria-autocomplete={searchable ? 'list' : 'none'}\n aria-activedescendant={\n isOpen && filteredOptions[highlightedIndex]\n ? `${listboxId}-option-${highlightedIndex}`\n : undefined\n }\n aria-describedby={error ? errorId : undefined}\n aria-required={required}\n aria-invalid={!!error}\n disabled={disabled}\n value={searchable && isOpen ? searchQuery : selectedOption?.label || ''}\n onChange={(e) => {\n if (searchable) {\n setSearchQuery(e.target.value);\n setHighlightedIndex(0);\n if (!isOpen) setIsOpen(true);\n }\n }}\n onKeyDown={handleKeyDown}\n onClick={handleToggle}\n placeholder={placeholder}\n style={inputStyles}\n readOnly={!searchable}\n />\n <span\n aria-hidden=\"true\"\n style={{\n ...iconStyles,\n transform: `translateY(-50%) rotate(${isOpen ? '180deg' : '0deg'})`,\n }}\n >\n ▼\n </span>\n </div>\n\n {isOpen && (\n <ul\n ref={listboxRef}\n id={listboxId}\n role=\"listbox\"\n aria-labelledby={labelId}\n style={listboxStyles}\n >\n {filteredOptions.length === 0 ? (\n <li role=\"option\" aria-disabled=\"true\" style={{ padding: '10px 12px', color: '#9ca3af' }}>\n No options found\n </li>\n ) : (\n filteredOptions.map((option, index) => {\n const isHighlighted = index === highlightedIndex;\n const isSelected = option.value === value;\n\n return (\n <li\n key={String(option.value)}\n id={`${listboxId}-option-${index}`}\n role=\"option\"\n aria-selected={isSelected}\n aria-disabled={option.disabled}\n data-index={index}\n onClick={() => handleSelect(option)}\n onMouseEnter={() => setHighlightedIndex(index)}\n style={optionStyles(isHighlighted, isSelected, !!option.disabled)}\n >\n {option.label}\n </li>\n );\n })\n )}\n </ul>\n )}\n\n {error && (\n <div id={errorId} role=\"alert\" style={errorStyles}>\n {error}\n </div>\n )}\n </div>\n );\n}\n","/**\n * AccessibleDatePicker Component\n * Fully accessible date picker with calendar grid and keyboard navigation\n */\n\nimport React, { useState, useRef } from 'react';\nimport { useId } from '../hooks/use-id';\nimport { useClickOutside } from '../hooks/use-click-outside';\n\nexport interface AccessibleDatePickerProps {\n /** Currently selected date */\n value: Date | null;\n /** Callback when date changes */\n onChange: (date: Date | null) => void;\n /** Label for the date picker */\n label: string;\n /** Minimum selectable date */\n minDate?: Date;\n /** Maximum selectable date */\n maxDate?: Date;\n /** Array of disabled dates */\n disabledDates?: Date[];\n /** Whether the field is required */\n required?: boolean;\n /** Whether the field is disabled */\n disabled?: boolean;\n /** Error message */\n error?: string;\n /** Date format for display (default: MM/DD/YYYY) */\n dateFormat?: 'MM/DD/YYYY' | 'DD/MM/YYYY' | 'YYYY-MM-DD';\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible date picker with calendar grid\n *\n * @example\n * ```tsx\n * const [date, setDate] = useState<Date | null>(null);\n *\n * <AccessibleDatePicker\n * value={date}\n * onChange={setDate}\n * label=\"Select date\"\n * minDate={new Date()}\n * required\n * />\n * ```\n */\nexport const AccessibleDatePicker: React.FC<AccessibleDatePickerProps> = ({\n value,\n onChange,\n label,\n minDate,\n maxDate,\n disabledDates = [],\n required = false,\n disabled = false,\n error,\n dateFormat = 'MM/DD/YYYY',\n className = '',\n style = {},\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [viewDate, setViewDate] = useState(value || new Date());\n const [focusedDate, setFocusedDate] = useState<Date | null>(null);\n\n const pickerId = useId('datepicker');\n const labelId = useId('datepicker-label');\n const calendarId = useId('datepicker-calendar');\n const errorId = useId('datepicker-error');\n\n const containerRef = useRef<HTMLDivElement>(null);\n const buttonRef = useRef<HTMLButtonElement>(null);\n\n useClickOutside(containerRef, () => setIsOpen(false), isOpen);\n\n const formatDate = (date: Date | null): string => {\n if (!date) return '';\n\n const day = String(date.getDate()).padStart(2, '0');\n const month = String(date.getMonth() + 1).padStart(2, '0');\n const year = date.getFullYear();\n\n switch (dateFormat) {\n case 'DD/MM/YYYY':\n return `${day}/${month}/${year}`;\n case 'YYYY-MM-DD':\n return `${year}-${month}-${day}`;\n case 'MM/DD/YYYY':\n default:\n return `${month}/${day}/${year}`;\n }\n };\n\n const isSameDay = (date1: Date, date2: Date): boolean => {\n return (\n date1.getDate() === date2.getDate() &&\n date1.getMonth() === date2.getMonth() &&\n date1.getFullYear() === date2.getFullYear()\n );\n };\n\n const isDateDisabled = (date: Date): boolean => {\n if (minDate && date < minDate) return true;\n if (maxDate && date > maxDate) return true;\n return disabledDates.some((disabledDate) => isSameDay(date, disabledDate));\n };\n\n const getDaysInMonth = (date: Date): Date[] => {\n const year = date.getFullYear();\n const month = date.getMonth();\n const firstDay = new Date(year, month, 1);\n const lastDay = new Date(year, month + 1, 0);\n const days: Date[] = [];\n\n // Add empty cells for days before month starts\n const startDayOfWeek = firstDay.getDay();\n for (let i = 0; i < startDayOfWeek; i++) {\n days.push(new Date(year, month, -startDayOfWeek + i + 1));\n }\n\n // Add all days in month\n for (let day = 1; day <= lastDay.getDate(); day++) {\n days.push(new Date(year, month, day));\n }\n\n return days;\n };\n\n const handlePreviousMonth = () => {\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() - 1, 1));\n };\n\n const handleNextMonth = () => {\n setViewDate(new Date(viewDate.getFullYear(), viewDate.getMonth() + 1, 1));\n };\n\n const handleDateSelect = (date: Date) => {\n if (isDateDisabled(date)) return;\n onChange(date);\n setIsOpen(false);\n buttonRef.current?.focus();\n };\n\n const handleKeyDown = (event: React.KeyboardEvent, date: Date) => {\n let nextDate: Date | null = null;\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n handleDateSelect(date);\n return;\n\n case 'Escape':\n event.preventDefault();\n setIsOpen(false);\n buttonRef.current?.focus();\n return;\n\n case 'ArrowLeft':\n event.preventDefault();\n nextDate = new Date(date);\n nextDate.setDate(date.getDate() - 1);\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n nextDate = new Date(date);\n nextDate.setDate(date.getDate() + 1);\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n nextDate = new Date(date);\n nextDate.setDate(date.getDate() - 7);\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n nextDate = new Date(date);\n nextDate.setDate(date.getDate() + 7);\n break;\n\n case 'Home':\n event.preventDefault();\n nextDate = new Date(date.getFullYear(), date.getMonth(), 1);\n break;\n\n case 'End':\n event.preventDefault();\n nextDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n break;\n\n case 'PageUp':\n event.preventDefault();\n nextDate = new Date(date.getFullYear(), date.getMonth() - 1, date.getDate());\n break;\n\n case 'PageDown':\n event.preventDefault();\n nextDate = new Date(date.getFullYear(), date.getMonth() + 1, date.getDate());\n break;\n }\n\n if (nextDate) {\n setFocusedDate(nextDate);\n if (nextDate.getMonth() !== viewDate.getMonth()) {\n setViewDate(new Date(nextDate.getFullYear(), nextDate.getMonth(), 1));\n }\n }\n };\n\n const days = getDaysInMonth(viewDate);\n const monthNames = [\n 'January', 'February', 'March', 'April', 'May', 'June',\n 'July', 'August', 'September', 'October', 'November', 'December'\n ];\n const dayNames = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];\n\n const containerStyles: React.CSSProperties = {\n position: 'relative',\n width: '100%',\n ...style,\n };\n\n const labelStyles: React.CSSProperties = {\n display: 'block',\n fontWeight: 600,\n fontSize: '14px',\n marginBottom: '6px',\n color: 'inherit',\n };\n\n const buttonStyles: React.CSSProperties = {\n width: '100%',\n padding: '10px 36px 10px 12px',\n border: `1px solid ${error ? '#ef4444' : '#e5e7eb'}`,\n borderRadius: '6px',\n fontSize: '14px',\n backgroundColor: 'rgba(128, 128, 128, 0.08)',\n cursor: disabled ? 'not-allowed' : 'pointer',\n textAlign: 'left',\n position: 'relative',\n color: 'inherit',\n };\n\n const calendarStyles: React.CSSProperties = {\n position: 'absolute',\n top: '100%',\n left: 0,\n marginTop: '4px',\n backgroundColor: '#ffffff',\n border: '1px solid #e5e7eb',\n borderRadius: '8px',\n boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',\n padding: '16px',\n zIndex: 1000,\n minWidth: '280px',\n color: '#1f2937',\n };\n\n const headerStyles: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n marginBottom: '12px',\n };\n\n const navButtonStyles: React.CSSProperties = {\n padding: '6px 12px',\n border: '1px solid #e5e7eb',\n borderRadius: '4px',\n backgroundColor: '#f3f4f6',\n cursor: 'pointer',\n fontSize: '14px',\n color: '#1f2937',\n };\n\n const gridStyles: React.CSSProperties = {\n display: 'grid',\n gridTemplateColumns: 'repeat(7, 1fr)',\n gap: '4px',\n };\n\n const dayHeaderStyles: React.CSSProperties = {\n textAlign: 'center',\n fontWeight: 600,\n fontSize: '12px',\n padding: '8px 0',\n color: '#6b7280',\n };\n\n const dayCellStyles = (\n _date: Date,\n isCurrentMonth: boolean,\n isSelected: boolean,\n isToday: boolean,\n isDisabled: boolean\n ): React.CSSProperties => ({\n padding: '8px',\n border: 'none',\n borderRadius: '4px',\n fontSize: '14px',\n cursor: isDisabled ? 'not-allowed' : 'pointer',\n backgroundColor: isSelected ? '#3b82f6' : isToday ? '#e5e7eb' : 'transparent',\n color: isSelected ? '#ffffff' : !isCurrentMonth ? '#9ca3af' : isDisabled ? '#d1d5db' : '#1f2937',\n fontWeight: isSelected || isToday ? 600 : 400,\n opacity: isDisabled ? 0.5 : 1,\n });\n\n const errorStyles: React.CSSProperties = {\n marginTop: '6px',\n fontSize: '13px',\n color: '#ef4444',\n };\n\n return (\n <div ref={containerRef} className={className} style={containerStyles}>\n <label id={labelId} htmlFor={pickerId} style={labelStyles}>\n {label}\n {required && (\n <span aria-label=\"required\" style={{ color: '#ef4444' }}>\n {' '}*\n </span>\n )}\n </label>\n\n <button\n ref={buttonRef}\n id={pickerId}\n type=\"button\"\n aria-labelledby={labelId}\n aria-expanded={isOpen}\n aria-controls={calendarId}\n aria-describedby={error ? errorId : undefined}\n aria-required={required}\n aria-invalid={!!error}\n disabled={disabled}\n onClick={() => !disabled && setIsOpen(!isOpen)}\n style={buttonStyles}\n >\n {value ? formatDate(value) : 'Select date'}\n <span\n aria-hidden=\"true\"\n style={{\n position: 'absolute',\n right: '12px',\n top: '50%',\n transform: 'translateY(-50%)',\n }}\n >\n 📅\n </span>\n </button>\n\n {isOpen && (\n <div id={calendarId} role=\"dialog\" aria-modal=\"false\" aria-label=\"Calendar\" style={calendarStyles}>\n <div style={headerStyles}>\n <button\n type=\"button\"\n onClick={handlePreviousMonth}\n aria-label=\"Previous month\"\n style={navButtonStyles}\n >\n ‹\n </button>\n <span style={{ fontWeight: 600 }}>\n {monthNames[viewDate.getMonth()]} {viewDate.getFullYear()}\n </span>\n <button\n type=\"button\"\n onClick={handleNextMonth}\n aria-label=\"Next month\"\n style={navButtonStyles}\n >\n ›\n </button>\n </div>\n\n <div role=\"grid\" aria-labelledby={labelId} style={gridStyles}>\n {dayNames.map((day) => (\n <div key={day} role=\"columnheader\" style={dayHeaderStyles}>\n {day}\n </div>\n ))}\n\n {days.map((cellDate, index) => {\n const isCurrentMonth = cellDate.getMonth() === viewDate.getMonth();\n const isSelected = value ? isSameDay(cellDate, value) : false;\n const isToday = isSameDay(cellDate, new Date());\n const isDisabled = isDateDisabled(cellDate);\n const isFocused = focusedDate ? isSameDay(cellDate, focusedDate) : false;\n\n return (\n <button\n key={index}\n type=\"button\"\n role=\"gridcell\"\n aria-label={formatDate(cellDate)}\n aria-selected={isSelected}\n aria-disabled={isDisabled}\n disabled={isDisabled}\n tabIndex={isFocused || (isSelected && !focusedDate) ? 0 : -1}\n onClick={() => handleDateSelect(cellDate)}\n onKeyDown={(e) => handleKeyDown(e, cellDate)}\n style={dayCellStyles(cellDate, isCurrentMonth, isSelected, isToday, isDisabled)}\n onMouseEnter={(e) => {\n if (!isDisabled && !isSelected) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }\n }}\n onMouseLeave={(e) => {\n if (!isDisabled && !isSelected) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n {cellDate.getDate()}\n </button>\n );\n })}\n </div>\n </div>\n )}\n\n {error && (\n <div id={errorId} role=\"alert\" style={errorStyles}>\n {error}\n </div>\n )}\n </div>\n );\n};\n","/**\n * AccessibleTreeView Component\n * Accessible tree navigation with keyboard support and ARIA\n */\n\nimport React, { useState } from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface TreeNode<T = unknown> {\n /** Unique identifier */\n id: string;\n /** Display label */\n label: string;\n /** Optional data payload */\n data?: T;\n /** Child nodes */\n children?: TreeNode<T>[];\n /** Whether node is disabled */\n disabled?: boolean;\n}\n\nexport interface AccessibleTreeViewProps<T = unknown> {\n /** Tree data */\n data: TreeNode<T>[];\n /** Callback when node is selected */\n onSelect?: (node: TreeNode<T>) => void;\n /** IDs of expanded nodes */\n expandedNodes?: string[];\n /** Callback when node is expanded/collapsed */\n onToggle?: (nodeId: string, isExpanded: boolean) => void;\n /** Allow multiple selection */\n multiSelect?: boolean;\n /** Selected node IDs */\n selectedNodes?: string[];\n /** Optional aria-label */\n ariaLabel?: string;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible tree view component with keyboard navigation\n *\n * @example\n * ```tsx\n * const treeData = [\n * {\n * id: '1',\n * label: 'Documents',\n * children: [\n * { id: '1-1', label: 'Reports' },\n * { id: '1-2', label: 'Invoices' }\n * ]\n * },\n * { id: '2', label: 'Images' }\n * ];\n *\n * <AccessibleTreeView\n * data={treeData}\n * onSelect={(node) => console.log(node)}\n * />\n * ```\n */\nexport function AccessibleTreeView<T = unknown>({\n data,\n onSelect,\n expandedNodes: controlledExpanded,\n onToggle,\n multiSelect = false,\n selectedNodes: controlledSelected = [],\n ariaLabel = 'Tree navigation',\n className = '',\n style = {},\n}: AccessibleTreeViewProps<T>): React.ReactElement {\n const [internalExpanded, setInternalExpanded] = useState<Set<string>>(new Set());\n const [internalSelected, setInternalSelected] = useState<Set<string>>(new Set());\n const treeId = useId('tree');\n\n const expandedSet = controlledExpanded\n ? new Set(controlledExpanded)\n : internalExpanded;\n\n const selectedSet = new Set(controlledSelected.length > 0 ? controlledSelected : Array.from(internalSelected));\n\n const toggleNode = (nodeId: string) => {\n const isExpanded = expandedSet.has(nodeId);\n\n if (controlledExpanded) {\n onToggle?.(nodeId, !isExpanded);\n } else {\n setInternalExpanded((prev) => {\n const next = new Set(prev);\n if (isExpanded) {\n next.delete(nodeId);\n } else {\n next.add(nodeId);\n }\n return next;\n });\n }\n };\n\n const selectNode = (node: TreeNode<T>) => {\n if (node.disabled) return;\n\n if (multiSelect) {\n setInternalSelected((prev) => {\n const next = new Set(prev);\n if (next.has(node.id)) {\n next.delete(node.id);\n } else {\n next.add(node.id);\n }\n return next;\n });\n } else {\n setInternalSelected(new Set([node.id]));\n }\n\n onSelect?.(node);\n };\n\n const getAllNodes = (nodes: TreeNode<T>[]): TreeNode<T>[] => {\n const result: TreeNode<T>[] = [];\n const traverse = (nodeList: TreeNode<T>[]) => {\n for (const node of nodeList) {\n result.push(node);\n if (node.children && expandedSet.has(node.id)) {\n traverse(node.children);\n }\n }\n };\n traverse(nodes);\n return result;\n };\n\n const handleKeyDown = (event: React.KeyboardEvent, node: TreeNode<T>, allNodes: TreeNode<T>[]) => {\n const currentIndex = allNodes.findIndex((n) => n.id === node.id);\n\n switch (event.key) {\n case 'Enter':\n case ' ':\n event.preventDefault();\n selectNode(node);\n break;\n\n case 'ArrowDown':\n event.preventDefault();\n if (currentIndex < allNodes.length - 1) {\n const nextNode = allNodes[currentIndex + 1];\n document.getElementById(`${treeId}-${nextNode.id}`)?.focus();\n }\n break;\n\n case 'ArrowUp':\n event.preventDefault();\n if (currentIndex > 0) {\n const prevNode = allNodes[currentIndex - 1];\n document.getElementById(`${treeId}-${prevNode.id}`)?.focus();\n }\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n if (node.children && node.children.length > 0) {\n if (!expandedSet.has(node.id)) {\n toggleNode(node.id);\n } else if (node.children[0]) {\n document.getElementById(`${treeId}-${node.children[0].id}`)?.focus();\n }\n }\n break;\n\n case 'ArrowLeft':\n event.preventDefault();\n if (node.children && expandedSet.has(node.id)) {\n toggleNode(node.id);\n }\n break;\n\n case 'Home':\n event.preventDefault();\n if (allNodes[0]) {\n document.getElementById(`${treeId}-${allNodes[0].id}`)?.focus();\n }\n break;\n\n case 'End':\n event.preventDefault();\n if (allNodes[allNodes.length - 1]) {\n document.getElementById(`${treeId}-${allNodes[allNodes.length - 1].id}`)?.focus();\n }\n break;\n }\n };\n\n const renderNode = (node: TreeNode<T>, level: number, allNodes: TreeNode<T>[]): React.ReactNode => {\n const hasChildren = node.children && node.children.length > 0;\n const isExpanded = expandedSet.has(node.id);\n const isSelected = selectedSet.has(node.id);\n\n const nodeStyles: React.CSSProperties = {\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n padding: '8px 12px',\n paddingLeft: `${12 + level * 24}px`,\n cursor: node.disabled ? 'not-allowed' : 'pointer',\n backgroundColor: isSelected ? '#e5e7eb' : 'transparent',\n borderRadius: '4px',\n opacity: node.disabled ? 0.5 : 1,\n color: 'inherit',\n };\n\n const iconStyles: React.CSSProperties = {\n width: '16px',\n textAlign: 'center',\n transition: 'transform 0.2s',\n transform: isExpanded ? 'rotate(90deg)' : 'rotate(0deg)',\n };\n\n return (\n <React.Fragment key={node.id}>\n <div\n id={`${treeId}-${node.id}`}\n role=\"treeitem\"\n aria-expanded={hasChildren ? isExpanded : undefined}\n aria-selected={isSelected}\n aria-level={level + 1}\n aria-disabled={node.disabled}\n tabIndex={isSelected ? 0 : -1}\n onClick={() => {\n if (!node.disabled) {\n if (hasChildren) {\n toggleNode(node.id);\n }\n selectNode(node);\n }\n }}\n onKeyDown={(e) => handleKeyDown(e, node, allNodes)}\n style={nodeStyles}\n onMouseEnter={(e) => {\n if (!node.disabled && !isSelected) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }\n }}\n onMouseLeave={(e) => {\n if (!node.disabled && !isSelected) {\n e.currentTarget.style.backgroundColor = 'transparent';\n }\n }}\n >\n {hasChildren ? (\n <span aria-hidden=\"true\" style={iconStyles}>\n ▶\n </span>\n ) : (\n <span style={{ width: '16px' }} />\n )}\n <span>{node.label}</span>\n </div>\n {hasChildren && isExpanded && (\n <div role=\"group\">\n {node.children!.map((child) => renderNode(child, level + 1, allNodes))}\n </div>\n )}\n </React.Fragment>\n );\n };\n\n const allNodes = getAllNodes(data);\n\n const containerStyles: React.CSSProperties = {\n ...style,\n };\n\n return (\n <div\n id={treeId}\n role=\"tree\"\n aria-label={ariaLabel}\n aria-multiselectable={multiSelect}\n className={className}\n style={containerStyles}\n >\n {data.map((node) => renderNode(node, 0, allNodes))}\n </div>\n );\n}\n","/**\n * AccessibleTable Component\n * Fully accessible data table with sorting, selection, and keyboard navigation\n */\n\nimport React, { useState } from 'react';\nimport { useId } from '../hooks/use-id';\n\nexport interface TableColumn<T> {\n /** Unique key for the column */\n key: string;\n /** Header label */\n label: string;\n /** Render function for cell content */\n render?: (item: T, index: number) => React.ReactNode;\n /** Whether column is sortable */\n sortable?: boolean;\n /** Width of the column */\n width?: string;\n}\n\nexport type SortDirection = 'asc' | 'desc' | null;\n\nexport interface AccessibleTableProps<T> {\n /** Table data */\n data: T[];\n /** Column definitions */\n columns: TableColumn<T>[];\n /** Table caption (required for accessibility) */\n caption: string;\n /** Whether rows are selectable */\n selectable?: boolean;\n /** Selected row indices */\n selectedRows?: number[];\n /** Callback when selection changes */\n onSelectionChange?: (selectedIndices: number[]) => void;\n /** Row key extractor */\n getRowKey?: (item: T, index: number) => string;\n /** Whether table is sortable */\n sortable?: boolean;\n /** Current sort column */\n sortColumn?: string;\n /** Current sort direction */\n sortDirection?: SortDirection;\n /** Callback when sort changes */\n onSort?: (column: string, direction: SortDirection) => void;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible data table with sorting and selection\n *\n * @example\n * ```tsx\n * interface User {\n * id: number;\n * name: string;\n * email: string;\n * }\n *\n * const columns: TableColumn<User>[] = [\n * { key: 'name', label: 'Name', sortable: true },\n * { key: 'email', label: 'Email', sortable: true }\n * ];\n *\n * <AccessibleTable\n * data={users}\n * columns={columns}\n * caption=\"User list\"\n * selectable\n * sortable\n * />\n * ```\n */\nexport function AccessibleTable<T extends Record<string, unknown>>({\n data,\n columns,\n caption,\n selectable = false,\n selectedRows: controlledSelected = [],\n onSelectionChange,\n getRowKey = (_, index) => String(index),\n sortable = false,\n sortColumn: controlledSortColumn,\n sortDirection: controlledSortDirection,\n onSort,\n className = '',\n style = {},\n}: AccessibleTableProps<T>): React.ReactElement {\n const [internalSelected, setInternalSelected] = useState<Set<number>>(new Set());\n const [internalSortColumn, setInternalSortColumn] = useState<string | null>(null);\n const [internalSortDirection, setInternalSortDirection] = useState<SortDirection>(null);\n\n const tableId = useId('table');\n\n const selectedSet = new Set(controlledSelected.length > 0 ? controlledSelected : Array.from(internalSelected));\n const sortColumn = controlledSortColumn !== undefined ? controlledSortColumn : internalSortColumn;\n const sortDirection = controlledSortDirection !== undefined ? controlledSortDirection : internalSortDirection;\n\n const handleSelectAll = (checked: boolean) => {\n if (checked) {\n const allIndices = data.map((_, index) => index);\n setInternalSelected(new Set(allIndices));\n onSelectionChange?.(allIndices);\n } else {\n setInternalSelected(new Set());\n onSelectionChange?.([]);\n }\n };\n\n const handleSelectRow = (index: number, checked: boolean) => {\n const newSelected = new Set(selectedSet);\n if (checked) {\n newSelected.add(index);\n } else {\n newSelected.delete(index);\n }\n setInternalSelected(newSelected);\n onSelectionChange?.(Array.from(newSelected));\n };\n\n const handleSort = (column: string) => {\n const col = columns.find((c) => c.key === column);\n if (!col?.sortable && !sortable) return;\n\n let newDirection: SortDirection = 'asc';\n\n if (sortColumn === column) {\n if (sortDirection === 'asc') {\n newDirection = 'desc';\n } else if (sortDirection === 'desc') {\n newDirection = null;\n }\n }\n\n if (onSort) {\n onSort(column, newDirection);\n } else {\n setInternalSortColumn(newDirection ? column : null);\n setInternalSortDirection(newDirection);\n }\n };\n\n const isAllSelected = data.length > 0 && selectedSet.size === data.length;\n const isSomeSelected = selectedSet.size > 0 && selectedSet.size < data.length;\n\n const tableStyles: React.CSSProperties = {\n width: '100%',\n borderCollapse: 'collapse',\n fontSize: '14px',\n ...style,\n };\n\n const thStyles: React.CSSProperties = {\n padding: '12px',\n textAlign: 'left',\n borderBottom: '2px solid #e5e7eb',\n fontWeight: 600,\n backgroundColor: 'rgba(128, 128, 128, 0.08)',\n color: 'inherit',\n };\n\n const sortButtonStyles: React.CSSProperties = {\n background: 'none',\n border: 'none',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '8px',\n font: 'inherit',\n fontWeight: 600,\n padding: 0,\n width: '100%',\n color: 'inherit',\n };\n\n const tdStyles: React.CSSProperties = {\n padding: '12px',\n borderBottom: '1px solid #e5e7eb',\n color: 'inherit',\n };\n\n const rowStyles = (isSelected: boolean): React.CSSProperties => ({\n backgroundColor: isSelected ? '#eff6ff' : 'transparent',\n });\n\n const getSortIcon = (column: string): string => {\n if (sortColumn !== column) return '⇅';\n if (sortDirection === 'asc') return '↑';\n if (sortDirection === 'desc') return '↓';\n return '⇅';\n };\n\n return (\n <table\n id={tableId}\n className={className}\n style={tableStyles}\n role=\"table\"\n aria-label={caption}\n >\n <caption style={{ padding: '12px', textAlign: 'left', fontWeight: 600, fontSize: '16px' }}>\n {caption}\n </caption>\n <thead>\n <tr>\n {selectable && (\n <th scope=\"col\" style={{ ...thStyles, width: '50px' }}>\n <input\n type=\"checkbox\"\n checked={isAllSelected}\n ref={(el) => {\n if (el) {\n el.indeterminate = isSomeSelected;\n }\n }}\n onChange={(e) => handleSelectAll(e.target.checked)}\n aria-label=\"Select all rows\"\n />\n </th>\n )}\n {columns.map((column) => {\n const isSortable = column.sortable || sortable;\n\n return (\n <th\n key={column.key}\n scope=\"col\"\n style={{ ...thStyles, width: column.width }}\n aria-sort={\n sortColumn === column.key\n ? sortDirection === 'asc'\n ? 'ascending'\n : sortDirection === 'desc'\n ? 'descending'\n : 'none'\n : undefined\n }\n >\n {isSortable ? (\n <button\n type=\"button\"\n onClick={() => handleSort(column.key)}\n style={sortButtonStyles}\n aria-label={`Sort by ${column.label}`}\n >\n <span>{column.label}</span>\n <span aria-hidden=\"true\">{getSortIcon(column.key)}</span>\n </button>\n ) : (\n column.label\n )}\n </th>\n );\n })}\n </tr>\n </thead>\n <tbody>\n {data.length === 0 ? (\n <tr>\n <td\n colSpan={columns.length + (selectable ? 1 : 0)}\n style={{ ...tdStyles, textAlign: 'center', color: '#9ca3af' }}\n >\n No data available\n </td>\n </tr>\n ) : (\n data.map((item, index) => {\n const isSelected = selectedSet.has(index);\n const rowKey = getRowKey(item, index);\n\n return (\n <tr key={rowKey} style={rowStyles(isSelected)}>\n {selectable && (\n <td style={tdStyles}>\n <input\n type=\"checkbox\"\n checked={isSelected}\n onChange={(e) => handleSelectRow(index, e.target.checked)}\n aria-label={`Select row ${index + 1}`}\n />\n </td>\n )}\n {columns.map((column) => (\n <td key={column.key} style={tdStyles}>\n {column.render\n ? column.render(item, index)\n : String(item[column.key] ?? '')}\n </td>\n ))}\n </tr>\n );\n })\n )}\n </tbody>\n </table>\n );\n}\n","/**\n * useReducedMotion Hook\n * Detects user's preference for reduced motion\n */\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Detects if the user prefers reduced motion\n * @returns true if the user prefers reduced motion\n *\n * @example\n * ```tsx\n * const prefersReducedMotion = useReducedMotion();\n *\n * <div style={{\n * transition: prefersReducedMotion ? 'none' : 'all 0.3s ease'\n * }}>\n * Content\n * </div>\n * ```\n */\nexport function useReducedMotion(): boolean {\n const [prefersReducedMotion, setPrefersReducedMotion] = useState(() => {\n if (typeof window === 'undefined') return false;\n\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n return mediaQuery.matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia('(prefers-reduced-motion: reduce)');\n\n const handleChange = (event: MediaQueryListEvent) => {\n setPrefersReducedMotion(event.matches);\n };\n\n // Modern browsers\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }\n\n // Legacy browsers\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }, []);\n\n return prefersReducedMotion;\n}\n","/**\n * useAnnounce Hook\n * Provides a simple way to make screen reader announcements\n */\n\nimport { useCallback, useEffect, useRef } from 'react';\nimport type { AriaLivePoliteness } from './use-aria-live';\n\n/**\n * Creates a function to announce messages to screen readers\n * @returns Function to announce messages\n *\n * @example\n * ```tsx\n * const announce = useAnnounce();\n *\n * const handleAddToCart = () => {\n * addItem(item);\n * announce('Item added to cart', 'polite');\n * };\n * ```\n */\nexport function useAnnounce(): (\n message: string,\n politeness?: AriaLivePoliteness,\n) => void {\n const regionRef = useRef<HTMLDivElement | null>(null);\n\n useEffect(() => {\n // Create a hidden live region if it doesn't exist\n if (!regionRef.current) {\n const region = document.createElement('div');\n region.setAttribute('role', 'status');\n region.setAttribute('aria-live', 'polite');\n region.setAttribute('aria-atomic', 'true');\n region.style.position = 'absolute';\n region.style.left = '-10000px';\n region.style.width = '1px';\n region.style.height = '1px';\n region.style.overflow = 'hidden';\n\n document.body.appendChild(region);\n regionRef.current = region;\n }\n\n return () => {\n if (regionRef.current) {\n document.body.removeChild(regionRef.current);\n regionRef.current = null;\n }\n };\n }, []);\n\n const announce = useCallback(\n (message: string, politeness: AriaLivePoliteness = 'polite') => {\n if (!regionRef.current) return;\n\n // Update aria-live attribute\n regionRef.current.setAttribute('aria-live', politeness);\n\n // Clear the region\n regionRef.current.textContent = '';\n\n // Use setTimeout to ensure the clear is processed first\n setTimeout(() => {\n if (regionRef.current) {\n regionRef.current.textContent = message;\n }\n }, 100);\n\n // Auto-clear after 5 seconds\n setTimeout(() => {\n if (regionRef.current) {\n regionRef.current.textContent = '';\n }\n }, 5100);\n },\n [],\n );\n\n return announce;\n}\n","/**\n * AccessibleCarousel Component\n * Fully accessible carousel with keyboard navigation and proper ARIA attributes\n */\n\nimport React, { useState, useEffect, useRef, type ReactNode } from 'react';\nimport { useId } from '../hooks/use-id';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\nimport { useAnnounce } from '../hooks/use-announce';\n\nexport interface AccessibleCarouselProps {\n /** Array of carousel items */\n items: ReactNode[];\n /** Whether to auto-play the carousel */\n autoPlay?: boolean;\n /** Interval between slides in milliseconds */\n interval?: number;\n /** Whether to show navigation controls */\n controls?: boolean;\n /** Whether to show slide indicators */\n indicators?: boolean;\n /** Whether to loop back to start/end */\n loop?: boolean;\n /** Optional aria-label */\n ariaLabel?: string;\n /** Optional className */\n className?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible carousel component with auto-play and keyboard navigation\n *\n * @example\n * ```tsx\n * const slides = [\n * <div>Slide 1</div>,\n * <div>Slide 2</div>,\n * <div>Slide 3</div>\n * ];\n *\n * <AccessibleCarousel\n * items={slides}\n * autoPlay\n * interval={5000}\n * controls\n * indicators\n * />\n * ```\n */\nexport const AccessibleCarousel: React.FC<AccessibleCarouselProps> = ({\n items,\n autoPlay = false,\n interval = 5000,\n controls = true,\n indicators = true,\n loop = true,\n ariaLabel = 'Carousel',\n className = '',\n style = {},\n}) => {\n const [currentIndex, setCurrentIndex] = useState(0);\n const [isPlaying, setIsPlaying] = useState(autoPlay);\n const [isPaused, setIsPaused] = useState(false);\n\n const carouselId = useId('carousel');\n const regionRef = useRef<HTMLDivElement>(null);\n const intervalRef = useRef<NodeJS.Timeout | undefined>(undefined);\n\n const prefersReducedMotion = useReducedMotion();\n const announce = useAnnounce();\n\n const totalSlides = items.length;\n\n useEffect(() => {\n if (isPlaying && !isPaused && !prefersReducedMotion) {\n intervalRef.current = setInterval(() => {\n handleNext();\n }, interval);\n }\n\n return () => {\n if (intervalRef.current) {\n clearInterval(intervalRef.current);\n }\n };\n }, [isPlaying, isPaused, currentIndex, interval, prefersReducedMotion]);\n\n const handlePrevious = () => {\n const newIndex = currentIndex === 0 ? (loop ? totalSlides - 1 : 0) : currentIndex - 1;\n setCurrentIndex(newIndex);\n announce(`Slide ${newIndex + 1} of ${totalSlides}`, 'polite');\n };\n\n const handleNext = () => {\n const newIndex = currentIndex === totalSlides - 1 ? (loop ? 0 : totalSlides - 1) : currentIndex + 1;\n setCurrentIndex(newIndex);\n announce(`Slide ${newIndex + 1} of ${totalSlides}`, 'polite');\n };\n\n const handleGoToSlide = (index: number) => {\n setCurrentIndex(index);\n announce(`Slide ${index + 1} of ${totalSlides}`, 'polite');\n };\n\n const handlePlayPause = () => {\n setIsPlaying(!isPlaying);\n announce(isPlaying ? 'Carousel paused' : 'Carousel playing', 'polite');\n };\n\n const handleKeyDown = (event: React.KeyboardEvent) => {\n switch (event.key) {\n case 'ArrowLeft':\n event.preventDefault();\n handlePrevious();\n break;\n\n case 'ArrowRight':\n event.preventDefault();\n handleNext();\n break;\n\n case 'Home':\n event.preventDefault();\n handleGoToSlide(0);\n break;\n\n case 'End':\n event.preventDefault();\n handleGoToSlide(totalSlides - 1);\n break;\n }\n };\n\n const containerStyles: React.CSSProperties = {\n position: 'relative',\n overflow: 'hidden',\n width: '100%',\n ...style,\n };\n\n const slidesContainerStyles: React.CSSProperties = {\n display: 'flex',\n transition: prefersReducedMotion ? 'none' : 'transform 0.5s ease-in-out',\n transform: `translateX(-${currentIndex * 100}%)`,\n };\n\n const slideStyles: React.CSSProperties = {\n minWidth: '100%',\n flex: '0 0 auto',\n };\n\n const controlsContainerStyles: React.CSSProperties = {\n position: 'absolute',\n top: '50%',\n left: 0,\n right: 0,\n transform: 'translateY(-50%)',\n display: 'flex',\n justifyContent: 'space-between',\n padding: '0 16px',\n pointerEvents: 'none',\n };\n\n const controlButtonStyles: React.CSSProperties = {\n pointerEvents: 'auto',\n width: '48px',\n height: '48px',\n borderRadius: '50%',\n border: 'none',\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n color: '#fff',\n fontSize: '20px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'background-color 0.2s',\n };\n\n const indicatorsStyles: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'center',\n gap: '8px',\n marginTop: '16px',\n };\n\n const indicatorButtonStyles = (isActive: boolean): React.CSSProperties => ({\n width: '12px',\n height: '12px',\n borderRadius: '50%',\n border: 'none',\n backgroundColor: isActive ? '#3b82f6' : '#d1d5db',\n cursor: 'pointer',\n padding: 0,\n transition: 'background-color 0.2s',\n });\n\n const playPauseButtonStyles: React.CSSProperties = {\n position: 'absolute',\n bottom: '16px',\n right: '16px',\n padding: '8px 16px',\n borderRadius: '4px',\n border: 'none',\n backgroundColor: 'rgba(0, 0, 0, 0.7)',\n color: '#fff',\n fontSize: '14px',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n gap: '6px',\n };\n\n return (\n <section\n ref={regionRef}\n aria-roledescription=\"carousel\"\n aria-label={ariaLabel}\n className={className}\n onMouseEnter={() => setIsPaused(true)}\n onMouseLeave={() => setIsPaused(false)}\n onFocus={() => setIsPaused(true)}\n onBlur={() => setIsPaused(false)}\n onKeyDown={handleKeyDown}\n tabIndex={0}\n >\n <div style={containerStyles}>\n <div\n id={`${carouselId}-slides`}\n style={slidesContainerStyles}\n aria-live=\"polite\"\n aria-atomic=\"false\"\n >\n {items.map((item, index) => (\n <div\n key={index}\n role=\"group\"\n aria-roledescription=\"slide\"\n aria-label={`Slide ${index + 1} of ${totalSlides}`}\n aria-hidden={index !== currentIndex}\n style={slideStyles}\n >\n {item}\n </div>\n ))}\n </div>\n\n {controls && (\n <div style={controlsContainerStyles}>\n <button\n type=\"button\"\n onClick={handlePrevious}\n aria-label=\"Previous slide\"\n aria-controls={`${carouselId}-slides`}\n disabled={!loop && currentIndex === 0}\n style={{\n ...controlButtonStyles,\n opacity: !loop && currentIndex === 0 ? 0.5 : 1,\n cursor: !loop && currentIndex === 0 ? 'not-allowed' : 'pointer',\n }}\n onMouseEnter={(e) => {\n if (loop || currentIndex !== 0) {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n }}\n >\n ‹\n </button>\n <button\n type=\"button\"\n onClick={handleNext}\n aria-label=\"Next slide\"\n aria-controls={`${carouselId}-slides`}\n disabled={!loop && currentIndex === totalSlides - 1}\n style={{\n ...controlButtonStyles,\n opacity: !loop && currentIndex === totalSlides - 1 ? 0.5 : 1,\n cursor: !loop && currentIndex === totalSlides - 1 ? 'not-allowed' : 'pointer',\n }}\n onMouseEnter={(e) => {\n if (loop || currentIndex !== totalSlides - 1) {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.5)';\n }}\n >\n ›\n </button>\n </div>\n )}\n\n {autoPlay && (\n <button\n type=\"button\"\n onClick={handlePlayPause}\n aria-label={isPlaying ? 'Pause carousel' : 'Play carousel'}\n style={playPauseButtonStyles}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.9)';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'rgba(0, 0, 0, 0.7)';\n }}\n >\n {isPlaying ? '⏸' : '▶'} {isPlaying ? 'Pause' : 'Play'}\n </button>\n )}\n </div>\n\n {indicators && (\n <div role=\"group\" aria-label=\"Slide indicators\" style={indicatorsStyles}>\n {items.map((_, index) => (\n <button\n key={index}\n type=\"button\"\n onClick={() => handleGoToSlide(index)}\n aria-label={`Go to slide ${index + 1}`}\n aria-current={index === currentIndex ? 'true' : 'false'}\n style={indicatorButtonStyles(index === currentIndex)}\n onMouseEnter={(e) => {\n if (index !== currentIndex) {\n e.currentTarget.style.backgroundColor = '#9ca3af';\n }\n }}\n onMouseLeave={(e) => {\n if (index !== currentIndex) {\n e.currentTarget.style.backgroundColor = '#d1d5db';\n }\n }}\n />\n ))}\n </div>\n )}\n </section>\n );\n};\n","/**\n * AccessibleDrawer Component\n * Accessible drawer/sidebar with focus trap and proper ARIA attributes\n */\n\nimport React, { useEffect, type ReactNode } from 'react';\nimport { useId } from '../hooks/use-id';\nimport { useFocusTrap } from '../hooks/use-focus-trap';\nimport { useReducedMotion } from '../hooks/use-reduced-motion';\n\nexport type DrawerSide = 'left' | 'right' | 'top' | 'bottom';\n\nexport interface AccessibleDrawerProps {\n /** Whether the drawer is open */\n isOpen: boolean;\n /** Callback when drawer should close */\n onClose: () => void;\n /** Side from which the drawer appears */\n side?: DrawerSide;\n /** Whether drawer is modal (blocks interaction with background) */\n modal?: boolean;\n /** Drawer title */\n title?: string;\n /** Drawer content */\n children: ReactNode;\n /** Optional className for the drawer */\n className?: string;\n /** Optional className for the backdrop */\n backdropClassName?: string;\n /** Optional styles */\n style?: React.CSSProperties;\n}\n\n/**\n * Accessible drawer/sidebar component with focus trap\n *\n * @example\n * ```tsx\n * const [isOpen, setIsOpen] = useState(false);\n *\n * <AccessibleDrawer\n * isOpen={isOpen}\n * onClose={() => setIsOpen(false)}\n * side=\"right\"\n * modal\n * title=\"Settings\"\n * >\n * <div>Drawer content here</div>\n * </AccessibleDrawer>\n * ```\n */\nexport const AccessibleDrawer: React.FC<AccessibleDrawerProps> = ({\n isOpen,\n onClose,\n side = 'right',\n modal = true,\n title,\n children,\n className = '',\n backdropClassName = '',\n style = {},\n}) => {\n const drawerId = useId('drawer');\n const titleId = useId('drawer-title');\n\n const { trapRef } = useFocusTrap({\n isActive: isOpen && modal,\n onEscape: onClose,\n });\n\n const prefersReducedMotion = useReducedMotion();\n\n useEffect(() => {\n if (isOpen && modal) {\n // Prevent body scroll when modal drawer is open\n const originalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = originalOverflow;\n };\n }\n }, [isOpen, modal]);\n\n if (!isOpen) return null;\n\n const getDrawerPosition = (): React.CSSProperties => {\n const baseStyles: React.CSSProperties = {\n position: 'fixed',\n zIndex: 1000,\n backgroundColor: '#fff',\n boxShadow: '0 4px 6px rgba(0, 0, 0, 0.1)',\n transition: prefersReducedMotion ? 'none' : 'transform 0.3s ease-in-out',\n };\n\n switch (side) {\n case 'left':\n return {\n ...baseStyles,\n top: 0,\n left: 0,\n bottom: 0,\n width: '320px',\n maxWidth: '80vw',\n };\n case 'right':\n return {\n ...baseStyles,\n top: 0,\n right: 0,\n bottom: 0,\n width: '320px',\n maxWidth: '80vw',\n };\n case 'top':\n return {\n ...baseStyles,\n top: 0,\n left: 0,\n right: 0,\n height: '320px',\n maxHeight: '80vh',\n };\n case 'bottom':\n return {\n ...baseStyles,\n bottom: 0,\n left: 0,\n right: 0,\n height: '320px',\n maxHeight: '80vh',\n };\n default:\n return baseStyles;\n }\n };\n\n const backdropStyles: React.CSSProperties = {\n position: 'fixed',\n top: 0,\n left: 0,\n right: 0,\n bottom: 0,\n backgroundColor: 'rgba(0, 0, 0, 0.5)',\n zIndex: 999,\n opacity: isOpen ? 1 : 0,\n transition: prefersReducedMotion ? 'none' : 'opacity 0.3s ease-in-out',\n };\n\n const drawerStyles: React.CSSProperties = {\n ...getDrawerPosition(),\n display: 'flex',\n flexDirection: 'column',\n overflowY: 'auto',\n ...style,\n };\n\n const headerStyles: React.CSSProperties = {\n display: 'flex',\n justifyContent: 'space-between',\n alignItems: 'center',\n padding: '16px 20px',\n borderBottom: '1px solid #e5e7eb',\n };\n\n const titleStyles: React.CSSProperties = {\n fontSize: '18px',\n fontWeight: 600,\n margin: 0,\n };\n\n const closeButtonStyles: React.CSSProperties = {\n width: '32px',\n height: '32px',\n borderRadius: '4px',\n border: 'none',\n backgroundColor: 'transparent',\n cursor: 'pointer',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n fontSize: '20px',\n transition: 'background-color 0.2s',\n };\n\n const contentStyles: React.CSSProperties = {\n flex: 1,\n padding: '20px',\n overflowY: 'auto',\n };\n\n return (\n <>\n {modal && (\n <div\n className={backdropClassName}\n style={backdropStyles}\n onClick={onClose}\n aria-hidden=\"true\"\n />\n )}\n <div\n ref={modal ? (trapRef as React.RefObject<HTMLDivElement>) : null}\n id={drawerId}\n role=\"dialog\"\n aria-modal={modal}\n aria-labelledby={title ? titleId : undefined}\n className={className}\n style={drawerStyles}\n >\n <div style={headerStyles}>\n {title && (\n <h2 id={titleId} style={titleStyles}>\n {title}\n </h2>\n )}\n <button\n type=\"button\"\n onClick={onClose}\n aria-label=\"Close drawer\"\n style={closeButtonStyles}\n onMouseEnter={(e) => {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n ×\n </button>\n </div>\n <div style={contentStyles}>{children}</div>\n </div>\n </>\n );\n};\n","/**\n * @a13y/react - useAccessibleForm Hook\n * Form management with accessibility built-in\n */\n\nimport { announce } from '@a13y/core/runtime/announce';\nimport { useCallback, useRef, useState } from 'react';\n\n/**\n * Field-level validation function\n */\nexport type FieldValidator<T> = (value: T) => string | true;\n\n/**\n * Form-level validation function (for cross-field validation)\n */\nexport type FormValidator<T> = (values: T) => Record<string, string> | null;\n\n/**\n * Field configuration\n */\nexport interface FieldConfig<T> {\n /**\n * Initial value\n */\n initialValue: T;\n\n /**\n * Validation function (optional)\n * Return true if valid, or error message if invalid\n */\n validate?: FieldValidator<T>;\n\n /**\n * Required field\n * @default false\n */\n required?: boolean;\n\n /**\n * Custom required message\n */\n requiredMessage?: string;\n}\n\n/**\n * Form configuration\n */\nexport interface FormConfig<T extends Record<string, unknown>> {\n /**\n * Field configurations\n */\n fields: {\n [K in keyof T]: FieldConfig<T[K]>;\n };\n\n /**\n * Form-level validation (optional)\n * For cross-field validation\n */\n validate?: FormValidator<T>;\n\n /**\n * Called when form is successfully submitted\n */\n onSubmit: (values: T) => void | Promise<void>;\n\n /**\n * Auto-focus first error on validation failure\n * @default true\n */\n autoFocusError?: boolean;\n\n /**\n * Announce errors to screen readers\n * @default true\n */\n announceErrors?: boolean;\n\n /**\n * Validate on blur\n * @default true\n */\n validateOnBlur?: boolean;\n\n /**\n * Validate on change (after first blur)\n * @default true\n */\n validateOnChange?: boolean;\n}\n\n/**\n * Form state\n */\nexport interface FormState<T extends Record<string, unknown>> {\n /**\n * Current form values\n */\n values: T;\n\n /**\n * Field errors\n */\n errors: Partial<Record<keyof T, string>>;\n\n /**\n * Fields that have been touched (blurred at least once)\n */\n touched: Partial<Record<keyof T, boolean>>;\n\n /**\n * Is form submitting\n */\n isSubmitting: boolean;\n\n /**\n * Is form valid (no errors)\n */\n isValid: boolean;\n\n /**\n * Has form been submitted at least once\n */\n hasSubmitted: boolean;\n}\n\n/**\n * Field props for binding to input elements\n */\nexport interface FieldProps<T> {\n name: string;\n value: T;\n onChange: (value: T) => void;\n onBlur: () => void;\n 'aria-invalid': boolean;\n 'aria-describedby'?: string;\n 'aria-required'?: boolean;\n}\n\n/**\n * Form return value\n */\nexport interface UseAccessibleFormReturn<T extends Record<string, unknown>> {\n /**\n * Form state\n */\n state: FormState<T>;\n\n /**\n * Get props for a field\n */\n getFieldProps: <K extends keyof T>(\n name: K,\n options?: { 'aria-describedby'?: string }\n ) => FieldProps<T[K]>;\n\n /**\n * Set field value programmatically\n */\n setFieldValue: <K extends keyof T>(name: K, value: T[K]) => void;\n\n /**\n * Set field error programmatically\n */\n setFieldError: <K extends keyof T>(name: K, error: string) => void;\n\n /**\n * Set multiple field errors at once\n */\n setErrors: (errors: Partial<Record<keyof T, string>>) => void;\n\n /**\n * Validate a single field\n */\n validateField: <K extends keyof T>(name: K) => boolean;\n\n /**\n * Validate entire form\n */\n validateForm: () => boolean;\n\n /**\n * Handle form submit\n */\n handleSubmit: (e?: React.FormEvent) => void;\n\n /**\n * Reset form to initial values\n */\n reset: () => void;\n\n /**\n * Clear all errors\n */\n clearErrors: () => void;\n\n /**\n * Field refs for focus management\n */\n fieldRefs: Map<keyof T, HTMLElement>;\n}\n\n/**\n * useAccessibleForm Hook\n *\n * Comprehensive form management with accessibility built-in:\n * - Automatic error announcements to screen readers\n * - Auto-focus first error field on validation failure\n * - Required field validation\n * - Field-level and form-level validation\n * - aria-invalid and aria-describedby management\n * - Touch tracking for better UX\n *\n * Pattern Explanation:\n * - Each field gets automatic ARIA attributes\n * - Errors are announced via screen reader\n * - First error field receives focus on submit\n * - Validation can run on blur or change\n * - Required fields enforced via TypeScript\n *\n * @example\n * ```tsx\n * const form = useAccessibleForm({\n * fields: {\n * email: {\n * initialValue: '',\n * required: true,\n * validate: (value) => {\n * if (!value.includes('@')) return 'Invalid email';\n * return true;\n * },\n * },\n * password: {\n * initialValue: '',\n * required: true,\n * validate: (value) => {\n * if (value.length < 8) return 'Password must be at least 8 characters';\n * return true;\n * },\n * },\n * },\n * onSubmit: (values) => {\n * console.log('Form submitted:', values);\n * },\n * });\n *\n * return (\n * <form onSubmit={form.handleSubmit}>\n * <input {...form.getFieldProps('email')} type=\"email\" />\n * {form.state.errors.email && (\n * <span id=\"email-error\">{form.state.errors.email}</span>\n * )}\n * </form>\n * );\n * ```\n */\nexport const useAccessibleForm = <T extends Record<string, unknown>>(\n config: FormConfig<T>\n): UseAccessibleFormReturn<T> => {\n const {\n fields,\n validate: formValidator,\n onSubmit,\n autoFocusError = true,\n announceErrors = true,\n validateOnBlur = true,\n validateOnChange = true,\n } = config;\n\n // Initialize form values from field configs\n const initialValues = Object.keys(fields).reduce((acc, key) => {\n acc[key as keyof T] = fields[key as keyof T].initialValue;\n return acc;\n }, {} as T);\n\n const [values, setValues] = useState<T>(initialValues);\n const [errors, setErrors] = useState<Partial<Record<keyof T, string>>>({});\n const [touched, setTouched] = useState<Partial<Record<keyof T, boolean>>>({});\n const [isSubmitting, setIsSubmitting] = useState(false);\n const [hasSubmitted, setHasSubmitted] = useState(false);\n\n // Field refs for focus management\n const fieldRefs = useRef<Map<keyof T, HTMLElement>>(new Map());\n\n // Validate a single field\n const validateField = useCallback(\n <K extends keyof T>(name: K): boolean => {\n const fieldConfig = fields[name];\n const value = values[name];\n\n // Check required\n if (fieldConfig.required) {\n const isEmpty =\n value === '' ||\n value === null ||\n value === undefined ||\n (Array.isArray(value) && value.length === 0);\n\n if (isEmpty) {\n const errorMessage = fieldConfig.requiredMessage || `${String(name)} is required`;\n setErrors((prev) => ({ ...prev, [name]: errorMessage }));\n return false;\n }\n }\n\n // Run custom validator\n if (fieldConfig.validate) {\n const result = fieldConfig.validate(value);\n if (result !== true) {\n setErrors((prev) => ({ ...prev, [name]: result }));\n return false;\n }\n }\n\n // Clear error if valid\n setErrors((prev) => {\n const newErrors = { ...prev };\n delete newErrors[name];\n return newErrors;\n });\n return true;\n },\n [fields, values]\n );\n\n // Validate entire form\n const validateForm = useCallback((): boolean => {\n let isValid = true;\n const newErrors: Partial<Record<keyof T, string>> = {};\n\n // Validate all fields\n for (const name of Object.keys(fields) as Array<keyof T>) {\n const fieldConfig = fields[name];\n const value = values[name];\n\n // Check required\n if (fieldConfig.required) {\n const isEmpty =\n value === '' ||\n value === null ||\n value === undefined ||\n (Array.isArray(value) && value.length === 0);\n\n if (isEmpty) {\n const errorMessage = fieldConfig.requiredMessage || `${String(name)} is required`;\n newErrors[name] = errorMessage;\n isValid = false;\n continue;\n }\n }\n\n // Run custom validator\n if (fieldConfig.validate) {\n const result = fieldConfig.validate(value);\n if (result !== true) {\n newErrors[name] = result;\n isValid = false;\n }\n }\n }\n\n // Run form-level validator\n if (formValidator) {\n const formErrors = formValidator(values);\n if (formErrors) {\n Object.assign(newErrors, formErrors);\n isValid = false;\n }\n }\n\n setErrors(newErrors);\n return isValid;\n }, [fields, values, formValidator]);\n\n // Set field value\n const setFieldValue = useCallback(<K extends keyof T>(name: K, value: T[K]) => {\n setValues((prev) => ({ ...prev, [name]: value }));\n }, []);\n\n // Set field error\n const setFieldError = useCallback(<K extends keyof T>(name: K, error: string) => {\n setErrors((prev) => ({ ...prev, [name]: error }));\n }, []);\n\n // Get field props\n const getFieldProps = useCallback(\n <K extends keyof T>(name: K, options?: { 'aria-describedby'?: string }): FieldProps<T[K]> => {\n const fieldConfig = fields[name];\n const hasError = !!errors[name];\n const errorId = `${String(name)}-error`;\n\n return {\n name: String(name),\n value: values[name],\n onChange: (value: T[K]) => {\n setFieldValue(name, value);\n // Validate on change if field has been touched\n if (validateOnChange && touched[name]) {\n validateField(name);\n }\n },\n onBlur: () => {\n setTouched((prev) => ({ ...prev, [name]: true }));\n if (validateOnBlur) {\n validateField(name);\n }\n },\n 'aria-invalid': hasError,\n 'aria-describedby': hasError\n ? options?.['aria-describedby']\n ? `${errorId} ${options['aria-describedby']}`\n : errorId\n : options?.['aria-describedby'],\n 'aria-required': fieldConfig.required,\n };\n },\n [\n fields,\n values,\n errors,\n touched,\n setFieldValue,\n validateField,\n validateOnBlur,\n validateOnChange,\n ]\n );\n\n // Handle form submit\n const handleSubmit = useCallback(\n async (e?: React.FormEvent) => {\n e?.preventDefault();\n\n setHasSubmitted(true);\n const isValid = validateForm();\n\n if (!isValid) {\n // Count errors\n const errorCount = Object.keys(errors).length;\n\n // Announce errors to screen reader\n if (announceErrors) {\n const errorMessage =\n errorCount === 1\n ? 'Form has 1 error. Please correct it and try again.'\n : `Form has ${errorCount} errors. Please correct them and try again.`;\n announce(errorMessage, { politeness: 'assertive' });\n }\n\n // Focus first error field\n if (autoFocusError) {\n const firstErrorField = Object.keys(errors)[0] as keyof T;\n const fieldElement = fieldRefs.current.get(firstErrorField);\n if (fieldElement) {\n fieldElement.focus();\n }\n }\n\n return;\n }\n\n // Submit form\n setIsSubmitting(true);\n try {\n await onSubmit(values);\n announce('Form submitted successfully', { politeness: 'polite' });\n } catch (error) {\n if (announceErrors) {\n announce('Form submission failed. Please try again.', {\n politeness: 'assertive',\n });\n }\n throw error;\n } finally {\n setIsSubmitting(false);\n }\n },\n [validateForm, errors, announceErrors, autoFocusError, onSubmit, values]\n );\n\n // Reset form\n const reset = useCallback(() => {\n setValues(initialValues);\n setErrors({});\n setTouched({});\n setHasSubmitted(false);\n }, [initialValues]);\n\n // Clear all errors\n const clearErrors = useCallback(() => {\n setErrors({});\n }, []);\n\n const isValid = Object.keys(errors).length === 0;\n\n return {\n state: {\n values,\n errors,\n touched,\n isSubmitting,\n isValid,\n hasSubmitted,\n },\n getFieldProps,\n setFieldValue,\n setFieldError,\n setErrors,\n validateField,\n validateForm,\n handleSubmit,\n reset,\n clearErrors,\n fieldRefs: fieldRefs.current,\n };\n};\n","/**\n * @a13y/react - useFormField Hook\n * Individual form field management with accessibility built-in\n */\n\nimport { announce } from '@a13y/core/runtime/announce';\nimport { useCallback, useEffect, useId, useRef, useState } from 'react';\n\n/**\n * Props for useFormField\n */\nexport interface UseFormFieldProps<T = string> {\n /**\n * Field label (required for accessibility)\n * This will be used as the accessible name\n */\n label: string;\n\n /**\n * Initial field value\n */\n initialValue?: T;\n\n /**\n * Validation function\n * Return true if valid, or error message if invalid\n */\n validate?: (value: T) => string | true;\n\n /**\n * Is field required\n * @default false\n */\n required?: boolean;\n\n /**\n * Custom required message\n */\n requiredMessage?: string;\n\n /**\n * Help text to display\n */\n helpText?: string;\n\n /**\n * Validate on blur\n * @default true\n */\n validateOnBlur?: boolean;\n\n /**\n * Validate on change (after first blur)\n * @default true\n */\n validateOnChange?: boolean;\n\n /**\n * Announce errors to screen readers\n * @default true\n */\n announceErrors?: boolean;\n\n /**\n * Called when value changes\n */\n onChange?: (value: T) => void;\n\n /**\n * Called when field is blurred\n */\n onBlur?: () => void;\n}\n\n/**\n * Return value from useFormField\n */\nexport interface UseFormFieldReturn<T = string> {\n /**\n * Field ID (generated)\n */\n id: string;\n\n /**\n * Label ID (generated)\n */\n labelId: string;\n\n /**\n * Error message ID (generated)\n */\n errorId: string;\n\n /**\n * Help text ID (generated)\n */\n helpTextId: string;\n\n /**\n * Current field value\n */\n value: T;\n\n /**\n * Current error message (if any)\n */\n error: string | null;\n\n /**\n * Has field been touched (blurred at least once)\n */\n isTouched: boolean;\n\n /**\n * Is field valid\n */\n isValid: boolean;\n\n /**\n * Set field value\n */\n setValue: (value: T) => void;\n\n /**\n * Set field error\n */\n setError: (error: string | null) => void;\n\n /**\n * Validate field\n */\n validate: () => boolean;\n\n /**\n * Clear error\n */\n clearError: () => void;\n\n /**\n * Reset field to initial value\n */\n reset: () => void;\n\n /**\n * Props for label element\n */\n labelProps: {\n id: string;\n htmlFor: string;\n };\n\n /**\n * Props for input element\n */\n inputProps: {\n id: string;\n name: string;\n value: T;\n onChange: (value: T) => void;\n onBlur: () => void;\n 'aria-labelledby': string;\n 'aria-describedby'?: string;\n 'aria-invalid': boolean;\n 'aria-required'?: boolean;\n ref: React.RefObject<HTMLInputElement | null>;\n };\n\n /**\n * Props for error message element\n */\n errorProps: {\n id: string;\n role: 'alert';\n 'aria-live': 'polite';\n };\n\n /**\n * Props for help text element\n */\n helpTextProps: {\n id: string;\n };\n\n /**\n * Field ref for focus management\n */\n fieldRef: React.RefObject<HTMLInputElement | null>;\n}\n\n/**\n * useFormField Hook\n *\n * Manages a single form field with accessibility built-in:\n * - Required label via TypeScript\n * - Automatic ARIA attributes\n * - Error announcements to screen readers\n * - Help text support\n * - Validation on blur/change\n * - ID generation for ARIA relationships\n *\n * Pattern Explanation:\n * - Label is required (enforced at compile-time)\n * - aria-labelledby automatically connects label to input\n * - aria-describedby automatically connects errors and help text\n * - aria-invalid automatically set when error exists\n * - Errors announced to screen readers when they appear\n *\n * @example\n * ```tsx\n * const emailField = useFormField({\n * label: 'Email Address',\n * required: true,\n * validate: (value) => {\n * if (!value.includes('@')) return 'Invalid email address';\n * return true;\n * },\n * helpText: 'We will never share your email',\n * });\n *\n * return (\n * <div>\n * <label {...emailField.labelProps}>{emailField.label}</label>\n * <input\n * {...emailField.inputProps}\n * type=\"email\"\n * onChange={(e) => emailField.inputProps.onChange(e.target.value)}\n * />\n * {emailField.helpText && (\n * <span {...emailField.helpTextProps}>{emailField.helpText}</span>\n * )}\n * {emailField.error && (\n * <span {...emailField.errorProps}>{emailField.error}</span>\n * )}\n * </div>\n * );\n * ```\n */\nexport const useFormField = <T = string>(props: UseFormFieldProps<T>): UseFormFieldReturn<T> => {\n const {\n label,\n initialValue = '' as T,\n validate: validator,\n required = false,\n requiredMessage,\n helpText,\n validateOnBlur = true,\n validateOnChange = true,\n announceErrors = true,\n onChange,\n onBlur,\n } = props;\n\n // Development-time validation\n if (typeof __DEV__ !== 'undefined' && __DEV__) {\n if (!label || label.trim().length === 0) {\n throw new Error('@a13y/react [useFormField]: \"label\" prop is required for accessibility');\n }\n }\n\n const [value, setValue] = useState<T>(initialValue);\n const [error, setError] = useState<string | null>(null);\n const [isTouched, setIsTouched] = useState(false);\n\n const fieldRef = useRef<HTMLInputElement>(null);\n\n // Generate unique IDs\n const id = useId();\n const labelId = `${id}-label`;\n const errorId = `${id}-error`;\n const helpTextId = `${id}-help`;\n\n // Validate field\n const validate = useCallback((): boolean => {\n // Check required\n if (required) {\n const isEmpty =\n value === '' ||\n value === null ||\n value === undefined ||\n (Array.isArray(value) && value.length === 0);\n\n if (isEmpty) {\n const errorMessage = requiredMessage || `${label} is required`;\n setError(errorMessage);\n return false;\n }\n }\n\n // Run custom validator\n if (validator) {\n const result = validator(value);\n if (result !== true) {\n setError(result);\n return false;\n }\n }\n\n // Clear error if valid\n setError(null);\n return true;\n }, [value, required, validator, label, requiredMessage]);\n\n // Announce error to screen reader when it changes\n useEffect(() => {\n if (error && isTouched && announceErrors) {\n announce(error, { politeness: 'assertive', delay: 100 });\n }\n }, [error, isTouched, announceErrors]);\n\n // Handle value change\n const handleChange = useCallback(\n (newValue: T) => {\n setValue(newValue);\n onChange?.(newValue);\n\n // Validate on change if field has been touched\n if (validateOnChange && isTouched) {\n // Validate in next tick to ensure state is updated\n setTimeout(() => validate(), 0);\n }\n },\n [onChange, validateOnChange, isTouched, validate]\n );\n\n // Handle blur\n const handleBlur = useCallback(() => {\n setIsTouched(true);\n onBlur?.();\n\n if (validateOnBlur) {\n validate();\n }\n }, [onBlur, validateOnBlur, validate]);\n\n // Clear error\n const clearError = useCallback(() => {\n setError(null);\n }, []);\n\n // Reset field\n const reset = useCallback(() => {\n setValue(initialValue);\n setError(null);\n setIsTouched(false);\n }, [initialValue]);\n\n const isValid = error === null;\n\n // Build aria-describedby\n const describedBy = [helpText ? helpTextId : null, error ? errorId : null]\n .filter(Boolean)\n .join(' ');\n\n return {\n id,\n labelId,\n errorId,\n helpTextId,\n value,\n error,\n isTouched,\n isValid,\n setValue: handleChange,\n setError,\n validate,\n clearError,\n reset,\n labelProps: {\n id: labelId,\n htmlFor: id,\n },\n inputProps: {\n id,\n name: id,\n value,\n onChange: handleChange,\n onBlur: handleBlur,\n 'aria-labelledby': labelId,\n 'aria-describedby': describedBy || undefined,\n 'aria-invalid': !isValid,\n 'aria-required': required ? true : undefined,\n ref: fieldRef,\n },\n errorProps: {\n id: errorId,\n role: 'alert',\n 'aria-live': 'polite',\n },\n helpTextProps: {\n id: helpTextId,\n },\n fieldRef,\n };\n};\n\n/**\n * Helper type to ensure label is provided\n * Use this in component props to enforce accessible labels\n */\nexport type RequireLabel<T> = T & {\n label: string;\n};\n","/**\n * useMediaQuery Hook\n * Tracks the state of a CSS media query\n */\n\nimport { useEffect, useState } from 'react';\n\n/**\n * Tracks whether a media query matches\n * @param query - CSS media query string\n * @returns true if the media query matches\n *\n * @example\n * ```tsx\n * const isMobile = useMediaQuery('(max-width: 768px)');\n * const prefersDark = useMediaQuery('(prefers-color-scheme: dark)');\n *\n * {isMobile ? <MobileView /> : <DesktopView />}\n * ```\n */\nexport function useMediaQuery(query: string): boolean {\n const [matches, setMatches] = useState(() => {\n if (typeof window === 'undefined') return false;\n\n const mediaQuery = window.matchMedia(query);\n return mediaQuery.matches;\n });\n\n useEffect(() => {\n if (typeof window === 'undefined') return;\n\n const mediaQuery = window.matchMedia(query);\n\n // Set initial value\n setMatches(mediaQuery.matches);\n\n const handleChange = (event: MediaQueryListEvent) => {\n setMatches(event.matches);\n };\n\n // Modern browsers\n if (mediaQuery.addEventListener) {\n mediaQuery.addEventListener('change', handleChange);\n return () => mediaQuery.removeEventListener('change', handleChange);\n }\n\n // Legacy browsers\n mediaQuery.addListener(handleChange);\n return () => mediaQuery.removeListener(handleChange);\n }, [query]);\n\n return matches;\n}\n","/**\n * @a13y/react - DialogStack Pattern\n * Manages nested modals with proper focus restoration and z-index layering\n */\n\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useEffect, useState } from 'react';\nimport { AccessibleDialog } from '../components/AccessibleDialog';\n\n/**\n * Dialog in the stack\n */\ninterface StackedDialog {\n id: string;\n title: string;\n content: ReactNode;\n description?: string;\n onClose: () => void;\n zIndex: number;\n}\n\n/**\n * Dialog stack context\n */\ninterface DialogStackContextValue {\n /**\n * Push a new dialog onto the stack\n */\n push: (dialog: Omit<StackedDialog, 'zIndex'>) => void;\n\n /**\n * Pop the topmost dialog\n */\n pop: () => void;\n\n /**\n * Close a specific dialog by ID\n */\n close: (id: string) => void;\n\n /**\n * Close all dialogs\n */\n closeAll: () => void;\n\n /**\n * Current stack depth\n */\n depth: number;\n}\n\nconst DialogStackContext = createContext<DialogStackContextValue | null>(null);\n\n/**\n * Hook to access dialog stack\n */\nexport const useDialogStack = (): DialogStackContextValue => {\n const context = useContext(DialogStackContext);\n if (!context) {\n throw new Error('useDialogStack must be used within DialogStackProvider');\n }\n return context;\n};\n\n/**\n * Props for DialogStackProvider\n */\nexport interface DialogStackProviderProps {\n children: ReactNode;\n /**\n * Base z-index for dialogs\n * @default 1000\n */\n baseZIndex?: number;\n /**\n * Z-index increment between layers\n * @default 10\n */\n zIndexIncrement?: number;\n}\n\n/**\n * Dialog Stack Provider\n *\n * Manages a stack of nested dialogs with:\n * - Automatic z-index management\n * - Focus restoration chain\n * - Escape key closes topmost dialog only\n * - Backdrop isolation per layer\n *\n * Pattern Explanation:\n * - Each dialog gets a unique z-index: base + (depth * increment)\n * - Focus is trapped in the topmost dialog\n * - When a dialog closes, focus returns to the previous dialog\n * - Escape key only affects the topmost dialog\n * - Body scroll is locked when any dialog is open\n *\n * @example\n * ```tsx\n * function App() {\n * return (\n * <DialogStackProvider>\n * <MyComponent />\n * </DialogStackProvider>\n * );\n * }\n *\n * function MyComponent() {\n * const { push, pop } = useDialogStack();\n *\n * return (\n * <button onClick={() => push({\n * id: 'dialog1',\n * title: 'First Dialog',\n * content: <SecondLevelDialog />,\n * onClose: () => pop(),\n * })}>\n * Open Dialog\n * </button>\n * );\n * }\n *\n * function SecondLevelDialog() {\n * const { push, pop } = useDialogStack();\n *\n * return (\n * <button onClick={() => push({\n * id: 'dialog2',\n * title: 'Nested Dialog',\n * content: <p>This is nested!</p>,\n * onClose: () => pop(),\n * })}>\n * Open Nested Dialog\n * </button>\n * );\n * }\n * ```\n */\nexport const DialogStackProvider = (props: DialogStackProviderProps) => {\n const { children, baseZIndex = 1000, zIndexIncrement = 10 } = props;\n\n const [stack, setStack] = useState<StackedDialog[]>([]);\n\n const push = (dialog: Omit<StackedDialog, 'zIndex'>) => {\n const zIndex = baseZIndex + stack.length * zIndexIncrement;\n setStack((prev) => [...prev, { ...dialog, zIndex }]);\n };\n\n const pop = () => {\n setStack((prev) => {\n const newStack = [...prev];\n const dialog = newStack.pop();\n dialog?.onClose();\n return newStack;\n });\n };\n\n const close = (id: string) => {\n setStack((prev) => {\n const index = prev.findIndex((d) => d.id === id);\n if (index === -1) return prev;\n\n // Close this dialog and all dialogs above it\n const closedDialogs = prev.slice(index);\n for (const d of closedDialogs) {\n d.onClose();\n }\n\n return prev.slice(0, index);\n });\n };\n\n const closeAll = () => {\n for (const d of stack) {\n d.onClose();\n }\n setStack([]);\n };\n\n // Body scroll lock when stack is not empty\n useEffect(() => {\n if (stack.length > 0) {\n const originalOverflow = document.body.style.overflow;\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.body.style.overflow = originalOverflow;\n };\n }\n }, [stack.length]);\n\n const contextValue: DialogStackContextValue = {\n push,\n pop,\n close,\n closeAll,\n depth: stack.length,\n };\n\n return (\n <DialogStackContext.Provider value={contextValue}>\n {children}\n\n {/* Render all dialogs in the stack */}\n {stack.map((dialog) => (\n <div key={dialog.id} style={{ zIndex: dialog.zIndex }}>\n <AccessibleDialog\n isOpen={true}\n onClose={() => close(dialog.id)}\n title={dialog.title}\n description={dialog.description}\n backdropClassName=\"dialog-stack-backdrop\"\n >\n {dialog.content}\n </AccessibleDialog>\n </div>\n ))}\n </DialogStackContext.Provider>\n );\n};\n","/**\n * @a13y/react - InfiniteList Pattern\n * Accessible infinite scroll with lazy loading\n */\n\nimport { announce } from '@a13y/core/runtime/announce';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\n/**\n * Props for InfiniteList\n */\nexport interface InfiniteListProps<T> {\n /**\n * Current items in the list\n */\n items: T[];\n\n /**\n * Function to load more items\n * Should return a promise that resolves to new items\n */\n loadMore: () => Promise<T[]>;\n\n /**\n * Check if there are more items to load\n */\n hasMore: boolean;\n\n /**\n * Check if currently loading\n */\n isLoading: boolean;\n\n /**\n * Render function for each item\n */\n renderItem: (item: T, index: number) => ReactNode;\n\n /**\n * Unique key extractor\n */\n getItemKey: (item: T, index: number) => string;\n\n /**\n * Loading indicator\n */\n loadingIndicator?: ReactNode;\n\n /**\n * Empty state\n */\n emptyState?: ReactNode;\n\n /**\n * Accessible label for the list\n */\n 'aria-label': string;\n\n /**\n * Distance from bottom to trigger load (px)\n * @default 200\n */\n threshold?: number;\n\n /**\n * Custom className\n */\n className?: string;\n}\n\n/**\n * Infinite List Component\n *\n * Accessible infinite scroll with:\n * - Intersection Observer for lazy loading\n * - Screen reader announcements for new items\n * - Keyboard navigation (Tab through items)\n * - Loading states announced\n * - Total count announcements\n *\n * Pattern Explanation:\n * - Uses Intersection Observer to detect when user scrolls near bottom\n * - Announces new items loaded to screen readers\n * - Maintains focus position when new items are added\n * - Works with keyboard navigation (no mouse required)\n * - Provides loading and empty states\n *\n * @example\n * ```tsx\n * const [items, setItems] = useState<Item[]>([]);\n * const [hasMore, setHasMore] = useState(true);\n * const [isLoading, setIsLoading] = useState(false);\n *\n * const loadMore = async () => {\n * setIsLoading(true);\n * const newItems = await fetchItems(items.length, 20);\n * setItems([...items, ...newItems]);\n * setHasMore(newItems.length === 20);\n * setIsLoading(false);\n * return newItems;\n * };\n *\n * return (\n * <InfiniteList\n * items={items}\n * loadMore={loadMore}\n * hasMore={hasMore}\n * isLoading={isLoading}\n * renderItem={(item) => <ItemCard item={item} />}\n * getItemKey={(item) => item.id}\n * aria-label=\"Products list\"\n * />\n * );\n * ```\n */\nexport const InfiniteList = <T,>(props: InfiniteListProps<T>) => {\n const {\n items,\n loadMore,\n hasMore,\n isLoading,\n renderItem,\n getItemKey,\n loadingIndicator,\n emptyState,\n 'aria-label': ariaLabel,\n threshold = 200,\n className = '',\n } = props;\n\n const [previousCount, setPreviousCount] = useState(items.length);\n const sentinelRef = useRef<HTMLDivElement>(null);\n const listRef = useRef<HTMLDivElement>(null);\n\n // Announce new items to screen readers\n useEffect(() => {\n if (items.length > previousCount && !isLoading) {\n const newItemsCount = items.length - previousCount;\n announce(\n `${newItemsCount} new item${newItemsCount === 1 ? '' : 's'} loaded. Total: ${items.length}`,\n { politeness: 'polite', delay: 500 }\n );\n setPreviousCount(items.length);\n }\n }, [items.length, previousCount, isLoading]);\n\n // Announce loading state\n useEffect(() => {\n if (isLoading) {\n announce('Loading more items', { politeness: 'polite' });\n }\n }, [isLoading]);\n\n // Intersection Observer for infinite scroll\n useEffect(() => {\n if (!hasMore || isLoading || !sentinelRef.current) {\n return;\n }\n\n const observer = new IntersectionObserver(\n (entries) => {\n const sentinel = entries[0];\n if (sentinel?.isIntersecting) {\n loadMore();\n }\n },\n {\n root: null,\n rootMargin: `${threshold}px`,\n threshold: 0,\n }\n );\n\n observer.observe(sentinelRef.current);\n\n return () => observer.disconnect();\n }, [hasMore, isLoading, loadMore, threshold]);\n\n // Empty state\n if (items.length === 0 && !isLoading) {\n return (\n <div role=\"status\" aria-live=\"polite\">\n {emptyState || <p>No items to display</p>}\n </div>\n );\n }\n\n return (\n <div ref={listRef} className={className}>\n {/* List */}\n <div role=\"list\" aria-label={ariaLabel} aria-busy={isLoading}>\n {items.map((item, index) => (\n <div key={getItemKey(item, index)} role=\"listitem\">\n {renderItem(item, index)}\n </div>\n ))}\n </div>\n\n {/* Loading indicator */}\n {isLoading && (\n <div\n role=\"status\"\n aria-live=\"polite\"\n aria-label=\"Loading more items\"\n style={{\n padding: '1rem',\n textAlign: 'center',\n }}\n >\n {loadingIndicator || <span>Loading...</span>}\n </div>\n )}\n\n {/* Sentinel for intersection observer */}\n {hasMore && !isLoading && (\n <div ref={sentinelRef} aria-hidden=\"true\" style={{ height: '1px', visibility: 'hidden' }} />\n )}\n\n {/* End message */}\n {!hasMore && items.length > 0 && (\n <div\n role=\"status\"\n aria-live=\"polite\"\n style={{\n padding: '1rem',\n textAlign: 'center',\n color: '#6b7280',\n fontSize: '0.875rem',\n }}\n >\n End of list. Total: {items.length} items.\n </div>\n )}\n </div>\n );\n};\n","/**\n * @a13y/react - NestedMenu Pattern\n * Multi-level dropdown menu with keyboard navigation\n */\n\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport { useAccessibleButton } from '../hooks/use-accessible-button';\nimport { useKeyboardNavigation } from '../hooks/use-keyboard-navigation';\n\n/**\n * Menu item with optional submenu\n */\nexport interface NestedMenuItem {\n id: string;\n label: string;\n icon?: ReactNode;\n disabled?: boolean;\n /**\n * Action when item is selected\n * Omit for items with submenu\n */\n onPress?: () => void;\n /**\n * Submenu items\n */\n submenu?: NestedMenuItem[];\n}\n\n/**\n * Props for NestedMenu\n */\nexport interface NestedMenuProps {\n /**\n * Menu trigger label for screen readers\n */\n label: string;\n /**\n * Trigger content\n */\n trigger: ReactNode;\n /**\n * Menu items (can have nested submenus)\n */\n items: NestedMenuItem[];\n /**\n * Custom className for trigger\n */\n className?: string;\n}\n\n/**\n * Nested Menu Component\n *\n * Multi-level dropdown menu with full keyboard navigation:\n * - Arrow Up/Down: Navigate items\n * - Arrow Right: Open submenu\n * - Arrow Left: Close submenu and return to parent\n * - Enter/Space: Select item or open submenu\n * - Escape: Close current menu level\n *\n * Pattern Explanation:\n * - Each submenu level maintains its own navigation state\n * - Arrow Right on item with submenu opens it\n * - Arrow Left closes submenu and returns focus to parent item\n * - Screen readers announce submenu availability via aria-haspopup\n * - Submenus are positioned relative to parent items\n * - Focus is trapped within the active menu level\n *\n * @example\n * ```tsx\n * <NestedMenu\n * label=\"File menu\"\n * trigger=\"File ▼\"\n * items={[\n * {\n * id: 'new',\n * label: 'New',\n * submenu: [\n * { id: 'file', label: 'File', onPress: () => console.log('New File') },\n * { id: 'folder', label: 'Folder', onPress: () => console.log('New Folder') },\n * ],\n * },\n * { id: 'open', label: 'Open', onPress: () => console.log('Open') },\n * {\n * id: 'recent',\n * label: 'Open Recent',\n * submenu: [\n * { id: 'file1', label: 'document.txt', onPress: () => {} },\n * { id: 'file2', label: 'project.json', onPress: () => {} },\n * ],\n * },\n * ]}\n * />\n * ```\n */\nexport const NestedMenu = (props: NestedMenuProps) => {\n const { label, trigger, items, className = '' } = props;\n\n const [isOpen, setIsOpen] = useState(false);\n const [openSubmenuId, setOpenSubmenuId] = useState<string | null>(null);\n\n // Trigger button\n const { buttonProps } = useAccessibleButton({\n label,\n onPress: () => setIsOpen(!isOpen),\n });\n\n // Close menu on Escape\n useEffect(() => {\n const handleEscape = (e: KeyboardEvent) => {\n if (e.key === 'Escape' && isOpen) {\n setIsOpen(false);\n setOpenSubmenuId(null);\n }\n };\n\n document.addEventListener('keydown', handleEscape);\n return () => document.removeEventListener('keydown', handleEscape);\n }, [isOpen]);\n\n return (\n <div style={{ position: 'relative', display: 'inline-block' }}>\n <button\n {...buttonProps}\n aria-expanded={isOpen}\n aria-haspopup=\"true\"\n className={className}\n style={{\n padding: '0.5rem 1rem',\n border: '1px solid #d1d5db',\n borderRadius: '0.375rem',\n backgroundColor: 'white',\n cursor: 'pointer',\n }}\n >\n {trigger}\n </button>\n\n {isOpen && (\n <MenuLevel\n items={items}\n onClose={() => setIsOpen(false)}\n openSubmenuId={openSubmenuId}\n onSubmenuChange={setOpenSubmenuId}\n depth={0}\n />\n )}\n </div>\n );\n};\n\n/**\n * Single menu level (supports recursion for submenus)\n */\ninterface MenuLevelProps {\n items: NestedMenuItem[];\n onClose: () => void;\n openSubmenuId: string | null;\n onSubmenuChange: (id: string | null) => void;\n depth: number;\n}\n\nconst MenuLevel = (props: MenuLevelProps) => {\n const { items, onClose, openSubmenuId, onSubmenuChange, depth } = props;\n\n const menuRef = useRef<HTMLDivElement>(null);\n\n // Keyboard navigation\n const { getItemProps, setCurrentIndex } = useKeyboardNavigation({\n orientation: 'vertical',\n loop: true,\n });\n\n const handleItemKeyDown = (e: React.KeyboardEvent, item: NestedMenuItem) => {\n // Arrow Right: Open submenu\n if (e.key === 'ArrowRight' && item.submenu) {\n e.preventDefault();\n e.stopPropagation();\n onSubmenuChange(item.id);\n }\n\n // Arrow Left: Close submenu (only if this is a submenu)\n if (e.key === 'ArrowLeft' && depth > 0) {\n e.preventDefault();\n e.stopPropagation();\n onSubmenuChange(null);\n }\n\n // Enter/Space: Execute action or open submenu\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n e.stopPropagation();\n\n if (item.submenu) {\n onSubmenuChange(item.id);\n } else if (item.onPress && !item.disabled) {\n item.onPress();\n onClose();\n }\n }\n };\n\n const handleItemClick = (item: NestedMenuItem) => {\n if (item.disabled) return;\n\n if (item.submenu) {\n onSubmenuChange(openSubmenuId === item.id ? null : item.id);\n } else if (item.onPress) {\n item.onPress();\n onClose();\n }\n };\n\n return (\n <div\n ref={menuRef}\n role=\"menu\"\n aria-orientation=\"vertical\"\n style={{\n position: depth === 0 ? 'absolute' : 'absolute',\n top: depth === 0 ? 'calc(100% + 0.25rem)' : 0,\n left: depth === 0 ? 0 : '100%',\n minWidth: '12rem',\n backgroundColor: 'white',\n border: '1px solid #e5e7eb',\n borderRadius: '0.375rem',\n boxShadow: '0 10px 15px -3px rgba(0, 0, 0, 0.1)',\n padding: '0.25rem',\n zIndex: 50 + depth,\n }}\n >\n {items.map((item, index) => {\n const itemProps = getItemProps(index);\n const hasSubmenu = !!item.submenu;\n const isSubmenuOpen = openSubmenuId === item.id;\n\n return (\n <div key={item.id} style={{ position: 'relative' }}>\n <button\n {...itemProps}\n role=\"menuitem\"\n aria-haspopup={hasSubmenu ? 'true' : undefined}\n aria-expanded={hasSubmenu ? isSubmenuOpen : undefined}\n disabled={item.disabled}\n onClick={() => handleItemClick(item)}\n onKeyDown={(e) => handleItemKeyDown(e, item)}\n style={{\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'space-between',\n gap: '0.75rem',\n width: '100%',\n padding: '0.5rem 0.75rem',\n border: 'none',\n background: 'transparent',\n textAlign: 'left',\n fontSize: '0.875rem',\n cursor: item.disabled ? 'not-allowed' : 'pointer',\n borderRadius: '0.25rem',\n color: item.disabled ? '#9ca3af' : '#111827',\n opacity: item.disabled ? 0.5 : 1,\n }}\n onMouseEnter={(e) => {\n if (!item.disabled) {\n e.currentTarget.style.backgroundColor = '#f3f4f6';\n setCurrentIndex(index);\n if (hasSubmenu) {\n onSubmenuChange(item.id);\n }\n }\n }}\n onMouseLeave={(e) => {\n e.currentTarget.style.backgroundColor = 'transparent';\n }}\n >\n <span style={{ display: 'flex', alignItems: 'center', gap: '0.5rem' }}>\n {item.icon && <span>{item.icon}</span>}\n <span>{item.label}</span>\n </span>\n {hasSubmenu && <span aria-hidden=\"true\">▶</span>}\n </button>\n\n {/* Render submenu recursively */}\n {hasSubmenu && isSubmenuOpen && item.submenu && (\n <MenuLevel\n items={item.submenu}\n onClose={onClose}\n openSubmenuId={null}\n onSubmenuChange={() => {}}\n depth={depth + 1}\n />\n )}\n </div>\n );\n })}\n </div>\n );\n};\n","/**\n * @a13y/react - VirtualizedList Pattern\n * Accessible virtualized list with screen reader support\n */\n\nimport { announce } from '@a13y/core/runtime/announce';\nimport type { CSSProperties, ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\n\n/**\n * Props for VirtualizedList\n */\nexport interface VirtualizedListProps<T> {\n /**\n * All items in the list\n */\n items: T[];\n\n /**\n * Height of each item (fixed)\n */\n itemHeight: number;\n\n /**\n * Height of the visible container\n */\n height: number;\n\n /**\n * Render function for each item\n */\n renderItem: (item: T, index: number) => ReactNode;\n\n /**\n * Unique key extractor\n */\n getItemKey: (item: T, index: number) => string;\n\n /**\n * Accessible label for the list\n */\n 'aria-label': string;\n\n /**\n * Number of items to render outside viewport (overscan)\n * @default 3\n */\n overscan?: number;\n\n /**\n * Custom className\n */\n className?: string;\n\n /**\n * Empty state\n */\n emptyState?: ReactNode;\n}\n\n/**\n * Virtualized List Component\n *\n * Accessible virtualized list that works with screen readers:\n * - Only renders visible items + overscan\n * - Maintains total height for scrollbar\n * - Announces visible range to screen readers\n * - Keyboard navigation works correctly\n * - Focus management when scrolling\n *\n * Pattern Explanation:\n * - Calculates visible range based on scroll position\n * - Renders only visible items + overscan buffer\n * - Uses absolute positioning to maintain item positions\n * - Announces visible range changes to screen readers\n * - Total height maintained for accurate scrollbar\n * - Works with keyboard navigation (Page Up/Down, Home/End)\n *\n * Screen Reader Strategy:\n * - aria-setsize and aria-posinset tell screen readers total count\n * - Visible range announced when user scrolls\n * - Focus is maintained when items are virtualized\n *\n * @example\n * ```tsx\n * const items = Array.from({ length: 10000 }, (_, i) => ({\n * id: i,\n * name: `Item ${i}`,\n * }));\n *\n * return (\n * <VirtualizedList\n * items={items}\n * itemHeight={48}\n * height={600}\n * renderItem={(item) => (\n * <div style={{ padding: '0.75rem' }}>\n * {item.name}\n * </div>\n * )}\n * getItemKey={(item) => item.id.toString()}\n * aria-label=\"Large list of items\"\n * />\n * );\n * ```\n */\nexport const VirtualizedList = <T,>(props: VirtualizedListProps<T>) => {\n const {\n items,\n itemHeight,\n height,\n renderItem,\n getItemKey,\n 'aria-label': ariaLabel,\n overscan = 3,\n className = '',\n emptyState,\n } = props;\n\n const [scrollTop, setScrollTop] = useState(0);\n const [visibleRange, setVisibleRange] = useState({ start: 0, end: 0 });\n const containerRef = useRef<HTMLDivElement>(null);\n const previousRangeRef = useRef({ start: 0, end: 0 });\n\n const totalHeight = items.length * itemHeight;\n const startIndex = Math.max(0, Math.floor(scrollTop / itemHeight) - overscan);\n const endIndex = Math.min(\n items.length - 1,\n Math.ceil((scrollTop + height) / itemHeight) + overscan\n );\n\n const visibleItems = items.slice(startIndex, endIndex + 1);\n\n // Announce visible range to screen readers (throttled)\n useEffect(() => {\n const newRange = { start: startIndex, end: endIndex };\n\n // Only announce if range changed significantly (more than 10 items)\n const rangeChanged =\n Math.abs(newRange.start - previousRangeRef.current.start) > 10 ||\n Math.abs(newRange.end - previousRangeRef.current.end) > 10;\n\n if (rangeChanged && items.length > 0) {\n setVisibleRange(newRange);\n previousRangeRef.current = newRange;\n\n // Announce visible range\n const message = `Showing items ${newRange.start + 1} to ${newRange.end + 1} of ${items.length}`;\n announce(message, { politeness: 'polite', delay: 300 });\n }\n }, [startIndex, endIndex, items.length]);\n\n const handleScroll = (e: React.UIEvent<HTMLDivElement>) => {\n setScrollTop(e.currentTarget.scrollTop);\n };\n\n // Keyboard navigation helpers\n const handleKeyDown = (e: React.KeyboardEvent<HTMLDivElement>) => {\n if (!containerRef.current) return;\n\n const scrollAmount = itemHeight * 5; // Scroll 5 items at a time\n\n switch (e.key) {\n case 'PageDown':\n e.preventDefault();\n containerRef.current.scrollBy({ top: scrollAmount, behavior: 'smooth' });\n break;\n\n case 'PageUp':\n e.preventDefault();\n containerRef.current.scrollBy({ top: -scrollAmount, behavior: 'smooth' });\n break;\n\n case 'Home':\n e.preventDefault();\n containerRef.current.scrollTo({ top: 0, behavior: 'smooth' });\n break;\n\n case 'End':\n e.preventDefault();\n containerRef.current.scrollTo({ top: totalHeight, behavior: 'smooth' });\n break;\n }\n };\n\n // Empty state\n if (items.length === 0) {\n return (\n <div role=\"status\" aria-live=\"polite\">\n {emptyState || <p>No items to display</p>}\n </div>\n );\n }\n\n return (\n <div\n ref={containerRef}\n role=\"list\"\n aria-label={ariaLabel}\n tabIndex={0}\n className={className}\n onScroll={handleScroll}\n onKeyDown={handleKeyDown}\n style={{\n height: `${height}px`,\n overflow: 'auto',\n position: 'relative',\n outline: 'none',\n }}\n >\n {/* Total height spacer */}\n <div style={{ height: `${totalHeight}px`, position: 'relative' }}>\n {/* Visible items */}\n {visibleItems.map((item, virtualIndex) => {\n const actualIndex = startIndex + virtualIndex;\n const itemStyle: CSSProperties = {\n position: 'absolute',\n top: `${actualIndex * itemHeight}px`,\n left: 0,\n right: 0,\n height: `${itemHeight}px`,\n };\n\n return (\n <div\n key={getItemKey(item, actualIndex)}\n role=\"listitem\"\n aria-setsize={items.length}\n aria-posinset={actualIndex + 1}\n style={itemStyle}\n >\n {renderItem(item, actualIndex)}\n </div>\n );\n })}\n </div>\n\n {/* Screen reader helper */}\n <div\n aria-live=\"polite\"\n aria-atomic=\"true\"\n style={{\n position: 'absolute',\n left: '-10000px',\n width: '1px',\n height: '1px',\n overflow: 'hidden',\n }}\n >\n {`Showing items ${visibleRange.start + 1} to ${visibleRange.end + 1} of ${items.length}`}\n </div>\n </div>\n );\n};\n","/**\n * @a13y/react - Wizard Pattern\n * Multi-step form with validation and keyboard navigation\n */\n\nimport { announce } from '@a13y/core/runtime/announce';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useState } from 'react';\n\n/**\n * Wizard step definition\n */\nexport interface WizardStep {\n /**\n * Unique step ID\n */\n id: string;\n\n /**\n * Step label (shown in progress indicator)\n */\n label: string;\n\n /**\n * Step content\n */\n content: ReactNode;\n\n /**\n * Optional validation before proceeding\n * Return true if valid, or error message if invalid\n */\n validate?: () => true | string;\n\n /**\n * Whether this step can be skipped\n */\n optional?: boolean;\n}\n\n/**\n * Wizard context value\n */\ninterface WizardContextValue {\n /**\n * Current step index\n */\n currentStep: number;\n\n /**\n * Total number of steps\n */\n totalSteps: number;\n\n /**\n * Current step data\n */\n step: WizardStep;\n\n /**\n * Navigate to next step\n */\n next: () => void;\n\n /**\n * Navigate to previous step\n */\n previous: () => void;\n\n /**\n * Navigate to specific step (if valid)\n */\n goToStep: (index: number) => void;\n\n /**\n * Check if can go to next step\n */\n canGoNext: boolean;\n\n /**\n * Check if can go to previous step\n */\n canGoPrevious: boolean;\n\n /**\n * Check if on last step\n */\n isLastStep: boolean;\n\n /**\n * Validation error (if any)\n */\n validationError: string | null;\n}\n\nconst WizardContext = createContext<WizardContextValue | null>(null);\n\n/**\n * Hook to access wizard context\n */\nexport const useWizard = (): WizardContextValue => {\n const context = useContext(WizardContext);\n if (!context) {\n throw new Error('useWizard must be used within Wizard component');\n }\n return context;\n};\n\n/**\n * Props for Wizard\n */\nexport interface WizardProps {\n /**\n * Wizard steps (must have at least one)\n */\n steps: [WizardStep, ...WizardStep[]];\n\n /**\n * Called when wizard is completed\n */\n onComplete: () => void;\n\n /**\n * Called when wizard is cancelled\n */\n onCancel?: () => void;\n\n /**\n * Initial step index\n */\n initialStep?: number;\n\n /**\n * Custom className\n */\n className?: string;\n}\n\n/**\n * Wizard Component\n *\n * Multi-step form with:\n * - Progress indicator\n * - Keyboard navigation (arrows, Home, End)\n * - Step validation\n * - Screen reader announcements\n * - Focus management between steps\n *\n * Pattern Explanation:\n * - Each step can have validation before proceeding\n * - Arrow keys navigate between steps (if valid)\n * - Progress indicator shows current position\n * - Screen readers announce step changes\n * - Optional steps can be skipped\n * - Validation errors are announced to screen readers\n *\n * @example\n * ```tsx\n * <Wizard\n * steps={[\n * {\n * id: 'account',\n * label: 'Account Info',\n * content: <AccountForm />,\n * validate: () => isValidEmail(email) || 'Invalid email',\n * },\n * {\n * id: 'preferences',\n * label: 'Preferences',\n * content: <PreferencesForm />,\n * optional: true,\n * },\n * {\n * id: 'review',\n * label: 'Review',\n * content: <ReviewScreen />,\n * },\n * ]}\n * onComplete={() => console.log('Wizard completed!')}\n * />\n * ```\n */\nexport const Wizard = (props: WizardProps) => {\n const { steps, onComplete, onCancel, initialStep = 0, className = '' } = props;\n\n const [currentStep, setCurrentStep] = useState(initialStep);\n const [validationError, setValidationError] = useState<string | null>(null);\n const [visitedSteps, setVisitedSteps] = useState<Set<number>>(new Set([initialStep]));\n\n const totalSteps = steps.length;\n const step = steps[currentStep] ?? steps[0];\n\n // Ensure currentStep is always within bounds\n if (currentStep < 0 || currentStep >= totalSteps) {\n setCurrentStep(0);\n }\n const isLastStep = currentStep === totalSteps - 1;\n const canGoPrevious = currentStep > 0;\n const canGoNext = currentStep < totalSteps - 1;\n\n const validateCurrentStep = (): boolean => {\n if (!step.validate) return true;\n\n const result = step.validate();\n if (result === true) {\n setValidationError(null);\n return true;\n }\n\n setValidationError(result);\n announce(`Validation error: ${result}`, { politeness: 'assertive' });\n return false;\n };\n\n const goToStep = (index: number) => {\n if (index < 0 || index >= totalSteps) return;\n\n // Can only go forward if current step is valid\n if (index > currentStep && !validateCurrentStep()) {\n return;\n }\n\n setCurrentStep(index);\n setVisitedSteps((prev) => new Set([...prev, index]));\n setValidationError(null);\n\n // Announce to screen readers\n const newStep = steps[index];\n if (newStep) {\n announce(\n `Step ${index + 1} of ${totalSteps}: ${newStep.label}${newStep.optional ? ' (optional)' : ''}`,\n { politeness: 'polite' }\n );\n }\n };\n\n const next = () => {\n if (!canGoNext) return;\n\n if (validateCurrentStep()) {\n goToStep(currentStep + 1);\n }\n };\n\n const previous = () => {\n if (!canGoPrevious) return;\n goToStep(currentStep - 1);\n };\n\n const handleComplete = () => {\n if (validateCurrentStep()) {\n announce('Wizard completed', { politeness: 'polite' });\n onComplete();\n }\n };\n\n const contextValue: WizardContextValue = {\n currentStep,\n totalSteps,\n step,\n next,\n previous,\n goToStep,\n canGoNext,\n canGoPrevious,\n isLastStep,\n validationError,\n };\n\n return (\n <WizardContext.Provider value={contextValue}>\n <div className={className} style={{ maxWidth: '48rem', margin: '0 auto' }}>\n {/* Progress Indicator */}\n <nav aria-label=\"Wizard progress\">\n <ol\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n marginBottom: '2rem',\n padding: 0,\n listStyle: 'none',\n }}\n >\n {steps.map((s, index) => {\n const isActive = index === currentStep;\n const isCompleted = visitedSteps.has(index) && index < currentStep;\n const isClickable = visitedSteps.has(index) || index === currentStep;\n\n return (\n <li\n key={s.id}\n style={{\n flex: 1,\n display: 'flex',\n flexDirection: 'column',\n alignItems: 'center',\n }}\n >\n <button\n type=\"button\"\n onClick={() => isClickable && goToStep(index)}\n aria-current={isActive ? 'step' : undefined}\n disabled={!isClickable}\n style={{\n width: '2.5rem',\n height: '2.5rem',\n borderRadius: '50%',\n border: `2px solid ${isActive || isCompleted ? '#2563eb' : '#d1d5db'}`,\n backgroundColor: isCompleted ? '#2563eb' : isActive ? 'white' : '#f3f4f6',\n color: isCompleted ? 'white' : isActive ? '#2563eb' : '#9ca3af',\n fontWeight: 600,\n cursor: isClickable ? 'pointer' : 'not-allowed',\n marginBottom: '0.5rem',\n }}\n >\n {isCompleted ? '✓' : index + 1}\n </button>\n <span\n style={{\n fontSize: '0.875rem',\n color: isActive ? '#2563eb' : '#6b7280',\n fontWeight: isActive ? 600 : 400,\n textAlign: 'center',\n }}\n >\n {s.label}\n {s.optional && (\n <span style={{ display: 'block', fontSize: '0.75rem', color: '#9ca3af' }}>\n (Optional)\n </span>\n )}\n </span>\n </li>\n );\n })}\n </ol>\n </nav>\n\n {/* Validation Error */}\n {validationError && (\n <div\n role=\"alert\"\n aria-live=\"assertive\"\n style={{\n padding: '0.75rem',\n marginBottom: '1rem',\n backgroundColor: '#fef2f2',\n border: '1px solid #fecaca',\n borderRadius: '0.375rem',\n color: '#991b1b',\n }}\n >\n {validationError}\n </div>\n )}\n\n {/* Step Content */}\n <div\n role=\"region\"\n aria-labelledby={`step-${step.id}-label`}\n style={{ marginBottom: '2rem' }}\n >\n <h2\n id={`step-${step.id}-label`}\n style={{ fontSize: '1.5rem', fontWeight: 600, marginBottom: '1rem' }}\n >\n {step.label}\n </h2>\n {step.content}\n </div>\n\n {/* Navigation Buttons */}\n <div\n style={{\n display: 'flex',\n justifyContent: 'space-between',\n gap: '1rem',\n }}\n >\n <div style={{ display: 'flex', gap: '0.5rem' }}>\n {onCancel && (\n <button\n type=\"button\"\n onClick={onCancel}\n style={{\n padding: '0.5rem 1rem',\n border: '1px solid #d1d5db',\n borderRadius: '0.375rem',\n backgroundColor: 'white',\n cursor: 'pointer',\n }}\n >\n Cancel\n </button>\n )}\n\n {canGoPrevious && (\n <button\n type=\"button\"\n onClick={previous}\n style={{\n padding: '0.5rem 1rem',\n border: '1px solid #d1d5db',\n borderRadius: '0.375rem',\n backgroundColor: 'white',\n cursor: 'pointer',\n }}\n >\n ← Previous\n </button>\n )}\n </div>\n\n <div>\n {isLastStep ? (\n <button\n type=\"button\"\n onClick={handleComplete}\n style={{\n padding: '0.5rem 1.5rem',\n border: 'none',\n borderRadius: '0.375rem',\n backgroundColor: '#2563eb',\n color: 'white',\n fontWeight: 600,\n cursor: 'pointer',\n }}\n >\n Complete\n </button>\n ) : (\n <button\n type=\"button\"\n onClick={next}\n disabled={!canGoNext}\n style={{\n padding: '0.5rem 1.5rem',\n border: 'none',\n borderRadius: '0.375rem',\n backgroundColor: '#2563eb',\n color: 'white',\n fontWeight: 600,\n cursor: canGoNext ? 'pointer' : 'not-allowed',\n opacity: canGoNext ? 1 : 0.5,\n }}\n >\n Next →\n </button>\n )}\n </div>\n </div>\n </div>\n </WizardContext.Provider>\n );\n};\n","/**\n * @a13y/react\n * Type-safe React hooks and components for accessibility\n * @packageDocumentation\n */\n\nexport const VERSION = '0.0.0' as const;\n\n// Re-export all components\nexport * from './components';\n// Re-export all hooks\nexport * from './hooks';\n// Re-export all patterns\nexport * from './patterns';\n"]}