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,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,48 +0,0 @@
|
|
|
1
|
-
"use client";
|
|
2
|
-
|
|
3
|
-
// src/hooks/useInterval/useInterval.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/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
|
-
useEffect2(
|
|
28
|
-
function runImmediateCallback() {
|
|
29
|
-
if (immediate === true && enabled) {
|
|
30
|
-
preservedCallback();
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
[immediate, preservedCallback, enabled]
|
|
34
|
-
);
|
|
35
|
-
useEffect2(
|
|
36
|
-
function startInterval() {
|
|
37
|
-
if (!enabled) {
|
|
38
|
-
return;
|
|
39
|
-
}
|
|
40
|
-
const id = setInterval(preservedCallback, delay);
|
|
41
|
-
return () => clearInterval(id);
|
|
42
|
-
},
|
|
43
|
-
[delay, preservedCallback, enabled]
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
export {
|
|
47
|
-
useInterval
|
|
48
|
-
};
|
|
@@ -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
|
-
};
|
|
@@ -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
|
-
};
|