@siberiacancode/reactuse 0.2.13 → 0.2.15

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),o=require("../useEvent/useEvent.cjs"),t=require("../../utils/helpers/debounce.cjs"),r=(n,e)=>{const c=o.useEvent(n);return u.useMemo(()=>t.debounce(c,e),[e])};exports.useDebounceCallback=r;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),a=(n,t)=>{const r=c.useRef(n),e=c.useRef(null),u=c.useRef(t);return r.current=n,u.current=t,c.useMemo(()=>{const o=()=>{e.current&&(clearTimeout(e.current),e.current=void 0)},s=function(...l){o(),e.current=setTimeout(()=>{r.current.apply(this,l)},u.current)};return s.cancel=o,s},[])};exports.useDebounceCallback=a;
2
2
  //# sourceMappingURL=useDebounceCallback.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDebounceCallback.cjs","sources":["../../../../src/hooks/useDebounceCallback/useDebounceCallback.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { debounce } from '@/utils/helpers';\n\nimport { useEvent } from '../useEvent/useEvent';\n\n/**\n * @name useDebounceCallback\n * @description - Hook that creates a debounced callback\n * @category Utilities\n *\n * @template Params The type of the params\n * @template Return The type of the return\n * @param {(...args: Params) => Return} callback The callback function\n * @param {number} delay The delay in milliseconds\n * @returns {(...args: Params) => Return} The callback with debounce\n *\n * @example\n * const debouncedCallback = useDebounceCallback(() => console.log('callback'), 500);\n */\nexport const useDebounceCallback = <Params extends unknown[], Return>(\n callback: (...args: Params) => Return,\n delay: number\n) => {\n const internalCallback = useEvent(callback);\n const debounced = useMemo(() => debounce(internalCallback, delay), [delay]);\n\n return debounced;\n};\n"],"names":["useDebounceCallback","callback","delay","internalCallback","useEvent","useMemo","debounce"],"mappings":"6LAoBaA,EAAsB,CACjCC,EACAC,IACG,CACH,MAAMC,EAAmBC,EAAAA,SAASH,CAAQ,EAG1C,OAFkBI,EAAAA,QAAQ,IAAMC,EAAAA,SAASH,EAAkBD,CAAK,EAAG,CAACA,CAAK,CAAC,CAG5E"}
1
+ {"version":3,"file":"useDebounceCallback.cjs","sources":["../../../../src/hooks/useDebounceCallback/useDebounceCallback.ts"],"sourcesContent":["import { useMemo, useRef } from 'react';\n\nexport type DebouncedCallback<Params extends unknown[]> = ((...args: Params) => void) & {\n cancel: () => void;\n};\n\n/**\n * @name useDebounceCallback\n * @description - Hook that creates a debounced callback\n * @category Utilities\n *\n * @template Params The type of the params\n * @template Return The type of the return\n * @param {(...args: Params) => Return} callback The callback function\n * @param {number} delay The delay in milliseconds\n * @returns {(...args: Params) => Return} The callback with debounce\n *\n * @example\n * const debouncedCallback = useDebounceCallback(() => console.log('callback'), 500);\n */\nexport const useDebounceCallback = <Params extends unknown[], Return>(\n callback: (...args: Params) => Return,\n delay: number\n): DebouncedCallback<Params> => {\n const internalCallbackRef = useRef(callback);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const delayRef = useRef(delay);\n\n internalCallbackRef.current = callback;\n delayRef.current = delay;\n\n const debounced = useMemo(() => {\n const cancel = () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = undefined as any;\n }\n };\n\n const debouncedCallback = function (this: any, ...args: Params) {\n cancel();\n timerRef.current = setTimeout(() => {\n internalCallbackRef.current.apply(this, args);\n }, delayRef.current);\n };\n\n debouncedCallback.cancel = cancel;\n\n return debouncedCallback;\n }, []);\n\n return debounced;\n};\n"],"names":["useDebounceCallback","callback","delay","internalCallbackRef","useRef","timerRef","delayRef","useMemo","cancel","debouncedCallback","args"],"mappings":"yGAoBaA,EAAsB,CACjCC,EACAC,IAC8B,CAC9B,MAAMC,EAAsBC,EAAAA,OAAOH,CAAQ,EACrCI,EAAWD,EAAAA,OAA6C,IAAI,EAC5DE,EAAWF,EAAAA,OAAOF,CAAK,EAE7B,OAAAC,EAAoB,QAAUF,EAC9BK,EAAS,QAAUJ,EAEDK,EAAAA,QAAQ,IAAM,CAC9B,MAAMC,EAAS,IAAM,CACfH,EAAS,UACX,aAAaA,EAAS,OAAO,EAC7BA,EAAS,QAAU,OACrB,EAGII,EAAoB,YAAwBC,EAAc,CAC9DF,EAAA,EACAH,EAAS,QAAU,WAAW,IAAM,CAClCF,EAAoB,QAAQ,MAAM,KAAMO,CAAI,CAAA,EAC3CJ,EAAS,OAAO,CAAA,EAGrB,OAAAG,EAAkB,OAASD,EAEpBC,CAAA,EACN,EAAE,CAGP"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react"),b=require("../useRefState/useRefState.cjs"),d=require("../../utils/helpers/isTarget.cjs"),f=require("../../utils/helpers/getElement.cjs"),v=(...n)=>{const t=d.isTarget(n[0])?n[0]:void 0,e=t?n[1]:n[0],i=e?.enabled??!0,[r,l]=s.useState(),o=b.useRefState(),c=s.useRef(e?.onChange);return c.current=e?.onChange,s.useEffect(()=>{if(!i||!t&&!o.state)return;const u=t?f.getElement(t):o.current;if(!u)return;const g=new IntersectionObserver(([a])=>{l(a),c.current?.(a)},{...e,root:e?.root?f.getElement(e.root):document});return g.observe(u),()=>{g.disconnect()}},[t,o.state,e?.rootMargin,e?.threshold,e?.root,i]),t?{entry:r,inView:!!r?.isIntersecting}:{ref:o,entry:r,inView:!!r?.isIntersecting}};exports.useIntersectionObserver=v;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react"),d=require("../useRefState/useRefState.cjs"),v=require("../../utils/helpers/isTarget.cjs"),b=require("../../utils/helpers/getElement.cjs"),h=(...e)=>{const n=v.isTarget(e[0])?e[0]:void 0,t=n?typeof e[1]=="object"?e[1]:{onChange:e[1]}:typeof e[0]=="object"?e[0]:{onChange:e[0]},c=t?.onChange,i=t?.enabled??!0,[r,a]=s.useState(),o=d.useRefState(),u=s.useRef(c);return u.current=c,s.useEffect(()=>{if(!i||!n&&!o.state)return;const g=n?b.getElement(n):o.current;if(!g)return;const f=new IntersectionObserver(([l])=>{a(l),u.current?.(l)},{...t,root:t?.root?b.getElement(t.root):document});return f.observe(g),()=>{f.disconnect()}},[n,o.state,t?.rootMargin,t?.threshold,t?.root,i]),n?{entry:r,inView:!!r?.isIntersecting}:{ref:o,entry:r,inView:!!r?.isIntersecting}};exports.useIntersectionObserver=h;
2
2
  //# sourceMappingURL=useIntersectionObserver.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useIntersectionObserver.cjs","sources":["../../../../src/hooks/useIntersectionObserver/useIntersectionObserver.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 intersection observer options type */\nexport interface UseIntersectionObserverOptions extends Omit<IntersectionObserverInit, 'root'> {\n enabled?: boolean;\n root?: HookTarget;\n onChange?: (entry: IntersectionObserverEntry) => void;\n}\n\n/** The intersection observer return type */\nexport interface UseIntersectionObserverReturn {\n entry?: IntersectionObserverEntry;\n inView: boolean;\n}\n\nexport interface UseIntersectionObserver {\n <Target extends Element>(\n options?: UseIntersectionObserverOptions,\n target?: never\n ): UseIntersectionObserverReturn & { ref: StateRef<Target> };\n\n (target: HookTarget, options?: UseIntersectionObserverOptions): UseIntersectionObserverReturn;\n}\n\n/**\n * @name useIntersectionObserver\n * @description - Hook that gives you intersection observer state\n * @category Browser\n *\n * @browserapi IntersectionObserver https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver\n *\n * @overload\n * @param {HookTarget} target The target element to detect intersection\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root] The root element to observe\n * @returns {UseIntersectionObserverReturn} An object containing the state\n *\n * @example\n * const { ref, entry, inView } = useIntersectionObserver();\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root] The root element to observe\n * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element\n *\n * @example\n * const { entry, inView } = useIntersectionObserver(ref);\n */\nexport const useIntersectionObserver = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseIntersectionObserverOptions | undefined;\n const enabled = options?.enabled ?? true;\n\n const [entry, setEntry] = useState<IntersectionObserverEntry>();\n\n const internalRef = useRefState<Element>();\n const internalOnChangeRef = useRef<UseIntersectionObserverOptions['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 IntersectionObserver(\n ([entry]) => {\n setEntry(entry);\n internalOnChangeRef.current?.(entry);\n },\n {\n ...options,\n root: options?.root ? (getElement(options.root) as Document | Element) : document\n }\n );\n\n observer.observe(element as Element);\n\n return () => {\n observer.disconnect();\n };\n }, [target, internalRef.state, options?.rootMargin, options?.threshold, options?.root, enabled]);\n\n if (target) return { entry, inView: !!entry?.isIntersecting };\n return {\n ref: internalRef,\n entry,\n inView: !!entry?.isIntersecting\n };\n}) as UseIntersectionObserver;\n"],"names":["useIntersectionObserver","params","target","isTarget","options","enabled","entry","setEntry","useState","internalRef","useRefState","internalOnChangeRef","useRef","useEffect","element","getElement","observer"],"mappings":"mPA2DaA,EAA2B,IAAIC,IAAkB,CAC5D,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACxCI,EAAUD,GAAS,SAAW,GAE9B,CAACE,EAAOC,CAAQ,EAAIC,WAAA,EAEpBC,EAAcC,EAAAA,YAAA,EACdC,EAAsBC,EAAAA,OAAmDR,GAAS,QAAQ,EA2BhG,OA1BAO,EAAoB,QAAUP,GAAS,SAEvCS,EAAAA,UAAU,IAAM,CACd,GAAI,CAACR,GAAY,CAACH,GAAU,CAACO,EAAY,MAAQ,OAEjD,MAAMK,EAAUZ,EAASa,EAAAA,WAAWb,CAAM,EAAIO,EAAY,QAC1D,GAAI,CAACK,EAAS,OAEd,MAAME,EAAW,IAAI,qBACnB,CAAC,CAACV,CAAK,IAAM,CACXC,EAASD,CAAK,EACdK,EAAoB,UAAUL,CAAK,CAAA,EAErC,CACE,GAAGF,EACH,KAAMA,GAAS,KAAQW,EAAAA,WAAWX,EAAQ,IAAI,EAA2B,QAAA,CAC3E,EAGF,OAAAY,EAAS,QAAQF,CAAkB,EAE5B,IAAM,CACXE,EAAS,WAAA,CAAW,CACtB,EACC,CAACd,EAAQO,EAAY,MAAOL,GAAS,WAAYA,GAAS,UAAWA,GAAS,KAAMC,CAAO,CAAC,EAE3FH,EAAe,CAAE,MAAAI,EAAO,OAAQ,CAAC,CAACA,GAAO,cAAA,EACtC,CACL,IAAKG,EACL,MAAAH,EACA,OAAQ,CAAC,CAACA,GAAO,cAAA,CAErB"}
