react-simplikit 0.0.51 → 0.0.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/ImpressionArea/ImpressionArea.cjs +57 -0
- package/{esm/components/ImpressionArea/index.d.ts → dist/components/ImpressionArea/ImpressionArea.d.cts} +9 -8
- package/dist/components/ImpressionArea/ImpressionArea.d.mts +48 -0
- package/dist/components/ImpressionArea/ImpressionArea.mjs +57 -0
- package/dist/components/ImpressionArea/index.d.cts +2 -46
- package/dist/components/ImpressionArea/index.d.mts +3 -0
- package/dist/components/Separated/Separated.cjs +38 -0
- package/{esm/components/Separated/index.d.ts → dist/components/Separated/Separated.d.cts} +7 -7
- package/dist/components/Separated/Separated.d.mts +38 -0
- package/dist/components/Separated/Separated.mjs +38 -0
- package/dist/components/Separated/index.d.cts +2 -37
- package/dist/components/Separated/index.d.mts +3 -0
- package/dist/components/SwitchCase/SwitchCase.cjs +40 -0
- package/{esm/components/SwitchCase/index.d.ts → dist/components/SwitchCase/SwitchCase.d.cts} +7 -8
- package/dist/components/SwitchCase/SwitchCase.d.mts +45 -0
- package/dist/components/SwitchCase/SwitchCase.mjs +40 -0
- package/dist/components/SwitchCase/index.d.cts +2 -45
- package/dist/components/SwitchCase/index.d.mts +3 -0
- package/dist/hooks/useAsyncEffect/index.d.cts +2 -24
- package/dist/hooks/useAsyncEffect/index.d.mts +3 -0
- package/dist/hooks/useAsyncEffect/useAsyncEffect.cjs +39 -0
- package/{esm/hooks/useAsyncEffect/index.d.ts → dist/hooks/useAsyncEffect/useAsyncEffect.d.cts} +4 -3
- package/dist/hooks/useAsyncEffect/useAsyncEffect.d.mts +26 -0
- package/dist/hooks/useAsyncEffect/useAsyncEffect.mjs +39 -0
- package/dist/hooks/useBooleanState/useBooleanState.cjs +36 -0
- package/dist/hooks/useBooleanState/{index.d.cts → useBooleanState.d.cts} +4 -2
- package/{esm/hooks/useBooleanState/index.d.ts → dist/hooks/useBooleanState/useBooleanState.d.mts} +4 -2
- package/dist/hooks/useBooleanState/useBooleanState.mjs +36 -0
- package/dist/hooks/useCallbackOncePerRender/index.d.cts +2 -39
- package/dist/hooks/useCallbackOncePerRender/index.d.mts +3 -0
- package/dist/hooks/useCallbackOncePerRender/useCallbackOncePerRender.cjs +52 -0
- package/{esm/hooks/useCallbackOncePerRender/index.d.ts → dist/hooks/useCallbackOncePerRender/useCallbackOncePerRender.d.cts} +4 -3
- package/dist/hooks/useCallbackOncePerRender/useCallbackOncePerRender.d.mts +41 -0
- package/dist/hooks/useCallbackOncePerRender/useCallbackOncePerRender.mjs +52 -0
- package/dist/hooks/useConditionalEffect/index.d.cts +2 -42
- package/dist/hooks/useConditionalEffect/index.d.mts +3 -0
- package/dist/hooks/useConditionalEffect/useConditionalEffect.cjs +57 -0
- package/{esm/hooks/useConditionalEffect/index.d.ts → dist/hooks/useConditionalEffect/useConditionalEffect.d.cts} +4 -3
- package/dist/hooks/useConditionalEffect/useConditionalEffect.d.mts +44 -0
- package/dist/hooks/useConditionalEffect/useConditionalEffect.mjs +57 -0
- package/dist/hooks/useControlledState/index.d.cts +2 -50
- package/dist/hooks/useControlledState/index.d.mts +3 -0
- package/dist/hooks/useControlledState/useControlledState.cjs +60 -0
- package/{esm/hooks/useControlledState/index.d.ts → dist/hooks/useControlledState/useControlledState.d.cts} +11 -10
- package/dist/hooks/useControlledState/useControlledState.d.mts +52 -0
- package/dist/hooks/useControlledState/useControlledState.mjs +60 -0
- package/dist/hooks/useCounter/useCounter.cjs +75 -0
- package/{esm/hooks/useCounter/index.d.ts → dist/hooks/useCounter/useCounter.d.cts} +12 -10
- package/dist/hooks/useCounter/{index.d.cts → useCounter.d.mts} +12 -10
- package/dist/hooks/useCounter/useCounter.mjs +75 -0
- package/dist/hooks/useDebounce/debounce.cjs +49 -0
- package/dist/hooks/useDebounce/debounce.d.cts +8 -0
- package/dist/hooks/useDebounce/debounce.d.mts +8 -0
- package/dist/hooks/useDebounce/debounce.mjs +49 -0
- package/dist/hooks/useDebounce/useDebounce.cjs +66 -0
- package/{esm/hooks/useDebounce/index.d.ts → dist/hooks/useDebounce/useDebounce.d.cts} +6 -8
- package/dist/hooks/useDebounce/{index.d.cts → useDebounce.d.mts} +6 -8
- package/dist/hooks/useDebounce/useDebounce.mjs +66 -0
- package/dist/hooks/useDebouncedCallback/useDebouncedCallback.cjs +62 -0
- package/{esm/hooks/useDebouncedCallback/index.d.ts → dist/hooks/useDebouncedCallback/useDebouncedCallback.d.cts} +9 -7
- package/dist/hooks/useDebouncedCallback/{index.d.cts → useDebouncedCallback.d.mts} +9 -7
- package/dist/hooks/useDebouncedCallback/useDebouncedCallback.mjs +62 -0
- package/dist/hooks/useDoubleClick/index.d.cts +2 -45
- package/dist/hooks/useDoubleClick/index.d.mts +3 -0
- package/dist/hooks/useDoubleClick/useDoubleClick.cjs +64 -0
- package/{esm/hooks/useDoubleClick/index.d.ts → dist/hooks/useDoubleClick/useDoubleClick.d.cts} +8 -7
- package/dist/hooks/useDoubleClick/useDoubleClick.d.mts +47 -0
- package/dist/hooks/useDoubleClick/useDoubleClick.mjs +64 -0
- package/dist/hooks/useGeolocation/useGeolocation.cjs +210 -0
- package/{esm/hooks/useGeolocation/index.d.ts → dist/hooks/useGeolocation/useGeolocation.d.cts} +26 -24
- package/dist/hooks/useGeolocation/{index.d.cts → useGeolocation.d.mts} +26 -24
- package/dist/hooks/useGeolocation/useGeolocation.mjs +209 -0
- package/dist/hooks/useImpressionRef/useImpressionRef.cjs +67 -0
- package/{esm/hooks/useImpressionRef/index.d.ts → dist/hooks/useImpressionRef/useImpressionRef.d.cts} +10 -8
- package/dist/hooks/useImpressionRef/{index.d.cts → useImpressionRef.d.mts} +10 -8
- package/dist/hooks/useImpressionRef/useImpressionRef.mjs +67 -0
- package/dist/hooks/useInputState/index.d.cts +2 -22
- package/dist/hooks/useInputState/index.d.mts +3 -0
- package/dist/hooks/useInputState/useInputState.cjs +32 -0
- package/{esm/hooks/useInputState/index.d.ts → dist/hooks/useInputState/useInputState.d.cts} +4 -3
- package/dist/hooks/useInputState/useInputState.d.mts +24 -0
- package/dist/hooks/useInputState/useInputState.mjs +32 -0
- package/dist/hooks/useIntersectionObserver/useIntersectionObserver.cjs +58 -0
- package/dist/hooks/useIntersectionObserver/{index.d.cts → useIntersectionObserver.d.cts} +4 -2
- package/{esm/hooks/useIntersectionObserver/index.d.ts → dist/hooks/useIntersectionObserver/useIntersectionObserver.d.mts} +4 -2
- package/dist/hooks/useIntersectionObserver/useIntersectionObserver.mjs +58 -0
- package/dist/hooks/useInterval/useInterval.cjs +65 -0
- package/dist/hooks/useInterval/{index.d.cts → useInterval.d.cts} +7 -5
- package/{esm/hooks/useInterval/index.d.ts → dist/hooks/useInterval/useInterval.d.mts} +7 -5
- package/dist/hooks/useInterval/useInterval.mjs +65 -0
- package/dist/hooks/useIsClient/useIsClient.cjs +49 -0
- package/dist/hooks/useIsClient/{index.d.cts → useIsClient.d.cts} +4 -2
- package/{esm/hooks/useIsClient/index.d.ts → dist/hooks/useIsClient/useIsClient.d.mts} +4 -2
- package/dist/hooks/useIsClient/useIsClient.mjs +49 -0
- package/dist/hooks/useIsomorphicLayoutEffect/index.d.cts +2 -24
- package/dist/hooks/useIsomorphicLayoutEffect/index.d.mts +3 -0
- package/dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs +25 -0
- package/{esm/hooks/useIsomorphicLayoutEffect/index.d.ts → dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.d.cts} +4 -3
- package/dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.d.mts +26 -0
- package/dist/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs +25 -0
- package/dist/hooks/useList/useList.cjs +94 -0
- package/{esm/hooks/useList/index.d.ts → dist/hooks/useList/useList.d.cts} +10 -8
- package/dist/hooks/useList/{index.d.cts → useList.d.mts} +10 -8
- package/dist/hooks/useList/useList.mjs +94 -0
- package/dist/hooks/useLoading/useLoading.cjs +61 -0
- package/dist/hooks/useLoading/{index.d.cts → useLoading.d.cts} +4 -2
- package/{esm/hooks/useLoading/index.d.ts → dist/hooks/useLoading/useLoading.d.mts} +4 -2
- package/dist/hooks/useLoading/useLoading.mjs +61 -0
- package/dist/hooks/useLongPress/index.d.cts +2 -73
- package/dist/hooks/useLongPress/index.d.mts +3 -0
- package/dist/hooks/useLongPress/useLongPress.cjs +133 -0
- package/{esm/hooks/useLongPress/index.d.ts → dist/hooks/useLongPress/useLongPress.d.cts} +18 -17
- package/dist/hooks/useLongPress/useLongPress.d.mts +75 -0
- package/dist/hooks/useLongPress/useLongPress.mjs +133 -0
- package/dist/hooks/useMap/useMap.cjs +64 -0
- package/dist/hooks/useMap/{index.d.cts → useMap.d.cts} +12 -10
- package/{esm/hooks/useMap/index.d.ts → dist/hooks/useMap/useMap.d.mts} +12 -10
- package/dist/hooks/useMap/useMap.mjs +64 -0
- package/dist/hooks/useOutsideClickEffect/useOutsideClickEffect.cjs +51 -0
- package/dist/hooks/useOutsideClickEffect/{index.d.cts → useOutsideClickEffect.d.cts} +4 -2
- package/{esm/hooks/useOutsideClickEffect/index.d.ts → dist/hooks/useOutsideClickEffect/useOutsideClickEffect.d.mts} +4 -2
- package/dist/hooks/useOutsideClickEffect/useOutsideClickEffect.mjs +51 -0
- package/dist/hooks/usePreservedCallback/usePreservedCallback.cjs +41 -0
- package/dist/hooks/usePreservedCallback/{index.d.cts → usePreservedCallback.d.cts} +4 -2
- package/{esm/hooks/usePreservedCallback/index.d.ts → dist/hooks/usePreservedCallback/usePreservedCallback.d.mts} +4 -2
- package/dist/hooks/usePreservedCallback/usePreservedCallback.mjs +41 -0
- package/dist/hooks/usePreservedReference/usePreservedReference.cjs +55 -0
- package/dist/hooks/usePreservedReference/{index.d.cts → usePreservedReference.d.cts} +4 -2
- package/{esm/hooks/usePreservedReference/index.d.ts → dist/hooks/usePreservedReference/usePreservedReference.d.mts} +4 -2
- package/dist/hooks/usePreservedReference/usePreservedReference.mjs +55 -0
- package/dist/hooks/usePrevious/usePrevious.cjs +38 -0
- package/{esm/hooks/usePrevious/index.d.ts → dist/hooks/usePrevious/usePrevious.d.cts} +4 -2
- package/dist/hooks/usePrevious/{index.d.cts → usePrevious.d.mts} +4 -2
- package/dist/hooks/usePrevious/usePrevious.mjs +38 -0
- package/dist/hooks/useRefEffect/index.d.cts +2 -30
- package/dist/hooks/useRefEffect/index.d.mts +3 -0
- package/dist/hooks/useRefEffect/useRefEffect.cjs +42 -0
- package/{esm/hooks/useRefEffect/index.d.ts → dist/hooks/useRefEffect/useRefEffect.d.cts} +4 -3
- package/dist/hooks/useRefEffect/useRefEffect.d.mts +32 -0
- package/dist/hooks/useRefEffect/useRefEffect.mjs +42 -0
- package/dist/hooks/useSet/useSet.cjs +79 -0
- package/dist/hooks/useSet/{index.d.cts → useSet.d.cts} +9 -7
- package/{esm/hooks/useSet/index.d.ts → dist/hooks/useSet/useSet.d.mts} +9 -7
- package/dist/hooks/useSet/useSet.mjs +79 -0
- package/dist/hooks/useStorageState/index.d.cts +2 -60
- package/dist/hooks/useStorageState/index.d.mts +3 -0
- package/dist/hooks/useStorageState/storage.cjs +85 -0
- package/dist/hooks/useStorageState/storage.d.cts +10 -0
- package/dist/hooks/useStorageState/storage.d.mts +10 -0
- package/dist/hooks/useStorageState/storage.mjs +80 -0
- package/dist/hooks/useStorageState/useStorageState.cjs +81 -0
- package/{esm/hooks/useStorageState/index.d.ts → dist/hooks/useStorageState/useStorageState.d.cts} +10 -15
- package/dist/hooks/useStorageState/useStorageState.d.mts +56 -0
- package/dist/hooks/useStorageState/useStorageState.mjs +81 -0
- package/dist/hooks/useThrottle/throttle.cjs +19 -0
- package/dist/hooks/useThrottle/throttle.d.cts +19 -0
- package/dist/hooks/useThrottle/throttle.d.mts +19 -0
- package/dist/hooks/useThrottle/throttle.mjs +19 -0
- package/dist/hooks/useThrottle/useThrottle.cjs +49 -0
- package/dist/hooks/useThrottle/{index.d.cts → useThrottle.d.cts} +6 -19
- package/{esm/hooks/useThrottle/index.d.ts → dist/hooks/useThrottle/useThrottle.d.mts} +6 -19
- package/dist/hooks/useThrottle/useThrottle.mjs +49 -0
- package/dist/hooks/useThrottledCallback/useThrottledCallback.cjs +57 -0
- package/{esm/hooks/useThrottledCallback/index.d.ts → dist/hooks/useThrottledCallback/useThrottledCallback.d.cts} +8 -6
- package/dist/hooks/useThrottledCallback/{index.d.cts → useThrottledCallback.d.mts} +8 -6
- package/dist/hooks/useThrottledCallback/useThrottledCallback.mjs +57 -0
- package/dist/hooks/useTimeout/useTimeout.cjs +40 -0
- package/dist/hooks/useTimeout/{index.d.cts → useTimeout.d.cts} +4 -2
- package/{esm/hooks/useTimeout/index.d.ts → dist/hooks/useTimeout/useTimeout.d.mts} +4 -2
- package/dist/hooks/useTimeout/useTimeout.mjs +40 -0
- package/dist/hooks/useToggle/useToggle.cjs +34 -0
- package/dist/hooks/useToggle/{index.d.cts → useToggle.d.cts} +4 -4
- package/{esm/hooks/useToggle/index.d.ts → dist/hooks/useToggle/useToggle.d.mts} +4 -4
- package/dist/hooks/useToggle/useToggle.mjs +34 -0
- package/dist/hooks/useVisibilityEvent/useVisibilityEvent.cjs +42 -0
- package/{esm/hooks/useVisibilityEvent/index.d.ts → dist/hooks/useVisibilityEvent/useVisibilityEvent.d.cts} +5 -3
- package/dist/hooks/useVisibilityEvent/{index.d.cts → useVisibilityEvent.d.mts} +5 -3
- package/dist/hooks/useVisibilityEvent/useVisibilityEvent.mjs +42 -0
- package/dist/index.cjs +77 -1397
- package/dist/index.d.cts +56 -40
- package/dist/index.d.mts +56 -0
- package/dist/index.mjs +40 -0
- package/dist/utils/buildContext/buildContext.cjs +50 -0
- package/{esm/utils/buildContext/index.d.ts → dist/utils/buildContext/buildContext.d.cts} +7 -7
- package/dist/utils/buildContext/buildContext.d.mts +38 -0
- package/dist/utils/buildContext/buildContext.mjs +50 -0
- package/dist/utils/buildContext/index.d.cts +2 -37
- package/dist/utils/buildContext/index.d.mts +3 -0
- package/dist/utils/mergeProps/index.d.cts +2 -25
- package/dist/utils/mergeProps/index.d.mts +3 -0
- package/dist/utils/mergeProps/mergeProps.cjs +53 -0
- package/{esm/utils/mergeProps/index.d.ts → dist/utils/mergeProps/mergeProps.d.cts} +7 -8
- package/dist/utils/mergeProps/mergeProps.d.mts +25 -0
- package/dist/utils/mergeProps/mergeProps.mjs +53 -0
- package/dist/utils/mergeRefs/index.d.cts +2 -38
- package/dist/utils/mergeRefs/index.d.mts +3 -0
- package/dist/utils/mergeRefs/mergeRefs.cjs +50 -0
- package/{esm/utils/mergeRefs/index.d.ts → dist/utils/mergeRefs/mergeRefs.d.cts} +4 -3
- package/dist/utils/mergeRefs/mergeRefs.d.mts +40 -0
- package/dist/utils/mergeRefs/mergeRefs.mjs +50 -0
- package/package.json +9 -11
- package/dist/components/ImpressionArea/index.cjs +0 -295
- package/dist/components/Separated/index.cjs +0 -41
- package/dist/components/SwitchCase/index.cjs +0 -36
- package/dist/hooks/useAsyncEffect/index.cjs +0 -49
- package/dist/hooks/useBooleanState/index.cjs +0 -46
- package/dist/hooks/useCallbackOncePerRender/index.cjs +0 -63
- package/dist/hooks/useConditionalEffect/index.cjs +0 -51
- package/dist/hooks/useControlledState/index.cjs +0 -57
- package/dist/hooks/useCounter/index.cjs +0 -70
- package/dist/hooks/useDebounce/index.cjs +0 -130
- package/dist/hooks/useDebouncedCallback/index.cjs +0 -148
- package/dist/hooks/useDoubleClick/index.cjs +0 -79
- package/dist/hooks/useGeolocation/index.cjs +0 -154
- package/dist/hooks/useImpressionRef/index.cjs +0 -258
- package/dist/hooks/useInputState/index.cjs +0 -46
- package/dist/hooks/useIntersectionObserver/index.cjs +0 -95
- package/dist/hooks/useInterval/index.cjs +0 -84
- package/dist/hooks/useIsClient/index.cjs +0 -40
- package/dist/hooks/useIsomorphicLayoutEffect/index.cjs +0 -35
- package/dist/hooks/useList/index.cjs +0 -104
- package/dist/hooks/useLoading/index.cjs +0 -65
- package/dist/hooks/useLongPress/index.cjs +0 -127
- package/dist/hooks/useMap/index.cjs +0 -78
- package/dist/hooks/useOutsideClickEffect/index.cjs +0 -74
- package/dist/hooks/usePreservedCallback/index.cjs +0 -45
- package/dist/hooks/usePreservedReference/index.cjs +0 -45
- package/dist/hooks/usePrevious/index.cjs +0 -48
- package/dist/hooks/useRefEffect/index.cjs +0 -72
- package/dist/hooks/useSet/index.cjs +0 -105
- package/dist/hooks/useStorageState/index.cjs +0 -196
- package/dist/hooks/useThrottle/index.cjs +0 -151
- package/dist/hooks/useThrottledCallback/index.cjs +0 -172
- package/dist/hooks/useTimeout/index.cjs +0 -57
- package/dist/hooks/useToggle/index.cjs +0 -37
- package/dist/hooks/useVisibilityEvent/index.cjs +0 -47
- package/dist/utils/buildContext/index.cjs +0 -56
- package/dist/utils/mergeProps/index.cjs +0 -71
- package/dist/utils/mergeRefs/index.cjs +0 -46
- package/esm/components/ImpressionArea/index.js +0 -269
- package/esm/components/Separated/index.js +0 -15
- package/esm/components/SwitchCase/index.js +0 -10
- package/esm/hooks/useAsyncEffect/index.js +0 -23
- package/esm/hooks/useBooleanState/index.js +0 -20
- package/esm/hooks/useCallbackOncePerRender/index.js +0 -37
- package/esm/hooks/useConditionalEffect/index.js +0 -25
- package/esm/hooks/useControlledState/index.js +0 -31
- package/esm/hooks/useCounter/index.js +0 -44
- package/esm/hooks/useDebounce/index.js +0 -104
- package/esm/hooks/useDebouncedCallback/index.js +0 -122
- package/esm/hooks/useDoubleClick/index.js +0 -53
- package/esm/hooks/useGeolocation/index.js +0 -128
- package/esm/hooks/useImpressionRef/index.js +0 -232
- package/esm/hooks/useInputState/index.js +0 -20
- package/esm/hooks/useIntersectionObserver/index.js +0 -69
- package/esm/hooks/useInterval/index.js +0 -58
- package/esm/hooks/useIsClient/index.js +0 -14
- package/esm/hooks/useIsomorphicLayoutEffect/index.js +0 -9
- package/esm/hooks/useList/index.js +0 -78
- package/esm/hooks/useLoading/index.js +0 -39
- package/esm/hooks/useLongPress/index.js +0 -101
- package/esm/hooks/useMap/index.js +0 -52
- package/esm/hooks/useOutsideClickEffect/index.js +0 -48
- package/esm/hooks/usePreservedCallback/index.js +0 -19
- package/esm/hooks/usePreservedReference/index.js +0 -19
- package/esm/hooks/usePrevious/index.js +0 -22
- package/esm/hooks/useRefEffect/index.js +0 -46
- package/esm/hooks/useSet/index.js +0 -79
- package/esm/hooks/useStorageState/index.js +0 -170
- package/esm/hooks/useThrottle/index.js +0 -125
- package/esm/hooks/useThrottledCallback/index.js +0 -146
- package/esm/hooks/useTimeout/index.js +0 -31
- package/esm/hooks/useToggle/index.js +0 -11
- package/esm/hooks/useVisibilityEvent/index.js +0 -21
- package/esm/index.d.ts +0 -40
- package/esm/index.js +0 -1335
- package/esm/utils/buildContext/index.js +0 -30
- package/esm/utils/mergeProps/index.js +0 -45
- package/esm/utils/mergeRefs/index.js +0 -20
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useOutsideClickEffect/useOutsideClickEffect.ts
|
|
4
|
-
import { useEffect as useEffect2, useRef as useRef2 } from "react";
|
|
5
|
-
|
|
6
|
-
// src/hooks/usePreservedCallback/usePreservedCallback.ts
|
|
7
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
8
|
-
function usePreservedCallback(callback) {
|
|
9
|
-
const callbackRef = useRef(callback);
|
|
10
|
-
useEffect(
|
|
11
|
-
function syncCallbackRef() {
|
|
12
|
-
callbackRef.current = callback;
|
|
13
|
-
},
|
|
14
|
-
[callback]
|
|
15
|
-
);
|
|
16
|
-
return useCallback((...args) => {
|
|
17
|
-
return callbackRef.current(...args);
|
|
18
|
-
}, []);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// src/hooks/useOutsideClickEffect/useOutsideClickEffect.ts
|
|
22
|
-
function useOutsideClickEffect(container, callback) {
|
|
23
|
-
const containers = useRef2([]);
|
|
24
|
-
const handleDocumentClick = usePreservedCallback(({ target }) => {
|
|
25
|
-
if (target === null) {
|
|
26
|
-
return;
|
|
27
|
-
}
|
|
28
|
-
if (containers.current.length === 0) {
|
|
29
|
-
return;
|
|
30
|
-
}
|
|
31
|
-
if (containers.current.some((x) => x.contains(target))) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
callback();
|
|
35
|
-
});
|
|
36
|
-
useEffect2(() => {
|
|
37
|
-
containers.current = [container].flat(1).filter((item) => item != null);
|
|
38
|
-
}, [container]);
|
|
39
|
-
useEffect2(() => {
|
|
40
|
-
document.addEventListener("click", handleDocumentClick);
|
|
41
|
-
return () => {
|
|
42
|
-
document.removeEventListener("click", handleDocumentClick);
|
|
43
|
-
};
|
|
44
|
-
}, [handleDocumentClick]);
|
|
45
|
-
}
|
|
46
|
-
export {
|
|
47
|
-
useOutsideClickEffect
|
|
48
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/usePreservedCallback/usePreservedCallback.ts
|
|
4
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
5
|
-
function usePreservedCallback(callback) {
|
|
6
|
-
const callbackRef = useRef(callback);
|
|
7
|
-
useEffect(
|
|
8
|
-
function syncCallbackRef() {
|
|
9
|
-
callbackRef.current = callback;
|
|
10
|
-
},
|
|
11
|
-
[callback]
|
|
12
|
-
);
|
|
13
|
-
return useCallback((...args) => {
|
|
14
|
-
return callbackRef.current(...args);
|
|
15
|
-
}, []);
|
|
16
|
-
}
|
|
17
|
-
export {
|
|
18
|
-
usePreservedCallback
|
|
19
|
-
};
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/usePreservedReference/usePreservedReference.ts
|
|
4
|
-
import { useMemo, useRef } from "react";
|
|
5
|
-
function usePreservedReference(value, areValuesEqual = areDeeplyEqual) {
|
|
6
|
-
const ref = useRef(value);
|
|
7
|
-
return useMemo(() => {
|
|
8
|
-
if (!areValuesEqual(ref.current, value)) {
|
|
9
|
-
ref.current = value;
|
|
10
|
-
}
|
|
11
|
-
return ref.current;
|
|
12
|
-
}, [areValuesEqual, value]);
|
|
13
|
-
}
|
|
14
|
-
function areDeeplyEqual(x, y) {
|
|
15
|
-
return JSON.stringify(x) === JSON.stringify(y);
|
|
16
|
-
}
|
|
17
|
-
export {
|
|
18
|
-
usePreservedReference
|
|
19
|
-
};
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/usePrevious/usePrevious.ts
|
|
4
|
-
import { useRef } from "react";
|
|
5
|
-
var strictEquals = (prev, next) => prev === next;
|
|
6
|
-
function usePrevious(state, compare = strictEquals) {
|
|
7
|
-
const prevRef = useRef(state);
|
|
8
|
-
const currentRef = useRef(state);
|
|
9
|
-
const isFirstRender = useRef(true);
|
|
10
|
-
if (isFirstRender.current) {
|
|
11
|
-
isFirstRender.current = false;
|
|
12
|
-
return prevRef.current;
|
|
13
|
-
}
|
|
14
|
-
if (!compare(currentRef.current, state)) {
|
|
15
|
-
prevRef.current = currentRef.current;
|
|
16
|
-
currentRef.current = state;
|
|
17
|
-
}
|
|
18
|
-
return prevRef.current;
|
|
19
|
-
}
|
|
20
|
-
export {
|
|
21
|
-
usePrevious
|
|
22
|
-
};
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useRefEffect/useRefEffect.ts
|
|
4
|
-
import { useCallback as useCallback2, useRef as useRef2 } from "react";
|
|
5
|
-
|
|
6
|
-
// src/hooks/usePreservedCallback/usePreservedCallback.ts
|
|
7
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
8
|
-
function usePreservedCallback(callback) {
|
|
9
|
-
const callbackRef = useRef(callback);
|
|
10
|
-
useEffect(
|
|
11
|
-
function syncCallbackRef() {
|
|
12
|
-
callbackRef.current = callback;
|
|
13
|
-
},
|
|
14
|
-
[callback]
|
|
15
|
-
);
|
|
16
|
-
return useCallback((...args) => {
|
|
17
|
-
return callbackRef.current(...args);
|
|
18
|
-
}, []);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// src/hooks/useRefEffect/useRefEffect.ts
|
|
22
|
-
function useRefEffect(callback, deps) {
|
|
23
|
-
const preservedCallback = usePreservedCallback(callback);
|
|
24
|
-
const cleanupCallbackRef = useRef2(() => {
|
|
25
|
-
});
|
|
26
|
-
const effect = useCallback2(
|
|
27
|
-
(element) => {
|
|
28
|
-
cleanupCallbackRef.current();
|
|
29
|
-
cleanupCallbackRef.current = () => {
|
|
30
|
-
};
|
|
31
|
-
if (element == null) {
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
const cleanup = preservedCallback(element);
|
|
35
|
-
if (typeof cleanup === "function") {
|
|
36
|
-
cleanupCallbackRef.current = cleanup;
|
|
37
|
-
}
|
|
38
|
-
},
|
|
39
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
40
|
-
[preservedCallback, ...deps]
|
|
41
|
-
);
|
|
42
|
-
return effect;
|
|
43
|
-
}
|
|
44
|
-
export {
|
|
45
|
-
useRefEffect
|
|
46
|
-
};
|
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useSet/useSet.ts
|
|
4
|
-
import { useMemo as useMemo2, useState } from "react";
|
|
5
|
-
|
|
6
|
-
// src/hooks/usePreservedCallback/usePreservedCallback.ts
|
|
7
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
8
|
-
function usePreservedCallback(callback) {
|
|
9
|
-
const callbackRef = useRef(callback);
|
|
10
|
-
useEffect(
|
|
11
|
-
function syncCallbackRef() {
|
|
12
|
-
callbackRef.current = callback;
|
|
13
|
-
},
|
|
14
|
-
[callback]
|
|
15
|
-
);
|
|
16
|
-
return useCallback((...args) => {
|
|
17
|
-
return callbackRef.current(...args);
|
|
18
|
-
}, []);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// src/hooks/usePreservedReference/usePreservedReference.ts
|
|
22
|
-
import { useMemo, useRef as useRef2 } from "react";
|
|
23
|
-
function usePreservedReference(value, areValuesEqual = areDeeplyEqual) {
|
|
24
|
-
const ref = useRef2(value);
|
|
25
|
-
return useMemo(() => {
|
|
26
|
-
if (!areValuesEqual(ref.current, value)) {
|
|
27
|
-
ref.current = value;
|
|
28
|
-
}
|
|
29
|
-
return ref.current;
|
|
30
|
-
}, [areValuesEqual, value]);
|
|
31
|
-
}
|
|
32
|
-
function areDeeplyEqual(x, y) {
|
|
33
|
-
return JSON.stringify(x) === JSON.stringify(y);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// src/hooks/useSet/useSet.ts
|
|
37
|
-
function useSet(initialState = /* @__PURE__ */ new Set()) {
|
|
38
|
-
const [set, setSet] = useState(() => new Set(initialState));
|
|
39
|
-
const preservedInitialState = usePreservedReference(initialState);
|
|
40
|
-
const add = usePreservedCallback((value) => {
|
|
41
|
-
setSet((prev) => {
|
|
42
|
-
const nextSet = new Set(prev);
|
|
43
|
-
nextSet.add(value);
|
|
44
|
-
return nextSet;
|
|
45
|
-
});
|
|
46
|
-
});
|
|
47
|
-
const remove = usePreservedCallback((value) => {
|
|
48
|
-
setSet((prev) => {
|
|
49
|
-
const nextSet = new Set(prev);
|
|
50
|
-
nextSet.delete(value);
|
|
51
|
-
return nextSet;
|
|
52
|
-
});
|
|
53
|
-
});
|
|
54
|
-
const toggle = usePreservedCallback((value) => {
|
|
55
|
-
setSet((prev) => {
|
|
56
|
-
const nextSet = new Set(prev);
|
|
57
|
-
if (nextSet.has(value)) {
|
|
58
|
-
nextSet.delete(value);
|
|
59
|
-
} else {
|
|
60
|
-
nextSet.add(value);
|
|
61
|
-
}
|
|
62
|
-
return nextSet;
|
|
63
|
-
});
|
|
64
|
-
});
|
|
65
|
-
const setAll = usePreservedCallback((values) => {
|
|
66
|
-
setSet(() => new Set(values));
|
|
67
|
-
});
|
|
68
|
-
const reset = usePreservedCallback(() => {
|
|
69
|
-
setSet(() => new Set(preservedInitialState));
|
|
70
|
-
});
|
|
71
|
-
const actions = useMemo2(
|
|
72
|
-
() => ({ add, remove, toggle, setAll, reset }),
|
|
73
|
-
[add, remove, toggle, setAll, reset]
|
|
74
|
-
);
|
|
75
|
-
return [set, actions];
|
|
76
|
-
}
|
|
77
|
-
export {
|
|
78
|
-
useSet
|
|
79
|
-
};
|
|
@@ -1,170 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useStorageState/useStorageState.ts
|
|
4
|
-
import { useCallback, useRef, useSyncExternalStore } from "react";
|
|
5
|
-
|
|
6
|
-
// src/hooks/useStorageState/storage.ts
|
|
7
|
-
var MemoStorage = class {
|
|
8
|
-
storage = /* @__PURE__ */ new Map();
|
|
9
|
-
get(key) {
|
|
10
|
-
return this.storage.get(key) ?? null;
|
|
11
|
-
}
|
|
12
|
-
set(key, value) {
|
|
13
|
-
this.storage.set(key, value);
|
|
14
|
-
}
|
|
15
|
-
remove(key) {
|
|
16
|
-
this.storage.delete(key);
|
|
17
|
-
}
|
|
18
|
-
clear() {
|
|
19
|
-
this.storage.clear();
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
var LocalStorage = class {
|
|
23
|
-
static canUse() {
|
|
24
|
-
const TEST_KEY = generateTestKey();
|
|
25
|
-
try {
|
|
26
|
-
localStorage.setItem(TEST_KEY, "test");
|
|
27
|
-
localStorage.removeItem(TEST_KEY);
|
|
28
|
-
return true;
|
|
29
|
-
} catch {
|
|
30
|
-
return false;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
get(key) {
|
|
34
|
-
return localStorage.getItem(key);
|
|
35
|
-
}
|
|
36
|
-
set(key, value) {
|
|
37
|
-
localStorage.setItem(key, value);
|
|
38
|
-
}
|
|
39
|
-
remove(key) {
|
|
40
|
-
localStorage.removeItem(key);
|
|
41
|
-
}
|
|
42
|
-
clear() {
|
|
43
|
-
localStorage.clear();
|
|
44
|
-
}
|
|
45
|
-
};
|
|
46
|
-
var SessionStorage = class {
|
|
47
|
-
static canUse() {
|
|
48
|
-
const TEST_KEY = generateTestKey();
|
|
49
|
-
try {
|
|
50
|
-
sessionStorage.setItem(TEST_KEY, "test");
|
|
51
|
-
sessionStorage.removeItem(TEST_KEY);
|
|
52
|
-
return true;
|
|
53
|
-
} catch {
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
get(key) {
|
|
58
|
-
return sessionStorage.getItem(key);
|
|
59
|
-
}
|
|
60
|
-
set(key, value) {
|
|
61
|
-
sessionStorage.setItem(key, value);
|
|
62
|
-
}
|
|
63
|
-
remove(key) {
|
|
64
|
-
sessionStorage.removeItem(key);
|
|
65
|
-
}
|
|
66
|
-
clear() {
|
|
67
|
-
sessionStorage.clear();
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
function generateTestKey() {
|
|
71
|
-
return new Array(4).fill(null).map(() => Math.random().toString(36).slice(2)).join("");
|
|
72
|
-
}
|
|
73
|
-
function generateStorage() {
|
|
74
|
-
if (LocalStorage.canUse()) {
|
|
75
|
-
return new LocalStorage();
|
|
76
|
-
}
|
|
77
|
-
return new MemoStorage();
|
|
78
|
-
}
|
|
79
|
-
function generateSessionStorage() {
|
|
80
|
-
if (SessionStorage.canUse()) {
|
|
81
|
-
return new SessionStorage();
|
|
82
|
-
}
|
|
83
|
-
return new MemoStorage();
|
|
84
|
-
}
|
|
85
|
-
var safeLocalStorage = generateStorage();
|
|
86
|
-
var safeSessionStorage = generateSessionStorage();
|
|
87
|
-
|
|
88
|
-
// src/hooks/useStorageState/useStorageState.ts
|
|
89
|
-
var listeners = /* @__PURE__ */ new Set();
|
|
90
|
-
var emitListeners = () => {
|
|
91
|
-
listeners.forEach((listener) => listener());
|
|
92
|
-
};
|
|
93
|
-
function isPlainObject(value) {
|
|
94
|
-
if (typeof value !== "object") {
|
|
95
|
-
return false;
|
|
96
|
-
}
|
|
97
|
-
const proto = Object.getPrototypeOf(value);
|
|
98
|
-
const hasObjectPrototype = proto === Object.prototype;
|
|
99
|
-
if (!hasObjectPrototype) {
|
|
100
|
-
return false;
|
|
101
|
-
}
|
|
102
|
-
return Object.prototype.toString.call(value) === "[object Object]";
|
|
103
|
-
}
|
|
104
|
-
var ensureSerializable = (value) => {
|
|
105
|
-
if (value[0] != null && !["string", "number", "boolean"].includes(typeof value[0]) && !(isPlainObject(value[0]) || Array.isArray(value[0]))) {
|
|
106
|
-
throw new Error("Received a non-serializable value");
|
|
107
|
-
}
|
|
108
|
-
return value;
|
|
109
|
-
};
|
|
110
|
-
function useStorageState(key, {
|
|
111
|
-
storage = safeLocalStorage,
|
|
112
|
-
defaultValue,
|
|
113
|
-
...options
|
|
114
|
-
} = {}) {
|
|
115
|
-
const serializedDefaultValue = defaultValue;
|
|
116
|
-
const cache = useRef({
|
|
117
|
-
data: null,
|
|
118
|
-
parsed: serializedDefaultValue
|
|
119
|
-
});
|
|
120
|
-
const getSnapshot = useCallback(() => {
|
|
121
|
-
const deserializer = "deserializer" in options ? options.deserializer : JSON.parse;
|
|
122
|
-
const data = storage.get(key);
|
|
123
|
-
if (data !== cache.current.data) {
|
|
124
|
-
try {
|
|
125
|
-
cache.current.parsed = data != null ? deserializer(data) : defaultValue;
|
|
126
|
-
} catch {
|
|
127
|
-
cache.current.parsed = serializedDefaultValue;
|
|
128
|
-
}
|
|
129
|
-
cache.current.data = data;
|
|
130
|
-
}
|
|
131
|
-
return cache.current.parsed;
|
|
132
|
-
}, [defaultValue, key, storage]);
|
|
133
|
-
const storageState = useSyncExternalStore(
|
|
134
|
-
(onStoreChange) => {
|
|
135
|
-
listeners.add(onStoreChange);
|
|
136
|
-
const handler = (event) => {
|
|
137
|
-
if (event.key === key) {
|
|
138
|
-
onStoreChange();
|
|
139
|
-
}
|
|
140
|
-
};
|
|
141
|
-
window.addEventListener("storage", handler);
|
|
142
|
-
return () => {
|
|
143
|
-
listeners.delete(onStoreChange);
|
|
144
|
-
window.removeEventListener("storage", handler);
|
|
145
|
-
};
|
|
146
|
-
},
|
|
147
|
-
() => getSnapshot(),
|
|
148
|
-
() => serializedDefaultValue
|
|
149
|
-
);
|
|
150
|
-
const setStorageState = useCallback(
|
|
151
|
-
(value) => {
|
|
152
|
-
const serializer = "serializer" in options ? options.serializer : JSON.stringify;
|
|
153
|
-
const nextValue = typeof value === "function" ? value(getSnapshot()) : value;
|
|
154
|
-
if (nextValue == null) {
|
|
155
|
-
storage.remove(key);
|
|
156
|
-
} else {
|
|
157
|
-
storage.set(key, serializer(nextValue));
|
|
158
|
-
}
|
|
159
|
-
emitListeners();
|
|
160
|
-
},
|
|
161
|
-
[getSnapshot, key, storage]
|
|
162
|
-
);
|
|
163
|
-
const refreshStorageState = useCallback(() => {
|
|
164
|
-
setStorageState(getSnapshot());
|
|
165
|
-
}, [storage, getSnapshot, setStorageState]);
|
|
166
|
-
return ensureSerializable([storageState, setStorageState, refreshStorageState]);
|
|
167
|
-
}
|
|
168
|
-
export {
|
|
169
|
-
useStorageState
|
|
170
|
-
};
|
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useThrottle/useThrottle.ts
|
|
4
|
-
import { useEffect as useEffect2, useMemo as useMemo2 } from "react";
|
|
5
|
-
|
|
6
|
-
// src/hooks/usePreservedCallback/usePreservedCallback.ts
|
|
7
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
8
|
-
function usePreservedCallback(callback) {
|
|
9
|
-
const callbackRef = useRef(callback);
|
|
10
|
-
useEffect(
|
|
11
|
-
function syncCallbackRef() {
|
|
12
|
-
callbackRef.current = callback;
|
|
13
|
-
},
|
|
14
|
-
[callback]
|
|
15
|
-
);
|
|
16
|
-
return useCallback((...args) => {
|
|
17
|
-
return callbackRef.current(...args);
|
|
18
|
-
}, []);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// src/hooks/usePreservedReference/usePreservedReference.ts
|
|
22
|
-
import { useMemo, useRef as useRef2 } from "react";
|
|
23
|
-
function usePreservedReference(value, areValuesEqual = areDeeplyEqual) {
|
|
24
|
-
const ref = useRef2(value);
|
|
25
|
-
return useMemo(() => {
|
|
26
|
-
if (!areValuesEqual(ref.current, value)) {
|
|
27
|
-
ref.current = value;
|
|
28
|
-
}
|
|
29
|
-
return ref.current;
|
|
30
|
-
}, [areValuesEqual, value]);
|
|
31
|
-
}
|
|
32
|
-
function areDeeplyEqual(x, y) {
|
|
33
|
-
return JSON.stringify(x) === JSON.stringify(y);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// src/hooks/useDebounce/debounce.ts
|
|
37
|
-
function debounce(func, debounceMs, { edges = ["leading", "trailing"] } = {}) {
|
|
38
|
-
let pendingThis = void 0;
|
|
39
|
-
let pendingArgs = null;
|
|
40
|
-
const leading = edges != null && edges.includes("leading");
|
|
41
|
-
const trailing = edges == null || edges.includes("trailing");
|
|
42
|
-
const invoke = () => {
|
|
43
|
-
if (pendingArgs !== null) {
|
|
44
|
-
func.apply(pendingThis, pendingArgs);
|
|
45
|
-
pendingThis = void 0;
|
|
46
|
-
pendingArgs = null;
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
const onTimerEnd = () => {
|
|
50
|
-
if (trailing) {
|
|
51
|
-
invoke();
|
|
52
|
-
}
|
|
53
|
-
cancel();
|
|
54
|
-
};
|
|
55
|
-
let timeoutId = null;
|
|
56
|
-
const schedule = () => {
|
|
57
|
-
if (timeoutId != null) {
|
|
58
|
-
clearTimeout(timeoutId);
|
|
59
|
-
}
|
|
60
|
-
timeoutId = setTimeout(() => {
|
|
61
|
-
timeoutId = null;
|
|
62
|
-
onTimerEnd();
|
|
63
|
-
}, debounceMs);
|
|
64
|
-
};
|
|
65
|
-
const cancelTimer = () => {
|
|
66
|
-
if (timeoutId !== null) {
|
|
67
|
-
clearTimeout(timeoutId);
|
|
68
|
-
timeoutId = null;
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
const cancel = () => {
|
|
72
|
-
cancelTimer();
|
|
73
|
-
pendingThis = void 0;
|
|
74
|
-
pendingArgs = null;
|
|
75
|
-
};
|
|
76
|
-
const debounced = function(...args) {
|
|
77
|
-
pendingThis = this;
|
|
78
|
-
pendingArgs = args;
|
|
79
|
-
const isFirstCall = timeoutId == null;
|
|
80
|
-
schedule();
|
|
81
|
-
if (leading && isFirstCall) {
|
|
82
|
-
invoke();
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
debounced.cancel = cancel;
|
|
86
|
-
return debounced;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// src/hooks/useThrottle/throttle.ts
|
|
90
|
-
function throttle(func, throttleMs, { edges = ["leading", "trailing"] } = {}) {
|
|
91
|
-
let pendingAt = null;
|
|
92
|
-
const debounced = debounce(func, throttleMs, { edges });
|
|
93
|
-
const throttled = function(...args) {
|
|
94
|
-
if (pendingAt == null) {
|
|
95
|
-
pendingAt = Date.now();
|
|
96
|
-
} else {
|
|
97
|
-
if (Date.now() - pendingAt >= throttleMs) {
|
|
98
|
-
pendingAt = Date.now();
|
|
99
|
-
debounced.cancel();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
debounced(...args);
|
|
103
|
-
};
|
|
104
|
-
throttled.cancel = debounced.cancel;
|
|
105
|
-
return throttled;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// src/hooks/useThrottle/useThrottle.ts
|
|
109
|
-
function useThrottle(callback, wait, options) {
|
|
110
|
-
const preservedCallback = usePreservedCallback(callback);
|
|
111
|
-
const preservedOptions = usePreservedReference(options ?? {});
|
|
112
|
-
const throttledCallback = useMemo2(
|
|
113
|
-
() => throttle(preservedCallback, wait, preservedOptions),
|
|
114
|
-
[preservedOptions, preservedCallback, wait]
|
|
115
|
-
);
|
|
116
|
-
useEffect2(() => {
|
|
117
|
-
return () => {
|
|
118
|
-
throttledCallback.cancel();
|
|
119
|
-
};
|
|
120
|
-
}, [throttledCallback]);
|
|
121
|
-
return throttledCallback;
|
|
122
|
-
}
|
|
123
|
-
export {
|
|
124
|
-
useThrottle
|
|
125
|
-
};
|
|
@@ -1,146 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useThrottledCallback/useThrottledCallback.ts
|
|
4
|
-
import { useCallback as useCallback2, useEffect as useEffect2, useRef as useRef3 } from "react";
|
|
5
|
-
|
|
6
|
-
// src/hooks/usePreservedCallback/usePreservedCallback.ts
|
|
7
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
8
|
-
function usePreservedCallback(callback) {
|
|
9
|
-
const callbackRef = useRef(callback);
|
|
10
|
-
useEffect(
|
|
11
|
-
function syncCallbackRef() {
|
|
12
|
-
callbackRef.current = callback;
|
|
13
|
-
},
|
|
14
|
-
[callback]
|
|
15
|
-
);
|
|
16
|
-
return useCallback((...args) => {
|
|
17
|
-
return callbackRef.current(...args);
|
|
18
|
-
}, []);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// src/hooks/usePreservedReference/usePreservedReference.ts
|
|
22
|
-
import { useMemo, useRef as useRef2 } from "react";
|
|
23
|
-
function usePreservedReference(value, areValuesEqual = areDeeplyEqual) {
|
|
24
|
-
const ref = useRef2(value);
|
|
25
|
-
return useMemo(() => {
|
|
26
|
-
if (!areValuesEqual(ref.current, value)) {
|
|
27
|
-
ref.current = value;
|
|
28
|
-
}
|
|
29
|
-
return ref.current;
|
|
30
|
-
}, [areValuesEqual, value]);
|
|
31
|
-
}
|
|
32
|
-
function areDeeplyEqual(x, y) {
|
|
33
|
-
return JSON.stringify(x) === JSON.stringify(y);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// src/hooks/useDebounce/debounce.ts
|
|
37
|
-
function debounce(func, debounceMs, { edges = ["leading", "trailing"] } = {}) {
|
|
38
|
-
let pendingThis = void 0;
|
|
39
|
-
let pendingArgs = null;
|
|
40
|
-
const leading = edges != null && edges.includes("leading");
|
|
41
|
-
const trailing = edges == null || edges.includes("trailing");
|
|
42
|
-
const invoke = () => {
|
|
43
|
-
if (pendingArgs !== null) {
|
|
44
|
-
func.apply(pendingThis, pendingArgs);
|
|
45
|
-
pendingThis = void 0;
|
|
46
|
-
pendingArgs = null;
|
|
47
|
-
}
|
|
48
|
-
};
|
|
49
|
-
const onTimerEnd = () => {
|
|
50
|
-
if (trailing) {
|
|
51
|
-
invoke();
|
|
52
|
-
}
|
|
53
|
-
cancel();
|
|
54
|
-
};
|
|
55
|
-
let timeoutId = null;
|
|
56
|
-
const schedule = () => {
|
|
57
|
-
if (timeoutId != null) {
|
|
58
|
-
clearTimeout(timeoutId);
|
|
59
|
-
}
|
|
60
|
-
timeoutId = setTimeout(() => {
|
|
61
|
-
timeoutId = null;
|
|
62
|
-
onTimerEnd();
|
|
63
|
-
}, debounceMs);
|
|
64
|
-
};
|
|
65
|
-
const cancelTimer = () => {
|
|
66
|
-
if (timeoutId !== null) {
|
|
67
|
-
clearTimeout(timeoutId);
|
|
68
|
-
timeoutId = null;
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
const cancel = () => {
|
|
72
|
-
cancelTimer();
|
|
73
|
-
pendingThis = void 0;
|
|
74
|
-
pendingArgs = null;
|
|
75
|
-
};
|
|
76
|
-
const debounced = function(...args) {
|
|
77
|
-
pendingThis = this;
|
|
78
|
-
pendingArgs = args;
|
|
79
|
-
const isFirstCall = timeoutId == null;
|
|
80
|
-
schedule();
|
|
81
|
-
if (leading && isFirstCall) {
|
|
82
|
-
invoke();
|
|
83
|
-
}
|
|
84
|
-
};
|
|
85
|
-
debounced.cancel = cancel;
|
|
86
|
-
return debounced;
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
// src/hooks/useThrottle/throttle.ts
|
|
90
|
-
function throttle(func, throttleMs, { edges = ["leading", "trailing"] } = {}) {
|
|
91
|
-
let pendingAt = null;
|
|
92
|
-
const debounced = debounce(func, throttleMs, { edges });
|
|
93
|
-
const throttled = function(...args) {
|
|
94
|
-
if (pendingAt == null) {
|
|
95
|
-
pendingAt = Date.now();
|
|
96
|
-
} else {
|
|
97
|
-
if (Date.now() - pendingAt >= throttleMs) {
|
|
98
|
-
pendingAt = Date.now();
|
|
99
|
-
debounced.cancel();
|
|
100
|
-
}
|
|
101
|
-
}
|
|
102
|
-
debounced(...args);
|
|
103
|
-
};
|
|
104
|
-
throttled.cancel = debounced.cancel;
|
|
105
|
-
return throttled;
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
// src/hooks/useThrottledCallback/useThrottledCallback.ts
|
|
109
|
-
function useThrottledCallback({
|
|
110
|
-
onChange,
|
|
111
|
-
timeThreshold,
|
|
112
|
-
edges = ["leading", "trailing"]
|
|
113
|
-
}) {
|
|
114
|
-
const handleChange = usePreservedCallback(onChange);
|
|
115
|
-
const ref = useRef3({ value: false, clearPreviousThrottle: () => {
|
|
116
|
-
} });
|
|
117
|
-
useEffect2(function cleanupThrottleOnUnmount() {
|
|
118
|
-
const current = ref.current;
|
|
119
|
-
return () => {
|
|
120
|
-
current.clearPreviousThrottle();
|
|
121
|
-
};
|
|
122
|
-
}, []);
|
|
123
|
-
const preservedEdges = usePreservedReference(edges);
|
|
124
|
-
return useCallback2(
|
|
125
|
-
(nextValue) => {
|
|
126
|
-
if (nextValue === ref.current.value) {
|
|
127
|
-
return;
|
|
128
|
-
}
|
|
129
|
-
const throttled = throttle(
|
|
130
|
-
() => {
|
|
131
|
-
handleChange(nextValue);
|
|
132
|
-
ref.current.value = nextValue;
|
|
133
|
-
},
|
|
134
|
-
timeThreshold,
|
|
135
|
-
{ edges: preservedEdges }
|
|
136
|
-
);
|
|
137
|
-
ref.current.clearPreviousThrottle();
|
|
138
|
-
throttled();
|
|
139
|
-
ref.current.clearPreviousThrottle = throttled.cancel;
|
|
140
|
-
},
|
|
141
|
-
[handleChange, timeThreshold, preservedEdges]
|
|
142
|
-
);
|
|
143
|
-
}
|
|
144
|
-
export {
|
|
145
|
-
useThrottledCallback
|
|
146
|
-
};
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useTimeout/useTimeout.ts
|
|
4
|
-
import { useEffect as useEffect2 } from "react";
|
|
5
|
-
|
|
6
|
-
// src/hooks/usePreservedCallback/usePreservedCallback.ts
|
|
7
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
8
|
-
function usePreservedCallback(callback) {
|
|
9
|
-
const callbackRef = useRef(callback);
|
|
10
|
-
useEffect(
|
|
11
|
-
function syncCallbackRef() {
|
|
12
|
-
callbackRef.current = callback;
|
|
13
|
-
},
|
|
14
|
-
[callback]
|
|
15
|
-
);
|
|
16
|
-
return useCallback((...args) => {
|
|
17
|
-
return callbackRef.current(...args);
|
|
18
|
-
}, []);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// src/hooks/useTimeout/useTimeout.ts
|
|
22
|
-
function useTimeout(callback, delay = 0) {
|
|
23
|
-
const preservedCallback = usePreservedCallback(callback);
|
|
24
|
-
useEffect2(() => {
|
|
25
|
-
const timeoutId = setTimeout(preservedCallback, delay);
|
|
26
|
-
return () => clearTimeout(timeoutId);
|
|
27
|
-
}, [delay, preservedCallback]);
|
|
28
|
-
}
|
|
29
|
-
export {
|
|
30
|
-
useTimeout
|
|
31
|
-
};
|