@siberiacancode/reactuse 0.3.2 → 0.3.4
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/cjs/hooks/useActiveElement/useActiveElement.cjs +1 -1
- package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs.map +1 -1
- package/dist/cjs/hooks/useAudio/useAudio.cjs +1 -1
- package/dist/cjs/hooks/useAudio/useAudio.cjs.map +1 -1
- package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs +1 -1
- package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs.map +1 -1
- package/dist/cjs/hooks/useBreakpoints/useBreakpoints.cjs +1 -1
- package/dist/cjs/hooks/useBreakpoints/useBreakpoints.cjs.map +1 -1
- package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs +1 -1
- package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
- package/dist/cjs/hooks/useCookie/useCookie.cjs +1 -1
- package/dist/cjs/hooks/useCookie/useCookie.cjs.map +1 -1
- package/dist/cjs/hooks/useCounter/useCounter.cjs +1 -1
- package/dist/cjs/hooks/useCounter/useCounter.cjs.map +1 -1
- package/dist/cjs/hooks/useCssVar/useCssVar.cjs +1 -1
- package/dist/cjs/hooks/useCssVar/useCssVar.cjs.map +1 -1
- package/dist/cjs/hooks/useDeviceMotion/useDeviceMotion.cjs +1 -1
- package/dist/cjs/hooks/useDeviceMotion/useDeviceMotion.cjs.map +1 -1
- package/dist/cjs/hooks/useDisplayMedia/useDisplayMedia.cjs +1 -1
- package/dist/cjs/hooks/useDisplayMedia/useDisplayMedia.cjs.map +1 -1
- package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs +1 -1
- package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs.map +1 -1
- package/dist/cjs/hooks/useDropZone/useDropZone.cjs +1 -1
- package/dist/cjs/hooks/useDropZone/useDropZone.cjs.map +1 -1
- package/dist/cjs/hooks/useElementSize/useElementSize.cjs +1 -1
- package/dist/cjs/hooks/useElementSize/useElementSize.cjs.map +1 -1
- package/dist/cjs/hooks/useEventListener/useEventListener.cjs +1 -1
- package/dist/cjs/hooks/useEventListener/useEventListener.cjs.map +1 -1
- package/dist/cjs/hooks/useFileDialog/useFileDialog.cjs +1 -1
- package/dist/cjs/hooks/useFileDialog/useFileDialog.cjs.map +1 -1
- package/dist/cjs/hooks/useFocus/useFocus.cjs +1 -1
- package/dist/cjs/hooks/useFocus/useFocus.cjs.map +1 -1
- package/dist/cjs/hooks/useFocusTrap/useFocusTrap.cjs +1 -1
- package/dist/cjs/hooks/useFocusTrap/useFocusTrap.cjs.map +1 -1
- package/dist/cjs/hooks/useFullscreen/useFullscreen.cjs +1 -1
- package/dist/cjs/hooks/useFullscreen/useFullscreen.cjs.map +1 -1
- package/dist/cjs/hooks/useHash/useHash.cjs +1 -1
- package/dist/cjs/hooks/useHash/useHash.cjs.map +1 -1
- package/dist/cjs/hooks/useHotkeys/useHotkeys.cjs +1 -1
- package/dist/cjs/hooks/useHotkeys/useHotkeys.cjs.map +1 -1
- package/dist/cjs/hooks/useHover/useHover.cjs +1 -1
- package/dist/cjs/hooks/useHover/useHover.cjs.map +1 -1
- package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs +1 -1
- package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs.map +1 -1
- package/dist/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs +1 -1
- package/dist/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs.map +1 -1
- package/dist/cjs/hooks/useInterval/useInterval.cjs +1 -1
- package/dist/cjs/hooks/useInterval/useInterval.cjs.map +1 -1
- package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs +1 -1
- package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs.map +1 -1
- package/dist/cjs/hooks/useKeyPressEvent/useKeyPressEvent.cjs +1 -1
- package/dist/cjs/hooks/useKeyPressEvent/useKeyPressEvent.cjs.map +1 -1
- package/dist/cjs/hooks/useKeyboard/useKeyboard.cjs +1 -1
- package/dist/cjs/hooks/useKeyboard/useKeyboard.cjs.map +1 -1
- package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs +1 -1
- package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs.map +1 -1
- package/dist/cjs/hooks/useLockScroll/useLockScroll.cjs +1 -1
- package/dist/cjs/hooks/useLockScroll/useLockScroll.cjs.map +1 -1
- package/dist/cjs/hooks/useLongPress/useLongPress.cjs +1 -1
- package/dist/cjs/hooks/useLongPress/useLongPress.cjs.map +1 -1
- package/dist/cjs/hooks/useMeasure/useMeasure.cjs +1 -1
- package/dist/cjs/hooks/useMeasure/useMeasure.cjs.map +1 -1
- package/dist/cjs/hooks/useMediaControls/useMediaControls.cjs +1 -1
- package/dist/cjs/hooks/useMediaControls/useMediaControls.cjs.map +1 -1
- package/dist/cjs/hooks/useMouse/useMouse.cjs +1 -1
- package/dist/cjs/hooks/useMouse/useMouse.cjs.map +1 -1
- package/dist/cjs/hooks/useMutationObserver/useMutationObserver.cjs +1 -1
- package/dist/cjs/hooks/useMutationObserver/useMutationObserver.cjs.map +1 -1
- package/dist/cjs/hooks/useOtpCredential/useOtpCredential.cjs +1 -1
- package/dist/cjs/hooks/useOtpCredential/useOtpCredential.cjs.map +1 -1
- package/dist/cjs/hooks/usePaint/usePaint.cjs +1 -1
- package/dist/cjs/hooks/usePaint/usePaint.cjs.map +1 -1
- package/dist/cjs/hooks/useParallax/useParallax.cjs +1 -1
- package/dist/cjs/hooks/useParallax/useParallax.cjs.map +1 -1
- package/dist/cjs/hooks/usePictureInPicture/usePictureInPicture.cjs +1 -1
- package/dist/cjs/hooks/usePictureInPicture/usePictureInPicture.cjs.map +1 -1
- package/dist/cjs/hooks/useRefState/useRefState.cjs +1 -1
- package/dist/cjs/hooks/useRefState/useRefState.cjs.map +1 -1
- package/dist/cjs/hooks/useResizeObserver/useResizeObserver.cjs +1 -1
- package/dist/cjs/hooks/useResizeObserver/useResizeObserver.cjs.map +1 -1
- package/dist/cjs/hooks/useRightClick/useRightClick.cjs +1 -1
- package/dist/cjs/hooks/useRightClick/useRightClick.cjs.map +1 -1
- package/dist/cjs/hooks/useScroll/useScroll.cjs +1 -1
- package/dist/cjs/hooks/useScroll/useScroll.cjs.map +1 -1
- package/dist/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs +1 -1
- package/dist/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs.map +1 -1
- package/dist/cjs/hooks/useScrollTo/useScrollTo.cjs +1 -1
- package/dist/cjs/hooks/useScrollTo/useScrollTo.cjs.map +1 -1
- package/dist/cjs/hooks/useSticky/useSticky.cjs +1 -1
- package/dist/cjs/hooks/useSticky/useSticky.cjs.map +1 -1
- package/dist/cjs/hooks/useStopwatch/useStopwatch.cjs +1 -1
- package/dist/cjs/hooks/useStopwatch/useStopwatch.cjs.map +1 -1
- package/dist/cjs/hooks/useStorage/useStorage.cjs +1 -1
- package/dist/cjs/hooks/useStorage/useStorage.cjs.map +1 -1
- package/dist/cjs/hooks/useTextDirection/useTextDirection.cjs +1 -1
- package/dist/cjs/hooks/useTextDirection/useTextDirection.cjs.map +1 -1
- package/dist/cjs/hooks/useTextareaAutosize/useTextareaAutosize.cjs +2 -0
- package/dist/cjs/hooks/useTextareaAutosize/useTextareaAutosize.cjs.map +1 -0
- package/dist/cjs/hooks/useTimer/useTimer.cjs +1 -1
- package/dist/cjs/hooks/useTimer/useTimer.cjs.map +1 -1
- package/dist/cjs/hooks/useUrlSearchParam/useUrlSearchParam.cjs +1 -1
- package/dist/cjs/hooks/useUrlSearchParam/useUrlSearchParam.cjs.map +1 -1
- package/dist/cjs/hooks/useUrlSearchParams/useUrlSearchParams.cjs +1 -1
- package/dist/cjs/hooks/useUrlSearchParams/useUrlSearchParams.cjs.map +1 -1
- package/dist/cjs/hooks/useVisibility/useVisibility.cjs +1 -1
- package/dist/cjs/hooks/useVisibility/useVisibility.cjs.map +1 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/utils/helpers/isTarget.cjs +1 -1
- package/dist/cjs/utils/helpers/isTarget.cjs.map +1 -1
- package/dist/esm/hooks/useActiveElement/useActiveElement.mjs +13 -13
- package/dist/esm/hooks/useActiveElement/useActiveElement.mjs.map +1 -1
- package/dist/esm/hooks/useAudio/useAudio.mjs +29 -23
- package/dist/esm/hooks/useAudio/useAudio.mjs.map +1 -1
- package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs +24 -24
- package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs.map +1 -1
- package/dist/esm/hooks/useBreakpoints/useBreakpoints.mjs +30 -35
- package/dist/esm/hooks/useBreakpoints/useBreakpoints.mjs.map +1 -1
- package/dist/esm/hooks/useClickOutside/useClickOutside.mjs +15 -14
- package/dist/esm/hooks/useClickOutside/useClickOutside.mjs.map +1 -1
- package/dist/esm/hooks/useCookie/useCookie.mjs +2 -2
- package/dist/esm/hooks/useCookie/useCookie.mjs.map +1 -1
- package/dist/esm/hooks/useCounter/useCounter.mjs +2 -2
- package/dist/esm/hooks/useCounter/useCounter.mjs.map +1 -1
- package/dist/esm/hooks/useCssVar/useCssVar.mjs +8 -8
- package/dist/esm/hooks/useCssVar/useCssVar.mjs.map +1 -1
- package/dist/esm/hooks/useDeviceMotion/useDeviceMotion.mjs +2 -2
- package/dist/esm/hooks/useDeviceMotion/useDeviceMotion.mjs.map +1 -1
- package/dist/esm/hooks/useDisplayMedia/useDisplayMedia.mjs +17 -17
- package/dist/esm/hooks/useDisplayMedia/useDisplayMedia.mjs.map +1 -1
- package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs +14 -14
- package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs.map +1 -1
- package/dist/esm/hooks/useDropZone/useDropZone.mjs +23 -23
- package/dist/esm/hooks/useDropZone/useDropZone.mjs.map +1 -1
- package/dist/esm/hooks/useElementSize/useElementSize.mjs +14 -14
- package/dist/esm/hooks/useElementSize/useElementSize.mjs.map +1 -1
- package/dist/esm/hooks/useEventListener/useEventListener.mjs +14 -14
- package/dist/esm/hooks/useEventListener/useEventListener.mjs.map +1 -1
- package/dist/esm/hooks/useFileDialog/useFileDialog.mjs +2 -2
- package/dist/esm/hooks/useFileDialog/useFileDialog.mjs.map +1 -1
- package/dist/esm/hooks/useFocus/useFocus.mjs +20 -20
- package/dist/esm/hooks/useFocus/useFocus.mjs.map +1 -1
- package/dist/esm/hooks/useFocusTrap/useFocusTrap.mjs +21 -21
- package/dist/esm/hooks/useFocusTrap/useFocusTrap.mjs.map +1 -1
- package/dist/esm/hooks/useFullscreen/useFullscreen.mjs +2 -2
- package/dist/esm/hooks/useFullscreen/useFullscreen.mjs.map +1 -1
- package/dist/esm/hooks/useHash/useHash.mjs +2 -2
- package/dist/esm/hooks/useHash/useHash.mjs.map +1 -1
- package/dist/esm/hooks/useHotkeys/useHotkeys.mjs +24 -16
- package/dist/esm/hooks/useHotkeys/useHotkeys.mjs.map +1 -1
- package/dist/esm/hooks/useHover/useHover.mjs +16 -16
- package/dist/esm/hooks/useHover/useHover.mjs.map +1 -1
- package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs +16 -16
- package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs.map +1 -1
- package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.mjs +26 -18
- package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.mjs.map +1 -1
- package/dist/esm/hooks/useInterval/useInterval.mjs +2 -2
- package/dist/esm/hooks/useInterval/useInterval.mjs.map +1 -1
- package/dist/esm/hooks/useKeyPress/useKeyPress.mjs +15 -15
- package/dist/esm/hooks/useKeyPress/useKeyPress.mjs.map +1 -1
- package/dist/esm/hooks/useKeyPressEvent/useKeyPressEvent.mjs +22 -15
- package/dist/esm/hooks/useKeyPressEvent/useKeyPressEvent.mjs.map +1 -1
- package/dist/esm/hooks/useKeyboard/useKeyboard.mjs +10 -10
- package/dist/esm/hooks/useKeyboard/useKeyboard.mjs.map +1 -1
- package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs +12 -12
- package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs.map +1 -1
- package/dist/esm/hooks/useLockScroll/useLockScroll.mjs +23 -23
- package/dist/esm/hooks/useLockScroll/useLockScroll.mjs.map +1 -1
- package/dist/esm/hooks/useLongPress/useLongPress.mjs +16 -16
- package/dist/esm/hooks/useLongPress/useLongPress.mjs.map +1 -1
- package/dist/esm/hooks/useMeasure/useMeasure.mjs +15 -15
- package/dist/esm/hooks/useMeasure/useMeasure.mjs.map +1 -1
- package/dist/esm/hooks/useMediaControls/useMediaControls.mjs +28 -28
- package/dist/esm/hooks/useMediaControls/useMediaControls.mjs.map +1 -1
- package/dist/esm/hooks/useMouse/useMouse.mjs +17 -17
- package/dist/esm/hooks/useMouse/useMouse.mjs.map +1 -1
- package/dist/esm/hooks/useMutationObserver/useMutationObserver.mjs +17 -16
- package/dist/esm/hooks/useMutationObserver/useMutationObserver.mjs.map +1 -1
- package/dist/esm/hooks/useOtpCredential/useOtpCredential.mjs +2 -2
- package/dist/esm/hooks/useOtpCredential/useOtpCredential.mjs.map +1 -1
- package/dist/esm/hooks/usePaint/usePaint.mjs +31 -31
- package/dist/esm/hooks/usePaint/usePaint.mjs.map +1 -1
- package/dist/esm/hooks/useParallax/useParallax.mjs +24 -23
- package/dist/esm/hooks/useParallax/useParallax.mjs.map +1 -1
- package/dist/esm/hooks/usePictureInPicture/usePictureInPicture.mjs +25 -25
- package/dist/esm/hooks/usePictureInPicture/usePictureInPicture.mjs.map +1 -1
- package/dist/esm/hooks/useRefState/useRefState.mjs +1 -0
- package/dist/esm/hooks/useRefState/useRefState.mjs.map +1 -1
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs +16 -16
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs.map +1 -1
- package/dist/esm/hooks/useRightClick/useRightClick.mjs +14 -14
- package/dist/esm/hooks/useRightClick/useRightClick.mjs.map +1 -1
- package/dist/esm/hooks/useScroll/useScroll.mjs +22 -22
- package/dist/esm/hooks/useScroll/useScroll.mjs.map +1 -1
- package/dist/esm/hooks/useScrollIntoView/useScrollIntoView.mjs +16 -16
- package/dist/esm/hooks/useScrollIntoView/useScrollIntoView.mjs.map +1 -1
- package/dist/esm/hooks/useScrollTo/useScrollTo.mjs +10 -10
- package/dist/esm/hooks/useScrollTo/useScrollTo.mjs.map +1 -1
- package/dist/esm/hooks/useSticky/useSticky.mjs +17 -17
- package/dist/esm/hooks/useSticky/useSticky.mjs.map +1 -1
- package/dist/esm/hooks/useStopwatch/useStopwatch.mjs +4 -4
- package/dist/esm/hooks/useStopwatch/useStopwatch.mjs.map +1 -1
- package/dist/esm/hooks/useStorage/useStorage.mjs +2 -2
- package/dist/esm/hooks/useStorage/useStorage.mjs.map +1 -1
- package/dist/esm/hooks/useTextDirection/useTextDirection.mjs +12 -12
- package/dist/esm/hooks/useTextDirection/useTextDirection.mjs.map +1 -1
- package/dist/esm/hooks/useTextareaAutosize/useTextareaAutosize.mjs +58 -0
- package/dist/esm/hooks/useTextareaAutosize/useTextareaAutosize.mjs.map +1 -0
- package/dist/esm/hooks/useTimer/useTimer.mjs +3 -3
- package/dist/esm/hooks/useTimer/useTimer.mjs.map +1 -1
- package/dist/esm/hooks/useUrlSearchParam/useUrlSearchParam.mjs +2 -2
- package/dist/esm/hooks/useUrlSearchParam/useUrlSearchParam.mjs.map +1 -1
- package/dist/esm/hooks/useUrlSearchParams/useUrlSearchParams.mjs +2 -2
- package/dist/esm/hooks/useUrlSearchParams/useUrlSearchParams.mjs.map +1 -1
- package/dist/esm/hooks/useVisibility/useVisibility.mjs +25 -17
- package/dist/esm/hooks/useVisibility/useVisibility.mjs.map +1 -1
- package/dist/esm/index.mjs +255 -251
- package/dist/esm/index.mjs.map +1 -1
- package/dist/esm/utils/helpers/isTarget.mjs +10 -8
- package/dist/esm/utils/helpers/isTarget.mjs.map +1 -1
- package/dist/types/hooks/elements.d.ts +1 -0
- package/dist/types/hooks/useBreakpoints/useBreakpoints.d.ts +1 -11
- package/dist/types/hooks/useClickOutside/useClickOutside.d.ts +1 -1
- package/dist/types/hooks/useHover/useHover.d.ts +6 -6
- package/dist/types/hooks/useRefState/useRefState.d.ts +1 -0
- package/dist/types/hooks/useTextareaAutosize/useTextareaAutosize.d.ts +60 -0
- package/dist/types/utils/helpers/isTarget.d.ts +9 -1
- package/package.json +12 -12
|
@@ -1,50 +1,56 @@
|
|
|
1
|
-
import { useState as o, useRef as h, useEffect as
|
|
2
|
-
const
|
|
3
|
-
const [
|
|
4
|
-
|
|
5
|
-
const e = new Audio(
|
|
6
|
-
e.volume = m, e.playbackRate =
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { useState as o, useRef as h, useEffect as E } from "react";
|
|
2
|
+
const P = (l, a = {}) => {
|
|
3
|
+
const [i, r] = o(!1), [m, v] = o(a.volume ?? 1), [d, f] = o(a.playbackRate ?? 1), t = h(null);
|
|
4
|
+
E(() => {
|
|
5
|
+
const e = new Audio(l);
|
|
6
|
+
if (e.volume = m, e.playbackRate = d, t.current = e, a.immediately)
|
|
7
|
+
try {
|
|
8
|
+
r(!0), e.play();
|
|
9
|
+
} catch {
|
|
10
|
+
r(!1);
|
|
11
|
+
}
|
|
12
|
+
const n = () => r(!0), c = () => r(!1), u = () => r(!1), y = () => v(e.volume), p = () => f(e.playbackRate);
|
|
13
|
+
return e.addEventListener("play", n), e.addEventListener("pause", c), e.addEventListener("ended", u), e.addEventListener("volumechange", y), e.addEventListener("ratechange", p), () => {
|
|
14
|
+
e.removeEventListener("play", n), e.removeEventListener("pause", c), e.removeEventListener("ended", u), e.removeEventListener("volumechange", y), e.removeEventListener("ratechange", p), e.pause(), e.remove();
|
|
11
15
|
};
|
|
12
|
-
}, [
|
|
16
|
+
}, [l]);
|
|
13
17
|
const s = () => {
|
|
14
|
-
t.current && (t.current.pause(), t.current.currentTime = 0);
|
|
18
|
+
t.current && (t.current.pause(), t.current.currentTime = 0, r(!1));
|
|
15
19
|
};
|
|
16
20
|
return {
|
|
17
21
|
play: async (e) => {
|
|
18
22
|
if (!t.current) return;
|
|
19
|
-
if (
|
|
23
|
+
if (a.interrupt && s(), r(!0), !e || !a.sprite?.[e]) {
|
|
20
24
|
await t.current.play();
|
|
21
25
|
return;
|
|
22
26
|
}
|
|
23
|
-
const [n,
|
|
27
|
+
const [n, c] = a.sprite[e];
|
|
24
28
|
t.current.currentTime = n, await t.current.play();
|
|
25
|
-
const
|
|
26
|
-
t.current && (t.current.currentTime >=
|
|
29
|
+
const u = () => {
|
|
30
|
+
t.current && (t.current.currentTime >= c && s(), i && requestAnimationFrame(u));
|
|
27
31
|
};
|
|
28
|
-
requestAnimationFrame(
|
|
32
|
+
requestAnimationFrame(u);
|
|
33
|
+
},
|
|
34
|
+
pause: () => {
|
|
35
|
+
t.current && (t.current.pause(), r(!1));
|
|
29
36
|
},
|
|
30
|
-
pause: () => t.current?.pause(),
|
|
31
37
|
stop: s,
|
|
32
|
-
playing:
|
|
38
|
+
playing: i,
|
|
33
39
|
setVolume: (e) => {
|
|
34
40
|
if (!t.current) return;
|
|
35
41
|
const n = Math.max(0, Math.min(1, e));
|
|
36
|
-
t.current.volume = n,
|
|
42
|
+
t.current.volume = n, v(n);
|
|
37
43
|
},
|
|
38
44
|
volume: m,
|
|
39
45
|
changePlaybackRate: (e) => {
|
|
40
46
|
if (!t.current) return;
|
|
41
47
|
const n = Math.max(0.5, Math.min(2, e));
|
|
42
|
-
t.current.playbackRate = n,
|
|
48
|
+
t.current.playbackRate = n, f(n);
|
|
43
49
|
},
|
|
44
|
-
playbackRate:
|
|
50
|
+
playbackRate: d
|
|
45
51
|
};
|
|
46
52
|
};
|
|
47
53
|
export {
|
|
48
|
-
|
|
54
|
+
P as useAudio
|
|
49
55
|
};
|
|
50
56
|
//# sourceMappingURL=useAudio.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAudio.mjs","sources":["../../../../src/hooks/useAudio/useAudio.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** Type sprite map */\nexport interface SpriteMap {\n /** [start time in seconds, end time in seconds] */\n [key: string]: [number, number];\n}\n\n/** Type use audio options */\nexport interface UseAudioOptions {\n /** Whether audio playback is initially enabled */\n immediately?: boolean;\n /** Whether to stop current playback when starting a new one */\n interrupt?: boolean;\n /** Initial playback speed (0.5 to 2) */\n playbackRate?: number;\n /** Map of named audio segments for sprite-based playback */\n sprite?: SpriteMap;\n /** Initial volume level (0 to 1) */\n volume?: number;\n}\n\n/** Type use audio return type */\nexport interface UseAudioReturn {\n /** Current playback speed (0.5 to 2) */\n playbackRate: number;\n /** Whether audio is currently playing */\n playing: boolean;\n /** Current volume level (0 to 1) */\n volume: number;\n /** Set playback speed (0.5 to 2) */\n changePlaybackRate: (value: number) => void;\n /** Pause audio playback at current position */\n pause: () => void;\n /** Start audio playback from the beginning or specified sprite segment */\n play: (sprite?: string) => Promise<void>;\n /** Set audio volume level (0 to 1) */\n setVolume: (value: number) => void;\n /** Stop audio playback and reset position to start */\n stop: () => void;\n}\n\n/**\n * @name useAudio\n * @description - Hook that manages audio playback with sprite support\n * @category Browser\n * @usage low\n\n * @browserapi Audio https://developer.mozilla.org/en-US/docs/Web/API/Audio\n *\n * @template Value The type of the value\n * @param {string} url The URL of the audio file to play\n * @param {UseAudioOptions} [options] Audio configuration options\n * @param {number} [options.volume=1] Initial volume level (0 to 1)\n * @param {number} [options.playbackRate=1] Initial playback speed (0.5 to 2)\n * @param {boolean} [options.interrupt=false] Whether to stop current playback when starting a new one\n * @param {boolean} [options.soundEnabled=true] Whether audio playback is initially enabled\n * @param {SpriteMap} [options.sprite] Map of named audio segments for sprite-based playback\n * @returns {UseAudioReturn} An object containing audio controls and state\n *\n * @example\n * const audio = useAudio(\"/path/to/sound.mp3\");\n */\nexport const useAudio = (src: string, options: UseAudioOptions = {}): UseAudioReturn => {\n const [playing, setPlaying] = useState(false);\n const [volume, setCurrentVolume] = useState(options.volume ?? 1);\n const [playbackRate, setPlaybackRate] = useState(options.playbackRate ?? 1);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n\n useEffect(() => {\n const audio = new Audio(src);\n\n audio.volume = volume;\n audio.playbackRate = playbackRate;\n audioRef.current = audio;\n\n if (options.immediately) audio.play();\n\n const onPlay = () => setPlaying(true);\n const onPause = () => setPlaying(false);\n const onEnded = () => setPlaying(false);\n const
|
|
1
|
+
{"version":3,"file":"useAudio.mjs","sources":["../../../../src/hooks/useAudio/useAudio.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** Type sprite map */\nexport interface SpriteMap {\n /** [start time in seconds, end time in seconds] */\n [key: string]: [number, number];\n}\n\n/** Type use audio options */\nexport interface UseAudioOptions {\n /** Whether audio playback is initially enabled */\n immediately?: boolean;\n /** Whether to stop current playback when starting a new one */\n interrupt?: boolean;\n /** Initial playback speed (0.5 to 2) */\n playbackRate?: number;\n /** Map of named audio segments for sprite-based playback */\n sprite?: SpriteMap;\n /** Initial volume level (0 to 1) */\n volume?: number;\n}\n\n/** Type use audio return type */\nexport interface UseAudioReturn {\n /** Current playback speed (0.5 to 2) */\n playbackRate: number;\n /** Whether audio is currently playing */\n playing: boolean;\n /** Current volume level (0 to 1) */\n volume: number;\n /** Set playback speed (0.5 to 2) */\n changePlaybackRate: (value: number) => void;\n /** Pause audio playback at current position */\n pause: () => void;\n /** Start audio playback from the beginning or specified sprite segment */\n play: (sprite?: string) => Promise<void>;\n /** Set audio volume level (0 to 1) */\n setVolume: (value: number) => void;\n /** Stop audio playback and reset position to start */\n stop: () => void;\n}\n\n/**\n * @name useAudio\n * @description - Hook that manages audio playback with sprite support\n * @category Browser\n * @usage low\n\n * @browserapi Audio https://developer.mozilla.org/en-US/docs/Web/API/Audio\n *\n * @template Value The type of the value\n * @param {string} url The URL of the audio file to play\n * @param {UseAudioOptions} [options] Audio configuration options\n * @param {number} [options.volume=1] Initial volume level (0 to 1)\n * @param {number} [options.playbackRate=1] Initial playback speed (0.5 to 2)\n * @param {boolean} [options.interrupt=false] Whether to stop current playback when starting a new one\n * @param {boolean} [options.soundEnabled=true] Whether audio playback is initially enabled\n * @param {SpriteMap} [options.sprite] Map of named audio segments for sprite-based playback\n * @returns {UseAudioReturn} An object containing audio controls and state\n *\n * @example\n * const audio = useAudio(\"/path/to/sound.mp3\");\n */\nexport const useAudio = (src: string, options: UseAudioOptions = {}): UseAudioReturn => {\n const [playing, setPlaying] = useState(false);\n const [volume, setCurrentVolume] = useState(options.volume ?? 1);\n const [playbackRate, setPlaybackRate] = useState(options.playbackRate ?? 1);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n\n useEffect(() => {\n const audio = new Audio(src);\n\n audio.volume = volume;\n audio.playbackRate = playbackRate;\n audioRef.current = audio;\n\n if (options.immediately) {\n try {\n setPlaying(true);\n audio.play();\n } catch {\n setPlaying(false);\n }\n }\n\n const onPlay = () => setPlaying(true);\n const onPause = () => setPlaying(false);\n const onEnded = () => setPlaying(false);\n const onVolumeChange = () => setCurrentVolume(audio.volume);\n const onRateChange = () => setPlaybackRate(audio.playbackRate);\n\n audio.addEventListener('play', onPlay);\n audio.addEventListener('pause', onPause);\n audio.addEventListener('ended', onEnded);\n audio.addEventListener('volumechange', onVolumeChange);\n audio.addEventListener('ratechange', onRateChange);\n\n return () => {\n audio.removeEventListener('play', onPlay);\n audio.removeEventListener('pause', onPause);\n audio.removeEventListener('ended', onEnded);\n audio.removeEventListener('volumechange', onVolumeChange);\n audio.removeEventListener('ratechange', onRateChange);\n\n audio.pause();\n audio.remove();\n };\n }, [src]);\n\n const stop = () => {\n if (!audioRef.current) return;\n audioRef.current.pause();\n audioRef.current.currentTime = 0;\n setPlaying(false);\n };\n\n const play = async (spriteName?: string) => {\n if (!audioRef.current) return;\n if (options.interrupt) stop();\n\n setPlaying(true);\n\n if (!spriteName || !options.sprite?.[spriteName]) {\n await audioRef.current.play();\n return;\n }\n\n const [start, end] = options.sprite[spriteName];\n audioRef.current.currentTime = start;\n await audioRef.current.play();\n\n const checkTime = () => {\n if (!audioRef.current) return;\n if (audioRef.current.currentTime >= end) {\n stop();\n }\n\n if (!playing) return;\n\n requestAnimationFrame(checkTime);\n };\n\n requestAnimationFrame(checkTime);\n };\n\n const pause = () => {\n if (!audioRef.current) return;\n audioRef.current.pause();\n setPlaying(false);\n };\n\n const setVolume = (value: number) => {\n if (!audioRef.current) return;\n const newVolume = Math.max(0, Math.min(1, value));\n audioRef.current.volume = newVolume;\n setCurrentVolume(newVolume);\n };\n\n const changePlaybackRate = (value: number) => {\n if (!audioRef.current) return;\n const newRate = Math.max(0.5, Math.min(2, value));\n audioRef.current.playbackRate = newRate;\n setPlaybackRate(newRate);\n };\n\n return {\n play,\n pause,\n stop,\n playing,\n setVolume,\n volume,\n changePlaybackRate,\n playbackRate\n };\n};\n"],"names":["useAudio","src","options","playing","setPlaying","useState","volume","setCurrentVolume","playbackRate","setPlaybackRate","audioRef","useRef","useEffect","audio","onPlay","onPause","onEnded","onVolumeChange","onRateChange","stop","spriteName","start","end","checkTime","value","newVolume","newRate"],"mappings":";AA+DO,MAAMA,IAAW,CAACC,GAAaC,IAA2B,OAAuB;AACtF,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAS,EAAK,GACtC,CAACC,GAAQC,CAAgB,IAAIF,EAASH,EAAQ,UAAU,CAAC,GACzD,CAACM,GAAcC,CAAe,IAAIJ,EAASH,EAAQ,gBAAgB,CAAC,GAEpEQ,IAAWC,EAAgC,IAAI;AAErD,EAAAC,EAAU,MAAM;AACd,UAAMC,IAAQ,IAAI,MAAMZ,CAAG;AAM3B,QAJAY,EAAM,SAASP,GACfO,EAAM,eAAeL,GACrBE,EAAS,UAAUG,GAEfX,EAAQ;AACV,UAAI;AACF,QAAAE,EAAW,EAAI,GACfS,EAAM,KAAA;AAAA,MAAK,QACL;AACN,QAAAT,EAAW,EAAK;AAAA,MAAA;AAIpB,UAAMU,IAAS,MAAMV,EAAW,EAAI,GAC9BW,IAAU,MAAMX,EAAW,EAAK,GAChCY,IAAU,MAAMZ,EAAW,EAAK,GAChCa,IAAiB,MAAMV,EAAiBM,EAAM,MAAM,GACpDK,IAAe,MAAMT,EAAgBI,EAAM,YAAY;AAE7D,WAAAA,EAAM,iBAAiB,QAAQC,CAAM,GACrCD,EAAM,iBAAiB,SAASE,CAAO,GACvCF,EAAM,iBAAiB,SAASG,CAAO,GACvCH,EAAM,iBAAiB,gBAAgBI,CAAc,GACrDJ,EAAM,iBAAiB,cAAcK,CAAY,GAE1C,MAAM;AACX,MAAAL,EAAM,oBAAoB,QAAQC,CAAM,GACxCD,EAAM,oBAAoB,SAASE,CAAO,GAC1CF,EAAM,oBAAoB,SAASG,CAAO,GAC1CH,EAAM,oBAAoB,gBAAgBI,CAAc,GACxDJ,EAAM,oBAAoB,cAAcK,CAAY,GAEpDL,EAAM,MAAA,GACNA,EAAM,OAAA;AAAA,IAAO;AAAA,EACf,GACC,CAACZ,CAAG,CAAC;AAER,QAAMkB,IAAO,MAAM;AACjB,IAAKT,EAAS,YACdA,EAAS,QAAQ,MAAA,GACjBA,EAAS,QAAQ,cAAc,GAC/BN,EAAW,EAAK;AAAA,EAAA;AAoDlB,SAAO;AAAA,IACL,MAlDW,OAAOgB,MAAwB;AAC1C,UAAI,CAACV,EAAS,QAAS;AAKvB,UAJIR,EAAQ,aAAWiB,EAAA,GAEvBf,EAAW,EAAI,GAEX,CAACgB,KAAc,CAAClB,EAAQ,SAASkB,CAAU,GAAG;AAChD,cAAMV,EAAS,QAAQ,KAAA;AACvB;AAAA,MAAA;AAGF,YAAM,CAACW,GAAOC,CAAG,IAAIpB,EAAQ,OAAOkB,CAAU;AAC9C,MAAAV,EAAS,QAAQ,cAAcW,GAC/B,MAAMX,EAAS,QAAQ,KAAA;AAEvB,YAAMa,IAAY,MAAM;AACtB,QAAKb,EAAS,YACVA,EAAS,QAAQ,eAAeY,KAClCH,EAAA,GAGGhB,KAEL,sBAAsBoB,CAAS;AAAA,MAAA;AAGjC,4BAAsBA,CAAS;AAAA,IAAA;AAAA,IAyB/B,OAtBY,MAAM;AAClB,MAAKb,EAAS,YACdA,EAAS,QAAQ,MAAA,GACjBN,EAAW,EAAK;AAAA,IAAA;AAAA,IAoBhB,MAAAe;AAAA,IACA,SAAAhB;AAAA,IACA,WAnBgB,CAACqB,MAAkB;AACnC,UAAI,CAACd,EAAS,QAAS;AACvB,YAAMe,IAAY,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGD,CAAK,CAAC;AAChD,MAAAd,EAAS,QAAQ,SAASe,GAC1BlB,EAAiBkB,CAAS;AAAA,IAAA;AAAA,IAgB1B,QAAAnB;AAAA,IACA,oBAdyB,CAACkB,MAAkB;AAC5C,UAAI,CAACd,EAAS,QAAS;AACvB,YAAMgB,IAAU,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGF,CAAK,CAAC;AAChD,MAAAd,EAAS,QAAQ,eAAegB,GAChCjB,EAAgBiB,CAAO;AAAA,IAAA;AAAA,IAWvB,cAAAlB;AAAA,EAAA;AAEJ;"}
|
|
@@ -1,40 +1,40 @@
|
|
|
1
1
|
import { useRef as b, useEffect as p } from "react";
|
|
2
|
-
import { useRefState as
|
|
3
|
-
import { isTarget as
|
|
4
|
-
const x = (...
|
|
5
|
-
const
|
|
6
|
-
if (
|
|
7
|
-
if (!h || !
|
|
8
|
-
const e =
|
|
2
|
+
import { useRefState as R } from "../useRefState/useRefState.mjs";
|
|
3
|
+
import { isTarget as a } from "../../utils/helpers/isTarget.mjs";
|
|
4
|
+
const x = ((...n) => {
|
|
5
|
+
const o = a(n[0]) ? n[0] : void 0, i = n[1] || (typeof n[0] == "object" ? n[0] : {}), { enabled: h = !0 } = i, s = R(), r = b(i);
|
|
6
|
+
if (r.current = i, p(() => {
|
|
7
|
+
if (!h || !o && !s.state) return;
|
|
8
|
+
const e = o ? a.getElement(o) : s.state;
|
|
9
9
|
if (!e) return;
|
|
10
|
-
let c = !0, f = 0,
|
|
11
|
-
const
|
|
12
|
-
if (
|
|
13
|
-
const { scrollHeight: t, clientHeight: l, scrollTop: u } = e,
|
|
14
|
-
u <
|
|
15
|
-
}, v = (t) => {
|
|
16
|
-
o.current.force || (t.deltaY < 0 ? c = !1 : d());
|
|
10
|
+
let c = !0, f = 0, d = 0;
|
|
11
|
+
const v = () => {
|
|
12
|
+
if (r.current.force) return;
|
|
13
|
+
const { scrollHeight: t, clientHeight: l, scrollTop: u } = e, L = t - l, Y = L / 2;
|
|
14
|
+
u < d ? c = !1 : L - u <= Y && (c = !0), d = u;
|
|
17
15
|
}, m = (t) => {
|
|
18
|
-
|
|
16
|
+
r.current.force || (t.deltaY < 0 ? c = !1 : v());
|
|
19
17
|
}, E = (t) => {
|
|
20
|
-
|
|
18
|
+
r.current.force || (f = t.touches[0].clientY);
|
|
19
|
+
}, S = (t) => {
|
|
20
|
+
if (r.current.force) return;
|
|
21
21
|
const l = t.touches[0].clientY;
|
|
22
|
-
f - l < 0 ? c = !1 :
|
|
22
|
+
f - l < 0 ? c = !1 : v(), f = l;
|
|
23
23
|
}, T = () => {
|
|
24
|
-
!c && !
|
|
24
|
+
!c && !r.current.force || e.scrollTo({ top: e.scrollHeight });
|
|
25
25
|
};
|
|
26
|
-
e.addEventListener("wheel",
|
|
27
|
-
const
|
|
28
|
-
return
|
|
26
|
+
e.addEventListener("wheel", m), e.addEventListener("touchstart", E), e.addEventListener("touchmove", S);
|
|
27
|
+
const g = new MutationObserver(T);
|
|
28
|
+
return g.observe(e, {
|
|
29
29
|
childList: !0,
|
|
30
30
|
subtree: !0,
|
|
31
31
|
characterData: !0
|
|
32
32
|
}), () => {
|
|
33
|
-
|
|
33
|
+
g.disconnect(), e.removeEventListener("wheel", m), e.removeEventListener("touchstart", E), e.removeEventListener("touchmove", S);
|
|
34
34
|
};
|
|
35
|
-
}, [h,
|
|
35
|
+
}, [h, o, s.state, a.getRefState(o)]), !o)
|
|
36
36
|
return s;
|
|
37
|
-
};
|
|
37
|
+
});
|
|
38
38
|
export {
|
|
39
39
|
x as useAutoScroll
|
|
40
40
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAutoScroll.mjs","sources":["../../../../src/hooks/useAutoScroll/useAutoScroll.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use auto scroll options type */\nexport interface UseAutoScrollOptions {\n /** Whether auto-scrolling is enabled */\n enabled?: boolean;\n /** Whether to force auto-scrolling regardless of user interactions */\n force?: boolean;\n}\n\nexport interface UseAutoScroll {\n (target: HookTarget, options?: UseAutoScrollOptions): void;\n\n <Target extends HTMLElement>(options?: UseAutoScrollOptions): StateRef<Target>;\n}\n\n/**\n * @name useAutoScroll\n * @description - Hook that automatically scrolls a list element to the bottom\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {HookTarget} target The target element to auto-scroll\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {void}\n *\n * @example\n * useAutoScroll(ref);\n *\n * @overload\n * @template Target\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {StateRef<Target>} A React ref to attach to the list element\n *\n * @example\n * const ref = useAutoScroll();\n */\nexport const useAutoScroll = ((...params: any[]) => {\n const target = isTarget(params[0]) ? params[0] : undefined;\n const options = (params[1] ||\n (typeof params[0] === 'object' ? params[0] : {})) as UseAutoScrollOptions;\n const { enabled = true } = options;\n\n const internalRef = useRefState<HTMLElement>();\n const internalOptionsRef = useRef<UseAutoScrollOptions>(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n\n const element = (target ? isTarget.getElement(target) : internalRef.state) as HTMLElement;\n\n if (!element) return;\n\n let shouldAutoScroll = true;\n let touchStartY = 0;\n let lastScrollTop = 0;\n\n const onCheckScrollPosition = () => {\n if (internalOptionsRef.current.force) return;\n\n const { scrollHeight, clientHeight, scrollTop } = element;\n const maxScrollHeight = scrollHeight - clientHeight;\n const scrollThreshold = maxScrollHeight / 2;\n\n if (scrollTop < lastScrollTop) shouldAutoScroll = false;\n else if (maxScrollHeight - scrollTop <= scrollThreshold) shouldAutoScroll = true;\n\n lastScrollTop = scrollTop;\n };\n\n const onWheel = (event: WheelEvent) => {\n if (internalOptionsRef.current.force) return;\n\n if (event.deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n };\n\n const onTouchStart = (event: TouchEvent) => {\n if (internalOptionsRef.current.force) return;\n touchStartY = event.touches[0].clientY;\n };\n\n const onTouchMove = (event: TouchEvent) => {\n if (internalOptionsRef.current.force) return;\n\n const touchEndY = event.touches[0].clientY;\n const deltaY = touchStartY - touchEndY;\n\n if (deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n\n touchStartY = touchEndY;\n };\n\n const onMutation = () => {\n if (!shouldAutoScroll && !internalOptionsRef.current.force) return;\n element.scrollTo({ top: element.scrollHeight });\n };\n\n element.addEventListener('wheel', onWheel);\n element.addEventListener('touchstart', onTouchStart);\n element.addEventListener('touchmove', onTouchMove);\n\n const observer = new MutationObserver(onMutation);\n\n observer.observe(element, {\n childList: true,\n subtree: true,\n characterData: true\n });\n\n return () => {\n observer.disconnect();\n element.removeEventListener('wheel', onWheel);\n element.removeEventListener('touchstart', onTouchStart);\n element.removeEventListener('touchmove', onTouchMove);\n };\n }, [enabled, target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseAutoScroll;\n"],"names":["useAutoScroll","params","target","isTarget","options","enabled","internalRef","useRefState","internalOptionsRef","useRef","useEffect","element","shouldAutoScroll","touchStartY","lastScrollTop","onCheckScrollPosition","scrollHeight","clientHeight","scrollTop","maxScrollHeight","scrollThreshold","onWheel","event","onTouchStart","onTouchMove","touchEndY","onMutation","observer"],"mappings":";;;AA8CO,MAAMA,
|
|
1
|
+
{"version":3,"file":"useAutoScroll.mjs","sources":["../../../../src/hooks/useAutoScroll/useAutoScroll.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use auto scroll options type */\nexport interface UseAutoScrollOptions {\n /** Whether auto-scrolling is enabled */\n enabled?: boolean;\n /** Whether to force auto-scrolling regardless of user interactions */\n force?: boolean;\n}\n\nexport interface UseAutoScroll {\n (target: HookTarget, options?: UseAutoScrollOptions): void;\n\n <Target extends HTMLElement>(options?: UseAutoScrollOptions): StateRef<Target>;\n}\n\n/**\n * @name useAutoScroll\n * @description - Hook that automatically scrolls a list element to the bottom\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {HookTarget} target The target element to auto-scroll\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {void}\n *\n * @example\n * useAutoScroll(ref);\n *\n * @overload\n * @template Target\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {StateRef<Target>} A React ref to attach to the list element\n *\n * @example\n * const ref = useAutoScroll();\n */\nexport const useAutoScroll = ((...params: any[]) => {\n const target = isTarget(params[0]) ? params[0] : undefined;\n const options = (params[1] ||\n (typeof params[0] === 'object' ? params[0] : {})) as UseAutoScrollOptions;\n const { enabled = true } = options;\n\n const internalRef = useRefState<HTMLElement>();\n const internalOptionsRef = useRef<UseAutoScrollOptions>(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n\n const element = (target ? isTarget.getElement(target) : internalRef.state) as HTMLElement;\n\n if (!element) return;\n\n let shouldAutoScroll = true;\n let touchStartY = 0;\n let lastScrollTop = 0;\n\n const onCheckScrollPosition = () => {\n if (internalOptionsRef.current.force) return;\n\n const { scrollHeight, clientHeight, scrollTop } = element;\n const maxScrollHeight = scrollHeight - clientHeight;\n const scrollThreshold = maxScrollHeight / 2;\n\n if (scrollTop < lastScrollTop) shouldAutoScroll = false;\n else if (maxScrollHeight - scrollTop <= scrollThreshold) shouldAutoScroll = true;\n\n lastScrollTop = scrollTop;\n };\n\n const onWheel = (event: WheelEvent) => {\n if (internalOptionsRef.current.force) return;\n\n if (event.deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n };\n\n const onTouchStart = (event: TouchEvent) => {\n if (internalOptionsRef.current.force) return;\n touchStartY = event.touches[0].clientY;\n };\n\n const onTouchMove = (event: TouchEvent) => {\n if (internalOptionsRef.current.force) return;\n\n const touchEndY = event.touches[0].clientY;\n const deltaY = touchStartY - touchEndY;\n\n if (deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n\n touchStartY = touchEndY;\n };\n\n const onMutation = () => {\n if (!shouldAutoScroll && !internalOptionsRef.current.force) return;\n element.scrollTo({ top: element.scrollHeight });\n };\n\n element.addEventListener('wheel', onWheel);\n element.addEventListener('touchstart', onTouchStart);\n element.addEventListener('touchmove', onTouchMove);\n\n const observer = new MutationObserver(onMutation);\n\n observer.observe(element, {\n childList: true,\n subtree: true,\n characterData: true\n });\n\n return () => {\n observer.disconnect();\n element.removeEventListener('wheel', onWheel);\n element.removeEventListener('touchstart', onTouchStart);\n element.removeEventListener('touchmove', onTouchMove);\n };\n }, [enabled, target, internalRef.state, isTarget.getRefState(target)]);\n\n if (target) return;\n return internalRef;\n}) as UseAutoScroll;\n"],"names":["useAutoScroll","params","target","isTarget","options","enabled","internalRef","useRefState","internalOptionsRef","useRef","useEffect","element","shouldAutoScroll","touchStartY","lastScrollTop","onCheckScrollPosition","scrollHeight","clientHeight","scrollTop","maxScrollHeight","scrollThreshold","onWheel","event","onTouchStart","onTouchMove","touchEndY","onMutation","observer"],"mappings":";;;AA8CO,MAAMA,KAAiB,IAAIC,MAAkB;AAClD,QAAMC,IAASC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC3CG,IAAWH,EAAO,CAAC,MACtB,OAAOA,EAAO,CAAC,KAAM,WAAWA,EAAO,CAAC,IAAI,CAAA,IACzC,EAAE,SAAAI,IAAU,GAAA,IAASD,GAErBE,IAAcC,EAAA,GACdC,IAAqBC,EAA6BL,CAAO;AA4E/D,MA3EAI,EAAmB,UAAUJ,GAE7BM,EAAU,MAAM;AACd,QAAI,CAACL,KAAY,CAACH,KAAU,CAACI,EAAY,MAAQ;AAEjD,UAAMK,IAAWT,IAASC,EAAS,WAAWD,CAAM,IAAII,EAAY;AAEpE,QAAI,CAACK,EAAS;AAEd,QAAIC,IAAmB,IACnBC,IAAc,GACdC,IAAgB;AAEpB,UAAMC,IAAwB,MAAM;AAClC,UAAIP,EAAmB,QAAQ,MAAO;AAEtC,YAAM,EAAE,cAAAQ,GAAc,cAAAC,GAAc,WAAAC,EAAA,IAAcP,GAC5CQ,IAAkBH,IAAeC,GACjCG,IAAkBD,IAAkB;AAE1C,MAAID,IAAYJ,IAAeF,IAAmB,KACzCO,IAAkBD,KAAaE,MAAiBR,IAAmB,KAE5EE,IAAgBI;AAAA,IAAA,GAGZG,IAAU,CAACC,MAAsB;AACrC,MAAId,EAAmB,QAAQ,UAE3Bc,EAAM,SAAS,IAAGV,IAAmB,KACpCG,EAAA;AAAA,IAAsB,GAGvBQ,IAAe,CAACD,MAAsB;AAC1C,MAAId,EAAmB,QAAQ,UAC/BK,IAAcS,EAAM,QAAQ,CAAC,EAAE;AAAA,IAAA,GAG3BE,IAAc,CAACF,MAAsB;AACzC,UAAId,EAAmB,QAAQ,MAAO;AAEtC,YAAMiB,IAAYH,EAAM,QAAQ,CAAC,EAAE;AAGnC,MAFeT,IAAcY,IAEhB,IAAGb,IAAmB,KAC9BG,EAAA,GAELF,IAAcY;AAAA,IAAA,GAGVC,IAAa,MAAM;AACvB,MAAI,CAACd,KAAoB,CAACJ,EAAmB,QAAQ,SACrDG,EAAQ,SAAS,EAAE,KAAKA,EAAQ,cAAc;AAAA,IAAA;AAGhD,IAAAA,EAAQ,iBAAiB,SAASU,CAAO,GACzCV,EAAQ,iBAAiB,cAAcY,CAAY,GACnDZ,EAAQ,iBAAiB,aAAaa,CAAW;AAEjD,UAAMG,IAAW,IAAI,iBAAiBD,CAAU;AAEhD,WAAAC,EAAS,QAAQhB,GAAS;AAAA,MACxB,WAAW;AAAA,MACX,SAAS;AAAA,MACT,eAAe;AAAA,IAAA,CAChB,GAEM,MAAM;AACX,MAAAgB,EAAS,WAAA,GACThB,EAAQ,oBAAoB,SAASU,CAAO,GAC5CV,EAAQ,oBAAoB,cAAcY,CAAY,GACtDZ,EAAQ,oBAAoB,aAAaa,CAAW;AAAA,IAAA;AAAA,EACtD,GACC,CAACnB,GAASH,GAAQI,EAAY,OAAOH,EAAS,YAAYD,CAAM,CAAC,CAAC,GAEjE,CAAAA;AACJ,WAAOI;AACT;"}
|
|
@@ -1,51 +1,46 @@
|
|
|
1
|
-
import { useEffect as
|
|
2
|
-
import { useRerender as
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
|
|
6
|
-
const e =
|
|
1
|
+
import { useEffect as I } from "react";
|
|
2
|
+
import { useRerender as S } from "../useRerender/useRerender.mjs";
|
|
3
|
+
const o = (s) => typeof window < "u" && window.matchMedia(s).matches, R = (s, c = "mobile-first") => {
|
|
4
|
+
const x = S(), n = (e, t) => t ? `${Number(s[e]) + t}px` : `${s[e]}px`;
|
|
5
|
+
I(() => {
|
|
6
|
+
const e = x;
|
|
7
7
|
return window.addEventListener("resize", e), () => {
|
|
8
8
|
window.removeEventListener("resize", e);
|
|
9
9
|
};
|
|
10
10
|
}, []);
|
|
11
|
-
const
|
|
12
|
-
const e =
|
|
11
|
+
const m = (e) => o(`(min-width: ${n(e)})`), l = (e) => o(`(max-width: ${n(e)})`), r = () => Object.keys(s).map((e) => [e, m(e)]).filter(([, e]) => e).map(([e]) => e), i = () => {
|
|
12
|
+
const e = r();
|
|
13
13
|
return e.length ? e.at(-1) : void 0;
|
|
14
|
-
},
|
|
14
|
+
}, d = (e) => o(`(min-width: ${n(e, 0.1)})`), E = (e) => o(`(max-width: ${n(e, -0.1)})`), A = (e, t) => o(`(min-width: ${n(e)}) and (max-width: ${n(t, -0.1)})`), a = Object.keys(s).reduce(
|
|
15
15
|
(e, t) => {
|
|
16
|
-
const
|
|
17
|
-
return e[t] =
|
|
16
|
+
const u = c === "mobile-first" ? m(t) : l(t);
|
|
17
|
+
return e[t] = u, e;
|
|
18
18
|
},
|
|
19
19
|
{}
|
|
20
20
|
);
|
|
21
21
|
return {
|
|
22
|
-
current:
|
|
23
|
-
greaterOrEqual:
|
|
24
|
-
smallerOrEqual:
|
|
25
|
-
active:
|
|
26
|
-
greater:
|
|
27
|
-
smaller:
|
|
28
|
-
between:
|
|
29
|
-
|
|
30
|
-
isGreaterOrEqual: n,
|
|
31
|
-
isSmaller: c,
|
|
32
|
-
isSmallerOrEqual: m,
|
|
33
|
-
isInBetween: x,
|
|
34
|
-
...A
|
|
22
|
+
current: r,
|
|
23
|
+
greaterOrEqual: m,
|
|
24
|
+
smallerOrEqual: l,
|
|
25
|
+
active: i,
|
|
26
|
+
greater: d,
|
|
27
|
+
smaller: E,
|
|
28
|
+
between: A,
|
|
29
|
+
...a
|
|
35
30
|
};
|
|
36
|
-
},
|
|
31
|
+
}, w = {
|
|
37
32
|
xs: 0,
|
|
38
33
|
sm: 600,
|
|
39
34
|
md: 900,
|
|
40
35
|
lg: 1200,
|
|
41
36
|
xl: 1536
|
|
42
|
-
},
|
|
37
|
+
}, O = {
|
|
43
38
|
xs: 576,
|
|
44
39
|
sm: 768,
|
|
45
40
|
md: 992,
|
|
46
41
|
lg: 1200,
|
|
47
42
|
xl: 1408
|
|
48
|
-
},
|
|
43
|
+
}, _ = {
|
|
49
44
|
sm: 640,
|
|
50
45
|
md: 768,
|
|
51
46
|
lg: 1024,
|
|
@@ -79,7 +74,7 @@ const l = (s) => window.matchMedia(s).matches, N = (s, d = "mobile-first") => {
|
|
|
79
74
|
laptop: 1024,
|
|
80
75
|
laptopL: 1440,
|
|
81
76
|
desktop4K: 2560
|
|
82
|
-
},
|
|
77
|
+
}, f = {
|
|
83
78
|
"3xs": 360,
|
|
84
79
|
"2xs": 480,
|
|
85
80
|
xs: 600,
|
|
@@ -90,7 +85,7 @@ const l = (s) => window.matchMedia(s).matches, N = (s, d = "mobile-first") => {
|
|
|
90
85
|
"2xl": 1600,
|
|
91
86
|
"3xl": 1920,
|
|
92
87
|
"4xl": 2560
|
|
93
|
-
},
|
|
88
|
+
}, h = {
|
|
94
89
|
sm: 576,
|
|
95
90
|
md: 768,
|
|
96
91
|
lg: 992,
|
|
@@ -99,13 +94,13 @@ const l = (s) => window.matchMedia(s).matches, N = (s, d = "mobile-first") => {
|
|
|
99
94
|
export {
|
|
100
95
|
B as BREAKPOINTS_ANT_DESIGN,
|
|
101
96
|
g as BREAKPOINTS_BOOTSTRAP_V5,
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
97
|
+
O as BREAKPOINTS_MANTINE,
|
|
98
|
+
f as BREAKPOINTS_MASTER_CSS,
|
|
99
|
+
w as BREAKPOINTS_MATERIAL_UI,
|
|
100
|
+
h as BREAKPOINTS_PRIME_FLEX,
|
|
106
101
|
K as BREAKPOINTS_QUASAR_V2,
|
|
107
102
|
P as BREAKPOINTS_SEMANTIC,
|
|
108
|
-
|
|
109
|
-
|
|
103
|
+
_ as BREAKPOINTS_TAILWIND,
|
|
104
|
+
R as useBreakpoints
|
|
110
105
|
};
|
|
111
106
|
//# sourceMappingURL=useBreakpoints.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBreakpoints.mjs","sources":["../../../../src/hooks/useBreakpoints/useBreakpoints.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useRerender } from '../useRerender/useRerender';\n\n/** The breakpoints type */\nexport type Breakpoints<Breakpoint extends string = string> = Record<Breakpoint, number>;\n\n/** The use breakpoints strategy */\nexport type UseBreakpointsStrategy = 'desktop-first' | 'mobile-first';\n\nconst match = (query: string) => window.matchMedia(query).matches;\n\n/** The use breakpoints return type */\nexport type UseBreakpointsReturn<Breakpoint extends string = string> = {\n /** The function that checks if the current breakpoint is greater than to the given breakpoint */\n greater: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is greater than or equal to the given breakpoint */\n greaterOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than to the given breakpoint */\n smaller: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than or equal to the given breakpoint */\n smallerOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is between to the given breakpoints */\n between: (a: Breakpoint, b: Breakpoint) => boolean;\n /** The function that
|
|
1
|
+
{"version":3,"file":"useBreakpoints.mjs","sources":["../../../../src/hooks/useBreakpoints/useBreakpoints.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useRerender } from '../useRerender/useRerender';\n\n/** The breakpoints type */\nexport type Breakpoints<Breakpoint extends string = string> = Record<Breakpoint, number>;\n\n/** The use breakpoints strategy */\nexport type UseBreakpointsStrategy = 'desktop-first' | 'mobile-first';\n\nconst match = (query: string) => typeof window !== 'undefined' && window.matchMedia(query).matches;\n\n/** The use breakpoints return type */\nexport type UseBreakpointsReturn<Breakpoint extends string = string> = {\n /** The function that checks if the current breakpoint is greater than to the given breakpoint */\n greater: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is greater than or equal to the given breakpoint */\n greaterOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than to the given breakpoint */\n smaller: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than or equal to the given breakpoint */\n smallerOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is between to the given breakpoints */\n between: (a: Breakpoint, b: Breakpoint) => boolean;\n /** The function that returns the current breakpoints */\n current: () => Breakpoint[];\n /** The function that returns the current active breakpoint */\n active: () => Breakpoint;\n} & Record<Breakpoint, boolean>;\n\n/**\n * @name useBreakpoints\n * @description - Hook that manages breakpoints\n * @category Browser\n * @usage medium\n *\n * @template {string} Breakpoint The name of the breakpoint\n * @param {Breakpoints<Breakpoint>} breakpoints The breakpoints to use\n * @param {UseBreakpointsStrategy} [strategy=min-width] The strategy to use for matching\n * @returns {UseBreakpointsReturn<Breakpoint>} An object containing the current breakpoint\n *\n * @example\n * const { greater, smaller, between, current, active, ...breakpoints } = useBreakpoints({ mobile: 0, tablet: 640, laptop: 1024, desktop: 1280 });\n */\nexport const useBreakpoints = <Breakpoint extends string>(\n breakpoints: Breakpoints<Breakpoint>,\n strategy: UseBreakpointsStrategy = 'mobile-first'\n): UseBreakpointsReturn<Breakpoint> => {\n const rerender = useRerender();\n\n const getValue = (breakpoint: Breakpoint, delta?: number) => {\n if (delta) return `${Number(breakpoints[breakpoint]) + delta}px`;\n return `${breakpoints[breakpoint]}px`;\n };\n\n useEffect(() => {\n const onResize = rerender;\n window.addEventListener('resize', onResize);\n return () => {\n window.removeEventListener('resize', onResize);\n };\n }, []);\n\n const greaterOrEqual = (breakpoint: Breakpoint) => match(`(min-width: ${getValue(breakpoint)})`);\n const smallerOrEqual = (breakpoint: Breakpoint) => match(`(max-width: ${getValue(breakpoint)})`);\n\n const current = () =>\n Object.keys(breakpoints)\n .map((breakpoint) => [breakpoint, greaterOrEqual(breakpoint as Breakpoint)])\n .filter(([, value]) => value)\n .map(([breakpoint]) => breakpoint) as Breakpoint[];\n\n const active = () => {\n const breakpoints = current();\n return (breakpoints.length ? breakpoints.at(-1) : undefined) as Breakpoint;\n };\n\n const greater = (breakpoint: Breakpoint) => match(`(min-width: ${getValue(breakpoint, 0.1)})`);\n const smaller = (breakpoint: Breakpoint) => match(`(max-width: ${getValue(breakpoint, -0.1)})`);\n const between = (a: Breakpoint, b: Breakpoint) =>\n match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n\n const breakpointsKeys = (Object.keys(breakpoints) as Breakpoint[]).reduce(\n (acc, breakpoint) => {\n const value =\n strategy === 'mobile-first' ? greaterOrEqual(breakpoint) : smallerOrEqual(breakpoint);\n acc[breakpoint] = value;\n return acc;\n },\n {} as Record<Breakpoint, boolean>\n );\n\n return {\n current,\n greaterOrEqual,\n smallerOrEqual,\n active,\n greater,\n smaller,\n between,\n ...breakpointsKeys\n };\n};\n\n/** Breakpoints from Material UI */\nexport const BREAKPOINTS_MATERIAL_UI = {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1200,\n xl: 1536\n};\n\n/** Breakpoints from Mantine */\nexport const BREAKPOINTS_MANTINE = {\n xs: 576,\n sm: 768,\n md: 992,\n lg: 1200,\n xl: 1408\n};\n\n/** Breakpoints from Tailwind */\nexport const BREAKPOINTS_TAILWIND = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536\n};\n\n/** Breakpoints from Bootstrap V5 */\nexport const BREAKPOINTS_BOOTSTRAP_V5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\n\n/** Breakpoints from Ant Design */\nexport const BREAKPOINTS_ANT_DESIGN = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\n\n/** Breakpoints from Quasar V2 */\nexport const BREAKPOINTS_QUASAR_V2 = {\n xs: 0,\n sm: 600,\n md: 1024,\n lg: 1440,\n xl: 1920\n};\n\n/** Sematic Breakpoints */\nexport const BREAKPOINTS_SEMANTIC = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\n\n/** Breakpoints from Master CSS */\nexport const BREAKPOINTS_MASTER_CSS = {\n '3xs': 360,\n '2xs': 480,\n xs: 600,\n sm: 768,\n md: 1024,\n lg: 1280,\n xl: 1440,\n '2xl': 1600,\n '3xl': 1920,\n '4xl': 2560\n};\n\n/** Breakpoints from PrimeFlex */\nexport const BREAKPOINTS_PRIME_FLEX = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\n"],"names":["match","query","useBreakpoints","breakpoints","strategy","rerender","useRerender","getValue","breakpoint","delta","useEffect","onResize","greaterOrEqual","smallerOrEqual","current","value","active","greater","smaller","between","a","b","breakpointsKeys","acc","BREAKPOINTS_MATERIAL_UI","BREAKPOINTS_MANTINE","BREAKPOINTS_TAILWIND","BREAKPOINTS_BOOTSTRAP_V5","BREAKPOINTS_ANT_DESIGN","BREAKPOINTS_QUASAR_V2","BREAKPOINTS_SEMANTIC","BREAKPOINTS_MASTER_CSS","BREAKPOINTS_PRIME_FLEX"],"mappings":"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"}
|
|
@@ -1,20 +1,21 @@
|
|
|
1
|
-
import { useRef as
|
|
2
|
-
import { useRefState as
|
|
3
|
-
import { isTarget as
|
|
4
|
-
const g = (...
|
|
5
|
-
const
|
|
6
|
-
if (
|
|
7
|
-
if (!
|
|
8
|
-
const
|
|
9
|
-
|
|
10
|
-
|
|
1
|
+
import { useRef as s, useEffect as l } from "react";
|
|
2
|
+
import { useRefState as a } from "../useRefState/useRefState.mjs";
|
|
3
|
+
import { isTarget as r } from "../../utils/helpers/isTarget.mjs";
|
|
4
|
+
const g = ((...e) => {
|
|
5
|
+
const t = r(e[0]) ? e[0] : void 0, c = e[1] ? e[1] : e[0], n = a(), o = s(c);
|
|
6
|
+
if (o.current = c, l(() => {
|
|
7
|
+
if (!t && !n.state) return;
|
|
8
|
+
const i = t ? r.getElement(t) : n.current;
|
|
9
|
+
if (!i) return;
|
|
10
|
+
const u = (f) => {
|
|
11
|
+
i.contains(f.target) || o.current(f);
|
|
11
12
|
};
|
|
12
|
-
return document.addEventListener("click",
|
|
13
|
-
document.removeEventListener("click",
|
|
13
|
+
return document.addEventListener("click", u), () => {
|
|
14
|
+
document.removeEventListener("click", u);
|
|
14
15
|
};
|
|
15
|
-
}, [
|
|
16
|
+
}, [t, n.state, r.getRefState(t)]), !t)
|
|
16
17
|
return n;
|
|
17
|
-
};
|
|
18
|
+
});
|
|
18
19
|
export {
|
|
19
20
|
g as useClickOutside
|
|
20
21
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useClickOutside.mjs","sources":["../../../../src/hooks/useClickOutside/useClickOutside.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport interface UseClickOutside {\n (target: HookTarget, callback: (event: Event) => void): void;\n\n <Target extends Element>(callback: (event: Event) => void, target?: never): StateRef<Target>;\n}\n\n/**\n * @name useClickOutside\n * @description - Hook to handle click events outside the specified target element(s)\n * @category Elements \n * @usage necessary\n\n * @overload\n * @param {HookTarget} target The target element(s) to detect outside clicks for\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {void}\n *\n * @example\n * useClickOutside(ref, () => console.log('click outside'));\n *\n * @overload\n * @template Target The target element(s)\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {
|
|
1
|
+
{"version":3,"file":"useClickOutside.mjs","sources":["../../../../src/hooks/useClickOutside/useClickOutside.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport interface UseClickOutside {\n (target: HookTarget, callback: (event: Event) => void): void;\n\n <Target extends Element>(callback: (event: Event) => void, target?: never): StateRef<Target>;\n}\n\n/**\n * @name useClickOutside\n * @description - Hook to handle click events outside the specified target element(s)\n * @category Elements \n * @usage necessary\n\n * @overload\n * @param {HookTarget} target The target element(s) to detect outside clicks for\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {void}\n *\n * @example\n * useClickOutside(ref, () => console.log('click outside'));\n *\n * @overload\n * @template Target The target element(s)\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {StateRef<Target>} A ref to attach to the target element\n *\n * @example\n * const ref = useClickOutside<HTMLDivElement>(() => console.log('click outside'));\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useClickOutside.html}\n */\nexport const useClickOutside = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (params[1] ? params[1] : params[0]) as (event: Event) => void;\n\n const internalRef = useRefState<Element>();\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = (target ? isTarget.getElement(target) : internalRef.current) as Element;\n\n if (!element) return;\n\n const onClick = (event: Event) => {\n if (!element.contains(event.target as Node)) {\n internalCallbackRef.current(event);\n }\n };\n\n document.addEventListener('click', onClick);\n\n return () => {\n document.removeEventListener('click', onClick);\n };\n }, [target, internalRef.state, isTarget.getRefState(target)]);\n if (target) return;\n return internalRef;\n}) as UseClickOutside;\n"],"names":["useClickOutside","params","target","isTarget","callback","internalRef","useRefState","internalCallbackRef","useRef","useEffect","element","onClick","event"],"mappings":";;;AAwCO,MAAMA,KAAmB,IAAIC,MAAkB;AACpD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAYH,EAAO,CAAC,IAAIA,EAAO,CAAC,IAAIA,EAAO,CAAC,GAE5CI,IAAcC,EAAA,GACdC,IAAsBC,EAAOJ,CAAQ;AAsB3C,MArBAG,EAAoB,UAAUH,GAE9BK,EAAU,MAAM;AACd,QAAI,CAACP,KAAU,CAACG,EAAY,MAAO;AAEnC,UAAMK,IAAWR,IAASC,EAAS,WAAWD,CAAM,IAAIG,EAAY;AAEpE,QAAI,CAACK,EAAS;AAEd,UAAMC,IAAU,CAACC,MAAiB;AAChC,MAAKF,EAAQ,SAASE,EAAM,MAAc,KACxCL,EAAoB,QAAQK,CAAK;AAAA,IACnC;AAGF,oBAAS,iBAAiB,SAASD,CAAO,GAEnC,MAAM;AACX,eAAS,oBAAoB,SAASA,CAAO;AAAA,IAAA;AAAA,EAC/C,GACC,CAACT,GAAQG,EAAY,OAAOF,EAAS,YAAYD,CAAM,CAAC,CAAC,GACxD,CAAAA;AACJ,WAAOG;AACT;"}
|
|
@@ -13,7 +13,7 @@ const p = () => Object.fromEntries(
|
|
|
13
13
|
v(n, e, t), m();
|
|
14
14
|
}, k = (n, e) => {
|
|
15
15
|
C(n, e), m();
|
|
16
|
-
}, d = (n) => p()[n], z = (n, e) => {
|
|
16
|
+
}, d = (n) => p()[n], z = ((n, e) => {
|
|
17
17
|
const t = typeof e == "object" && e && ("serializer" in e || "deserializer" in e || "initialValue" in e) ? e : void 0, o = t ? t?.initialValue : e;
|
|
18
18
|
if (typeof document > "u")
|
|
19
19
|
return {
|
|
@@ -42,7 +42,7 @@ const p = () => Object.fromEntries(
|
|
|
42
42
|
};
|
|
43
43
|
return window.addEventListener(c, i), () => window.removeEventListener(c, i);
|
|
44
44
|
}, [n]), { value: f, set: (i, r) => a(n, s(i), { ...t, ...r }), remove: (i) => k(n, { ...t, ...i }) };
|
|
45
|
-
};
|
|
45
|
+
});
|
|
46
46
|
export {
|
|
47
47
|
c as COOKIE_EVENT,
|
|
48
48
|
m as dispatchCookieEvent,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCookie.mjs","sources":["../../../../src/hooks/useCookie/useCookie.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport const getCookies = () =>\n Object.fromEntries(\n document.cookie.split('; ').map((cookie) => {\n const [key, ...value] = cookie.split('=');\n const decodedValue = decodeURIComponent(value.join('='));\n return [key, decodedValue];\n })\n );\n\nexport interface RemoveCookieParams {\n domain?: string;\n expires?: Date;\n maxAge?: number;\n path?: string;\n sameSite?: 'Lax' | 'None' | 'Strict';\n secure?: boolean;\n}\n\nexport const removeCookie = (key: string, options: RemoveCookieParams = {}) => {\n document.cookie = `${encodeURIComponent(key)}=; expires=Thu, 01 Jan 1970 00:00:00 GMT${\n options.path ? `; path=${options.path}` : ''\n }${options.domain ? `; domain=${options.domain}` : ''}${\n options.maxAge ? `; max-age=0` : ''\n }${options.expires ? `; expires=Thu, 01 Jan 1970 00:00:00 GMT` : ''}${\n options.secure ? `; secure` : ''\n }${options.sameSite ? `; samesite=${options.sameSite}` : ''}`;\n};\n\nexport interface SetCookieParams {\n domain?: string;\n expires?: Date;\n httpOnly?: boolean;\n maxAge?: number;\n path?: string;\n sameSite?: 'Lax' | 'None' | 'Strict';\n secure?: boolean;\n}\n\nexport const setCookie = (key: string, value: string, options: SetCookieParams = {}) => {\n const cookie = [`${encodeURIComponent(key)}=${encodeURIComponent(value)}`];\n\n if (options.path) cookie.push(`path=${options.path}`);\n if (options.domain) cookie.push(`domain=${options.domain}`);\n if (typeof options.maxAge === 'number') cookie.push(`max-age=${options.maxAge}`);\n if (options.expires) cookie.push(`expires=${options.expires.toUTCString()}`);\n if (options.secure) cookie.push(`secure`);\n if (options.httpOnly) cookie.push(`httpOnly`);\n if (options.sameSite) cookie.push(`samesite=${options.sameSite}`);\n\n document.cookie = cookie.join('; ');\n};\n\n/* The use cookie initial value type */\nexport type UseCookieInitialValue<Value> = (() => Value) | Value;\n\n/* The use cookie options type */\nexport interface UseCookieOptions<Value> {\n /* The domain of the cookie */\n domain?: string;\n /* The expiration date of the cookie */\n expires?: Date;\n /* Whether the cookie is httpOnly */\n httpOnly?: boolean;\n /* The initial value of the storage */\n initialValue?: UseCookieInitialValue<Value>;\n /* The maximum age of the cookie */\n maxAge?: number;\n /* The path of the cookie */\n path?: string;\n /* The sameSite of the cookie */\n sameSite?: 'Lax' | 'None' | 'Strict';\n /* Whether the cookie is secure */\n secure?: boolean;\n /* The deserializer function to be invoked */\n deserializer?: (value: string) => Value;\n /* The serializer function to be invoked */\n serializer?: (value: Value) => string;\n}\n\n/* The use cookie return type */\nexport interface UseCookieReturn<Value> {\n /* The value of the cookie */\n value: Value;\n /* The remove function */\n remove: (options?: RemoveCookieParams) => void;\n /* The set function */\n set: (value: Value, options?: SetCookieParams) => void;\n}\n\nexport const COOKIE_EVENT = 'reactuse-cookie';\n\nexport const dispatchCookieEvent = () => window.dispatchEvent(new Event(COOKIE_EVENT));\n\nexport const setCookieItem = (key: string, value: string, options?: SetCookieParams) => {\n setCookie(key, value, options);\n dispatchCookieEvent();\n};\n\nexport const removeCookieItem = (key: string, options?: RemoveCookieParams) => {\n removeCookie(key, options);\n dispatchCookieEvent();\n};\n\nexport const getCookie = (key: string): string | undefined => {\n const cookies = getCookies();\n return cookies[key];\n};\n\nexport interface UseCookie {\n <Value>(\n key: string,\n options: UseCookieOptions<Value> & {\n initialValue: UseCookieInitialValue<Value>;\n }\n ): UseCookieReturn<Value>;\n\n <Value>(key: string, options?: UseCookieOptions<Value>): UseCookieReturn<Value | undefined>;\n\n <Value>(key: string, initialValue: UseCookieInitialValue<Value>): UseCookieReturn<Value>;\n\n <Value>(key: string): UseCookieReturn<Value | undefined>;\n}\n\n/**\n * @name useCookie\n * @description - Hook that manages cookie value\n * @category State\n * @usage medium\n\n * @overload\n * @template Value The type of the cookie value\n * @param {string} key The key of the cookie\n * @param {UseCookieInitialValue<Value>} [initialValue] The initial value of the cookie\n * @returns {UseCookieReturn<Value>} The value and the set function\n *\n * @overload\n * @template Value The type of the cookie value\n * @param {string} key The key of the cookie\n * @param {UseCookieOptions<Value>} options The options object\n * @param {UseCookieInitialValue<Value>} [options.initialValue] The initial value of the cookie\n * @param {(value: string) => Value} [options.deserializer] The deserializer function to be invoked\n * @param {(value: Value) => string} [options.serializer] The serializer function to be invoked\n * @returns {UseCookieReturn<Value | undefined>} The value and the set function\n *\n * @example\n * const { value, set, remove } = useCookie('key', 'value');\n */\nexport const useCookie = (<Value>(key: string, params?: any) => {\n const options = (\n typeof params === 'object' &&\n params &&\n ('serializer' in params || 'deserializer' in params || 'initialValue' in params)\n ? params\n : undefined\n ) as UseCookieOptions<Value>;\n const initialValue = (options ? options?.initialValue : params) as UseCookieInitialValue<Value>;\n\n if (typeof document === 'undefined')\n return {\n value: typeof initialValue === 'function' ? (initialValue as () => Value)() : initialValue\n } as UseCookieReturn<Value>;\n\n const serializer = (value: Value) => {\n if (options?.serializer) return options.serializer(value);\n if (typeof value === 'string') return value;\n return JSON.stringify(value);\n };\n\n const deserializer = (value: string) => {\n if (options?.deserializer) return options.deserializer(value);\n if (value === 'undefined') return undefined as unknown as Value;\n\n try {\n return JSON.parse(value) as Value;\n } catch {\n return value as Value;\n }\n };\n\n const [value, setValue] = useState<Value | undefined>(() => {\n const cookieValue = getCookie(key);\n if (cookieValue === undefined && initialValue !== undefined) {\n const value =\n typeof initialValue === 'function' ? (initialValue as () => Value)() : initialValue;\n setCookieItem(key, serializer(value), options);\n return value;\n }\n return cookieValue ? deserializer(cookieValue) : undefined;\n });\n\n useEffect(() => {\n const onChange = () => {\n const cookieValue = getCookie(key);\n setValue(cookieValue ? deserializer(cookieValue) : undefined);\n };\n window.addEventListener(COOKIE_EVENT, onChange);\n return () => window.removeEventListener(COOKIE_EVENT, onChange);\n }, [key]);\n\n const set = (value: Value, params?: SetCookieParams) =>\n setCookieItem(key, serializer(value), { ...options, ...params });\n const remove = (params?: RemoveCookieParams) => removeCookieItem(key, { ...options, ...params });\n\n return { value, set, remove };\n}) as UseCookie;\n"],"names":["getCookies","cookie","key","value","decodedValue","removeCookie","options","setCookie","COOKIE_EVENT","dispatchCookieEvent","setCookieItem","removeCookieItem","getCookie","useCookie","params","initialValue","serializer","deserializer","setValue","useState","cookieValue","useEffect","onChange"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"useCookie.mjs","sources":["../../../../src/hooks/useCookie/useCookie.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport const getCookies = () =>\n Object.fromEntries(\n document.cookie.split('; ').map((cookie) => {\n const [key, ...value] = cookie.split('=');\n const decodedValue = decodeURIComponent(value.join('='));\n return [key, decodedValue];\n })\n );\n\nexport interface RemoveCookieParams {\n domain?: string;\n expires?: Date;\n maxAge?: number;\n path?: string;\n sameSite?: 'Lax' | 'None' | 'Strict';\n secure?: boolean;\n}\n\nexport const removeCookie = (key: string, options: RemoveCookieParams = {}) => {\n document.cookie = `${encodeURIComponent(key)}=; expires=Thu, 01 Jan 1970 00:00:00 GMT${\n options.path ? `; path=${options.path}` : ''\n }${options.domain ? `; domain=${options.domain}` : ''}${\n options.maxAge ? `; max-age=0` : ''\n }${options.expires ? `; expires=Thu, 01 Jan 1970 00:00:00 GMT` : ''}${\n options.secure ? `; secure` : ''\n }${options.sameSite ? `; samesite=${options.sameSite}` : ''}`;\n};\n\nexport interface SetCookieParams {\n domain?: string;\n expires?: Date;\n httpOnly?: boolean;\n maxAge?: number;\n path?: string;\n sameSite?: 'Lax' | 'None' | 'Strict';\n secure?: boolean;\n}\n\nexport const setCookie = (key: string, value: string, options: SetCookieParams = {}) => {\n const cookie = [`${encodeURIComponent(key)}=${encodeURIComponent(value)}`];\n\n if (options.path) cookie.push(`path=${options.path}`);\n if (options.domain) cookie.push(`domain=${options.domain}`);\n if (typeof options.maxAge === 'number') cookie.push(`max-age=${options.maxAge}`);\n if (options.expires) cookie.push(`expires=${options.expires.toUTCString()}`);\n if (options.secure) cookie.push(`secure`);\n if (options.httpOnly) cookie.push(`httpOnly`);\n if (options.sameSite) cookie.push(`samesite=${options.sameSite}`);\n\n document.cookie = cookie.join('; ');\n};\n\n/* The use cookie initial value type */\nexport type UseCookieInitialValue<Value> = (() => Value) | Value;\n\n/* The use cookie options type */\nexport interface UseCookieOptions<Value> {\n /* The domain of the cookie */\n domain?: string;\n /* The expiration date of the cookie */\n expires?: Date;\n /* Whether the cookie is httpOnly */\n httpOnly?: boolean;\n /* The initial value of the storage */\n initialValue?: UseCookieInitialValue<Value>;\n /* The maximum age of the cookie */\n maxAge?: number;\n /* The path of the cookie */\n path?: string;\n /* The sameSite of the cookie */\n sameSite?: 'Lax' | 'None' | 'Strict';\n /* Whether the cookie is secure */\n secure?: boolean;\n /* The deserializer function to be invoked */\n deserializer?: (value: string) => Value;\n /* The serializer function to be invoked */\n serializer?: (value: Value) => string;\n}\n\n/* The use cookie return type */\nexport interface UseCookieReturn<Value> {\n /* The value of the cookie */\n value: Value;\n /* The remove function */\n remove: (options?: RemoveCookieParams) => void;\n /* The set function */\n set: (value: Value, options?: SetCookieParams) => void;\n}\n\nexport const COOKIE_EVENT = 'reactuse-cookie';\n\nexport const dispatchCookieEvent = () => window.dispatchEvent(new Event(COOKIE_EVENT));\n\nexport const setCookieItem = (key: string, value: string, options?: SetCookieParams) => {\n setCookie(key, value, options);\n dispatchCookieEvent();\n};\n\nexport const removeCookieItem = (key: string, options?: RemoveCookieParams) => {\n removeCookie(key, options);\n dispatchCookieEvent();\n};\n\nexport const getCookie = (key: string): string | undefined => {\n const cookies = getCookies();\n return cookies[key];\n};\n\nexport interface UseCookie {\n <Value>(\n key: string,\n options: UseCookieOptions<Value> & {\n initialValue: UseCookieInitialValue<Value>;\n }\n ): UseCookieReturn<Value>;\n\n <Value>(key: string, options?: UseCookieOptions<Value>): UseCookieReturn<Value | undefined>;\n\n <Value>(key: string, initialValue: UseCookieInitialValue<Value>): UseCookieReturn<Value>;\n\n <Value>(key: string): UseCookieReturn<Value | undefined>;\n}\n\n/**\n * @name useCookie\n * @description - Hook that manages cookie value\n * @category State\n * @usage medium\n\n * @overload\n * @template Value The type of the cookie value\n * @param {string} key The key of the cookie\n * @param {UseCookieInitialValue<Value>} [initialValue] The initial value of the cookie\n * @returns {UseCookieReturn<Value>} The value and the set function\n *\n * @overload\n * @template Value The type of the cookie value\n * @param {string} key The key of the cookie\n * @param {UseCookieOptions<Value>} options The options object\n * @param {UseCookieInitialValue<Value>} [options.initialValue] The initial value of the cookie\n * @param {(value: string) => Value} [options.deserializer] The deserializer function to be invoked\n * @param {(value: Value) => string} [options.serializer] The serializer function to be invoked\n * @returns {UseCookieReturn<Value | undefined>} The value and the set function\n *\n * @example\n * const { value, set, remove } = useCookie('key', 'value');\n */\nexport const useCookie = (<Value>(key: string, params?: any) => {\n const options = (\n typeof params === 'object' &&\n params &&\n ('serializer' in params || 'deserializer' in params || 'initialValue' in params)\n ? params\n : undefined\n ) as UseCookieOptions<Value>;\n const initialValue = (options ? options?.initialValue : params) as UseCookieInitialValue<Value>;\n\n if (typeof document === 'undefined')\n return {\n value: typeof initialValue === 'function' ? (initialValue as () => Value)() : initialValue\n } as UseCookieReturn<Value>;\n\n const serializer = (value: Value) => {\n if (options?.serializer) return options.serializer(value);\n if (typeof value === 'string') return value;\n return JSON.stringify(value);\n };\n\n const deserializer = (value: string) => {\n if (options?.deserializer) return options.deserializer(value);\n if (value === 'undefined') return undefined as unknown as Value;\n\n try {\n return JSON.parse(value) as Value;\n } catch {\n return value as Value;\n }\n };\n\n const [value, setValue] = useState<Value | undefined>(() => {\n const cookieValue = getCookie(key);\n if (cookieValue === undefined && initialValue !== undefined) {\n const value =\n typeof initialValue === 'function' ? (initialValue as () => Value)() : initialValue;\n setCookieItem(key, serializer(value), options);\n return value;\n }\n return cookieValue ? deserializer(cookieValue) : undefined;\n });\n\n useEffect(() => {\n const onChange = () => {\n const cookieValue = getCookie(key);\n setValue(cookieValue ? deserializer(cookieValue) : undefined);\n };\n window.addEventListener(COOKIE_EVENT, onChange);\n return () => window.removeEventListener(COOKIE_EVENT, onChange);\n }, [key]);\n\n const set = (value: Value, params?: SetCookieParams) =>\n setCookieItem(key, serializer(value), { ...options, ...params });\n const remove = (params?: RemoveCookieParams) => removeCookieItem(key, { ...options, ...params });\n\n return { value, set, remove };\n}) as UseCookie;\n"],"names":["getCookies","cookie","key","value","decodedValue","removeCookie","options","setCookie","COOKIE_EVENT","dispatchCookieEvent","setCookieItem","removeCookieItem","getCookie","useCookie","params","initialValue","serializer","deserializer","setValue","useState","cookieValue","useEffect","onChange"],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { useState as m } from "react";
|
|
2
|
-
const d = (...u) => {
|
|
2
|
+
const d = ((...u) => {
|
|
3
3
|
const i = typeof u[0] == "number" ? u[0] : u[0]?.initialValue, { max: e = Number.POSITIVE_INFINITY, min: o = Number.NEGATIVE_INFINITY } = typeof u[0] == "number" ? u[1] ?? {} : u[0] ?? {}, [c, r] = m(i ?? 0);
|
|
4
4
|
return { value: c, set: (t) => {
|
|
5
5
|
r((n) => Math.max(
|
|
@@ -16,7 +16,7 @@ const d = (...u) => {
|
|
|
16
16
|
if (typeof o == "number" && t < o) return r(o);
|
|
17
17
|
r(t);
|
|
18
18
|
} };
|
|
19
|
-
};
|
|
19
|
+
});
|
|
20
20
|
export {
|
|
21
21
|
d as useCounter
|
|
22
22
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCounter.mjs","sources":["../../../../src/hooks/useCounter/useCounter.ts"],"sourcesContent":["import type { Dispatch, SetStateAction } from 'react';\n\nimport { useState } from 'react';\n\n/** The use counter options */\nexport interface UseCounterOptions {\n /** The max of count value */\n max?: number;\n /** The min of count value */\n min?: number;\n}\n\n/** The use counter return type */\nexport interface UseCounterReturn {\n /** Function to set a specific value to the counter */\n set: Dispatch<SetStateAction<number>>;\n /** The current count value */\n value: number;\n /** Function to decrement the counter */\n dec: (value?: number) => void;\n /** Function to increment the counter */\n inc: (value?: number) => void;\n /** Function to reset the counter to its initial value. */\n reset: () => void;\n}\n\nexport interface UseCounter {\n (initialValue?: number, options?: UseCounterOptions): UseCounterReturn;\n\n (options: UseCounterOptions & { initialValue?: number }, initialValue?: never): UseCounterReturn;\n}\n\n/**\n * @name useCounter\n * @description - Hook that manages a counter\n * @category State\n * @usage low\n\n * @overload\n * @param {number} [initialValue=0] The initial number value\n * @param {number} [options.min=Number.NEGATIVE_INFINITY] The min of count value\n * @param {number} [options.max=Number.POSITIVE_INFINITY] The max of count value\n * @returns {UseCounterReturn} An object containing the current count and functions to interact with the counter\n\n * @overload\n * @param {number} [params.initialValue=0] The initial number value\n * @param {number} [params.min=Number.NEGATIVE_INFINITY] The min of count value\n * @param {number} [params.max=Number.POSITIVE_INFINITY] The max of count value\n * @returns {UseCounterReturn} An object containing the current count and functions to interact with the counter\n *\n * @example\n * const { count, dec, inc, reset, set } = useCounter(5);\n *\n * @example\n * const { count, dec, inc, reset, set } = useCounter({ initialValue: 5, min: 0, max: 10 });\n */\nexport const useCounter = ((...params: any[]) => {\n const initialValue =\n typeof params[0] === 'number'\n ? params[0]\n : (params[0] as UseCounterOptions & { initialValue?: number })?.initialValue;\n const { max = Number.POSITIVE_INFINITY, min = Number.NEGATIVE_INFINITY } =\n typeof params[0] === 'number'\n ? ((params[1] ?? {}) as UseCounterOptions)\n : ((params[0] ?? {}) as UseCounterOptions & { initialValue?: number });\n\n const [value, setValue] = useState(initialValue ?? 0);\n\n const inc = (value: number = 1) => {\n setValue((prevValue) => {\n if (typeof max === 'number' && prevValue === max) return prevValue;\n return Math.max(Math.min(max, prevValue + value), min);\n });\n };\n\n const dec = (value: number = 1) => {\n setValue((prevValue) => {\n if (typeof min === 'number' && prevValue === min) return prevValue;\n return Math.min(Math.max(min, prevValue - value), max);\n });\n };\n\n const reset = () => {\n const value = initialValue ?? 0;\n if (typeof max === 'number' && value > max) return setValue(max);\n if (typeof min === 'number' && value < min) return setValue(min);\n setValue(value);\n };\n\n const set = (value: SetStateAction<number>) => {\n setValue((prevValue) => {\n const updatedCount = Math.max(\n min,\n Math.min(max, typeof value === 'number' ? value : value(prevValue))\n );\n\n return updatedCount;\n });\n };\n\n return { value, set, inc, dec, reset };\n}) as UseCounter;\n"],"names":["useCounter","params","initialValue","max","min","value","setValue","useState","prevValue"],"mappings":";AAwDO,MAAMA,
|
|
1
|
+
{"version":3,"file":"useCounter.mjs","sources":["../../../../src/hooks/useCounter/useCounter.ts"],"sourcesContent":["import type { Dispatch, SetStateAction } from 'react';\n\nimport { useState } from 'react';\n\n/** The use counter options */\nexport interface UseCounterOptions {\n /** The max of count value */\n max?: number;\n /** The min of count value */\n min?: number;\n}\n\n/** The use counter return type */\nexport interface UseCounterReturn {\n /** Function to set a specific value to the counter */\n set: Dispatch<SetStateAction<number>>;\n /** The current count value */\n value: number;\n /** Function to decrement the counter */\n dec: (value?: number) => void;\n /** Function to increment the counter */\n inc: (value?: number) => void;\n /** Function to reset the counter to its initial value. */\n reset: () => void;\n}\n\nexport interface UseCounter {\n (initialValue?: number, options?: UseCounterOptions): UseCounterReturn;\n\n (options: UseCounterOptions & { initialValue?: number }, initialValue?: never): UseCounterReturn;\n}\n\n/**\n * @name useCounter\n * @description - Hook that manages a counter\n * @category State\n * @usage low\n\n * @overload\n * @param {number} [initialValue=0] The initial number value\n * @param {number} [options.min=Number.NEGATIVE_INFINITY] The min of count value\n * @param {number} [options.max=Number.POSITIVE_INFINITY] The max of count value\n * @returns {UseCounterReturn} An object containing the current count and functions to interact with the counter\n\n * @overload\n * @param {number} [params.initialValue=0] The initial number value\n * @param {number} [params.min=Number.NEGATIVE_INFINITY] The min of count value\n * @param {number} [params.max=Number.POSITIVE_INFINITY] The max of count value\n * @returns {UseCounterReturn} An object containing the current count and functions to interact with the counter\n *\n * @example\n * const { count, dec, inc, reset, set } = useCounter(5);\n *\n * @example\n * const { count, dec, inc, reset, set } = useCounter({ initialValue: 5, min: 0, max: 10 });\n */\nexport const useCounter = ((...params: any[]) => {\n const initialValue =\n typeof params[0] === 'number'\n ? params[0]\n : (params[0] as UseCounterOptions & { initialValue?: number })?.initialValue;\n const { max = Number.POSITIVE_INFINITY, min = Number.NEGATIVE_INFINITY } =\n typeof params[0] === 'number'\n ? ((params[1] ?? {}) as UseCounterOptions)\n : ((params[0] ?? {}) as UseCounterOptions & { initialValue?: number });\n\n const [value, setValue] = useState(initialValue ?? 0);\n\n const inc = (value: number = 1) => {\n setValue((prevValue) => {\n if (typeof max === 'number' && prevValue === max) return prevValue;\n return Math.max(Math.min(max, prevValue + value), min);\n });\n };\n\n const dec = (value: number = 1) => {\n setValue((prevValue) => {\n if (typeof min === 'number' && prevValue === min) return prevValue;\n return Math.min(Math.max(min, prevValue - value), max);\n });\n };\n\n const reset = () => {\n const value = initialValue ?? 0;\n if (typeof max === 'number' && value > max) return setValue(max);\n if (typeof min === 'number' && value < min) return setValue(min);\n setValue(value);\n };\n\n const set = (value: SetStateAction<number>) => {\n setValue((prevValue) => {\n const updatedCount = Math.max(\n min,\n Math.min(max, typeof value === 'number' ? value : value(prevValue))\n );\n\n return updatedCount;\n });\n };\n\n return { value, set, inc, dec, reset };\n}) as UseCounter;\n"],"names":["useCounter","params","initialValue","max","min","value","setValue","useState","prevValue"],"mappings":";AAwDO,MAAMA,KAAc,IAAIC,MAAkB;AAC/C,QAAMC,IACJ,OAAOD,EAAO,CAAC,KAAM,WACjBA,EAAO,CAAC,IACPA,EAAO,CAAC,GAAqD,cAC9D,EAAE,KAAAE,IAAM,OAAO,mBAAmB,KAAAC,IAAM,OAAO,kBAAA,IACnD,OAAOH,EAAO,CAAC,KAAM,WACfA,EAAO,CAAC,KAAK,CAAA,IACbA,EAAO,CAAC,KAAK,CAAA,GAEf,CAACI,GAAOC,CAAQ,IAAIC,EAASL,KAAgB,CAAC;AAkCpD,SAAO,EAAE,OAAAG,GAAO,KAXJ,CAACA,MAAkC;AAC7C,IAAAC,EAAS,CAACE,MACa,KAAK;AAAA,MACxBJ;AAAA,MACA,KAAK,IAAID,GAAK,OAAOE,KAAU,WAAWA,IAAQA,EAAMG,CAAS,CAAC;AAAA,IAAA,CAIrE;AAAA,EAAA,GAGkB,KAhCT,CAACH,IAAgB,MAAM;AACjC,IAAAC,EAAS,CAACE,MACJ,OAAOL,KAAQ,YAAYK,MAAcL,IAAYK,IAClD,KAAK,IAAI,KAAK,IAAIL,GAAKK,IAAYH,CAAK,GAAGD,CAAG,CACtD;AAAA,EAAA,GA4BuB,KAzBd,CAACC,IAAgB,MAAM;AACjC,IAAAC,EAAS,CAACE,MACJ,OAAOJ,KAAQ,YAAYI,MAAcJ,IAAYI,IAClD,KAAK,IAAI,KAAK,IAAIJ,GAAKI,IAAYH,CAAK,GAAGF,CAAG,CACtD;AAAA,EAAA,GAqB4B,OAlBjB,MAAM;AAClB,UAAME,IAAQH,KAAgB;AAC9B,QAAI,OAAOC,KAAQ,YAAYE,IAAQF,EAAK,QAAOG,EAASH,CAAG;AAC/D,QAAI,OAAOC,KAAQ,YAAYC,IAAQD,EAAK,QAAOE,EAASF,CAAG;AAC/D,IAAAE,EAASD,CAAK;AAAA,EAAA,EAce;AACjC;"}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { useState as
|
|
1
|
+
import { useState as v, useRef as w, useEffect as g } from "react";
|
|
2
2
|
import { useRefState as E } from "../useRefState/useRefState.mjs";
|
|
3
3
|
import { isTarget as i } from "../../utils/helpers/isTarget.mjs";
|
|
4
|
-
const
|
|
5
|
-
const t = i(n[0]) ? n[0] : void 0, s = t ? n[1] : n[0], r = t ? n[2] : n[1], [
|
|
4
|
+
const P = ((...n) => {
|
|
5
|
+
const t = i(n[0]) ? n[0] : void 0, s = t ? n[1] : n[0], r = t ? n[2] : n[1], [f, u] = v(r ?? ""), c = E(), o = w(null), m = (e) => {
|
|
6
6
|
if (!o.current) return;
|
|
7
7
|
const l = o.current;
|
|
8
8
|
l.style && (l.style.setProperty(s, e), u(e));
|
|
@@ -19,15 +19,15 @@ const R = (...n) => {
|
|
|
19
19
|
const e = (t ? i.getElement(t) : c.current) ?? window.document.documentElement;
|
|
20
20
|
o.current = e;
|
|
21
21
|
const l = () => {
|
|
22
|
-
const
|
|
23
|
-
u(
|
|
22
|
+
const a = window.getComputedStyle(e).getPropertyValue(s)?.trim();
|
|
23
|
+
u(a ?? r);
|
|
24
24
|
}, d = new MutationObserver(l);
|
|
25
25
|
return d.observe(e, { attributeFilter: ["style", "class"] }), () => {
|
|
26
26
|
d.disconnect();
|
|
27
27
|
};
|
|
28
|
-
}, [t, c.state]), t ? { value:
|
|
29
|
-
};
|
|
28
|
+
}, [t, c.state, i.getRefState(t)]), t ? { value: f, set: m, remove: y } : { ref: c, value: f, set: m, remove: y };
|
|
29
|
+
});
|
|
30
30
|
export {
|
|
31
|
-
|
|
31
|
+
P as useCssVar
|
|
32
32
|
};
|
|
33
33
|
//# sourceMappingURL=useCssVar.mjs.map
|