@a13y/react 0.1.3 → 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/components/index.js +52 -37
- package/dist/components/index.js.map +1 -1
- package/dist/index.js +52 -37
- package/dist/index.js.map +1 -1
- package/package.json +4 -4
|
@@ -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"],"names":["useRef","useEffect","jsx","useCallback","useState","jsxs","Fragment","useId","React","pages","days","allNodes"],"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"]}
|
|
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"],"names":["useRef","useEffect","jsx","useCallback","useState","jsxs","Fragment","useId","React","pages","days","allNodes"],"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"]}
|