@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.
- package/README.md +252 -0
- package/dist/chunk-3WBTHTVK.js +41 -0
- package/dist/chunk-3WBTHTVK.js.map +1 -0
- package/dist/chunk-47MFBHV6.js +85 -0
- package/dist/chunk-47MFBHV6.js.map +1 -0
- package/dist/chunk-7A3IDIUB.cjs +89 -0
- package/dist/chunk-7A3IDIUB.cjs.map +1 -0
- package/dist/chunk-AZFZWGI6.cjs +383 -0
- package/dist/chunk-AZFZWGI6.cjs.map +1 -0
- package/dist/chunk-CTW5D77X.cjs +220 -0
- package/dist/chunk-CTW5D77X.cjs.map +1 -0
- package/dist/chunk-EY73HQNR.js +380 -0
- package/dist/chunk-EY73HQNR.js.map +1 -0
- package/dist/chunk-FJABCNFE.js +215 -0
- package/dist/chunk-FJABCNFE.js.map +1 -0
- package/dist/chunk-FTZ5KCOO.js +326 -0
- package/dist/chunk-FTZ5KCOO.js.map +1 -0
- package/dist/chunk-GS3H4T2O.cjs +106 -0
- package/dist/chunk-GS3H4T2O.cjs.map +1 -0
- package/dist/chunk-N6L4GLFC.cjs +45 -0
- package/dist/chunk-N6L4GLFC.cjs.map +1 -0
- package/dist/chunk-N774QCHE.js +234 -0
- package/dist/chunk-N774QCHE.js.map +1 -0
- package/dist/chunk-OSHIYZCZ.cjs +386 -0
- package/dist/chunk-OSHIYZCZ.cjs.map +1 -0
- package/dist/chunk-SRJSGDIA.js +373 -0
- package/dist/chunk-SRJSGDIA.js.map +1 -0
- package/dist/chunk-THB5U7YC.cjs +338 -0
- package/dist/chunk-THB5U7YC.cjs.map +1 -0
- package/dist/chunk-U6DUSMEA.js +99 -0
- package/dist/chunk-U6DUSMEA.js.map +1 -0
- package/dist/chunk-WDCYEMBO.cjs +245 -0
- package/dist/chunk-WDCYEMBO.cjs.map +1 -0
- package/dist/components/combobox/index.cjs +31 -0
- package/dist/components/combobox/index.cjs.map +1 -0
- package/dist/components/combobox/index.d.cts +55 -0
- package/dist/components/combobox/index.d.ts +55 -0
- package/dist/components/combobox/index.js +6 -0
- package/dist/components/combobox/index.js.map +1 -0
- package/dist/components/dialog/index.cjs +46 -0
- package/dist/components/dialog/index.cjs.map +1 -0
- package/dist/components/dialog/index.d.cts +84 -0
- package/dist/components/dialog/index.d.ts +84 -0
- package/dist/components/dialog/index.js +5 -0
- package/dist/components/dialog/index.js.map +1 -0
- package/dist/components/menu/index.cjs +46 -0
- package/dist/components/menu/index.cjs.map +1 -0
- package/dist/components/menu/index.d.cts +80 -0
- package/dist/components/menu/index.d.ts +80 -0
- package/dist/components/menu/index.js +5 -0
- package/dist/components/menu/index.js.map +1 -0
- package/dist/components/tabs/index.cjs +35 -0
- package/dist/components/tabs/index.cjs.map +1 -0
- package/dist/components/tabs/index.d.cts +65 -0
- package/dist/components/tabs/index.d.ts +65 -0
- package/dist/components/tabs/index.js +6 -0
- package/dist/components/tabs/index.js.map +1 -0
- package/dist/components/toast/index.cjs +24 -0
- package/dist/components/toast/index.cjs.map +1 -0
- package/dist/components/toast/index.d.cts +49 -0
- package/dist/components/toast/index.d.ts +49 -0
- package/dist/components/toast/index.js +3 -0
- package/dist/components/toast/index.js.map +1 -0
- package/dist/index.cjs +698 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +402 -0
- package/dist/index.d.ts +402 -0
- package/dist/index.js +426 -0
- package/dist/index.js.map +1 -0
- 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"]}
|
package/dist/index.d.cts
ADDED
|
@@ -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 };
|