@mantine/hooks 7.0.0 → 7.0.1-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/cjs/use-debounced-state/use-debounced-state.js +2 -2
- package/cjs/use-debounced-state/use-debounced-state.js.map +1 -1
- package/cjs/use-local-storage/create-storage.js +32 -4
- package/cjs/use-local-storage/create-storage.js.map +1 -1
- package/cjs/use-local-storage/use-local-storage.js.map +1 -1
- package/cjs/use-session-storage/use-session-storage.js.map +1 -1
- package/esm/index.mjs +65 -0
- package/esm/index.mjs.map +1 -0
- package/esm/use-callback-ref/{use-callback-ref.js → use-callback-ref.mjs} +1 -1
- package/esm/use-callback-ref/use-callback-ref.mjs.map +1 -0
- package/esm/use-click-outside/{use-click-outside.js → use-click-outside.mjs} +1 -1
- package/esm/use-click-outside/use-click-outside.mjs.map +1 -0
- package/esm/use-clipboard/{use-clipboard.js → use-clipboard.mjs} +1 -1
- package/esm/use-clipboard/use-clipboard.mjs.map +1 -0
- package/esm/use-color-scheme/{use-color-scheme.js → use-color-scheme.mjs} +2 -2
- package/esm/use-color-scheme/use-color-scheme.mjs.map +1 -0
- package/esm/use-counter/{use-counter.js → use-counter.mjs} +2 -2
- package/esm/use-counter/use-counter.mjs.map +1 -0
- package/esm/use-debounced-callback/{use-debounced-callback.js → use-debounced-callback.mjs} +2 -2
- package/esm/use-debounced-callback/use-debounced-callback.mjs.map +1 -0
- package/esm/use-debounced-state/{use-debounced-state.js → use-debounced-state.mjs} +4 -4
- package/esm/use-debounced-state/use-debounced-state.mjs.map +1 -0
- package/esm/use-debounced-value/{use-debounced-value.js → use-debounced-value.mjs} +1 -1
- package/esm/use-debounced-value/use-debounced-value.mjs.map +1 -0
- package/esm/use-did-update/{use-did-update.js → use-did-update.mjs} +1 -1
- package/esm/use-did-update/use-did-update.mjs.map +1 -0
- package/esm/use-disclosure/{use-disclosure.js → use-disclosure.mjs} +1 -1
- package/esm/use-disclosure/use-disclosure.mjs.map +1 -0
- package/esm/use-document-title/{use-document-title.js → use-document-title.mjs} +2 -2
- package/esm/use-document-title/use-document-title.mjs.map +1 -0
- package/esm/use-document-visibility/{use-document-visibility.js → use-document-visibility.mjs} +1 -1
- package/esm/use-document-visibility/use-document-visibility.mjs.map +1 -0
- package/esm/use-event-listener/{use-event-listener.js → use-event-listener.mjs} +1 -1
- package/esm/use-event-listener/use-event-listener.mjs.map +1 -0
- package/esm/use-eye-dropper/{use-eye-dropper.js → use-eye-dropper.mjs} +2 -2
- package/esm/use-eye-dropper/use-eye-dropper.mjs.map +1 -0
- package/esm/use-favicon/{use-favicon.js → use-favicon.mjs} +2 -2
- package/esm/use-favicon/use-favicon.mjs.map +1 -0
- package/esm/use-focus-return/{use-focus-return.js → use-focus-return.mjs} +2 -2
- package/esm/use-focus-return/use-focus-return.mjs.map +1 -0
- package/esm/use-focus-trap/{create-aria-hider.js → create-aria-hider.mjs} +2 -2
- package/esm/use-focus-trap/create-aria-hider.mjs.map +1 -0
- package/esm/use-focus-trap/{scope-tab.js → scope-tab.mjs} +2 -2
- package/esm/use-focus-trap/scope-tab.mjs.map +1 -0
- package/esm/use-focus-trap/{tabbable.js → tabbable.mjs} +1 -1
- package/esm/use-focus-trap/tabbable.mjs.map +1 -0
- package/esm/use-focus-trap/{use-focus-trap.js → use-focus-trap.mjs} +4 -4
- package/esm/use-focus-trap/use-focus-trap.mjs.map +1 -0
- package/esm/use-focus-within/{use-focus-within.js → use-focus-within.mjs} +1 -1
- package/esm/use-focus-within/use-focus-within.mjs.map +1 -0
- package/esm/use-force-update/{use-force-update.js → use-force-update.mjs} +1 -1
- package/esm/use-force-update/use-force-update.mjs.map +1 -0
- package/esm/use-fullscreen/{use-fullscreen.js → use-fullscreen.mjs} +1 -1
- package/esm/use-fullscreen/use-fullscreen.mjs.map +1 -0
- package/esm/use-hash/{use-hash.js → use-hash.mjs} +2 -2
- package/esm/use-hash/use-hash.mjs.map +1 -0
- package/esm/use-headroom/{use-headroom.js → use-headroom.mjs} +3 -3
- package/esm/use-headroom/use-headroom.mjs.map +1 -0
- package/esm/use-hotkeys/{parse-hotkey.js → parse-hotkey.mjs} +1 -1
- package/esm/use-hotkeys/parse-hotkey.mjs.map +1 -0
- package/esm/use-hotkeys/{use-hotkeys.js → use-hotkeys.mjs} +3 -3
- package/esm/use-hotkeys/use-hotkeys.mjs.map +1 -0
- package/esm/use-hover/{use-hover.js → use-hover.mjs} +1 -1
- package/esm/use-hover/use-hover.mjs.map +1 -0
- package/esm/use-id/{use-id.js → use-id.mjs} +4 -4
- package/esm/use-id/use-id.mjs.map +1 -0
- package/esm/use-id/{use-react-id.js → use-react-id.mjs} +1 -1
- package/esm/use-id/use-react-id.mjs.map +1 -0
- package/esm/use-idle/{use-idle.js → use-idle.mjs} +1 -1
- package/esm/use-idle/use-idle.mjs.map +1 -0
- package/esm/use-input-state/{use-input-state.js → use-input-state.mjs} +1 -1
- package/esm/use-input-state/use-input-state.mjs.map +1 -0
- package/esm/use-intersection/{use-intersection.js → use-intersection.mjs} +1 -1
- package/esm/use-intersection/use-intersection.mjs.map +1 -0
- package/esm/use-interval/{use-interval.js → use-interval.mjs} +1 -1
- package/esm/use-interval/use-interval.mjs.map +1 -0
- package/esm/use-isomorphic-effect/{use-isomorphic-effect.js → use-isomorphic-effect.mjs} +1 -1
- package/esm/use-isomorphic-effect/use-isomorphic-effect.mjs.map +1 -0
- package/esm/use-list-state/{use-list-state.js → use-list-state.mjs} +1 -1
- package/esm/use-list-state/use-list-state.mjs.map +1 -0
- package/esm/use-local-storage/{create-storage.js → create-storage.mjs} +34 -6
- package/esm/use-local-storage/create-storage.mjs.map +1 -0
- package/esm/use-local-storage/{use-local-storage.js → use-local-storage.mjs} +2 -2
- package/esm/use-local-storage/use-local-storage.mjs.map +1 -0
- package/esm/use-logger/{use-logger.js → use-logger.mjs} +2 -2
- package/esm/use-logger/use-logger.mjs.map +1 -0
- package/esm/use-media-query/{use-media-query.js → use-media-query.mjs} +1 -1
- package/esm/use-media-query/use-media-query.mjs.map +1 -0
- package/esm/use-merged-ref/{use-merged-ref.js → use-merged-ref.mjs} +1 -1
- package/esm/use-merged-ref/use-merged-ref.mjs.map +1 -0
- package/esm/use-mouse/{use-mouse.js → use-mouse.mjs} +1 -1
- package/esm/use-mouse/use-mouse.mjs.map +1 -0
- package/esm/use-move/{use-move.js → use-move.mjs} +2 -2
- package/esm/use-move/use-move.mjs.map +1 -0
- package/esm/use-network/{use-network.js → use-network.mjs} +2 -2
- package/esm/use-network/use-network.mjs.map +1 -0
- package/esm/use-os/{use-os.js → use-os.mjs} +2 -2
- package/esm/use-os/use-os.mjs.map +1 -0
- package/esm/use-page-leave/{use-page-leave.js → use-page-leave.mjs} +1 -1
- package/esm/use-page-leave/use-page-leave.mjs.map +1 -0
- package/esm/use-pagination/{use-pagination.js → use-pagination.mjs} +3 -3
- package/esm/use-pagination/use-pagination.mjs.map +1 -0
- package/esm/use-previous/{use-previous.js → use-previous.mjs} +1 -1
- package/esm/use-previous/use-previous.mjs.map +1 -0
- package/esm/use-queue/{use-queue.js → use-queue.mjs} +1 -1
- package/esm/use-queue/use-queue.mjs.map +1 -0
- package/esm/use-reduced-motion/{use-reduced-motion.js → use-reduced-motion.mjs} +2 -2
- package/esm/use-reduced-motion/use-reduced-motion.mjs.map +1 -0
- package/esm/use-resize-observer/{use-resize-observer.js → use-resize-observer.mjs} +1 -1
- package/esm/use-resize-observer/use-resize-observer.mjs.map +1 -0
- package/esm/use-scroll-into-view/{use-scroll-into-view.js → use-scroll-into-view.mjs} +7 -7
- package/esm/use-scroll-into-view/use-scroll-into-view.mjs.map +1 -0
- package/esm/use-scroll-into-view/utils/{ease-in-out-quad.js → ease-in-out-quad.mjs} +1 -1
- package/esm/use-scroll-into-view/utils/ease-in-out-quad.mjs.map +1 -0
- package/esm/use-scroll-into-view/utils/{get-relative-position.js → get-relative-position.mjs} +1 -1
- package/esm/use-scroll-into-view/utils/get-relative-position.mjs.map +1 -0
- package/esm/use-scroll-into-view/utils/{get-scroll-start.js → get-scroll-start.mjs} +1 -1
- package/esm/use-scroll-into-view/utils/get-scroll-start.mjs.map +1 -0
- package/esm/use-scroll-into-view/utils/{set-scroll-param.js → set-scroll-param.mjs} +1 -1
- package/esm/use-scroll-into-view/utils/set-scroll-param.mjs.map +1 -0
- package/esm/use-session-storage/{use-session-storage.js → use-session-storage.mjs} +2 -2
- package/esm/use-session-storage/use-session-storage.mjs.map +1 -0
- package/esm/use-set-state/{use-set-state.js → use-set-state.mjs} +1 -1
- package/esm/use-set-state/use-set-state.mjs.map +1 -0
- package/esm/use-shallow-effect/{use-shallow-effect.js → use-shallow-effect.mjs} +2 -2
- package/esm/use-shallow-effect/use-shallow-effect.mjs.map +1 -0
- package/esm/use-text-selection/{use-text-selection.js → use-text-selection.mjs} +2 -2
- package/esm/use-text-selection/use-text-selection.mjs.map +1 -0
- package/esm/use-timeout/{use-timeout.js → use-timeout.mjs} +1 -1
- package/esm/use-timeout/use-timeout.mjs.map +1 -0
- package/esm/use-toggle/{use-toggle.js → use-toggle.mjs} +1 -1
- package/esm/use-toggle/use-toggle.mjs.map +1 -0
- package/esm/use-uncontrolled/{use-uncontrolled.js → use-uncontrolled.mjs} +1 -1
- package/esm/use-uncontrolled/use-uncontrolled.mjs.map +1 -0
- package/esm/use-validated-state/{use-validated-state.js → use-validated-state.mjs} +1 -1
- package/esm/use-validated-state/use-validated-state.mjs.map +1 -0
- package/esm/use-viewport-size/{use-viewport-size.js → use-viewport-size.mjs} +2 -2
- package/esm/use-viewport-size/use-viewport-size.mjs.map +1 -0
- package/esm/use-window-event/{use-window-event.js → use-window-event.mjs} +1 -1
- package/esm/use-window-event/use-window-event.mjs.map +1 -0
- package/esm/use-window-scroll/{use-window-scroll.js → use-window-scroll.mjs} +2 -2
- package/esm/use-window-scroll/use-window-scroll.mjs.map +1 -0
- package/esm/utils/clamp/{clamp.js → clamp.mjs} +1 -1
- package/esm/utils/clamp/clamp.mjs.map +1 -0
- package/esm/utils/lower-first/{lower-first.js → lower-first.mjs} +1 -1
- package/esm/utils/lower-first/lower-first.mjs.map +1 -0
- package/esm/utils/random-id/{random-id.js → random-id.mjs} +1 -1
- package/esm/utils/random-id/random-id.mjs.map +1 -0
- package/esm/utils/range/{range.js → range.mjs} +1 -1
- package/esm/utils/range/range.mjs.map +1 -0
- package/esm/utils/shallow-equal/{shallow-equal.js → shallow-equal.mjs} +1 -1
- package/esm/utils/shallow-equal/shallow-equal.mjs.map +1 -0
- package/esm/utils/upper-first/{upper-first.js → upper-first.mjs} +1 -1
- package/esm/utils/upper-first/upper-first.mjs.map +1 -0
- package/lib/index.d.mts +64 -0
- package/lib/use-local-storage/create-storage.d.ts +2 -2
- package/lib/use-local-storage/use-local-storage.d.ts +2 -2
- package/lib/use-session-storage/use-session-storage.d.ts +2 -2
- package/package.json +11 -5
- package/esm/index.js +0 -66
- package/esm/index.js.map +0 -1
- package/esm/use-callback-ref/use-callback-ref.js.map +0 -1
- package/esm/use-click-outside/use-click-outside.js.map +0 -1
- package/esm/use-clipboard/use-clipboard.js.map +0 -1
- package/esm/use-color-scheme/use-color-scheme.js.map +0 -1
- package/esm/use-counter/use-counter.js.map +0 -1
- package/esm/use-debounced-callback/use-debounced-callback.js.map +0 -1
- package/esm/use-debounced-state/use-debounced-state.js.map +0 -1
- package/esm/use-debounced-value/use-debounced-value.js.map +0 -1
- package/esm/use-did-update/use-did-update.js.map +0 -1
- package/esm/use-disclosure/use-disclosure.js.map +0 -1
- package/esm/use-document-title/use-document-title.js.map +0 -1
- package/esm/use-document-visibility/use-document-visibility.js.map +0 -1
- package/esm/use-event-listener/use-event-listener.js.map +0 -1
- package/esm/use-eye-dropper/use-eye-dropper.js.map +0 -1
- package/esm/use-favicon/use-favicon.js.map +0 -1
- package/esm/use-focus-return/use-focus-return.js.map +0 -1
- package/esm/use-focus-trap/create-aria-hider.js.map +0 -1
- package/esm/use-focus-trap/scope-tab.js.map +0 -1
- package/esm/use-focus-trap/tabbable.js.map +0 -1
- package/esm/use-focus-trap/use-focus-trap.js.map +0 -1
- package/esm/use-focus-within/use-focus-within.js.map +0 -1
- package/esm/use-force-update/use-force-update.js.map +0 -1
- package/esm/use-fullscreen/use-fullscreen.js.map +0 -1
- package/esm/use-hash/use-hash.js.map +0 -1
- package/esm/use-headroom/use-headroom.js.map +0 -1
- package/esm/use-hotkeys/parse-hotkey.js.map +0 -1
- package/esm/use-hotkeys/use-hotkeys.js.map +0 -1
- package/esm/use-hover/use-hover.js.map +0 -1
- package/esm/use-id/use-id.js.map +0 -1
- package/esm/use-id/use-react-id.js.map +0 -1
- package/esm/use-idle/use-idle.js.map +0 -1
- package/esm/use-input-state/use-input-state.js.map +0 -1
- package/esm/use-intersection/use-intersection.js.map +0 -1
- package/esm/use-interval/use-interval.js.map +0 -1
- package/esm/use-isomorphic-effect/use-isomorphic-effect.js.map +0 -1
- package/esm/use-list-state/use-list-state.js.map +0 -1
- package/esm/use-local-storage/create-storage.js.map +0 -1
- package/esm/use-local-storage/use-local-storage.js.map +0 -1
- package/esm/use-logger/use-logger.js.map +0 -1
- package/esm/use-media-query/use-media-query.js.map +0 -1
- package/esm/use-merged-ref/use-merged-ref.js.map +0 -1
- package/esm/use-mouse/use-mouse.js.map +0 -1
- package/esm/use-move/use-move.js.map +0 -1
- package/esm/use-network/use-network.js.map +0 -1
- package/esm/use-os/use-os.js.map +0 -1
- package/esm/use-page-leave/use-page-leave.js.map +0 -1
- package/esm/use-pagination/use-pagination.js.map +0 -1
- package/esm/use-previous/use-previous.js.map +0 -1
- package/esm/use-queue/use-queue.js.map +0 -1
- package/esm/use-reduced-motion/use-reduced-motion.js.map +0 -1
- package/esm/use-resize-observer/use-resize-observer.js.map +0 -1
- package/esm/use-scroll-into-view/use-scroll-into-view.js.map +0 -1
- package/esm/use-scroll-into-view/utils/ease-in-out-quad.js.map +0 -1
- package/esm/use-scroll-into-view/utils/get-relative-position.js.map +0 -1
- package/esm/use-scroll-into-view/utils/get-scroll-start.js.map +0 -1
- package/esm/use-scroll-into-view/utils/set-scroll-param.js.map +0 -1
- package/esm/use-session-storage/use-session-storage.js.map +0 -1
- package/esm/use-set-state/use-set-state.js.map +0 -1
- package/esm/use-shallow-effect/use-shallow-effect.js.map +0 -1
- package/esm/use-text-selection/use-text-selection.js.map +0 -1
- package/esm/use-timeout/use-timeout.js.map +0 -1
- package/esm/use-toggle/use-toggle.js.map +0 -1
- package/esm/use-uncontrolled/use-uncontrolled.js.map +0 -1
- package/esm/use-validated-state/use-validated-state.js.map +0 -1
- package/esm/use-viewport-size/use-viewport-size.js.map +0 -1
- package/esm/use-window-event/use-window-event.js.map +0 -1
- package/esm/use-window-scroll/use-window-scroll.js.map +0 -1
- package/esm/utils/clamp/clamp.js.map +0 -1
- package/esm/utils/lower-first/lower-first.js.map +0 -1
- package/esm/utils/random-id/random-id.js.map +0 -1
- package/esm/utils/range/range.js.map +0 -1
- package/esm/utils/shallow-equal/shallow-equal.js.map +0 -1
- package/esm/utils/upper-first/upper-first.js.map +0 -1
|
@@ -10,7 +10,7 @@ function useDebouncedState(defaultValue, wait, options = { leading: false }) {
|
|
|
10
10
|
const leadingRef = React.useRef(true);
|
|
11
11
|
const clearTimeout = () => window.clearTimeout(timeoutRef.current);
|
|
12
12
|
React.useEffect(() => clearTimeout, []);
|
|
13
|
-
const debouncedSetValue = (newValue) => {
|
|
13
|
+
const debouncedSetValue = React.useCallback((newValue) => {
|
|
14
14
|
clearTimeout();
|
|
15
15
|
if (leadingRef.current && options.leading) {
|
|
16
16
|
setValue(newValue);
|
|
@@ -21,7 +21,7 @@ function useDebouncedState(defaultValue, wait, options = { leading: false }) {
|
|
|
21
21
|
}, wait);
|
|
22
22
|
}
|
|
23
23
|
leadingRef.current = false;
|
|
24
|
-
};
|
|
24
|
+
}, [options.leading]);
|
|
25
25
|
return [value, debouncedSetValue];
|
|
26
26
|
}
|
|
27
27
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-debounced-state.js","sources":["../../src/use-debounced-state/use-debounced-state.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport function useDebouncedState<T = any>(\n defaultValue: T,\n wait: number,\n options = { leading: false }\n) {\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<number | null>(null);\n const leadingRef = useRef(true);\n\n const clearTimeout = () => window.clearTimeout(timeoutRef.current!);\n useEffect(() => clearTimeout, []);\n\n const debouncedSetValue = (newValue: T) => {\n clearTimeout();\n if (leadingRef.current && options.leading) {\n setValue(newValue);\n } else {\n timeoutRef.current = window.setTimeout(() => {\n leadingRef.current = true;\n setValue(newValue);\n }, wait);\n }\n leadingRef.current = false;\n };\n\n return [value, debouncedSetValue] as const;\n}\n"],"names":["useState","useRef","useEffect"],"mappings":";;;;;;AACO,SAAS,iBAAiB,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;AACpF,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAC,YAAY,CAAC,CAAC;AACnD,EAAE,MAAM,UAAU,GAAGC,YAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,UAAU,GAAGA,YAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACrE,EAAEC,eAAS,CAAC,MAAM,YAAY,EAAE,EAAE,CAAC,CAAC;AACpC,EAAE,MAAM,iBAAiB,
|
|
1
|
+
{"version":3,"file":"use-debounced-state.js","sources":["../../src/use-debounced-state/use-debounced-state.ts"],"sourcesContent":["import { useEffect, useRef, useState, useCallback } from 'react';\n\nexport function useDebouncedState<T = any>(\n defaultValue: T,\n wait: number,\n options = { leading: false }\n) {\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<number | null>(null);\n const leadingRef = useRef(true);\n\n const clearTimeout = () => window.clearTimeout(timeoutRef.current!);\n useEffect(() => clearTimeout, []);\n\n const debouncedSetValue = useCallback((newValue: T) => {\n clearTimeout();\n if (leadingRef.current && options.leading) {\n setValue(newValue);\n } else {\n timeoutRef.current = window.setTimeout(() => {\n leadingRef.current = true;\n setValue(newValue);\n }, wait);\n }\n leadingRef.current = false;\n }, [options.leading]);\n\n return [value, debouncedSetValue] as const;\n}\n"],"names":["useState","useRef","useEffect","useCallback"],"mappings":";;;;;;AACO,SAAS,iBAAiB,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;AACpF,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAC,YAAY,CAAC,CAAC;AACnD,EAAE,MAAM,UAAU,GAAGC,YAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,UAAU,GAAGA,YAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACrE,EAAEC,eAAS,CAAC,MAAM,YAAY,EAAE,EAAE,CAAC,CAAC;AACpC,EAAE,MAAM,iBAAiB,GAAGC,iBAAW,CAAC,CAAC,QAAQ,KAAK;AACtD,IAAI,YAAY,EAAE,CAAC;AACnB,IAAI,IAAI,UAAU,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;AAC/C,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzB,KAAK,MAAM;AACX,MAAM,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AACnD,QAAQ,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;AAClC,QAAQ,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3B,OAAO,EAAE,IAAI,CAAC,CAAC;AACf,KAAK;AACL,IAAI,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;AAC/B,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AACxB,EAAE,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACpC;;;;"}
|
|
@@ -19,8 +19,36 @@ function deserializeJSON(value) {
|
|
|
19
19
|
return value;
|
|
20
20
|
}
|
|
21
21
|
}
|
|
22
|
+
function createStorageHandler(type) {
|
|
23
|
+
const getItem = (key) => {
|
|
24
|
+
try {
|
|
25
|
+
return window[type].getItem(key);
|
|
26
|
+
} catch (error) {
|
|
27
|
+
console.warn("use-local-storage: Failed to get value from storage, localStorage is blocked");
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
};
|
|
31
|
+
const setItem = (key, value) => {
|
|
32
|
+
try {
|
|
33
|
+
window[type].setItem(key, value);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
console.warn("use-local-storage: Failed to set value to storage, localStorage is blocked");
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const removeItem = (key) => {
|
|
39
|
+
try {
|
|
40
|
+
window[type].removeItem(key);
|
|
41
|
+
} catch (error) {
|
|
42
|
+
console.warn(
|
|
43
|
+
"use-local-storage: Failed to remove value from storage, localStorage is blocked"
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
return { getItem, setItem, removeItem };
|
|
48
|
+
}
|
|
22
49
|
function createStorage(type, hookName) {
|
|
23
50
|
const eventName = type === "localStorage" ? "mantine-local-storage" : "mantine-session-storage";
|
|
51
|
+
const { getItem, setItem, removeItem } = createStorageHandler(type);
|
|
24
52
|
return function useStorage({
|
|
25
53
|
key,
|
|
26
54
|
defaultValue = void 0,
|
|
@@ -33,7 +61,7 @@ function createStorage(type, hookName) {
|
|
|
33
61
|
if (typeof window === "undefined" || !(type in window) || window[type] === null || skipStorage) {
|
|
34
62
|
return defaultValue;
|
|
35
63
|
}
|
|
36
|
-
const storageValue =
|
|
64
|
+
const storageValue = getItem(key);
|
|
37
65
|
return storageValue !== null ? deserialize(storageValue) : defaultValue;
|
|
38
66
|
},
|
|
39
67
|
[key, defaultValue]
|
|
@@ -44,14 +72,14 @@ function createStorage(type, hookName) {
|
|
|
44
72
|
if (val instanceof Function) {
|
|
45
73
|
setValue((current) => {
|
|
46
74
|
const result = val(current);
|
|
47
|
-
|
|
75
|
+
setItem(key, serialize(result));
|
|
48
76
|
window.dispatchEvent(
|
|
49
77
|
new CustomEvent(eventName, { detail: { key, value: val(current) } })
|
|
50
78
|
);
|
|
51
79
|
return result;
|
|
52
80
|
});
|
|
53
81
|
} else {
|
|
54
|
-
|
|
82
|
+
setItem(key, serialize(val));
|
|
55
83
|
window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: val } }));
|
|
56
84
|
setValue(val);
|
|
57
85
|
}
|
|
@@ -59,7 +87,7 @@ function createStorage(type, hookName) {
|
|
|
59
87
|
[key]
|
|
60
88
|
);
|
|
61
89
|
const removeStorageValue = React.useCallback(() => {
|
|
62
|
-
|
|
90
|
+
removeItem(key);
|
|
63
91
|
window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: defaultValue } }));
|
|
64
92
|
}, []);
|
|
65
93
|
useWindowEvent.useWindowEvent("storage", (event) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-storage.js","sources":["../../src/use-local-storage/create-storage.ts"],"sourcesContent":["
|
|
1
|
+
{"version":3,"file":"create-storage.js","sources":["../../src/use-local-storage/create-storage.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { useState, useCallback, useEffect } from 'react';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\nexport type StorageType = 'localStorage' | 'sessionStorage';\n\nexport interface StorageProperties<T> {\n /** Storage key */\n key: string;\n\n /** Default value that will be set if value is not found in storage */\n defaultValue?: T;\n\n /** If set to true, value will be update is useEffect after mount */\n getInitialValueInEffect?: boolean;\n\n /** Function to serialize value into string to be save in storage */\n serialize?(value: T): string;\n\n /** Function to deserialize string value from storage to value */\n deserialize?(value: string | undefined): T;\n}\n\nfunction serializeJSON<T>(value: T, hookName: string) {\n try {\n return JSON.stringify(value);\n } catch (error) {\n throw new Error(`@mantine/hooks ${hookName}: Failed to serialize the value`);\n }\n}\n\nfunction deserializeJSON(value: string) {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\nfunction createStorageHandler(type: StorageType) {\n const getItem = (key: string) => {\n try {\n return window[type].getItem(key);\n } catch (error) {\n console.warn('use-local-storage: Failed to get value from storage, localStorage is blocked');\n return null;\n }\n };\n\n const setItem = (key: string, value: string) => {\n try {\n window[type].setItem(key, value);\n } catch (error) {\n console.warn('use-local-storage: Failed to set value to storage, localStorage is blocked');\n }\n };\n\n const removeItem = (key: string) => {\n try {\n window[type].removeItem(key);\n } catch (error) {\n console.warn(\n 'use-local-storage: Failed to remove value from storage, localStorage is blocked'\n );\n }\n };\n\n return { getItem, setItem, removeItem };\n}\n\nexport function createStorage<T>(type: StorageType, hookName: string) {\n const eventName = type === 'localStorage' ? 'mantine-local-storage' : 'mantine-session-storage';\n const { getItem, setItem, removeItem } = createStorageHandler(type);\n\n return function useStorage({\n key,\n defaultValue = undefined,\n getInitialValueInEffect = true,\n deserialize = deserializeJSON,\n serialize = (value: T) => serializeJSON(value, hookName),\n }: StorageProperties<T>) {\n const readStorageValue = useCallback(\n (skipStorage?: boolean): T => {\n if (\n typeof window === 'undefined' ||\n !(type in window) ||\n window[type] === null ||\n skipStorage\n ) {\n return defaultValue as T;\n }\n\n const storageValue = getItem(key);\n return storageValue !== null ? deserialize(storageValue) : (defaultValue as T);\n },\n [key, defaultValue]\n );\n\n const [value, setValue] = useState<T>(readStorageValue(getInitialValueInEffect));\n\n const setStorageValue = useCallback(\n (val: T | ((prevState: T) => T)) => {\n if (val instanceof Function) {\n setValue((current) => {\n const result = val(current);\n setItem(key, serialize(result));\n window.dispatchEvent(\n new CustomEvent(eventName, { detail: { key, value: val(current) } })\n );\n return result;\n });\n } else {\n setItem(key, serialize(val));\n window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: val } }));\n setValue(val);\n }\n },\n [key]\n );\n\n const removeStorageValue = useCallback(() => {\n removeItem(key);\n window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: defaultValue } }));\n }, []);\n\n useWindowEvent('storage', (event) => {\n if (event.storageArea === window[type] && event.key === key) {\n setValue(deserialize(event.newValue ?? undefined));\n }\n });\n\n useWindowEvent(eventName, (event) => {\n if (event.detail.key === key) {\n setValue(event.detail.value);\n }\n });\n\n useEffect(() => {\n if (defaultValue !== undefined && value === undefined) {\n setStorageValue(defaultValue);\n }\n }, [defaultValue, value, setStorageValue]);\n\n useEffect(() => {\n if (getInitialValueInEffect) {\n setValue(readStorageValue());\n }\n }, []);\n\n return [\n value === undefined ? defaultValue : value,\n setStorageValue,\n removeStorageValue,\n ] as const;\n };\n}\n"],"names":["useCallback","useState","useWindowEvent","useEffect"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-local-storage.js","sources":["../../src/use-local-storage/use-local-storage.ts"],"sourcesContent":["import { createStorage,
|
|
1
|
+
{"version":3,"file":"use-local-storage.js","sources":["../../src/use-local-storage/use-local-storage.ts"],"sourcesContent":["import { createStorage, StorageProperties } from './create-storage';\n\nexport function useLocalStorage<T = string>(props: StorageProperties<T>) {\n return createStorage<T>('localStorage', 'use-local-storage')(props);\n}\n"],"names":["createStorage"],"mappings":";;;;;;AACO,SAAS,eAAe,CAAC,KAAK,EAAE;AACvC,EAAE,OAAOA,2BAAa,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC;AACnE;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"use-session-storage.js","sources":["../../src/use-session-storage/use-session-storage.ts"],"sourcesContent":["import { createStorage,
|
|
1
|
+
{"version":3,"file":"use-session-storage.js","sources":["../../src/use-session-storage/use-session-storage.ts"],"sourcesContent":["import { createStorage, StorageProperties } from '../use-local-storage/create-storage';\n\nexport function useSessionStorage<T = string>(props: StorageProperties<T>) {\n return createStorage<T>('sessionStorage', 'use-session-storage')(props);\n}\n"],"names":["createStorage"],"mappings":";;;;;;AACO,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACzC,EAAE,OAAOA,2BAAa,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,KAAK,CAAC,CAAC;AACvE;;;;"}
|
package/esm/index.mjs
ADDED
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
export { useCallbackRef } from './use-callback-ref/use-callback-ref.mjs';
|
|
2
|
+
export { useDebounceCallback } from './use-debounced-callback/use-debounced-callback.mjs';
|
|
3
|
+
export { useClickOutside } from './use-click-outside/use-click-outside.mjs';
|
|
4
|
+
export { useClipboard } from './use-clipboard/use-clipboard.mjs';
|
|
5
|
+
export { useColorScheme } from './use-color-scheme/use-color-scheme.mjs';
|
|
6
|
+
export { useCounter } from './use-counter/use-counter.mjs';
|
|
7
|
+
export { useDebouncedState } from './use-debounced-state/use-debounced-state.mjs';
|
|
8
|
+
export { useDebouncedValue } from './use-debounced-value/use-debounced-value.mjs';
|
|
9
|
+
export { useDocumentTitle } from './use-document-title/use-document-title.mjs';
|
|
10
|
+
export { useDocumentVisibility } from './use-document-visibility/use-document-visibility.mjs';
|
|
11
|
+
export { useFocusReturn } from './use-focus-return/use-focus-return.mjs';
|
|
12
|
+
export { useDidUpdate } from './use-did-update/use-did-update.mjs';
|
|
13
|
+
export { useFocusTrap } from './use-focus-trap/use-focus-trap.mjs';
|
|
14
|
+
export { useForceUpdate } from './use-force-update/use-force-update.mjs';
|
|
15
|
+
export { useId } from './use-id/use-id.mjs';
|
|
16
|
+
export { useIdle } from './use-idle/use-idle.mjs';
|
|
17
|
+
export { useInterval } from './use-interval/use-interval.mjs';
|
|
18
|
+
export { useIsomorphicEffect } from './use-isomorphic-effect/use-isomorphic-effect.mjs';
|
|
19
|
+
export { useListState } from './use-list-state/use-list-state.mjs';
|
|
20
|
+
export { useLocalStorage } from './use-local-storage/use-local-storage.mjs';
|
|
21
|
+
export { useSessionStorage } from './use-session-storage/use-session-storage.mjs';
|
|
22
|
+
export { useMediaQuery } from './use-media-query/use-media-query.mjs';
|
|
23
|
+
export { assignRef, mergeRefs, useMergedRef } from './use-merged-ref/use-merged-ref.mjs';
|
|
24
|
+
export { useMouse } from './use-mouse/use-mouse.mjs';
|
|
25
|
+
export { clampUseMovePosition, useMove } from './use-move/use-move.mjs';
|
|
26
|
+
export { usePagination } from './use-pagination/use-pagination.mjs';
|
|
27
|
+
export { useQueue } from './use-queue/use-queue.mjs';
|
|
28
|
+
export { usePageLeave } from './use-page-leave/use-page-leave.mjs';
|
|
29
|
+
export { useReducedMotion } from './use-reduced-motion/use-reduced-motion.mjs';
|
|
30
|
+
export { useScrollIntoView } from './use-scroll-into-view/use-scroll-into-view.mjs';
|
|
31
|
+
export { useElementSize, useResizeObserver } from './use-resize-observer/use-resize-observer.mjs';
|
|
32
|
+
export { useShallowEffect } from './use-shallow-effect/use-shallow-effect.mjs';
|
|
33
|
+
export { useToggle } from './use-toggle/use-toggle.mjs';
|
|
34
|
+
export { useUncontrolled } from './use-uncontrolled/use-uncontrolled.mjs';
|
|
35
|
+
export { useViewportSize } from './use-viewport-size/use-viewport-size.mjs';
|
|
36
|
+
export { useWindowEvent } from './use-window-event/use-window-event.mjs';
|
|
37
|
+
export { useWindowScroll } from './use-window-scroll/use-window-scroll.mjs';
|
|
38
|
+
export { useIntersection } from './use-intersection/use-intersection.mjs';
|
|
39
|
+
export { useHash } from './use-hash/use-hash.mjs';
|
|
40
|
+
export { useHotkeys } from './use-hotkeys/use-hotkeys.mjs';
|
|
41
|
+
export { useFullscreen } from './use-fullscreen/use-fullscreen.mjs';
|
|
42
|
+
export { useLogger } from './use-logger/use-logger.mjs';
|
|
43
|
+
export { useHover } from './use-hover/use-hover.mjs';
|
|
44
|
+
export { useValidatedState } from './use-validated-state/use-validated-state.mjs';
|
|
45
|
+
export { useOs } from './use-os/use-os.mjs';
|
|
46
|
+
export { useSetState } from './use-set-state/use-set-state.mjs';
|
|
47
|
+
export { useInputState } from './use-input-state/use-input-state.mjs';
|
|
48
|
+
export { useEventListener } from './use-event-listener/use-event-listener.mjs';
|
|
49
|
+
export { useDisclosure } from './use-disclosure/use-disclosure.mjs';
|
|
50
|
+
export { useFocusWithin } from './use-focus-within/use-focus-within.mjs';
|
|
51
|
+
export { useNetwork } from './use-network/use-network.mjs';
|
|
52
|
+
export { useTimeout } from './use-timeout/use-timeout.mjs';
|
|
53
|
+
export { useTextSelection } from './use-text-selection/use-text-selection.mjs';
|
|
54
|
+
export { usePrevious } from './use-previous/use-previous.mjs';
|
|
55
|
+
export { useFavicon } from './use-favicon/use-favicon.mjs';
|
|
56
|
+
export { useHeadroom } from './use-headroom/use-headroom.mjs';
|
|
57
|
+
export { useEyeDropper } from './use-eye-dropper/use-eye-dropper.mjs';
|
|
58
|
+
export { getHotkeyHandler } from './use-hotkeys/parse-hotkey.mjs';
|
|
59
|
+
export { clamp } from './utils/clamp/clamp.mjs';
|
|
60
|
+
export { lowerFirst } from './utils/lower-first/lower-first.mjs';
|
|
61
|
+
export { randomId } from './utils/random-id/random-id.mjs';
|
|
62
|
+
export { range } from './utils/range/range.mjs';
|
|
63
|
+
export { shallowEqual } from './utils/shallow-equal/shallow-equal.mjs';
|
|
64
|
+
export { upperFirst } from './utils/upper-first/upper-first.mjs';
|
|
65
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-callback-ref.mjs","sources":["../../src/use-callback-ref/use-callback-ref.ts"],"sourcesContent":["import { useRef, useEffect, useMemo } from 'react';\n\nexport function useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n });\n\n return useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n"],"names":[],"mappings":";;AACO,SAAS,cAAc,CAAC,QAAQ,EAAE;AACzC,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvC,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;AACnC,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK;AACpC,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,OAAO,CAAC,EAAE,GAAG,WAAW,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;AACvF,GAAG,EAAE,EAAE,CAAC,CAAC;AACT;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-click-outside.mjs","sources":["../../src/use-click-outside/use-click-outside.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nconst DEFAULT_EVENTS = ['mousedown', 'touchstart'];\n\nexport function useClickOutside<T extends HTMLElement = any>(\n handler: () => void,\n events?: string[] | null,\n nodes?: (HTMLElement | null)[]\n) {\n const ref = useRef<T>();\n\n useEffect(() => {\n const listener = (event: any) => {\n const { target } = event ?? {};\n if (Array.isArray(nodes)) {\n const shouldIgnore =\n target?.hasAttribute('data-ignore-outside-clicks') ||\n (!document.body.contains(target) && target.tagName !== 'HTML');\n const shouldTrigger = nodes.every((node) => !!node && !event.composedPath().includes(node));\n shouldTrigger && !shouldIgnore && handler();\n } else if (ref.current && !ref.current.contains(target)) {\n handler();\n }\n };\n\n (events || DEFAULT_EVENTS).forEach((fn) => document.addEventListener(fn, listener));\n\n return () => {\n (events || DEFAULT_EVENTS).forEach((fn) => document.removeEventListener(fn, listener));\n };\n }, [ref, handler, nodes]);\n\n return ref;\n}\n"],"names":[],"mappings":";;AACA,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAC5C,SAAS,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;AACxD,EAAE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;AACvB,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK;AAChC,MAAM,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;AACpD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAChC,QAAQ,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,4BAA4B,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC;AAC3K,QAAQ,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACpG,QAAQ,aAAa,IAAI,CAAC,YAAY,IAAI,OAAO,EAAE,CAAC;AACpD,OAAO,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC/D,QAAQ,OAAO,EAAE,CAAC;AAClB,OAAO;AACP,KAAK,CAAC;AACN,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxF,IAAI,OAAO,MAAM;AACjB,MAAM,CAAC,MAAM,IAAI,cAAc,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7F,KAAK,CAAC;AACN,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5B,EAAE,OAAO,GAAG,CAAC;AACb;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-clipboard.mjs","sources":["../../src/use-clipboard/use-clipboard.ts"],"sourcesContent":["import { useState } from 'react';\n\nexport function useClipboard({ timeout = 2000 } = {}) {\n const [error, setError] = useState<Error | null>(null);\n const [copied, setCopied] = useState(false);\n const [copyTimeout, setCopyTimeout] = useState<number | null>(null);\n\n const handleCopyResult = (value: boolean) => {\n window.clearTimeout(copyTimeout!);\n setCopyTimeout(window.setTimeout(() => setCopied(false), timeout));\n setCopied(value);\n };\n\n const copy = (valueToCopy: any) => {\n if ('clipboard' in navigator) {\n navigator.clipboard\n .writeText(valueToCopy)\n .then(() => handleCopyResult(true))\n .catch((err) => setError(err));\n } else {\n setError(new Error('useClipboard: navigator.clipboard is not supported'));\n }\n };\n\n const reset = () => {\n setCopied(false);\n setError(null);\n window.clearTimeout(copyTimeout!);\n };\n\n return { copy, reset, error, copied };\n}\n"],"names":[],"mappings":";;AACO,SAAS,YAAY,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE;AACrD,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3C,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9C,EAAE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvD,EAAE,MAAM,gBAAgB,GAAG,CAAC,KAAK,KAAK;AACtC,IAAI,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AACrC,IAAI,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACvE,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,GAAG,CAAC;AACJ,EAAE,MAAM,IAAI,GAAG,CAAC,WAAW,KAAK;AAChC,IAAI,IAAI,WAAW,IAAI,SAAS,EAAE;AAClC,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAClH,KAAK,MAAM;AACX,MAAM,QAAQ,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAC;AAChF,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,KAAK,GAAG,MAAM;AACtB,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnB,IAAI,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AACrC,GAAG,CAAC;AACJ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACxC;;;;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { useMediaQuery } from '../use-media-query/use-media-query.
|
|
1
|
+
import { useMediaQuery } from '../use-media-query/use-media-query.mjs';
|
|
2
2
|
|
|
3
3
|
function useColorScheme(initialValue, options) {
|
|
4
4
|
return useMediaQuery("(prefers-color-scheme: dark)", initialValue === "dark", options) ? "dark" : "light";
|
|
5
5
|
}
|
|
6
6
|
|
|
7
7
|
export { useColorScheme };
|
|
8
|
-
//# sourceMappingURL=use-color-scheme.
|
|
8
|
+
//# sourceMappingURL=use-color-scheme.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-color-scheme.mjs","sources":["../../src/use-color-scheme/use-color-scheme.ts"],"sourcesContent":["import { useMediaQuery, UseMediaQueryOptions } from '../use-media-query/use-media-query';\n\nexport function useColorScheme(initialValue?: 'dark' | 'light', options?: UseMediaQueryOptions) {\n return useMediaQuery('(prefers-color-scheme: dark)', initialValue === 'dark', options)\n ? 'dark'\n : 'light';\n}\n"],"names":[],"mappings":";;AACO,SAAS,cAAc,CAAC,YAAY,EAAE,OAAO,EAAE;AACtD,EAAE,OAAO,aAAa,CAAC,8BAA8B,EAAE,YAAY,KAAK,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC;AAC5G;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState } from 'react';
|
|
2
|
-
import { clamp } from '../utils/clamp/clamp.
|
|
2
|
+
import { clamp } from '../utils/clamp/clamp.mjs';
|
|
3
3
|
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
5
5
|
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
@@ -32,4 +32,4 @@ function useCounter(initialValue = 0, options) {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
export { useCounter };
|
|
35
|
-
//# sourceMappingURL=use-counter.
|
|
35
|
+
//# sourceMappingURL=use-counter.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-counter.mjs","sources":["../../src/use-counter/use-counter.ts"],"sourcesContent":["import { useState } from 'react';\nimport { clamp } from '../utils';\n\nconst DEFAULT_OPTIONS = {\n min: -Infinity,\n max: Infinity,\n};\n\nexport function useCounter(initialValue = 0, options?: Partial<{ min: number; max: number }>) {\n const { min, max } = { ...DEFAULT_OPTIONS, ...options };\n const [count, setCount] = useState<number>(clamp(initialValue, min, max));\n\n const increment = () => setCount((current) => clamp(current + 1, min, max));\n const decrement = () => setCount((current) => clamp(current - 1, min, max));\n const set = (value: number) => setCount(clamp(value, min, max));\n const reset = () => setCount(clamp(initialValue, min, max));\n\n return [count, { increment, decrement, set, reset }] as const;\n}\n"],"names":[],"mappings":";;;AAAA,IAAI,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;AACtC,IAAI,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACvD,IAAI,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;AACnD,IAAI,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC;AACzD,IAAI,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,KAAK,GAAG,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAChK,IAAI,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK;AAC/B,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AAChC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AAClC,MAAM,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,EAAE,IAAI,mBAAmB;AACzB,IAAI,KAAK,IAAI,IAAI,IAAI,mBAAmB,CAAC,CAAC,CAAC,EAAE;AAC7C,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AACpC,QAAQ,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,KAAK;AACL,EAAE,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAGF,MAAM,eAAe,GAAG;AACxB,EAAE,GAAG,EAAE,CAAC,QAAQ;AAChB,EAAE,GAAG,EAAE,QAAQ;AACf,CAAC,CAAC;AACK,SAAS,UAAU,CAAC,YAAY,GAAG,CAAC,EAAE,OAAO,EAAE;AACtD,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,cAAc,CAAC,cAAc,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;AACpF,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACpE,EAAE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9E,EAAE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9E,EAAE,MAAM,GAAG,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D,EAAE,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9D,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useRef, useEffect, useCallback } from 'react';
|
|
2
|
-
import { useCallbackRef } from '../use-callback-ref/use-callback-ref.
|
|
2
|
+
import { useCallbackRef } from '../use-callback-ref/use-callback-ref.mjs';
|
|
3
3
|
|
|
4
4
|
function useDebounceCallback(callback, delay) {
|
|
5
5
|
const handleCallback = useCallbackRef(callback);
|
|
@@ -12,4 +12,4 @@ function useDebounceCallback(callback, delay) {
|
|
|
12
12
|
}
|
|
13
13
|
|
|
14
14
|
export { useDebounceCallback };
|
|
15
|
-
//# sourceMappingURL=use-debounced-callback.
|
|
15
|
+
//# sourceMappingURL=use-debounced-callback.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-debounced-callback.mjs","sources":["../../src/use-debounced-callback/use-debounced-callback.ts"],"sourcesContent":["import { useRef, useEffect, useCallback } from 'react';\nimport { useCallbackRef } from '../use-callback-ref/use-callback-ref';\n\nexport function useDebounceCallback(callback: () => void, delay: number) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = useRef(0);\n useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n return useCallback(() => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n }, [handleCallback, delay]);\n}\n"],"names":[],"mappings":";;;AAEO,SAAS,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE;AACrD,EAAE,MAAM,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClD,EAAE,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACrC,EAAE,SAAS,CAAC,MAAM,MAAM,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3E,EAAE,OAAO,WAAW,CAAC,MAAM;AAC3B,IAAI,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAClD,IAAI,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AACxE,GAAG,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9B;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useState, useRef, useEffect } from 'react';
|
|
1
|
+
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
2
2
|
|
|
3
3
|
function useDebouncedState(defaultValue, wait, options = { leading: false }) {
|
|
4
4
|
const [value, setValue] = useState(defaultValue);
|
|
@@ -6,7 +6,7 @@ function useDebouncedState(defaultValue, wait, options = { leading: false }) {
|
|
|
6
6
|
const leadingRef = useRef(true);
|
|
7
7
|
const clearTimeout = () => window.clearTimeout(timeoutRef.current);
|
|
8
8
|
useEffect(() => clearTimeout, []);
|
|
9
|
-
const debouncedSetValue = (newValue) => {
|
|
9
|
+
const debouncedSetValue = useCallback((newValue) => {
|
|
10
10
|
clearTimeout();
|
|
11
11
|
if (leadingRef.current && options.leading) {
|
|
12
12
|
setValue(newValue);
|
|
@@ -17,9 +17,9 @@ function useDebouncedState(defaultValue, wait, options = { leading: false }) {
|
|
|
17
17
|
}, wait);
|
|
18
18
|
}
|
|
19
19
|
leadingRef.current = false;
|
|
20
|
-
};
|
|
20
|
+
}, [options.leading]);
|
|
21
21
|
return [value, debouncedSetValue];
|
|
22
22
|
}
|
|
23
23
|
|
|
24
24
|
export { useDebouncedState };
|
|
25
|
-
//# sourceMappingURL=use-debounced-state.
|
|
25
|
+
//# sourceMappingURL=use-debounced-state.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-debounced-state.mjs","sources":["../../src/use-debounced-state/use-debounced-state.ts"],"sourcesContent":["import { useEffect, useRef, useState, useCallback } from 'react';\n\nexport function useDebouncedState<T = any>(\n defaultValue: T,\n wait: number,\n options = { leading: false }\n) {\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<number | null>(null);\n const leadingRef = useRef(true);\n\n const clearTimeout = () => window.clearTimeout(timeoutRef.current!);\n useEffect(() => clearTimeout, []);\n\n const debouncedSetValue = useCallback((newValue: T) => {\n clearTimeout();\n if (leadingRef.current && options.leading) {\n setValue(newValue);\n } else {\n timeoutRef.current = window.setTimeout(() => {\n leadingRef.current = true;\n setValue(newValue);\n }, wait);\n }\n leadingRef.current = false;\n }, [options.leading]);\n\n return [value, debouncedSetValue] as const;\n}\n"],"names":[],"mappings":";;AACO,SAAS,iBAAiB,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;AACpF,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;AACnD,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACrE,EAAE,SAAS,CAAC,MAAM,YAAY,EAAE,EAAE,CAAC,CAAC;AACpC,EAAE,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,QAAQ,KAAK;AACtD,IAAI,YAAY,EAAE,CAAC;AACnB,IAAI,IAAI,UAAU,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;AAC/C,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzB,KAAK,MAAM;AACX,MAAM,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AACnD,QAAQ,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;AAClC,QAAQ,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3B,OAAO,EAAE,IAAI,CAAC,CAAC;AACf,KAAK;AACL,IAAI,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;AAC/B,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC;AACxB,EAAE,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACpC;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-debounced-value.mjs","sources":["../../src/use-debounced-value/use-debounced-value.ts"],"sourcesContent":["import { useEffect, useState, useRef } from 'react';\n\nexport function useDebouncedValue<T = any>(value: T, wait: number, options = { leading: false }) {\n const [_value, setValue] = useState(value);\n const mountedRef = useRef(false);\n const timeoutRef = useRef<number | null>(null);\n const cooldownRef = useRef(false);\n\n const cancel = () => window.clearTimeout(timeoutRef.current!);\n\n useEffect(() => {\n if (mountedRef.current) {\n if (!cooldownRef.current && options.leading) {\n cooldownRef.current = true;\n setValue(value);\n } else {\n cancel();\n timeoutRef.current = window.setTimeout(() => {\n cooldownRef.current = false;\n setValue(value);\n }, wait);\n }\n }\n }, [value, options.leading, wait]);\n\n useEffect(() => {\n mountedRef.current = true;\n return cancel;\n }, []);\n\n return [_value, cancel] as const;\n}\n"],"names":[],"mappings":";;AACO,SAAS,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;AAC7E,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7C,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACnC,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,EAAE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC/D,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE;AAC5B,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;AACnD,QAAQ,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;AACnC,QAAQ,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxB,OAAO,MAAM;AACb,QAAQ,MAAM,EAAE,CAAC;AACjB,QAAQ,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AACrD,UAAU,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;AACtC,UAAU,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAS,EAAE,IAAI,CAAC,CAAC;AACjB,OAAO;AACP,KAAK;AACL,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AACrC,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;AAC9B,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1B;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-did-update.mjs","sources":["../../src/use-did-update/use-did-update.ts"],"sourcesContent":["import { useEffect, useRef, EffectCallback, DependencyList } from 'react';\n\nexport function useDidUpdate(fn: EffectCallback, dependencies?: DependencyList) {\n const mounted = useRef(false);\n\n useEffect(\n () => () => {\n mounted.current = false;\n },\n []\n );\n\n useEffect(() => {\n if (mounted.current) {\n return fn();\n }\n\n mounted.current = true;\n return undefined;\n }, dependencies);\n}\n"],"names":[],"mappings":";;AACO,SAAS,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE;AAC/C,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAChC,EAAE,SAAS;AACX,IAAI,MAAM,MAAM;AAChB,MAAM,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;AAC9B,KAAK;AACL,IAAI,EAAE;AACN,GAAG,CAAC;AACJ,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE;AACzB,MAAM,OAAO,EAAE,EAAE,CAAC;AAClB,KAAK;AACL,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;AAC3B,IAAI,OAAO,KAAK,CAAC,CAAC;AAClB,GAAG,EAAE,YAAY,CAAC,CAAC;AACnB;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-disclosure.mjs","sources":["../../src/use-disclosure/use-disclosure.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\n\nexport function useDisclosure(\n initialState = false,\n callbacks?: { onOpen?(): void; onClose?(): void }\n) {\n const { onOpen, onClose } = callbacks || {};\n const [opened, setOpened] = useState(initialState);\n\n const open = useCallback(() => {\n setOpened((isOpened) => {\n if (!isOpened) {\n onOpen?.();\n return true;\n }\n return isOpened;\n });\n }, [onOpen]);\n\n const close = useCallback(() => {\n setOpened((isOpened) => {\n if (isOpened) {\n onClose?.();\n return false;\n }\n return isOpened;\n });\n }, [onClose]);\n\n const toggle = useCallback(() => {\n opened ? close() : open();\n }, [close, open, opened]);\n\n return [opened, { open, close, toggle }] as const;\n}\n"],"names":[],"mappings":";;AACO,SAAS,aAAa,CAAC,YAAY,GAAG,KAAK,EAAE,SAAS,EAAE;AAC/D,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,IAAI,EAAE,CAAC;AAC9C,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;AACrD,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM;AACjC,IAAI,SAAS,CAAC,CAAC,QAAQ,KAAK;AAC5B,MAAM,IAAI,CAAC,QAAQ,EAAE;AACrB,QAAQ,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC;AAC3C,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO;AACP,MAAM,OAAO,QAAQ,CAAC;AACtB,KAAK,CAAC,CAAC;AACP,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACf,EAAE,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM;AAClC,IAAI,SAAS,CAAC,CAAC,QAAQ,KAAK;AAC5B,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,OAAO,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,EAAE,CAAC;AAC7C,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,MAAM,OAAO,QAAQ,CAAC;AACtB,KAAK,CAAC,CAAC;AACP,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAChB,EAAE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM;AACnC,IAAI,MAAM,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC;AAC9B,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5B,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3C;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.
|
|
1
|
+
import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.mjs';
|
|
2
2
|
|
|
3
3
|
function useDocumentTitle(title) {
|
|
4
4
|
useIsomorphicEffect(() => {
|
|
@@ -9,4 +9,4 @@ function useDocumentTitle(title) {
|
|
|
9
9
|
}
|
|
10
10
|
|
|
11
11
|
export { useDocumentTitle };
|
|
12
|
-
//# sourceMappingURL=use-document-title.
|
|
12
|
+
//# sourceMappingURL=use-document-title.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-document-title.mjs","sources":["../../src/use-document-title/use-document-title.ts"],"sourcesContent":["import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nexport function useDocumentTitle(title: string) {\n useIsomorphicEffect(() => {\n if (typeof title === 'string' && title.trim().length > 0) {\n document.title = title.trim();\n }\n }, [title]);\n}\n"],"names":[],"mappings":";;AACO,SAAS,gBAAgB,CAAC,KAAK,EAAE;AACxC,EAAE,mBAAmB,CAAC,MAAM;AAC5B,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9D,MAAM,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACpC,KAAK;AACL,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-document-visibility.mjs","sources":["../../src/use-document-visibility/use-document-visibility.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDocumentVisibility(): DocumentVisibilityState {\n const [documentVisibility, setDocumentVisibility] = useState<DocumentVisibilityState>('visible');\n\n useEffect(() => {\n const listener = () => setDocumentVisibility(document.visibilityState);\n document.addEventListener('visibilitychange', listener);\n return () => document.removeEventListener('visibilitychange', listener);\n }, []);\n\n return documentVisibility;\n}\n"],"names":[],"mappings":";;AACO,SAAS,qBAAqB,GAAG;AACxC,EAAE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC1E,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC3E,IAAI,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAC5D,IAAI,OAAO,MAAM,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAC5E,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAE,OAAO,kBAAkB,CAAC;AAC5B;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-event-listener.mjs","sources":["../../src/use-event-listener/use-event-listener.ts"],"sourcesContent":["import { useRef, useEffect } from 'react';\n\nexport function useEventListener<K extends keyof HTMLElementEventMap, T extends HTMLElement = any>(\n type: K,\n listener: (this: HTMLDivElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n) {\n const ref = useRef<T>();\n\n useEffect(() => {\n if (ref.current) {\n ref.current.addEventListener(type, listener as any, options);\n return () => ref.current?.removeEventListener(type, listener as any, options);\n }\n return undefined;\n }, [listener, options]);\n\n return ref;\n}\n"],"names":[],"mappings":";;AACO,SAAS,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC1D,EAAE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;AACvB,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE;AACrB,MAAM,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5D,MAAM,OAAO,MAAM;AACnB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACrG,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,CAAC;AAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1B,EAAE,OAAO,GAAG,CAAC;AACb;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState, useCallback } from 'react';
|
|
2
|
-
import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.
|
|
2
|
+
import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.mjs';
|
|
3
3
|
|
|
4
4
|
function useEyeDropper() {
|
|
5
5
|
const [supported, setSupported] = useState(false);
|
|
@@ -20,4 +20,4 @@ function useEyeDropper() {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export { useEyeDropper };
|
|
23
|
-
//# sourceMappingURL=use-eye-dropper.
|
|
23
|
+
//# sourceMappingURL=use-eye-dropper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-eye-dropper.mjs","sources":["../../src/use-eye-dropper/use-eye-dropper.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\ninterface EyeDropperOpenOptions {\n signal?: AbortSignal;\n}\n\nexport interface EyeDropperOpenReturnType {\n sRGBHex: string;\n}\n\nexport function useEyeDropper() {\n const [supported, setSupported] = useState(false);\n\n useIsomorphicEffect(() => {\n setSupported(typeof window !== 'undefined' && 'EyeDropper' in window);\n }, []);\n\n const open = useCallback(\n (options: EyeDropperOpenOptions = {}): Promise<EyeDropperOpenReturnType | undefined> => {\n if (supported) {\n const eyeDropper = new (window as any).EyeDropper();\n return eyeDropper.open(options);\n }\n\n return Promise.resolve(undefined);\n },\n [supported]\n );\n\n return { supported, open };\n}\n"],"names":[],"mappings":";;;AAEO,SAAS,aAAa,GAAG;AAChC,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpD,EAAE,mBAAmB,CAAC,MAAM;AAC5B,IAAI,YAAY,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,IAAI,MAAM,CAAC,CAAC;AAC1E,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAE,MAAM,IAAI,GAAG,WAAW;AAC1B,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK;AACtB,MAAM,IAAI,SAAS,EAAE;AACrB,QAAQ,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;AACnD,QAAQ,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,OAAO;AACP,MAAM,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,KAAK;AACL,IAAI,CAAC,SAAS,CAAC;AACf,GAAG,CAAC;AACJ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useRef } from 'react';
|
|
2
|
-
import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.
|
|
2
|
+
import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.mjs';
|
|
3
3
|
|
|
4
4
|
const MIME_TYPES = {
|
|
5
5
|
ico: "image/x-icon",
|
|
@@ -32,4 +32,4 @@ function useFavicon(url) {
|
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
export { useFavicon };
|
|
35
|
-
//# sourceMappingURL=use-favicon.
|
|
35
|
+
//# sourceMappingURL=use-favicon.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-favicon.mjs","sources":["../../src/use-favicon/use-favicon.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nconst MIME_TYPES = {\n ico: 'image/x-icon',\n png: 'image/png',\n svg: 'image/svg+xml',\n gif: 'image/gif',\n};\n\nexport function useFavicon(url: string) {\n const link = useRef<HTMLLinkElement>();\n\n useIsomorphicEffect(() => {\n if (!url) {\n return;\n }\n\n if (!link.current) {\n const existingElements = document.querySelectorAll<HTMLLinkElement>('link[rel*=\"icon\"]');\n existingElements.forEach((element) => document.head.removeChild(element));\n\n const element = document.createElement('link');\n element.rel = 'shortcut icon';\n link.current = element;\n document.querySelector('head')!.appendChild(element);\n }\n\n const splittedUrl = url.split('.');\n link.current.setAttribute(\n 'type',\n // @ts-ignore\n MIME_TYPES[splittedUrl[splittedUrl.length - 1].toLowerCase()]\n );\n link.current.setAttribute('href', url);\n }, [url]);\n}\n"],"names":[],"mappings":";;;AAEA,MAAM,UAAU,GAAG;AACnB,EAAE,GAAG,EAAE,cAAc;AACrB,EAAE,GAAG,EAAE,WAAW;AAClB,EAAE,GAAG,EAAE,eAAe;AACtB,EAAE,GAAG,EAAE,WAAW;AAClB,CAAC,CAAC;AACK,SAAS,UAAU,CAAC,GAAG,EAAE;AAChC,EAAE,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;AACxB,EAAE,mBAAmB,CAAC,MAAM;AAC5B,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,MAAM,OAAO;AACb,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACvB,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;AAC9E,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClF,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACrD,MAAM,OAAO,CAAC,GAAG,GAAG,eAAe,CAAC;AACpC,MAAM,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC7B,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC1D,KAAK;AACL,IAAI,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY;AAC7B,MAAM,MAAM;AACZ;AACA,MAAM,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACnE,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3C,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACZ;;;;"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useRef } from 'react';
|
|
2
|
-
import { useDidUpdate } from '../use-did-update/use-did-update.
|
|
2
|
+
import { useDidUpdate } from '../use-did-update/use-did-update.mjs';
|
|
3
3
|
|
|
4
4
|
function useFocusReturn({ opened, shouldReturnFocus = true }) {
|
|
5
5
|
const lastActiveElement = useRef();
|
|
@@ -31,4 +31,4 @@ function useFocusReturn({ opened, shouldReturnFocus = true }) {
|
|
|
31
31
|
}
|
|
32
32
|
|
|
33
33
|
export { useFocusReturn };
|
|
34
|
-
//# sourceMappingURL=use-focus-return.
|
|
34
|
+
//# sourceMappingURL=use-focus-return.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"use-focus-return.mjs","sources":["../../src/use-focus-return/use-focus-return.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { useDidUpdate } from '../use-did-update/use-did-update';\n\ninterface UseFocusReturn {\n opened: boolean;\n shouldReturnFocus?: boolean;\n}\n\n/** Returns focus to last active element, used in Modal and Drawer */\nexport function useFocusReturn({ opened, shouldReturnFocus = true }: UseFocusReturn) {\n const lastActiveElement = useRef<HTMLElement>();\n const returnFocus = () => {\n if (\n lastActiveElement.current &&\n 'focus' in lastActiveElement.current &&\n typeof lastActiveElement.current.focus === 'function'\n ) {\n lastActiveElement.current?.focus({ preventScroll: true });\n }\n };\n\n useDidUpdate(() => {\n let timeout = -1;\n\n const clearFocusTimeout = (event: KeyboardEvent) => {\n if (event.key === 'Tab') {\n window.clearTimeout(timeout);\n }\n };\n\n document.addEventListener('keydown', clearFocusTimeout);\n\n if (opened) {\n lastActiveElement.current = document.activeElement as HTMLElement;\n } else if (shouldReturnFocus) {\n timeout = window.setTimeout(returnFocus, 10);\n }\n\n return () => {\n window.clearTimeout(timeout);\n document.removeEventListener('keydown', clearFocusTimeout);\n };\n }, [opened, shouldReturnFocus]);\n\n return returnFocus;\n}\n"],"names":[],"mappings":";;;AAEO,SAAS,cAAc,CAAC,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAAE,EAAE;AACrE,EAAE,MAAM,iBAAiB,GAAG,MAAM,EAAE,CAAC;AACrC,EAAE,MAAM,WAAW,GAAG,MAAM;AAC5B,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,IAAI,iBAAiB,CAAC,OAAO,IAAI,OAAO,IAAI,iBAAiB,CAAC,OAAO,IAAI,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;AACpI,MAAM,CAAC,EAAE,GAAG,iBAAiB,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5F,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,YAAY,CAAC,MAAM;AACrB,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,iBAAiB,GAAG,CAAC,KAAK,KAAK;AACzC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;AAC/B,QAAQ,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACrC,OAAO;AACP,KAAK,CAAC;AACN,IAAI,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAC5D,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,iBAAiB,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC;AACzD,KAAK,MAAM,IAAI,iBAAiB,EAAE;AAClC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACnD,KAAK;AACL,IAAI,OAAO,MAAM;AACjB,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACnC,MAAM,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACjE,KAAK,CAAC;AACN,GAAG,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAClC,EAAE,OAAO,WAAW,CAAC;AACrB;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { randomId } from '../utils/random-id/random-id.
|
|
1
|
+
import { randomId } from '../utils/random-id/random-id.mjs';
|
|
2
2
|
|
|
3
3
|
function createAriaHider(containerNode, selector = "body > :not(script)") {
|
|
4
4
|
const id = randomId();
|
|
@@ -40,4 +40,4 @@ function createAriaHider(containerNode, selector = "body > :not(script)") {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
export { createAriaHider };
|
|
43
|
-
//# sourceMappingURL=create-aria-hider.
|
|
43
|
+
//# sourceMappingURL=create-aria-hider.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-aria-hider.mjs","sources":["../../src/use-focus-trap/create-aria-hider.ts"],"sourcesContent":["import { randomId } from '../utils';\n\ninterface Value {\n node: HTMLElement;\n ariaHidden: string | null;\n}\n\nexport function createAriaHider(\n containerNode: HTMLElement,\n selector: string = 'body > :not(script)'\n) {\n const id = randomId();\n\n const rootNodes: (Value | undefined)[] = Array.from<HTMLElement>(\n document.querySelectorAll(selector)\n ).map((node) => {\n if (node?.shadowRoot?.contains(containerNode) || node.contains(containerNode)) {\n return undefined;\n }\n\n const ariaHidden = node.getAttribute('aria-hidden');\n const prevAriaHidden = node.getAttribute('data-hidden');\n const prevFocusId = node.getAttribute('data-focus-id');\n\n node.setAttribute('data-focus-id', id);\n\n if (ariaHidden === null || ariaHidden === 'false') {\n node.setAttribute('aria-hidden', 'true');\n } else if (!prevAriaHidden && !prevFocusId) {\n node.setAttribute('data-hidden', ariaHidden);\n }\n\n return {\n node,\n ariaHidden: prevAriaHidden || null,\n };\n });\n\n return () => {\n rootNodes.forEach((item) => {\n if (!item || id !== item.node.getAttribute('data-focus-id')) {\n return;\n }\n\n if (item.ariaHidden === null) {\n item.node.removeAttribute('aria-hidden');\n } else {\n item.node.setAttribute('aria-hidden', item.ariaHidden);\n }\n\n item.node.removeAttribute('data-focus-id');\n item.node.removeAttribute('data-hidden');\n });\n };\n}\n"],"names":[],"mappings":";;AACO,SAAS,eAAe,CAAC,aAAa,EAAE,QAAQ,GAAG,qBAAqB,EAAE;AACjF,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;AACxB,EAAE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;AAC9B,IAAI,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AACvC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AAClB,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACxI,MAAM,OAAO,KAAK,CAAC,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AACxD,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AAC5D,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AAC3D,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAC3C,IAAI,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,OAAO,EAAE;AACvD,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAC/C,KAAK,MAAM,IAAI,CAAC,cAAc,IAAI,CAAC,WAAW,EAAE;AAChD,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AACnD,KAAK;AACL,IAAI,OAAO;AACX,MAAM,IAAI;AACV,MAAM,UAAU,EAAE,cAAc,IAAI,IAAI;AACxC,KAAK,CAAC;AACN,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,MAAM;AACf,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAChC,MAAM,IAAI,CAAC,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE;AACnE,QAAQ,OAAO;AACf,OAAO;AACP,MAAM,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AACpC,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACjD,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/D,OAAO;AACP,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;AACjD,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AAC/C,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { findTabbableDescendants } from './tabbable.
|
|
1
|
+
import { findTabbableDescendants } from './tabbable.mjs';
|
|
2
2
|
|
|
3
3
|
function scopeTab(node, event) {
|
|
4
4
|
const tabbable = findTabbableDescendants(node);
|
|
@@ -20,4 +20,4 @@ function scopeTab(node, event) {
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
export { scopeTab };
|
|
23
|
-
//# sourceMappingURL=scope-tab.
|
|
23
|
+
//# sourceMappingURL=scope-tab.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope-tab.mjs","sources":["../../src/use-focus-trap/scope-tab.ts"],"sourcesContent":["import { findTabbableDescendants } from './tabbable';\n\nexport function scopeTab(node: HTMLElement, event: KeyboardEvent) {\n const tabbable = findTabbableDescendants(node);\n if (!tabbable.length) {\n event.preventDefault();\n return;\n }\n const finalTabbable = tabbable[event.shiftKey ? 0 : tabbable.length - 1];\n const root = node.getRootNode() as unknown as DocumentOrShadowRoot;\n const leavingFinalTabbable = finalTabbable === root.activeElement || node === root.activeElement;\n\n if (!leavingFinalTabbable) {\n return;\n }\n\n event.preventDefault();\n\n const target = tabbable[event.shiftKey ? tabbable.length - 1 : 0];\n\n if (target) {\n target.focus();\n }\n}\n"],"names":[],"mappings":";;AACO,SAAS,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;AACtC,EAAE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACjD,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,OAAO;AACX,GAAG;AACH,EAAE,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3E,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAClC,EAAE,MAAM,oBAAoB,GAAG,aAAa,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC;AACnG,EAAE,IAAI,CAAC,oBAAoB,EAAE;AAC7B,IAAI,OAAO;AACX,GAAG;AACH,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;AACzB,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,EAAE,IAAI,MAAM,EAAE;AACd,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;AACnB,GAAG;AACH;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tabbable.mjs","sources":["../../src/use-focus-trap/tabbable.ts"],"sourcesContent":["const TABBABLE_NODES = /input|select|textarea|button|object/;\nexport const FOCUS_SELECTOR = 'a, input, select, textarea, button, object, [tabindex]';\n\nfunction hidden(element: HTMLElement) {\n if (process.env.NODE_ENV === 'test') {\n return false;\n }\n\n return element.style.display === 'none';\n}\n\nfunction visible(element: HTMLElement) {\n const isHidden =\n element.getAttribute('aria-hidden') ||\n element.getAttribute('hidden') ||\n element.getAttribute('type') === 'hidden';\n\n if (isHidden) {\n return false;\n }\n\n let parentElement: HTMLElement = element;\n while (parentElement) {\n if (parentElement === document.body || parentElement.nodeType === 11) {\n break;\n }\n\n if (hidden(parentElement)) {\n return false;\n }\n\n parentElement = parentElement.parentNode as HTMLElement;\n }\n\n return true;\n}\n\nfunction getElementTabIndex(element: HTMLElement) {\n let tabIndex: string | null | undefined = element.getAttribute('tabindex');\n if (tabIndex === null) {\n tabIndex = undefined;\n }\n return parseInt(tabIndex as string, 10);\n}\n\nexport function focusable(element: HTMLElement) {\n const nodeName = element.nodeName.toLowerCase();\n const isTabIndexNotNaN = !Number.isNaN(getElementTabIndex(element));\n const res =\n // @ts-ignore\n (TABBABLE_NODES.test(nodeName) && !element.disabled) ||\n (element instanceof HTMLAnchorElement ? element.href || isTabIndexNotNaN : isTabIndexNotNaN);\n\n return res && visible(element);\n}\n\nexport function tabbable(element: HTMLElement) {\n const tabIndex = getElementTabIndex(element);\n const isTabIndexNaN = Number.isNaN(tabIndex);\n return (isTabIndexNaN || tabIndex >= 0) && focusable(element);\n}\n\nexport function findTabbableDescendants(element: HTMLElement): HTMLElement[] {\n return Array.from(element.querySelectorAll<HTMLElement>(FOCUS_SELECTOR)).filter(tabbable);\n}\n"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,qCAAqC,CAAC;AACjD,MAAC,cAAc,GAAG,yDAAyD;AACvF,SAAS,MAAM,CAAC,OAAO,EAAE;AACzB,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE;AACvC,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH,EAAE,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;AAC1C,CAAC;AACD,SAAS,OAAO,CAAC,OAAO,EAAE;AAC1B,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;AACtI,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH,EAAE,IAAI,aAAa,GAAG,OAAO,CAAC;AAC9B,EAAE,OAAO,aAAa,EAAE;AACxB,IAAI,IAAI,aAAa,KAAK,QAAQ,CAAC,IAAI,IAAI,aAAa,CAAC,QAAQ,KAAK,EAAE,EAAE;AAC1E,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE;AAC/B,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,IAAI,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC;AAC7C,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD,SAAS,kBAAkB,CAAC,OAAO,EAAE;AACrC,EAAE,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAClD,EAAE,IAAI,QAAQ,KAAK,IAAI,EAAE;AACzB,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC;AACtB,GAAG;AACH,EAAE,OAAO,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AACM,SAAS,SAAS,CAAC,OAAO,EAAE;AACnC,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAClD,EAAE,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AACtE,EAAE,MAAM,GAAG;AACX;AACA,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,YAAY,iBAAiB,GAAG,OAAO,CAAC,IAAI,IAAI,gBAAgB,GAAG,gBAAgB,CAAC;AACtJ,GAAG,CAAC;AACJ,EAAE,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AACM,SAAS,QAAQ,CAAC,OAAO,EAAE;AAClC,EAAE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC/C,EAAE,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC/C,EAAE,OAAO,CAAC,aAAa,IAAI,QAAQ,IAAI,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC;AACM,SAAS,uBAAuB,CAAC,OAAO,EAAE;AACjD,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/E;;;;"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { useRef, useCallback, useEffect } from 'react';
|
|
2
|
-
import { FOCUS_SELECTOR, tabbable, focusable } from './tabbable.
|
|
3
|
-
import { scopeTab } from './scope-tab.
|
|
4
|
-
import { createAriaHider } from './create-aria-hider.
|
|
2
|
+
import { FOCUS_SELECTOR, tabbable, focusable } from './tabbable.mjs';
|
|
3
|
+
import { scopeTab } from './scope-tab.mjs';
|
|
4
|
+
import { createAriaHider } from './create-aria-hider.mjs';
|
|
5
5
|
|
|
6
6
|
function useFocusTrap(active = true) {
|
|
7
7
|
const ref = useRef();
|
|
@@ -76,4 +76,4 @@ function useFocusTrap(active = true) {
|
|
|
76
76
|
}
|
|
77
77
|
|
|
78
78
|
export { useFocusTrap };
|
|
79
|
-
//# sourceMappingURL=use-focus-trap.
|
|
79
|
+
//# sourceMappingURL=use-focus-trap.mjs.map
|