@siberiacancode/reactuse 0.0.117 → 0.1.0
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/useDoubleClick/useDoubleClick.cjs +1 -1
- package/dist/cjs/hooks/useDoubleClick/useDoubleClick.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/useLongPress/useLongPress.cjs +1 -1
- package/dist/cjs/hooks/useLongPress/useLongPress.cjs.map +1 -1
- package/dist/cjs/hooks/useOnce/useOnce.cjs +1 -1
- package/dist/cjs/hooks/useOnce/useOnce.cjs.map +1 -1
- package/dist/cjs/hooks/usePerformanceObserver/usePerformanceObserver.cjs +1 -1
- package/dist/cjs/hooks/usePerformanceObserver/usePerformanceObserver.cjs.map +1 -1
- package/dist/cjs/hooks/usePrevious/usePrevious.cjs +1 -1
- package/dist/cjs/hooks/usePrevious/usePrevious.cjs.map +1 -1
- package/dist/cjs/hooks/useQuery/useQuery.cjs +1 -1
- package/dist/cjs/hooks/useQuery/useQuery.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/useTimeout/useTimeout.cjs +1 -1
- package/dist/cjs/hooks/useTimeout/useTimeout.cjs.map +1 -1
- package/dist/cjs/hooks/useTimer/useTimer.cjs +1 -1
- package/dist/cjs/hooks/useTimer/useTimer.cjs.map +1 -1
- package/dist/cjs/hooks/useVibrate/useVibrate.cjs +1 -1
- package/dist/cjs/hooks/useVibrate/useVibrate.cjs.map +1 -1
- package/dist/cjs/hooks/useWakeLock/useWakeLock.cjs +1 -1
- package/dist/cjs/hooks/useWakeLock/useWakeLock.cjs.map +1 -1
- package/dist/cjs/hooks/useWebSocket/useWebSocket.cjs +1 -1
- package/dist/cjs/hooks/useWebSocket/useWebSocket.cjs.map +1 -1
- package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs +4 -4
- package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs.map +1 -1
- package/dist/esm/hooks/useInterval/useInterval.mjs +6 -6
- package/dist/esm/hooks/useInterval/useInterval.mjs.map +1 -1
- package/dist/esm/hooks/useLongPress/useLongPress.mjs +1 -1
- package/dist/esm/hooks/useLongPress/useLongPress.mjs.map +1 -1
- package/dist/esm/hooks/useOnce/useOnce.mjs +3 -3
- package/dist/esm/hooks/useOnce/useOnce.mjs.map +1 -1
- package/dist/esm/hooks/usePerformanceObserver/usePerformanceObserver.mjs +14 -14
- package/dist/esm/hooks/usePerformanceObserver/usePerformanceObserver.mjs.map +1 -1
- package/dist/esm/hooks/usePrevious/usePrevious.mjs +3 -3
- package/dist/esm/hooks/usePrevious/usePrevious.mjs.map +1 -1
- package/dist/esm/hooks/useQuery/useQuery.mjs +9 -9
- package/dist/esm/hooks/useQuery/useQuery.mjs.map +1 -1
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs +17 -17
- package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs.map +1 -1
- package/dist/esm/hooks/useTimeout/useTimeout.mjs +1 -1
- package/dist/esm/hooks/useTimeout/useTimeout.mjs.map +1 -1
- package/dist/esm/hooks/useTimer/useTimer.mjs +15 -15
- package/dist/esm/hooks/useTimer/useTimer.mjs.map +1 -1
- package/dist/esm/hooks/useVibrate/useVibrate.mjs +9 -9
- package/dist/esm/hooks/useVibrate/useVibrate.mjs.map +1 -1
- package/dist/esm/hooks/useWakeLock/useWakeLock.mjs +3 -3
- package/dist/esm/hooks/useWakeLock/useWakeLock.mjs.map +1 -1
- package/dist/esm/hooks/useWebSocket/useWebSocket.mjs +5 -5
- package/dist/esm/hooks/useWebSocket/useWebSocket.mjs.map +1 -1
- package/dist/types/hooks/usePrevious/usePrevious.d.ts +1 -1
- package/package.json +16 -16
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),g=require("../useRefState/useRefState.cjs"),T=require("../../utils/helpers/isTarget.cjs"),k=require("../../utils/helpers/getElement.cjs"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),g=require("../useRefState/useRefState.cjs"),T=require("../../utils/helpers/isTarget.cjs"),k=require("../../utils/helpers/getElement.cjs"),v=300,m=(...t)=>{const e=T.isTarget(t[0])?t[0]:void 0,l=e?t[1]:t[0],f=e?t[2]:t[1],u=c.useRef(void 0),r=c.useRef(0),o=g.useRefState(),a=c.useRef(l);a.current=l;const i=c.useRef(f);if(i.current=f,c.useEffect(()=>{if(!e&&!o.state)return;const n=e?k.getElement(e):o.current;if(!n)return;const s=d=>{var R;r.current+=1,r.current===1&&(u.current=setTimeout(()=>{var E;(E=i.current)!=null&&E.onSingleClick&&i.current.onSingleClick(d),r.current=0},((R=i.current)==null?void 0:R.threshold)??v)),r.current===2&&(clearTimeout(u.current),a.current(d),r.current=0)};return n.addEventListener("mousedown",s),n.addEventListener("touchstart",s),()=>{n.removeEventListener("mousedown",s),n.removeEventListener("touchstart",s),u.current&&clearTimeout(u.current)}},[e,o.state]),!e)return o};exports.useDoubleClick=m;
|
|
2
2
|
//# sourceMappingURL=useDoubleClick.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDoubleClick.cjs","sources":["../../../../src/hooks/useDoubleClick/useDoubleClick.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type DoubleClickEvents = MouseEvent | TouchEvent;\n\n// * The use double click options type */\nexport interface UseDoubleClickOptions {\n // * The threshold time in milliseconds between clicks\n threshold?: number;\n // * The callback function to be invoked on single click\n onSingleClick?: (event: DoubleClickEvents) => void;\n}\n\nexport interface UseDoubleClick {\n (\n target: HookTarget,\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions,\n target?: never\n ): StateRef<Target>;\n}\n\nconst DEFAULT_THRESHOLD_TIME = 300;\n\n/**\n * @name useDoubleClick\n * @description - Hook that defines the logic when double clicking an element\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element to be double clicked\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * useDoubleClick(ref, () => console.log('double clicked'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * const ref = useDoubleClick(() => console.log('double clicked'));\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useDoubleClick.html}\n */\nexport const useDoubleClick = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as (event: DoubleClickEvents) => void;\n const options = (target ? params[2] : params[1]) as UseDoubleClickOptions | undefined;\n\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>();\n const clickCountRef = useRef(0);\n const internalRef = useRefState<Element>();\n\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const onClick = (event: DoubleClickEvents) => {\n clickCountRef.current += 1;\n\n if (clickCountRef.current === 1) {\n timeoutIdRef.current = setTimeout(() => {\n if (internalOptionsRef.current?.onSingleClick)\n internalOptionsRef.current.onSingleClick(event);\n clickCountRef.current = 0;\n }, internalOptionsRef.current?.threshold ?? DEFAULT_THRESHOLD_TIME);\n }\n\n if (clickCountRef.current === 2) {\n clearTimeout(timeoutIdRef.current);\n internalCallbackRef.current(event);\n clickCountRef.current = 0;\n }\n };\n\n element.addEventListener('mousedown', onClick as EventListener);\n element.addEventListener('touchstart', onClick as EventListener);\n\n return () => {\n element.removeEventListener('mousedown', onClick as EventListener);\n element.removeEventListener('touchstart', onClick as EventListener);\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n }, [target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseDoubleClick;\n"],"names":["DEFAULT_THRESHOLD_TIME","useDoubleClick","params","target","isTarget","callback","options","timeoutIdRef","useRef","clickCountRef","internalRef","useRefState","internalCallbackRef","internalOptionsRef","useEffect","element","getElement","onClick","event","_a"],"mappings":"mPAkCMA,EAAyB,IA2BlBC,EAAkB,IAAIC,IAAuB,CAClD,MAAAC,EAAUC,WAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAYF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACzCI,EAAWH,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAExCK,EAAeC,
|
|
1
|
+
{"version":3,"file":"useDoubleClick.cjs","sources":["../../../../src/hooks/useDoubleClick/useDoubleClick.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type DoubleClickEvents = MouseEvent | TouchEvent;\n\n// * The use double click options type */\nexport interface UseDoubleClickOptions {\n // * The threshold time in milliseconds between clicks\n threshold?: number;\n // * The callback function to be invoked on single click\n onSingleClick?: (event: DoubleClickEvents) => void;\n}\n\nexport interface UseDoubleClick {\n (\n target: HookTarget,\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions,\n target?: never\n ): StateRef<Target>;\n}\n\nconst DEFAULT_THRESHOLD_TIME = 300;\n\n/**\n * @name useDoubleClick\n * @description - Hook that defines the logic when double clicking an element\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element to be double clicked\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * useDoubleClick(ref, () => console.log('double clicked'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * const ref = useDoubleClick(() => console.log('double clicked'));\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useDoubleClick.html}\n */\nexport const useDoubleClick = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as (event: DoubleClickEvents) => void;\n const options = (target ? params[2] : params[1]) as UseDoubleClickOptions | undefined;\n\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const clickCountRef = useRef(0);\n const internalRef = useRefState<Element>();\n\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const onClick = (event: DoubleClickEvents) => {\n clickCountRef.current += 1;\n\n if (clickCountRef.current === 1) {\n timeoutIdRef.current = setTimeout(() => {\n if (internalOptionsRef.current?.onSingleClick)\n internalOptionsRef.current.onSingleClick(event);\n clickCountRef.current = 0;\n }, internalOptionsRef.current?.threshold ?? DEFAULT_THRESHOLD_TIME);\n }\n\n if (clickCountRef.current === 2) {\n clearTimeout(timeoutIdRef.current);\n internalCallbackRef.current(event);\n clickCountRef.current = 0;\n }\n };\n\n element.addEventListener('mousedown', onClick as EventListener);\n element.addEventListener('touchstart', onClick as EventListener);\n\n return () => {\n element.removeEventListener('mousedown', onClick as EventListener);\n element.removeEventListener('touchstart', onClick as EventListener);\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n }, [target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseDoubleClick;\n"],"names":["DEFAULT_THRESHOLD_TIME","useDoubleClick","params","target","isTarget","callback","options","timeoutIdRef","useRef","clickCountRef","internalRef","useRefState","internalCallbackRef","internalOptionsRef","useEffect","element","getElement","onClick","event","_a"],"mappings":"mPAkCMA,EAAyB,IA2BlBC,EAAkB,IAAIC,IAAuB,CAClD,MAAAC,EAAUC,WAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAYF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACzCI,EAAWH,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAExCK,EAAeC,SAAsC,MAAS,EAC9DC,EAAgBD,SAAO,CAAC,EACxBE,EAAcC,EAAAA,YAAqB,EAEnCC,EAAsBJ,SAAOH,CAAQ,EAC3CO,EAAoB,QAAUP,EACxB,MAAAQ,EAAqBL,SAAOF,CAAO,EAqCzC,GApCAO,EAAmB,QAAUP,EAE7BQ,EAAAA,UAAU,IAAM,CACd,GAAI,CAACX,GAAU,CAACO,EAAY,MAAO,OAEnC,MAAMK,EAAUZ,EAASa,EAAAA,WAAWb,CAAM,EAAIO,EAAY,QAC1D,GAAI,CAACK,EAAS,OAER,MAAAE,EAAWC,GAA6B,OAC5CT,EAAc,SAAW,EAErBA,EAAc,UAAY,IACfF,EAAA,QAAU,WAAW,IAAM,QAClCY,EAAAN,EAAmB,UAAnB,MAAAM,EAA4B,eACXN,EAAA,QAAQ,cAAcK,CAAK,EAChDT,EAAc,QAAU,CACvB,IAAAU,EAAAN,EAAmB,UAAnB,YAAAM,EAA4B,YAAanB,CAAsB,GAGhES,EAAc,UAAY,IAC5B,aAAaF,EAAa,OAAO,EACjCK,EAAoB,QAAQM,CAAK,EACjCT,EAAc,QAAU,EAE5B,EAEQ,OAAAM,EAAA,iBAAiB,YAAaE,CAAwB,EACtDF,EAAA,iBAAiB,aAAcE,CAAwB,EAExD,IAAM,CACHF,EAAA,oBAAoB,YAAaE,CAAwB,EACzDF,EAAA,oBAAoB,aAAcE,CAAwB,EAC9DV,EAAa,SAAsB,aAAAA,EAAa,OAAO,CAC7D,CACC,EAAA,CAACJ,EAAQO,EAAY,KAAK,CAAC,EAE1B,CAAAP,EACG,OAAAO,CACT"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),f=(...e)=>{const l=e[0],n=(typeof e[1]=="number"?e[1]:e[1].interval)??1e3,c=typeof e[1]=="object"?e[1]:e[2],i=(c==null?void 0:c.immediately)??!0,[t,u]=r.useState(i??!0),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),f=(...e)=>{const l=e[0],n=(typeof e[1]=="number"?e[1]:e[1].interval)??1e3,c=typeof e[1]=="object"?e[1]:e[2],i=(c==null?void 0:c.immediately)??!0,[t,u]=r.useState(i??!0),o=r.useRef(void 0),s=r.useRef(l);return s.current=l,r.useEffect(()=>{if(t)return o.current=setInterval(()=>s.current(),n),()=>{clearInterval(o.current)}},[t,n]),{active:t,pause:()=>u(!1),resume:()=>{n<=0||u(!0)},toggle:()=>u(!t)}};exports.useInterval=f;
|
|
2
2
|
//# sourceMappingURL=useInterval.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useInterval.cjs","sources":["../../../../src/hooks/useInterval/useInterval.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use interval options */\nexport interface UseIntervalOptions {\n /** Start the interval immediately */\n immediately?: boolean;\n}\n\n/** The use interval return type */\nexport interface UseIntervalReturn {\n /** Is the interval active */\n active: boolean;\n /** Pause the interval */\n pause: () => void;\n /** Resume the interval */\n resume: () => void;\n /** Toggle the interval */\n toggle: () => void;\n}\n\ninterface UseInterval {\n (callback: () => void, interval?: number, options?: UseIntervalOptions): UseIntervalReturn;\n\n (callback: () => void, options?: UseIntervalOptions & { interval?: number }): UseIntervalReturn;\n}\n\n/**\n * @name useInterval\n * @description - Hook that makes and interval and returns controlling functions\n * @category Time\n *\n * @overload\n * @param {() => void} callback Any callback function\n * @param {number} [interval=1000] Time in milliseconds\n * @param {boolean} [options.immediately=true] Start the interval immediately\n * @returns {UseIntervalReturn}\n *\n * @example\n * const { active, pause, resume, toggle } = useInterval(() => console.log('inside interval'), 2500);\n *\n * @overload\n * @param {() => void} callback Any callback function\n * @param {number} [options.interval=1000] Time in milliseconds\n * @param {boolean} [options.immediately=true] Start the interval immediately\n *\n * @example\n * const { active, pause, resume, toggle } = useInterval(() => console.log('inside interval'), { interval: 2500 });\n */\nexport const useInterval = ((...params: any[]): UseIntervalReturn => {\n const callback = params[0] as () => void;\n const interval =\n ((typeof params[1] === 'number'\n ? params[1]\n : (params[1] as UseIntervalOptions & { interval?: number }).interval) as number) ?? 1000;\n const options =\n typeof params[1] === 'object'\n ? (params[1] as (UseIntervalOptions & { interval?: number }) | undefined)\n : (params[2] as UseIntervalOptions | undefined);\n const immediately = options?.immediately ?? true;\n\n const [active, setActive] = useState<boolean>(immediately ?? true);\n\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>();\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n useEffect(() => {\n if (!active) return;\n\n intervalIdRef.current = setInterval(() => internalCallbackRef.current(), interval);\n return () => {\n clearInterval(intervalIdRef.current);\n };\n }, [active, interval]);\n\n const pause = () => setActive(false);\n\n const resume = () => {\n if (interval <= 0) return;\n setActive(true);\n };\n\n const toggle = () => setActive(!active);\n\n return {\n active,\n pause,\n resume,\n toggle\n };\n}) as UseInterval;\n"],"names":["useInterval","params","callback","interval","options","immediately","active","setActive","useState","intervalIdRef","useRef","internalCallbackRef","useEffect"],"mappings":"yGAgDaA,EAAe,IAAIC,IAAqC,CAC7D,MAAAC,EAAWD,EAAO,CAAC,EACnBE,GACF,OAAOF,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACPA,EAAO,CAAC,EAAiD,WAAwB,IAClFG,EACJ,OAAOH,EAAO,CAAC,GAAM,SAChBA,EAAO,CAAC,EACRA,EAAO,CAAC,EACTI,GAAcD,GAAA,YAAAA,EAAS,cAAe,GAEtC,CAACE,EAAQC,CAAS,EAAIC,EAAAA,SAAkBH,GAAe,EAAI,EAE3DI,EAAgBC,
|
|
1
|
+
{"version":3,"file":"useInterval.cjs","sources":["../../../../src/hooks/useInterval/useInterval.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use interval options */\nexport interface UseIntervalOptions {\n /** Start the interval immediately */\n immediately?: boolean;\n}\n\n/** The use interval return type */\nexport interface UseIntervalReturn {\n /** Is the interval active */\n active: boolean;\n /** Pause the interval */\n pause: () => void;\n /** Resume the interval */\n resume: () => void;\n /** Toggle the interval */\n toggle: () => void;\n}\n\ninterface UseInterval {\n (callback: () => void, interval?: number, options?: UseIntervalOptions): UseIntervalReturn;\n\n (callback: () => void, options?: UseIntervalOptions & { interval?: number }): UseIntervalReturn;\n}\n\n/**\n * @name useInterval\n * @description - Hook that makes and interval and returns controlling functions\n * @category Time\n *\n * @overload\n * @param {() => void} callback Any callback function\n * @param {number} [interval=1000] Time in milliseconds\n * @param {boolean} [options.immediately=true] Start the interval immediately\n * @returns {UseIntervalReturn}\n *\n * @example\n * const { active, pause, resume, toggle } = useInterval(() => console.log('inside interval'), 2500);\n *\n * @overload\n * @param {() => void} callback Any callback function\n * @param {number} [options.interval=1000] Time in milliseconds\n * @param {boolean} [options.immediately=true] Start the interval immediately\n *\n * @example\n * const { active, pause, resume, toggle } = useInterval(() => console.log('inside interval'), { interval: 2500 });\n */\nexport const useInterval = ((...params: any[]): UseIntervalReturn => {\n const callback = params[0] as () => void;\n const interval =\n ((typeof params[1] === 'number'\n ? params[1]\n : (params[1] as UseIntervalOptions & { interval?: number }).interval) as number) ?? 1000;\n const options =\n typeof params[1] === 'object'\n ? (params[1] as (UseIntervalOptions & { interval?: number }) | undefined)\n : (params[2] as UseIntervalOptions | undefined);\n const immediately = options?.immediately ?? true;\n\n const [active, setActive] = useState<boolean>(immediately ?? true);\n\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>(undefined);\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n useEffect(() => {\n if (!active) return;\n\n intervalIdRef.current = setInterval(() => internalCallbackRef.current(), interval);\n return () => {\n clearInterval(intervalIdRef.current);\n };\n }, [active, interval]);\n\n const pause = () => setActive(false);\n\n const resume = () => {\n if (interval <= 0) return;\n setActive(true);\n };\n\n const toggle = () => setActive(!active);\n\n return {\n active,\n pause,\n resume,\n toggle\n };\n}) as UseInterval;\n"],"names":["useInterval","params","callback","interval","options","immediately","active","setActive","useState","intervalIdRef","useRef","internalCallbackRef","useEffect"],"mappings":"yGAgDaA,EAAe,IAAIC,IAAqC,CAC7D,MAAAC,EAAWD,EAAO,CAAC,EACnBE,GACF,OAAOF,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACPA,EAAO,CAAC,EAAiD,WAAwB,IAClFG,EACJ,OAAOH,EAAO,CAAC,GAAM,SAChBA,EAAO,CAAC,EACRA,EAAO,CAAC,EACTI,GAAcD,GAAA,YAAAA,EAAS,cAAe,GAEtC,CAACE,EAAQC,CAAS,EAAIC,EAAAA,SAAkBH,GAAe,EAAI,EAE3DI,EAAgBC,SAAuC,MAAS,EAChEC,EAAsBD,SAAOR,CAAQ,EAC3C,OAAAS,EAAoB,QAAUT,EAE9BU,EAAAA,UAAU,IAAM,CACd,GAAKN,EAEL,OAAAG,EAAc,QAAU,YAAY,IAAME,EAAoB,UAAWR,CAAQ,EAC1E,IAAM,CACX,cAAcM,EAAc,OAAO,CACrC,CAAA,EACC,CAACH,EAAQH,CAAQ,CAAC,EAWd,CACL,OAAAG,EACA,MAXY,IAAMC,EAAU,EAAK,EAYjC,OAVa,IAAM,CACfJ,GAAY,GAChBI,EAAU,EAAI,CAChB,EAQE,OANa,IAAMA,EAAU,CAACD,CAAM,CAOtC,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),T=require("../useRefState/useRefState.cjs"),S=require("../../utils/helpers/isTarget.cjs"),P=require("../../utils/helpers/getElement.cjs"),b=400,q=(...s)=>{const n=S.isTarget(s[0])?s[0]:void 0,L=n?s[1]:s[0],m=n?s[2]:s[1],[R,w]=u.useState(!1),c=u.useRef(),E=u.useRef(!1),f=T.useRefState(),g=u.useRef(L);g.current=L;const i=u.useRef(m);return i.current=m,u.useEffect(()=>{if(!n&&!f.state)return;const e=n?P.getElement(n):f.current;if(!e)return;const l=d=>{var o,r,a;(r=(o=i.current)==null?void 0:o.onStart)==null||r.call(o,d),E.current=!0,c.current=setTimeout(()=>{g.current(d),w(!0)},((a=i.current)==null?void 0:a.threshold)??b)},t=d=>{w(o=>{var r,a,v,h;return o?(a=(r=i.current)==null?void 0:r.onFinish)==null||a.call(r,d):E.current&&((h=(v=i.current)==null?void 0:v.onCancel)==null||h.call(v,d)),!1}),E.current=!1,c.current&&clearTimeout(c.current)};return e.addEventListener("mousedown",l),e.addEventListener("touchstart",l),e.addEventListener("mouseup",t),e.addEventListener("touchend",t),window.addEventListener("mouseup",t),window.addEventListener("touchend",t),()=>{e.removeEventListener("mousedown",l),e.removeEventListener("touchstart",l),e.removeEventListener("mouseup",t),e.removeEventListener("touchend",t),window.removeEventListener("mouseup",t),window.removeEventListener("touchend",t),c.current&&clearTimeout(c.current)}},[n,f.state]),n?R:{ref:f,pressed:R}};exports.useLongPress=q;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),T=require("../useRefState/useRefState.cjs"),S=require("../../utils/helpers/isTarget.cjs"),P=require("../../utils/helpers/getElement.cjs"),b=400,q=(...s)=>{const n=S.isTarget(s[0])?s[0]:void 0,L=n?s[1]:s[0],m=n?s[2]:s[1],[R,w]=u.useState(!1),c=u.useRef(void 0),E=u.useRef(!1),f=T.useRefState(),g=u.useRef(L);g.current=L;const i=u.useRef(m);return i.current=m,u.useEffect(()=>{if(!n&&!f.state)return;const e=n?P.getElement(n):f.current;if(!e)return;const l=d=>{var o,r,a;(r=(o=i.current)==null?void 0:o.onStart)==null||r.call(o,d),E.current=!0,c.current=setTimeout(()=>{g.current(d),w(!0)},((a=i.current)==null?void 0:a.threshold)??b)},t=d=>{w(o=>{var r,a,v,h;return o?(a=(r=i.current)==null?void 0:r.onFinish)==null||a.call(r,d):E.current&&((h=(v=i.current)==null?void 0:v.onCancel)==null||h.call(v,d)),!1}),E.current=!1,c.current&&clearTimeout(c.current)};return e.addEventListener("mousedown",l),e.addEventListener("touchstart",l),e.addEventListener("mouseup",t),e.addEventListener("touchend",t),window.addEventListener("mouseup",t),window.addEventListener("touchend",t),()=>{e.removeEventListener("mousedown",l),e.removeEventListener("touchstart",l),e.removeEventListener("mouseup",t),e.removeEventListener("touchend",t),window.removeEventListener("mouseup",t),window.removeEventListener("touchend",t),c.current&&clearTimeout(c.current)}},[n,f.state]),n?R:{ref:f,pressed:R}};exports.useLongPress=q;
|
|
2
2
|
//# sourceMappingURL=useLongPress.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useLongPress.cjs","sources":["../../../../src/hooks/useLongPress/useLongPress.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type LongPressEvents = MouseEvent | TouchEvent;\n\n// * The use long press options type */\nexport interface UseLongPressOptions {\n // * The threshold time in milliseconds\n threshold?: number;\n // * The callback function to be invoked on long press cancel\n onCancel?: (event: LongPressEvents) => void;\n // * The callback function to be invoked on long press end\n onFinish?: (event: LongPressEvents) => void;\n // * The callback function to be invoked on long press start\n onStart?: (event: LongPressEvents) => void;\n}\n\nexport interface UseLongPress {\n (\n target: HookTarget,\n callback: (event: LongPressEvents) => void,\n options?: UseLongPressOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: LongPressEvents) => void,\n options?: UseLongPressOptions,\n target?: never\n ): {\n ref: StateRef<Target>;\n pressed: boolean;\n };\n}\n\nconst DEFAULT_THRESHOLD_TIME = 400;\n\n/**\n * @name useLongPress\n * @description - Hook that defines the logic when long pressing an element\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element to be long pressed\n * @param {(event: LongPressEvents) => void} callback The callback function to be invoked on long press\n * @param {UseLongPressOptions} [options] The options for the long press\n * @returns {boolean} The long pressing state\n *\n * @example\n * const pressed = useLongPress(ref, () => console.log('callback'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: LongPressEvents) => void} callback The callback function to be invoked on long press\n * @param {UseLongPressOptions} [options] The options for the long press\n * @returns {boolean} The long pressing state\n *\n * @example\n * const { ref, pressed } = useLongPress(() => console.log('callback'));\n */\nexport const useLongPress = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as (event: LongPressEvents) => void;\n const options = (target ? params[2] : params[1]) as UseLongPressOptions | undefined;\n\n const [pressed, setPressed] = useState(false);\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>();\n const isPressedRef = useRef(false);\n const internalRef = useRefState<Element>();\n\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const onStart = (event: LongPressEvents) => {\n internalOptionsRef.current?.onStart?.(event);\n\n isPressedRef.current = true;\n timeoutIdRef.current = setTimeout(() => {\n internalCallbackRef.current(event);\n setPressed(true);\n }, internalOptionsRef.current?.threshold ?? DEFAULT_THRESHOLD_TIME);\n };\n\n const onCancel = (event: LongPressEvents) => {\n setPressed((prevPressed) => {\n if (prevPressed) {\n internalOptionsRef.current?.onFinish?.(event);\n } else if (isPressedRef.current) {\n internalOptionsRef.current?.onCancel?.(event);\n }\n\n return false;\n });\n\n isPressedRef.current = false;\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n\n element.addEventListener('mousedown', onStart as EventListener);\n element.addEventListener('touchstart', onStart as EventListener);\n element.addEventListener('mouseup', onCancel as EventListener);\n element.addEventListener('touchend', onCancel as EventListener);\n window.addEventListener('mouseup', onCancel as EventListener);\n window.addEventListener('touchend', onCancel as EventListener);\n\n return () => {\n element.removeEventListener('mousedown', onStart as EventListener);\n element.removeEventListener('touchstart', onStart as EventListener);\n element.removeEventListener('mouseup', onCancel as EventListener);\n element.removeEventListener('touchend', onCancel as EventListener);\n window.removeEventListener('mouseup', onCancel as EventListener);\n window.removeEventListener('touchend', onCancel as EventListener);\n\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n }, [target, internalRef.state]);\n\n if (target) return pressed;\n return {\n ref: internalRef,\n pressed\n };\n}) as UseLongPress;\n"],"names":["DEFAULT_THRESHOLD_TIME","useLongPress","params","target","isTarget","callback","options","pressed","setPressed","useState","timeoutIdRef","useRef","isPressedRef","internalRef","useRefState","internalCallbackRef","internalOptionsRef","useEffect","element","getElement","onStart","event","_b","_a","_c","onCancel","prevPressed","_d"],"mappings":"mPAyCMA,EAAyB,IAyBlBC,EAAgB,IAAIC,IAAuB,CAChD,MAAAC,EAAUC,WAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAYF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACzCI,EAAWH,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAExC,CAACK,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtCC,EAAeC,
|
|
1
|
+
{"version":3,"file":"useLongPress.cjs","sources":["../../../../src/hooks/useLongPress/useLongPress.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type LongPressEvents = MouseEvent | TouchEvent;\n\n// * The use long press options type */\nexport interface UseLongPressOptions {\n // * The threshold time in milliseconds\n threshold?: number;\n // * The callback function to be invoked on long press cancel\n onCancel?: (event: LongPressEvents) => void;\n // * The callback function to be invoked on long press end\n onFinish?: (event: LongPressEvents) => void;\n // * The callback function to be invoked on long press start\n onStart?: (event: LongPressEvents) => void;\n}\n\nexport interface UseLongPress {\n (\n target: HookTarget,\n callback: (event: LongPressEvents) => void,\n options?: UseLongPressOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: LongPressEvents) => void,\n options?: UseLongPressOptions,\n target?: never\n ): {\n ref: StateRef<Target>;\n pressed: boolean;\n };\n}\n\nconst DEFAULT_THRESHOLD_TIME = 400;\n\n/**\n * @name useLongPress\n * @description - Hook that defines the logic when long pressing an element\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element to be long pressed\n * @param {(event: LongPressEvents) => void} callback The callback function to be invoked on long press\n * @param {UseLongPressOptions} [options] The options for the long press\n * @returns {boolean} The long pressing state\n *\n * @example\n * const pressed = useLongPress(ref, () => console.log('callback'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: LongPressEvents) => void} callback The callback function to be invoked on long press\n * @param {UseLongPressOptions} [options] The options for the long press\n * @returns {boolean} The long pressing state\n *\n * @example\n * const { ref, pressed } = useLongPress(() => console.log('callback'));\n */\nexport const useLongPress = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as (event: LongPressEvents) => void;\n const options = (target ? params[2] : params[1]) as UseLongPressOptions | undefined;\n\n const [pressed, setPressed] = useState(false);\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const isPressedRef = useRef(false);\n const internalRef = useRefState<Element>();\n\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const onStart = (event: LongPressEvents) => {\n internalOptionsRef.current?.onStart?.(event);\n\n isPressedRef.current = true;\n timeoutIdRef.current = setTimeout(() => {\n internalCallbackRef.current(event);\n setPressed(true);\n }, internalOptionsRef.current?.threshold ?? DEFAULT_THRESHOLD_TIME);\n };\n\n const onCancel = (event: LongPressEvents) => {\n setPressed((prevPressed) => {\n if (prevPressed) {\n internalOptionsRef.current?.onFinish?.(event);\n } else if (isPressedRef.current) {\n internalOptionsRef.current?.onCancel?.(event);\n }\n\n return false;\n });\n\n isPressedRef.current = false;\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n\n element.addEventListener('mousedown', onStart as EventListener);\n element.addEventListener('touchstart', onStart as EventListener);\n element.addEventListener('mouseup', onCancel as EventListener);\n element.addEventListener('touchend', onCancel as EventListener);\n window.addEventListener('mouseup', onCancel as EventListener);\n window.addEventListener('touchend', onCancel as EventListener);\n\n return () => {\n element.removeEventListener('mousedown', onStart as EventListener);\n element.removeEventListener('touchstart', onStart as EventListener);\n element.removeEventListener('mouseup', onCancel as EventListener);\n element.removeEventListener('touchend', onCancel as EventListener);\n window.removeEventListener('mouseup', onCancel as EventListener);\n window.removeEventListener('touchend', onCancel as EventListener);\n\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n }, [target, internalRef.state]);\n\n if (target) return pressed;\n return {\n ref: internalRef,\n pressed\n };\n}) as UseLongPress;\n"],"names":["DEFAULT_THRESHOLD_TIME","useLongPress","params","target","isTarget","callback","options","pressed","setPressed","useState","timeoutIdRef","useRef","isPressedRef","internalRef","useRefState","internalCallbackRef","internalOptionsRef","useEffect","element","getElement","onStart","event","_b","_a","_c","onCancel","prevPressed","_d"],"mappings":"mPAyCMA,EAAyB,IAyBlBC,EAAgB,IAAIC,IAAuB,CAChD,MAAAC,EAAUC,WAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAYF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACzCI,EAAWH,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAExC,CAACK,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtCC,EAAeC,SAAsC,MAAS,EAC9DC,EAAeD,SAAO,EAAK,EAC3BE,EAAcC,EAAAA,YAAqB,EAEnCC,EAAsBJ,SAAON,CAAQ,EAC3CU,EAAoB,QAAUV,EACxB,MAAAW,EAAqBL,SAAOL,CAAO,EAqDzC,OApDAU,EAAmB,QAAUV,EAE7BW,EAAAA,UAAU,IAAM,CACd,GAAI,CAACd,GAAU,CAACU,EAAY,MAAO,OAEnC,MAAMK,EAAUf,EAASgB,EAAAA,WAAWhB,CAAM,EAAIU,EAAY,QAC1D,GAAI,CAACK,EAAS,OAER,MAAAE,EAAWC,GAA2B,YACvBC,GAAAC,EAAAP,EAAA,UAAA,YAAAO,EAAS,UAAT,MAAAD,EAAA,KAAAC,EAAmBF,GAEtCT,EAAa,QAAU,GACVF,EAAA,QAAU,WAAW,IAAM,CACtCK,EAAoB,QAAQM,CAAK,EACjCb,EAAW,EAAI,CACd,IAAAgB,EAAAR,EAAmB,UAAnB,YAAAQ,EAA4B,YAAaxB,CAAsB,CACpE,EAEMyB,EAAYJ,GAA2B,CAC3Cb,EAAYkB,GAAgB,aAC1B,OAAIA,GACiBJ,GAAAC,EAAAP,EAAA,UAAA,YAAAO,EAAS,WAAT,MAAAD,EAAA,KAAAC,EAAoBF,GAC9BT,EAAa,WACHe,GAAAH,EAAAR,EAAA,UAAA,YAAAQ,EAAS,WAAT,MAAAG,EAAA,KAAAH,EAAoBH,IAGlC,EAAA,CACR,EAEDT,EAAa,QAAU,GACnBF,EAAa,SAAsB,aAAAA,EAAa,OAAO,CAC7D,EAEQ,OAAAQ,EAAA,iBAAiB,YAAaE,CAAwB,EACtDF,EAAA,iBAAiB,aAAcE,CAAwB,EACvDF,EAAA,iBAAiB,UAAWO,CAAyB,EACrDP,EAAA,iBAAiB,WAAYO,CAAyB,EACvD,OAAA,iBAAiB,UAAWA,CAAyB,EACrD,OAAA,iBAAiB,WAAYA,CAAyB,EAEtD,IAAM,CACHP,EAAA,oBAAoB,YAAaE,CAAwB,EACzDF,EAAA,oBAAoB,aAAcE,CAAwB,EAC1DF,EAAA,oBAAoB,UAAWO,CAAyB,EACxDP,EAAA,oBAAoB,WAAYO,CAAyB,EAC1D,OAAA,oBAAoB,UAAWA,CAAyB,EACxD,OAAA,oBAAoB,WAAYA,CAAyB,EAE5Df,EAAa,SAAsB,aAAAA,EAAa,OAAO,CAC7D,CACC,EAAA,CAACP,EAAQU,EAAY,KAAK,CAAC,EAE1BV,EAAeI,EACZ,CACL,IAAKM,EACL,QAAAN,CACF,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react");function c(n){const r=e.useRef(),t=e.useRef(!1),u=e.useRef(!1);t.current&&(u.current=!0),e.useEffect(()=>{if(!t.current)return t.current=!0,r.current=n(),()=>{u.current&&typeof r.current=="function"&&r.current()}},[])}exports.useOnce=c;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const e=require("react");function c(n){const r=e.useRef(void 0),t=e.useRef(!1),u=e.useRef(!1);t.current&&(u.current=!0),e.useEffect(()=>{if(!t.current)return t.current=!0,r.current=n(),()=>{u.current&&typeof r.current=="function"&&r.current()}},[])}exports.useOnce=c;
|
|
2
2
|
//# sourceMappingURL=useOnce.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useOnce.cjs","sources":["../../../../src/hooks/useOnce/useOnce.ts"],"sourcesContent":["import type { EffectCallback } from 'react';\n\nimport { useEffect, useRef } from 'react';\n\n/**\n * @name useEffectOnce\n * @description - Hook that runs an effect only once. Please do not use it in production code!\n * @category Humor\n *\n * @warning - This hook will run effect only once even in strict mode. Please do not use it in production code!\n *\n * @param {EffectCallback} effect The effect to run\n *\n * @example\n * useOnce(() => console.log('effect once'));\n */\nexport function useOnce(effect: EffectCallback) {\n const cleanupRef = useRef<ReturnType<EffectCallback>>();\n const hasRunRef = useRef(false);\n const hasRenderedAfterRun = useRef(false);\n\n if (hasRunRef.current) {\n hasRenderedAfterRun.current = true;\n }\n\n useEffect(() => {\n if (hasRunRef.current) return;\n\n hasRunRef.current = true;\n cleanupRef.current = effect();\n\n return () => {\n if (!hasRenderedAfterRun.current) return;\n\n if (typeof cleanupRef.current === 'function') {\n cleanupRef.current();\n }\n };\n }, []);\n}\n"],"names":["useOnce","effect","cleanupRef","useRef","hasRunRef","hasRenderedAfterRun","useEffect"],"mappings":"yGAgBO,SAASA,EAAQC,EAAwB,
|
|
1
|
+
{"version":3,"file":"useOnce.cjs","sources":["../../../../src/hooks/useOnce/useOnce.ts"],"sourcesContent":["import type { EffectCallback } from 'react';\n\nimport { useEffect, useRef } from 'react';\n\n/**\n * @name useEffectOnce\n * @description - Hook that runs an effect only once. Please do not use it in production code!\n * @category Humor\n *\n * @warning - This hook will run effect only once even in strict mode. Please do not use it in production code!\n *\n * @param {EffectCallback} effect The effect to run\n *\n * @example\n * useOnce(() => console.log('effect once'));\n */\nexport function useOnce(effect: EffectCallback) {\n const cleanupRef = useRef<ReturnType<EffectCallback>>(undefined);\n const hasRunRef = useRef(false);\n const hasRenderedAfterRun = useRef(false);\n\n if (hasRunRef.current) {\n hasRenderedAfterRun.current = true;\n }\n\n useEffect(() => {\n if (hasRunRef.current) return;\n\n hasRunRef.current = true;\n cleanupRef.current = effect();\n\n return () => {\n if (!hasRenderedAfterRun.current) return;\n\n if (typeof cleanupRef.current === 'function') {\n cleanupRef.current();\n }\n };\n }, []);\n}\n"],"names":["useOnce","effect","cleanupRef","useRef","hasRunRef","hasRenderedAfterRun","useEffect"],"mappings":"yGAgBO,SAASA,EAAQC,EAAwB,CACxC,MAAAC,EAAaC,SAAmC,MAAS,EACzDC,EAAYD,SAAO,EAAK,EACxBE,EAAsBF,SAAO,EAAK,EAEpCC,EAAU,UACZC,EAAoB,QAAU,IAGhCC,EAAAA,UAAU,IAAM,CACd,GAAI,CAAAF,EAAU,QAEd,OAAAA,EAAU,QAAU,GACpBF,EAAW,QAAUD,EAAO,EAErB,IAAM,CACNI,EAAoB,SAErB,OAAOH,EAAW,SAAY,YAChCA,EAAW,QAAQ,CAEvB,CACF,EAAG,EAAE,CACP"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),a=(u,o)=>{const r=typeof window<"u"&&typeof PerformanceObserver<"u",[v,b]=n.useState([]),s=n.useRef(null),t=n.useRef(o);t.current=o;const c=()=>{if(!r)return;const e=new PerformanceObserver((i,m)=>{var d;b(i.getEntries()),(d=t.current)==null||d.call(t,i,m)});e.observe(u),s.current=e},f=()=>{var e;r&&((e=s.current)==null||e.disconnect(),s.current=null)};return n.useEffect(()=>{if(r)return u.immediate&&c(),()=>{f()}},[]),{supported:r,entries:v,start:c,stop:f}};exports.usePerformanceObserver=a;
|
|
2
2
|
//# sourceMappingURL=usePerformanceObserver.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePerformanceObserver.cjs","sources":["../../../../src/hooks/usePerformanceObserver/usePerformanceObserver.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use performance observer options type */\nexport type UsePerformanceObserverOptions = PerformanceObserverInit & {\n /** Whether to start the observer immediately */\n immediate?: boolean;\n};\n\n/**\n * @name usePerformanceObserver\n * @description - Hook that allows you to observe performance entries\n * @category Sensors\n *\n * @browserapi PerformanceObserver https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver\n *\n * @param {UsePerformanceObserverOptions} options The options for the performance observer\n * @param {PerformanceObserverCallback} callback The function to handle performance entries\n * @returns {object} An object containing the observer's support status and methods to start and stop the observer\n *\n * @example\n * const { supported, entries, start, stop } = usePerformanceObserver();\n */\nexport const usePerformanceObserver = (\n options: UsePerformanceObserverOptions,\n callback?: PerformanceObserverCallback\n) => {\n const supported = typeof window !== 'undefined' && typeof PerformanceObserver !== 'undefined';\n const [entries, setEntries] = useState<PerformanceEntry[]>([]);\n\n const observerRef = useRef<PerformanceObserver | null>(null);\n const internalCallback = useRef<PerformanceObserverCallback | null>();\n internalCallback.current = callback;\n\n const start = () => {\n if (!supported) return;\n const observer = new PerformanceObserver((entryList, observer) => {\n setEntries(entryList.getEntries());\n internalCallback.current?.(entryList, observer);\n });\n observer.observe(options);\n observerRef.current = observer;\n };\n\n const stop = () => {\n if (!supported) return;\n observerRef.current?.disconnect();\n observerRef.current = null;\n };\n\n useEffect(() => {\n if (!supported) return;\n if (options.immediate) start();\n\n return () => {\n stop();\n };\n }, []);\n\n return { supported, entries, start, stop };\n};\n"],"names":["usePerformanceObserver","options","callback","supported","entries","setEntries","useState","observerRef","useRef","internalCallback","start","observer","entryList","_a","stop","useEffect"],"mappings":"yGAsBaA,EAAyB,CACpCC,EACAC,IACG,CACH,MAAMC,EAAY,OAAO,OAAW,KAAe,OAAO,oBAAwB,IAC5E,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAA6B,CAAA,CAAE,EAEvDC,EAAcC,SAAmC,IAAI,EACrDC,EAAmBD,
|
|
1
|
+
{"version":3,"file":"usePerformanceObserver.cjs","sources":["../../../../src/hooks/usePerformanceObserver/usePerformanceObserver.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use performance observer options type */\nexport type UsePerformanceObserverOptions = PerformanceObserverInit & {\n /** Whether to start the observer immediately */\n immediate?: boolean;\n};\n\n/**\n * @name usePerformanceObserver\n * @description - Hook that allows you to observe performance entries\n * @category Sensors\n *\n * @browserapi PerformanceObserver https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver\n *\n * @param {UsePerformanceObserverOptions} options The options for the performance observer\n * @param {PerformanceObserverCallback} callback The function to handle performance entries\n * @returns {object} An object containing the observer's support status and methods to start and stop the observer\n *\n * @example\n * const { supported, entries, start, stop } = usePerformanceObserver();\n */\nexport const usePerformanceObserver = (\n options: UsePerformanceObserverOptions,\n callback?: PerformanceObserverCallback\n) => {\n const supported = typeof window !== 'undefined' && typeof PerformanceObserver !== 'undefined';\n const [entries, setEntries] = useState<PerformanceEntry[]>([]);\n\n const observerRef = useRef<PerformanceObserver | null>(null);\n const internalCallback = useRef<PerformanceObserverCallback | null>(callback);\n internalCallback.current = callback;\n\n const start = () => {\n if (!supported) return;\n const observer = new PerformanceObserver((entryList, observer) => {\n setEntries(entryList.getEntries());\n internalCallback.current?.(entryList, observer);\n });\n observer.observe(options);\n observerRef.current = observer;\n };\n\n const stop = () => {\n if (!supported) return;\n observerRef.current?.disconnect();\n observerRef.current = null;\n };\n\n useEffect(() => {\n if (!supported) return;\n if (options.immediate) start();\n\n return () => {\n stop();\n };\n }, []);\n\n return { supported, entries, start, stop };\n};\n"],"names":["usePerformanceObserver","options","callback","supported","entries","setEntries","useState","observerRef","useRef","internalCallback","start","observer","entryList","_a","stop","useEffect"],"mappings":"yGAsBaA,EAAyB,CACpCC,EACAC,IACG,CACH,MAAMC,EAAY,OAAO,OAAW,KAAe,OAAO,oBAAwB,IAC5E,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAA6B,CAAA,CAAE,EAEvDC,EAAcC,SAAmC,IAAI,EACrDC,EAAmBD,SAA2CN,CAAQ,EAC5EO,EAAiB,QAAUP,EAE3B,MAAMQ,EAAQ,IAAM,CAClB,GAAI,CAACP,EAAW,OAChB,MAAMQ,EAAW,IAAI,oBAAoB,CAACC,EAAWD,IAAa,OACrDN,EAAAO,EAAU,YAAY,GAChBC,EAAAJ,EAAA,UAAA,MAAAI,EAAA,KAAAJ,EAAUG,EAAWD,EAAQ,CAC/C,EACDA,EAAS,QAAQV,CAAO,EACxBM,EAAY,QAAUI,CACxB,EAEMG,EAAO,IAAM,OACZX,KACLU,EAAAN,EAAY,UAAZ,MAAAM,EAAqB,aACrBN,EAAY,QAAU,KACxB,EAEAQ,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAKZ,EACD,OAAAF,EAAQ,WAAiBS,EAAA,EAEtB,IAAM,CACNI,EAAA,CACP,CACF,EAAG,EAAE,EAEE,CAAE,UAAAX,EAAW,QAAAC,EAAS,MAAAM,EAAO,KAAAI,CAAK,CAC3C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),s=(e,r)=>{const t=c.useRef(e),u=c.useRef();return((r==null?void 0:r.equality)??Object.is)(e,t.current)||(u.current=t.current,t.current=e),u.current};exports.usePrevious=s;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),s=(e,r)=>{const t=c.useRef(e),u=c.useRef(void 0);return((r==null?void 0:r.equality)??Object.is)(e,t.current)||(u.current=t.current,t.current=e),u.current};exports.usePrevious=s;
|
|
2
2
|
//# sourceMappingURL=usePrevious.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePrevious.cjs","sources":["../../../../src/hooks/usePrevious/usePrevious.ts"],"sourcesContent":["import { useRef } from 'react';\n\nexport interface UsePreviousOptions<Value> {\n equality: (a: Value, b: Value) => boolean;\n}\n\n/**\n * @name usePrevious\n * @description - Hook that returns the previous value\n * @category Utilities\n *\n * @template Value The type of the value\n * @param {Value} value The value to get the previous value\n * @param {(a: Value, b: Value) => boolean} [options.equality] The custom equality function to determine if the value has changed\n * @returns {Value} The previous value\n *\n * @example\n * const prevValue = usePrevious(value);\n */\nexport const usePrevious = <Value>(value: Value, options?: UsePreviousOptions<Value>) => {\n const currentRef = useRef<Value>(value);\n const previousRef = useRef<Value>();\n\n const equality = options?.equality ?? Object.is;\n\n if (!equality(value, currentRef.current)) {\n previousRef.current = currentRef.current;\n currentRef.current = value;\n }\n\n return previousRef.current;\n};\n"],"names":["usePrevious","value","options","currentRef","useRef","previousRef"],"mappings":"yGAmBaA,EAAc,CAAQC,EAAcC,IAAwC,CACjF,MAAAC,EAAaC,SAAcH,CAAK,EAChCI,EAAcD,
|
|
1
|
+
{"version":3,"file":"usePrevious.cjs","sources":["../../../../src/hooks/usePrevious/usePrevious.ts"],"sourcesContent":["import { useRef } from 'react';\n\nexport interface UsePreviousOptions<Value> {\n equality: (a: Value, b: Value) => boolean;\n}\n\n/**\n * @name usePrevious\n * @description - Hook that returns the previous value\n * @category Utilities\n *\n * @template Value The type of the value\n * @param {Value} value The value to get the previous value\n * @param {(a: Value, b: Value) => boolean} [options.equality] The custom equality function to determine if the value has changed\n * @returns {Value | undefined} The previous value\n *\n * @example\n * const prevValue = usePrevious(value);\n */\nexport const usePrevious = <Value>(value: Value, options?: UsePreviousOptions<Value>) => {\n const currentRef = useRef<Value>(value);\n const previousRef = useRef<Value>(undefined);\n\n const equality = options?.equality ?? Object.is;\n\n if (!equality(value, currentRef.current)) {\n previousRef.current = currentRef.current;\n currentRef.current = value;\n }\n\n return previousRef.current;\n};\n"],"names":["usePrevious","value","options","currentRef","useRef","previousRef"],"mappings":"yGAmBaA,EAAc,CAAQC,EAAcC,IAAwC,CACjF,MAAAC,EAAaC,SAAcH,CAAK,EAChCI,EAAcD,SAAc,MAAS,EAI3C,QAFiBF,GAAA,YAAAA,EAAS,WAAY,OAAO,IAE/BD,EAAOE,EAAW,OAAO,IACrCE,EAAY,QAAUF,EAAW,QACjCA,EAAW,QAAUF,GAGhBI,EAAY,OACrB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),O=require("../useDidUpdate/useDidUpdate.cjs"),P=require("../useMount/useMount.cjs"),M=require("../../utils/helpers/getRetry.cjs"),x=(k,e)=>{const t=(e==null?void 0:e.enabled)??!0,y=r.useRef(e!=null&&e.retry?M.getRetry(e.retry):0),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),O=require("../useDidUpdate/useDidUpdate.cjs"),P=require("../useMount/useMount.cjs"),M=require("../../utils/helpers/getRetry.cjs"),x=(k,e)=>{const t=(e==null?void 0:e.enabled)??!0,y=r.useRef(e!=null&&e.retry?M.getRetry(e.retry):0),R=r.useRef(!1),[m,d]=r.useState(!1),[w,h]=r.useState(!1),[A,I]=r.useState(!1),[F,g]=r.useState(!1),[L,S]=r.useState(!!(e!=null&&e.initialData)),[Q,b]=r.useState(void 0),[T,q]=r.useState(e==null?void 0:e.initialData),v=r.useRef(new AbortController),E=r.useRef(void 0),D=(e==null?void 0:e.keys)??[],C=()=>{v.current.abort(),v.current=new AbortController},u=c=>{C(),d(!0),c==="init"&&(R.current=!0,h(!0)),c==="refetch"&&g(!0),k({signal:v.current.signal,keys:D}).then(a=>{var f;const l=e!=null&&e.select?e==null?void 0:e.select(a):a;(f=e==null?void 0:e.onSuccess)==null||f.call(e,l),q(l),S(!0),b(void 0),I(!1),d(!1),c==="init"&&h(!1),c==="refetch"&&g(!1)}).catch(a=>{var l;if(y.current>0){y.current-=1;const f=typeof(e==null?void 0:e.retryDelay)=="function"?e==null?void 0:e.retryDelay(y.current,a):e==null?void 0:e.retryDelay;if(f){setTimeout(()=>u(c),f);return}return u(c)}(l=e==null?void 0:e.onError)==null||l.call(e,a),q(void 0),S(!1),b(a),I(!0),d(!1),c==="init"&&h(!1),c==="refetch"&&g(!1),y.current=e!=null&&e.retry?M.getRetry(e.retry):0}).finally(()=>{if(e!=null&&e.refetchInterval){const a=setInterval(()=>{clearInterval(a),u("refetch")},e==null?void 0:e.refetchInterval);E.current=a}})};P.useMount(()=>{t&&u("init")}),O.useDidUpdate(()=>{t&&u(R.current?"refetch":"init")},[t,...D]),r.useEffect(()=>()=>{clearInterval(E.current)},[t,e==null?void 0:e.refetchInterval,e==null?void 0:e.retry,...D]);const U=()=>u("refetch"),j=typeof(e==null?void 0:e.placeholderData)=="function"?(e==null?void 0:e.placeholderData).call(e):e==null?void 0:e.placeholderData;return{abort:C,data:T??j,error:Q,refetch:U,isFetching:m,isLoading:w,isError:A,isSuccess:L,isRefetching:F}};exports.useQuery=x;
|
|
2
2
|
//# sourceMappingURL=useQuery.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useQuery.cjs","sources":["../../../../src/hooks/useQuery/useQuery.ts"],"sourcesContent":["import type { DependencyList } from 'react';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { getRetry } from '@/utils/helpers';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\nimport { useMount } from '../useMount/useMount';\n\n/* The use query return type */\nexport interface UseQueryOptions<QueryData, Data> {\n /* The enabled state of the query */\n enabled?: boolean;\n /* The initial data for the hook */\n initialData?: (() => Data) | Data;\n /* The depends for the hook */\n keys?: DependencyList;\n /* The placeholder data for the hook */\n placeholderData?: (() => Data) | Data;\n /* The refetch interval */\n refetchInterval?: number;\n /* The retry count of requests */\n retry?: boolean | number;\n /* The retry delay of requests */\n retryDelay?: ((retry: number, error: Error) => number) | number;\n /* The callback function to be invoked on error */\n onError?: (error: Error) => void;\n /* The callback function to be invoked on success */\n onSuccess?: (data: Data) => void;\n /* The select function to be invoked */\n select?: (data: QueryData) => Data;\n}\n\ninterface UseQueryCallbackParams {\n /* The depends for the hook */\n keys: DependencyList;\n /* The abort signal */\n signal: AbortSignal;\n}\n\n/* The use query return type */\nexport interface UseQueryReturn<Data> {\n /* The abort function */\n abort: AbortController['abort'];\n /* The state of the query */\n data?: Data;\n /* The success state of the query */\n error?: Error;\n /* The error state of the query */\n isError: boolean;\n /* The fetching state of the query */\n isFetching: boolean;\n /* The loading state of the query */\n isLoading: boolean;\n /* The refetching state of the query */\n isRefetching: boolean;\n /* The success state of the query */\n isSuccess: boolean;\n /* The refetch function */\n refetch: () => void;\n}\n\n/**\n * @name useQuery\n * @description - Hook that defines the logic when query data\n * @category Utilities\n *\n * @template Data The type of the data\n * @param {() => Promise<Data>} callback The callback function to be invoked\n * @param {DependencyList} [options.keys] The dependencies for the hook\n * @param {(data: Data) => void} [options.onSuccess] The callback function to be invoked on success\n * @param {(error: Error) => void} [options.onError] The callback function to be invoked on error\n * @param {UseQueryOptionsSelect<Data>} [options.select] The select function to be invoked\n * @param {Data | (() => Data)} [options.initialData] The initial data for the hook\n * @param {Data | (() => Data)} [options.placeholderData] The placeholder data for the hook\n * @param {number} [options.refetchInterval] The refetch interval\n * @param {boolean | number} [options.retry] The retry count of requests\n * @returns {UseQueryReturn<Data>} An object with the state of the query\n *\n * @example\n * const { data, isFetching, isLoading, isError, isSuccess, error, refetch, isRefetching, abort, aborted } = useQuery(() => fetch('url'));\n */\nexport const useQuery = <QueryData, Data = QueryData>(\n callback: (params: UseQueryCallbackParams) => Promise<QueryData>,\n options?: UseQueryOptions<QueryData, Data>\n): UseQueryReturn<Data> => {\n const enabled = options?.enabled ?? true;\n const retryCountRef = useRef(options?.retry ? getRetry(options.retry) : 0);\n const alreadyRequested = useRef(false);\n\n const [isFetching, setIsFetching] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isError, setIsError] = useState(false);\n const [isRefetching, setIsRefetching] = useState(false);\n const [isSuccess, setIsSuccess] = useState(!!options?.initialData);\n\n const [error, setError] = useState<Error | undefined>(undefined);\n const [data, setData] = useState<Data | undefined>(options?.initialData);\n\n const abortControllerRef = useRef<AbortController>(new AbortController());\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>();\n\n const keys = options?.keys ?? [];\n\n const abort = () => {\n abortControllerRef.current.abort();\n abortControllerRef.current = new AbortController();\n };\n\n const request = (action: 'init' | 'refetch') => {\n abort();\n\n setIsFetching(true);\n if (action === 'init') {\n alreadyRequested.current = true;\n setIsLoading(true);\n }\n if (action === 'refetch') setIsRefetching(true);\n callback({ signal: abortControllerRef.current.signal, keys })\n .then((response) => {\n const data = options?.select ? options?.select(response) : response;\n options?.onSuccess?.(data as Data);\n setData(data as Data);\n setIsSuccess(true);\n setError(undefined);\n setIsError(false);\n setIsFetching(false);\n if (action === 'init') setIsLoading(false);\n if (action === 'refetch') setIsRefetching(false);\n })\n .catch((error: Error) => {\n if (retryCountRef.current > 0) {\n retryCountRef.current -= 1;\n const retryDelay =\n typeof options?.retryDelay === 'function'\n ? options?.retryDelay(retryCountRef.current, error)\n : options?.retryDelay;\n\n if (retryDelay) {\n setTimeout(() => request(action), retryDelay);\n return;\n }\n\n return request(action);\n }\n options?.onError?.(error);\n setData(undefined);\n setIsSuccess(false);\n setError(error);\n setIsError(true);\n setIsFetching(false);\n if (action === 'init') setIsLoading(false);\n if (action === 'refetch') setIsRefetching(false);\n retryCountRef.current = options?.retry ? getRetry(options.retry) : 0;\n })\n .finally(() => {\n if (options?.refetchInterval) {\n const interval = setInterval(() => {\n clearInterval(interval);\n request('refetch');\n }, options?.refetchInterval);\n intervalIdRef.current = interval;\n }\n });\n };\n\n useMount(() => {\n if (!enabled) return;\n request('init');\n });\n\n useDidUpdate(() => {\n if (!enabled) return;\n request(alreadyRequested.current ? 'refetch' : 'init');\n }, [enabled, ...keys]);\n\n useEffect(() => {\n return () => {\n clearInterval(intervalIdRef.current);\n };\n }, [enabled, options?.refetchInterval, options?.retry, ...keys]);\n\n const refetch = () => request('refetch');\n\n const placeholderData =\n typeof options?.placeholderData === 'function'\n ? (options?.placeholderData as () => Data)()\n : options?.placeholderData;\n\n return {\n abort,\n data: data ?? placeholderData,\n error,\n refetch,\n isFetching,\n isLoading,\n isError,\n isSuccess,\n isRefetching\n };\n};\n"],"names":["useQuery","callback","options","enabled","retryCountRef","useRef","getRetry","alreadyRequested","isFetching","setIsFetching","useState","isLoading","setIsLoading","isError","setIsError","isRefetching","setIsRefetching","isSuccess","setIsSuccess","error","setError","data","setData","abortControllerRef","intervalIdRef","keys","abort","request","action","response","_a","retryDelay","interval","useMount","useDidUpdate","useEffect","refetch","placeholderData"],"mappings":"2OAkFaA,EAAW,CACtBC,EACAC,IACyB,CACnB,MAAAC,GAAUD,GAAA,YAAAA,EAAS,UAAW,GAC9BE,EAAgBC,SAAOH,GAAA,MAAAA,EAAS,MAAQI,EAAAA,SAASJ,EAAQ,KAAK,EAAI,CAAC,EACnEK,EAAmBF,SAAO,EAAK,EAE/B,CAACG,EAAYC,CAAa,EAAIC,EAAAA,SAAS,EAAK,EAC5C,CAACC,EAAWC,CAAY,EAAIF,EAAAA,SAAS,EAAK,EAC1C,CAACG,EAASC,CAAU,EAAIJ,EAAAA,SAAS,EAAK,EACtC,CAACK,EAAcC,CAAe,EAAIN,EAAAA,SAAS,EAAK,EAChD,CAACO,EAAWC,CAAY,EAAIR,WAAS,CAAC,EAACR,GAAA,MAAAA,EAAS,YAAW,EAE3D,CAACiB,EAAOC,CAAQ,EAAIV,EAAAA,SAA4B,MAAS,EACzD,CAACW,EAAMC,CAAO,EAAIZ,EAAAA,SAA2BR,GAAA,YAAAA,EAAS,WAAW,EAEjEqB,EAAqBlB,EAAAA,OAAwB,IAAI,eAAiB,EAClEmB,EAAgBnB,
|
|
1
|
+
{"version":3,"file":"useQuery.cjs","sources":["../../../../src/hooks/useQuery/useQuery.ts"],"sourcesContent":["import type { DependencyList } from 'react';\n\nimport { useEffect, useRef, useState } from 'react';\n\nimport { getRetry } from '@/utils/helpers';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\nimport { useMount } from '../useMount/useMount';\n\n/* The use query return type */\nexport interface UseQueryOptions<QueryData, Data> {\n /* The enabled state of the query */\n enabled?: boolean;\n /* The initial data for the hook */\n initialData?: (() => Data) | Data;\n /* The depends for the hook */\n keys?: DependencyList;\n /* The placeholder data for the hook */\n placeholderData?: (() => Data) | Data;\n /* The refetch interval */\n refetchInterval?: number;\n /* The retry count of requests */\n retry?: boolean | number;\n /* The retry delay of requests */\n retryDelay?: ((retry: number, error: Error) => number) | number;\n /* The callback function to be invoked on error */\n onError?: (error: Error) => void;\n /* The callback function to be invoked on success */\n onSuccess?: (data: Data) => void;\n /* The select function to be invoked */\n select?: (data: QueryData) => Data;\n}\n\ninterface UseQueryCallbackParams {\n /* The depends for the hook */\n keys: DependencyList;\n /* The abort signal */\n signal: AbortSignal;\n}\n\n/* The use query return type */\nexport interface UseQueryReturn<Data> {\n /* The abort function */\n abort: AbortController['abort'];\n /* The state of the query */\n data?: Data;\n /* The success state of the query */\n error?: Error;\n /* The error state of the query */\n isError: boolean;\n /* The fetching state of the query */\n isFetching: boolean;\n /* The loading state of the query */\n isLoading: boolean;\n /* The refetching state of the query */\n isRefetching: boolean;\n /* The success state of the query */\n isSuccess: boolean;\n /* The refetch function */\n refetch: () => void;\n}\n\n/**\n * @name useQuery\n * @description - Hook that defines the logic when query data\n * @category Utilities\n *\n * @template Data The type of the data\n * @param {() => Promise<Data>} callback The callback function to be invoked\n * @param {DependencyList} [options.keys] The dependencies for the hook\n * @param {(data: Data) => void} [options.onSuccess] The callback function to be invoked on success\n * @param {(error: Error) => void} [options.onError] The callback function to be invoked on error\n * @param {UseQueryOptionsSelect<Data>} [options.select] The select function to be invoked\n * @param {Data | (() => Data)} [options.initialData] The initial data for the hook\n * @param {Data | (() => Data)} [options.placeholderData] The placeholder data for the hook\n * @param {number} [options.refetchInterval] The refetch interval\n * @param {boolean | number} [options.retry] The retry count of requests\n * @returns {UseQueryReturn<Data>} An object with the state of the query\n *\n * @example\n * const { data, isFetching, isLoading, isError, isSuccess, error, refetch, isRefetching, abort, aborted } = useQuery(() => fetch('url'));\n */\nexport const useQuery = <QueryData, Data = QueryData>(\n callback: (params: UseQueryCallbackParams) => Promise<QueryData>,\n options?: UseQueryOptions<QueryData, Data>\n): UseQueryReturn<Data> => {\n const enabled = options?.enabled ?? true;\n const retryCountRef = useRef(options?.retry ? getRetry(options.retry) : 0);\n const alreadyRequested = useRef(false);\n\n const [isFetching, setIsFetching] = useState(false);\n const [isLoading, setIsLoading] = useState(false);\n const [isError, setIsError] = useState(false);\n const [isRefetching, setIsRefetching] = useState(false);\n const [isSuccess, setIsSuccess] = useState(!!options?.initialData);\n\n const [error, setError] = useState<Error | undefined>(undefined);\n const [data, setData] = useState<Data | undefined>(options?.initialData);\n\n const abortControllerRef = useRef<AbortController>(new AbortController());\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>(undefined);\n\n const keys = options?.keys ?? [];\n\n const abort = () => {\n abortControllerRef.current.abort();\n abortControllerRef.current = new AbortController();\n };\n\n const request = (action: 'init' | 'refetch') => {\n abort();\n\n setIsFetching(true);\n if (action === 'init') {\n alreadyRequested.current = true;\n setIsLoading(true);\n }\n if (action === 'refetch') setIsRefetching(true);\n callback({ signal: abortControllerRef.current.signal, keys })\n .then((response) => {\n const data = options?.select ? options?.select(response) : response;\n options?.onSuccess?.(data as Data);\n setData(data as Data);\n setIsSuccess(true);\n setError(undefined);\n setIsError(false);\n setIsFetching(false);\n if (action === 'init') setIsLoading(false);\n if (action === 'refetch') setIsRefetching(false);\n })\n .catch((error: Error) => {\n if (retryCountRef.current > 0) {\n retryCountRef.current -= 1;\n const retryDelay =\n typeof options?.retryDelay === 'function'\n ? options?.retryDelay(retryCountRef.current, error)\n : options?.retryDelay;\n\n if (retryDelay) {\n setTimeout(() => request(action), retryDelay);\n return;\n }\n\n return request(action);\n }\n options?.onError?.(error);\n setData(undefined);\n setIsSuccess(false);\n setError(error);\n setIsError(true);\n setIsFetching(false);\n if (action === 'init') setIsLoading(false);\n if (action === 'refetch') setIsRefetching(false);\n retryCountRef.current = options?.retry ? getRetry(options.retry) : 0;\n })\n .finally(() => {\n if (options?.refetchInterval) {\n const interval = setInterval(() => {\n clearInterval(interval);\n request('refetch');\n }, options?.refetchInterval);\n intervalIdRef.current = interval;\n }\n });\n };\n\n useMount(() => {\n if (!enabled) return;\n request('init');\n });\n\n useDidUpdate(() => {\n if (!enabled) return;\n request(alreadyRequested.current ? 'refetch' : 'init');\n }, [enabled, ...keys]);\n\n useEffect(() => {\n return () => {\n clearInterval(intervalIdRef.current);\n };\n }, [enabled, options?.refetchInterval, options?.retry, ...keys]);\n\n const refetch = () => request('refetch');\n\n const placeholderData =\n typeof options?.placeholderData === 'function'\n ? (options?.placeholderData as () => Data)()\n : options?.placeholderData;\n\n return {\n abort,\n data: data ?? placeholderData,\n error,\n refetch,\n isFetching,\n isLoading,\n isError,\n isSuccess,\n isRefetching\n };\n};\n"],"names":["useQuery","callback","options","enabled","retryCountRef","useRef","getRetry","alreadyRequested","isFetching","setIsFetching","useState","isLoading","setIsLoading","isError","setIsError","isRefetching","setIsRefetching","isSuccess","setIsSuccess","error","setError","data","setData","abortControllerRef","intervalIdRef","keys","abort","request","action","response","_a","retryDelay","interval","useMount","useDidUpdate","useEffect","refetch","placeholderData"],"mappings":"2OAkFaA,EAAW,CACtBC,EACAC,IACyB,CACnB,MAAAC,GAAUD,GAAA,YAAAA,EAAS,UAAW,GAC9BE,EAAgBC,SAAOH,GAAA,MAAAA,EAAS,MAAQI,EAAAA,SAASJ,EAAQ,KAAK,EAAI,CAAC,EACnEK,EAAmBF,SAAO,EAAK,EAE/B,CAACG,EAAYC,CAAa,EAAIC,EAAAA,SAAS,EAAK,EAC5C,CAACC,EAAWC,CAAY,EAAIF,EAAAA,SAAS,EAAK,EAC1C,CAACG,EAASC,CAAU,EAAIJ,EAAAA,SAAS,EAAK,EACtC,CAACK,EAAcC,CAAe,EAAIN,EAAAA,SAAS,EAAK,EAChD,CAACO,EAAWC,CAAY,EAAIR,WAAS,CAAC,EAACR,GAAA,MAAAA,EAAS,YAAW,EAE3D,CAACiB,EAAOC,CAAQ,EAAIV,EAAAA,SAA4B,MAAS,EACzD,CAACW,EAAMC,CAAO,EAAIZ,EAAAA,SAA2BR,GAAA,YAAAA,EAAS,WAAW,EAEjEqB,EAAqBlB,EAAAA,OAAwB,IAAI,eAAiB,EAClEmB,EAAgBnB,SAAuC,MAAS,EAEhEoB,GAAOvB,GAAA,YAAAA,EAAS,OAAQ,CAAC,EAEzBwB,EAAQ,IAAM,CAClBH,EAAmB,QAAQ,MAAM,EACdA,EAAA,QAAU,IAAI,eACnC,EAEMI,EAAWC,GAA+B,CACxCF,EAAA,EAENjB,EAAc,EAAI,EACdmB,IAAW,SACbrB,EAAiB,QAAU,GAC3BK,EAAa,EAAI,GAEfgB,IAAW,WAAWZ,EAAgB,EAAI,EACrCf,EAAA,CAAE,OAAQsB,EAAmB,QAAQ,OAAQ,KAAAE,EAAM,EACzD,KAAMI,GAAa,OAClB,MAAMR,EAAOnB,GAAA,MAAAA,EAAS,OAASA,GAAA,YAAAA,EAAS,OAAO2B,GAAYA,GAC3DC,EAAA5B,GAAA,YAAAA,EAAS,YAAT,MAAA4B,EAAA,KAAA5B,EAAqBmB,GACrBC,EAAQD,CAAY,EACpBH,EAAa,EAAI,EACjBE,EAAS,MAAS,EAClBN,EAAW,EAAK,EAChBL,EAAc,EAAK,EACfmB,IAAW,QAAQhB,EAAa,EAAK,EACrCgB,IAAW,WAAWZ,EAAgB,EAAK,CAAA,CAChD,EACA,MAAOG,GAAiB,OACnB,GAAAf,EAAc,QAAU,EAAG,CAC7BA,EAAc,SAAW,EACnB,MAAA2B,EACJ,OAAO7B,GAAA,YAAAA,EAAS,aAAe,WAC3BA,GAAA,YAAAA,EAAS,WAAWE,EAAc,QAASe,GAC3CjB,GAAA,YAAAA,EAAS,WAEf,GAAI6B,EAAY,CACd,WAAW,IAAMJ,EAAQC,CAAM,EAAGG,CAAU,EAC5C,MAAA,CAGF,OAAOJ,EAAQC,CAAM,CAAA,EAEvBE,EAAA5B,GAAA,YAAAA,EAAS,UAAT,MAAA4B,EAAA,KAAA5B,EAAmBiB,GACnBG,EAAQ,MAAS,EACjBJ,EAAa,EAAK,EAClBE,EAASD,CAAK,EACdL,EAAW,EAAI,EACfL,EAAc,EAAK,EACfmB,IAAW,QAAQhB,EAAa,EAAK,EACrCgB,IAAW,WAAWZ,EAAgB,EAAK,EAC/CZ,EAAc,QAAUF,GAAA,MAAAA,EAAS,MAAQI,EAAAA,SAASJ,EAAQ,KAAK,EAAI,CAAA,CACpE,EACA,QAAQ,IAAM,CACb,GAAIA,GAAA,MAAAA,EAAS,gBAAiB,CACtB,MAAA8B,EAAW,YAAY,IAAM,CACjC,cAAcA,CAAQ,EACtBL,EAAQ,SAAS,CAAA,EAChBzB,GAAA,YAAAA,EAAS,eAAe,EAC3BsB,EAAc,QAAUQ,CAAA,CAC1B,CACD,CACL,EAEAC,EAAAA,SAAS,IAAM,CACR9B,GACLwB,EAAQ,MAAM,CAAA,CACf,EAEDO,EAAAA,aAAa,IAAM,CACZ/B,GACGwB,EAAApB,EAAiB,QAAU,UAAY,MAAM,CAAA,EACpD,CAACJ,EAAS,GAAGsB,CAAI,CAAC,EAErBU,EAAAA,UAAU,IACD,IAAM,CACX,cAAcX,EAAc,OAAO,CACrC,EACC,CAACrB,EAASD,GAAA,YAAAA,EAAS,gBAAiBA,GAAA,YAAAA,EAAS,MAAO,GAAGuB,CAAI,CAAC,EAEzD,MAAAW,EAAU,IAAMT,EAAQ,SAAS,EAEjCU,EACJ,OAAOnC,GAAA,YAAAA,EAAS,kBAAoB,YAC/BA,GAAA,YAAAA,EAAS,iBAAT,KAAAA,GACDA,GAAA,YAAAA,EAAS,gBAER,MAAA,CACL,MAAAwB,EACA,KAAML,GAAQgB,EACd,MAAAlB,EACA,QAAAiB,EACA,WAAA5B,EACA,UAAAG,EACA,QAAAE,EACA,UAAAI,EACA,aAAAF,CACF,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),l=require("../useRefState/useRefState.cjs"),v=require("../../utils/helpers/isTarget.cjs"),d=require("../../utils/helpers/getElement.cjs"),R=(...r)=>{const t=v.isTarget(r[0])?r[0]:void 0,e=t?r[1]:r[0],i=(e==null?void 0:e.enabled)??!0,[b,g]=c.useState([]),n=l.useRefState(),s=c.useRef(e==null?void 0:e.onChange);return s.current=e==null?void 0:e.onChange,c.useEffect(()=>{if(!i&&!t&&!n.state)return;const f=t?d.getElement(t):n.current;if(!f)return;const u=new ResizeObserver(o=>{var a;g(o),(a=s.current)==null||a.call(s,o,u)});return u.observe(f,e),()=>{u.disconnect()}},[t,n.state,e==null?void 0:e.box,i]),t?{entries:b}:{ref:n,entries:b}};exports.useResizeObserver=R;
|
|
2
2
|
//# sourceMappingURL=useResizeObserver.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useResizeObserver.cjs","sources":["../../../../src/hooks/useResizeObserver/useResizeObserver.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The resize observer options type */\nexport interface UseResizeObserverOptions extends ResizeObserverOptions {\n /** The enabled state */\n enabled?: boolean;\n /** The resize observer callback */\n onChange?: (entries: ResizeObserverEntry[], observer: ResizeObserver) => void;\n}\n\n/** The resize observer return type */\nexport interface UseResizeObserverReturn {\n /** The resize observer entries */\n entries: ResizeObserverEntry[];\n}\n\nexport interface UseResizeObserver {\n (target: HookTarget, options?: UseResizeObserverOptions): UseResizeObserverReturn;\n\n <Target extends Element>(\n options?: UseResizeObserverOptions,\n target?: never\n ): UseResizeObserverReturn & { ref: StateRef<Target> };\n}\n\n/**\n * @name useResizeObserver\n * @description - Hook that gives you resize observer state\n * @category Browser\n *\n * @browserapi ResizeObserver https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {boolean} [options.box] The IntersectionObserver options\n * @param {(entries: ResizeObserverEntry[], observer: ResizeObserver) => void} [options.onChange] The callback to execute when resize is detected\n * @returns {UseResizeObserverReturn & { ref: StateRef<Target> }} An object containing the resize observer state\n *\n * @example\n * const { ref, entries } = useResizeObserver();\n *\n * @overload\n * @template Target The target element\n * @param {HookTarget} target The target element to observe\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {boolean} [options.box] The IntersectionObserver options\n * @param {(entries: ResizeObserverEntry[], observer: ResizeObserver) => void} [options.onChange] The callback to execute when resize is detected\n * @returns {UseResizeObserverReturn} An object containing the resize observer state\n *\n * @example\n * const { entries } = useResizeObserver(ref);\n */\nexport const useResizeObserver = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseResizeObserverOptions | undefined;\n const enabled = options?.enabled ?? true;\n\n const [entries, setEntries] = useState<ResizeObserverEntry[]>([]);\n\n const internalRef = useRefState<Element>();\n const internalOnChangeRef = useRef<UseResizeObserverOptions['onChange']>();\n internalOnChangeRef.current = options?.onChange;\n\n useEffect(() => {\n if (!enabled && !target && !internalRef.state) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const observer = new ResizeObserver((entries) => {\n setEntries(entries);\n internalOnChangeRef.current?.(entries, observer);\n });\n observer.observe(element as Element, options);\n\n return () => {\n observer.disconnect();\n };\n }, [target, internalRef.state, options?.box, enabled]);\n\n if (target) return { entries };\n return {\n ref: internalRef,\n entries\n };\n}) as UseResizeObserver;\n"],"names":["useResizeObserver","params","target","isTarget","options","enabled","entries","setEntries","useState","internalRef","useRefState","internalOnChangeRef","useRef","useEffect","element","getElement","observer","_a"],"mappings":"mPA6DaA,EAAqB,IAAIC,IAAkB,CAChD,MAAAC,EAAUC,WAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACxCI,GAAUD,GAAA,YAAAA,EAAS,UAAW,GAE9B,CAACE,EAASC,CAAU,EAAIC,EAAAA,SAAgC,CAAA,CAAE,EAE1DC,EAAcC,EAAAA,YAAqB,EACnCC,EAAsBC,EAAAA,
|
|
1
|
+
{"version":3,"file":"useResizeObserver.cjs","sources":["../../../../src/hooks/useResizeObserver/useResizeObserver.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The resize observer options type */\nexport interface UseResizeObserverOptions extends ResizeObserverOptions {\n /** The enabled state */\n enabled?: boolean;\n /** The resize observer callback */\n onChange?: (entries: ResizeObserverEntry[], observer: ResizeObserver) => void;\n}\n\n/** The resize observer return type */\nexport interface UseResizeObserverReturn {\n /** The resize observer entries */\n entries: ResizeObserverEntry[];\n}\n\nexport interface UseResizeObserver {\n (target: HookTarget, options?: UseResizeObserverOptions): UseResizeObserverReturn;\n\n <Target extends Element>(\n options?: UseResizeObserverOptions,\n target?: never\n ): UseResizeObserverReturn & { ref: StateRef<Target> };\n}\n\n/**\n * @name useResizeObserver\n * @description - Hook that gives you resize observer state\n * @category Browser\n *\n * @browserapi ResizeObserver https://developer.mozilla.org/en-US/docs/Web/API/ResizeObserver\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {boolean} [options.box] The IntersectionObserver options\n * @param {(entries: ResizeObserverEntry[], observer: ResizeObserver) => void} [options.onChange] The callback to execute when resize is detected\n * @returns {UseResizeObserverReturn & { ref: StateRef<Target> }} An object containing the resize observer state\n *\n * @example\n * const { ref, entries } = useResizeObserver();\n *\n * @overload\n * @template Target The target element\n * @param {HookTarget} target The target element to observe\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {boolean} [options.box] The IntersectionObserver options\n * @param {(entries: ResizeObserverEntry[], observer: ResizeObserver) => void} [options.onChange] The callback to execute when resize is detected\n * @returns {UseResizeObserverReturn} An object containing the resize observer state\n *\n * @example\n * const { entries } = useResizeObserver(ref);\n */\nexport const useResizeObserver = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseResizeObserverOptions | undefined;\n const enabled = options?.enabled ?? true;\n\n const [entries, setEntries] = useState<ResizeObserverEntry[]>([]);\n\n const internalRef = useRefState<Element>();\n const internalOnChangeRef = useRef<UseResizeObserverOptions['onChange']>(options?.onChange);\n internalOnChangeRef.current = options?.onChange;\n\n useEffect(() => {\n if (!enabled && !target && !internalRef.state) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const observer = new ResizeObserver((entries) => {\n setEntries(entries);\n internalOnChangeRef.current?.(entries, observer);\n });\n observer.observe(element as Element, options);\n\n return () => {\n observer.disconnect();\n };\n }, [target, internalRef.state, options?.box, enabled]);\n\n if (target) return { entries };\n return {\n ref: internalRef,\n entries\n };\n}) as UseResizeObserver;\n"],"names":["useResizeObserver","params","target","isTarget","options","enabled","entries","setEntries","useState","internalRef","useRefState","internalOnChangeRef","useRef","useEffect","element","getElement","observer","_a"],"mappings":"mPA6DaA,EAAqB,IAAIC,IAAkB,CAChD,MAAAC,EAAUC,WAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACxCI,GAAUD,GAAA,YAAAA,EAAS,UAAW,GAE9B,CAACE,EAASC,CAAU,EAAIC,EAAAA,SAAgC,CAAA,CAAE,EAE1DC,EAAcC,EAAAA,YAAqB,EACnCC,EAAsBC,EAAAA,OAA6CR,GAAA,YAAAA,EAAS,QAAQ,EAoBtF,OAnBJO,EAAoB,QAAUP,GAAA,YAAAA,EAAS,SAEvCS,EAAAA,UAAU,IAAM,CACd,GAAI,CAACR,GAAW,CAACH,GAAU,CAACO,EAAY,MAAO,OAE/C,MAAMK,EAAUZ,EAASa,EAAAA,WAAWb,CAAM,EAAIO,EAAY,QAC1D,GAAI,CAACK,EAAS,OAEd,MAAME,EAAW,IAAI,eAAgBV,GAAY,OAC/CC,EAAWD,CAAO,GACEW,EAAAN,EAAA,UAAA,MAAAM,EAAA,KAAAN,EAAUL,EAASU,EAAQ,CAChD,EACQ,OAAAA,EAAA,QAAQF,EAAoBV,CAAO,EAErC,IAAM,CACXY,EAAS,WAAW,CACtB,CAAA,EACC,CAACd,EAAQO,EAAY,MAAOL,GAAA,YAAAA,EAAS,IAAKC,CAAO,CAAC,EAEjDH,EAAe,CAAE,QAAAI,CAAQ,EACtB,CACL,IAAKG,EACL,QAAAH,CACF,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),s=require("../useEvent/useEvent.cjs");function i(c,r){const[n,u]=t.useState(!1),e=t.useRef(void 0),o=s.useEvent(c);return t.useEffect(()=>(e.current=setTimeout(()=>{o(),u(!0)},r),()=>{clearTimeout(e.current)}),[r]),{ready:n,clear:()=>{clearTimeout(e.current),u(!0)}}}exports.useTimeout=i;
|
|
2
2
|
//# sourceMappingURL=useTimeout.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTimeout.cjs","sources":["../../../../src/hooks/useTimeout/useTimeout.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { useEvent } from '../useEvent/useEvent';\n\n/** The use timeout return type */\ninterface UseTimeoutReturn {\n /** Timeout is ready state value */\n ready: boolean;\n /** Function to clear timeout */\n clear: () => void;\n}\n\n/**\n * @name useTimeout\n * @description - Hook that executes a callback function after a specified delay\n * @category Time\n *\n * @param {() => void} callback The function to be executed after the timeout\n * @param {number} delay The delay in milliseconds before the timeout executes the callback function\n * @returns {UseTimeoutReturn} An object with a `ready` boolean state value and a `clear` function to clear timeout\n *\n * @example\n * const { clear, ready } = useTimeout(() => {}, 5000);\n */\nexport function useTimeout(callback: () => void, delay: number): UseTimeoutReturn {\n const [ready, setReady] = useState(false);\n\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>();\n const internalCallback = useEvent(callback);\n\n useEffect(() => {\n timeoutIdRef.current = setTimeout(() => {\n internalCallback();\n setReady(true);\n }, delay);\n\n return () => {\n clearTimeout(timeoutIdRef.current);\n };\n }, [delay]);\n\n const clear = () => {\n clearTimeout(timeoutIdRef.current);\n setReady(true);\n };\n\n return { ready, clear };\n}\n"],"names":["useTimeout","callback","delay","ready","setReady","useState","timeoutIdRef","useRef","internalCallback","useEvent","useEffect"],"mappings":"+IAwBgB,SAAAA,EAAWC,EAAsBC,EAAiC,CAChF,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAS,EAAK,EAElCC,EAAeC,
|
|
1
|
+
{"version":3,"file":"useTimeout.cjs","sources":["../../../../src/hooks/useTimeout/useTimeout.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { useEvent } from '../useEvent/useEvent';\n\n/** The use timeout return type */\ninterface UseTimeoutReturn {\n /** Timeout is ready state value */\n ready: boolean;\n /** Function to clear timeout */\n clear: () => void;\n}\n\n/**\n * @name useTimeout\n * @description - Hook that executes a callback function after a specified delay\n * @category Time\n *\n * @param {() => void} callback The function to be executed after the timeout\n * @param {number} delay The delay in milliseconds before the timeout executes the callback function\n * @returns {UseTimeoutReturn} An object with a `ready` boolean state value and a `clear` function to clear timeout\n *\n * @example\n * const { clear, ready } = useTimeout(() => {}, 5000);\n */\nexport function useTimeout(callback: () => void, delay: number): UseTimeoutReturn {\n const [ready, setReady] = useState(false);\n\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const internalCallback = useEvent(callback);\n\n useEffect(() => {\n timeoutIdRef.current = setTimeout(() => {\n internalCallback();\n setReady(true);\n }, delay);\n\n return () => {\n clearTimeout(timeoutIdRef.current);\n };\n }, [delay]);\n\n const clear = () => {\n clearTimeout(timeoutIdRef.current);\n setReady(true);\n };\n\n return { ready, clear };\n}\n"],"names":["useTimeout","callback","delay","ready","setReady","useState","timeoutIdRef","useRef","internalCallback","useEvent","useEffect"],"mappings":"+IAwBgB,SAAAA,EAAWC,EAAsBC,EAAiC,CAChF,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAS,EAAK,EAElCC,EAAeC,SAAsC,MAAS,EAC9DC,EAAmBC,WAASR,CAAQ,EAE1CS,OAAAA,EAAAA,UAAU,KACKJ,EAAA,QAAU,WAAW,IAAM,CACrBE,EAAA,EACjBJ,EAAS,EAAI,GACZF,CAAK,EAED,IAAM,CACX,aAAaI,EAAa,OAAO,CACnC,GACC,CAACJ,CAAK,CAAC,EAOH,CAAE,MAAAC,EAAO,MALF,IAAM,CAClB,aAAaG,EAAa,OAAO,EACjCF,EAAS,EAAI,CACf,CAEsB,CACxB"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),q=require("../useDidUpdate/useDidUpdate.cjs"),M=
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const d=require("react"),q=require("../useDidUpdate/useDidUpdate.cjs"),M=c=>{const e=Math.ceil(c),s=Math.floor(e/(60*60*24)),u=Math.floor(e%(60*60*24)/(60*60)),t=Math.floor(e%(60*60)/60);return{seconds:Math.floor(e%60),minutes:t,hours:u,days:s}},D=(...c)=>{const e=Math.max(c[0]??0,0),s=typeof c[1]=="object"?c[1]:{onExpire:c[1]},[u,t]=d.useState(e>0&&((s==null?void 0:s.immediately)??!0)),[i,n]=d.useState(e),S=d.useRef(void 0),f=d.useRef(s);f.current=s??{},q.useDidUpdate(()=>{if(e<=0){t(!1),n(0);return}t(!0),n(e)},[e]),d.useEffect(()=>{var r,a;if(!u)return;(a=(r=f.current)==null?void 0:r.onStart)==null||a.call(r);const o=()=>{var l,v;(v=(l=f.current)==null?void 0:l.onTick)==null||v.call(l,i),n(j=>{var m,p;const h=j-1;return h===0&&(t(!1),(p=(m=f.current)==null?void 0:m.onExpire)==null||p.call(m)),h})};return S.current=setInterval(o,1e3),()=>{clearInterval(S.current)}},[u]);const T=()=>t(!1),g=()=>{i<=0||t(!0)},y=()=>{i<=0||t(!u)},I=(o,r=!0)=>{n(o),r&&t(!0)},R=()=>{e<=0||(t(!0),n(e))},b=()=>{t(!1),n(0)},x=o=>n(r=>r+o),E=o=>{n(r=>{const a=r-o;return a<=0?(t(!1),0):a})};return{...M(i),count:i,pause:T,active:u,resume:g,toggle:y,start:R,restart:I,clear:b,increase:x,decrease:E}};exports.getTimeFromSeconds=M;exports.useTimer=D;
|
|
2
2
|
//# sourceMappingURL=useTimer.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTimer.cjs","sources":["../../../../src/hooks/useTimer/useTimer.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\n\nexport type PositiveInteger<Value extends number> = `${Value}` extends `-${any}` | `${any}.${any}`\n ? never\n : Value;\n\nexport const getTimeFromSeconds = (timestamp: number) => {\n const roundedTimestamp = Math.ceil(timestamp);\n const days = Math.floor(roundedTimestamp / (60 * 60 * 24));\n const hours = Math.floor((roundedTimestamp % (60 * 60 * 24)) / (60 * 60));\n const minutes = Math.floor((roundedTimestamp % (60 * 60)) / 60);\n const seconds = Math.floor(roundedTimestamp % 60);\n\n return {\n seconds,\n minutes,\n hours,\n days\n };\n};\n\n/** The use timer options type */\nexport interface UseTimerOptions {\n /** Whether the timer should start automatically */\n immediately?: boolean;\n /** The function to be executed when the timer is expired */\n onExpire?: () => void;\n /** The function to be executed when the timer is started */\n onStart?: () => void;\n /** Callback function to be executed on each tick of the timer */\n onTick?: (seconds: number) => void;\n}\n\n/** The use timer return type */\nexport interface UseTimerReturn {\n /** flag to indicate if timer is active or not */\n active: boolean;\n /** The total count of the timer */\n count: number;\n /** The day count of the timer */\n days: number;\n /** The hour count of the timer */\n hours: number;\n /** The minute count of the timer */\n minutes: number;\n /** The second count of the timer */\n seconds: number;\n /** The function to clear the timer */\n clear: () => void;\n /** The function to decrease the timer */\n decrease: (seconds: PositiveInteger<number>) => void;\n /** The function to increase the timer */\n increase: (seconds: PositiveInteger<number>) => void;\n /** The function to pause the timer */\n pause: () => void;\n /** The function to restart the timer */\n restart: (time: PositiveInteger<number>, immediately?: boolean) => void;\n /** The function to resume the timer */\n resume: () => void;\n /** The function to start the timer */\n start: () => void;\n /** The function to toggle the timer */\n toggle: () => void;\n}\n\nexport interface UseTimer {\n (): UseTimerReturn;\n\n (seconds: PositiveInteger<number>, callback: () => void): UseTimerReturn;\n\n (seconds: PositiveInteger<number>, options?: UseTimerOptions): UseTimerReturn;\n}\n\n/**\n * @name useTimer\n * @description - Hook that creates a timer functionality\n * @category Time\n *\n * @overload\n * @returns {UseTimerReturn} An object containing the timer properties and functions\n *\n * @example\n * const { days, hours, minutes, seconds, toggle, pause, start, restart, resume, active, decrease, increase } = useTimer();\n *\n * @overload\n * @param {number} seconds The seconds value that define for how long the timer will be running\n * @param {() => void} callback The function to be executed once countdown timer is expired\n * @returns {UseTimerReturn} An object containing the timer properties and functions\n *\n * @example\n * const { days, hours, minutes, seconds, toggle, pause, start, restart, resume, active, decrease, increase } = useTimer(1000, () => console.log('ready'));\n *\n * @overload\n * @param {number} seconds The seconds value that define for how long the timer will be running\n * @param {boolean} [options.immediately=true] The flag to decide if timer should start automatically\n * @param {() => void} [options.onExpire] The function to be executed when the timer is expired\n * @param {(timestamp: number) => void} [options.onTick] The function to be executed on each tick of the timer\n * @returns {UseTimerReturn} An object containing the timer properties and functions\n *\n * @example\n * const { days, hours, minutes, seconds, toggle, pause, start, restart, resume, active, decrease, increase } = useTimer(1000);\n */\nexport const useTimer = ((...params: any[]) => {\n const initialSeconds = Math.max((params[0] ?? 0) as PositiveInteger<number>, 0);\n const options = (typeof params[1] === 'object' ? params[1] : { onExpire: params[1] }) as\n | UseTimerOptions\n | undefined;\n\n const [active, setActive] = useState(initialSeconds > 0 && (options?.immediately ?? true));\n const [seconds, setSeconds] = useState(initialSeconds);\n\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>();\n const optionsRef = useRef<UseTimerOptions>();\n optionsRef.current = options ?? {};\n\n useDidUpdate(() => {\n if (initialSeconds <= 0) {\n setActive(false);\n setSeconds(0);\n return;\n }\n\n setActive(true);\n setSeconds(initialSeconds);\n }, [initialSeconds]);\n\n useEffect(() => {\n if (!active) return;\n\n optionsRef.current?.onStart?.();\n const onInterval = () => {\n optionsRef.current?.onTick?.(seconds);\n setSeconds((prevSeconds) => {\n const updatedSeconds = prevSeconds - 1;\n if (updatedSeconds === 0) {\n setActive(false);\n optionsRef.current?.onExpire?.();\n }\n return updatedSeconds;\n });\n };\n\n intervalIdRef.current = setInterval(onInterval, 1000);\n return () => {\n clearInterval(intervalIdRef.current);\n };\n }, [active]);\n\n const pause = () => setActive(false);\n const resume = () => {\n if (seconds <= 0) return;\n setActive(true);\n };\n\n const toggle = () => {\n if (seconds <= 0) return;\n setActive(!active);\n };\n\n const restart = (seconds: PositiveInteger<number>, immediately = true) => {\n setSeconds(seconds);\n if (immediately) setActive(true);\n };\n\n const start = () => {\n if (initialSeconds <= 0) return;\n\n setActive(true);\n setSeconds(initialSeconds);\n };\n\n const clear = () => {\n setActive(false);\n setSeconds(0);\n };\n\n const increase = (seconds: PositiveInteger<number>) =>\n setSeconds((prevSeconds) => prevSeconds + seconds);\n const decrease = (seconds: PositiveInteger<number>) => {\n setSeconds((prevSeconds) => {\n const updatedSeconds = prevSeconds - seconds;\n if (updatedSeconds <= 0) {\n setActive(false);\n return 0;\n } else {\n return updatedSeconds;\n }\n });\n };\n\n return {\n ...getTimeFromSeconds(seconds),\n count: seconds,\n pause,\n active,\n resume,\n toggle,\n start,\n restart,\n clear,\n increase,\n decrease\n };\n}) as UseTimer;\n"],"names":["getTimeFromSeconds","timestamp","roundedTimestamp","days","hours","minutes","useTimer","params","initialSeconds","options","active","setActive","useState","seconds","setSeconds","intervalIdRef","useRef","optionsRef","useDidUpdate","useEffect","_b","_a","onInterval","prevSeconds","updatedSeconds","pause","resume","toggle","restart","immediately","start","clear","increase","decrease"],"mappings":"uJAQaA,EAAsBC,GAAsB,CACjD,MAAAC,EAAmB,KAAK,KAAKD,CAAS,EACtCE,EAAO,KAAK,MAAMD,GAAoB,GAAK,GAAK,GAAG,EACnDE,EAAQ,KAAK,MAAOF,GAAoB,GAAK,GAAK,KAAQ,GAAK,GAAG,EAClEG,EAAU,KAAK,MAAOH,GAAoB,GAAK,IAAO,EAAE,EAGvD,MAAA,CACL,QAHc,KAAK,MAAMA,EAAmB,EAAE,EAI9C,QAAAG,EACA,MAAAD,EACA,KAAAD,CACF,CACF,EAmFaG,EAAY,IAAIC,IAAkB,CAC7C,MAAMC,EAAiB,KAAK,IAAKD,EAAO,CAAC,GAAK,EAA+B,CAAC,EACxEE,EAAW,OAAOF,EAAO,CAAC,GAAM,SAAWA,EAAO,CAAC,EAAI,CAAE,SAAUA,EAAO,CAAC,CAAE,EAI7E,CAACG,EAAQC,CAAS,EAAIC,WAASJ,EAAiB,KAAMC,GAAA,YAAAA,EAAS,cAAe,GAAK,EACnF,CAACI,EAASC,CAAU,EAAIF,EAAAA,SAASJ,CAAc,EAE/CO,EAAgBC,
|
|
1
|
+
{"version":3,"file":"useTimer.cjs","sources":["../../../../src/hooks/useTimer/useTimer.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\n\nexport type PositiveInteger<Value extends number> = `${Value}` extends `-${any}` | `${any}.${any}`\n ? never\n : Value;\n\nexport const getTimeFromSeconds = (timestamp: number) => {\n const roundedTimestamp = Math.ceil(timestamp);\n const days = Math.floor(roundedTimestamp / (60 * 60 * 24));\n const hours = Math.floor((roundedTimestamp % (60 * 60 * 24)) / (60 * 60));\n const minutes = Math.floor((roundedTimestamp % (60 * 60)) / 60);\n const seconds = Math.floor(roundedTimestamp % 60);\n\n return {\n seconds,\n minutes,\n hours,\n days\n };\n};\n\n/** The use timer options type */\nexport interface UseTimerOptions {\n /** Whether the timer should start automatically */\n immediately?: boolean;\n /** The function to be executed when the timer is expired */\n onExpire?: () => void;\n /** The function to be executed when the timer is started */\n onStart?: () => void;\n /** Callback function to be executed on each tick of the timer */\n onTick?: (seconds: number) => void;\n}\n\n/** The use timer return type */\nexport interface UseTimerReturn {\n /** flag to indicate if timer is active or not */\n active: boolean;\n /** The total count of the timer */\n count: number;\n /** The day count of the timer */\n days: number;\n /** The hour count of the timer */\n hours: number;\n /** The minute count of the timer */\n minutes: number;\n /** The second count of the timer */\n seconds: number;\n /** The function to clear the timer */\n clear: () => void;\n /** The function to decrease the timer */\n decrease: (seconds: PositiveInteger<number>) => void;\n /** The function to increase the timer */\n increase: (seconds: PositiveInteger<number>) => void;\n /** The function to pause the timer */\n pause: () => void;\n /** The function to restart the timer */\n restart: (time: PositiveInteger<number>, immediately?: boolean) => void;\n /** The function to resume the timer */\n resume: () => void;\n /** The function to start the timer */\n start: () => void;\n /** The function to toggle the timer */\n toggle: () => void;\n}\n\nexport interface UseTimer {\n (): UseTimerReturn;\n\n (seconds: PositiveInteger<number>, callback: () => void): UseTimerReturn;\n\n (seconds: PositiveInteger<number>, options?: UseTimerOptions): UseTimerReturn;\n}\n\n/**\n * @name useTimer\n * @description - Hook that creates a timer functionality\n * @category Time\n *\n * @overload\n * @returns {UseTimerReturn} An object containing the timer properties and functions\n *\n * @example\n * const { days, hours, minutes, seconds, toggle, pause, start, restart, resume, active, decrease, increase } = useTimer();\n *\n * @overload\n * @param {number} seconds The seconds value that define for how long the timer will be running\n * @param {() => void} callback The function to be executed once countdown timer is expired\n * @returns {UseTimerReturn} An object containing the timer properties and functions\n *\n * @example\n * const { days, hours, minutes, seconds, toggle, pause, start, restart, resume, active, decrease, increase } = useTimer(1000, () => console.log('ready'));\n *\n * @overload\n * @param {number} seconds The seconds value that define for how long the timer will be running\n * @param {boolean} [options.immediately=true] The flag to decide if timer should start automatically\n * @param {() => void} [options.onExpire] The function to be executed when the timer is expired\n * @param {(timestamp: number) => void} [options.onTick] The function to be executed on each tick of the timer\n * @returns {UseTimerReturn} An object containing the timer properties and functions\n *\n * @example\n * const { days, hours, minutes, seconds, toggle, pause, start, restart, resume, active, decrease, increase } = useTimer(1000);\n */\nexport const useTimer = ((...params: any[]) => {\n const initialSeconds = Math.max((params[0] ?? 0) as PositiveInteger<number>, 0);\n const options = (typeof params[1] === 'object' ? params[1] : { onExpire: params[1] }) as\n | UseTimerOptions\n | undefined;\n\n const [active, setActive] = useState(initialSeconds > 0 && (options?.immediately ?? true));\n const [seconds, setSeconds] = useState(initialSeconds);\n\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>(undefined);\n const optionsRef = useRef<UseTimerOptions>(options);\n optionsRef.current = options ?? {};\n\n useDidUpdate(() => {\n if (initialSeconds <= 0) {\n setActive(false);\n setSeconds(0);\n return;\n }\n\n setActive(true);\n setSeconds(initialSeconds);\n }, [initialSeconds]);\n\n useEffect(() => {\n if (!active) return;\n\n optionsRef.current?.onStart?.();\n const onInterval = () => {\n optionsRef.current?.onTick?.(seconds);\n setSeconds((prevSeconds) => {\n const updatedSeconds = prevSeconds - 1;\n if (updatedSeconds === 0) {\n setActive(false);\n optionsRef.current?.onExpire?.();\n }\n return updatedSeconds;\n });\n };\n\n intervalIdRef.current = setInterval(onInterval, 1000);\n return () => {\n clearInterval(intervalIdRef.current);\n };\n }, [active]);\n\n const pause = () => setActive(false);\n const resume = () => {\n if (seconds <= 0) return;\n setActive(true);\n };\n\n const toggle = () => {\n if (seconds <= 0) return;\n setActive(!active);\n };\n\n const restart = (seconds: PositiveInteger<number>, immediately = true) => {\n setSeconds(seconds);\n if (immediately) setActive(true);\n };\n\n const start = () => {\n if (initialSeconds <= 0) return;\n\n setActive(true);\n setSeconds(initialSeconds);\n };\n\n const clear = () => {\n setActive(false);\n setSeconds(0);\n };\n\n const increase = (seconds: PositiveInteger<number>) =>\n setSeconds((prevSeconds) => prevSeconds + seconds);\n const decrease = (seconds: PositiveInteger<number>) => {\n setSeconds((prevSeconds) => {\n const updatedSeconds = prevSeconds - seconds;\n if (updatedSeconds <= 0) {\n setActive(false);\n return 0;\n } else {\n return updatedSeconds;\n }\n });\n };\n\n return {\n ...getTimeFromSeconds(seconds),\n count: seconds,\n pause,\n active,\n resume,\n toggle,\n start,\n restart,\n clear,\n increase,\n decrease\n };\n}) as UseTimer;\n"],"names":["getTimeFromSeconds","timestamp","roundedTimestamp","days","hours","minutes","useTimer","params","initialSeconds","options","active","setActive","useState","seconds","setSeconds","intervalIdRef","useRef","optionsRef","useDidUpdate","useEffect","_b","_a","onInterval","prevSeconds","updatedSeconds","pause","resume","toggle","restart","immediately","start","clear","increase","decrease"],"mappings":"uJAQaA,EAAsBC,GAAsB,CACjD,MAAAC,EAAmB,KAAK,KAAKD,CAAS,EACtCE,EAAO,KAAK,MAAMD,GAAoB,GAAK,GAAK,GAAG,EACnDE,EAAQ,KAAK,MAAOF,GAAoB,GAAK,GAAK,KAAQ,GAAK,GAAG,EAClEG,EAAU,KAAK,MAAOH,GAAoB,GAAK,IAAO,EAAE,EAGvD,MAAA,CACL,QAHc,KAAK,MAAMA,EAAmB,EAAE,EAI9C,QAAAG,EACA,MAAAD,EACA,KAAAD,CACF,CACF,EAmFaG,EAAY,IAAIC,IAAkB,CAC7C,MAAMC,EAAiB,KAAK,IAAKD,EAAO,CAAC,GAAK,EAA+B,CAAC,EACxEE,EAAW,OAAOF,EAAO,CAAC,GAAM,SAAWA,EAAO,CAAC,EAAI,CAAE,SAAUA,EAAO,CAAC,CAAE,EAI7E,CAACG,EAAQC,CAAS,EAAIC,WAASJ,EAAiB,KAAMC,GAAA,YAAAA,EAAS,cAAe,GAAK,EACnF,CAACI,EAASC,CAAU,EAAIF,EAAAA,SAASJ,CAAc,EAE/CO,EAAgBC,SAAuC,MAAS,EAChEC,EAAaD,SAAwBP,CAAO,EACvCQ,EAAA,QAAUR,GAAW,CAAC,EAEjCS,EAAAA,aAAa,IAAM,CACjB,GAAIV,GAAkB,EAAG,CACvBG,EAAU,EAAK,EACfG,EAAW,CAAC,EACZ,MAAA,CAGFH,EAAU,EAAI,EACdG,EAAWN,CAAc,CAAA,EACxB,CAACA,CAAc,CAAC,EAEnBW,EAAAA,UAAU,IAAM,SACd,GAAI,CAACT,EAAQ,QAEbU,GAAAC,EAAAJ,EAAW,UAAX,YAAAI,EAAoB,UAApB,MAAAD,EAAA,KAAAC,GACA,MAAMC,EAAa,IAAM,UACZF,GAAAC,EAAAJ,EAAA,UAAA,YAAAI,EAAS,SAAT,MAAAD,EAAA,KAAAC,EAAkBR,GAC7BC,EAAYS,GAAgB,SAC1B,MAAMC,EAAiBD,EAAc,EACrC,OAAIC,IAAmB,IACrBb,EAAU,EAAK,GACfS,GAAAC,EAAAJ,EAAW,UAAX,YAAAI,EAAoB,WAApB,MAAAD,EAAA,KAAAC,IAEKG,CAAA,CACR,CACH,EAEc,OAAAT,EAAA,QAAU,YAAYO,EAAY,GAAI,EAC7C,IAAM,CACX,cAAcP,EAAc,OAAO,CACrC,CAAA,EACC,CAACL,CAAM,CAAC,EAEL,MAAAe,EAAQ,IAAMd,EAAU,EAAK,EAC7Be,EAAS,IAAM,CACfb,GAAW,GACfF,EAAU,EAAI,CAChB,EAEMgB,EAAS,IAAM,CACfd,GAAW,GACfF,EAAU,CAACD,CAAM,CACnB,EAEMkB,EAAU,CAACf,EAAkCgB,EAAc,KAAS,CACxEf,EAAWD,CAAO,EACdgB,KAAuB,EAAI,CACjC,EAEMC,EAAQ,IAAM,CACdtB,GAAkB,IAEtBG,EAAU,EAAI,EACdG,EAAWN,CAAc,EAC3B,EAEMuB,EAAQ,IAAM,CAClBpB,EAAU,EAAK,EACfG,EAAW,CAAC,CACd,EAEMkB,EAAYnB,GAChBC,EAAYS,GAAgBA,EAAcV,CAAO,EAC7CoB,EAAYpB,GAAqC,CACrDC,EAAYS,GAAgB,CAC1B,MAAMC,EAAiBD,EAAcV,EACrC,OAAIW,GAAkB,GACpBb,EAAU,EAAK,EACR,GAEAa,CACT,CACD,CACH,EAEO,MAAA,CACL,GAAGxB,EAAmBa,CAAO,EAC7B,MAAOA,EACP,MAAAY,EACA,OAAAf,EACA,OAAAgB,EACA,OAAAC,EACA,MAAAG,EACA,QAAAF,EACA,MAAAG,EACA,SAAAC,EACA,SAAAC,CACF,CACF"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react"),l=(c,t=0)=>{const r=typeof navigator<"u"&&"vibrate"in navigator,e=a.useRef(),[f,n]=a.useState(!1),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react"),l=(c,t=0)=>{const r=typeof navigator<"u"&&"vibrate"in navigator,e=a.useRef(void 0),[f,n]=a.useState(!1),i=(u=c)=>{r&&navigator.vibrate(u)},s=()=>{r&&(navigator.vibrate(0),n(!1),e.current&&clearInterval(e.current))},v=()=>{r&&(n(!1),e.current&&clearInterval(e.current))},o=(u=t)=>{r&&(e.current&&clearInterval(e.current),n(!0),e.current=setInterval(i,u))};return a.useEffect(()=>{if(!(!r||t<=0))return o(t),()=>{s()}},[t,c]),{supported:r,trigger:i,stop:s,active:f,pause:v,resume:o}};exports.useVibrate=l;
|
|
2
2
|
//# sourceMappingURL=useVibrate.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useVibrate.cjs","sources":["../../../../src/hooks/useVibrate/useVibrate.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use vibrate pattern type */\nexport type UseVibratePattern = number | number[];\n\n/** The use vibrate return type */\nexport interface UseVibrateReturn {\n /** The support indicator */\n supported: boolean;\n /** The vibrating indicator */\n vibrating: boolean;\n /** The pause function */\n pause: () => void;\n /** The resume function */\n resume: () => void;\n /** The start function */\n start: (interval: number) => void;\n /** The vibrate function */\n trigger: (pattern?: UseVibratePattern) => void;\n}\n\n/**\n * @name useVibrate\n * @description - Hook that provides vibrate api\n * @category Browser\n *\n * @browserapi navigator.vibrate https://developer.mozilla.org/en-US/docs/Web/API/Navigator/vibrate\n *\n * @overload\n * @param {UseVibratePattern} options.pattern The pattern for vibration\n * @param {number} [options.interval=0] Time in milliseconds between vibrations\n * @returns {UseVibrateReturn} An object containing support indicator, start vibration and stop vibration functions\n *\n * @example\n * const { supported, active, vibrate, stop, pause, resume } = useVibrate(1000);\n */\nexport const useVibrate = (pattern: UseVibratePattern, interval: number = 0) => {\n const supported = typeof navigator !== 'undefined' && 'vibrate' in navigator;\n\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>();\n const [active, setActive] = useState(false);\n\n const trigger = (internalPattern: UseVibratePattern = pattern) => {\n if (!supported) return;\n navigator.vibrate(internalPattern);\n };\n\n const stop = () => {\n if (!supported) return;\n navigator.vibrate(0);\n setActive(false);\n if (intervalIdRef.current) clearInterval(intervalIdRef.current);\n };\n\n const pause = () => {\n if (!supported) return;\n setActive(false);\n if (intervalIdRef.current) clearInterval(intervalIdRef.current);\n };\n\n const resume = (intervalInterval: number = interval) => {\n if (!supported) return;\n if (intervalIdRef.current) clearInterval(intervalIdRef.current);\n setActive(true);\n intervalIdRef.current = setInterval(trigger, intervalInterval);\n };\n\n useEffect(() => {\n if (!supported || interval <= 0) return;\n resume(interval);\n return () => {\n stop();\n };\n }, [interval, pattern]);\n\n return { supported, trigger, stop, active, pause, resume };\n};\n"],"names":["useVibrate","pattern","interval","supported","intervalIdRef","useRef","active","setActive","useState","trigger","internalPattern","stop","pause","resume","intervalInterval","useEffect"],"mappings":"yGAoCaA,EAAa,CAACC,EAA4BC,EAAmB,IAAM,CAC9E,MAAMC,EAAY,OAAO,UAAc,KAAe,YAAa,UAE7DC,EAAgBC,
|
|
1
|
+
{"version":3,"file":"useVibrate.cjs","sources":["../../../../src/hooks/useVibrate/useVibrate.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use vibrate pattern type */\nexport type UseVibratePattern = number | number[];\n\n/** The use vibrate return type */\nexport interface UseVibrateReturn {\n /** The support indicator */\n supported: boolean;\n /** The vibrating indicator */\n vibrating: boolean;\n /** The pause function */\n pause: () => void;\n /** The resume function */\n resume: () => void;\n /** The start function */\n start: (interval: number) => void;\n /** The vibrate function */\n trigger: (pattern?: UseVibratePattern) => void;\n}\n\n/**\n * @name useVibrate\n * @description - Hook that provides vibrate api\n * @category Browser\n *\n * @browserapi navigator.vibrate https://developer.mozilla.org/en-US/docs/Web/API/Navigator/vibrate\n *\n * @overload\n * @param {UseVibratePattern} options.pattern The pattern for vibration\n * @param {number} [options.interval=0] Time in milliseconds between vibrations\n * @returns {UseVibrateReturn} An object containing support indicator, start vibration and stop vibration functions\n *\n * @example\n * const { supported, active, vibrate, stop, pause, resume } = useVibrate(1000);\n */\nexport const useVibrate = (pattern: UseVibratePattern, interval: number = 0) => {\n const supported = typeof navigator !== 'undefined' && 'vibrate' in navigator;\n\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>(undefined);\n const [active, setActive] = useState(false);\n\n const trigger = (internalPattern: UseVibratePattern = pattern) => {\n if (!supported) return;\n navigator.vibrate(internalPattern);\n };\n\n const stop = () => {\n if (!supported) return;\n navigator.vibrate(0);\n setActive(false);\n if (intervalIdRef.current) clearInterval(intervalIdRef.current);\n };\n\n const pause = () => {\n if (!supported) return;\n setActive(false);\n if (intervalIdRef.current) clearInterval(intervalIdRef.current);\n };\n\n const resume = (intervalInterval: number = interval) => {\n if (!supported) return;\n if (intervalIdRef.current) clearInterval(intervalIdRef.current);\n setActive(true);\n intervalIdRef.current = setInterval(trigger, intervalInterval);\n };\n\n useEffect(() => {\n if (!supported || interval <= 0) return;\n resume(interval);\n return () => {\n stop();\n };\n }, [interval, pattern]);\n\n return { supported, trigger, stop, active, pause, resume };\n};\n"],"names":["useVibrate","pattern","interval","supported","intervalIdRef","useRef","active","setActive","useState","trigger","internalPattern","stop","pause","resume","intervalInterval","useEffect"],"mappings":"yGAoCaA,EAAa,CAACC,EAA4BC,EAAmB,IAAM,CAC9E,MAAMC,EAAY,OAAO,UAAc,KAAe,YAAa,UAE7DC,EAAgBC,SAAuC,MAAS,EAChE,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EAEpCC,EAAU,CAACC,EAAqCT,IAAY,CAC3DE,GACL,UAAU,QAAQO,CAAe,CACnC,EAEMC,EAAO,IAAM,CACZR,IACL,UAAU,QAAQ,CAAC,EACnBI,EAAU,EAAK,EACXH,EAAc,SAAuB,cAAAA,EAAc,OAAO,EAChE,EAEMQ,EAAQ,IAAM,CACbT,IACLI,EAAU,EAAK,EACXH,EAAc,SAAuB,cAAAA,EAAc,OAAO,EAChE,EAEMS,EAAS,CAACC,EAA2BZ,IAAa,CACjDC,IACDC,EAAc,SAAuB,cAAAA,EAAc,OAAO,EAC9DG,EAAU,EAAI,EACAH,EAAA,QAAU,YAAYK,EAASK,CAAgB,EAC/D,EAEAC,OAAAA,EAAAA,UAAU,IAAM,CACV,GAAA,GAACZ,GAAaD,GAAY,GAC9B,OAAAW,EAAOX,CAAQ,EACR,IAAM,CACNS,EAAA,CACP,CAAA,EACC,CAACT,EAAUD,CAAO,CAAC,EAEf,CAAE,UAAAE,EAAW,QAAAM,EAAS,KAAAE,EAAM,OAAAL,EAAQ,MAAAM,EAAO,OAAAC,CAAO,CAC3D"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react"),v=e=>{const r=typeof navigator<"u"&&"wakeLock"in navigator,[l,c]=i.useState(!1),t=i.useRef(),d=(e==null?void 0:e.immediately)??!1,n=(e==null?void 0:e.type)??"screen",s=async a=>{r&&(t.current=await navigator.wakeLock.request(a??(e==null?void 0:e.type)),t.current.addEventListener("release",()=>{c(!1),t.current=void 0}),c(!0))},u=async()=>{!r||!t.current||(await t.current.release(),t.current=void 0,c(!1))};return i.useEffect(()=>{if(!r||!d||document.visibilityState!=="visible"||n!=="screen")return;const a=async()=>{await u(),await s(n)};return document.addEventListener("visibilitychange",a),()=>{document.removeEventListener("visibilitychange",a)}},[n]),{supported:r,active:l,request:s,release:u}};exports.useWakeLock=v;
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react"),v=e=>{const r=typeof navigator<"u"&&"wakeLock"in navigator,[l,c]=i.useState(!1),t=i.useRef(void 0),d=(e==null?void 0:e.immediately)??!1,n=(e==null?void 0:e.type)??"screen",s=async a=>{r&&(t.current=await navigator.wakeLock.request(a??(e==null?void 0:e.type)),t.current.addEventListener("release",()=>{c(!1),t.current=void 0}),c(!0))},u=async()=>{!r||!t.current||(await t.current.release(),t.current=void 0,c(!1))};return i.useEffect(()=>{if(!r||!d||document.visibilityState!=="visible"||n!=="screen")return;const a=async()=>{await u(),await s(n)};return document.addEventListener("visibilitychange",a),()=>{document.removeEventListener("visibilitychange",a)}},[n]),{supported:r,active:l,request:s,release:u}};exports.useWakeLock=v;
|
|
2
2
|
//# sourceMappingURL=useWakeLock.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWakeLock.cjs","sources":["../../../../src/hooks/useWakeLock/useWakeLock.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use wake lock options type */\nexport interface UseWakeLockOptions {\n /** Determines if the wake lock should be automatically reacquired when the document becomes visible. */\n immediately?: boolean;\n /** A string specifying the screen wake lock type. */\n type?: WakeLockType;\n}\n\n/** The use wake lock return type */\nexport interface UseWakeLockReturn {\n /** Indicates if the wake lock is currently active. */\n active: boolean;\n /** Indicates if the Wake Lock API is supported in the current environment. */\n supported: boolean;\n /** Function to release the wake lock. */\n release: () => Promise<void>;\n /** Function to request the wake lock. */\n request: () => Promise<void>;\n}\n\n/**\n * @name useWakeLock\n * @description - Hook that provides a wake lock functionality\n * @category Browser\n *\n * @browserapi navigator.wakeLock https://developer.mozilla.org/en-US/docs/Web/API/WakeLock\n *\n * @param {immediately} [options] Configuration options for the hook.\n * @returns {UseWakeLockReturn} An object containing the wake lock state and control methods.\n *\n * @example\n * const { supported, active, request, release } = useWakeLock();\n */\nexport const useWakeLock = (options?: UseWakeLockOptions): UseWakeLockReturn => {\n const supported = typeof navigator !== 'undefined' && 'wakeLock' in navigator;\n\n const [active, setActive] = useState(false);\n const sentinel = useRef<WakeLockSentinel>();\n\n const immediately = options?.immediately ?? false;\n const type = options?.type ?? 'screen';\n\n const request = async (type?: WakeLockType) => {\n if (!supported) return;\n\n sentinel.current = await navigator.wakeLock.request(type ?? options?.type);\n sentinel.current.addEventListener('release', () => {\n setActive(false);\n sentinel.current = undefined;\n });\n\n setActive(true);\n };\n\n const release = async () => {\n if (!supported || !sentinel.current) return;\n\n await sentinel.current.release();\n sentinel.current = undefined;\n setActive(false);\n };\n\n useEffect(() => {\n if (!supported || !immediately || document.visibilityState !== 'visible' || type !== 'screen')\n return;\n\n const onVisibilityChange = async () => {\n await release();\n await request(type);\n };\n\n document.addEventListener('visibilitychange', onVisibilityChange);\n return () => {\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n }, [type]);\n\n return { supported, active, request, release };\n};\n"],"names":["useWakeLock","options","supported","active","setActive","useState","sentinel","useRef","immediately","type","request","release","useEffect","onVisibilityChange"],"mappings":"yGAmCaA,EAAeC,GAAoD,CAC9E,MAAMC,EAAY,OAAO,UAAc,KAAe,aAAc,UAE9D,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EACpCC,EAAWC,
|
|
1
|
+
{"version":3,"file":"useWakeLock.cjs","sources":["../../../../src/hooks/useWakeLock/useWakeLock.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use wake lock options type */\nexport interface UseWakeLockOptions {\n /** Determines if the wake lock should be automatically reacquired when the document becomes visible. */\n immediately?: boolean;\n /** A string specifying the screen wake lock type. */\n type?: WakeLockType;\n}\n\n/** The use wake lock return type */\nexport interface UseWakeLockReturn {\n /** Indicates if the wake lock is currently active. */\n active: boolean;\n /** Indicates if the Wake Lock API is supported in the current environment. */\n supported: boolean;\n /** Function to release the wake lock. */\n release: () => Promise<void>;\n /** Function to request the wake lock. */\n request: () => Promise<void>;\n}\n\n/**\n * @name useWakeLock\n * @description - Hook that provides a wake lock functionality\n * @category Browser\n *\n * @browserapi navigator.wakeLock https://developer.mozilla.org/en-US/docs/Web/API/WakeLock\n *\n * @param {immediately} [options] Configuration options for the hook.\n * @returns {UseWakeLockReturn} An object containing the wake lock state and control methods.\n *\n * @example\n * const { supported, active, request, release } = useWakeLock();\n */\nexport const useWakeLock = (options?: UseWakeLockOptions): UseWakeLockReturn => {\n const supported = typeof navigator !== 'undefined' && 'wakeLock' in navigator;\n\n const [active, setActive] = useState(false);\n const sentinel = useRef<WakeLockSentinel>(undefined);\n\n const immediately = options?.immediately ?? false;\n const type = options?.type ?? 'screen';\n\n const request = async (type?: WakeLockType) => {\n if (!supported) return;\n\n sentinel.current = await navigator.wakeLock.request(type ?? options?.type);\n sentinel.current.addEventListener('release', () => {\n setActive(false);\n sentinel.current = undefined;\n });\n\n setActive(true);\n };\n\n const release = async () => {\n if (!supported || !sentinel.current) return;\n\n await sentinel.current.release();\n sentinel.current = undefined;\n setActive(false);\n };\n\n useEffect(() => {\n if (!supported || !immediately || document.visibilityState !== 'visible' || type !== 'screen')\n return;\n\n const onVisibilityChange = async () => {\n await release();\n await request(type);\n };\n\n document.addEventListener('visibilitychange', onVisibilityChange);\n return () => {\n document.removeEventListener('visibilitychange', onVisibilityChange);\n };\n }, [type]);\n\n return { supported, active, request, release };\n};\n"],"names":["useWakeLock","options","supported","active","setActive","useState","sentinel","useRef","immediately","type","request","release","useEffect","onVisibilityChange"],"mappings":"yGAmCaA,EAAeC,GAAoD,CAC9E,MAAMC,EAAY,OAAO,UAAc,KAAe,aAAc,UAE9D,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EACpCC,EAAWC,SAAyB,MAAS,EAE7CC,GAAcP,GAAA,YAAAA,EAAS,cAAe,GACtCQ,GAAOR,GAAA,YAAAA,EAAS,OAAQ,SAExBS,EAAU,MAAOD,GAAwB,CACxCP,IAELI,EAAS,QAAU,MAAM,UAAU,SAAS,QAAQG,IAAQR,GAAA,YAAAA,EAAS,KAAI,EAChEK,EAAA,QAAQ,iBAAiB,UAAW,IAAM,CACjDF,EAAU,EAAK,EACfE,EAAS,QAAU,MAAA,CACpB,EAEDF,EAAU,EAAI,EAChB,EAEMO,EAAU,SAAY,CACtB,CAACT,GAAa,CAACI,EAAS,UAEtB,MAAAA,EAAS,QAAQ,QAAQ,EAC/BA,EAAS,QAAU,OACnBF,EAAU,EAAK,EACjB,EAEAQ,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACV,GAAa,CAACM,GAAe,SAAS,kBAAoB,WAAaC,IAAS,SACnF,OAEF,MAAMI,EAAqB,SAAY,CACrC,MAAMF,EAAQ,EACd,MAAMD,EAAQD,CAAI,CACpB,EAES,gBAAA,iBAAiB,mBAAoBI,CAAkB,EACzD,IAAM,CACF,SAAA,oBAAoB,mBAAoBA,CAAkB,CACrE,CAAA,EACC,CAACJ,CAAI,CAAC,EAEF,CAAE,UAAAP,EAAW,OAAAC,EAAQ,QAAAO,EAAS,QAAAC,CAAQ,CAC/C"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("react"),v=require("../useEvent/useEvent.cjs"),g=require("../../utils/helpers/getRetry.cjs"),E=(n,e)=>{const u=f.useRef(),
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("react"),v=require("../useEvent/useEvent.cjs"),g=require("../../utils/helpers/getRetry.cjs"),E=(n,e)=>{const u=f.useRef(void 0),y=f.useRef(e!=null&&e.retry?g.getRetry(e.retry):0),a=f.useRef(!1),[R,d]=f.useState("connecting"),S=r=>{var c;return(c=u.current)==null?void 0:c.send(r)},b=()=>{var r;a.current=!0,(r=u.current)==null||r.close()},l=v.useEvent(()=>{u.current=new WebSocket(typeof n=="function"?n():n,e==null?void 0:e.protocols),d("connecting");const r=u.current;r&&(r.onopen=()=>{var c;d("connected"),(c=e==null?void 0:e.onConnected)==null||c.call(e,r)},r.onerror=c=>{var t;d("failed"),(t=e==null?void 0:e.onError)==null||t.call(e,c,r)},r.onmessage=c=>{var t;return(t=e==null?void 0:e.onMessage)==null?void 0:t.call(e,c,r)},r.onclose=c=>{var t;if(d("disconnected"),(t=e==null?void 0:e.onDisconnected)==null||t.call(e,c,r),!a.current){if(y.current>0)return y.current-=1,l();y.current=e!=null&&e.retry?g.getRetry(e.retry):0}})});f.useEffect(()=>(l(),()=>{u.current&&(u.current.close(),u.current=void 0)}),[n]);const k=()=>{a.current=!1,l()};return{client:u.current,close:b,open:k,send:S,status:R}};exports.useWebSocket=E;
|
|
2
2
|
//# sourceMappingURL=useWebSocket.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWebSocket.cjs","sources":["../../../../src/hooks/useWebSocket/useWebSocket.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { getRetry } from '@/utils/helpers';\n\nimport { useEvent } from '../useEvent/useEvent';\n\nexport type UseWebSocketUrl = (() => string) | string;\n\nexport interface UseWebSocketOptions {\n protocols?: Array<'soap' | 'wasm'>;\n retry?: boolean | number;\n onConnected?: (webSocket: WebSocket) => void;\n onDisconnected?: (event: CloseEvent, webSocket: WebSocket) => void;\n onError?: (event: Event, webSocket: WebSocket) => void;\n onMessage?: (event: MessageEvent, webSocket: WebSocket) => void;\n}\n\nexport type UseWebSocketStatus = 'connected' | 'connecting' | 'disconnected' | 'failed';\n\nexport interface UseWebSocketReturn {\n client?: WebSocket;\n close: WebSocket['close'];\n send: WebSocket['send'];\n status: UseWebSocketStatus;\n open: () => void;\n}\n\n/**\n * @name useWebSocket\n * @description - Hook that connects to a WebSocket server and handles incoming and outgoing messages\n * @category Browser\n *\n * @param {UseWebSocketUrl} url The URL of the WebSocket server\n * @param {(webSocket: WebSocket) => void} [options.onConnected] The callback function that is called when the WebSocket connection is established\n * @param {(event: CloseEvent, webSocket: WebSocket) => void} [options.onDisconnected] The callback function that is called when the WebSocket connection is closed\n * @param {(event: Event, webSocket: WebSocket) => void} [options.onError] The callback function that is called when an error occurs\n * @param {(event: MessageEvent, webSocket: WebSocket) => void} [options.onMessage] The callback function that is called when a message is received\n * @param {boolean | number} [options.retry] The number of times to retry the connection\n * @param {Array<'soap' | 'wasm'>} [options.protocols] The list of protocols to use\n * @returns {UseWebSocketReturn} An object with the status, close, send, open, and ws properties\n *\n * @example\n * const { status, close, send, open, client } = useWebSocket('url');\n */\nexport const useWebSocket = (\n url: UseWebSocketUrl,\n options?: UseWebSocketOptions\n): UseWebSocketReturn => {\n const webSocketRef = useRef<WebSocket>();\n const retryCountRef = useRef(options?.retry ? getRetry(options.retry) : 0);\n const explicityCloseRef = useRef(false);\n\n const [status, setStatus] = useState<UseWebSocketStatus>('connecting');\n\n const send = (data: string | ArrayBufferLike | ArrayBufferView | Blob) =>\n webSocketRef.current?.send(data);\n\n const close = () => {\n explicityCloseRef.current = true;\n webSocketRef.current?.close();\n };\n\n const init = useEvent(() => {\n webSocketRef.current = new WebSocket(\n typeof url === 'function' ? url() : url,\n options?.protocols\n );\n setStatus('connecting');\n\n const webSocket = webSocketRef.current;\n if (!webSocket) return;\n\n webSocket.onopen = () => {\n setStatus('connected');\n options?.onConnected?.(webSocket);\n };\n\n webSocket.onerror = (event) => {\n setStatus('failed');\n options?.onError?.(event, webSocket);\n };\n\n webSocket.onmessage = (event) => options?.onMessage?.(event, webSocket);\n\n webSocket.onclose = (event) => {\n setStatus('disconnected');\n options?.onDisconnected?.(event, webSocket);\n if (explicityCloseRef.current) return;\n\n if (retryCountRef.current > 0) {\n retryCountRef.current -= 1;\n return init();\n }\n retryCountRef.current = options?.retry ? getRetry(options.retry) : 0;\n };\n });\n\n useEffect(() => {\n init();\n\n return () => {\n if (!webSocketRef.current) return;\n webSocketRef.current.close();\n webSocketRef.current = undefined;\n };\n }, [url]);\n\n const open = () => {\n explicityCloseRef.current = false;\n init();\n };\n\n return { client: webSocketRef.current, close, open, send, status };\n};\n"],"names":["useWebSocket","url","options","webSocketRef","useRef","retryCountRef","getRetry","explicityCloseRef","status","setStatus","useState","send","data","_a","close","init","useEvent","webSocket","event","useEffect","open"],"mappings":"6LA4CaA,EAAe,CAC1BC,EACAC,IACuB,
|
|
1
|
+
{"version":3,"file":"useWebSocket.cjs","sources":["../../../../src/hooks/useWebSocket/useWebSocket.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport { getRetry } from '@/utils/helpers';\n\nimport { useEvent } from '../useEvent/useEvent';\n\nexport type UseWebSocketUrl = (() => string) | string;\n\nexport interface UseWebSocketOptions {\n protocols?: Array<'soap' | 'wasm'>;\n retry?: boolean | number;\n onConnected?: (webSocket: WebSocket) => void;\n onDisconnected?: (event: CloseEvent, webSocket: WebSocket) => void;\n onError?: (event: Event, webSocket: WebSocket) => void;\n onMessage?: (event: MessageEvent, webSocket: WebSocket) => void;\n}\n\nexport type UseWebSocketStatus = 'connected' | 'connecting' | 'disconnected' | 'failed';\n\nexport interface UseWebSocketReturn {\n client?: WebSocket;\n close: WebSocket['close'];\n send: WebSocket['send'];\n status: UseWebSocketStatus;\n open: () => void;\n}\n\n/**\n * @name useWebSocket\n * @description - Hook that connects to a WebSocket server and handles incoming and outgoing messages\n * @category Browser\n *\n * @param {UseWebSocketUrl} url The URL of the WebSocket server\n * @param {(webSocket: WebSocket) => void} [options.onConnected] The callback function that is called when the WebSocket connection is established\n * @param {(event: CloseEvent, webSocket: WebSocket) => void} [options.onDisconnected] The callback function that is called when the WebSocket connection is closed\n * @param {(event: Event, webSocket: WebSocket) => void} [options.onError] The callback function that is called when an error occurs\n * @param {(event: MessageEvent, webSocket: WebSocket) => void} [options.onMessage] The callback function that is called when a message is received\n * @param {boolean | number} [options.retry] The number of times to retry the connection\n * @param {Array<'soap' | 'wasm'>} [options.protocols] The list of protocols to use\n * @returns {UseWebSocketReturn} An object with the status, close, send, open, and ws properties\n *\n * @example\n * const { status, close, send, open, client } = useWebSocket('url');\n */\nexport const useWebSocket = (\n url: UseWebSocketUrl,\n options?: UseWebSocketOptions\n): UseWebSocketReturn => {\n const webSocketRef = useRef<WebSocket>(undefined);\n const retryCountRef = useRef(options?.retry ? getRetry(options.retry) : 0);\n const explicityCloseRef = useRef(false);\n\n const [status, setStatus] = useState<UseWebSocketStatus>('connecting');\n\n const send = (data: string | ArrayBufferLike | ArrayBufferView | Blob) =>\n webSocketRef.current?.send(data);\n\n const close = () => {\n explicityCloseRef.current = true;\n webSocketRef.current?.close();\n };\n\n const init = useEvent(() => {\n webSocketRef.current = new WebSocket(\n typeof url === 'function' ? url() : url,\n options?.protocols\n );\n setStatus('connecting');\n\n const webSocket = webSocketRef.current;\n if (!webSocket) return;\n\n webSocket.onopen = () => {\n setStatus('connected');\n options?.onConnected?.(webSocket);\n };\n\n webSocket.onerror = (event) => {\n setStatus('failed');\n options?.onError?.(event, webSocket);\n };\n\n webSocket.onmessage = (event) => options?.onMessage?.(event, webSocket);\n\n webSocket.onclose = (event) => {\n setStatus('disconnected');\n options?.onDisconnected?.(event, webSocket);\n if (explicityCloseRef.current) return;\n\n if (retryCountRef.current > 0) {\n retryCountRef.current -= 1;\n return init();\n }\n retryCountRef.current = options?.retry ? getRetry(options.retry) : 0;\n };\n });\n\n useEffect(() => {\n init();\n\n return () => {\n if (!webSocketRef.current) return;\n webSocketRef.current.close();\n webSocketRef.current = undefined;\n };\n }, [url]);\n\n const open = () => {\n explicityCloseRef.current = false;\n init();\n };\n\n return { client: webSocketRef.current, close, open, send, status };\n};\n"],"names":["useWebSocket","url","options","webSocketRef","useRef","retryCountRef","getRetry","explicityCloseRef","status","setStatus","useState","send","data","_a","close","init","useEvent","webSocket","event","useEffect","open"],"mappings":"6LA4CaA,EAAe,CAC1BC,EACAC,IACuB,CACjB,MAAAC,EAAeC,SAAkB,MAAS,EAC1CC,EAAgBD,SAAOF,GAAA,MAAAA,EAAS,MAAQI,EAAAA,SAASJ,EAAQ,KAAK,EAAI,CAAC,EACnEK,EAAoBH,SAAO,EAAK,EAEhC,CAACI,EAAQC,CAAS,EAAIC,EAAAA,SAA6B,YAAY,EAE/DC,EAAQC,GAAA,OACZ,OAAAC,EAAAV,EAAa,UAAb,YAAAU,EAAsB,KAAKD,IAEvBE,EAAQ,IAAM,OAClBP,EAAkB,QAAU,IAC5BM,EAAAV,EAAa,UAAb,MAAAU,EAAsB,OACxB,EAEME,EAAOC,EAAAA,SAAS,IAAM,CAC1Bb,EAAa,QAAU,IAAI,UACzB,OAAOF,GAAQ,WAAaA,EAAA,EAAQA,EACpCC,GAAA,YAAAA,EAAS,SACX,EACAO,EAAU,YAAY,EAEtB,MAAMQ,EAAYd,EAAa,QAC1Bc,IAELA,EAAU,OAAS,IAAM,OACvBR,EAAU,WAAW,GACrBI,EAAAX,GAAA,YAAAA,EAAS,cAAT,MAAAW,EAAA,KAAAX,EAAuBe,EACzB,EAEUA,EAAA,QAAWC,GAAU,OAC7BT,EAAU,QAAQ,GACTI,EAAAX,GAAA,YAAAA,EAAA,UAAA,MAAAW,EAAA,KAAAX,EAAUgB,EAAOD,EAC5B,EAEAA,EAAU,UAAaC,GAAA,OAAU,OAAAL,EAAAX,GAAA,YAAAA,EAAS,YAAT,YAAAW,EAAA,KAAAX,EAAqBgB,EAAOD,IAEnDA,EAAA,QAAWC,GAAU,OAG7B,GAFAT,EAAU,cAAc,GACfI,EAAAX,GAAA,YAAAA,EAAA,iBAAA,MAAAW,EAAA,KAAAX,EAAiBgB,EAAOD,GAC7B,CAAAV,EAAkB,QAElB,IAAAF,EAAc,QAAU,EAC1B,OAAAA,EAAc,SAAW,EAClBU,EAAK,EAEdV,EAAc,QAAUH,GAAA,MAAAA,EAAS,MAAQI,EAAAA,SAASJ,EAAQ,KAAK,EAAI,EACrE,EAAA,CACD,EAEDiB,EAAAA,UAAU,KACHJ,EAAA,EAEE,IAAM,CACNZ,EAAa,UAClBA,EAAa,QAAQ,MAAM,EAC3BA,EAAa,QAAU,OACzB,GACC,CAACF,CAAG,CAAC,EAER,MAAMmB,EAAO,IAAM,CACjBb,EAAkB,QAAU,GACvBQ,EAAA,CACP,EAEA,MAAO,CAAE,OAAQZ,EAAa,QAAS,MAAAW,EAAO,KAAAM,EAAM,KAAAT,EAAM,OAAAH,CAAO,CACnE"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { useRef as s, useEffect as R } from "react";
|
|
2
2
|
import { useRefState as k } from "../useRefState/useRefState.mjs";
|
|
3
|
-
import { isTarget as
|
|
4
|
-
import { getElement as
|
|
3
|
+
import { isTarget as v } from "../../utils/helpers/isTarget.mjs";
|
|
4
|
+
import { getElement as T } from "../../utils/helpers/getElement.mjs";
|
|
5
5
|
const C = 300, b = (...e) => {
|
|
6
|
-
const t =
|
|
6
|
+
const t = v(e[0]) ? e[0] : void 0, f = t ? e[1] : e[0], l = t ? e[2] : e[1], o = s(void 0), r = s(0), c = k(), m = s(f);
|
|
7
7
|
m.current = f;
|
|
8
8
|
const u = s(l);
|
|
9
9
|
if (u.current = l, R(() => {
|
|
10
10
|
if (!t && !c.state) return;
|
|
11
|
-
const n = t ?
|
|
11
|
+
const n = t ? T(t) : c.current;
|
|
12
12
|
if (!n) return;
|
|
13
13
|
const i = (d) => {
|
|
14
14
|
var E;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useDoubleClick.mjs","sources":["../../../../src/hooks/useDoubleClick/useDoubleClick.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type DoubleClickEvents = MouseEvent | TouchEvent;\n\n// * The use double click options type */\nexport interface UseDoubleClickOptions {\n // * The threshold time in milliseconds between clicks\n threshold?: number;\n // * The callback function to be invoked on single click\n onSingleClick?: (event: DoubleClickEvents) => void;\n}\n\nexport interface UseDoubleClick {\n (\n target: HookTarget,\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions,\n target?: never\n ): StateRef<Target>;\n}\n\nconst DEFAULT_THRESHOLD_TIME = 300;\n\n/**\n * @name useDoubleClick\n * @description - Hook that defines the logic when double clicking an element\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element to be double clicked\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * useDoubleClick(ref, () => console.log('double clicked'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * const ref = useDoubleClick(() => console.log('double clicked'));\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useDoubleClick.html}\n */\nexport const useDoubleClick = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as (event: DoubleClickEvents) => void;\n const options = (target ? params[2] : params[1]) as UseDoubleClickOptions | undefined;\n\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>();\n const clickCountRef = useRef(0);\n const internalRef = useRefState<Element>();\n\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const onClick = (event: DoubleClickEvents) => {\n clickCountRef.current += 1;\n\n if (clickCountRef.current === 1) {\n timeoutIdRef.current = setTimeout(() => {\n if (internalOptionsRef.current?.onSingleClick)\n internalOptionsRef.current.onSingleClick(event);\n clickCountRef.current = 0;\n }, internalOptionsRef.current?.threshold ?? DEFAULT_THRESHOLD_TIME);\n }\n\n if (clickCountRef.current === 2) {\n clearTimeout(timeoutIdRef.current);\n internalCallbackRef.current(event);\n clickCountRef.current = 0;\n }\n };\n\n element.addEventListener('mousedown', onClick as EventListener);\n element.addEventListener('touchstart', onClick as EventListener);\n\n return () => {\n element.removeEventListener('mousedown', onClick as EventListener);\n element.removeEventListener('touchstart', onClick as EventListener);\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n }, [target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseDoubleClick;\n"],"names":["DEFAULT_THRESHOLD_TIME","useDoubleClick","params","target","isTarget","callback","options","timeoutIdRef","useRef","clickCountRef","internalRef","useRefState","internalCallbackRef","internalOptionsRef","useEffect","element","getElement","onClick","event","_a"],"mappings":";;;;AAkCA,MAAMA,IAAyB,KA2BlBC,IAAkB,IAAIC,MAAuB;AAClD,QAAAC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAYF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACzCI,IAAWH,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAExCK,IAAeC,EAAsC,
|
|
1
|
+
{"version":3,"file":"useDoubleClick.mjs","sources":["../../../../src/hooks/useDoubleClick/useDoubleClick.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type DoubleClickEvents = MouseEvent | TouchEvent;\n\n// * The use double click options type */\nexport interface UseDoubleClickOptions {\n // * The threshold time in milliseconds between clicks\n threshold?: number;\n // * The callback function to be invoked on single click\n onSingleClick?: (event: DoubleClickEvents) => void;\n}\n\nexport interface UseDoubleClick {\n (\n target: HookTarget,\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions,\n target?: never\n ): StateRef<Target>;\n}\n\nconst DEFAULT_THRESHOLD_TIME = 300;\n\n/**\n * @name useDoubleClick\n * @description - Hook that defines the logic when double clicking an element\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element to be double clicked\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * useDoubleClick(ref, () => console.log('double clicked'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * const ref = useDoubleClick(() => console.log('double clicked'));\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useDoubleClick.html}\n */\nexport const useDoubleClick = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as (event: DoubleClickEvents) => void;\n const options = (target ? params[2] : params[1]) as UseDoubleClickOptions | undefined;\n\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const clickCountRef = useRef(0);\n const internalRef = useRefState<Element>();\n\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const onClick = (event: DoubleClickEvents) => {\n clickCountRef.current += 1;\n\n if (clickCountRef.current === 1) {\n timeoutIdRef.current = setTimeout(() => {\n if (internalOptionsRef.current?.onSingleClick)\n internalOptionsRef.current.onSingleClick(event);\n clickCountRef.current = 0;\n }, internalOptionsRef.current?.threshold ?? DEFAULT_THRESHOLD_TIME);\n }\n\n if (clickCountRef.current === 2) {\n clearTimeout(timeoutIdRef.current);\n internalCallbackRef.current(event);\n clickCountRef.current = 0;\n }\n };\n\n element.addEventListener('mousedown', onClick as EventListener);\n element.addEventListener('touchstart', onClick as EventListener);\n\n return () => {\n element.removeEventListener('mousedown', onClick as EventListener);\n element.removeEventListener('touchstart', onClick as EventListener);\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n }, [target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseDoubleClick;\n"],"names":["DEFAULT_THRESHOLD_TIME","useDoubleClick","params","target","isTarget","callback","options","timeoutIdRef","useRef","clickCountRef","internalRef","useRefState","internalCallbackRef","internalOptionsRef","useEffect","element","getElement","onClick","event","_a"],"mappings":";;;;AAkCA,MAAMA,IAAyB,KA2BlBC,IAAkB,IAAIC,MAAuB;AAClD,QAAAC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAYF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACzCI,IAAWH,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAExCK,IAAeC,EAAsC,MAAS,GAC9DC,IAAgBD,EAAO,CAAC,GACxBE,IAAcC,EAAqB,GAEnCC,IAAsBJ,EAAOH,CAAQ;AAC3C,EAAAO,EAAoB,UAAUP;AACxB,QAAAQ,IAAqBL,EAAOF,CAAO;AAqCzC,MApCAO,EAAmB,UAAUP,GAE7BQ,EAAU,MAAM;AACd,QAAI,CAACX,KAAU,CAACO,EAAY,MAAO;AAEnC,UAAMK,IAAUZ,IAASa,EAAWb,CAAM,IAAIO,EAAY;AAC1D,QAAI,CAACK,EAAS;AAER,UAAAE,IAAU,CAACC,MAA6B;;AAC5C,MAAAT,EAAc,WAAW,GAErBA,EAAc,YAAY,MACfF,EAAA,UAAU,WAAW,MAAM;;AACtC,SAAIY,IAAAN,EAAmB,YAAnB,QAAAM,EAA4B,iBACXN,EAAA,QAAQ,cAAcK,CAAK,GAChDT,EAAc,UAAU;AAAA,MACvB,KAAAU,IAAAN,EAAmB,YAAnB,gBAAAM,EAA4B,cAAanB,CAAsB,IAGhES,EAAc,YAAY,MAC5B,aAAaF,EAAa,OAAO,GACjCK,EAAoB,QAAQM,CAAK,GACjCT,EAAc,UAAU;AAAA,IAE5B;AAEQ,WAAAM,EAAA,iBAAiB,aAAaE,CAAwB,GACtDF,EAAA,iBAAiB,cAAcE,CAAwB,GAExD,MAAM;AACH,MAAAF,EAAA,oBAAoB,aAAaE,CAAwB,GACzDF,EAAA,oBAAoB,cAAcE,CAAwB,GAC9DV,EAAa,WAAsB,aAAAA,EAAa,OAAO;AAAA,IAC7D;AAAA,EACC,GAAA,CAACJ,GAAQO,EAAY,KAAK,CAAC,GAE1B,CAAAP;AACG,WAAAO;AACT;"}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { useState as f, useRef as s, useEffect as v } from "react";
|
|
2
|
-
const
|
|
3
|
-
const u = e[0], n = (typeof e[1] == "number" ? e[1] : e[1].interval) ?? 1e3, r = typeof e[1] == "object" ? e[1] : e[2], i = (r == null ? void 0 : r.immediately) ?? !0, [t, c] = f(i ?? !0),
|
|
4
|
-
return
|
|
2
|
+
const y = (...e) => {
|
|
3
|
+
const u = e[0], n = (typeof e[1] == "number" ? e[1] : e[1].interval) ?? 1e3, r = typeof e[1] == "object" ? e[1] : e[2], i = (r == null ? void 0 : r.immediately) ?? !0, [t, c] = f(i ?? !0), o = s(void 0), l = s(u);
|
|
4
|
+
return l.current = u, v(() => {
|
|
5
5
|
if (t)
|
|
6
|
-
return
|
|
7
|
-
clearInterval(
|
|
6
|
+
return o.current = setInterval(() => l.current(), n), () => {
|
|
7
|
+
clearInterval(o.current);
|
|
8
8
|
};
|
|
9
9
|
}, [t, n]), {
|
|
10
10
|
active: t,
|
|
@@ -16,6 +16,6 @@ const I = (...e) => {
|
|
|
16
16
|
};
|
|
17
17
|
};
|
|
18
18
|
export {
|
|
19
|
-
|
|
19
|
+
y as useInterval
|
|
20
20
|
};
|
|
21
21
|
//# sourceMappingURL=useInterval.mjs.map
|