@wow-two-beta/ui 0.0.67 → 0.0.69
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/actions/index.js +8 -8
- package/dist/actions/speedDial/SpeedDial.d.ts +8 -6
- package/dist/actions/toolbar/Toolbar.d.ts +4 -6
- package/dist/{chunk-XLYJF3HC.js → chunk-B4X7XXSM.js} +4 -4
- package/dist/{chunk-XLYJF3HC.js.map → chunk-B4X7XXSM.js.map} +1 -1
- package/dist/{chunk-X2MYOHOB.js → chunk-D4ZT36AZ.js} +2 -2
- package/dist/chunk-D4ZT36AZ.js.map +1 -0
- package/dist/{chunk-MVMDDGW7.js → chunk-D7ZFCHX5.js} +3 -3
- package/dist/{chunk-MVMDDGW7.js.map → chunk-D7ZFCHX5.js.map} +1 -1
- package/dist/{chunk-3SWPYYRQ.js → chunk-EKGOQL75.js} +43 -58
- package/dist/chunk-EKGOQL75.js.map +1 -0
- package/dist/{chunk-LGTGZ3RW.js → chunk-F4HGQMUI.js} +2 -2
- package/dist/chunk-F4HGQMUI.js.map +1 -0
- package/dist/{chunk-YQGEF43L.js → chunk-GPMNI5MG.js} +6 -6
- package/dist/{chunk-YQGEF43L.js.map → chunk-GPMNI5MG.js.map} +1 -1
- package/dist/{chunk-7ZDLUNAY.js → chunk-KZLEHWAJ.js} +4 -4
- package/dist/{chunk-7ZDLUNAY.js.map → chunk-KZLEHWAJ.js.map} +1 -1
- package/dist/{chunk-3BNEDKMS.js → chunk-ORYO55KN.js} +24 -20
- package/dist/chunk-ORYO55KN.js.map +1 -0
- package/dist/{chunk-NOOKDXIZ.js → chunk-OZBLEOLZ.js} +5 -5
- package/dist/chunk-OZBLEOLZ.js.map +1 -0
- package/dist/{chunk-MZZKA3ZS.js → chunk-QTHKG7MQ.js} +41 -38
- package/dist/chunk-QTHKG7MQ.js.map +1 -0
- package/dist/{chunk-JLAFUXGZ.js → chunk-R5MOEUXM.js} +21 -16
- package/dist/chunk-R5MOEUXM.js.map +1 -0
- package/dist/{chunk-V267IMBH.js → chunk-RNHY33US.js} +4 -4
- package/dist/chunk-RNHY33US.js.map +1 -0
- package/dist/{chunk-ZTK5ZQIL.js → chunk-SREWD3XJ.js} +127 -109
- package/dist/chunk-SREWD3XJ.js.map +1 -0
- package/dist/{chunk-FMTBJJP6.js → chunk-UMRRFZ4R.js} +3 -3
- package/dist/{chunk-FMTBJJP6.js.map → chunk-UMRRFZ4R.js.map} +1 -1
- package/dist/{chunk-NEH4ITXL.js → chunk-VTRPW2QQ.js} +15 -13
- package/dist/chunk-VTRPW2QQ.js.map +1 -0
- package/dist/{chunk-NW7ULTYL.js → chunk-VYFPLQPV.js} +4 -4
- package/dist/{chunk-NW7ULTYL.js.map → chunk-VYFPLQPV.js.map} +1 -1
- package/dist/{chunk-4XWLEKH2.js → chunk-WKVWOAQV.js} +3 -3
- package/dist/{chunk-4XWLEKH2.js.map → chunk-WKVWOAQV.js.map} +1 -1
- package/dist/{chunk-D6K6MU2G.js → chunk-X3JVVEUJ.js} +78 -43
- package/dist/chunk-X3JVVEUJ.js.map +1 -0
- package/dist/{chunk-ZC4H4PIN.js → chunk-X5JSX4PU.js} +20 -17
- package/dist/chunk-X5JSX4PU.js.map +1 -0
- package/dist/{chunk-GTBNVI77.js → chunk-XFUD3RZK.js} +59 -45
- package/dist/chunk-XFUD3RZK.js.map +1 -0
- package/dist/{chunk-H3WC7KRX.js → chunk-XOUAFZ2E.js} +70 -54
- package/dist/chunk-XOUAFZ2E.js.map +1 -0
- package/dist/{chunk-DX7FYAKY.js → chunk-XSW3NZDD.js} +17 -17
- package/dist/chunk-XSW3NZDD.js.map +1 -0
- package/dist/display/carousel/Carousel.d.ts +9 -11
- package/dist/display/collapsible/Collapsible.d.ts +4 -6
- package/dist/display/index.js +10 -10
- package/dist/display/list/List.d.ts +3 -5
- package/dist/display/table/Table.d.ts +9 -11
- package/dist/display/tabs/Tabs.d.ts +5 -7
- package/dist/display/timeline/Timeline.d.ts +3 -5
- package/dist/display/tree/Tree.d.ts +4 -6
- package/dist/feedback/index.js +9 -9
- package/dist/feedback/onboardingChecklist/OnboardingChecklist.d.ts +3 -9
- package/dist/forms/DateExtensions.d.ts +30 -25
- package/dist/forms/MonthGrid.d.ts +8 -7
- package/dist/forms/calendar/Calendar.d.ts +8 -7
- package/dist/forms/characterCount/CharacterCount.d.ts +1 -1
- package/dist/forms/colorPicker/ColorPicker.d.ts +7 -0
- package/dist/forms/combobox/Combobox.d.ts +8 -6
- package/dist/forms/dateField/DateField.d.ts +6 -5
- package/dist/forms/datePicker/DatePicker.d.ts +8 -7
- package/dist/forms/dateRangePicker/DateRangePicker.d.ts +5 -4
- package/dist/forms/editable/Editable.d.ts +10 -8
- package/dist/forms/{formField/FormField.d.ts → field/Field.d.ts} +2 -2
- package/dist/forms/field/index.d.ts +6 -0
- package/dist/forms/index.d.ts +2 -2
- package/dist/forms/index.js +14 -14
- package/dist/forms/labeledInput/LabeledInput.d.ts +6 -2
- package/dist/forms/labeledInput/index.d.ts +1 -0
- package/dist/forms/multiSelect/MultiSelect.d.ts +8 -6
- package/dist/forms/rangeCalendar/RangeCalendar.d.ts +8 -6
- package/dist/forms/recurrenceEditor/RecurrenceEditor.d.ts +3 -2
- package/dist/forms/stepper/Stepper.d.ts +5 -7
- package/dist/forms/textareaInput/TextareaInput.d.ts +9 -0
- package/dist/forms/textareaInput/index.d.ts +6 -0
- package/dist/forms/timeField/TimeField.d.ts +4 -7
- package/dist/forms/timeField/index.d.ts +1 -1
- package/dist/forms/timePicker/TimePicker.d.ts +5 -5
- package/dist/forms/wizard/Wizard.d.ts +5 -7
- package/dist/hooks/index.js +2 -2
- package/dist/hooks/useClipboard/index.d.ts +1 -0
- package/dist/hooks/useControlled/index.d.ts +1 -0
- package/dist/hooks/useDebounceHandler/index.d.ts +1 -0
- package/dist/hooks/useDisclosure/index.d.ts +1 -0
- package/dist/hooks/useEscape/index.d.ts +1 -0
- package/dist/hooks/useEventListener/index.d.ts +1 -0
- package/dist/hooks/useFocusTrap/index.d.ts +1 -0
- package/dist/hooks/useId/index.d.ts +1 -0
- package/dist/hooks/useMediaQuery/index.d.ts +1 -0
- package/dist/hooks/useOutsideClick/index.d.ts +1 -0
- package/dist/hooks/useReducedMotion/index.d.ts +1 -0
- package/dist/hooks/useResizeObserver/index.d.ts +1 -0
- package/dist/hooks/useScrollLock/index.d.ts +1 -0
- package/dist/hooks/useTypeahead/index.d.ts +1 -0
- package/dist/icons/index.js +3 -3
- package/dist/index.js +22 -22
- package/dist/layout/appShell/AppShell.d.ts +8 -15
- package/dist/layout/index.js +11 -11
- package/dist/layout/resizablePanels/ResizablePanels.d.ts +4 -6
- package/dist/nav/commandPalette/CommandPalette.d.ts +11 -9
- package/dist/nav/contextMenu/ContextMenu.d.ts +9 -7
- package/dist/nav/dropdownMenu/DropdownMenu.d.ts +9 -7
- package/dist/nav/index.js +11 -11
- package/dist/nav/menu/Menu.d.ts +7 -5
- package/dist/nav/menubar/Menubar.d.ts +5 -7
- package/dist/nav/navigationMenu/NavigationMenu.d.ts +7 -9
- package/dist/overlays/actionSheet/ActionSheet.d.ts +8 -6
- package/dist/overlays/alertModal/AlertModal.d.ts +30 -0
- package/dist/overlays/alertModal/index.d.ts +6 -0
- package/dist/overlays/backdrop/Backdrop.d.ts +1 -1
- package/dist/overlays/bottomSheet/BottomSheet.d.ts +4 -11
- package/dist/overlays/drawer/Drawer.d.ts +14 -12
- package/dist/overlays/hoverCard/HoverCard.d.ts +7 -5
- package/dist/overlays/index.d.ts +2 -2
- package/dist/overlays/index.js +10 -10
- package/dist/overlays/modal/Modal.d.ts +54 -0
- package/dist/overlays/modal/index.d.ts +6 -0
- package/dist/overlays/popover/Popover.d.ts +8 -6
- package/dist/primitives/formControlContext/FormControlContext.d.ts +1 -1
- package/dist/primitives/index.js +3 -3
- package/dist/utils/ColorExtensions/index.d.ts +1 -0
- package/dist/utils/CssExtensions/index.d.ts +1 -0
- package/dist/utils/Environment/index.d.ts +1 -0
- package/dist/utils/Equality/index.d.ts +1 -0
- package/dist/utils/HtmlExtensions/index.d.ts +1 -0
- package/dist/utils/KeyboardExtensions/index.d.ts +1 -0
- package/dist/utils/Layers/index.d.ts +1 -0
- package/dist/utils/OptionalExtensions/index.d.ts +1 -0
- package/dist/utils/PressExtensions/index.d.ts +1 -0
- package/dist/utils/StyleTokens/index.d.ts +1 -0
- package/dist/utils/{SurfaceStyles.d.ts → SurfaceStyles/SurfaceStyles.d.ts} +1 -1
- package/dist/utils/SurfaceStyles/index.d.ts +1 -0
- package/dist/utils/{Tones.d.ts → Tones/Tones.d.ts} +1 -1
- package/dist/utils/Tones/index.d.ts +1 -0
- package/dist/utils/TransitionExtensions/index.d.ts +1 -0
- package/dist/utils/cn/index.d.ts +1 -0
- package/dist/utils/composeEventHandlers/index.d.ts +1 -0
- package/dist/utils/composeRefs/index.d.ts +1 -0
- package/dist/utils/dataAttr/index.d.ts +1 -0
- package/dist/utils/index.js +2 -2
- package/dist/utils/polymorphic/index.d.ts +1 -0
- package/dist/utils/tv/index.d.ts +1 -0
- package/package.json +3 -2
- package/dist/chunk-3BNEDKMS.js.map +0 -1
- package/dist/chunk-3SWPYYRQ.js.map +0 -1
- package/dist/chunk-D6K6MU2G.js.map +0 -1
- package/dist/chunk-DX7FYAKY.js.map +0 -1
- package/dist/chunk-GTBNVI77.js.map +0 -1
- package/dist/chunk-H3WC7KRX.js.map +0 -1
- package/dist/chunk-JLAFUXGZ.js.map +0 -1
- package/dist/chunk-LGTGZ3RW.js.map +0 -1
- package/dist/chunk-MZZKA3ZS.js.map +0 -1
- package/dist/chunk-NEH4ITXL.js.map +0 -1
- package/dist/chunk-NOOKDXIZ.js.map +0 -1
- package/dist/chunk-V267IMBH.js.map +0 -1
- package/dist/chunk-X2MYOHOB.js.map +0 -1
- package/dist/chunk-ZC4H4PIN.js.map +0 -1
- package/dist/chunk-ZTK5ZQIL.js.map +0 -1
- package/dist/forms/formField/index.d.ts +0 -1
- package/dist/forms/textarea/Textarea.d.ts +0 -9
- package/dist/forms/textarea/index.d.ts +0 -1
- package/dist/overlays/alertDialog/AlertDialog.d.ts +0 -28
- package/dist/overlays/alertDialog/index.d.ts +0 -1
- package/dist/overlays/dialog/Dialog.d.ts +0 -46
- package/dist/overlays/dialog/index.d.ts +0 -1
- /package/dist/hooks/{useClipboard.d.ts → useClipboard/useClipboard.d.ts} +0 -0
- /package/dist/hooks/{useControlled.d.ts → useControlled/useControlled.d.ts} +0 -0
- /package/dist/hooks/{useDebounceHandler.d.ts → useDebounceHandler/useDebounceHandler.d.ts} +0 -0
- /package/dist/hooks/{useDisclosure.d.ts → useDisclosure/useDisclosure.d.ts} +0 -0
- /package/dist/hooks/{useEscape.d.ts → useEscape/useEscape.d.ts} +0 -0
- /package/dist/hooks/{useEventListener.d.ts → useEventListener/useEventListener.d.ts} +0 -0
- /package/dist/hooks/{useFocusTrap.d.ts → useFocusTrap/useFocusTrap.d.ts} +0 -0
- /package/dist/hooks/{useId.d.ts → useId/useId.d.ts} +0 -0
- /package/dist/hooks/{useMediaQuery.d.ts → useMediaQuery/useMediaQuery.d.ts} +0 -0
- /package/dist/hooks/{useOutsideClick.d.ts → useOutsideClick/useOutsideClick.d.ts} +0 -0
- /package/dist/hooks/{useReducedMotion.d.ts → useReducedMotion/useReducedMotion.d.ts} +0 -0
- /package/dist/hooks/{useResizeObserver.d.ts → useResizeObserver/useResizeObserver.d.ts} +0 -0
- /package/dist/hooks/{useScrollLock.d.ts → useScrollLock/useScrollLock.d.ts} +0 -0
- /package/dist/hooks/{useTypeahead.d.ts → useTypeahead/useTypeahead.d.ts} +0 -0
- /package/dist/utils/{ColorExtensions.d.ts → ColorExtensions/ColorExtensions.d.ts} +0 -0
- /package/dist/utils/{CssExtensions.d.ts → CssExtensions/CssExtensions.d.ts} +0 -0
- /package/dist/utils/{Environment.d.ts → Environment/Environment.d.ts} +0 -0
- /package/dist/utils/{Equality.d.ts → Equality/Equality.d.ts} +0 -0
- /package/dist/utils/{HtmlExtensions.d.ts → HtmlExtensions/HtmlExtensions.d.ts} +0 -0
- /package/dist/utils/{KeyboardExtensions.d.ts → KeyboardExtensions/KeyboardExtensions.d.ts} +0 -0
- /package/dist/utils/{Layers.d.ts → Layers/Layers.d.ts} +0 -0
- /package/dist/utils/{OptionalExtensions.d.ts → OptionalExtensions/OptionalExtensions.d.ts} +0 -0
- /package/dist/utils/{PressExtensions.d.ts → PressExtensions/PressExtensions.d.ts} +0 -0
- /package/dist/utils/{StyleTokens.d.ts → StyleTokens/StyleTokens.d.ts} +0 -0
- /package/dist/utils/{TransitionExtensions.d.ts → TransitionExtensions/TransitionExtensions.d.ts} +0 -0
- /package/dist/utils/{cn.d.ts → cn/cn.d.ts} +0 -0
- /package/dist/utils/{composeEventHandlers.d.ts → composeEventHandlers/composeEventHandlers.d.ts} +0 -0
- /package/dist/utils/{composeRefs.d.ts → composeRefs/composeRefs.d.ts} +0 -0
- /package/dist/utils/{dataAttr.d.ts → dataAttr/dataAttr.d.ts} +0 -0
- /package/dist/utils/{polymorphic.d.ts → polymorphic/polymorphic.d.ts} +0 -0
- /package/dist/utils/{tv.d.ts → tv/tv.d.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/hooks/index.ts","../src/hooks/useControlled/useControlled.ts","../src/hooks/useDisclosure/useDisclosure.ts","../src/hooks/useEventListener/useEventListener.ts","../src/hooks/useOutsideClick/useOutsideClick.ts","../src/hooks/useEscape/useEscape.ts","../src/hooks/useFocusTrap/useFocusTrap.ts","../src/hooks/useResizeObserver/useResizeObserver.ts","../src/hooks/useMediaQuery/useMediaQuery.ts","../src/hooks/useReducedMotion/useReducedMotion.ts","../src/hooks/useClipboard/useClipboard.ts","../src/hooks/useDebounceHandler/useDebounceHandler.ts","../src/hooks/useTypeahead/useTypeahead.ts"],"names":["useState","useCallback","useRef","useLayoutEffect","useEffect"],"mappings":"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","file":"chunk-RNHY33US.js","sourcesContent":["export { useId } from './useId';\nexport { useControlled } from './useControlled';\nexport { useDisclosure, type DisclosureControls } from './useDisclosure';\nexport { useEventListener } from './useEventListener';\nexport { useOutsideClick } from './useOutsideClick';\nexport { useEscape } from './useEscape';\nexport { useFocusTrap } from './useFocusTrap';\nexport { useScrollLock } from './useScrollLock';\nexport { useResizeObserver } from './useResizeObserver';\nexport { useMediaQuery } from './useMediaQuery';\nexport { useReducedMotion } from './useReducedMotion';\nexport { useClipboard, type UseClipboardOptions, type ClipboardControls } from './useClipboard';\nexport { useDebounceHandler } from './useDebounceHandler';\nexport {\n useTypeahead,\n type UseTypeaheadOptions,\n type UseTypeaheadReturn,\n} from './useTypeahead';\n","import { useCallback, useLayoutEffect, useRef, useState } from 'react';\n\ninterface UseControlledOptions<T> {\n controlled: T | undefined;\n default: T;\n onChange?: (value: T) => void;\n}\n\n/**\n * Standard controlled/uncontrolled pattern.\n *\n * - If `controlled` is defined, the component is controlled — internal state is\n * ignored, `setValue` only fires `onChange`.\n * - Otherwise the component owns its state, `setValue` updates it, and `onChange`\n * still fires for consumers that want to observe changes.\n */\nexport function useControlled<T>({\n controlled,\n default: defaultValue,\n onChange,\n}: UseControlledOptions<T>): [T, (value: T) => void] {\n const [uncontrolled, setUncontrolled] = useState<T>(defaultValue);\n const onChangeRef = useRef(onChange);\n useLayoutEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n\n const isControlled = controlled !== undefined;\n const value = isControlled ? controlled : uncontrolled;\n\n const setValue = useCallback(\n (next: T) => {\n if (!isControlled) setUncontrolled(next);\n onChangeRef.current?.(next);\n },\n [isControlled],\n );\n\n return [value, setValue];\n}\n","import { useCallback, useState } from 'react';\n\nexport interface DisclosureControls {\n isOpen: boolean;\n open: () => void;\n close: () => void;\n toggle: () => void;\n setOpen: (next: boolean) => void;\n}\n\n/**\n * Minimal open/close state with stable callbacks. The standard backbone for\n * Modal, Drawer, Popover, Menu, Accordion, etc. Use `useControlled` underneath\n * when the consumer may also pass a controlled `open` prop.\n */\nexport function useDisclosure(initial = false): DisclosureControls {\n const [isOpen, setIsOpen] = useState(initial);\n const open = useCallback(() => setIsOpen(true), []);\n const close = useCallback(() => setIsOpen(false), []);\n const toggle = useCallback(() => setIsOpen((o) => !o), []);\n return { isOpen, open, close, toggle, setOpen: setIsOpen };\n}\n","import { useEffect, useLayoutEffect, useRef } from 'react';\n\ntype Target = Window | Document | HTMLElement | null;\n\n/**\n * Add an event listener and clean it up automatically. Handler is read from\n * a ref so consumers don't need to memoize it.\n */\nexport function useEventListener<K extends string>(\n event: K,\n handler: (event: Event) => void,\n target: Target = document,\n options?: boolean | AddEventListenerOptions,\n): void {\n const handlerRef = useRef(handler);\n const optionsRef = useRef(options);\n useLayoutEffect(() => {\n handlerRef.current = handler;\n optionsRef.current = options;\n }, [handler, options]);\n\n useEffect(() => {\n if (!target) return;\n // Capture options at attach time — remove must use the same capture flag.\n const listenerOptions = optionsRef.current;\n const listener = (e: Event) => handlerRef.current(e);\n target.addEventListener(event, listener, listenerOptions);\n return () => target.removeEventListener(event, listener, listenerOptions);\n }, [event, target]);\n}\n","import { useEffect, useLayoutEffect, useRef, type RefObject } from 'react';\n\n/**\n * Fire `handler` when the user clicks outside any of the provided refs.\n * Uses `pointerdown` so it fires before focus shifts (avoids losing focus\n * inside an overlay before a click on a trigger registers).\n */\nexport function useOutsideClick(\n refs: RefObject<HTMLElement | null> | RefObject<HTMLElement | null>[],\n handler: (event: PointerEvent) => void,\n enabled = true,\n): void {\n const handlerRef = useRef(handler);\n const refsRef = useRef(refs);\n useLayoutEffect(() => {\n handlerRef.current = handler;\n refsRef.current = refs;\n }, [handler, refs]);\n\n useEffect(() => {\n if (!enabled) return;\n\n const onPointerDown = (e: PointerEvent) => {\n const target = e.target as Node | null;\n if (!target) return;\n const refList = Array.isArray(refsRef.current) ? refsRef.current : [refsRef.current];\n for (const ref of refList) {\n if (ref.current && ref.current.contains(target)) return;\n }\n handlerRef.current(e);\n };\n\n document.addEventListener('pointerdown', onPointerDown, true);\n return () => document.removeEventListener('pointerdown', onPointerDown, true);\n }, [enabled]);\n}\n","import { useEffect, useLayoutEffect, useRef } from 'react';\n\n/**\n * Fire `handler` when the Escape key is pressed at the document level.\n * For nested overlays, the topmost should call `event.stopPropagation()` in\n * its handler — `DismissableLayer` handles this stack-style.\n */\nexport function useEscape(handler: (event: KeyboardEvent) => void, enabled = true): void {\n const handlerRef = useRef(handler);\n useLayoutEffect(() => {\n handlerRef.current = handler;\n }, [handler]);\n\n useEffect(() => {\n if (!enabled) return;\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') handlerRef.current(e);\n };\n document.addEventListener('keydown', onKeyDown);\n return () => document.removeEventListener('keydown', onKeyDown);\n }, [enabled]);\n}\n","import { useEffect, type RefObject } from 'react';\n\nconst FOCUSABLE_SELECTOR = [\n 'a[href]',\n 'button:not([disabled])',\n 'input:not([disabled])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n '[tabindex]:not([tabindex=\"-1\"])',\n '[contenteditable=\"true\"]',\n].join(',');\n\nfunction isVisible(el: HTMLElement): boolean {\n // checkVisibility covers display/visibility/content-visibility; the\n // getClientRects fallback (older engines) still includes position:fixed\n // elements, which `offsetParent !== null` would wrongly exclude.\n return el.checkVisibility?.() ?? el.getClientRects().length > 0;\n}\n\nfunction getFocusable(container: HTMLElement): HTMLElement[] {\n return Array.from(container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)).filter(\n (el) => el.getAttribute('aria-hidden') !== 'true' && isVisible(el),\n );\n}\n\n/**\n * Trap Tab / Shift+Tab focus inside the referenced element. On mount, focuses\n * the first focusable child (unless already focused inside). On unmount,\n * returns focus to the element that had it before mounting.\n *\n * For richer behavior (sentinels, nested traps), wrap `FocusScope` instead —\n * this hook is the lower primitive.\n */\nexport function useFocusTrap(ref: RefObject<HTMLElement | null>, enabled = true): void {\n useEffect(() => {\n if (!enabled || !ref.current) return;\n const container = ref.current;\n const previouslyFocused = document.activeElement as HTMLElement | null;\n\n const previousTabIndex = container.getAttribute('tabindex');\n let tabIndexMutated = false;\n\n const focusables = getFocusable(container);\n if (focusables.length > 0 && !container.contains(document.activeElement)) {\n focusables[0]?.focus();\n } else if (focusables.length === 0) {\n container.tabIndex = -1;\n tabIndexMutated = true;\n container.focus();\n }\n\n const onKeyDown = (e: KeyboardEvent) => {\n if (e.key !== 'Tab') return;\n const items = getFocusable(container);\n if (items.length === 0) {\n e.preventDefault();\n return;\n }\n const first = items[0];\n const last = items[items.length - 1];\n if (!first || !last) return;\n const active = document.activeElement;\n if (e.shiftKey && active === first) {\n e.preventDefault();\n last.focus();\n } else if (!e.shiftKey && active === last) {\n e.preventDefault();\n first.focus();\n }\n };\n\n container.addEventListener('keydown', onKeyDown);\n return () => {\n container.removeEventListener('keydown', onKeyDown);\n if (tabIndexMutated) {\n if (previousTabIndex === null) container.removeAttribute('tabindex');\n else container.setAttribute('tabindex', previousTabIndex);\n }\n previouslyFocused?.focus?.();\n };\n }, [ref, enabled]);\n}\n","import { useEffect, useLayoutEffect, useRef, type RefObject } from 'react';\n\n/**\n * Run `callback` whenever the referenced element's size changes. Returns\n * synchronously after layout, before paint. Cleans up automatically.\n */\nexport function useResizeObserver<T extends HTMLElement>(\n ref: RefObject<T | null>,\n callback: (entry: ResizeObserverEntry) => void,\n enabled = true,\n): void {\n const callbackRef = useRef(callback);\n useLayoutEffect(() => {\n callbackRef.current = callback;\n }, [callback]);\n\n useEffect(() => {\n if (!enabled || !ref.current || typeof ResizeObserver === 'undefined') return;\n const element = ref.current;\n const observer = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) callbackRef.current(entry);\n });\n observer.observe(element);\n return () => observer.disconnect();\n }, [ref, enabled]);\n}\n","import { useCallback, useSyncExternalStore } from 'react';\n\n/**\n * Reactively follow a CSS media query. Pass a query string like\n * `'(min-width: 768px)'` or `'(prefers-reduced-motion: reduce)'`.\n * SSR-safe — renders `false` on the server, syncs to the real value on the client.\n */\nexport function useMediaQuery(query: string): boolean {\n const subscribe = useCallback(\n (onStoreChange: () => void) => {\n const mql = window.matchMedia(query);\n mql.addEventListener('change', onStoreChange);\n return () => mql.removeEventListener('change', onStoreChange);\n },\n [query],\n );\n\n return useSyncExternalStore(\n subscribe,\n () => window.matchMedia(query).matches,\n () => false,\n );\n}\n","import { useMediaQuery } from '../useMediaQuery';\n\n/**\n * Returns `true` when the user has requested reduced motion via OS settings.\n * Components should short-circuit looping/transitional animations to a\n * static final state when this is `true`.\n */\nexport function useReducedMotion(): boolean {\n return useMediaQuery('(prefers-reduced-motion: reduce)');\n}\n","import { useCallback, useEffect, useRef, useState } from 'react';\n\nexport interface UseClipboardOptions {\n /** Reset `copied` back to false after this many ms. Default 2000. Set 0 to keep state until explicitly reset. */\n resetAfter?: number;\n}\n\nexport interface ClipboardControls {\n /** True for `resetAfter` ms after a successful copy. */\n copied: boolean;\n /** Last error from `navigator.clipboard.writeText`, if any. */\n error: Error | null;\n /** Write `text` to the system clipboard. Returns the promise. */\n copy: (text: string) => Promise<void>;\n /** Force-clear the `copied` flag. */\n reset: () => void;\n}\n\n/**\n * Wraps `navigator.clipboard.writeText` with a transient `copied` flag for\n * post-action UI (icon swap, \"Copied!\" tooltip). Pass `resetAfter: 0` to\n * keep `copied` true until you call `reset()`.\n */\nexport function useClipboard({ resetAfter = 2000 }: UseClipboardOptions = {}): ClipboardControls {\n const [copied, setCopied] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const timeoutRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const reset = useCallback(() => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = null;\n setCopied(false);\n setError(null);\n }, []);\n\n const copy = useCallback(\n async (text: string) => {\n try {\n await navigator.clipboard.writeText(text);\n setError(null);\n setCopied(true);\n if (resetAfter > 0) {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n timeoutRef.current = setTimeout(() => setCopied(false), resetAfter);\n }\n } catch (err) {\n setCopied(false);\n setError(err instanceof Error ? err : new Error(String(err)));\n }\n },\n [resetAfter],\n );\n\n useEffect(() => {\n return () => {\n if (timeoutRef.current) clearTimeout(timeoutRef.current);\n };\n }, []);\n\n return { copied, error, copy, reset };\n}\n","import { useCallback, useRef } from 'react';\nimport type { SyntheticEvent } from 'react';\n\n/**\n * Throttle a React event handler. First call in a `ms` window fires; subsequent\n * within the window are swallowed via `event.preventDefault()`. When `ms` is\n * `undefined`, the handler passes through unchanged. Use to prevent rapid-fire\n * gestures (double-clicks, double-submits, repeated touches) without wiring\n * timer state in the consumer.\n *\n * Functionally a *throttle* (first wins). The `Debounce` naming is kept for\n * vocabulary consistency with the `debounceMs` props on consuming components.\n */\nexport function useDebounceHandler<E extends SyntheticEvent>(\n handler: ((event: E) => void) | undefined,\n ms: number | undefined,\n): (event: E) => void {\n const lastTimeRef = useRef(0);\n return useCallback(\n (event: E) => {\n if (ms !== undefined) {\n const now = Date.now();\n if (now - lastTimeRef.current < ms) {\n event.preventDefault();\n return;\n }\n lastTimeRef.current = now;\n }\n handler?.(event);\n },\n [handler, ms],\n );\n}\n","import { useCallback, useEffect, useRef } from 'react';\nimport type { KeyboardEvent } from 'react';\n\n/** Resolves the typeahead item pool — a static array or a getter read lazily on each keystroke. */\ntype ItemSource<T> = readonly T[] | (() => readonly T[]);\n\n/** Configures {@link useTypeahead}. `T` is the item type the caller stores per option. */\nexport interface UseTypeaheadOptions<T> {\n /** Supplies the items to match against; a function is re-read on every keystroke (live lists). */\n items: ItemSource<T>;\n /** Extracts the comparable label from an item. Matching is case-insensitive on this string. */\n getLabel: (item: T) => string;\n /** Reports whether an item is disabled; disabled items are skipped during matching. */\n isDisabled?: (item: T) => boolean;\n /** Fires with the matched item and its index in the (live) item array when a keystroke resolves. */\n onMatch: (item: T, index: number) => void;\n /** Returns the index of the currently-active item — same-letter cycling starts after it. */\n getActiveIndex?: () => number;\n /** Disables the matcher when `false`; every key falls through unhandled. Defaults to `true`. */\n enabled?: boolean;\n /** Idle time (ms) after which the typed buffer resets. Defaults to `500`. */\n timeout?: number;\n}\n\n/** The keyboard handler + manual reset returned by {@link useTypeahead}. */\nexport interface UseTypeaheadReturn {\n /** Feeds a keydown into the matcher. Returns `true` when consumed (caller should stop), else `false`. */\n onKeyDown: (event: KeyboardEvent) => boolean;\n /** Clears the typed buffer immediately (e.g. on blur / close). */\n reset: () => void;\n}\n\n/** Reports whether a key event carries a single printable character (and no command modifier). */\nfunction isPrintableKey(event: KeyboardEvent): boolean {\n if (event.ctrlKey || event.metaKey || event.altKey) return false;\n // Printable keys surface as a single char in `key`; named keys (Enter, ArrowDown…) are multi-char.\n return event.key.length === 1;\n}\n\n/** Reports whether every char in the buffer is the same letter — the \"cycle\" case (e.g. \"aaa\"). */\nfunction isAllSameChar(buffer: string): boolean {\n return buffer.length > 0 && [...buffer].every((c) => c === buffer[0]);\n}\n\n/**\n * APG-correct type-to-select matcher (WAI-ARIA listbox/combobox typeahead). Accumulates printable\n * chars into a buffer (resets after `timeout` ms idle): a repeated single char cycles to the next\n * label starting with it (after `getActiveIndex()`, wrap-around), else prefix-matches the whole\n * buffer case-insensitively; disabled items skipped. On a hit `onMatch(item, index)` fires; consumed\n * keys return `true`, others `false` to fall through. Space is typeable only while buffering (a\n * leading Space reaches the caller). SSR-safe; reset timer cleared on unmount.\n */\nexport function useTypeahead<T>(options: UseTypeaheadOptions<T>): UseTypeaheadReturn {\n const { enabled = true } = options;\n\n /* Consumer fns/values read through a ref so `onKeyDown` stays referentially stable\n (callers wire it into their own memoised keydown handlers). */\n const optsRef = useRef(options);\n optsRef.current = options;\n\n const bufferRef = useRef('');\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n\n const clearTimer = useCallback(() => {\n if (timerRef.current !== null) {\n clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n }, []);\n\n const reset = useCallback(() => {\n bufferRef.current = '';\n clearTimer();\n }, [clearTimer]);\n\n /* Clears the pending reset timer on unmount (no stale fire after teardown). */\n useEffect(() => clearTimer, [clearTimer]);\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent): boolean => {\n const o = optsRef.current;\n if (o.enabled === false) return false;\n if (!isPrintableKey(event)) return false;\n\n const isSpace = event.key === ' ';\n const hasBuffer = bufferRef.current.length > 0;\n /* Reserve Space: with no active buffer, hand it back so the caller can select; while typing,\n a Space is a real character (matches labels with spaces) and is consumed. */\n if (isSpace && !hasBuffer) return false;\n\n const resolved = typeof o.items === 'function' ? o.items() : o.items;\n const list = resolved as readonly T[];\n if (list.length === 0) return false;\n\n const nextBuffer = bufferRef.current + event.key;\n bufferRef.current = nextBuffer;\n\n /* Restart the idle window on every accepted keystroke. */\n clearTimer();\n timerRef.current = setTimeout(() => {\n bufferRef.current = '';\n timerRef.current = null;\n }, o.timeout ?? 500);\n\n const labelOf = (item: T) => o.getLabel(item).toLowerCase();\n const disabledOf = (item: T) => (o.isDisabled ? o.isDisabled(item) : false);\n const startFrom = o.getActiveIndex ? o.getActiveIndex() : -1;\n\n let matchIndex = -1;\n if (isAllSameChar(nextBuffer)) {\n /* Same-letter repeat → cycle to the next label starting with that letter, after the active one. */\n const char = nextBuffer[0]!.toLowerCase();\n for (let step = 1; step <= list.length; step += 1) {\n const idx = (startFrom + step + list.length) % list.length;\n const item = list[idx]!;\n if (!disabledOf(item) && labelOf(item).startsWith(char)) {\n matchIndex = idx;\n break;\n }\n }\n } else {\n /* Multi-char buffer → prefix-match the whole buffer; scan from the current item forward so a\n refining sequence stays put when the active item still matches. */\n const prefix = nextBuffer.toLowerCase();\n const begin = startFrom < 0 ? 0 : startFrom;\n for (let step = 0; step < list.length; step += 1) {\n const idx = (begin + step) % list.length;\n const item = list[idx]!;\n if (!disabledOf(item) && labelOf(item).startsWith(prefix)) {\n matchIndex = idx;\n break;\n }\n }\n }\n\n if (matchIndex >= 0) {\n o.onMatch(list[matchIndex]!, matchIndex);\n return true;\n }\n /* No label matched, but the char was consumed into the buffer (and Space, once buffering,\n must not double as select) — report handled so the caller doesn't also act on it. */\n return true;\n },\n [clearTimer],\n );\n\n /* `enabled` toggling off mid-type should not leave a stale buffer/timer armed. */\n useEffect(() => {\n if (!enabled) reset();\n }, [enabled, reset]);\n\n return { onKeyDown, reset };\n}\n"]}
|