@a11y-core/react 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/README.md +252 -0
  2. package/dist/chunk-3WBTHTVK.js +41 -0
  3. package/dist/chunk-3WBTHTVK.js.map +1 -0
  4. package/dist/chunk-47MFBHV6.js +85 -0
  5. package/dist/chunk-47MFBHV6.js.map +1 -0
  6. package/dist/chunk-7A3IDIUB.cjs +89 -0
  7. package/dist/chunk-7A3IDIUB.cjs.map +1 -0
  8. package/dist/chunk-AZFZWGI6.cjs +383 -0
  9. package/dist/chunk-AZFZWGI6.cjs.map +1 -0
  10. package/dist/chunk-CTW5D77X.cjs +220 -0
  11. package/dist/chunk-CTW5D77X.cjs.map +1 -0
  12. package/dist/chunk-EY73HQNR.js +380 -0
  13. package/dist/chunk-EY73HQNR.js.map +1 -0
  14. package/dist/chunk-FJABCNFE.js +215 -0
  15. package/dist/chunk-FJABCNFE.js.map +1 -0
  16. package/dist/chunk-FTZ5KCOO.js +326 -0
  17. package/dist/chunk-FTZ5KCOO.js.map +1 -0
  18. package/dist/chunk-GS3H4T2O.cjs +106 -0
  19. package/dist/chunk-GS3H4T2O.cjs.map +1 -0
  20. package/dist/chunk-N6L4GLFC.cjs +45 -0
  21. package/dist/chunk-N6L4GLFC.cjs.map +1 -0
  22. package/dist/chunk-N774QCHE.js +234 -0
  23. package/dist/chunk-N774QCHE.js.map +1 -0
  24. package/dist/chunk-OSHIYZCZ.cjs +386 -0
  25. package/dist/chunk-OSHIYZCZ.cjs.map +1 -0
  26. package/dist/chunk-SRJSGDIA.js +373 -0
  27. package/dist/chunk-SRJSGDIA.js.map +1 -0
  28. package/dist/chunk-THB5U7YC.cjs +338 -0
  29. package/dist/chunk-THB5U7YC.cjs.map +1 -0
  30. package/dist/chunk-U6DUSMEA.js +99 -0
  31. package/dist/chunk-U6DUSMEA.js.map +1 -0
  32. package/dist/chunk-WDCYEMBO.cjs +245 -0
  33. package/dist/chunk-WDCYEMBO.cjs.map +1 -0
  34. package/dist/components/combobox/index.cjs +31 -0
  35. package/dist/components/combobox/index.cjs.map +1 -0
  36. package/dist/components/combobox/index.d.cts +55 -0
  37. package/dist/components/combobox/index.d.ts +55 -0
  38. package/dist/components/combobox/index.js +6 -0
  39. package/dist/components/combobox/index.js.map +1 -0
  40. package/dist/components/dialog/index.cjs +46 -0
  41. package/dist/components/dialog/index.cjs.map +1 -0
  42. package/dist/components/dialog/index.d.cts +84 -0
  43. package/dist/components/dialog/index.d.ts +84 -0
  44. package/dist/components/dialog/index.js +5 -0
  45. package/dist/components/dialog/index.js.map +1 -0
  46. package/dist/components/menu/index.cjs +46 -0
  47. package/dist/components/menu/index.cjs.map +1 -0
  48. package/dist/components/menu/index.d.cts +80 -0
  49. package/dist/components/menu/index.d.ts +80 -0
  50. package/dist/components/menu/index.js +5 -0
  51. package/dist/components/menu/index.js.map +1 -0
  52. package/dist/components/tabs/index.cjs +35 -0
  53. package/dist/components/tabs/index.cjs.map +1 -0
  54. package/dist/components/tabs/index.d.cts +65 -0
  55. package/dist/components/tabs/index.d.ts +65 -0
  56. package/dist/components/tabs/index.js +6 -0
  57. package/dist/components/tabs/index.js.map +1 -0
  58. package/dist/components/toast/index.cjs +24 -0
  59. package/dist/components/toast/index.cjs.map +1 -0
  60. package/dist/components/toast/index.d.cts +49 -0
  61. package/dist/components/toast/index.d.ts +49 -0
  62. package/dist/components/toast/index.js +3 -0
  63. package/dist/components/toast/index.js.map +1 -0
  64. package/dist/index.cjs +698 -0
  65. package/dist/index.cjs.map +1 -0
  66. package/dist/index.d.cts +402 -0
  67. package/dist/index.d.ts +402 -0
  68. package/dist/index.js +426 -0
  69. package/dist/index.js.map +1 -0
  70. package/package.json +89 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/hooks/use-focus-visible.ts","../src/hooks/use-roving-tabindex.ts","../src/components/switch/switch.tsx"],"names":["useState","useEffect","initFocusVisible","useCallback","checkFocusVisible","focusWithVisibleRing","useRef","createComponentWarnings","forwardRef","Switch","useId","announce","useAnnouncer","useKeyboard","jsxs","jsx"],"mappings":"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","file":"index.cjs","sourcesContent":["import { useEffect, useState, useCallback } from 'react';\nimport {\n initFocusVisible,\n isFocusVisible as checkFocusVisible,\n focusWithVisibleRing,\n} from '@a11y-core/core';\n\n/**\n * Hook to detect if focus should be visible (keyboard navigation)\n *\n * @example\n * ```tsx\n * function Button({ children }) {\n * const { isFocusVisible, focusProps } = useFocusVisible();\n *\n * return (\n * <button\n * {...focusProps}\n * className={isFocusVisible ? 'focus-ring' : ''}\n * >\n * {children}\n * </button>\n * );\n * }\n * ```\n */\nexport function useFocusVisible() {\n const [isFocusVisible, setIsFocusVisible] = useState(false);\n\n // Initialize focus-visible tracking\n useEffect(() => {\n const cleanup = initFocusVisible();\n return cleanup;\n }, []);\n\n const handleFocus = useCallback(() => {\n setIsFocusVisible(checkFocusVisible());\n }, []);\n\n const handleBlur = useCallback(() => {\n setIsFocusVisible(false);\n }, []);\n\n return {\n isFocusVisible,\n focusProps: {\n onFocus: handleFocus,\n onBlur: handleBlur,\n },\n };\n}\n\n/**\n * Hook for managing focus on a specific element\n *\n * @example\n * ```tsx\n * function Combobox() {\n * const inputRef = useFocusManager<HTMLInputElement>({\n * autoFocus: true,\n * });\n *\n * return <input ref={inputRef} />;\n * }\n * ```\n */\nexport function useFocusManager<T extends HTMLElement = HTMLElement>(options: {\n autoFocus?: boolean;\n restoreFocus?: boolean;\n focusVisible?: boolean;\n} = {}) {\n const { autoFocus = false, restoreFocus = false, focusVisible = true } = options;\n\n const elementRef = useCallback(\n (node: T | null) => {\n if (node && autoFocus) {\n // Delay focus to ensure DOM is ready\n requestAnimationFrame(() => {\n if (focusVisible) {\n focusWithVisibleRing(node);\n } else {\n node.focus();\n }\n });\n }\n },\n [autoFocus, focusVisible]\n );\n\n // Store ref for restore focus\n useEffect(() => {\n if (!restoreFocus) return;\n\n const previousElement = document.activeElement as HTMLElement;\n\n return () => {\n if (previousElement && previousElement.focus) {\n previousElement.focus();\n }\n };\n }, [restoreFocus]);\n\n return elementRef;\n}\n\n/**\n * Focus an element programmatically with proper focus-visible handling\n */\nexport function useFocusControl<T extends HTMLElement = HTMLElement>() {\n const elementRef = useCallback((_node: T | null) => {\n // Just store the ref\n }, []);\n\n const focus = useCallback((options?: { visible?: boolean }) => {\n const element = elementRef as unknown as { current: T | null };\n if (element.current) {\n if (options?.visible) {\n focusWithVisibleRing(element.current);\n } else {\n element.current.focus();\n }\n }\n }, []);\n\n return { ref: elementRef, focus };\n}\n\n/**\n * Track if an element has focus\n */\nexport function useFocusWithin<T extends HTMLElement = HTMLElement>() {\n const [hasFocus, setHasFocus] = useState(false);\n const containerRef = useCallback<React.RefCallback<T>>((_node) => {\n // Element ref callback\n }, []);\n\n const handleFocusIn = useCallback(() => {\n setHasFocus(true);\n }, []);\n\n const handleFocusOut = useCallback((event: React.FocusEvent) => {\n const container = event.currentTarget;\n const relatedTarget = event.relatedTarget as Node | null;\n\n // Check if focus moved outside the container\n if (!relatedTarget || !container.contains(relatedTarget)) {\n setHasFocus(false);\n }\n }, []);\n\n return {\n ref: containerRef,\n hasFocus,\n focusWithinProps: {\n onFocus: handleFocusIn,\n onBlur: handleFocusOut,\n },\n };\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseRovingTabindexOptions {\n /** Initial active index */\n initialIndex?: number;\n /** Whether navigation wraps around */\n wrap?: boolean;\n /** Orientation for arrow keys */\n orientation?: 'horizontal' | 'vertical' | 'both';\n /** Called when active index changes */\n onChange?: (index: number) => void;\n}\n\nexport interface RovingTabindexItem {\n /** Props to spread on the item element */\n props: {\n tabIndex: number;\n onKeyDown: (event: React.KeyboardEvent) => void;\n onFocus: () => void;\n };\n /** Whether this item is the active/focusable one */\n isActive: boolean;\n}\n\n/**\n * Hook for roving tabindex pattern\n *\n * @example\n * ```tsx\n * function Toolbar() {\n * const { getItemProps, activeIndex } = useRovingTabindex({\n * itemCount: 3,\n * orientation: 'horizontal',\n * });\n *\n * return (\n * <div role=\"toolbar\">\n * <button {...getItemProps(0)}>Cut</button>\n * <button {...getItemProps(1)}>Copy</button>\n * <button {...getItemProps(2)}>Paste</button>\n * </div>\n * );\n * }\n * ```\n */\nexport function useRovingTabindex(options: UseRovingTabindexOptions & { itemCount: number }) {\n const {\n itemCount,\n initialIndex = 0,\n wrap = true,\n orientation = 'both',\n onChange,\n } = options;\n\n const [activeIndex, setActiveIndex] = useState(initialIndex);\n const itemRefs = useRef<(HTMLElement | null)[]>([]);\n\n // Reset if item count changes\n useEffect(() => {\n if (activeIndex >= itemCount) {\n setActiveIndex(Math.max(0, itemCount - 1));\n }\n }, [itemCount, activeIndex]);\n\n const moveTo = useCallback(\n (index: number) => {\n let newIndex = index;\n if (newIndex < 0) {\n newIndex = wrap ? itemCount - 1 : 0;\n } else if (newIndex >= itemCount) {\n newIndex = wrap ? 0 : itemCount - 1;\n }\n\n setActiveIndex(newIndex);\n onChange?.(newIndex);\n\n // Focus the element\n const element = itemRefs.current[newIndex];\n element?.focus();\n },\n [itemCount, wrap, onChange]\n );\n\n const handleKeyDown = useCallback(\n (event: React.KeyboardEvent, index: number) => {\n let handled = false;\n\n switch (event.key) {\n case 'ArrowRight':\n if (orientation === 'horizontal' || orientation === 'both') {\n moveTo(index + 1);\n handled = true;\n }\n break;\n case 'ArrowLeft':\n if (orientation === 'horizontal' || orientation === 'both') {\n moveTo(index - 1);\n handled = true;\n }\n break;\n case 'ArrowDown':\n if (orientation === 'vertical' || orientation === 'both') {\n moveTo(index + 1);\n handled = true;\n }\n break;\n case 'ArrowUp':\n if (orientation === 'vertical' || orientation === 'both') {\n moveTo(index - 1);\n handled = true;\n }\n break;\n case 'Home':\n moveTo(0);\n handled = true;\n break;\n case 'End':\n moveTo(itemCount - 1);\n handled = true;\n break;\n }\n\n if (handled) {\n event.preventDefault();\n event.stopPropagation();\n }\n },\n [orientation, moveTo, itemCount]\n );\n\n const getItemProps = useCallback(\n (index: number) => ({\n ref: (el: HTMLElement | null) => {\n itemRefs.current[index] = el;\n },\n tabIndex: index === activeIndex ? 0 : -1,\n onKeyDown: (event: React.KeyboardEvent) => handleKeyDown(event, index),\n onFocus: () => {\n if (index !== activeIndex) {\n setActiveIndex(index);\n onChange?.(index);\n }\n },\n }),\n [activeIndex, handleKeyDown, onChange]\n );\n\n return {\n activeIndex,\n setActiveIndex: moveTo,\n getItemProps,\n first: () => moveTo(0),\n last: () => moveTo(itemCount - 1),\n next: () => moveTo(activeIndex + 1),\n previous: () => moveTo(activeIndex - 1),\n };\n}\n\n/**\n * Simplified roving tabindex for items with known IDs\n */\nexport function useRovingTabindexMap<T extends string>(\n ids: T[],\n options: Omit<UseRovingTabindexOptions, 'itemCount'> = {}\n) {\n const roving = useRovingTabindex({\n ...options,\n itemCount: ids.length,\n });\n\n const getItemProps = useCallback(\n (id: T) => {\n const index = ids.indexOf(id);\n if (index === -1) {\n throw new Error(`Unknown item ID: ${id}`);\n }\n return roving.getItemProps(index);\n },\n [ids, roving]\n );\n\n const activeId = ids[roving.activeIndex];\n\n return {\n ...roving,\n activeId,\n getItemProps,\n setActiveId: (id: T) => {\n const index = ids.indexOf(id);\n if (index !== -1) {\n roving.setActiveIndex(index);\n }\n },\n };\n}\n","import React, { forwardRef, useCallback, useEffect, useState } from 'react';\nimport { createComponentWarnings } from '@a11y-core/core';\nimport { useId } from '../../hooks/use-id';\nimport { useKeyboard } from '../../hooks/use-keyboard';\nimport { useAnnouncer } from '../../hooks/use-announcer';\n\nconst warnings = createComponentWarnings('Switch');\n\nexport interface SwitchProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'onChange' | 'role'\n> {\n /** Controlled checked state */\n checked?: boolean;\n /** Default checked state (uncontrolled) */\n defaultChecked?: boolean;\n /** Called when the switch state changes */\n onCheckedChange?: (checked: boolean) => void;\n /** Accessible label for the switch (renders visible label next to switch) */\n label?: string;\n /** Whether the switch is disabled */\n disabled?: boolean;\n /** Remove default styles to allow full customization via className */\n unstyled?: boolean;\n /** Custom class name */\n className?: string;\n /** Size variant */\n size?: 'sm' | 'md' | 'lg';\n}\n\n/**\n * Switch component - An accessible toggle switch (on/off control)\n *\n * Follows WAI-ARIA Switch pattern with proper keyboard support and screen reader announcements.\n *\n * @example\n * ```tsx\n * // Uncontrolled\n * <Switch defaultChecked={true} label=\"Enable notifications\" />\n *\n * // Controlled\n * <Switch\n * checked={enabled}\n * onCheckedChange={setEnabled}\n * aria-label=\"Dark mode\"\n * />\n *\n * // With visible label\n * <Switch checked={enabled} onCheckedChange={setEnabled} label=\"Dark mode\" />\n * ```\n */\nexport const Switch = forwardRef<HTMLButtonElement, SwitchProps>(\n function Switch(\n {\n checked: controlledChecked,\n defaultChecked = false,\n onCheckedChange,\n label,\n disabled = false,\n unstyled = false,\n className,\n size = 'md',\n 'aria-label': ariaLabel,\n 'aria-labelledby': ariaLabelledby,\n onClick,\n ...props\n },\n ref\n ) {\n const id = useId('switch');\n const labelId = `${id}-label`;\n const { announce } = useAnnouncer();\n\n // Support both controlled and uncontrolled modes\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n const isControlled = controlledChecked !== undefined;\n const checked = isControlled ? controlledChecked : uncontrolledChecked;\n\n // Warn if no accessible label is provided\n useEffect(() => {\n if (!label && !ariaLabel && !ariaLabelledby) {\n warnings.warning(\n 'Switch has no accessible label. Screen readers need this to identify the switch.',\n 'Add label=\"Description\", aria-label=\"...\", or aria-labelledby=\"...\"'\n );\n }\n }, [label, ariaLabel, ariaLabelledby]);\n\n const toggleSwitch = useCallback(() => {\n if (disabled) return;\n\n const newChecked = !checked;\n\n if (!isControlled) {\n setUncontrolledChecked(newChecked);\n }\n\n onCheckedChange?.(newChecked);\n\n // Announce state change to screen readers\n const labelText = label || ariaLabel || 'Switch';\n announce(`${labelText} ${newChecked ? 'on' : 'off'}`);\n }, [\n checked,\n disabled,\n isControlled,\n onCheckedChange,\n label,\n ariaLabel,\n announce,\n ]);\n\n const handleClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n toggleSwitch();\n }\n },\n [onClick, toggleSwitch]\n );\n\n // Keyboard handling: Space and Enter should toggle\n const keyboardProps = useKeyboard(\n {\n ' ': () => {\n // Space toggles the switch\n toggleSwitch();\n },\n Enter: () => {\n // Enter also toggles (some users prefer Enter over Space)\n toggleSwitch();\n },\n },\n { preventDefault: true }\n );\n\n const handleKeyDown = (event: React.KeyboardEvent<HTMLButtonElement>) => {\n props.onKeyDown?.(event);\n if (!event.defaultPrevented) {\n keyboardProps.onKeyDown(event);\n }\n };\n\n // Compute ARIA label\n const computedAriaLabel = ariaLabel;\n const computedAriaLabelledby =\n ariaLabelledby || (label ? labelId : undefined);\n\n // Structural styles (always applied)\n const wrapperStructuralStyles: React.CSSProperties = {\n display: 'inline-flex',\n alignItems: 'center',\n };\n\n // Size dimensions for structural styles\n const sizes = {\n sm: { width: 32, height: 18, thumb: 14, translate: 14 },\n md: { width: 44, height: 24, thumb: 20, translate: 20 },\n lg: { width: 56, height: 30, thumb: 26, translate: 26 },\n };\n\n const sizeConfig = sizes[size];\n\n const trackStructuralStyles: React.CSSProperties = {\n position: 'relative',\n display: 'inline-flex',\n alignItems: 'center',\n flexShrink: 0,\n width: sizeConfig.width,\n height: sizeConfig.height,\n border: 'none',\n padding: 2,\n cursor: disabled ? 'not-allowed' : 'pointer',\n };\n\n const trackVisualStyles: React.CSSProperties = unstyled\n ? {}\n : {\n backgroundColor: checked ? '#0066cc' : '#d1d5db',\n borderRadius: sizeConfig.height / 2,\n transition: 'background-color 0.2s ease',\n opacity: disabled ? 0.5 : 1,\n };\n\n const thumbStructuralStyles: React.CSSProperties = {\n position: 'absolute',\n left: 2,\n width: sizeConfig.thumb,\n height: sizeConfig.thumb,\n pointerEvents: 'none',\n transform: checked\n ? `translateX(${sizeConfig.translate}px)`\n : 'translateX(0)',\n };\n\n const thumbVisualStyles: React.CSSProperties = unstyled\n ? {}\n : {\n backgroundColor: 'white',\n borderRadius: '50%',\n boxShadow: '0 1px 3px rgba(0, 0, 0, 0.2)',\n transition: 'transform 0.2s ease',\n };\n\n const labelStyles: React.CSSProperties = unstyled\n ? {\n marginLeft: 8,\n userSelect: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n }\n : {\n marginLeft: 8,\n userSelect: 'none',\n cursor: disabled ? 'not-allowed' : 'pointer',\n opacity: disabled ? 0.5 : 1,\n };\n\n return (\n <div\n style={wrapperStructuralStyles}\n data-a11y-core-switch-wrapper\n data-size={size}\n >\n <button\n ref={ref}\n type=\"button\"\n role=\"switch\"\n aria-checked={checked}\n aria-label={computedAriaLabel}\n aria-labelledby={computedAriaLabelledby}\n disabled={disabled}\n onClick={handleClick}\n onKeyDown={handleKeyDown}\n className={className}\n style={{ ...trackStructuralStyles, ...trackVisualStyles }}\n tabIndex={disabled ? -1 : 0}\n data-a11y-core-switch\n data-checked={checked}\n data-disabled={disabled || undefined}\n data-size={size}\n {...props}\n // CSS-in-JS focus-visible styles\n onFocus={(e) => {\n // Add focus-visible indicator\n if (!unstyled) {\n e.currentTarget.style.outline = '2px solid #0066cc';\n e.currentTarget.style.outlineOffset = '2px';\n }\n props.onFocus?.(e);\n }}\n onBlur={(e) => {\n // Remove focus indicator on blur\n if (!unstyled) {\n e.currentTarget.style.outline = 'none';\n }\n props.onBlur?.(e);\n }}\n >\n <span\n style={{ ...thumbStructuralStyles, ...thumbVisualStyles }}\n data-a11y-core-switch-thumb\n aria-hidden=\"true\"\n />\n </button>\n {label && (\n <label\n id={labelId}\n onClick={disabled ? undefined : () => toggleSwitch()}\n style={labelStyles}\n data-a11y-core-switch-label\n >\n {label}\n </label>\n )}\n </div>\n );\n }\n);\n\nSwitch.displayName = 'Switch';\n"]}
@@ -0,0 +1,402 @@
1
+ import * as React$1 from 'react';
2
+ import React__default from 'react';
3
+ import { FocusTrapOptions, AnnouncerOptions, KeyboardHandlers } from '@a11y-core/core';
4
+ export { announce, announceAssertive, announceError, announcePolite, announceProgress, announceStatus, aria, buildAriaProps, checks, createComponentWarnings, hasAccessibleName, isAndroid, isBrowser, isIOS, isMac, mergeAriaIds, prefersDarkMode, prefersHighContrast, prefersReducedMotion, setWarningHandler, warn } from '@a11y-core/core';
5
+ export { DialogCompound as Dialog, DialogActions, DialogActionsProps, Dialog as DialogBase, DialogClose, DialogCloseProps, DialogContent, DialogContentProps, DialogContextValue, DialogDescription, DialogDescriptionProps, DialogProps, DialogTitle, DialogTitleProps, DialogTrigger, DialogTriggerProps, useDialogContext } from './components/dialog/index.cjs';
6
+ export { ActionMenuCompound as ActionMenu, ActionMenu as ActionMenuBase, ActionMenuContent, ActionMenuContentProps, ActionMenuContextValue, ActionMenuItem, ActionMenuItemProps, ActionMenuLabel, ActionMenuLabelProps, ActionMenuProps, ActionMenuSeparator, ActionMenuSeparatorProps, ActionMenuTrigger, ActionMenuTriggerProps, useActionMenuContext } from './components/menu/index.cjs';
7
+ export { Tab, TabList, TabListProps, TabPanel, TabPanelProps, TabProps, TabsCompound as Tabs, Tabs as TabsBase, TabsContextValue, TabsProps, useTabsContext } from './components/tabs/index.cjs';
8
+ export { Toast, ToastProvider, ToastProviderProps, ToastType, ToastViewport, ToastViewportProps, useToast, useToastHelpers } from './components/toast/index.cjs';
9
+ export { ComboboxCompound as Combobox, Combobox as ComboboxBase, ComboboxInput, ComboboxInputProps, ComboboxListbox, ComboboxListboxProps, ComboboxOption, ComboboxOptionProps, ComboboxOption as ComboboxOptionType, ComboboxProps } from './components/combobox/index.cjs';
10
+ import 'react/jsx-runtime';
11
+
12
+ /**
13
+ * Generate a unique ID for accessibility purposes
14
+ *
15
+ * Uses React's useId when available, with a fallback for SSR
16
+ */
17
+ declare function useId(prefix?: string): string;
18
+ /**
19
+ * Generate multiple related IDs for a component
20
+ */
21
+ declare function useIds<T extends readonly string[]>(parts: T, prefix?: string): Record<T[number], string>;
22
+ /**
23
+ * Create a scoped ID generator for complex components
24
+ */
25
+ declare function useIdScope(componentName: string): {
26
+ id: string;
27
+ generate: (suffix: string) => string;
28
+ generateMultiple: <T extends readonly string[]>(parts: T) => Record<T[number], string>;
29
+ };
30
+
31
+ interface UseFocusTrapOptions extends FocusTrapOptions {
32
+ /** Whether the focus trap is active */
33
+ active?: boolean;
34
+ }
35
+ /**
36
+ * Hook to create a focus trap for modals, dialogs, etc.
37
+ *
38
+ * @example
39
+ * ```tsx
40
+ * function Modal({ isOpen, onClose }) {
41
+ * const trapRef = useFocusTrap({
42
+ * active: isOpen,
43
+ * onDeactivate: onClose,
44
+ * });
45
+ *
46
+ * return (
47
+ * <div ref={trapRef} role="dialog">
48
+ * <button>Close</button>
49
+ * </div>
50
+ * );
51
+ * }
52
+ * ```
53
+ */
54
+ declare function useFocusTrap<T extends HTMLElement = HTMLDivElement>(options?: UseFocusTrapOptions): React.RefObject<T>;
55
+ /**
56
+ * Imperative focus trap controls
57
+ */
58
+ declare function useFocusTrapControls<T extends HTMLElement = HTMLDivElement>(options?: Omit<FocusTrapOptions, 'onDeactivate'>): {
59
+ ref: React$1.MutableRefObject<T | null>;
60
+ activate: () => void;
61
+ deactivate: () => void;
62
+ pause: () => void;
63
+ unpause: () => void;
64
+ isActive: () => boolean;
65
+ isPaused: () => boolean;
66
+ };
67
+
68
+ /**
69
+ * Hook for screen reader announcements
70
+ *
71
+ * @example
72
+ * ```tsx
73
+ * function SearchResults({ results }) {
74
+ * const { announce } = useAnnouncer();
75
+ *
76
+ * useEffect(() => {
77
+ * announce(`Found ${results.length} results`);
78
+ * }, [results.length, announce]);
79
+ *
80
+ * return <ul>...</ul>;
81
+ * }
82
+ * ```
83
+ */
84
+ declare function useAnnouncer(): {
85
+ announce: (message: string, options?: AnnouncerOptions) => void;
86
+ polite: (message: string, options?: Omit<AnnouncerOptions, "politeness">) => void;
87
+ assertive: (message: string, options?: Omit<AnnouncerOptions, "politeness">) => void;
88
+ queue: (message: string, options?: AnnouncerOptions & {
89
+ debounce?: number;
90
+ }) => void;
91
+ clear: () => void;
92
+ };
93
+ /**
94
+ * Announce a message when a value changes
95
+ *
96
+ * @example
97
+ * ```tsx
98
+ * function Counter({ count }) {
99
+ * useAnnounceOnChange(count, (value) => `Count is now ${value}`);
100
+ * return <span>{count}</span>;
101
+ * }
102
+ * ```
103
+ */
104
+ declare function useAnnounceOnChange<T>(value: T, getMessage: (value: T) => string, options?: AnnouncerOptions & {
105
+ skipInitial?: boolean;
106
+ }): void;
107
+ /**
108
+ * Announce loading states
109
+ *
110
+ * @example
111
+ * ```tsx
112
+ * function DataList({ isLoading }) {
113
+ * useAnnounceLoading(isLoading, {
114
+ * loadingMessage: 'Loading data...',
115
+ * loadedMessage: 'Data loaded',
116
+ * });
117
+ *
118
+ * return <div>...</div>;
119
+ * }
120
+ * ```
121
+ */
122
+ declare function useAnnounceLoading(isLoading: boolean, options?: {
123
+ loadingMessage?: string;
124
+ loadedMessage?: string;
125
+ errorMessage?: string;
126
+ error?: Error | null;
127
+ }): void;
128
+
129
+ /**
130
+ * Hook for keyboard event handling
131
+ *
132
+ * @example
133
+ * ```tsx
134
+ * function Menu({ items, onSelect }) {
135
+ * const keyboardProps = useKeyboard({
136
+ * ArrowDown: () => focusNext(),
137
+ * ArrowUp: () => focusPrevious(),
138
+ * Enter: () => onSelect(focused),
139
+ * Escape: () => close(),
140
+ * });
141
+ *
142
+ * return <ul {...keyboardProps}>...</ul>;
143
+ * }
144
+ * ```
145
+ */
146
+ declare function useKeyboard(handlers: KeyboardHandlers, options?: {
147
+ preventDefault?: boolean;
148
+ stopPropagation?: boolean;
149
+ disabled?: boolean;
150
+ }): {
151
+ onKeyDown: (event: React.KeyboardEvent) => void;
152
+ };
153
+ /**
154
+ * Pre-built keyboard patterns for common widgets
155
+ */
156
+ declare function useMenuKeyboard(options: {
157
+ onUp?: () => void;
158
+ onDown?: () => void;
159
+ onEnter?: () => void;
160
+ onEscape?: () => void;
161
+ onHome?: () => void;
162
+ onEnd?: () => void;
163
+ disabled?: boolean;
164
+ }): {
165
+ onKeyDown: (event: React.KeyboardEvent) => void;
166
+ };
167
+ declare function useTabsKeyboard(options: {
168
+ onLeft?: () => void;
169
+ onRight?: () => void;
170
+ onHome?: () => void;
171
+ onEnd?: () => void;
172
+ disabled?: boolean;
173
+ }): {
174
+ onKeyDown: (event: React.KeyboardEvent) => void;
175
+ };
176
+ declare function useGridKeyboard(options: {
177
+ onUp?: () => void;
178
+ onDown?: () => void;
179
+ onLeft?: () => void;
180
+ onRight?: () => void;
181
+ onHome?: () => void;
182
+ onEnd?: () => void;
183
+ onCtrlHome?: () => void;
184
+ onCtrlEnd?: () => void;
185
+ disabled?: boolean;
186
+ }): {
187
+ onKeyDown: (event: React.KeyboardEvent) => void;
188
+ };
189
+ /**
190
+ * Hook for type-ahead search in menus/listboxes
191
+ *
192
+ * @example
193
+ * ```tsx
194
+ * function Listbox({ items }) {
195
+ * const { onKeyDown, reset } = useTypeAhead(
196
+ * items.map(i => i.label),
197
+ * (match) => focusItem(match)
198
+ * );
199
+ *
200
+ * return <ul onKeyDown={onKeyDown}>...</ul>;
201
+ * }
202
+ * ```
203
+ */
204
+ declare function useTypeAhead(items: string[], onMatch: (match: string) => void, options?: {
205
+ timeout?: number;
206
+ disabled?: boolean;
207
+ }): {
208
+ onKeyDown: (event: React.KeyboardEvent) => void;
209
+ reset: () => void;
210
+ getSearch: () => string;
211
+ };
212
+ /**
213
+ * Hook for tracking which key is currently pressed
214
+ * Useful for showing keyboard shortcuts or modifier states
215
+ */
216
+ declare function useKeyPressed(targetKey: string): boolean;
217
+
218
+ /**
219
+ * Hook to detect if focus should be visible (keyboard navigation)
220
+ *
221
+ * @example
222
+ * ```tsx
223
+ * function Button({ children }) {
224
+ * const { isFocusVisible, focusProps } = useFocusVisible();
225
+ *
226
+ * return (
227
+ * <button
228
+ * {...focusProps}
229
+ * className={isFocusVisible ? 'focus-ring' : ''}
230
+ * >
231
+ * {children}
232
+ * </button>
233
+ * );
234
+ * }
235
+ * ```
236
+ */
237
+ declare function useFocusVisible(): {
238
+ isFocusVisible: boolean;
239
+ focusProps: {
240
+ onFocus: () => void;
241
+ onBlur: () => void;
242
+ };
243
+ };
244
+ /**
245
+ * Hook for managing focus on a specific element
246
+ *
247
+ * @example
248
+ * ```tsx
249
+ * function Combobox() {
250
+ * const inputRef = useFocusManager<HTMLInputElement>({
251
+ * autoFocus: true,
252
+ * });
253
+ *
254
+ * return <input ref={inputRef} />;
255
+ * }
256
+ * ```
257
+ */
258
+ declare function useFocusManager<T extends HTMLElement = HTMLElement>(options?: {
259
+ autoFocus?: boolean;
260
+ restoreFocus?: boolean;
261
+ focusVisible?: boolean;
262
+ }): (node: T | null) => void;
263
+ /**
264
+ * Focus an element programmatically with proper focus-visible handling
265
+ */
266
+ declare function useFocusControl<T extends HTMLElement = HTMLElement>(): {
267
+ ref: (_node: T | null) => void;
268
+ focus: (options?: {
269
+ visible?: boolean;
270
+ }) => void;
271
+ };
272
+ /**
273
+ * Track if an element has focus
274
+ */
275
+ declare function useFocusWithin<T extends HTMLElement = HTMLElement>(): {
276
+ ref: (instance: T | null) => void | React$1.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES[keyof React$1.DO_NOT_USE_OR_YOU_WILL_BE_FIRED_CALLBACK_REF_RETURN_VALUES];
277
+ hasFocus: boolean;
278
+ focusWithinProps: {
279
+ onFocus: () => void;
280
+ onBlur: (event: React.FocusEvent) => void;
281
+ };
282
+ };
283
+
284
+ interface UseRovingTabindexOptions {
285
+ /** Initial active index */
286
+ initialIndex?: number;
287
+ /** Whether navigation wraps around */
288
+ wrap?: boolean;
289
+ /** Orientation for arrow keys */
290
+ orientation?: 'horizontal' | 'vertical' | 'both';
291
+ /** Called when active index changes */
292
+ onChange?: (index: number) => void;
293
+ }
294
+ interface RovingTabindexItem {
295
+ /** Props to spread on the item element */
296
+ props: {
297
+ tabIndex: number;
298
+ onKeyDown: (event: React.KeyboardEvent) => void;
299
+ onFocus: () => void;
300
+ };
301
+ /** Whether this item is the active/focusable one */
302
+ isActive: boolean;
303
+ }
304
+ /**
305
+ * Hook for roving tabindex pattern
306
+ *
307
+ * @example
308
+ * ```tsx
309
+ * function Toolbar() {
310
+ * const { getItemProps, activeIndex } = useRovingTabindex({
311
+ * itemCount: 3,
312
+ * orientation: 'horizontal',
313
+ * });
314
+ *
315
+ * return (
316
+ * <div role="toolbar">
317
+ * <button {...getItemProps(0)}>Cut</button>
318
+ * <button {...getItemProps(1)}>Copy</button>
319
+ * <button {...getItemProps(2)}>Paste</button>
320
+ * </div>
321
+ * );
322
+ * }
323
+ * ```
324
+ */
325
+ declare function useRovingTabindex(options: UseRovingTabindexOptions & {
326
+ itemCount: number;
327
+ }): {
328
+ activeIndex: number;
329
+ setActiveIndex: (index: number) => void;
330
+ getItemProps: (index: number) => {
331
+ ref: (el: HTMLElement | null) => void;
332
+ tabIndex: number;
333
+ onKeyDown: (event: React.KeyboardEvent) => void;
334
+ onFocus: () => void;
335
+ };
336
+ first: () => void;
337
+ last: () => void;
338
+ next: () => void;
339
+ previous: () => void;
340
+ };
341
+ /**
342
+ * Simplified roving tabindex for items with known IDs
343
+ */
344
+ declare function useRovingTabindexMap<T extends string>(ids: T[], options?: Omit<UseRovingTabindexOptions, 'itemCount'>): {
345
+ activeId: T | undefined;
346
+ getItemProps: (id: T) => {
347
+ ref: (el: HTMLElement | null) => void;
348
+ tabIndex: number;
349
+ onKeyDown: (event: React.KeyboardEvent) => void;
350
+ onFocus: () => void;
351
+ };
352
+ setActiveId: (id: T) => void;
353
+ activeIndex: number;
354
+ setActiveIndex: (index: number) => void;
355
+ first: () => void;
356
+ last: () => void;
357
+ next: () => void;
358
+ previous: () => void;
359
+ };
360
+
361
+ interface SwitchProps extends Omit<React__default.ButtonHTMLAttributes<HTMLButtonElement>, 'onChange' | 'role'> {
362
+ /** Controlled checked state */
363
+ checked?: boolean;
364
+ /** Default checked state (uncontrolled) */
365
+ defaultChecked?: boolean;
366
+ /** Called when the switch state changes */
367
+ onCheckedChange?: (checked: boolean) => void;
368
+ /** Accessible label for the switch (renders visible label next to switch) */
369
+ label?: string;
370
+ /** Whether the switch is disabled */
371
+ disabled?: boolean;
372
+ /** Remove default styles to allow full customization via className */
373
+ unstyled?: boolean;
374
+ /** Custom class name */
375
+ className?: string;
376
+ /** Size variant */
377
+ size?: 'sm' | 'md' | 'lg';
378
+ }
379
+ /**
380
+ * Switch component - An accessible toggle switch (on/off control)
381
+ *
382
+ * Follows WAI-ARIA Switch pattern with proper keyboard support and screen reader announcements.
383
+ *
384
+ * @example
385
+ * ```tsx
386
+ * // Uncontrolled
387
+ * <Switch defaultChecked={true} label="Enable notifications" />
388
+ *
389
+ * // Controlled
390
+ * <Switch
391
+ * checked={enabled}
392
+ * onCheckedChange={setEnabled}
393
+ * aria-label="Dark mode"
394
+ * />
395
+ *
396
+ * // With visible label
397
+ * <Switch checked={enabled} onCheckedChange={setEnabled} label="Dark mode" />
398
+ * ```
399
+ */
400
+ declare const Switch: React__default.ForwardRefExoticComponent<SwitchProps & React__default.RefAttributes<HTMLButtonElement>>;
401
+
402
+ export { type RovingTabindexItem, Switch, type SwitchProps, type UseFocusTrapOptions, type UseRovingTabindexOptions, useAnnounceLoading, useAnnounceOnChange, useAnnouncer, useFocusControl, useFocusManager, useFocusTrap, useFocusTrapControls, useFocusVisible, useFocusWithin, useGridKeyboard, useId, useIdScope, useIds, useKeyPressed, useKeyboard, useMenuKeyboard, useRovingTabindex, useRovingTabindexMap, useTabsKeyboard, useTypeAhead };