react-simplikit 0.0.50 → 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/{esm/hooks/useOutsideClickEffect/index.d.ts → dist/hooks/useOutsideClickEffect/useOutsideClickEffect.d.cts} +4 -2
- package/dist/hooks/useOutsideClickEffect/{index.d.cts → 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 -1382
- 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 -44
- 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 -74
- 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 -18
- 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 -48
- 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 -1320
- 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,44 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useCounter/useCounter.ts
|
|
4
|
-
import { useCallback, useState } from "react";
|
|
5
|
-
var validateValue = (value, { min, max }) => {
|
|
6
|
-
if (min !== void 0 && value < min) {
|
|
7
|
-
return min;
|
|
8
|
-
}
|
|
9
|
-
if (max !== void 0 && value > max) {
|
|
10
|
-
return max;
|
|
11
|
-
}
|
|
12
|
-
return value;
|
|
13
|
-
};
|
|
14
|
-
function useCounter(initialValue = 0, { min, max, step = 1 } = {}) {
|
|
15
|
-
const [count, setCountState] = useState(() => validateValue(initialValue, { min, max }));
|
|
16
|
-
const setCount = useCallback(
|
|
17
|
-
(value) => {
|
|
18
|
-
setCountState((prev) => {
|
|
19
|
-
const nextValue = typeof value === "function" ? value(prev) : value;
|
|
20
|
-
return validateValue(nextValue, { min, max });
|
|
21
|
-
});
|
|
22
|
-
},
|
|
23
|
-
[min, max]
|
|
24
|
-
);
|
|
25
|
-
const increment = useCallback(() => {
|
|
26
|
-
setCount((prev) => prev + step);
|
|
27
|
-
}, [setCount, step]);
|
|
28
|
-
const decrement = useCallback(() => {
|
|
29
|
-
setCount((prev) => prev - step);
|
|
30
|
-
}, [setCount, step]);
|
|
31
|
-
const reset = useCallback(() => {
|
|
32
|
-
setCount(initialValue);
|
|
33
|
-
}, [setCount, initialValue]);
|
|
34
|
-
return {
|
|
35
|
-
count,
|
|
36
|
-
increment,
|
|
37
|
-
decrement,
|
|
38
|
-
reset,
|
|
39
|
-
setCount
|
|
40
|
-
};
|
|
41
|
-
}
|
|
42
|
-
export {
|
|
43
|
-
useCounter
|
|
44
|
-
};
|
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useDebounce/useDebounce.ts
|
|
4
|
-
import { useEffect as useEffect2 } from "react";
|
|
5
|
-
import { useMemo } from "react";
|
|
6
|
-
|
|
7
|
-
// src/hooks/usePreservedCallback/usePreservedCallback.ts
|
|
8
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
9
|
-
function usePreservedCallback(callback) {
|
|
10
|
-
const callbackRef = useRef(callback);
|
|
11
|
-
useEffect(
|
|
12
|
-
function syncCallbackRef() {
|
|
13
|
-
callbackRef.current = callback;
|
|
14
|
-
},
|
|
15
|
-
[callback]
|
|
16
|
-
);
|
|
17
|
-
return useCallback((...args) => {
|
|
18
|
-
return callbackRef.current(...args);
|
|
19
|
-
}, []);
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
// src/hooks/useDebounce/debounce.ts
|
|
23
|
-
function debounce(func, debounceMs, { edges = ["leading", "trailing"] } = {}) {
|
|
24
|
-
let pendingThis = void 0;
|
|
25
|
-
let pendingArgs = null;
|
|
26
|
-
const leading = edges != null && edges.includes("leading");
|
|
27
|
-
const trailing = edges == null || edges.includes("trailing");
|
|
28
|
-
const invoke = () => {
|
|
29
|
-
if (pendingArgs !== null) {
|
|
30
|
-
func.apply(pendingThis, pendingArgs);
|
|
31
|
-
pendingThis = void 0;
|
|
32
|
-
pendingArgs = null;
|
|
33
|
-
}
|
|
34
|
-
};
|
|
35
|
-
const onTimerEnd = () => {
|
|
36
|
-
if (trailing) {
|
|
37
|
-
invoke();
|
|
38
|
-
}
|
|
39
|
-
cancel();
|
|
40
|
-
};
|
|
41
|
-
let timeoutId = null;
|
|
42
|
-
const schedule = () => {
|
|
43
|
-
if (timeoutId != null) {
|
|
44
|
-
clearTimeout(timeoutId);
|
|
45
|
-
}
|
|
46
|
-
timeoutId = setTimeout(() => {
|
|
47
|
-
timeoutId = null;
|
|
48
|
-
onTimerEnd();
|
|
49
|
-
}, debounceMs);
|
|
50
|
-
};
|
|
51
|
-
const cancelTimer = () => {
|
|
52
|
-
if (timeoutId !== null) {
|
|
53
|
-
clearTimeout(timeoutId);
|
|
54
|
-
timeoutId = null;
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const cancel = () => {
|
|
58
|
-
cancelTimer();
|
|
59
|
-
pendingThis = void 0;
|
|
60
|
-
pendingArgs = null;
|
|
61
|
-
};
|
|
62
|
-
const debounced = function(...args) {
|
|
63
|
-
pendingThis = this;
|
|
64
|
-
pendingArgs = args;
|
|
65
|
-
const isFirstCall = timeoutId == null;
|
|
66
|
-
schedule();
|
|
67
|
-
if (leading && isFirstCall) {
|
|
68
|
-
invoke();
|
|
69
|
-
}
|
|
70
|
-
};
|
|
71
|
-
debounced.cancel = cancel;
|
|
72
|
-
return debounced;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
// src/hooks/useDebounce/useDebounce.ts
|
|
76
|
-
function useDebounce(callback, wait, options = {}) {
|
|
77
|
-
const preservedCallback = usePreservedCallback(callback);
|
|
78
|
-
const { leading = false, trailing = true } = options;
|
|
79
|
-
const edges = useMemo(() => {
|
|
80
|
-
const _edges = [];
|
|
81
|
-
if (leading) {
|
|
82
|
-
_edges.push("leading");
|
|
83
|
-
}
|
|
84
|
-
if (trailing) {
|
|
85
|
-
_edges.push("trailing");
|
|
86
|
-
}
|
|
87
|
-
return _edges;
|
|
88
|
-
}, [leading, trailing]);
|
|
89
|
-
const debounced = useMemo(() => {
|
|
90
|
-
return debounce(preservedCallback, wait, { edges });
|
|
91
|
-
}, [preservedCallback, wait, edges]);
|
|
92
|
-
useEffect2(
|
|
93
|
-
function cancelDebouncedOnUnmount() {
|
|
94
|
-
return () => {
|
|
95
|
-
debounced.cancel();
|
|
96
|
-
};
|
|
97
|
-
},
|
|
98
|
-
[debounced]
|
|
99
|
-
);
|
|
100
|
-
return debounced;
|
|
101
|
-
}
|
|
102
|
-
export {
|
|
103
|
-
useDebounce
|
|
104
|
-
};
|
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useDebouncedCallback/useDebouncedCallback.ts
|
|
4
|
-
import { useCallback as useCallback2, useEffect as useEffect2, useMemo, useRef as useRef2 } from "react";
|
|
5
|
-
|
|
6
|
-
// src/hooks/useDebounce/debounce.ts
|
|
7
|
-
function debounce(func, debounceMs, { edges = ["leading", "trailing"] } = {}) {
|
|
8
|
-
let pendingThis = void 0;
|
|
9
|
-
let pendingArgs = null;
|
|
10
|
-
const leading = edges != null && edges.includes("leading");
|
|
11
|
-
const trailing = edges == null || edges.includes("trailing");
|
|
12
|
-
const invoke = () => {
|
|
13
|
-
if (pendingArgs !== null) {
|
|
14
|
-
func.apply(pendingThis, pendingArgs);
|
|
15
|
-
pendingThis = void 0;
|
|
16
|
-
pendingArgs = null;
|
|
17
|
-
}
|
|
18
|
-
};
|
|
19
|
-
const onTimerEnd = () => {
|
|
20
|
-
if (trailing) {
|
|
21
|
-
invoke();
|
|
22
|
-
}
|
|
23
|
-
cancel();
|
|
24
|
-
};
|
|
25
|
-
let timeoutId = null;
|
|
26
|
-
const schedule = () => {
|
|
27
|
-
if (timeoutId != null) {
|
|
28
|
-
clearTimeout(timeoutId);
|
|
29
|
-
}
|
|
30
|
-
timeoutId = setTimeout(() => {
|
|
31
|
-
timeoutId = null;
|
|
32
|
-
onTimerEnd();
|
|
33
|
-
}, debounceMs);
|
|
34
|
-
};
|
|
35
|
-
const cancelTimer = () => {
|
|
36
|
-
if (timeoutId !== null) {
|
|
37
|
-
clearTimeout(timeoutId);
|
|
38
|
-
timeoutId = null;
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
const cancel = () => {
|
|
42
|
-
cancelTimer();
|
|
43
|
-
pendingThis = void 0;
|
|
44
|
-
pendingArgs = null;
|
|
45
|
-
};
|
|
46
|
-
const debounced = function(...args) {
|
|
47
|
-
pendingThis = this;
|
|
48
|
-
pendingArgs = args;
|
|
49
|
-
const isFirstCall = timeoutId == null;
|
|
50
|
-
schedule();
|
|
51
|
-
if (leading && isFirstCall) {
|
|
52
|
-
invoke();
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
debounced.cancel = cancel;
|
|
56
|
-
return debounced;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
// src/hooks/usePreservedCallback/usePreservedCallback.ts
|
|
60
|
-
import { useCallback, useEffect, useRef } from "react";
|
|
61
|
-
function usePreservedCallback(callback) {
|
|
62
|
-
const callbackRef = useRef(callback);
|
|
63
|
-
useEffect(
|
|
64
|
-
function syncCallbackRef() {
|
|
65
|
-
callbackRef.current = callback;
|
|
66
|
-
},
|
|
67
|
-
[callback]
|
|
68
|
-
);
|
|
69
|
-
return useCallback((...args) => {
|
|
70
|
-
return callbackRef.current(...args);
|
|
71
|
-
}, []);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// src/hooks/useDebouncedCallback/useDebouncedCallback.ts
|
|
75
|
-
function useDebouncedCallback({
|
|
76
|
-
onChange,
|
|
77
|
-
timeThreshold,
|
|
78
|
-
leading = false,
|
|
79
|
-
trailing = true
|
|
80
|
-
}) {
|
|
81
|
-
const handleChange = usePreservedCallback(onChange);
|
|
82
|
-
const ref = useRef2({ value: false, clearPreviousDebounce: () => {
|
|
83
|
-
} });
|
|
84
|
-
useEffect2(function clearDebouncedOnUnmount() {
|
|
85
|
-
const current = ref.current;
|
|
86
|
-
return () => {
|
|
87
|
-
current.clearPreviousDebounce();
|
|
88
|
-
};
|
|
89
|
-
}, []);
|
|
90
|
-
const edges = useMemo(() => {
|
|
91
|
-
const _edges = [];
|
|
92
|
-
if (leading) {
|
|
93
|
-
_edges.push("leading");
|
|
94
|
-
}
|
|
95
|
-
if (trailing) {
|
|
96
|
-
_edges.push("trailing");
|
|
97
|
-
}
|
|
98
|
-
return _edges;
|
|
99
|
-
}, [leading, trailing]);
|
|
100
|
-
return useCallback2(
|
|
101
|
-
(nextValue) => {
|
|
102
|
-
if (nextValue === ref.current.value) {
|
|
103
|
-
return;
|
|
104
|
-
}
|
|
105
|
-
const debounced = debounce(
|
|
106
|
-
() => {
|
|
107
|
-
handleChange(nextValue);
|
|
108
|
-
ref.current.value = nextValue;
|
|
109
|
-
},
|
|
110
|
-
timeThreshold,
|
|
111
|
-
{ edges }
|
|
112
|
-
);
|
|
113
|
-
ref.current.clearPreviousDebounce();
|
|
114
|
-
debounced();
|
|
115
|
-
ref.current.clearPreviousDebounce = debounced.cancel;
|
|
116
|
-
},
|
|
117
|
-
[handleChange, timeThreshold, edges]
|
|
118
|
-
);
|
|
119
|
-
}
|
|
120
|
-
export {
|
|
121
|
-
useDebouncedCallback
|
|
122
|
-
};
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useDoubleClick/useDoubleClick.ts
|
|
4
|
-
import { useCallback as useCallback2, 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/useDoubleClick/useDoubleClick.ts
|
|
22
|
-
function useDoubleClick({
|
|
23
|
-
delay = 250,
|
|
24
|
-
click,
|
|
25
|
-
doubleClick
|
|
26
|
-
}) {
|
|
27
|
-
const clickTimeout = useRef2(null);
|
|
28
|
-
const clearClickTimeout = usePreservedCallback(() => {
|
|
29
|
-
if (clickTimeout.current != null) {
|
|
30
|
-
window.clearTimeout(clickTimeout.current);
|
|
31
|
-
clickTimeout.current = null;
|
|
32
|
-
}
|
|
33
|
-
});
|
|
34
|
-
useEffect2(() => () => clearClickTimeout(), [clearClickTimeout]);
|
|
35
|
-
const handleEvent = useCallback2(
|
|
36
|
-
(event) => {
|
|
37
|
-
clearClickTimeout();
|
|
38
|
-
if (click && event.detail === 1) {
|
|
39
|
-
clickTimeout.current = window.setTimeout(() => {
|
|
40
|
-
click(event);
|
|
41
|
-
}, delay);
|
|
42
|
-
}
|
|
43
|
-
if (event.detail === 2) {
|
|
44
|
-
doubleClick(event);
|
|
45
|
-
}
|
|
46
|
-
},
|
|
47
|
-
[click, doubleClick, delay, clearClickTimeout]
|
|
48
|
-
);
|
|
49
|
-
return handleEvent;
|
|
50
|
-
}
|
|
51
|
-
export {
|
|
52
|
-
useDoubleClick
|
|
53
|
-
};
|
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useGeolocation/useGeolocation.ts
|
|
4
|
-
import { useCallback, useEffect, useRef, useState } from "react";
|
|
5
|
-
var CustomGeoLocationError = class extends Error {
|
|
6
|
-
code;
|
|
7
|
-
constructor({ code, message }) {
|
|
8
|
-
super(message);
|
|
9
|
-
this.name = "CustomGeoLocationError";
|
|
10
|
-
this.code = code;
|
|
11
|
-
}
|
|
12
|
-
};
|
|
13
|
-
var GeolocationMountBehavior = {
|
|
14
|
-
GET: "get",
|
|
15
|
-
WATCH: "watch"
|
|
16
|
-
};
|
|
17
|
-
function useGeolocation(options) {
|
|
18
|
-
const [state, setState] = useState({
|
|
19
|
-
loading: !!options?.mountBehavior,
|
|
20
|
-
error: null,
|
|
21
|
-
data: null
|
|
22
|
-
});
|
|
23
|
-
const [isTracking, setIsTracking] = useState(false);
|
|
24
|
-
const watchIdRef = useRef(null);
|
|
25
|
-
const checkGeolocationSupport = useCallback(() => {
|
|
26
|
-
if (typeof window === "undefined" || navigator.geolocation === void 0) {
|
|
27
|
-
setState((prev) => ({
|
|
28
|
-
...prev,
|
|
29
|
-
loading: false,
|
|
30
|
-
error: new CustomGeoLocationError({
|
|
31
|
-
code: 0,
|
|
32
|
-
message: "Geolocation is not supported by this environment."
|
|
33
|
-
})
|
|
34
|
-
}));
|
|
35
|
-
return false;
|
|
36
|
-
}
|
|
37
|
-
return true;
|
|
38
|
-
}, []);
|
|
39
|
-
const handleSuccess = useCallback((position) => {
|
|
40
|
-
const { coords } = position;
|
|
41
|
-
setState((prev) => ({
|
|
42
|
-
...prev,
|
|
43
|
-
loading: false,
|
|
44
|
-
error: null,
|
|
45
|
-
data: {
|
|
46
|
-
latitude: coords.latitude,
|
|
47
|
-
longitude: coords.longitude,
|
|
48
|
-
accuracy: coords.accuracy,
|
|
49
|
-
altitude: coords.altitude,
|
|
50
|
-
altitudeAccuracy: coords.altitudeAccuracy,
|
|
51
|
-
heading: coords.heading,
|
|
52
|
-
speed: coords.speed,
|
|
53
|
-
timestamp: position.timestamp
|
|
54
|
-
}
|
|
55
|
-
}));
|
|
56
|
-
}, []);
|
|
57
|
-
const handleError = useCallback((error) => {
|
|
58
|
-
const { code, message } = error;
|
|
59
|
-
setState((prev) => ({
|
|
60
|
-
...prev,
|
|
61
|
-
loading: false,
|
|
62
|
-
error: new CustomGeoLocationError({ code, message })
|
|
63
|
-
}));
|
|
64
|
-
}, []);
|
|
65
|
-
const getGeolocationOptions = useCallback(
|
|
66
|
-
() => ({
|
|
67
|
-
enableHighAccuracy: options?.enableHighAccuracy,
|
|
68
|
-
maximumAge: options?.maximumAge,
|
|
69
|
-
timeout: options?.timeout
|
|
70
|
-
}),
|
|
71
|
-
[options?.enableHighAccuracy, options?.maximumAge, options?.timeout]
|
|
72
|
-
);
|
|
73
|
-
const getCurrentPosition = useCallback(() => {
|
|
74
|
-
if (!checkGeolocationSupport()) {
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
setState((prev) => ({ ...prev, loading: true }));
|
|
78
|
-
navigator.geolocation.getCurrentPosition(handleSuccess, handleError, getGeolocationOptions());
|
|
79
|
-
}, [handleSuccess, handleError, getGeolocationOptions, checkGeolocationSupport]);
|
|
80
|
-
const startTracking = useCallback(() => {
|
|
81
|
-
if (!checkGeolocationSupport()) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
if (watchIdRef.current !== null) {
|
|
85
|
-
navigator.geolocation.clearWatch(watchIdRef.current);
|
|
86
|
-
}
|
|
87
|
-
setState((prev) => ({ ...prev, loading: true }));
|
|
88
|
-
watchIdRef.current = navigator.geolocation.watchPosition(
|
|
89
|
-
(position) => {
|
|
90
|
-
setIsTracking(true);
|
|
91
|
-
handleSuccess(position);
|
|
92
|
-
},
|
|
93
|
-
handleError,
|
|
94
|
-
getGeolocationOptions()
|
|
95
|
-
);
|
|
96
|
-
}, [handleSuccess, handleError, getGeolocationOptions, checkGeolocationSupport]);
|
|
97
|
-
const stopTracking = useCallback(() => {
|
|
98
|
-
if (watchIdRef.current === null) {
|
|
99
|
-
return;
|
|
100
|
-
}
|
|
101
|
-
navigator.geolocation.clearWatch(watchIdRef.current);
|
|
102
|
-
watchIdRef.current = null;
|
|
103
|
-
setIsTracking(false);
|
|
104
|
-
}, []);
|
|
105
|
-
useEffect(() => {
|
|
106
|
-
if (options?.mountBehavior === GeolocationMountBehavior.WATCH) {
|
|
107
|
-
startTracking();
|
|
108
|
-
} else if (options?.mountBehavior === GeolocationMountBehavior.GET) {
|
|
109
|
-
getCurrentPosition();
|
|
110
|
-
}
|
|
111
|
-
return () => {
|
|
112
|
-
if (watchIdRef.current !== null) {
|
|
113
|
-
navigator.geolocation.clearWatch(watchIdRef.current);
|
|
114
|
-
watchIdRef.current = null;
|
|
115
|
-
}
|
|
116
|
-
};
|
|
117
|
-
}, [options?.mountBehavior, getCurrentPosition, startTracking]);
|
|
118
|
-
return {
|
|
119
|
-
...state,
|
|
120
|
-
getCurrentPosition,
|
|
121
|
-
startTracking,
|
|
122
|
-
stopTracking,
|
|
123
|
-
isTracking
|
|
124
|
-
};
|
|
125
|
-
}
|
|
126
|
-
export {
|
|
127
|
-
useGeolocation
|
|
128
|
-
};
|
|
@@ -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
|
-
};
|