1
+ {"version":3,"file":"useIntersectionObserver.cjs","sources":["../../../../src/hooks/useIntersectionObserver/useIntersectionObserver.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 intersection observer options type */\nexport interface UseIntersectionObserverOptions extends Omit<IntersectionObserverInit, 'root'> {\n enabled?: boolean;\n root?: HookTarget;\n onChange?: (entry: IntersectionObserverEntry) => void;\n}\n\n/** The intersection observer return type */\nexport interface UseIntersectionObserverReturn {\n entry?: IntersectionObserverEntry;\n inView: boolean;\n}\n\nexport interface UseIntersectionObserver {\n <Target extends Element>(\n options?: UseIntersectionObserverOptions,\n target?: never\n ): UseIntersectionObserverReturn & { ref: StateRef<Target> };\n\n (target: HookTarget, options?: UseIntersectionObserverOptions): UseIntersectionObserverReturn;\n\n <Target extends Element>(\n callback: (entry: IntersectionObserverEntry) => void,\n target?: never\n ): UseIntersectionObserverReturn & { ref: StateRef<Target> };\n\n (\n callback: (entry: IntersectionObserverEntry) => void,\n target: HookTarget\n ): UseIntersectionObserverReturn;\n}\n\n/**\n * @name useIntersectionObserver\n * @description - Hook that gives you intersection observer state\n * @category Browser\n *\n * @browserapi IntersectionObserver https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver\n *\n * @overload\n * @param {HookTarget} target The target element to detect intersection\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root=document] The root element to observe\n * @returns {UseIntersectionObserverReturn} An object containing the state\n *\n * @example\n * const { ref, entry, inView } = useIntersectionObserver();\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root=document] The root element to observe\n * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element\n *\n * @example\n * const { entry, inView } = useIntersectionObserver(ref);\n *\n * @overload\n * @template Target The target element\n * @param {(entry: IntersectionObserverEntry) => void} callback The callback to execute when intersection is detected\n * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element\n *\n * @example\n * const { ref, entry, inView } = useIntersectionObserver(() => console.log('callback'));\n *\n * @overload\n * @param {(entry: IntersectionObserverEntry) => void} callback The callback to execute when intersection is detected\n * @param {HookTarget} target The target element to detect intersection\n * @returns {UseIntersectionObserverReturn} An object containing the state\n *\n * @example\n * const { entry, inView } = useIntersectionObserver(() => console.log('callback'), ref);\n */\nexport const useIntersectionObserver = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onChange: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onChange: params[0] }\n ) as UseIntersectionObserverOptions | undefined;\n\n const callback = options?.onChange;\n const enabled = options?.enabled ?? true;\n\n const [entry, setEntry] = useState<IntersectionObserverEntry>();\n\n const internalRef = useRefState<Element>();\n const internalOnChangeRef = useRef<UseIntersectionObserverOptions['onChange']>(callback);\n internalOnChangeRef.current = callback;\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 IntersectionObserver(\n ([entry]) => {\n setEntry(entry);\n internalOnChangeRef.current?.(entry);\n },\n {\n ...options,\n root: options?.root ? (getElement(options.root) as Document | Element) : document\n }\n );\n\n observer.observe(element as Element);\n\n return () => {\n observer.disconnect();\n };\n }, [target, internalRef.state, options?.rootMargin, options?.threshold, options?.root, enabled]);\n\n if (target) return { entry, inView: !!entry?.isIntersecting };\n return {\n ref: internalRef,\n entry,\n inView: !!entry?.isIntersecting\n };\n}) as UseIntersectionObserver;\n"],"names":["useIntersectionObserver","params","target","isTarget","options","callback","enabled","entry","setEntry","useState","internalRef","useRefState","internalOnChangeRef","useRef","useEffect","element","getElement","observer"],"mappings":"mPAqFaA,EAA2B,IAAIC,IAAkB,CAC5D,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAE5CG,EACJF,EACI,OAAOD,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,SAAUA,EAAO,CAAC,CAAA,EACtB,OAAOA,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,SAAUA,EAAO,CAAC,CAAA,EAGtBI,EAAWD,GAAS,SACpBE,EAAUF,GAAS,SAAW,GAE9B,CAACG,EAAOC,CAAQ,EAAIC,WAAA,EAEpBC,EAAcC,EAAAA,YAAA,EACdC,EAAsBC,EAAAA,OAAmDR,CAAQ,EA2BvF,OA1BAO,EAAoB,QAAUP,EAE9BS,EAAAA,UAAU,IAAM,CACd,GAAI,CAACR,GAAY,CAACJ,GAAU,CAACQ,EAAY,MAAQ,OAEjD,MAAMK,EAAUb,EAASc,EAAAA,WAAWd,CAAM,EAAIQ,EAAY,QAC1D,GAAI,CAACK,EAAS,OAEd,MAAME,EAAW,IAAI,qBACnB,CAAC,CAACV,CAAK,IAAM,CACXC,EAASD,CAAK,EACdK,EAAoB,UAAUL,CAAK,CAAA,EAErC,CACE,GAAGH,EACH,KAAMA,GAAS,KAAQY,EAAAA,WAAWZ,EAAQ,IAAI,EAA2B,QAAA,CAC3E,EAGF,OAAAa,EAAS,QAAQF,CAAkB,EAE5B,IAAM,CACXE,EAAS,WAAA,CAAW,CACtB,EACC,CAACf,EAAQQ,EAAY,MAAON,GAAS,WAAYA,GAAS,UAAWA,GAAS,KAAME,CAAO,CAAC,EAE3FJ,EAAe,CAAE,MAAAK,EAAO,OAAQ,CAAC,CAACA,GAAO,cAAA,EACtC,CACL,IAAKG,EACL,MAAAH,EACA,OAAQ,CAAC,CAACA,GAAO,cAAA,CAErB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLatest.cjs","sources":["../../../../src/hooks/useLatest/useLatest.ts"],"sourcesContent":["import type { RefObject } from 'react';\n\nimport { useMemo, useRef } from 'react';\n\nexport interface UseLatestReturn<Value> {\n ref: RefObject<Value>;\n value: Value;\n}\n\n/**\n * @name useLatest\n * @description - Hook that returns the stable reference of the 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 * @returns {UseLatestReturn<Value>} The previous value\n *\n * @example\n * const latestValue = useLatest(value);\n */\nexport const useLatest = <Value>(value: Value): UseLatestReturn<Value> => {\n const valueRef = useRef<Value>(value);\n valueRef.current = value;\n return useMemo(\n () => ({\n get value() {\n return valueRef.current;\n },\n ref: valueRef\n }),\n []\n );\n};\n"],"names":["useLatest","value","valueRef","useRef","useMemo"],"mappings":"yGAqBaA,EAAoBC,GAAyC,CACxE,MAAMC,EAAWC,EAAAA,OAAcF,CAAK,EACpC,OAAAC,EAAS,QAAUD,EACZG,EAAAA,QACL,KAAO,CACL,IAAI,OAAQ,CACV,OAAOF,EAAS,OAAA,EAElB,IAAKA,CAAA,GAEP,CAAA,CAAC,CAEL"}
1
+ {"version":3,"file":"useLatest.cjs","sources":["../../../../src/hooks/useLatest/useLatest.ts"],"sourcesContent":["import type { RefObject } from 'react';\n\nimport { useMemo, useRef } from 'react';\n\nexport interface UseLatestReturn<Value> {\n ref: RefObject<Value>;\n value: Value;\n}\n\n/**\n * @name useLatest\n * @description - Hook that returns the stable reference of the 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 * @returns {UseLatestReturn<Value>} The previous value\n *\n * @example\n * const { value, ref } = useLatest(value);\n */\nexport const useLatest = <Value>(value: Value): UseLatestReturn<Value> => {\n const valueRef = useRef<Value>(value);\n valueRef.current = value;\n return useMemo(\n () => ({\n get value() {\n return valueRef.current;\n },\n ref: valueRef\n }),\n []\n );\n};\n"],"names":["useLatest","value","valueRef","useRef","useMemo"],"mappings":"yGAqBaA,EAAoBC,GAAyC,CACxE,MAAMC,EAAWC,EAAAA,OAAcF,CAAK,EACpC,OAAAC,EAAS,QAAUD,EACZG,EAAAA,QACL,KAAO,CACL,IAAI,OAAQ,CACV,OAAOF,EAAS,OAAA,EAElB,IAAKA,CAAA,GAEP,CAAA,CAAC,CAEL"}
@@ -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 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?.placeholderData);\n\n const [error, setError] = useState<Error | undefined>(undefined);\n const [data, setData] = useState<Data | undefined>(options?.placeholderData);\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 return {\n abort,\n data,\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","retryDelay","interval","useMount","useDidUpdate","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"useQuery.cjs","sources":["../../../../src/hooks/useQuery/useQuery.ts"],"sourcesContent":["import type { DependencyList } from 'react';\r\n\r\nimport { useEffect, useRef, useState } from 'react';\r\n\r\nimport { getRetry } from '@/utils/helpers';\r\n\r\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\r\nimport { useMount } from '../useMount/useMount';\r\n\r\n/* The use query return type */\r\nexport interface UseQueryOptions<QueryData, Data> {\r\n /* The enabled state of the query */\r\n enabled?: boolean;\r\n /* The depends for the hook */\r\n keys?: DependencyList;\r\n /* The placeholder data for the hook */\r\n placeholderData?: (() => Data) | Data;\r\n /* The refetch interval */\r\n refetchInterval?: number;\r\n /* The retry count of requests */\r\n retry?: boolean | number;\r\n /* The retry delay of requests */\r\n retryDelay?: ((retry: number, error: Error) => number) | number;\r\n /* The callback function to be invoked on error */\r\n onError?: (error: Error) => void;\r\n /* The callback function to be invoked on success */\r\n onSuccess?: (data: Data) => void;\r\n /* The select function to be invoked */\r\n select?: (data: QueryData) => Data;\r\n}\r\n\r\ninterface UseQueryCallbackParams {\r\n /* The depends for the hook */\r\n keys: DependencyList;\r\n /* The abort signal */\r\n signal: AbortSignal;\r\n}\r\n\r\n/* The use query return type */\r\nexport interface UseQueryReturn<Data> {\r\n /* The abort function */\r\n abort: AbortController['abort'];\r\n /* The state of the query */\r\n data?: Data;\r\n /* The success state of the query */\r\n error?: Error;\r\n /* The error state of the query */\r\n isError: boolean;\r\n /* The fetching state of the query */\r\n isFetching: boolean;\r\n /* The loading state of the query */\r\n isLoading: boolean;\r\n /* The refetching state of the query */\r\n isRefetching: boolean;\r\n /* The success state of the query */\r\n isSuccess: boolean;\r\n /* The refetch function */\r\n refetch: () => void;\r\n}\r\n\r\n/**\r\n * @name useQuery\r\n * @description - Hook that defines the logic when query data\r\n * @category Utilities\r\n *\r\n * @template Data The type of the data\r\n * @param {() => Promise<Data>} callback The callback function to be invoked\r\n * @param {DependencyList} [options.keys] The dependencies for the hook\r\n * @param {(data: Data) => void} [options.onSuccess] The callback function to be invoked on success\r\n * @param {(error: Error) => void} [options.onError] The callback function to be invoked on error\r\n * @param {UseQueryOptionsSelect<Data>} [options.select] The select function to be invoked\r\n * @param {Data | (() => Data)} [options.initialData] The initial data for the hook\r\n * @param {Data | (() => Data)} [options.placeholderData] The placeholder data for the hook\r\n * @param {number} [options.refetchInterval] The refetch interval\r\n * @param {boolean | number} [options.retry] The retry count of requests\r\n * @returns {UseQueryReturn<Data>} An object with the state of the query\r\n *\r\n * @example\r\n * const { data, isFetching, isLoading, isError, isSuccess, error, refetch, isRefetching, abort, aborted } = useQuery(() => fetch('url'));\r\n */\r\nexport const useQuery = <QueryData, Data = QueryData>(\r\n callback: (params: UseQueryCallbackParams) => Promise<QueryData>,\r\n options?: UseQueryOptions<QueryData, Data>\r\n): UseQueryReturn<Data> => {\r\n const enabled = options?.enabled ?? true;\r\n const retryCountRef = useRef(options?.retry ? getRetry(options.retry) : 0);\r\n const alreadyRequested = useRef(false);\r\n\r\n const [isFetching, setIsFetching] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [isError, setIsError] = useState(false);\r\n const [isRefetching, setIsRefetching] = useState(false);\r\n const [isSuccess, setIsSuccess] = useState(!!options?.placeholderData);\r\n\r\n const [error, setError] = useState<Error | undefined>(undefined);\r\n const [data, setData] = useState<Data | undefined>(options?.placeholderData);\r\n\r\n const abortControllerRef = useRef<AbortController>(new AbortController());\r\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>(undefined);\r\n\r\n const keys = options?.keys ?? [];\r\n\r\n const abort = () => {\r\n abortControllerRef.current.abort();\r\n abortControllerRef.current = new AbortController();\r\n };\r\n\r\n const request = (action: 'init' | 'refetch') => {\r\n abort();\r\n\r\n setIsFetching(true);\r\n if (action === 'init') {\r\n alreadyRequested.current = true;\r\n setIsLoading(true);\r\n }\r\n if (action === 'refetch') setIsRefetching(true);\r\n callback({ signal: abortControllerRef.current.signal, keys })\r\n .then((response) => {\r\n const data = options?.select ? options?.select(response) : response;\r\n options?.onSuccess?.(data as Data);\r\n setData(data as Data);\r\n setIsSuccess(true);\r\n setError(undefined);\r\n setIsError(false);\r\n setIsFetching(false);\r\n if (action === 'init') setIsLoading(false);\r\n if (action === 'refetch') setIsRefetching(false);\r\n })\r\n .catch((error: Error) => {\r\n if (retryCountRef.current > 0) {\r\n retryCountRef.current -= 1;\r\n const retryDelay =\r\n typeof options?.retryDelay === 'function'\r\n ? options?.retryDelay(retryCountRef.current, error)\r\n : options?.retryDelay;\r\n\r\n if (retryDelay) {\r\n setTimeout(() => request(action), retryDelay);\r\n return;\r\n }\r\n\r\n return request(action);\r\n }\r\n options?.onError?.(error);\r\n setData(undefined);\r\n setIsSuccess(false);\r\n setError(error);\r\n setIsError(true);\r\n setIsFetching(false);\r\n if (action === 'init') setIsLoading(false);\r\n if (action === 'refetch') setIsRefetching(false);\r\n retryCountRef.current = options?.retry ? getRetry(options.retry) : 0;\r\n })\r\n .finally(() => {\r\n if (options?.refetchInterval) {\r\n const interval = setInterval(() => {\r\n clearInterval(interval);\r\n request('refetch');\r\n }, options?.refetchInterval);\r\n intervalIdRef.current = interval;\r\n }\r\n });\r\n };\r\n\r\n useMount(() => {\r\n if (!enabled) return;\r\n request('init');\r\n });\r\n\r\n useDidUpdate(() => {\r\n if (!enabled) return;\r\n request(alreadyRequested.current ? 'refetch' : 'init');\r\n }, [enabled, ...keys]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n clearInterval(intervalIdRef.current);\r\n };\r\n }, [enabled, options?.refetchInterval, options?.retry, ...keys]);\r\n\r\n const refetch = () => request('refetch');\r\n\r\n return {\r\n abort,\r\n data,\r\n error,\r\n refetch,\r\n isFetching,\r\n isLoading,\r\n isError,\r\n isSuccess,\r\n isRefetching\r\n };\r\n};\r\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","retryDelay","interval","useMount","useDidUpdate","useEffect"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});function i(t,o){let e;return function(...u){clearTimeout(e),e=setTimeout(()=>t.apply(this,u),o)}}exports.debounce=i;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=(n,o)=>{let e;const t=()=>clearTimeout(e),c=function(...u){t(),e=setTimeout(()=>n.apply(this,u),o)};return c.cancel=t,c};exports.debounce=i;
2
2
  //# sourceMappingURL=debounce.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"debounce.cjs","sources":["../../../../src/utils/helpers/debounce.ts"],"sourcesContent":["export function debounce<Params extends unknown[]>(\n callback: (...args: Params) => void,\n delay: number\n): (...args: Params) => void {\n let timer: ReturnType<typeof setTimeout>;\n\n return function (this: any, ...args: Params) {\n clearTimeout(timer);\n timer = setTimeout(() => callback.apply(this, args), delay);\n };\n}\n"],"names":["debounce","callback","delay","timer","args"],"mappings":"gFAAO,SAASA,EACdC,EACAC,EAC2B,CAC3B,IAAIC,EAEJ,OAAO,YAAwBC,EAAc,CAC3C,aAAaD,CAAK,EAClBA,EAAQ,WAAW,IAAMF,EAAS,MAAM,KAAMG,CAAI,EAAGF,CAAK,CAAA,CAE9D"}
