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,232 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useImpressionRef/useImpressionRef.ts
|
|
4
|
-
import { useRef as useRef4 } from "react";
|
|
5
|
-
|
|
6
|
-
// src/hooks/useDebouncedCallback/useDebouncedCallback.ts
|
|
7
|
-
import { useCallback as useCallback2, useEffect as useEffect2, useMemo, useRef as useRef2 } from "react";
|
|
8
|
-
|
|
9
|
-
// src/hooks/useDebounce/debounce.ts
|
|
10
|
-
function debounce(func, debounceMs, { edges = ["leading", "trailing"] } = {}) {
|
|
11
|
-
let pendingThis = void 0;
|
|
12
|
-
let pendingArgs = null;
|
|
13
|
-
const leading = edges != null && edges.includes("leading");
|
|
14
|
-
const trailing = edges == null || edges.includes("trailing");
|
|
15
|
-
const invoke = () => {
|
|
16
|
-
if (pendingArgs !== null) {
|
|
17
|
-
func.apply(pendingThis, pendingArgs);
|
|
18
|
-
pendingThis = void 0;
|
|
19
|
-
pendingArgs = null;
|
|
20
|
-
}
|
|
21
|
-
};
|
|
22
|
-
const onTimerEnd = () => {
|
|
23
|
-
if (trailing) {
|
|
24
|
-
invoke();
|
|
25
|
-
}
|
|
26
|
-
cancel();
|
|
27
|
-
};
|
|
28
|
-
let timeoutId = null;
|
|
29
|
-
const schedule = () => {
|
|
30
|
-
if (timeoutId != null) {
|
|
31
|
-
clearTimeout(timeoutId);
|
|
32
|
-
}
|
|
33
|
-
timeoutId = setTimeout(() => {
|
|
34
|
-
timeoutId = null;
|
|
35
|
-
onTimerEnd();
|
|
36
|
-
}, debounceMs);
|
|
37
|
-
};
|
|
38
|
-
const cancelTimer = () => {
|
|
39
|
-
if (timeoutId !== null) {
|
|
40
|
-
clearTimeout(timeoutId);
|
|
41
|
-
timeoutId = null;
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
const cancel = () => {
|
|
45
|
-
cancelTimer();
|
|
46
|
-
pendingThis = void 0;
|
|
47
|
-
pendingArgs = null;
|
|
48
|
-
};
|
|
49
|
-
const debounced = function(...args) {
|
|
50
|
-
pendingThis = this;
|
|
51
|
-
pendingArgs = args;
|
|
52
|
-
const isFirstCall = timeoutId == null;
|
|
53
|
-
schedule();
|
|
54
|
-
if (leading && isFirstCall) {
|
|
55
|
-
invoke();
|
|
56
|
-
}
|
|
57
|
-
};
|
|
58
|
-
debounced.cancel = cancel;
|
|
59
|
-
return debounced;
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// src/hooks/usePreservedCallback/usePreservedCallback.ts
|
|
63
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
64
|
-
function usePreservedCallback(callback) {
|
|
65
|
-
const callbackRef = useRef(callback);
|
|
66
|
-
useEffect(
|
|
67
|
-
function syncCallbackRef() {
|
|
68
|
-
callbackRef.current = callback;
|
|
69
|
-
},
|
|
70
|
-
[callback]
|
|
71
|
-
);
|
|
72
|
-
return useCallback((...args) => {
|
|
73
|
-
return callbackRef.current(...args);
|
|
74
|
-
}, []);
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// src/hooks/useDebouncedCallback/useDebouncedCallback.ts
|
|
78
|
-
function useDebouncedCallback({
|
|
79
|
-
onChange,
|
|
80
|
-
timeThreshold,
|
|
81
|
-
leading = false,
|
|
82
|
-
trailing = true
|
|
83
|
-
}) {
|
|
84
|
-
const handleChange = usePreservedCallback(onChange);
|
|
85
|
-
const ref = useRef2({ value: false, clearPreviousDebounce: () => {
|
|
86
|
-
} });
|
|
87
|
-
useEffect2(function clearDebouncedOnUnmount() {
|
|
88
|
-
const current = ref.current;
|
|
89
|
-
return () => {
|
|
90
|
-
current.clearPreviousDebounce();
|
|
91
|
-
};
|
|
92
|
-
}, []);
|
|
93
|
-
const edges = useMemo(() => {
|
|
94
|
-
const _edges = [];
|
|
95
|
-
if (leading) {
|
|
96
|
-
_edges.push("leading");
|
|
97
|
-
}
|
|
98
|
-
if (trailing) {
|
|
99
|
-
_edges.push("trailing");
|
|
100
|
-
}
|
|
101
|
-
return _edges;
|
|
102
|
-
}, [leading, trailing]);
|
|
103
|
-
return useCallback2(
|
|
104
|
-
(nextValue) => {
|
|
105
|
-
if (nextValue === ref.current.value) {
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
const debounced = debounce(
|
|
109
|
-
() => {
|
|
110
|
-
handleChange(nextValue);
|
|
111
|
-
ref.current.value = nextValue;
|
|
112
|
-
},
|
|
113
|
-
timeThreshold,
|
|
114
|
-
{ edges }
|
|
115
|
-
);
|
|
116
|
-
ref.current.clearPreviousDebounce();
|
|
117
|
-
debounced();
|
|
118
|
-
ref.current.clearPreviousDebounce = debounced.cancel;
|
|
119
|
-
},
|
|
120
|
-
[handleChange, timeThreshold, edges]
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
// src/hooks/useIntersectionObserver/useIntersectionObserver.ts
|
|
125
|
-
import { useMemo as useMemo2 } from "react";
|
|
126
|
-
|
|
127
|
-
// src/hooks/useRefEffect/useRefEffect.ts
|
|
128
|
-
import { useCallback as useCallback3, useRef as useRef3 } from "react";
|
|
129
|
-
function useRefEffect(callback, deps) {
|
|
130
|
-
const preservedCallback = usePreservedCallback(callback);
|
|
131
|
-
const cleanupCallbackRef = useRef3(() => {
|
|
132
|
-
});
|
|
133
|
-
const effect = useCallback3(
|
|
134
|
-
(element) => {
|
|
135
|
-
cleanupCallbackRef.current();
|
|
136
|
-
cleanupCallbackRef.current = () => {
|
|
137
|
-
};
|
|
138
|
-
if (element == null) {
|
|
139
|
-
return;
|
|
140
|
-
}
|
|
141
|
-
const cleanup = preservedCallback(element);
|
|
142
|
-
if (typeof cleanup === "function") {
|
|
143
|
-
cleanupCallbackRef.current = cleanup;
|
|
144
|
-
}
|
|
145
|
-
},
|
|
146
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
147
|
-
[preservedCallback, ...deps]
|
|
148
|
-
);
|
|
149
|
-
return effect;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
// src/hooks/useIntersectionObserver/useIntersectionObserver.ts
|
|
153
|
-
function useIntersectionObserver(callback, options) {
|
|
154
|
-
const preservedCallback = usePreservedCallback(callback);
|
|
155
|
-
const observer = useMemo2(() => {
|
|
156
|
-
if (typeof IntersectionObserver === "undefined") {
|
|
157
|
-
return;
|
|
158
|
-
}
|
|
159
|
-
return new IntersectionObserver(([entry]) => {
|
|
160
|
-
preservedCallback(entry);
|
|
161
|
-
}, options);
|
|
162
|
-
}, [preservedCallback, options]);
|
|
163
|
-
return useRefEffect(
|
|
164
|
-
(element) => {
|
|
165
|
-
observer?.observe(element);
|
|
166
|
-
return () => {
|
|
167
|
-
observer?.unobserve(element);
|
|
168
|
-
};
|
|
169
|
-
},
|
|
170
|
-
[preservedCallback, options]
|
|
171
|
-
);
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
// src/hooks/useVisibilityEvent/useVisibilityEvent.ts
|
|
175
|
-
import { useCallback as useCallback4, useEffect as useEffect3 } from "react";
|
|
176
|
-
function useVisibilityEvent(callback, options = {}) {
|
|
177
|
-
const handleVisibilityChange = useCallback4(() => {
|
|
178
|
-
callback(document.visibilityState);
|
|
179
|
-
}, [callback]);
|
|
180
|
-
useEffect3(() => {
|
|
181
|
-
if (options?.immediate ?? false) {
|
|
182
|
-
handleVisibilityChange();
|
|
183
|
-
}
|
|
184
|
-
document.addEventListener("visibilitychange", handleVisibilityChange);
|
|
185
|
-
return () => {
|
|
186
|
-
document.removeEventListener("visibilitychange", handleVisibilityChange);
|
|
187
|
-
};
|
|
188
|
-
}, [handleVisibilityChange, options?.immediate]);
|
|
189
|
-
}
|
|
190
|
-
|
|
191
|
-
// src/hooks/useImpressionRef/useImpressionRef.ts
|
|
192
|
-
function useImpressionRef({
|
|
193
|
-
onImpressionStart = () => {
|
|
194
|
-
},
|
|
195
|
-
onImpressionEnd = () => {
|
|
196
|
-
},
|
|
197
|
-
rootMargin,
|
|
198
|
-
areaThreshold = 0,
|
|
199
|
-
timeThreshold = 0
|
|
200
|
-
}) {
|
|
201
|
-
const impressionStartHandler = usePreservedCallback(onImpressionStart);
|
|
202
|
-
const impressionEndHandler = usePreservedCallback(onImpressionEnd);
|
|
203
|
-
const isIntersectingRef = useRef4(false);
|
|
204
|
-
const impressionEventHandler = useDebouncedCallback({
|
|
205
|
-
timeThreshold,
|
|
206
|
-
onChange: (impressed) => {
|
|
207
|
-
(impressed ? impressionStartHandler : impressionEndHandler)();
|
|
208
|
-
},
|
|
209
|
-
leading: true
|
|
210
|
-
});
|
|
211
|
-
useVisibilityEvent((documentVisible) => {
|
|
212
|
-
if (!isIntersectingRef.current) {
|
|
213
|
-
return;
|
|
214
|
-
}
|
|
215
|
-
impressionEventHandler(documentVisible === "visible");
|
|
216
|
-
});
|
|
217
|
-
return useIntersectionObserver(
|
|
218
|
-
(entry) => {
|
|
219
|
-
if (document.visibilityState === "hidden") {
|
|
220
|
-
return;
|
|
221
|
-
}
|
|
222
|
-
const currentRatio = entry.intersectionRatio;
|
|
223
|
-
const isIntersecting = areaThreshold === 0 ? entry.isIntersecting : currentRatio >= areaThreshold;
|
|
224
|
-
isIntersectingRef.current = isIntersecting;
|
|
225
|
-
impressionEventHandler(isIntersecting);
|
|
226
|
-
},
|
|
227
|
-
{ rootMargin, threshold: areaThreshold }
|
|
228
|
-
);
|
|
229
|
-
}
|
|
230
|
-
export {
|
|
231
|
-
useImpressionRef
|
|
232
|
-
};
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useInputState/useInputState.ts
|
|
4
|
-
import { useCallback, useState } from "react";
|
|
5
|
-
function useInputState(initialValue = "", transformValue = echo) {
|
|
6
|
-
const [value, setValue] = useState(initialValue);
|
|
7
|
-
const handleValueChange = useCallback(
|
|
8
|
-
({ target: { value: value2 } }) => {
|
|
9
|
-
setValue(transformValue(value2));
|
|
10
|
-
},
|
|
11
|
-
[transformValue]
|
|
12
|
-
);
|
|
13
|
-
return [value, handleValueChange];
|
|
14
|
-
}
|
|
15
|
-
function echo(v) {
|
|
16
|
-
return v;
|
|
17
|
-
}
|
|
18
|
-
export {
|
|
19
|
-
useInputState
|
|
20
|
-
};
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useIntersectionObserver/useIntersectionObserver.ts
|
|
4
|
-
import { useMemo } 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
|
-
import { useCallback as useCallback2, useRef as useRef2 } from "react";
|
|
23
|
-
function useRefEffect(callback, deps) {
|
|
24
|
-
const preservedCallback = usePreservedCallback(callback);
|
|
25
|
-
const cleanupCallbackRef = useRef2(() => {
|
|
26
|
-
});
|
|
27
|
-
const effect = useCallback2(
|
|
28
|
-
(element) => {
|
|
29
|
-
cleanupCallbackRef.current();
|
|
30
|
-
cleanupCallbackRef.current = () => {
|
|
31
|
-
};
|
|
32
|
-
if (element == null) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
const cleanup = preservedCallback(element);
|
|
36
|
-
if (typeof cleanup === "function") {
|
|
37
|
-
cleanupCallbackRef.current = cleanup;
|
|
38
|
-
}
|
|
39
|
-
},
|
|
40
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
41
|
-
[preservedCallback, ...deps]
|
|
42
|
-
);
|
|
43
|
-
return effect;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
// src/hooks/useIntersectionObserver/useIntersectionObserver.ts
|
|
47
|
-
function useIntersectionObserver(callback, options) {
|
|
48
|
-
const preservedCallback = usePreservedCallback(callback);
|
|
49
|
-
const observer = useMemo(() => {
|
|
50
|
-
if (typeof IntersectionObserver === "undefined") {
|
|
51
|
-
return;
|
|
52
|
-
}
|
|
53
|
-
return new IntersectionObserver(([entry]) => {
|
|
54
|
-
preservedCallback(entry);
|
|
55
|
-
}, options);
|
|
56
|
-
}, [preservedCallback, options]);
|
|
57
|
-
return useRefEffect(
|
|
58
|
-
(element) => {
|
|
59
|
-
observer?.observe(element);
|
|
60
|
-
return () => {
|
|
61
|
-
observer?.unobserve(element);
|
|
62
|
-
};
|
|
63
|
-
},
|
|
64
|
-
[preservedCallback, options]
|
|
65
|
-
);
|
|
66
|
-
}
|
|
67
|
-
export {
|
|
68
|
-
useIntersectionObserver
|
|
69
|
-
};
|
|
@@ -1,58 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useInterval/useInterval.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/useInterval/useInterval.ts
|
|
22
|
-
function useInterval(callback, options) {
|
|
23
|
-
const delay = typeof options === "number" ? options : options.delay;
|
|
24
|
-
const immediate = typeof options === "number" ? false : options.immediate;
|
|
25
|
-
const enabled = typeof options === "number" ? true : options.enabled ?? true;
|
|
26
|
-
const preservedCallback = usePreservedCallback(callback);
|
|
27
|
-
const immediateCalledRef = useRef2(false);
|
|
28
|
-
useEffect2(
|
|
29
|
-
function runImmediateCallback() {
|
|
30
|
-
if (immediate !== true) {
|
|
31
|
-
immediateCalledRef.current = false;
|
|
32
|
-
return;
|
|
33
|
-
}
|
|
34
|
-
if (!enabled) {
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
if (immediateCalledRef.current) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
immediateCalledRef.current = true;
|
|
41
|
-
preservedCallback();
|
|
42
|
-
},
|
|
43
|
-
[immediate, preservedCallback, enabled]
|
|
44
|
-
);
|
|
45
|
-
useEffect2(
|
|
46
|
-
function startInterval() {
|
|
47
|
-
if (!enabled) {
|
|
48
|
-
return;
|
|
49
|
-
}
|
|
50
|
-
const id = setInterval(preservedCallback, delay);
|
|
51
|
-
return () => clearInterval(id);
|
|
52
|
-
},
|
|
53
|
-
[delay, preservedCallback, enabled]
|
|
54
|
-
);
|
|
55
|
-
}
|
|
56
|
-
export {
|
|
57
|
-
useInterval
|
|
58
|
-
};
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useIsClient/useIsClient.ts
|
|
4
|
-
import { useEffect, useState } from "react";
|
|
5
|
-
function useIsClient() {
|
|
6
|
-
const [isClient, setIsClient] = useState(false);
|
|
7
|
-
useEffect(function syncClientState() {
|
|
8
|
-
setIsClient(true);
|
|
9
|
-
}, []);
|
|
10
|
-
return isClient;
|
|
11
|
-
}
|
|
12
|
-
export {
|
|
13
|
-
useIsClient
|
|
14
|
-
};
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.ts
|
|
4
|
-
import { useEffect, useLayoutEffect } from "react";
|
|
5
|
-
var isServer = typeof window === "undefined";
|
|
6
|
-
var useIsomorphicLayoutEffect = isServer ? useEffect : useLayoutEffect;
|
|
7
|
-
export {
|
|
8
|
-
useIsomorphicLayoutEffect
|
|
9
|
-
};
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useList/useList.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/useList/useList.ts
|
|
37
|
-
function useList(initialState = []) {
|
|
38
|
-
const [list, setList] = useState(initialState);
|
|
39
|
-
const preservedInitialState = usePreservedReference(initialState);
|
|
40
|
-
const push = usePreservedCallback((value) => {
|
|
41
|
-
setList((prev) => [...prev, value]);
|
|
42
|
-
});
|
|
43
|
-
const insertAt = usePreservedCallback((index, value) => {
|
|
44
|
-
setList((prev) => {
|
|
45
|
-
const next = [...prev];
|
|
46
|
-
next.splice(index, 0, value);
|
|
47
|
-
return next;
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
|
-
const updateAt = usePreservedCallback((index, value) => {
|
|
51
|
-
setList((prev) => {
|
|
52
|
-
const next = [...prev];
|
|
53
|
-
next[index] = value;
|
|
54
|
-
return next;
|
|
55
|
-
});
|
|
56
|
-
});
|
|
57
|
-
const removeAt = usePreservedCallback((index) => {
|
|
58
|
-
setList((prev) => {
|
|
59
|
-
const next = [...prev];
|
|
60
|
-
next.splice(index, 1);
|
|
61
|
-
return next;
|
|
62
|
-
});
|
|
63
|
-
});
|
|
64
|
-
const setAll = usePreservedCallback((values) => {
|
|
65
|
-
setList(values);
|
|
66
|
-
});
|
|
67
|
-
const reset = usePreservedCallback(() => {
|
|
68
|
-
setList(preservedInitialState);
|
|
69
|
-
});
|
|
70
|
-
const actions = useMemo2(
|
|
71
|
-
() => ({ push, insertAt, updateAt, removeAt, setAll, reset }),
|
|
72
|
-
[push, insertAt, updateAt, removeAt, setAll, reset]
|
|
73
|
-
);
|
|
74
|
-
return [list, actions];
|
|
75
|
-
}
|
|
76
|
-
export {
|
|
77
|
-
useList
|
|
78
|
-
};
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useLoading/useLoading.ts
|
|
4
|
-
import { useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
5
|
-
function useLoading() {
|
|
6
|
-
const [loading, setLoading] = useState(false);
|
|
7
|
-
const ref = useIsMountedRef();
|
|
8
|
-
const startTransition = useCallback(
|
|
9
|
-
async (promise) => {
|
|
10
|
-
try {
|
|
11
|
-
setLoading(true);
|
|
12
|
-
const data = await promise;
|
|
13
|
-
return data;
|
|
14
|
-
} finally {
|
|
15
|
-
if (ref.isMounted) {
|
|
16
|
-
setLoading(false);
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
},
|
|
20
|
-
[ref.isMounted]
|
|
21
|
-
);
|
|
22
|
-
return useMemo(() => [loading, startTransition], [loading, startTransition]);
|
|
23
|
-
}
|
|
24
|
-
function useIsMountedRef() {
|
|
25
|
-
const ref = useRef({ isMounted: true }).current;
|
|
26
|
-
useEffect(
|
|
27
|
-
function trackMountedState() {
|
|
28
|
-
ref.isMounted = true;
|
|
29
|
-
return () => {
|
|
30
|
-
ref.isMounted = false;
|
|
31
|
-
};
|
|
32
|
-
},
|
|
33
|
-
[ref]
|
|
34
|
-
);
|
|
35
|
-
return ref;
|
|
36
|
-
}
|
|
37
|
-
export {
|
|
38
|
-
useLoading
|
|
39
|
-
};
|
|
@@ -1,101 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useLongPress/useLongPress.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/useLongPress/useLongPress.ts
|
|
22
|
-
function useLongPress(onLongPress, { delay = 500, moveThreshold, onClick, onLongPressEnd } = {}) {
|
|
23
|
-
const timeoutRef = useRef2(null);
|
|
24
|
-
const isLongPressActiveRef = useRef2(false);
|
|
25
|
-
const initialPositionRef = useRef2({ x: 0, y: 0 });
|
|
26
|
-
const preservedOnLongPress = usePreservedCallback(onLongPress);
|
|
27
|
-
const preservedOnClick = usePreservedCallback(onClick || (() => {
|
|
28
|
-
}));
|
|
29
|
-
const preservedOnLongPressEnd = usePreservedCallback(onLongPressEnd || (() => {
|
|
30
|
-
}));
|
|
31
|
-
const hasThreshold = moveThreshold?.x !== void 0 || moveThreshold?.y !== void 0;
|
|
32
|
-
const getClientPosition = useCallback2((event) => {
|
|
33
|
-
if ("touches" in event.nativeEvent) {
|
|
34
|
-
const touch = event.nativeEvent.touches[0];
|
|
35
|
-
return { x: touch.clientX, y: touch.clientY };
|
|
36
|
-
}
|
|
37
|
-
return {
|
|
38
|
-
x: event.nativeEvent.clientX,
|
|
39
|
-
y: event.nativeEvent.clientY
|
|
40
|
-
};
|
|
41
|
-
}, []);
|
|
42
|
-
const isMovedBeyondThreshold = useCallback2(
|
|
43
|
-
(event) => {
|
|
44
|
-
const { x, y } = getClientPosition(event);
|
|
45
|
-
const deltaX = Math.abs(x - initialPositionRef.current.x);
|
|
46
|
-
const deltaY = Math.abs(y - initialPositionRef.current.y);
|
|
47
|
-
return moveThreshold?.x !== void 0 && deltaX > moveThreshold.x || moveThreshold?.y !== void 0 && deltaY > moveThreshold.y;
|
|
48
|
-
},
|
|
49
|
-
[getClientPosition, moveThreshold]
|
|
50
|
-
);
|
|
51
|
-
const cancelLongPress = useCallback2(() => {
|
|
52
|
-
if (timeoutRef.current !== null) {
|
|
53
|
-
window.clearTimeout(timeoutRef.current);
|
|
54
|
-
timeoutRef.current = null;
|
|
55
|
-
}
|
|
56
|
-
}, []);
|
|
57
|
-
const handlePressStart = useCallback2(
|
|
58
|
-
(event) => {
|
|
59
|
-
cancelLongPress();
|
|
60
|
-
const position = getClientPosition(event);
|
|
61
|
-
initialPositionRef.current = position;
|
|
62
|
-
isLongPressActiveRef.current = false;
|
|
63
|
-
timeoutRef.current = window.setTimeout(() => {
|
|
64
|
-
isLongPressActiveRef.current = true;
|
|
65
|
-
preservedOnLongPress(event);
|
|
66
|
-
}, delay);
|
|
67
|
-
},
|
|
68
|
-
[cancelLongPress, delay, getClientPosition, preservedOnLongPress]
|
|
69
|
-
);
|
|
70
|
-
const handlePressEnd = useCallback2(
|
|
71
|
-
(event) => {
|
|
72
|
-
if (isLongPressActiveRef.current) {
|
|
73
|
-
preservedOnLongPressEnd(event);
|
|
74
|
-
} else if (timeoutRef.current !== null) {
|
|
75
|
-
preservedOnClick(event);
|
|
76
|
-
}
|
|
77
|
-
cancelLongPress();
|
|
78
|
-
isLongPressActiveRef.current = false;
|
|
79
|
-
},
|
|
80
|
-
[cancelLongPress, preservedOnClick, preservedOnLongPressEnd]
|
|
81
|
-
);
|
|
82
|
-
const handlePressMove = useCallback2(
|
|
83
|
-
(event) => {
|
|
84
|
-
if (timeoutRef.current !== null && isMovedBeyondThreshold(event)) {
|
|
85
|
-
cancelLongPress();
|
|
86
|
-
}
|
|
87
|
-
},
|
|
88
|
-
[cancelLongPress, isMovedBeyondThreshold]
|
|
89
|
-
);
|
|
90
|
-
return {
|
|
91
|
-
onMouseDown: handlePressStart,
|
|
92
|
-
onMouseUp: handlePressEnd,
|
|
93
|
-
onMouseLeave: cancelLongPress,
|
|
94
|
-
onTouchStart: handlePressStart,
|
|
95
|
-
onTouchEnd: handlePressEnd,
|
|
96
|
-
...hasThreshold ? { onTouchMove: handlePressMove, onMouseMove: handlePressMove } : {}
|
|
97
|
-
};
|
|
98
|
-
}
|
|
99
|
-
export {
|
|
100
|
-
useLongPress
|
|
101
|
-
};
|
|
@@ -1,52 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useMap/useMap.ts
|
|
4
|
-
import { useCallback, useMemo as useMemo2, useState } from "react";
|
|
5
|
-
|
|
6
|
-
// src/hooks/usePreservedReference/usePreservedReference.ts
|
|
7
|
-
import { useMemo, useRef } from "react";
|
|
8
|
-
function usePreservedReference(value, areValuesEqual = areDeeplyEqual) {
|
|
9
|
-
const ref = useRef(value);
|
|
10
|
-
return useMemo(() => {
|
|
11
|
-
if (!areValuesEqual(ref.current, value)) {
|
|
12
|
-
ref.current = value;
|
|
13
|
-
}
|
|
14
|
-
return ref.current;
|
|
15
|
-
}, [areValuesEqual, value]);
|
|
16
|
-
}
|
|
17
|
-
function areDeeplyEqual(x, y) {
|
|
18
|
-
return JSON.stringify(x) === JSON.stringify(y);
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
// src/hooks/useMap/useMap.ts
|
|
22
|
-
function useMap(initialState = /* @__PURE__ */ new Map()) {
|
|
23
|
-
const [map, setMap] = useState(() => new Map(initialState));
|
|
24
|
-
const preservedInitialState = usePreservedReference(initialState);
|
|
25
|
-
const set = useCallback((key, value) => {
|
|
26
|
-
setMap((prev) => {
|
|
27
|
-
const nextMap = new Map(prev);
|
|
28
|
-
nextMap.set(key, value);
|
|
29
|
-
return nextMap;
|
|
30
|
-
});
|
|
31
|
-
}, []);
|
|
32
|
-
const setAll = useCallback((entries) => {
|
|
33
|
-
setMap(() => new Map(entries));
|
|
34
|
-
}, []);
|
|
35
|
-
const remove = useCallback((key) => {
|
|
36
|
-
setMap((prev) => {
|
|
37
|
-
const nextMap = new Map(prev);
|
|
38
|
-
nextMap.delete(key);
|
|
39
|
-
return nextMap;
|
|
40
|
-
});
|
|
41
|
-
}, []);
|
|
42
|
-
const reset = useCallback(() => {
|
|
43
|
-
setMap(() => new Map(preservedInitialState));
|
|
44
|
-
}, [preservedInitialState]);
|
|
45
|
-
const actions = useMemo2(() => {
|
|
46
|
-
return { set, setAll, remove, reset };
|
|
47
|
-
}, [set, setAll, remove, reset]);
|
|
48
|
-
return [map, actions];
|
|
49
|
-
}
|
|
50
|
-
export {
|
|
51
|
-
useMap
|
|
52
|
-
};
|