1
+ {"version":3,"file":"debounce.cjs","sources":["../../../../src/utils/helpers/debounce.ts"],"sourcesContent":["type DebouncedCallback<Params extends unknown[]> = ((...args: Params) => void) & {\n cancel: () => void;\n};\n\nexport const debounce = <Params extends unknown[]>(\n callback: (...args: Params) => void,\n delay: number\n): DebouncedCallback<Params> => {\n let timer: ReturnType<typeof setTimeout>;\n\n const cancel = () => clearTimeout(timer);\n\n const debounced = function (this: any, ...args: Params) {\n cancel();\n timer = setTimeout(() => callback.apply(this, args), delay);\n };\n\n debounced.cancel = cancel;\n\n return debounced;\n};\n"],"names":["debounce","callback","delay","timer","cancel","debounced","args"],"mappings":"gFAIO,MAAMA,EAAW,CACtBC,EACAC,IAC8B,CAC9B,IAAIC,EAEJ,MAAMC,EAAS,IAAM,aAAaD,CAAK,EAEjCE,EAAY,YAAwBC,EAAc,CACtDF,EAAA,EACAD,EAAQ,WAAW,IAAMF,EAAS,MAAM,KAAMK,CAAI,EAAGJ,CAAK,CAAA,EAG5D,OAAAG,EAAU,OAASD,EAEZC,CACT"}
@@ -1,11 +1,18 @@
1
- import { useMemo as r } from "react";
2
- import { useEvent as t } from "../useEvent/useEvent.mjs";
3
- import { debounce as c } from "../../utils/helpers/debounce.mjs";
4
- const a = (o, e) => {
5
- const n = t(o);
6
- return r(() => c(n, e), [e]);
1
+ import { useRef as n, useMemo as a } from "react";
2
+ const f = (c, r) => {
3
+ const t = n(c), e = n(null), u = n(r);
4
+ return t.current = c, u.current = r, a(() => {
5
+ const o = () => {
6
+ e.current && (clearTimeout(e.current), e.current = void 0);
7
+ }, s = function(...l) {
8
+ o(), e.current = setTimeout(() => {
9
+ t.current.apply(this, l);
10
+ }, u.current);
11
+ };
12
+ return s.cancel = o, s;
13
+ }, []);
7
14
  };
8
15
  export {
9
- a as useDebounceCallback
16
+ f as useDebounceCallback
10
17
  };
11
18
  //# sourceMappingURL=useDebounceCallback.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDebounceCallback.mjs","sources":["../../../../src/hooks/useDebounceCallback/useDebounceCallback.ts"],"sourcesContent":["import { useMemo } from 'react';\n\nimport { debounce } from '@/utils/helpers';\n\nimport { useEvent } from '../useEvent/useEvent';\n\n/**\n * @name useDebounceCallback\n * @description - Hook that creates a debounced callback\n * @category Utilities\n *\n * @template Params The type of the params\n * @template Return The type of the return\n * @param {(...args: Params) => Return} callback The callback function\n * @param {number} delay The delay in milliseconds\n * @returns {(...args: Params) => Return} The callback with debounce\n *\n * @example\n * const debouncedCallback = useDebounceCallback(() => console.log('callback'), 500);\n */\nexport const useDebounceCallback = <Params extends unknown[], Return>(\n callback: (...args: Params) => Return,\n delay: number\n) => {\n const internalCallback = useEvent(callback);\n const debounced = useMemo(() => debounce(internalCallback, delay), [delay]);\n\n return debounced;\n};\n"],"names":["useDebounceCallback","callback","delay","internalCallback","useEvent","useMemo","debounce"],"mappings":";;;AAoBO,MAAMA,IAAsB,CACjCC,GACAC,MACG;AACH,QAAMC,IAAmBC,EAASH,CAAQ;AAG1C,SAFkBI,EAAQ,MAAMC,EAASH,GAAkBD,CAAK,GAAG,CAACA,CAAK,CAAC;AAG5E;"}
1
+ {"version":3,"file":"useDebounceCallback.mjs","sources":["../../../../src/hooks/useDebounceCallback/useDebounceCallback.ts"],"sourcesContent":["import { useMemo, useRef } from 'react';\n\nexport type DebouncedCallback<Params extends unknown[]> = ((...args: Params) => void) & {\n cancel: () => void;\n};\n\n/**\n * @name useDebounceCallback\n * @description - Hook that creates a debounced callback\n * @category Utilities\n *\n * @template Params The type of the params\n * @template Return The type of the return\n * @param {(...args: Params) => Return} callback The callback function\n * @param {number} delay The delay in milliseconds\n * @returns {(...args: Params) => Return} The callback with debounce\n *\n * @example\n * const debouncedCallback = useDebounceCallback(() => console.log('callback'), 500);\n */\nexport const useDebounceCallback = <Params extends unknown[], Return>(\n callback: (...args: Params) => Return,\n delay: number\n): DebouncedCallback<Params> => {\n const internalCallbackRef = useRef(callback);\n const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null);\n const delayRef = useRef(delay);\n\n internalCallbackRef.current = callback;\n delayRef.current = delay;\n\n const debounced = useMemo(() => {\n const cancel = () => {\n if (timerRef.current) {\n clearTimeout(timerRef.current);\n timerRef.current = undefined as any;\n }\n };\n\n const debouncedCallback = function (this: any, ...args: Params) {\n cancel();\n timerRef.current = setTimeout(() => {\n internalCallbackRef.current.apply(this, args);\n }, delayRef.current);\n };\n\n debouncedCallback.cancel = cancel;\n\n return debouncedCallback;\n }, []);\n\n return debounced;\n};\n"],"names":["useDebounceCallback","callback","delay","internalCallbackRef","useRef","timerRef","delayRef","useMemo","cancel","debouncedCallback","args"],"mappings":";AAoBO,MAAMA,IAAsB,CACjCC,GACAC,MAC8B;AAC9B,QAAMC,IAAsBC,EAAOH,CAAQ,GACrCI,IAAWD,EAA6C,IAAI,GAC5DE,IAAWF,EAAOF,CAAK;AAE7B,SAAAC,EAAoB,UAAUF,GAC9BK,EAAS,UAAUJ,GAEDK,EAAQ,MAAM;AAC9B,UAAMC,IAAS,MAAM;AACnB,MAAIH,EAAS,YACX,aAAaA,EAAS,OAAO,GAC7BA,EAAS,UAAU;AAAA,IACrB,GAGII,IAAoB,YAAwBC,GAAc;AAC9D,MAAAF,EAAA,GACAH,EAAS,UAAU,WAAW,MAAM;AAClC,QAAAF,EAAoB,QAAQ,MAAM,MAAMO,CAAI;AAAA,MAAA,GAC3CJ,EAAS,OAAO;AAAA,IAAA;AAGrB,WAAAG,EAAkB,SAASD,GAEpBC;AAAA,EAAA,GACN,EAAE;AAGP;"}
@@ -1,32 +1,32 @@
1
- import { useState as m, useRef as l, useEffect as b } from "react";
2
- import { useRefState as d } from "../useRefState/useRefState.mjs";
3
- import { isTarget as h } from "../../utils/helpers/isTarget.mjs";
4
- import { getElement as g } from "../../utils/helpers/getElement.mjs";
5
- const w = (...n) => {
6
- const t = h(n[0]) ? n[0] : void 0, e = t ? n[1] : n[0], s = e?.enabled ?? !0, [r, a] = m(), o = d(), i = l(e?.onChange);
7
- return i.current = e?.onChange, b(() => {
8
- if (!s || !t && !o.state) return;
9
- const c = t ? g(t) : o.current;
10
- if (!c) return;
1
+ import { useState as d, useRef as h, useEffect as v } from "react";
2
+ import { useRefState as m } from "../useRefState/useRefState.mjs";
3
+ import { isTarget as C } from "../../utils/helpers/isTarget.mjs";
4
+ import { getElement as b } from "../../utils/helpers/getElement.mjs";
5
+ const y = (...e) => {
6
+ const n = C(e[0]) ? e[0] : void 0, t = n ? typeof e[1] == "object" ? e[1] : { onChange: e[1] } : typeof e[0] == "object" ? e[0] : { onChange: e[0] }, c = t?.onChange, s = t?.enabled ?? !0, [o, l] = d(), r = m(), i = h(c);
7
+ return i.current = c, v(() => {
8
+ if (!s || !n && !r.state) return;
9
+ const f = n ? b(n) : r.current;
10
+ if (!f) return;
11
11
  const u = new IntersectionObserver(
12
- ([f]) => {
13
- a(f), i.current?.(f);
12
+ ([g]) => {
13
+ l(g), i.current?.(g);
14
14
  },
15
15
  {
16
- ...e,
17
- root: e?.root ? g(e.root) : document
16
+ ...t,
17
+ root: t?.root ? b(t.root) : document
18
18
  }
19
19
  );
20
- return u.observe(c), () => {
20
+ return u.observe(f), () => {
21
21
  u.disconnect();
22
22
  };
23
- }, [t, o.state, e?.rootMargin, e?.threshold, e?.root, s]), t ? { entry: r, inView: !!r?.isIntersecting } : {
24
- ref: o,
25
- entry: r,
26
- inView: !!r?.isIntersecting
23
+ }, [n, r.state, t?.rootMargin, t?.threshold, t?.root, s]), n ? { entry: o, inView: !!o?.isIntersecting } : {
24
+ ref: r,
25
+ entry: o,
26
+ inView: !!o?.isIntersecting
27
27
  };
28
28
  };
29
29
  export {
30
- w as useIntersectionObserver
30
+ y as useIntersectionObserver
31
31
  };
32
32
  //# sourceMappingURL=useIntersectionObserver.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useIntersectionObserver.mjs","sources":["../../../../src/hooks/useIntersectionObserver/useIntersectionObserver.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 intersection observer options type */\nexport interface UseIntersectionObserverOptions extends Omit<IntersectionObserverInit, 'root'> {\n enabled?: boolean;\n root?: HookTarget;\n onChange?: (entry: IntersectionObserverEntry) => void;\n}\n\n/** The intersection observer return type */\nexport interface UseIntersectionObserverReturn {\n entry?: IntersectionObserverEntry;\n inView: boolean;\n}\n\nexport interface UseIntersectionObserver {\n <Target extends Element>(\n options?: UseIntersectionObserverOptions,\n target?: never\n ): UseIntersectionObserverReturn & { ref: StateRef<Target> };\n\n (target: HookTarget, options?: UseIntersectionObserverOptions): UseIntersectionObserverReturn;\n}\n\n/**\n * @name useIntersectionObserver\n * @description - Hook that gives you intersection observer state\n * @category Browser\n *\n * @browserapi IntersectionObserver https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver\n *\n * @overload\n * @param {HookTarget} target The target element to detect intersection\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root] The root element to observe\n * @returns {UseIntersectionObserverReturn} An object containing the state\n *\n * @example\n * const { ref, entry, inView } = useIntersectionObserver();\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root] The root element to observe\n * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element\n *\n * @example\n * const { entry, inView } = useIntersectionObserver(ref);\n */\nexport const useIntersectionObserver = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseIntersectionObserverOptions | undefined;\n const enabled = options?.enabled ?? true;\n\n const [entry, setEntry] = useState<IntersectionObserverEntry>();\n\n const internalRef = useRefState<Element>();\n const internalOnChangeRef = useRef<UseIntersectionObserverOptions['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 IntersectionObserver(\n ([entry]) => {\n setEntry(entry);\n internalOnChangeRef.current?.(entry);\n },\n {\n ...options,\n root: options?.root ? (getElement(options.root) as Document | Element) : document\n }\n );\n\n observer.observe(element as Element);\n\n return () => {\n observer.disconnect();\n };\n }, [target, internalRef.state, options?.rootMargin, options?.threshold, options?.root, enabled]);\n\n if (target) return { entry, inView: !!entry?.isIntersecting };\n return {\n ref: internalRef,\n entry,\n inView: !!entry?.isIntersecting\n };\n}) as UseIntersectionObserver;\n"],"names":["useIntersectionObserver","params","target","isTarget","options","enabled","entry","setEntry","useState","internalRef","useRefState","internalOnChangeRef","useRef","useEffect","element","getElement","observer"],"mappings":";;;;AA2DO,MAAMA,IAA2B,IAAIC,MAAkB;AAC5D,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAWF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACxCI,IAAUD,GAAS,WAAW,IAE9B,CAACE,GAAOC,CAAQ,IAAIC,EAAA,GAEpBC,IAAcC,EAAA,GACdC,IAAsBC,EAAmDR,GAAS,QAAQ;AA2BhG,SA1BAO,EAAoB,UAAUP,GAAS,UAEvCS,EAAU,MAAM;AACd,QAAI,CAACR,KAAY,CAACH,KAAU,CAACO,EAAY,MAAQ;AAEjD,UAAMK,IAAUZ,IAASa,EAAWb,CAAM,IAAIO,EAAY;AAC1D,QAAI,CAACK,EAAS;AAEd,UAAME,IAAW,IAAI;AAAA,MACnB,CAAC,CAACV,CAAK,MAAM;AACX,QAAAC,EAASD,CAAK,GACdK,EAAoB,UAAUL,CAAK;AAAA,MAAA;AAAA,MAErC;AAAA,QACE,GAAGF;AAAA,QACH,MAAMA,GAAS,OAAQW,EAAWX,EAAQ,IAAI,IAA2B;AAAA,MAAA;AAAA,IAC3E;AAGF,WAAAY,EAAS,QAAQF,CAAkB,GAE5B,MAAM;AACX,MAAAE,EAAS,WAAA;AAAA,IAAW;AAAA,EACtB,GACC,CAACd,GAAQO,EAAY,OAAOL,GAAS,YAAYA,GAAS,WAAWA,GAAS,MAAMC,CAAO,CAAC,GAE3FH,IAAe,EAAE,OAAAI,GAAO,QAAQ,CAAC,CAACA,GAAO,eAAA,IACtC;AAAA,IACL,KAAKG;AAAA,IACL,OAAAH;AAAA,IACA,QAAQ,CAAC,CAACA,GAAO;AAAA,EAAA;AAErB;"}
1
+ {"version":3,"file":"useIntersectionObserver.mjs","sources":["../../../../src/hooks/useIntersectionObserver/useIntersectionObserver.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 intersection observer options type */\nexport interface UseIntersectionObserverOptions extends Omit<IntersectionObserverInit, 'root'> {\n enabled?: boolean;\n root?: HookTarget;\n onChange?: (entry: IntersectionObserverEntry) => void;\n}\n\n/** The intersection observer return type */\nexport interface UseIntersectionObserverReturn {\n entry?: IntersectionObserverEntry;\n inView: boolean;\n}\n\nexport interface UseIntersectionObserver {\n <Target extends Element>(\n options?: UseIntersectionObserverOptions,\n target?: never\n ): UseIntersectionObserverReturn & { ref: StateRef<Target> };\n\n (target: HookTarget, options?: UseIntersectionObserverOptions): UseIntersectionObserverReturn;\n\n <Target extends Element>(\n callback: (entry: IntersectionObserverEntry) => void,\n target?: never\n ): UseIntersectionObserverReturn & { ref: StateRef<Target> };\n\n (\n callback: (entry: IntersectionObserverEntry) => void,\n target: HookTarget\n ): UseIntersectionObserverReturn;\n}\n\n/**\n * @name useIntersectionObserver\n * @description - Hook that gives you intersection observer state\n * @category Browser\n *\n * @browserapi IntersectionObserver https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver\n *\n * @overload\n * @param {HookTarget} target The target element to detect intersection\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root=document] The root element to observe\n * @returns {UseIntersectionObserverReturn} An object containing the state\n *\n * @example\n * const { ref, entry, inView } = useIntersectionObserver();\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root=document] The root element to observe\n * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element\n *\n * @example\n * const { entry, inView } = useIntersectionObserver(ref);\n *\n * @overload\n * @template Target The target element\n * @param {(entry: IntersectionObserverEntry) => void} callback The callback to execute when intersection is detected\n * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element\n *\n * @example\n * const { ref, entry, inView } = useIntersectionObserver(() => console.log('callback'));\n *\n * @overload\n * @param {(entry: IntersectionObserverEntry) => void} callback The callback to execute when intersection is detected\n * @param {HookTarget} target The target element to detect intersection\n * @returns {UseIntersectionObserverReturn} An object containing the state\n *\n * @example\n * const { entry, inView } = useIntersectionObserver(() => console.log('callback'), ref);\n */\nexport const useIntersectionObserver = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onChange: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onChange: params[0] }\n ) as UseIntersectionObserverOptions | undefined;\n\n const callback = options?.onChange;\n const enabled = options?.enabled ?? true;\n\n const [entry, setEntry] = useState<IntersectionObserverEntry>();\n\n const internalRef = useRefState<Element>();\n const internalOnChangeRef = useRef<UseIntersectionObserverOptions['onChange']>(callback);\n internalOnChangeRef.current = callback;\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 IntersectionObserver(\n ([entry]) => {\n setEntry(entry);\n internalOnChangeRef.current?.(entry);\n },\n {\n ...options,\n root: options?.root ? (getElement(options.root) as Document | Element) : document\n }\n );\n\n observer.observe(element as Element);\n\n return () => {\n observer.disconnect();\n };\n }, [target, internalRef.state, options?.rootMargin, options?.threshold, options?.root, enabled]);\n\n if (target) return { entry, inView: !!entry?.isIntersecting };\n return {\n ref: internalRef,\n entry,\n inView: !!entry?.isIntersecting\n };\n}) as UseIntersectionObserver;\n"],"names":["useIntersectionObserver","params","target","isTarget","options","callback","enabled","entry","setEntry","useState","internalRef","useRefState","internalOnChangeRef","useRef","useEffect","element","getElement","observer"],"mappings":";;;;AAqFO,MAAMA,IAA2B,IAAIC,MAAkB;AAC5D,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAE5CG,IACJF,IACI,OAAOD,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,UAAUA,EAAO,CAAC,EAAA,IACtB,OAAOA,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,UAAUA,EAAO,CAAC,EAAA,GAGtBI,IAAWD,GAAS,UACpBE,IAAUF,GAAS,WAAW,IAE9B,CAACG,GAAOC,CAAQ,IAAIC,EAAA,GAEpBC,IAAcC,EAAA,GACdC,IAAsBC,EAAmDR,CAAQ;AA2BvF,SA1BAO,EAAoB,UAAUP,GAE9BS,EAAU,MAAM;AACd,QAAI,CAACR,KAAY,CAACJ,KAAU,CAACQ,EAAY,MAAQ;AAEjD,UAAMK,IAAUb,IAASc,EAAWd,CAAM,IAAIQ,EAAY;AAC1D,QAAI,CAACK,EAAS;AAEd,UAAME,IAAW,IAAI;AAAA,MACnB,CAAC,CAACV,CAAK,MAAM;AACX,QAAAC,EAASD,CAAK,GACdK,EAAoB,UAAUL,CAAK;AAAA,MAAA;AAAA,MAErC;AAAA,QACE,GAAGH;AAAA,QACH,MAAMA,GAAS,OAAQY,EAAWZ,EAAQ,IAAI,IAA2B;AAAA,MAAA;AAAA,IAC3E;AAGF,WAAAa,EAAS,QAAQF,CAAkB,GAE5B,MAAM;AACX,MAAAE,EAAS,WAAA;AAAA,IAAW;AAAA,EACtB,GACC,CAACf,GAAQQ,EAAY,OAAON,GAAS,YAAYA,GAAS,WAAWA,GAAS,MAAME,CAAO,CAAC,GAE3FJ,IAAe,EAAE,OAAAK,GAAO,QAAQ,CAAC,CAACA,GAAO,eAAA,IACtC;AAAA,IACL,KAAKG;AAAA,IACL,OAAAH;AAAA,IACA,QAAQ,CAAC,CAACA,GAAO;AAAA,EAAA;AAErB;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLatest.mjs","sources":["../../../../src/hooks/useLatest/useLatest.ts"],"sourcesContent":["import type { RefObject } from 'react';\n\nimport { useMemo, useRef } from 'react';\n\nexport interface UseLatestReturn<Value> {\n ref: RefObject<Value>;\n value: Value;\n}\n\n/**\n * @name useLatest\n * @description - Hook that returns the stable reference of the 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 * @returns {UseLatestReturn<Value>} The previous value\n *\n * @example\n * const latestValue = useLatest(value);\n */\nexport const useLatest = <Value>(value: Value): UseLatestReturn<Value> => {\n const valueRef = useRef<Value>(value);\n valueRef.current = value;\n return useMemo(\n () => ({\n get value() {\n return valueRef.current;\n },\n ref: valueRef\n }),\n []\n );\n};\n"],"names":["useLatest","value","valueRef","useRef","useMemo"],"mappings":";AAqBO,MAAMA,IAAY,CAAQC,MAAyC;AACxE,QAAMC,IAAWC,EAAcF,CAAK;AACpC,SAAAC,EAAS,UAAUD,GACZG;AAAA,IACL,OAAO;AAAA,MACL,IAAI,QAAQ;AACV,eAAOF,EAAS;AAAA,MAAA;AAAA,MAElB,KAAKA;AAAA,IAAA;AAAA,IAEP,CAAA;AAAA,EAAC;AAEL;"}
1
+ {"version":3,"file":"useLatest.mjs","sources":["../../../../src/hooks/useLatest/useLatest.ts"],"sourcesContent":["import type { RefObject } from 'react';\n\nimport { useMemo, useRef } from 'react';\n\nexport interface UseLatestReturn<Value> {\n ref: RefObject<Value>;\n value: Value;\n}\n\n/**\n * @name useLatest\n * @description - Hook that returns the stable reference of the 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 * @returns {UseLatestReturn<Value>} The previous value\n *\n * @example\n * const { value, ref } = useLatest(value);\n */\nexport const useLatest = <Value>(value: Value): UseLatestReturn<Value> => {\n const valueRef = useRef<Value>(value);\n valueRef.current = value;\n return useMemo(\n () => ({\n get value() {\n return valueRef.current;\n },\n ref: valueRef\n }),\n []\n );\n};\n"],"names":["useLatest","value","valueRef","useRef","useMemo"],"mappings":";AAqBO,MAAMA,IAAY,CAAQC,MAAyC;AACxE,QAAMC,IAAWC,EAAcF,CAAK;AACpC,SAAAC,EAAS,UAAUD,GACZG;AAAA,IACL,OAAO;AAAA,MACL,IAAI,QAAQ;AACV,eAAOF,EAAS;AAAA,MAAA;AAAA,MAElB,KAAKA;AAAA,IAAA;AAAA,IAEP,CAAA;AAAA,EAAC;AAEL;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useQuery.mjs","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 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?.placeholderData);\n\n const [error, setError] = useState<Error | undefined>(undefined);\n const [data, setData] = useState<Data | undefined>(options?.placeholderData);\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 return {\n abort,\n data,\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","retryDelay","interval","useMount","useDidUpdate","useEffect"],"mappings":"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"}
1
+ {"version":3,"file":"useQuery.mjs","sources":["../../../../src/hooks/useQuery/useQuery.ts"],"sourcesContent":["import type { DependencyList } from 'react';\r\n\r\nimport { useEffect, useRef, useState } from 'react';\r\n\r\nimport { getRetry } from '@/utils/helpers';\r\n\r\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\r\nimport { useMount } from '../useMount/useMount';\r\n\r\n/* The use query return type */\r\nexport interface UseQueryOptions<QueryData, Data> {\r\n /* The enabled state of the query */\r\n enabled?: boolean;\r\n /* The depends for the hook */\r\n keys?: DependencyList;\r\n /* The placeholder data for the hook */\r\n placeholderData?: (() => Data) | Data;\r\n /* The refetch interval */\r\n refetchInterval?: number;\r\n /* The retry count of requests */\r\n retry?: boolean | number;\r\n /* The retry delay of requests */\r\n retryDelay?: ((retry: number, error: Error) => number) | number;\r\n /* The callback function to be invoked on error */\r\n onError?: (error: Error) => void;\r\n /* The callback function to be invoked on success */\r\n onSuccess?: (data: Data) => void;\r\n /* The select function to be invoked */\r\n select?: (data: QueryData) => Data;\r\n}\r\n\r\ninterface UseQueryCallbackParams {\r\n /* The depends for the hook */\r\n keys: DependencyList;\r\n /* The abort signal */\r\n signal: AbortSignal;\r\n}\r\n\r\n/* The use query return type */\r\nexport interface UseQueryReturn<Data> {\r\n /* The abort function */\r\n abort: AbortController['abort'];\r\n /* The state of the query */\r\n data?: Data;\r\n /* The success state of the query */\r\n error?: Error;\r\n /* The error state of the query */\r\n isError: boolean;\r\n /* The fetching state of the query */\r\n isFetching: boolean;\r\n /* The loading state of the query */\r\n isLoading: boolean;\r\n /* The refetching state of the query */\r\n isRefetching: boolean;\r\n /* The success state of the query */\r\n isSuccess: boolean;\r\n /* The refetch function */\r\n refetch: () => void;\r\n}\r\n\r\n/**\r\n * @name useQuery\r\n * @description - Hook that defines the logic when query data\r\n * @category Utilities\r\n *\r\n * @template Data The type of the data\r\n * @param {() => Promise<Data>} callback The callback function to be invoked\r\n * @param {DependencyList} [options.keys] The dependencies for the hook\r\n * @param {(data: Data) => void} [options.onSuccess] The callback function to be invoked on success\r\n * @param {(error: Error) => void} [options.onError] The callback function to be invoked on error\r\n * @param {UseQueryOptionsSelect<Data>} [options.select] The select function to be invoked\r\n * @param {Data | (() => Data)} [options.initialData] The initial data for the hook\r\n * @param {Data | (() => Data)} [options.placeholderData] The placeholder data for the hook\r\n * @param {number} [options.refetchInterval] The refetch interval\r\n * @param {boolean | number} [options.retry] The retry count of requests\r\n * @returns {UseQueryReturn<Data>} An object with the state of the query\r\n *\r\n * @example\r\n * const { data, isFetching, isLoading, isError, isSuccess, error, refetch, isRefetching, abort, aborted } = useQuery(() => fetch('url'));\r\n */\r\nexport const useQuery = <QueryData, Data = QueryData>(\r\n callback: (params: UseQueryCallbackParams) => Promise<QueryData>,\r\n options?: UseQueryOptions<QueryData, Data>\r\n): UseQueryReturn<Data> => {\r\n const enabled = options?.enabled ?? true;\r\n const retryCountRef = useRef(options?.retry ? getRetry(options.retry) : 0);\r\n const alreadyRequested = useRef(false);\r\n\r\n const [isFetching, setIsFetching] = useState(false);\r\n const [isLoading, setIsLoading] = useState(false);\r\n const [isError, setIsError] = useState(false);\r\n const [isRefetching, setIsRefetching] = useState(false);\r\n const [isSuccess, setIsSuccess] = useState(!!options?.placeholderData);\r\n\r\n const [error, setError] = useState<Error | undefined>(undefined);\r\n const [data, setData] = useState<Data | undefined>(options?.placeholderData);\r\n\r\n const abortControllerRef = useRef<AbortController>(new AbortController());\r\n const intervalIdRef = useRef<ReturnType<typeof setInterval>>(undefined);\r\n\r\n const keys = options?.keys ?? [];\r\n\r\n const abort = () => {\r\n abortControllerRef.current.abort();\r\n abortControllerRef.current = new AbortController();\r\n };\r\n\r\n const request = (action: 'init' | 'refetch') => {\r\n abort();\r\n\r\n setIsFetching(true);\r\n if (action === 'init') {\r\n alreadyRequested.current = true;\r\n setIsLoading(true);\r\n }\r\n if (action === 'refetch') setIsRefetching(true);\r\n callback({ signal: abortControllerRef.current.signal, keys })\r\n .then((response) => {\r\n const data = options?.select ? options?.select(response) : response;\r\n options?.onSuccess?.(data as Data);\r\n setData(data as Data);\r\n setIsSuccess(true);\r\n setError(undefined);\r\n setIsError(false);\r\n setIsFetching(false);\r\n if (action === 'init') setIsLoading(false);\r\n if (action === 'refetch') setIsRefetching(false);\r\n })\r\n .catch((error: Error) => {\r\n if (retryCountRef.current > 0) {\r\n retryCountRef.current -= 1;\r\n const retryDelay =\r\n typeof options?.retryDelay === 'function'\r\n ? options?.retryDelay(retryCountRef.current, error)\r\n : options?.retryDelay;\r\n\r\n if (retryDelay) {\r\n setTimeout(() => request(action), retryDelay);\r\n return;\r\n }\r\n\r\n return request(action);\r\n }\r\n options?.onError?.(error);\r\n setData(undefined);\r\n setIsSuccess(false);\r\n setError(error);\r\n setIsError(true);\r\n setIsFetching(false);\r\n if (action === 'init') setIsLoading(false);\r\n if (action === 'refetch') setIsRefetching(false);\r\n retryCountRef.current = options?.retry ? getRetry(options.retry) : 0;\r\n })\r\n .finally(() => {\r\n if (options?.refetchInterval) {\r\n const interval = setInterval(() => {\r\n clearInterval(interval);\r\n request('refetch');\r\n }, options?.refetchInterval);\r\n intervalIdRef.current = interval;\r\n }\r\n });\r\n };\r\n\r\n useMount(() => {\r\n if (!enabled) return;\r\n request('init');\r\n });\r\n\r\n useDidUpdate(() => {\r\n if (!enabled) return;\r\n request(alreadyRequested.current ? 'refetch' : 'init');\r\n }, [enabled, ...keys]);\r\n\r\n useEffect(() => {\r\n return () => {\r\n clearInterval(intervalIdRef.current);\r\n };\r\n }, [enabled, options?.refetchInterval, options?.retry, ...keys]);\r\n\r\n const refetch = () => request('refetch');\r\n\r\n return {\r\n abort,\r\n data,\r\n error,\r\n refetch,\r\n isFetching,\r\n isLoading,\r\n isError,\r\n isSuccess,\r\n isRefetching\r\n };\r\n};\r\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","retryDelay","interval","useMount","useDidUpdate","useEffect"],"mappings":"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"}
@@ -1,10 +1,11 @@
1
- function o(t, i) {
1
+ const i = (n, o) => {
2
2
  let e;
3
- return function(...n) {
4
- clearTimeout(e), e = setTimeout(() => t.apply(this, n), i);
3
+ const t = () => clearTimeout(e), c = function(...u) {
4
+ t(), e = setTimeout(() => n.apply(this, u), o);
5
5
  };
6
- }
6
+ return c.cancel = t, c;
7
+ };
7
8
  export {
8
- o as debounce
9
+ i as debounce
9
10
  };
10
11
  //# sourceMappingURL=debounce.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"debounce.mjs","sources":["../../../../src/utils/helpers/debounce.ts"],"sourcesContent":["export function debounce<Params extends unknown[]>(\n callback: (...args: Params) => void,\n delay: number\n): (...args: Params) => void {\n let timer: ReturnType<typeof setTimeout>;\n\n return function (this: any, ...args: Params) {\n clearTimeout(timer);\n timer = setTimeout(() => callback.apply(this, args), delay);\n };\n}\n"],"names":["debounce","callback","delay","timer","args"],"mappings":"AAAO,SAASA,EACdC,GACAC,GAC2B;AAC3B,MAAIC;AAEJ,SAAO,YAAwBC,GAAc;AAC3C,iBAAaD,CAAK,GAClBA,IAAQ,WAAW,MAAMF,EAAS,MAAM,MAAMG,CAAI,GAAGF,CAAK;AAAA,EAAA;AAE9D;"}
1
+ {"version":3,"file":"debounce.mjs","sources":["../../../../src/utils/helpers/debounce.ts"],"sourcesContent":["type DebouncedCallback<Params extends unknown[]> = ((...args: Params) => void) & {\n cancel: () => void;\n};\n\nexport const debounce = <Params extends unknown[]>(\n callback: (...args: Params) => void,\n delay: number\n): DebouncedCallback<Params> => {\n let timer: ReturnType<typeof setTimeout>;\n\n const cancel = () => clearTimeout(timer);\n\n const debounced = function (this: any, ...args: Params) {\n cancel();\n timer = setTimeout(() => callback.apply(this, args), delay);\n };\n\n debounced.cancel = cancel;\n\n return debounced;\n};\n"],"names":["debounce","callback","delay","timer","cancel","debounced","args"],"mappings":"AAIO,MAAMA,IAAW,CACtBC,GACAC,MAC8B;AAC9B,MAAIC;AAEJ,QAAMC,IAAS,MAAM,aAAaD,CAAK,GAEjCE,IAAY,YAAwBC,GAAc;AACtD,IAAAF,EAAA,GACAD,IAAQ,WAAW,MAAMF,EAAS,MAAM,MAAMK,CAAI,GAAGJ,CAAK;AAAA,EAAA;AAG5D,SAAAG,EAAU,SAASD,GAEZC;AACT;"}
@@ -1,3 +1,6 @@
1
+ export type DebouncedCallback<Params extends unknown[]> = ((...args: Params) => void) & {
2
+ cancel: () => void;
3
+ };
1
4
  /**
2
5
  * @name useDebounceCallback
3
6
  * @description - Hook that creates a debounced callback
@@ -12,4 +15,4 @@
12
15
  * @example
13
16
  * const debouncedCallback = useDebounceCallback(() => console.log('callback'), 500);
14
17
  */
15
- export declare const useDebounceCallback: <Params extends unknown[], Return>(callback: (...args: Params) => Return, delay: number) => (...args: Params) => void;
18
+ export declare const useDebounceCallback: <Params extends unknown[], Return>(callback: (...args: Params) => Return, delay: number) => DebouncedCallback<Params>;
@@ -16,6 +16,10 @@ export interface UseIntersectionObserver {
16
16
  ref: StateRef<Target>;
17
17
  };
18
18
  (target: HookTarget, options?: UseIntersectionObserverOptions): UseIntersectionObserverReturn;
19
+ <Target extends Element>(callback: (entry: IntersectionObserverEntry) => void, target?: never): UseIntersectionObserverReturn & {
20
+ ref: StateRef<Target>;
21
+ };
22
+ (callback: (entry: IntersectionObserverEntry) => void, target: HookTarget): UseIntersectionObserverReturn;
19
23
  }
20
24
  /**
21
25
  * @name useIntersectionObserver
@@ -28,7 +32,7 @@ export interface UseIntersectionObserver {
28
32
  * @param {HookTarget} target The target element to detect intersection
29
33
  * @param {boolean} [options.enabled=true] The IntersectionObserver options
30
34
  * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected
31
- * @param {HookTarget} [options.root] The root element to observe
35
+ * @param {HookTarget} [options.root=document] The root element to observe
32
36
  * @returns {UseIntersectionObserverReturn} An object containing the state
33
37
  *
34
38
  * @example
@@ -38,10 +42,26 @@ export interface UseIntersectionObserver {
38
42
  * @template Target The target element
39
43
  * @param {boolean} [options.enabled=true] The IntersectionObserver options
40
44
  * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected
41
- * @param {HookTarget} [options.root] The root element to observe
45
+ * @param {HookTarget} [options.root=document] The root element to observe
42
46
  * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element
43
47
  *
44
48
  * @example
45
49
  * const { entry, inView } = useIntersectionObserver(ref);
50
+ *
51
+ * @overload
52
+ * @template Target The target element
53
+ * @param {(entry: IntersectionObserverEntry) => void} callback The callback to execute when intersection is detected
54
+ * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element
55
+ *
56
+ * @example
57
+ * const { ref, entry, inView } = useIntersectionObserver(() => console.log('callback'));
58
+ *
59
+ * @overload
60
+ * @param {(entry: IntersectionObserverEntry) => void} callback The callback to execute when intersection is detected
61
+ * @param {HookTarget} target The target element to detect intersection
62
+ * @returns {UseIntersectionObserverReturn} An object containing the state
63
+ *
64
+ * @example
65
+ * const { entry, inView } = useIntersectionObserver(() => console.log('callback'), ref);
46
66
  */
47
67
  export declare const useIntersectionObserver: UseIntersectionObserver;
@@ -13,6 +13,6 @@ export interface UseLatestReturn<Value> {
13
13
  * @returns {UseLatestReturn<Value>} The previous value
14
14
  *
15
15
  * @example
16
- * const latestValue = useLatest(value);
16
+ * const { value, ref } = useLatest(value);
17
17
  */
18
18
  export declare const useLatest: <Value>(value: Value) => UseLatestReturn<Value>;
@@ -1 +1,5 @@
1
- export declare function debounce<Params extends unknown[]>(callback: (...args: Params) => void, delay: number): (...args: Params) => void;
1
+ type DebouncedCallback<Params extends unknown[]> = ((...args: Params) => void) & {
2
+ cancel: () => void;
3
+ };
4
+ export declare const debounce: <Params extends unknown[]>(callback: (...args: Params) => void, delay: number) => DebouncedCallback<Params>;
5
+ export {};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@siberiacancode/reactuse",
3
- "version": "0.2.13",
3
+ "version": "0.2.15",
4
4
  "description": "The ultimate collection of react hooks",
5
5
  "author": {
6
6
  "name": "SIBERIA CAN CODE 🧊",
@@ -51,9 +51,9 @@
51
51
  "lint-staged": "lint-staged"
52
52
  },
53
53
  "peerDependencies": {
54
- "@types/react": "^18",
55
- "react": "^17 || ^18 || ^19",
56
- "react-dom": "^17 || ^18 || ^19"
54
+ "@types/react": "^18 || ^19",
55
+ "react": "^18 || ^19",
56
+ "react-dom": "^18 || ^19"
57
57
  },
58
58
  "peerDependenciesMeta": {
59
59
  "@types/react": {