@siberiacancode/reactuse 0.2.23 → 0.2.24

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.
Files changed (46) hide show
  1. package/dist/cjs/hooks/useAudio/useAudio.cjs.map +1 -1
  2. package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs +2 -0
  3. package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs.map +1 -0
  4. package/dist/cjs/hooks/useBattery/useBattery.cjs.map +1 -1
  5. package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs +1 -1
  6. package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
  7. package/dist/cjs/hooks/useEvent/useEvent.cjs +1 -1
  8. package/dist/cjs/hooks/useEvent/useEvent.cjs.map +1 -1
  9. package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs +1 -1
  10. package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs.map +1 -1
  11. package/dist/cjs/hooks/useKeyboard/useKeyboard.cjs +1 -1
  12. package/dist/cjs/hooks/useKeyboard/useKeyboard.cjs.map +1 -1
  13. package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs.map +1 -1
  14. package/dist/cjs/hooks/useLockCallback/useLockCallback.cjs +1 -1
  15. package/dist/cjs/hooks/useLockCallback/useLockCallback.cjs.map +1 -1
  16. package/dist/cjs/hooks/useMemory/useMemory.cjs.map +1 -1
  17. package/dist/cjs/hooks/useScroll/useScroll.cjs.map +1 -1
  18. package/dist/cjs/hooks/useWindowEvent/useWindowEvent.cjs.map +1 -1
  19. package/dist/cjs/hooks/useWindowScroll/useWindowScroll.cjs.map +1 -1
  20. package/dist/cjs/index.cjs +1 -1
  21. package/dist/esm/hooks/useAudio/useAudio.mjs.map +1 -1
  22. package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs +39 -0
  23. package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs.map +1 -0
  24. package/dist/esm/hooks/useBattery/useBattery.mjs.map +1 -1
  25. package/dist/esm/hooks/useClickOutside/useClickOutside.mjs +12 -12
  26. package/dist/esm/hooks/useClickOutside/useClickOutside.mjs.map +1 -1
  27. package/dist/esm/hooks/useEvent/useEvent.mjs +6 -6
  28. package/dist/esm/hooks/useEvent/useEvent.mjs.map +1 -1
  29. package/dist/esm/hooks/useKeyPress/useKeyPress.mjs.map +1 -1
  30. package/dist/esm/hooks/useKeyboard/useKeyboard.mjs +15 -15
  31. package/dist/esm/hooks/useKeyboard/useKeyboard.mjs.map +1 -1
  32. package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs.map +1 -1
  33. package/dist/esm/hooks/useLockCallback/useLockCallback.mjs.map +1 -1
  34. package/dist/esm/hooks/useMemory/useMemory.mjs.map +1 -1
  35. package/dist/esm/hooks/useScroll/useScroll.mjs.map +1 -1
  36. package/dist/esm/hooks/useWindowEvent/useWindowEvent.mjs.map +1 -1
  37. package/dist/esm/hooks/useWindowScroll/useWindowScroll.mjs.map +1 -1
  38. package/dist/esm/index.mjs +336 -334
  39. package/dist/esm/index.mjs.map +1 -1
  40. package/dist/types/hooks/index.d.ts +1 -0
  41. package/dist/types/hooks/useAutoScroll/useAutoScroll.d.ts +33 -0
  42. package/dist/types/hooks/useKeyPress/useKeyPress.d.ts +1 -1
  43. package/dist/types/hooks/useKeyboard/useKeyboard.d.ts +28 -8
  44. package/dist/types/hooks/useWindowEvent/useWindowEvent.d.ts +1 -1
  45. package/dist/types/hooks/useWindowScroll/useWindowScroll.d.ts +1 -1
  46. package/package.json +89 -89
@@ -1 +1 @@
1
- {"version":3,"file":"useAudio.cjs","sources":["../../../../src/hooks/useAudio/useAudio.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\n/** Type sprite map */\nexport interface SpriteMap {\n /** [start time in seconds, end time in seconds] */\n [key: string]: [number, number];\n}\n\n/** Type use audio options */\nexport interface UseAudioOptions {\n /** Whether audio playback is initially enabled */\n immediately?: boolean;\n /** Whether to stop current playback when starting a new one */\n interrupt?: boolean;\n /** Initial playback speed (0.5 to 2) */\n playbackRate?: number;\n /** Map of named audio segments for sprite-based playback */\n sprite?: SpriteMap;\n /** Initial volume level (0 to 1) */\n volume?: number;\n}\n\n/** Type use audio return type */\nexport interface UseAudioReturn {\n /** Current playback speed (0.5 to 2) */\n playbackRate: number;\n /** Whether audio is currently playing */\n playing: boolean;\n /** Current volume level (0 to 1) */\n volume: number;\n /** Set playback speed (0.5 to 2) */\n changePlaybackRate: (value: number) => void;\n /** Pause audio playback at current position */\n pause: () => void;\n /** Start audio playback from the beginning or specified sprite segment */\n play: (sprite?: string) => Promise<void>;\n /** Set audio volume level (0 to 1) */\n setVolume: (value: number) => void;\n /** Stop audio playback and reset position to start */\n stop: () => void;\n}\n\n/**\n * @name useAudio\n * @description - Hook that manages audio playback with sprite support\n * @category Browser\n *\n * @browserapi Audio https://developer.mozilla.org/en-US/docs/Web/API/Audio\n *\n * @template Value The type of the value\n * @param {string} url The URL of the audio file to play\n * @param {UseAudioOptions} [options] Audio configuration options\n * @param {number} [options.volume=1] Initial volume level (0 to 1)\n * @param {number} [options.playbackRate=1] Initial playback speed (0.5 to 2)\n * @param {boolean} [options.interrupt=false] Whether to stop current playback when starting a new one\n * @param {boolean} [options.soundEnabled=true] Whether audio playback is initially enabled\n * @param {SpriteMap} [options.sprite] Map of named audio segments for sprite-based playback\n * @returns {UseAudioReturn} An object containing audio controls and state\n *\n * @example\n * const audio = useAudio(\"/path/to/sound.mp3\");\n */\nexport const useAudio = (\n src: string,\n options: UseAudioOptions = {}\n): UseAudioReturn => {\n const [playing, setPlaying] = useState(false);\n const [volume, setCurrentVolume] = useState(options.volume ?? 1);\n const [playbackRate, setPlaybackRate] = useState(options.playbackRate ?? 1);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n\n useEffect(() => {\n const audio = new Audio(src);\n\n audio.volume = volume;\n audio.playbackRate = playbackRate;\n audioRef.current = audio;\n\n if (options.immediately) audio.play();\n\n const onPlay = () => setPlaying(true);\n const onPause = () => setPlaying(false);\n const onEnded = () => setPlaying(false);\n const onTimeUpdate = () => {};\n const onVolumeChange = () => setCurrentVolume(audio.volume);\n const onRateChange = () => setPlaybackRate(audio.playbackRate);\n\n audio.addEventListener(\"play\", onPlay);\n audio.addEventListener(\"pause\", onPause);\n audio.addEventListener(\"ended\", onEnded);\n audio.addEventListener(\"timeupdate\", onTimeUpdate);\n audio.addEventListener(\"volumechange\", onVolumeChange);\n audio.addEventListener(\"ratechange\", onRateChange);\n\n return () => {\n audio.removeEventListener(\"play\", onPlay);\n audio.removeEventListener(\"pause\", onPause);\n audio.removeEventListener(\"ended\", onEnded);\n audio.removeEventListener(\"timeupdate\", onTimeUpdate);\n audio.removeEventListener(\"volumechange\", onVolumeChange);\n audio.removeEventListener(\"ratechange\", onRateChange);\n\n audio.pause();\n audio.remove();\n };\n }, [src]);\n\n const stop = () => {\n if (!audioRef.current) return;\n audioRef.current.pause();\n audioRef.current.currentTime = 0;\n };\n\n const play = async (spriteName?: string) => {\n if (!audioRef.current) return;\n if (options.interrupt) stop();\n\n if (!spriteName || !options.sprite?.[spriteName]) {\n await audioRef.current.play();\n return;\n }\n\n const [start, end] = options.sprite[spriteName];\n audioRef.current.currentTime = start;\n await audioRef.current.play();\n\n const checkTime = () => {\n if (!audioRef.current) return;\n if (audioRef.current.currentTime >= end) {\n stop();\n }\n\n if (!playing) return;\n\n requestAnimationFrame(checkTime);\n };\n\n requestAnimationFrame(checkTime);\n };\n\n const pause = () => audioRef.current?.pause();\n\n const setVolume = (value: number) => {\n if (!audioRef.current) return;\n const newVolume = Math.max(0, Math.min(1, value));\n audioRef.current.volume = newVolume;\n setCurrentVolume(newVolume);\n };\n\n const changePlaybackRate = (value: number) => {\n if (!audioRef.current) return;\n const newRate = Math.max(0.5, Math.min(2, value));\n audioRef.current.playbackRate = newRate;\n setPlaybackRate(newRate);\n };\n\n return {\n play,\n pause,\n stop,\n playing,\n setVolume,\n volume,\n changePlaybackRate,\n playbackRate,\n };\n};\n"],"names":["useAudio","src","options","playing","setPlaying","useState","volume","setCurrentVolume","playbackRate","setPlaybackRate","audioRef","useRef","useEffect","audio","onPlay","onPause","onEnded","onTimeUpdate","onVolumeChange","onRateChange","stop","spriteName","start","end","checkTime","value","newVolume","newRate"],"mappings":"yGA8DaA,EAAW,CACtBC,EACAC,EAA2B,KACR,CACnB,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtC,CAACC,EAAQC,CAAgB,EAAIF,EAAAA,SAASH,EAAQ,QAAU,CAAC,EACzD,CAACM,EAAcC,CAAe,EAAIJ,EAAAA,SAASH,EAAQ,cAAgB,CAAC,EAEpEQ,EAAWC,EAAAA,OAAgC,IAAI,EAErDC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAQ,IAAI,MAAMZ,CAAG,EAE3BY,EAAM,OAASP,EACfO,EAAM,aAAeL,EACrBE,EAAS,QAAUG,EAEfX,EAAQ,aAAaW,EAAM,KAAA,EAE/B,MAAMC,EAAS,IAAMV,EAAW,EAAI,EAC9BW,EAAU,IAAMX,EAAW,EAAK,EAChCY,EAAU,IAAMZ,EAAW,EAAK,EAChCa,EAAe,IAAM,CAAA,EACrBC,EAAiB,IAAMX,EAAiBM,EAAM,MAAM,EACpDM,EAAe,IAAMV,EAAgBI,EAAM,YAAY,EAE7D,OAAAA,EAAM,iBAAiB,OAAQC,CAAM,EACrCD,EAAM,iBAAiB,QAASE,CAAO,EACvCF,EAAM,iBAAiB,QAASG,CAAO,EACvCH,EAAM,iBAAiB,aAAcI,CAAY,EACjDJ,EAAM,iBAAiB,eAAgBK,CAAc,EACrDL,EAAM,iBAAiB,aAAcM,CAAY,EAE1C,IAAM,CACXN,EAAM,oBAAoB,OAAQC,CAAM,EACxCD,EAAM,oBAAoB,QAASE,CAAO,EAC1CF,EAAM,oBAAoB,QAASG,CAAO,EAC1CH,EAAM,oBAAoB,aAAcI,CAAY,EACpDJ,EAAM,oBAAoB,eAAgBK,CAAc,EACxDL,EAAM,oBAAoB,aAAcM,CAAY,EAEpDN,EAAM,MAAA,EACNA,EAAM,OAAA,CAAO,CACf,EACC,CAACZ,CAAG,CAAC,EAER,MAAMmB,EAAO,IAAM,CACZV,EAAS,UACdA,EAAS,QAAQ,MAAA,EACjBA,EAAS,QAAQ,YAAc,EAAA,EA8CjC,MAAO,CACL,KA5CW,MAAOW,GAAwB,CAC1C,GAAI,CAACX,EAAS,QAAS,OAGvB,GAFIR,EAAQ,WAAWkB,EAAA,EAEnB,CAACC,GAAc,CAACnB,EAAQ,SAASmB,CAAU,EAAG,CAChD,MAAMX,EAAS,QAAQ,KAAA,EACvB,MAAA,CAGF,KAAM,CAACY,EAAOC,CAAG,EAAIrB,EAAQ,OAAOmB,CAAU,EAC9CX,EAAS,QAAQ,YAAcY,EAC/B,MAAMZ,EAAS,QAAQ,KAAA,EAEvB,MAAMc,EAAY,IAAM,CACjBd,EAAS,UACVA,EAAS,QAAQ,aAAea,GAClCH,EAAA,EAGGjB,GAEL,sBAAsBqB,CAAS,EAAA,EAGjC,sBAAsBA,CAAS,CAAA,EAqB/B,MAlBY,IAAMd,EAAS,SAAS,MAAA,EAmBpC,KAAAU,EACA,QAAAjB,EACA,UAnBiBsB,GAAkB,CACnC,GAAI,CAACf,EAAS,QAAS,OACvB,MAAMgB,EAAY,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGD,CAAK,CAAC,EAChDf,EAAS,QAAQ,OAASgB,EAC1BnB,EAAiBmB,CAAS,CAAA,EAgB1B,OAAApB,EACA,mBAd0BmB,GAAkB,CAC5C,GAAI,CAACf,EAAS,QAAS,OACvB,MAAMiB,EAAU,KAAK,IAAI,GAAK,KAAK,IAAI,EAAGF,CAAK,CAAC,EAChDf,EAAS,QAAQ,aAAeiB,EAChClB,EAAgBkB,CAAO,CAAA,EAWvB,aAAAnB,CAAA,CAEJ"}
1
+ {"version":3,"file":"useAudio.cjs","sources":["../../../../src/hooks/useAudio/useAudio.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** Type sprite map */\nexport interface SpriteMap {\n /** [start time in seconds, end time in seconds] */\n [key: string]: [number, number];\n}\n\n/** Type use audio options */\nexport interface UseAudioOptions {\n /** Whether audio playback is initially enabled */\n immediately?: boolean;\n /** Whether to stop current playback when starting a new one */\n interrupt?: boolean;\n /** Initial playback speed (0.5 to 2) */\n playbackRate?: number;\n /** Map of named audio segments for sprite-based playback */\n sprite?: SpriteMap;\n /** Initial volume level (0 to 1) */\n volume?: number;\n}\n\n/** Type use audio return type */\nexport interface UseAudioReturn {\n /** Current playback speed (0.5 to 2) */\n playbackRate: number;\n /** Whether audio is currently playing */\n playing: boolean;\n /** Current volume level (0 to 1) */\n volume: number;\n /** Set playback speed (0.5 to 2) */\n changePlaybackRate: (value: number) => void;\n /** Pause audio playback at current position */\n pause: () => void;\n /** Start audio playback from the beginning or specified sprite segment */\n play: (sprite?: string) => Promise<void>;\n /** Set audio volume level (0 to 1) */\n setVolume: (value: number) => void;\n /** Stop audio playback and reset position to start */\n stop: () => void;\n}\n\n/**\n * @name useAudio\n * @description - Hook that manages audio playback with sprite support\n * @category Browser\n *\n * @browserapi Audio https://developer.mozilla.org/en-US/docs/Web/API/Audio\n *\n * @template Value The type of the value\n * @param {string} url The URL of the audio file to play\n * @param {UseAudioOptions} [options] Audio configuration options\n * @param {number} [options.volume=1] Initial volume level (0 to 1)\n * @param {number} [options.playbackRate=1] Initial playback speed (0.5 to 2)\n * @param {boolean} [options.interrupt=false] Whether to stop current playback when starting a new one\n * @param {boolean} [options.soundEnabled=true] Whether audio playback is initially enabled\n * @param {SpriteMap} [options.sprite] Map of named audio segments for sprite-based playback\n * @returns {UseAudioReturn} An object containing audio controls and state\n *\n * @example\n * const audio = useAudio(\"/path/to/sound.mp3\");\n */\nexport const useAudio = (src: string, options: UseAudioOptions = {}): UseAudioReturn => {\n const [playing, setPlaying] = useState(false);\n const [volume, setCurrentVolume] = useState(options.volume ?? 1);\n const [playbackRate, setPlaybackRate] = useState(options.playbackRate ?? 1);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n\n useEffect(() => {\n const audio = new Audio(src);\n\n audio.volume = volume;\n audio.playbackRate = playbackRate;\n audioRef.current = audio;\n\n if (options.immediately) audio.play();\n\n const onPlay = () => setPlaying(true);\n const onPause = () => setPlaying(false);\n const onEnded = () => setPlaying(false);\n const onTimeUpdate = () => {};\n const onVolumeChange = () => setCurrentVolume(audio.volume);\n const onRateChange = () => setPlaybackRate(audio.playbackRate);\n\n audio.addEventListener('play', onPlay);\n audio.addEventListener('pause', onPause);\n audio.addEventListener('ended', onEnded);\n audio.addEventListener('timeupdate', onTimeUpdate);\n audio.addEventListener('volumechange', onVolumeChange);\n audio.addEventListener('ratechange', onRateChange);\n\n return () => {\n audio.removeEventListener('play', onPlay);\n audio.removeEventListener('pause', onPause);\n audio.removeEventListener('ended', onEnded);\n audio.removeEventListener('timeupdate', onTimeUpdate);\n audio.removeEventListener('volumechange', onVolumeChange);\n audio.removeEventListener('ratechange', onRateChange);\n\n audio.pause();\n audio.remove();\n };\n }, [src]);\n\n const stop = () => {\n if (!audioRef.current) return;\n audioRef.current.pause();\n audioRef.current.currentTime = 0;\n };\n\n const play = async (spriteName?: string) => {\n if (!audioRef.current) return;\n if (options.interrupt) stop();\n\n if (!spriteName || !options.sprite?.[spriteName]) {\n await audioRef.current.play();\n return;\n }\n\n const [start, end] = options.sprite[spriteName];\n audioRef.current.currentTime = start;\n await audioRef.current.play();\n\n const checkTime = () => {\n if (!audioRef.current) return;\n if (audioRef.current.currentTime >= end) {\n stop();\n }\n\n if (!playing) return;\n\n requestAnimationFrame(checkTime);\n };\n\n requestAnimationFrame(checkTime);\n };\n\n const pause = () => audioRef.current?.pause();\n\n const setVolume = (value: number) => {\n if (!audioRef.current) return;\n const newVolume = Math.max(0, Math.min(1, value));\n audioRef.current.volume = newVolume;\n setCurrentVolume(newVolume);\n };\n\n const changePlaybackRate = (value: number) => {\n if (!audioRef.current) return;\n const newRate = Math.max(0.5, Math.min(2, value));\n audioRef.current.playbackRate = newRate;\n setPlaybackRate(newRate);\n };\n\n return {\n play,\n pause,\n stop,\n playing,\n setVolume,\n volume,\n changePlaybackRate,\n playbackRate\n };\n};\n"],"names":["useAudio","src","options","playing","setPlaying","useState","volume","setCurrentVolume","playbackRate","setPlaybackRate","audioRef","useRef","useEffect","audio","onPlay","onPause","onEnded","onTimeUpdate","onVolumeChange","onRateChange","stop","spriteName","start","end","checkTime","value","newVolume","newRate"],"mappings":"yGA8DaA,EAAW,CAACC,EAAaC,EAA2B,KAAuB,CACtF,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtC,CAACC,EAAQC,CAAgB,EAAIF,EAAAA,SAASH,EAAQ,QAAU,CAAC,EACzD,CAACM,EAAcC,CAAe,EAAIJ,EAAAA,SAASH,EAAQ,cAAgB,CAAC,EAEpEQ,EAAWC,EAAAA,OAAgC,IAAI,EAErDC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAQ,IAAI,MAAMZ,CAAG,EAE3BY,EAAM,OAASP,EACfO,EAAM,aAAeL,EACrBE,EAAS,QAAUG,EAEfX,EAAQ,aAAaW,EAAM,KAAA,EAE/B,MAAMC,EAAS,IAAMV,EAAW,EAAI,EAC9BW,EAAU,IAAMX,EAAW,EAAK,EAChCY,EAAU,IAAMZ,EAAW,EAAK,EAChCa,EAAe,IAAM,CAAA,EACrBC,EAAiB,IAAMX,EAAiBM,EAAM,MAAM,EACpDM,EAAe,IAAMV,EAAgBI,EAAM,YAAY,EAE7D,OAAAA,EAAM,iBAAiB,OAAQC,CAAM,EACrCD,EAAM,iBAAiB,QAASE,CAAO,EACvCF,EAAM,iBAAiB,QAASG,CAAO,EACvCH,EAAM,iBAAiB,aAAcI,CAAY,EACjDJ,EAAM,iBAAiB,eAAgBK,CAAc,EACrDL,EAAM,iBAAiB,aAAcM,CAAY,EAE1C,IAAM,CACXN,EAAM,oBAAoB,OAAQC,CAAM,EACxCD,EAAM,oBAAoB,QAASE,CAAO,EAC1CF,EAAM,oBAAoB,QAASG,CAAO,EAC1CH,EAAM,oBAAoB,aAAcI,CAAY,EACpDJ,EAAM,oBAAoB,eAAgBK,CAAc,EACxDL,EAAM,oBAAoB,aAAcM,CAAY,EAEpDN,EAAM,MAAA,EACNA,EAAM,OAAA,CAAO,CACf,EACC,CAACZ,CAAG,CAAC,EAER,MAAMmB,EAAO,IAAM,CACZV,EAAS,UACdA,EAAS,QAAQ,MAAA,EACjBA,EAAS,QAAQ,YAAc,EAAA,EA8CjC,MAAO,CACL,KA5CW,MAAOW,GAAwB,CAC1C,GAAI,CAACX,EAAS,QAAS,OAGvB,GAFIR,EAAQ,WAAWkB,EAAA,EAEnB,CAACC,GAAc,CAACnB,EAAQ,SAASmB,CAAU,EAAG,CAChD,MAAMX,EAAS,QAAQ,KAAA,EACvB,MAAA,CAGF,KAAM,CAACY,EAAOC,CAAG,EAAIrB,EAAQ,OAAOmB,CAAU,EAC9CX,EAAS,QAAQ,YAAcY,EAC/B,MAAMZ,EAAS,QAAQ,KAAA,EAEvB,MAAMc,EAAY,IAAM,CACjBd,EAAS,UACVA,EAAS,QAAQ,aAAea,GAClCH,EAAA,EAGGjB,GAEL,sBAAsBqB,CAAS,EAAA,EAGjC,sBAAsBA,CAAS,CAAA,EAqB/B,MAlBY,IAAMd,EAAS,SAAS,MAAA,EAmBpC,KAAAU,EACA,QAAAjB,EACA,UAnBiBsB,GAAkB,CACnC,GAAI,CAACf,EAAS,QAAS,OACvB,MAAMgB,EAAY,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGD,CAAK,CAAC,EAChDf,EAAS,QAAQ,OAASgB,EAC1BnB,EAAiBmB,CAAS,CAAA,EAgB1B,OAAApB,EACA,mBAd0BmB,GAAkB,CAC5C,GAAI,CAACf,EAAS,QAAS,OACvB,MAAMiB,EAAU,KAAK,IAAI,GAAK,KAAK,IAAI,EAAGF,CAAK,CAAC,EAChDf,EAAS,QAAQ,aAAeiB,EAChClB,EAAgBkB,CAAO,CAAA,EAWvB,aAAAnB,CAAA,CAEJ"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const T=require("react"),Y=require("../useRefState/useRefState.cjs"),m=require("../../utils/helpers/getElement.cjs"),y=(...o)=>{const n=typeof o[0]!="object"||"current"in o[0]?o[0]:void 0,b=o[1]||(typeof o[0]=="object"?o[0]:{}),{enabled:i=!0}=b,c=Y.useRefState();if(T.useEffect(()=>{if(!i||!n&&!c.state)return;const e=n?m.getElement(n):c.state;if(!e)return;let r=!0,u=0,h=0;const a=()=>{const{scrollHeight:t,clientHeight:s,scrollTop:l}=e,E=t-s,L=E/2;l<h?r=!1:E-l<=L&&(r=!0),h=l},f=t=>{t.deltaY<0?r=!1:a()},d=t=>{u=t.touches[0].clientY},v=t=>{const s=t.touches[0].clientY;u-s<0?r=!1:a(),u=s},g=()=>{r&&e.scrollTo({top:e.scrollHeight})};e.addEventListener("wheel",f),e.addEventListener("touchstart",d),e.addEventListener("touchmove",v);const S=new MutationObserver(g);return S.observe(e,{childList:!0,subtree:!0,characterData:!0}),()=>{S.disconnect(),e.removeEventListener("wheel",f),e.removeEventListener("touchstart",d),e.removeEventListener("touchmove",v)}},[i,n,c.state]),!n)return c};exports.useAutoScroll=y;
2
+ //# sourceMappingURL=useAutoScroll.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAutoScroll.cjs","sources":["../../../../src/hooks/useAutoScroll/useAutoScroll.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use auto scroll options type */\nexport interface UseAutoScrollOptions {\n /** Whether auto-scrolling is enabled */\n enabled?: boolean;\n}\n\nexport interface UseAutoScroll {\n (target: HookTarget, options?: UseAutoScrollOptions): void;\n\n <Target extends HTMLElement>(options?: UseAutoScrollOptions): StateRef<Target>;\n}\n\n/**\n * @name useAutoScroll\n * @description - Hook that automatically scrolls a list element to the bottom\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element to auto-scroll\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {void}\n *\n * @example\n * useAutoScroll(ref);\n *\n * @overload\n * @template Target\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {StateRef<Target>} A React ref to attach to the list element\n *\n * @example\n * const ref = useAutoScroll();\n */\nexport const useAutoScroll = ((...params: any[]) => {\n const target = (\n typeof params[0] !== 'object' || 'current' in params[0] ? params[0] : undefined\n ) as HookTarget | undefined;\n const options = (params[1] ||\n (typeof params[0] === 'object' ? params[0] : {})) as UseAutoScrollOptions;\n const { enabled = true } = options;\n\n const internalRef = useRefState<HTMLElement>();\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n\n const element = (target ? getElement(target) : internalRef.state) as HTMLElement;\n\n if (!element) return;\n\n let shouldAutoScroll = true;\n let touchStartY = 0;\n let lastScrollTop = 0;\n\n const onCheckScrollPosition = () => {\n const { scrollHeight, clientHeight, scrollTop } = element;\n const maxScrollHeight = scrollHeight - clientHeight;\n const scrollThreshold = maxScrollHeight / 2;\n\n if (scrollTop < lastScrollTop) shouldAutoScroll = false;\n else if (maxScrollHeight - scrollTop <= scrollThreshold) shouldAutoScroll = true;\n\n lastScrollTop = scrollTop;\n };\n\n const onWheel = (event: WheelEvent) => {\n if (event.deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n };\n\n const onTouchStart = (event: TouchEvent) => {\n touchStartY = event.touches[0].clientY;\n };\n\n const onTouchMove = (event: TouchEvent) => {\n const touchEndY = event.touches[0].clientY;\n const deltaY = touchStartY - touchEndY;\n\n if (deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n\n touchStartY = touchEndY;\n };\n\n const onMutation = () => {\n if (!shouldAutoScroll) return;\n element.scrollTo({ top: element.scrollHeight });\n };\n\n element.addEventListener('wheel', onWheel);\n element.addEventListener('touchstart', onTouchStart);\n element.addEventListener('touchmove', onTouchMove);\n\n const observer = new MutationObserver(onMutation);\n\n observer.observe(element, {\n childList: true,\n subtree: true,\n characterData: true\n });\n\n return () => {\n observer.disconnect();\n element.removeEventListener('wheel', onWheel);\n element.removeEventListener('touchstart', onTouchStart);\n element.removeEventListener('touchmove', onTouchMove);\n };\n }, [enabled, target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseAutoScroll;\n"],"names":["useAutoScroll","params","target","options","enabled","internalRef","useRefState","useEffect","element","getElement","shouldAutoScroll","touchStartY","lastScrollTop","onCheckScrollPosition","scrollHeight","clientHeight","scrollTop","maxScrollHeight","scrollThreshold","onWheel","event","onTouchStart","onTouchMove","touchEndY","onMutation","observer"],"mappings":"qMA2CaA,EAAiB,IAAIC,IAAkB,CAClD,MAAMC,EACJ,OAAOD,EAAO,CAAC,GAAM,UAAY,YAAaA,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAI,OAElEE,EAAWF,EAAO,CAAC,IACtB,OAAOA,EAAO,CAAC,GAAM,SAAWA,EAAO,CAAC,EAAI,CAAA,GACzC,CAAE,QAAAG,EAAU,EAAA,EAASD,EAErBE,EAAcC,EAAAA,YAAA,EAoEpB,GAlEAC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACH,GAAY,CAACF,GAAU,CAACG,EAAY,MAAQ,OAEjD,MAAMG,EAAWN,EAASO,EAAAA,WAAWP,CAAM,EAAIG,EAAY,MAE3D,GAAI,CAACG,EAAS,OAEd,IAAIE,EAAmB,GACnBC,EAAc,EACdC,EAAgB,EAEpB,MAAMC,EAAwB,IAAM,CAClC,KAAM,CAAE,aAAAC,EAAc,aAAAC,EAAc,UAAAC,CAAA,EAAcR,EAC5CS,EAAkBH,EAAeC,EACjCG,EAAkBD,EAAkB,EAEtCD,EAAYJ,EAAeF,EAAmB,GACzCO,EAAkBD,GAAaE,IAAiBR,EAAmB,IAE5EE,EAAgBI,CAAA,EAGZG,EAAWC,GAAsB,CACjCA,EAAM,OAAS,EAAGV,EAAmB,GACpCG,EAAA,CAAsB,EAGvBQ,EAAgBD,GAAsB,CAC1CT,EAAcS,EAAM,QAAQ,CAAC,EAAE,OAAA,EAG3BE,EAAeF,GAAsB,CACzC,MAAMG,EAAYH,EAAM,QAAQ,CAAC,EAAE,QACpBT,EAAcY,EAEhB,EAAGb,EAAmB,GAC9BG,EAAA,EAELF,EAAcY,CAAA,EAGVC,EAAa,IAAM,CAClBd,GACLF,EAAQ,SAAS,CAAE,IAAKA,EAAQ,aAAc,CAAA,EAGhDA,EAAQ,iBAAiB,QAASW,CAAO,EACzCX,EAAQ,iBAAiB,aAAca,CAAY,EACnDb,EAAQ,iBAAiB,YAAac,CAAW,EAEjD,MAAMG,EAAW,IAAI,iBAAiBD,CAAU,EAEhD,OAAAC,EAAS,QAAQjB,EAAS,CACxB,UAAW,GACX,QAAS,GACT,cAAe,EAAA,CAChB,EAEM,IAAM,CACXiB,EAAS,WAAA,EACTjB,EAAQ,oBAAoB,QAASW,CAAO,EAC5CX,EAAQ,oBAAoB,aAAca,CAAY,EACtDb,EAAQ,oBAAoB,YAAac,CAAW,CAAA,CACtD,EACC,CAAClB,EAASF,EAAQG,EAAY,KAAK,CAAC,EAEnC,CAAAH,EACJ,OAAOG,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBattery.cjs","sources":["../../../../src/hooks/useBattery/useBattery.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface BatteryManager extends EventTarget {\n charging: boolean;\n chargingTime: number;\n dischargingTime: number;\n level: number;\n}\n\ndeclare global {\n interface Navigator {\n readonly getBattery: () => Promise<BatteryManager>;\n }\n}\n\n/** The use battery value type */\nexport interface UseBatteryValue {\n /** Is charging battery? */\n charging: boolean;\n /** Time until the battery is fully charged */\n chargingTime: number;\n /** Time until the battery is completely discharged */\n dischargingTime: number;\n /** Battery charge level from 0 to 1 */\n level: number;\n /** Is battery information loading? */\n loading: boolean;\n}\n\n/** The use battery return type */\nexport interface UseBatteryStateReturn {\n /** Whether the battery api is supported*/\n supported: boolean;\n /** The use battery value type */\n value: UseBatteryValue;\n}\n\n/**\n * @name useBattery\n * @description - Hook for getting information about battery status\n * @category Browser\n *\n * @browserapi navigator.getBattery https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getBattery\n *\n * @returns {UseBatteryStateReturn} Object containing battery information & Battery API support\n *\n * @example\n * const { supported, loading, charging, chargingTime, dischargingTime, level } = useBattery();\n */\nexport const useBattery = (): UseBatteryStateReturn => {\n const supported =\n typeof navigator !== 'undefined' &&\n 'getBattery' in navigator &&\n typeof navigator.getBattery === 'function';\n const [value, setValue] = useState<UseBatteryValue>({\n loading: supported,\n level: 0,\n charging: false,\n chargingTime: 0,\n dischargingTime: 0\n });\n\n useEffect(() => {\n if (!supported) return;\n let battery: BatteryManager | null;\n\n const onChange = () =>\n setValue({\n loading: false,\n level: battery?.level ?? 0,\n charging: battery?.charging ?? false,\n dischargingTime: battery?.dischargingTime ?? 0,\n chargingTime: battery?.chargingTime ?? 0\n });\n\n navigator.getBattery().then((batteryManager) => {\n battery = batteryManager;\n onChange();\n\n battery.addEventListener('levelchange', onChange);\n battery.addEventListener('chargingchange', onChange);\n battery.addEventListener('chargingtimechange', onChange);\n battery.addEventListener('dischargingtimechange', onChange);\n });\n\n return () => {\n if (!battery) return;\n console.log('unmount', battery);\n battery.removeEventListener('levelchange', onChange);\n battery.removeEventListener('chargingchange', onChange);\n battery.removeEventListener('chargingtimechange', onChange);\n battery.removeEventListener('dischargingtimechange', onChange);\n };\n }, []);\n\n return { supported, value };\n};\n"],"names":["useBattery","supported","value","setValue","useState","useEffect","battery","onChange","batteryManager"],"mappings":"yGAiDaA,EAAa,IAA6B,CACrD,MAAMC,EACJ,OAAO,UAAc,KACrB,eAAgB,WAChB,OAAO,UAAU,YAAe,WAC5B,CAACC,EAAOC,CAAQ,EAAIC,WAA0B,CAClD,QAASH,EACT,MAAO,EACP,SAAU,GACV,aAAc,EACd,gBAAiB,CAAA,CAClB,EAEDI,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACJ,EAAW,OAChB,IAAIK,EAEJ,MAAMC,EAAW,IACfJ,EAAS,CACP,QAAS,GACT,MAAOG,GAAS,OAAS,EACzB,SAAUA,GAAS,UAAY,GAC/B,gBAAiBA,GAAS,iBAAmB,EAC7C,aAAcA,GAAS,cAAgB,CAAA,CACxC,EAEH,iBAAU,WAAA,EAAa,KAAME,GAAmB,CAC9CF,EAAUE,EACVD,EAAA,EAEAD,EAAQ,iBAAiB,cAAeC,CAAQ,EAChDD,EAAQ,iBAAiB,iBAAkBC,CAAQ,EACnDD,EAAQ,iBAAiB,qBAAsBC,CAAQ,EACvDD,EAAQ,iBAAiB,wBAAyBC,CAAQ,CAAA,CAC3D,EAEM,IAAM,CACND,IACL,QAAQ,IAAI,UAAWA,CAAO,EAC9BA,EAAQ,oBAAoB,cAAeC,CAAQ,EACnDD,EAAQ,oBAAoB,iBAAkBC,CAAQ,EACtDD,EAAQ,oBAAoB,qBAAsBC,CAAQ,EAC1DD,EAAQ,oBAAoB,wBAAyBC,CAAQ,EAAA,CAC/D,EACC,EAAE,EAEE,CAAE,UAAAN,EAAW,MAAAC,CAAA,CACtB"}
1
+ {"version":3,"file":"useBattery.cjs","sources":["../../../../src/hooks/useBattery/useBattery.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface BatteryManager extends EventTarget {\n charging: boolean;\n chargingTime: number;\n dischargingTime: number;\n level: number;\n}\n\ndeclare global {\n interface Navigator {\n readonly getBattery: () => Promise<BatteryManager>;\n }\n}\n\n/** The use battery value type */\nexport interface UseBatteryValue {\n /** Is charging battery? */\n charging: boolean;\n /** Time until the battery is fully charged */\n chargingTime: number;\n /** Time until the battery is completely discharged */\n dischargingTime: number;\n /** Battery charge level from 0 to 1 */\n level: number;\n /** Is battery information loading? */\n loading: boolean;\n}\n\n/** The use battery return type */\nexport interface UseBatteryStateReturn {\n /** Whether the battery api is supported*/\n supported: boolean;\n /** The use battery value type */\n value: UseBatteryValue;\n}\n\n/**\n * @name useBattery\n * @description - Hook for getting information about battery status\n * @category Browser\n *\n * @browserapi navigator.getBattery https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getBattery\n *\n * @returns {UseBatteryStateReturn} Object containing battery information & Battery API support\n *\n * @example\n * const { supported, loading, charging, chargingTime, dischargingTime, level } = useBattery();\n */\nexport const useBattery = (): UseBatteryStateReturn => {\n const supported =\n typeof navigator !== 'undefined' &&\n 'getBattery' in navigator &&\n typeof navigator.getBattery === 'function';\n const [value, setValue] = useState<UseBatteryValue>({\n loading: supported,\n level: 0,\n charging: false,\n chargingTime: 0,\n dischargingTime: 0\n });\n\n useEffect(() => {\n if (!supported) return;\n\n let battery: BatteryManager | null;\n\n const onChange = () =>\n setValue({\n loading: false,\n level: battery?.level ?? 0,\n charging: battery?.charging ?? false,\n dischargingTime: battery?.dischargingTime ?? 0,\n chargingTime: battery?.chargingTime ?? 0\n });\n\n navigator.getBattery().then((batteryManager) => {\n battery = batteryManager;\n onChange();\n\n battery.addEventListener('levelchange', onChange);\n battery.addEventListener('chargingchange', onChange);\n battery.addEventListener('chargingtimechange', onChange);\n battery.addEventListener('dischargingtimechange', onChange);\n });\n\n return () => {\n if (!battery) return;\n console.log('unmount', battery);\n battery.removeEventListener('levelchange', onChange);\n battery.removeEventListener('chargingchange', onChange);\n battery.removeEventListener('chargingtimechange', onChange);\n battery.removeEventListener('dischargingtimechange', onChange);\n };\n }, []);\n\n return { supported, value };\n};\n"],"names":["useBattery","supported","value","setValue","useState","useEffect","battery","onChange","batteryManager"],"mappings":"yGAiDaA,EAAa,IAA6B,CACrD,MAAMC,EACJ,OAAO,UAAc,KACrB,eAAgB,WAChB,OAAO,UAAU,YAAe,WAC5B,CAACC,EAAOC,CAAQ,EAAIC,WAA0B,CAClD,QAASH,EACT,MAAO,EACP,SAAU,GACV,aAAc,EACd,gBAAiB,CAAA,CAClB,EAEDI,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACJ,EAAW,OAEhB,IAAIK,EAEJ,MAAMC,EAAW,IACfJ,EAAS,CACP,QAAS,GACT,MAAOG,GAAS,OAAS,EACzB,SAAUA,GAAS,UAAY,GAC/B,gBAAiBA,GAAS,iBAAmB,EAC7C,aAAcA,GAAS,cAAgB,CAAA,CACxC,EAEH,iBAAU,WAAA,EAAa,KAAME,GAAmB,CAC9CF,EAAUE,EACVD,EAAA,EAEAD,EAAQ,iBAAiB,cAAeC,CAAQ,EAChDD,EAAQ,iBAAiB,iBAAkBC,CAAQ,EACnDD,EAAQ,iBAAiB,qBAAsBC,CAAQ,EACvDD,EAAQ,iBAAiB,wBAAyBC,CAAQ,CAAA,CAC3D,EAEM,IAAM,CACND,IACL,QAAQ,IAAI,UAAWA,CAAO,EAC9BA,EAAQ,oBAAoB,cAAeC,CAAQ,EACnDD,EAAQ,oBAAoB,iBAAkBC,CAAQ,EACtDD,EAAQ,oBAAoB,qBAAsBC,CAAQ,EAC1DD,EAAQ,oBAAoB,wBAAyBC,CAAQ,EAAA,CAC/D,EACC,EAAE,EAEE,CAAE,UAAAN,EAAW,MAAAC,CAAA,CACtB"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),l=require("../useRefState/useRefState.cjs"),a=require("../../utils/helpers/isTarget.cjs"),f=require("../../utils/helpers/getElement.cjs"),g=(...t)=>{const e=a.isTarget(t[0])?t[0]:void 0,r=t[1]?t[1]:t[0],n=l.useRefState(),c=u.useRef(r);if(c.current=r,u.useEffect(()=>{if(console.log("target",e),!e&&!n.state)return;const i=s=>{const o=e?f.getElement(e):n.current;o&&!o.contains(s.target)&&c.current(s)};return document.addEventListener("click",i),()=>{document.removeEventListener("click",i)}},[e,n.state]),!e)return n};exports.useClickOutside=g;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react"),l=require("../useRefState/useRefState.cjs"),a=require("../../utils/helpers/isTarget.cjs"),f=require("../../utils/helpers/getElement.cjs"),d=(...e)=>{const t=a.isTarget(e[0])?e[0]:void 0,r=e[1]?e[1]:e[0],n=l.useRefState(),c=o.useRef(r);if(c.current=r,o.useEffect(()=>{if(!t&&!n.state)return;const i=s=>{const u=t?f.getElement(t):n.current;u&&!u.contains(s.target)&&c.current(s)};return document.addEventListener("click",i),()=>{document.removeEventListener("click",i)}},[t,n.state]),!t)return n};exports.useClickOutside=d;
2
2
  //# sourceMappingURL=useClickOutside.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useClickOutside.cjs","sources":["../../../../src/hooks/useClickOutside/useClickOutside.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 interface UseClickOutside {\n (target: HookTarget, callback: (event: Event) => void): void;\n\n <Target extends Element>(callback: (event: Event) => void, target?: never): StateRef<Target>;\n}\n\n/**\n * @name useClickOutside\n * @description - Hook to handle click events outside the specified target element(s)\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element(s) to detect outside clicks for\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {void}\n *\n * @example\n * useClickOutside(ref, () => console.log('click outside'));\n *\n * @overload\n * @template Target The target element(s)\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {(node: Target) => void} A React ref to attach to the target element\n *\n * @example\n * const ref = useClickOutside<HTMLDivElement>(() => console.log('click outside'));\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useClickOutside.html}\n */\nexport const useClickOutside = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (params[1] ? params[1] : params[0]) as (event: Event) => void;\n\n const internalRef = useRefState<Element>();\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n useEffect(() => {\n console.log('target', target);\n if (!target && !internalRef.state) return;\n const onClick = (event: Event) => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n\n if (element && !element.contains(event.target as Node)) {\n internalCallbackRef.current(event);\n }\n };\n\n document.addEventListener('click', onClick);\n\n return () => {\n document.removeEventListener('click', onClick);\n };\n }, [target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseClickOutside;\n"],"names":["useClickOutside","params","target","isTarget","callback","internalRef","useRefState","internalCallbackRef","useRef","useEffect","onClick","event","element","getElement"],"mappings":"mPAuCaA,EAAmB,IAAIC,IAAkB,CACpD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAYH,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAIA,EAAO,CAAC,EAE5CI,EAAcC,EAAAA,YAAA,EACdC,EAAsBC,EAAAA,OAAOJ,CAAQ,EAqB3C,GApBAG,EAAoB,QAAUH,EAE9BK,EAAAA,UAAU,IAAM,CAEd,GADA,QAAQ,IAAI,SAAUP,CAAM,EACxB,CAACA,GAAU,CAACG,EAAY,MAAO,OACnC,MAAMK,EAAWC,GAAiB,CAChC,MAAMC,EAAWV,EAASW,EAAAA,WAAWX,CAAM,EAAIG,EAAY,QAEvDO,GAAW,CAACA,EAAQ,SAASD,EAAM,MAAc,GACnDJ,EAAoB,QAAQI,CAAK,CACnC,EAGF,gBAAS,iBAAiB,QAASD,CAAO,EAEnC,IAAM,CACX,SAAS,oBAAoB,QAASA,CAAO,CAAA,CAC/C,EACC,CAACR,EAAQG,EAAY,KAAK,CAAC,EAE1B,CAAAH,EACJ,OAAOG,CACT"}
1
+ {"version":3,"file":"useClickOutside.cjs","sources":["../../../../src/hooks/useClickOutside/useClickOutside.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 interface UseClickOutside {\n (target: HookTarget, callback: (event: Event) => void): void;\n\n <Target extends Element>(callback: (event: Event) => void, target?: never): StateRef<Target>;\n}\n\n/**\n * @name useClickOutside\n * @description - Hook to handle click events outside the specified target element(s)\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element(s) to detect outside clicks for\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {void}\n *\n * @example\n * useClickOutside(ref, () => console.log('click outside'));\n *\n * @overload\n * @template Target The target element(s)\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {(node: Target) => void} A React ref to attach to the target element\n *\n * @example\n * const ref = useClickOutside<HTMLDivElement>(() => console.log('click outside'));\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useClickOutside.html}\n */\nexport const useClickOutside = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (params[1] ? params[1] : params[0]) as (event: Event) => void;\n\n const internalRef = useRefState<Element>();\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const onClick = (event: Event) => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n\n if (element && !element.contains(event.target as Node)) {\n internalCallbackRef.current(event);\n }\n };\n\n document.addEventListener('click', onClick);\n\n return () => {\n document.removeEventListener('click', onClick);\n };\n }, [target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseClickOutside;\n"],"names":["useClickOutside","params","target","isTarget","callback","internalRef","useRefState","internalCallbackRef","useRef","useEffect","onClick","event","element","getElement"],"mappings":"mPAuCaA,EAAmB,IAAIC,IAAkB,CACpD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAYH,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAIA,EAAO,CAAC,EAE5CI,EAAcC,EAAAA,YAAA,EACdC,EAAsBC,EAAAA,OAAOJ,CAAQ,EAoB3C,GAnBAG,EAAoB,QAAUH,EAE9BK,EAAAA,UAAU,IAAM,CACd,GAAI,CAACP,GAAU,CAACG,EAAY,MAAO,OACnC,MAAMK,EAAWC,GAAiB,CAChC,MAAMC,EAAWV,EAASW,EAAAA,WAAWX,CAAM,EAAIG,EAAY,QAEvDO,GAAW,CAACA,EAAQ,SAASD,EAAM,MAAc,GACnDJ,EAAoB,QAAQI,CAAK,CACnC,EAGF,gBAAS,iBAAiB,QAASD,CAAO,EAEnC,IAAM,CACX,SAAS,oBAAoB,QAASA,CAAO,CAAA,CAC/C,EACC,CAACR,EAAQG,EAAY,KAAK,CAAC,EAE1B,CAAAH,EACJ,OAAOG,CACT"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),c=e=>{const t=r.useRef(e);return t.current=e,r.useCallback((...n)=>{const u=t.current;return u(...n)},[])};exports.useEvent=c;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),s=e=>{const t=r.useRef(e);return t.current=e,r.useCallback((...n)=>{const u=t.current;return u(...n)},[])};exports.useEvent=s;
2
2
  //# sourceMappingURL=useEvent.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useEvent.cjs","sources":["../../../../src/hooks/useEvent/useEvent.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\n/**\n * @name useEvent\n * @description - Hook that creates an event and returns a stable reference of it\n * @category Browser\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 * @returns {(...args: Params) => Return} The callback\n *\n * @example\n * const onClick = useEvent(() => console.log('clicked'));\n */\nexport const useEvent = <Params extends unknown[], Return>(\n callback: (...args: Params) => Return\n): ((...args: Params) => Return) => {\n const callbackRef = useRef<typeof callback>(callback);\n callbackRef.current = callback;\n\n return useCallback((...args) => {\n const fn = callbackRef.current;\n return fn(...args);\n }, []);\n};\n"],"names":["useEvent","callback","callbackRef","useRef","useCallback","args","fn"],"mappings":"yGAeaA,EACXC,GACkC,CAClC,MAAMC,EAAcC,EAAAA,OAAwBF,CAAQ,EACpD,OAAAC,EAAY,QAAUD,EAEfG,EAAAA,YAAY,IAAIC,IAAS,CAC9B,MAAMC,EAAKJ,EAAY,QACvB,OAAOI,EAAG,GAAGD,CAAI,CAAA,EAChB,EAAE,CACP"}
1
+ {"version":3,"file":"useEvent.cjs","sources":["../../../../src/hooks/useEvent/useEvent.ts"],"sourcesContent":["import { useCallback, useRef } from 'react';\n\n/**\n * @name useEvent\n * @description - Hook that creates an event and returns a stable reference of it\n * @category Browser\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 * @returns {(...args: Params) => Return} The callback\n *\n * @example\n * const onClick = useEvent(() => console.log('clicked'));\n */\nexport const useEvent = <Params extends unknown[], Return>(\n callback: (...args: Params) => Return\n): ((...args: Params) => Return) => {\n const internalCallbackRef = useRef<typeof callback>(callback);\n internalCallbackRef.current = callback;\n\n return useCallback((...args) => {\n const fn = internalCallbackRef.current;\n return fn(...args);\n }, []);\n};\n"],"names":["useEvent","callback","internalCallbackRef","useRef","useCallback","args","fn"],"mappings":"yGAeaA,EACXC,GACkC,CAClC,MAAMC,EAAsBC,EAAAA,OAAwBF,CAAQ,EAC5D,OAAAC,EAAoB,QAAUD,EAEvBG,EAAAA,YAAY,IAAIC,IAAS,CAC9B,MAAMC,EAAKJ,EAAoB,QAC/B,OAAOI,EAAG,GAAGD,CAAI,CAAA,EAChB,EAAE,CACP"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),v=require("../useRefState/useRefState.cjs"),E=require("../../utils/helpers/isTarget.cjs"),g=require("../../utils/helpers/getElement.cjs"),R=(...n)=>{const e=E.isTarget(n[0])?n[0]:void 0,y=e?n[1]:n[0],f=e?n[2]:n[1],[a,d]=u.useState(!1),c=v.useRefState(window),t=u.useRef(y);t.current=y;const o=u.useRef(f);return o.current=f,u.useEffect(()=>{if(!e&&!c.state)return;const s=e?g.getElement(e):c.current;if(!s)return;const l=i=>{const r=i;(Array.isArray(t.current)?t.current.includes(r.key):r.key===t.current)&&(d(!0),o.current?.(!0,r))},k=i=>{const r=i;(Array.isArray(t.current)?t.current.includes(r.key):r.key===t.current)&&(d(!1),o.current?.(!1,r))};return s.addEventListener("keydown",l),s.addEventListener("keyup",k),()=>{s.removeEventListener("keydown",l),s.removeEventListener("keyup",k)}},[e,c.state]),e?a:{pressed:a,ref:c}};exports.useKeyPress=R;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),v=require("../useRefState/useRefState.cjs"),E=require("../../utils/helpers/isTarget.cjs"),g=require("../../utils/helpers/getElement.cjs"),R=(...n)=>{const e=E.isTarget(n[0])?n[0]:void 0,y=e?n[1]:n[0],f=e?n[2]:n[1],[a,l]=u.useState(!1),c=v.useRefState(window),t=u.useRef(y);t.current=y;const o=u.useRef(f);return o.current=f,u.useEffect(()=>{if(!e&&!c.state)return;const s=e?g.getElement(e):c.current;if(!s)return;const d=i=>{const r=i;(Array.isArray(t.current)?t.current.includes(r.key):r.key===t.current)&&(l(!0),o.current?.(!0,r))},k=i=>{const r=i;(Array.isArray(t.current)?t.current.includes(r.key):r.key===t.current)&&(l(!1),o.current?.(!1,r))};return s.addEventListener("keydown",d),s.addEventListener("keyup",k),()=>{s.removeEventListener("keydown",d),s.removeEventListener("keyup",k)}},[e,c.state]),e?a:{pressed:a,ref:c}};exports.useKeyPress=R;
2
2
  //# sourceMappingURL=useKeyPress.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyPress.cjs","sources":["../../../../src/hooks/useKeyPress/useKeyPress.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 key or keys to listen for */\nexport type UseKeyPressKey = string | string[];\n\n/** The callback function to be invoked when key is pressed */\nexport type UseKeyPressCallback = (pressed: boolean, event: KeyboardEvent) => void;\n\nexport interface UseKeyPress {\n (target: HookTarget | Window, key: UseKeyPressKey, callback?: UseKeyPressCallback): boolean;\n\n <Target extends Element>(\n key: UseKeyPressKey,\n callback?: UseKeyPressCallback,\n target?: never\n ): { pressed: boolean; ref: StateRef<Target> };\n}\n\n/**\n * @name useKeyPress\n * @description - Hook that listens for key press events\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} [target=window] The target to attach the event listeners to\n * @param {UseKeyPressKey} key The key or keys to listen for\n * @param {(pressed: boolean, event: KeyboardEvent) => void} [callback] Callback function invoked when key is pressed\n * @returns {boolean} The pressed state of the key\n *\n * @example\n * const isKeyPressed = useKeyPress('a', window);\n *\n * @overload\n * @template Target The target element type\n * @param {UseKeyPressKey} key The key or keys to listen for\n * @param {(pressed: boolean, event: KeyboardEvent) => void} [callback] Callback function invoked when key is pressed\n * @returns {{ pressed: boolean; ref: StateRef<Target> }} An object containing the pressed state and ref\n *\n * @example\n * const { pressed, ref } = useKeyPress('a');\n */\nexport const useKeyPress = ((...params: any[]) => {\n const target = isTarget(params[0]) ? params[0] : undefined;\n const key = (target ? params[1] : params[0]) as UseKeyPressKey;\n const callback = (target ? params[2] : params[1]) as UseKeyPressCallback | undefined;\n\n const [pressed, setPressed] = useState(false);\n const internalRef = useRefState(window);\n\n const keyRef = useRef(key);\n keyRef.current = key;\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const onKeyDown = (event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n if (\n Array.isArray(keyRef.current)\n ? keyRef.current.includes(keyboardEvent.key)\n : keyboardEvent.key === keyRef.current\n ) {\n setPressed(true);\n callbackRef.current?.(true, keyboardEvent);\n }\n };\n\n const onKeyUp = (event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n if (\n Array.isArray(keyRef.current)\n ? keyRef.current.includes(keyboardEvent.key)\n : keyboardEvent.key === keyRef.current\n ) {\n setPressed(false);\n callbackRef.current?.(false, keyboardEvent);\n }\n };\n\n element.addEventListener('keydown', onKeyDown);\n element.addEventListener('keyup', onKeyUp);\n\n return () => {\n element.removeEventListener('keydown', onKeyDown);\n element.removeEventListener('keyup', onKeyUp);\n };\n }, [target, internalRef.state]);\n\n if (target) return pressed;\n return { pressed, ref: internalRef };\n}) as UseKeyPress;\n"],"names":["useKeyPress","params","target","isTarget","key","callback","pressed","setPressed","useState","internalRef","useRefState","keyRef","useRef","callbackRef","useEffect","element","getElement","onKeyDown","event","keyboardEvent","onKeyUp"],"mappings":"mPAiDaA,EAAe,IAAIC,IAAkB,CAChD,MAAMC,EAASC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC3CG,EAAOF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACpCI,EAAYH,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAEzC,CAACK,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtCC,EAAcC,EAAAA,YAAY,MAAM,EAEhCC,EAASC,EAAAA,OAAOR,CAAG,EACzBO,EAAO,QAAUP,EACjB,MAAMS,EAAcD,EAAAA,OAAOP,CAAQ,EA0CnC,OAzCAQ,EAAY,QAAUR,EAEtBS,EAAAA,UAAU,IAAM,CACd,GAAI,CAACZ,GAAU,CAACO,EAAY,MAAO,OAEnC,MAAMM,EAAWb,EAASc,EAAAA,WAAWd,CAAM,EAAIO,EAAY,QAC3D,GAAI,CAACM,EAAS,OAEd,MAAME,EAAaC,GAAiB,CAClC,MAAMC,EAAgBD,GAEpB,MAAM,QAAQP,EAAO,OAAO,EACxBA,EAAO,QAAQ,SAASQ,EAAc,GAAG,EACzCA,EAAc,MAAQR,EAAO,WAEjCJ,EAAW,EAAI,EACfM,EAAY,UAAU,GAAMM,CAAa,EAC3C,EAGIC,EAAWF,GAAiB,CAChC,MAAMC,EAAgBD,GAEpB,MAAM,QAAQP,EAAO,OAAO,EACxBA,EAAO,QAAQ,SAASQ,EAAc,GAAG,EACzCA,EAAc,MAAQR,EAAO,WAEjCJ,EAAW,EAAK,EAChBM,EAAY,UAAU,GAAOM,CAAa,EAC5C,EAGF,OAAAJ,EAAQ,iBAAiB,UAAWE,CAAS,EAC7CF,EAAQ,iBAAiB,QAASK,CAAO,EAElC,IAAM,CACXL,EAAQ,oBAAoB,UAAWE,CAAS,EAChDF,EAAQ,oBAAoB,QAASK,CAAO,CAAA,CAC9C,EACC,CAAClB,EAAQO,EAAY,KAAK,CAAC,EAE1BP,EAAeI,EACZ,CAAE,QAAAA,EAAS,IAAKG,CAAA,CACzB"}
1
+ {"version":3,"file":"useKeyPress.cjs","sources":["../../../../src/hooks/useKeyPress/useKeyPress.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 key or keys to listen for */\nexport type UseKeyPressKey = string | string[];\n\n/** The callback function to be invoked when key is pressed */\nexport type UseKeyPressCallback = (pressed: boolean, event: KeyboardEvent) => void;\n\nexport interface UseKeyPress {\n (target: HookTarget | Window, key: UseKeyPressKey, callback?: UseKeyPressCallback): boolean;\n\n <Target extends Element>(\n key: UseKeyPressKey,\n callback?: UseKeyPressCallback,\n target?: never\n ): { pressed: boolean; ref: StateRef<Target> };\n}\n\n/**\n * @name useKeyPress\n * @description - Hook that listens for key press events\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} [target=window] The target to attach the event listeners to\n * @param {UseKeyPressKey} key The key or keys to listen for\n * @param {(pressed: boolean, event: KeyboardEvent) => void} [callback] Callback function invoked when key is pressed\n * @returns {boolean} The pressed state of the key\n *\n * @example\n * const isKeyPressed = useKeyPress(ref, 'a');\n *\n * @overload\n * @template Target The target element type\n * @param {UseKeyPressKey} key The key or keys to listen for\n * @param {(pressed: boolean, event: KeyboardEvent) => void} [callback] Callback function invoked when key is pressed\n * @returns {{ pressed: boolean; ref: StateRef<Target> }} An object containing the pressed state and ref\n *\n * @example\n * const { pressed, ref } = useKeyPress('a');\n */\nexport const useKeyPress = ((...params: any[]) => {\n const target = isTarget(params[0]) ? params[0] : undefined;\n const key = (target ? params[1] : params[0]) as UseKeyPressKey;\n const callback = (target ? params[2] : params[1]) as UseKeyPressCallback | undefined;\n\n const [pressed, setPressed] = useState(false);\n const internalRef = useRefState(window);\n\n const keyRef = useRef(key);\n keyRef.current = key;\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const onKeyDown = (event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n if (\n Array.isArray(keyRef.current)\n ? keyRef.current.includes(keyboardEvent.key)\n : keyboardEvent.key === keyRef.current\n ) {\n setPressed(true);\n internalCallbackRef.current?.(true, keyboardEvent);\n }\n };\n\n const onKeyUp = (event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n if (\n Array.isArray(keyRef.current)\n ? keyRef.current.includes(keyboardEvent.key)\n : keyboardEvent.key === keyRef.current\n ) {\n setPressed(false);\n internalCallbackRef.current?.(false, keyboardEvent);\n }\n };\n\n element.addEventListener('keydown', onKeyDown);\n element.addEventListener('keyup', onKeyUp);\n\n return () => {\n element.removeEventListener('keydown', onKeyDown);\n element.removeEventListener('keyup', onKeyUp);\n };\n }, [target, internalRef.state]);\n\n if (target) return pressed;\n return { pressed, ref: internalRef };\n}) as UseKeyPress;\n"],"names":["useKeyPress","params","target","isTarget","key","callback","pressed","setPressed","useState","internalRef","useRefState","keyRef","useRef","internalCallbackRef","useEffect","element","getElement","onKeyDown","event","keyboardEvent","onKeyUp"],"mappings":"mPAiDaA,EAAe,IAAIC,IAAkB,CAChD,MAAMC,EAASC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC3CG,EAAOF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACpCI,EAAYH,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAEzC,CAACK,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtCC,EAAcC,EAAAA,YAAY,MAAM,EAEhCC,EAASC,EAAAA,OAAOR,CAAG,EACzBO,EAAO,QAAUP,EACjB,MAAMS,EAAsBD,EAAAA,OAAOP,CAAQ,EA0C3C,OAzCAQ,EAAoB,QAAUR,EAE9BS,EAAAA,UAAU,IAAM,CACd,GAAI,CAACZ,GAAU,CAACO,EAAY,MAAO,OAEnC,MAAMM,EAAWb,EAASc,EAAAA,WAAWd,CAAM,EAAIO,EAAY,QAC3D,GAAI,CAACM,EAAS,OAEd,MAAME,EAAaC,GAAiB,CAClC,MAAMC,EAAgBD,GAEpB,MAAM,QAAQP,EAAO,OAAO,EACxBA,EAAO,QAAQ,SAASQ,EAAc,GAAG,EACzCA,EAAc,MAAQR,EAAO,WAEjCJ,EAAW,EAAI,EACfM,EAAoB,UAAU,GAAMM,CAAa,EACnD,EAGIC,EAAWF,GAAiB,CAChC,MAAMC,EAAgBD,GAEpB,MAAM,QAAQP,EAAO,OAAO,EACxBA,EAAO,QAAQ,SAASQ,EAAc,GAAG,EACzCA,EAAc,MAAQR,EAAO,WAEjCJ,EAAW,EAAK,EAChBM,EAAoB,UAAU,GAAOM,CAAa,EACpD,EAGF,OAAAJ,EAAQ,iBAAiB,UAAWE,CAAS,EAC7CF,EAAQ,iBAAiB,QAASK,CAAO,EAElC,IAAM,CACXL,EAAQ,oBAAoB,UAAWE,CAAS,EAChDF,EAAQ,oBAAoB,QAASK,CAAO,CAAA,CAC9C,EACC,CAAClB,EAAQO,EAAY,KAAK,CAAC,EAE1BP,EAAeI,EACZ,CAAE,QAAAA,EAAS,IAAKG,CAAA,CACzB"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),d=require("../useRefState/useRefState.cjs"),y=require("../../utils/helpers/isTarget.cjs"),a=require("../../utils/helpers/getElement.cjs"),f=(...n)=>{const e=y.isTarget(n[0])?n[0]:void 0,s=e?n[1]:n[0],r=d.useRefState(window);if(c.useEffect(()=>{if(!e&&!r.state)return;const t=e?a.getElement(e):r.current;if(!t)return;const i=o=>s?.onKeyDown?.(o),u=o=>s?.onKeyUp?.(o);return t.addEventListener("keydown",i),t.addEventListener("keyup",u),()=>{t.removeEventListener("keydown",i),t.removeEventListener("keyup",u)}},[e,r.state]),!e)return r};exports.useKeyboard=f;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const y=require("react"),f=require("../useRefState/useRefState.cjs"),d=require("../../utils/helpers/isTarget.cjs"),l=require("../../utils/helpers/getElement.cjs"),v=(...e)=>{const t=d.isTarget(e[0])?e[0]:void 0,s=t?typeof e[1]=="object"?e[1]:{onKeyDown:e[1]}:typeof e[0]=="object"?e[0]:{onKeyDown:e[0]},o=f.useRefState(window),r=y.useRef(s);if(r.current=s,y.useEffect(()=>{if(!t&&!o.state)return;const n=t?l.getElement(t):o.current;if(!n)return;const c=u=>r.current?.onKeyDown?.(u),i=u=>r.current?.onKeyUp?.(u);return n.addEventListener("keydown",c),n.addEventListener("keyup",i),()=>{n.removeEventListener("keydown",c),n.removeEventListener("keyup",i)}},[t,o.state]),!t)return o};exports.useKeyboard=v;
2
2
  //# sourceMappingURL=useKeyboard.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useKeyboard.cjs","sources":["../../../../src/hooks/useKeyboard/useKeyboard.ts"],"sourcesContent":["import { useEffect } 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 keyboard event handler type */\nexport type KeyboardEventHandler = (event: KeyboardEvent) => void;\n\n/** The use keyboard options type */\nexport interface UseKeyboardOptions {\n /** The callback function to be invoked on key down */\n onKeyDown?: KeyboardEventHandler;\n /** The callback function to be invoked on key up */\n onKeyUp?: KeyboardEventHandler;\n}\n\nexport interface UseKeyboard {\n (target: HookTarget | Window, options: UseKeyboardOptions): void;\n\n <Target extends Element>(options: UseKeyboardOptions, target?: never): { ref: StateRef<Target> };\n}\n\n/**\n * @name useKeyboard\n * @description - Hook that helps to listen for keyboard events\n * @category Sensors\n *\n * @overload\n * @param {HookTarget | Window} target The target to attach the event listeners to\n * @param {UseKeyboardOptions} [options] The keyboard event options\n * @returns {void}\n *\n * @example\n * useKeyboard(ref, { onKeyDown: (event) => console.log('key down'), onKeyUp: (event) => console.log('key up') });\n *\n * @overload\n * @template Target The target element type\n * @param {UseKeyboardOptions} [options] The keyboard event options\n * @returns {{ ref: StateRef<Target> }} An object containing the ref\n *\n * @example\n * const ref = useKeyboard({ onKeyDown: (event) => console.log('key down'), onKeyUp: (event) => console.log('key up') });\n */\nexport const useKeyboard = ((...params: any[]) => {\n const target = isTarget(params[0]) ? params[0] : undefined;\n const options = (target ? params[1] : params[0]) as UseKeyboardOptions;\n\n const internalRef = useRefState(window);\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const onKeyDown = (event: Event) => options?.onKeyDown?.(event as KeyboardEvent);\n const onKeyUp = (event: Event) => options?.onKeyUp?.(event as KeyboardEvent);\n\n element.addEventListener('keydown', onKeyDown);\n element.addEventListener('keyup', onKeyUp);\n\n return () => {\n element.removeEventListener('keydown', onKeyDown);\n element.removeEventListener('keyup', onKeyUp);\n };\n }, [target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseKeyboard;\n"],"names":["useKeyboard","params","target","isTarget","options","internalRef","useRefState","useEffect","element","getElement","onKeyDown","event","onKeyUp"],"mappings":"mPAgDaA,EAAe,IAAIC,IAAkB,CAChD,MAAMC,EAASC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC3CG,EAAWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAExCI,EAAcC,EAAAA,YAAY,MAAM,EAoBtC,GAlBAC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACL,GAAU,CAACG,EAAY,MAAO,OAEnC,MAAMG,EAAWN,EAASO,EAAAA,WAAWP,CAAM,EAAIG,EAAY,QAC3D,GAAI,CAACG,EAAS,OAEd,MAAME,EAAaC,GAAiBP,GAAS,YAAYO,CAAsB,EACzEC,EAAWD,GAAiBP,GAAS,UAAUO,CAAsB,EAE3E,OAAAH,EAAQ,iBAAiB,UAAWE,CAAS,EAC7CF,EAAQ,iBAAiB,QAASI,CAAO,EAElC,IAAM,CACXJ,EAAQ,oBAAoB,UAAWE,CAAS,EAChDF,EAAQ,oBAAoB,QAASI,CAAO,CAAA,CAC9C,EACC,CAACV,EAAQG,EAAY,KAAK,CAAC,EAE1B,CAAAH,EACJ,OAAOG,CACT"}
1
+ {"version":3,"file":"useKeyboard.cjs","sources":["../../../../src/hooks/useKeyboard/useKeyboard.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\n/** The use keyboard event handler type */\nexport type KeyboardEventHandler = (event: KeyboardEvent) => void;\n\n/** The use keyboard event options type */\nexport interface UseKeyboardEventOptions {\n /** The callback function to be invoked on key down */\n onKeyDown?: KeyboardEventHandler;\n /** The callback function to be invoked on key up */\n onKeyUp?: KeyboardEventHandler;\n}\n\nexport interface UseKeyboard {\n (target: HookTarget, callback: KeyboardEventHandler): void;\n\n (target: HookTarget, options: UseKeyboardEventOptions): void;\n\n <Target extends HTMLElement>(\n callback: KeyboardEventHandler,\n target?: never\n ): { ref: StateRef<Target> };\n\n <Target extends HTMLElement>(\n options: UseKeyboardEventOptions,\n target?: never\n ): {\n ref: StateRef<Target>;\n };\n}\n\n/**\n * @name useKeyboard\n * @description - Hook that helps to listen for keyboard events\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target to attach the event listeners to\n * @param {KeyboardEventHandler} callback The callback function to be invoked on key down\n * @returns {void}\n *\n * @example\n * useKeyboard(ref, (event) => console.log('key down'));\n *\n * @overload\n * @param {HookTarget} target The target to attach the event listeners to\n * @param {UseKeyboardEventOptions} [options] The keyboard event options\n * @returns {void}\n *\n * @example\n * useKeyboard(ref, { onKeyDown: (event) => console.log('key down'), onKeyUp: (event) => console.log('key up') });\n *\n * @overload\n * @template Target The target element type\n * @param {KeyboardEventHandler} callback The callback function to be invoked on key down\n * @returns {{ ref: StateRef<Target> }} An object containing the ref\n *\n * @example\n * const ref = useKeyboard((event) => console.log('key down'));\n *\n * @overload\n * @template Target The target element type\n * @param {UseKeyboardEventOptions} [options] The keyboard event options\n * @returns {{ ref: StateRef<Target> }} An object containing the ref\n *\n * @example\n * const ref = useKeyboard({ onKeyDown: (event) => console.log('key down'), onKeyUp: (event) => console.log('key up') });\n */\nexport const useKeyboard = ((...params: any[]) => {\n const target = isTarget(params[0]) ? params[0] : undefined;\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onKeyDown: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onKeyDown: params[0] }\n ) as UseKeyboardEventOptions;\n\n const internalRef = useRefState(window);\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) as HTMLElement;\n if (!element) return;\n\n const onKeyDown = (event: Event) =>\n internalOptionsRef.current?.onKeyDown?.(event as KeyboardEvent);\n const onKeyUp = (event: Event) => internalOptionsRef.current?.onKeyUp?.(event as KeyboardEvent);\n\n element.addEventListener('keydown', onKeyDown);\n element.addEventListener('keyup', onKeyUp);\n\n return () => {\n element.removeEventListener('keydown', onKeyDown);\n element.removeEventListener('keyup', onKeyUp);\n };\n }, [target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseKeyboard;\n"],"names":["useKeyboard","params","target","isTarget","options","internalRef","useRefState","internalOptionsRef","useRef","useEffect","element","getElement","onKeyDown","event","onKeyUp"],"mappings":"mPA4EaA,EAAe,IAAIC,IAAkB,CAChD,MAAMC,EAASC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC3CG,EACJF,EACI,OAAOD,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,UAAWA,EAAO,CAAC,CAAA,EACvB,OAAOA,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,UAAWA,EAAO,CAAC,CAAA,EAGvBI,EAAcC,EAAAA,YAAY,MAAM,EAChCC,EAAqBC,EAAAA,OAAOJ,CAAO,EAsBzC,GArBAG,EAAmB,QAAUH,EAE7BK,EAAAA,UAAU,IAAM,CACd,GAAI,CAACP,GAAU,CAACG,EAAY,MAAO,OAEnC,MAAMK,EAAWR,EAASS,EAAAA,WAAWT,CAAM,EAAIG,EAAY,QAC3D,GAAI,CAACK,EAAS,OAEd,MAAME,EAAaC,GACjBN,EAAmB,SAAS,YAAYM,CAAsB,EAC1DC,EAAWD,GAAiBN,EAAmB,SAAS,UAAUM,CAAsB,EAE9F,OAAAH,EAAQ,iBAAiB,UAAWE,CAAS,EAC7CF,EAAQ,iBAAiB,QAASI,CAAO,EAElC,IAAM,CACXJ,EAAQ,oBAAoB,UAAWE,CAAS,EAChDF,EAAQ,oBAAoB,QAASI,CAAO,CAAA,CAC9C,EACC,CAACZ,EAAQG,EAAY,KAAK,CAAC,EAE1B,CAAAH,EACJ,OAAOG,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"useKeysPressed.cjs","sources":["../../../../src/hooks/useKeysPressed/useKeysPressed.ts"],"sourcesContent":["import { useEffect, 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 use keys pressed options type */\nexport interface UseKeysPressedOptions {\n /** Enable or disable the event listeners */\n enabled?: boolean;\n}\n\nexport interface UseKeysPressed {\n (\n target: HookTarget | Window,\n options?: UseKeysPressedOptions\n ): Array<{ key: string; code: string }>;\n\n <Target extends Element>(\n options?: UseKeysPressedOptions\n ): {\n value: Array<{ key: string; code: string }>;\n ref: StateRef<Target>;\n };\n}\n\n/**\n * Hook that tracks which keyboard keys are currently pressed\n *\n * @name useKeysPressed\n * @description Tracks all currently pressed keyboard keys and their codes\n * @category Sensors\n *\n * @overload\n * @param {HookTarget | Window} target DOM element or ref to attach keyboard listeners to\n * @param {UseKeysPressedOptions} [options.enabled=true] Enable or disable the event listeners\n * @returns {Array<{ key: string; code: string }>} Array of currently pressed keys with their key and code values\n *\n * @example\n * const pressedKeys = useKeysPressed(ref);\n *\n * @overload\n * @template Target - Type of the target DOM element\n * @param {UseKeysPressedOptions} [options] - Optional configuration options\n * @returns {{ keys: Array<{ key: string; code: string }>; ref: StateRef<Target> }} Object containing pressed keys array and ref to attach to a DOM element\n *\n * @example\n * const { value, ref } = useKeysPressed();\n */\nexport const useKeysPressed = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseKeysPressedOptions | undefined;\n\n const enabled = options?.enabled ?? true;\n const [value, setValue] = useState<{ key: string; code: string }[]>([]);\n const internalRef = useRefState(window);\n\n useEffect(() => {\n if (!enabled) return;\n setValue([]);\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const onKeyDown = (event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n setValue((prevValue) => {\n if (prevValue.some(({ code }) => code === keyboardEvent.code)) return prevValue;\n return [...prevValue, { key: keyboardEvent.key, code: keyboardEvent.code }];\n });\n };\n\n const onKeyUp = (event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n setValue((prevValue) => prevValue.filter(({ code }) => code !== keyboardEvent.code));\n };\n\n element.addEventListener('keydown', onKeyDown);\n element.addEventListener('keyup', onKeyUp);\n\n return () => {\n element.removeEventListener('keydown', onKeyDown);\n element.removeEventListener('keyup', onKeyUp);\n };\n }, [enabled, internalRef.state, target]);\n\n if (target) return value;\n return { value, ref: internalRef };\n}) as UseKeysPressed;\n"],"names":["useKeysPressed","params","target","isTarget","enabled","value","setValue","useState","internalRef","useRefState","useEffect","element","getElement","onKeyDown","event","keyboardEvent","prevValue","code","onKeyUp"],"mappings":"mPAqDaA,EAAkB,IAAIC,IAAkB,CACnD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAG5CG,GAFWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,IAErB,SAAW,GAC9B,CAACI,EAAOC,CAAQ,EAAIC,EAAAA,SAA0C,CAAA,CAAE,EAChEC,EAAcC,EAAAA,YAAY,MAAM,EA+BtC,OA7BAC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACN,EAAS,OACdE,EAAS,CAAA,CAAE,EAEX,MAAMK,EAAWT,EAASU,EAAAA,WAAWV,CAAM,EAAIM,EAAY,QAC3D,GAAI,CAACG,EAAS,OAEd,MAAME,EAAaC,GAAiB,CAClC,MAAMC,EAAgBD,EACtBR,EAAUU,GACJA,EAAU,KAAK,CAAC,CAAE,KAAAC,CAAA,IAAWA,IAASF,EAAc,IAAI,EAAUC,EAC/D,CAAC,GAAGA,EAAW,CAAE,IAAKD,EAAc,IAAK,KAAMA,EAAc,KAAM,CAC3E,CAAA,EAGGG,EAAWJ,GAAiB,CAChC,MAAMC,EAAgBD,EACtBR,EAAUU,GAAcA,EAAU,OAAO,CAAC,CAAE,KAAAC,CAAA,IAAWA,IAASF,EAAc,IAAI,CAAC,CAAA,EAGrF,OAAAJ,EAAQ,iBAAiB,UAAWE,CAAS,EAC7CF,EAAQ,iBAAiB,QAASO,CAAO,EAElC,IAAM,CACXP,EAAQ,oBAAoB,UAAWE,CAAS,EAChDF,EAAQ,oBAAoB,QAASO,CAAO,CAAA,CAC9C,EACC,CAACd,EAASI,EAAY,MAAON,CAAM,CAAC,EAEnCA,EAAeG,EACZ,CAAE,MAAAA,EAAO,IAAKG,CAAA,CACvB"}
1
+ {"version":3,"file":"useKeysPressed.cjs","sources":["../../../../src/hooks/useKeysPressed/useKeysPressed.ts"],"sourcesContent":["import { useEffect, 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 use keys pressed options type */\nexport interface UseKeysPressedOptions {\n /** Enable or disable the event listeners */\n enabled?: boolean;\n}\n\nexport interface UseKeysPressed {\n (\n target: HookTarget | Window,\n options?: UseKeysPressedOptions\n ): Array<{\n key: string;\n code: string;\n }>;\n\n <Target extends Element>(\n options?: UseKeysPressedOptions\n ): {\n value: Array<{ key: string; code: string }>;\n ref: StateRef<Target>;\n };\n}\n\n/**\n * Hook that tracks which keyboard keys are currently pressed\n *\n * @name useKeysPressed\n * @description Tracks all currently pressed keyboard keys and their codes\n * @category Sensors\n *\n * @overload\n * @param {HookTarget | Window} target DOM element or ref to attach keyboard listeners to\n * @param {UseKeysPressedOptions} [options.enabled=true] Enable or disable the event listeners\n * @returns {Array<{ key: string; code: string }>} Array of currently pressed keys with their key and code values\n *\n * @example\n * const pressedKeys = useKeysPressed(ref);\n *\n * @overload\n * @template Target - Type of the target DOM element\n * @param {UseKeysPressedOptions} [options] - Optional configuration options\n * @returns {{ keys: Array<{ key: string; code: string }>; ref: StateRef<Target> }} Object containing pressed keys array and ref to attach to a DOM element\n *\n * @example\n * const { value, ref } = useKeysPressed();\n */\nexport const useKeysPressed = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseKeysPressedOptions | undefined;\n\n const enabled = options?.enabled ?? true;\n const [value, setValue] = useState<{ key: string; code: string }[]>([]);\n const internalRef = useRefState(window);\n\n useEffect(() => {\n if (!enabled) return;\n setValue([]);\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const onKeyDown = (event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n setValue((prevValue) => {\n if (prevValue.some(({ code }) => code === keyboardEvent.code)) return prevValue;\n return [...prevValue, { key: keyboardEvent.key, code: keyboardEvent.code }];\n });\n };\n\n const onKeyUp = (event: Event) => {\n const keyboardEvent = event as KeyboardEvent;\n setValue((prevValue) => prevValue.filter(({ code }) => code !== keyboardEvent.code));\n };\n\n element.addEventListener('keydown', onKeyDown);\n element.addEventListener('keyup', onKeyUp);\n\n return () => {\n element.removeEventListener('keydown', onKeyDown);\n element.removeEventListener('keyup', onKeyUp);\n };\n }, [enabled, internalRef.state, target]);\n\n if (target) return value;\n return { value, ref: internalRef };\n}) as UseKeysPressed;\n"],"names":["useKeysPressed","params","target","isTarget","enabled","value","setValue","useState","internalRef","useRefState","useEffect","element","getElement","onKeyDown","event","keyboardEvent","prevValue","code","onKeyUp"],"mappings":"mPAwDaA,EAAkB,IAAIC,IAAkB,CACnD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAG5CG,GAFWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,IAErB,SAAW,GAC9B,CAACI,EAAOC,CAAQ,EAAIC,EAAAA,SAA0C,CAAA,CAAE,EAChEC,EAAcC,EAAAA,YAAY,MAAM,EA+BtC,OA7BAC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACN,EAAS,OACdE,EAAS,CAAA,CAAE,EAEX,MAAMK,EAAWT,EAASU,EAAAA,WAAWV,CAAM,EAAIM,EAAY,QAC3D,GAAI,CAACG,EAAS,OAEd,MAAME,EAAaC,GAAiB,CAClC,MAAMC,EAAgBD,EACtBR,EAAUU,GACJA,EAAU,KAAK,CAAC,CAAE,KAAAC,CAAA,IAAWA,IAASF,EAAc,IAAI,EAAUC,EAC/D,CAAC,GAAGA,EAAW,CAAE,IAAKD,EAAc,IAAK,KAAMA,EAAc,KAAM,CAC3E,CAAA,EAGGG,EAAWJ,GAAiB,CAChC,MAAMC,EAAgBD,EACtBR,EAAUU,GAAcA,EAAU,OAAO,CAAC,CAAE,KAAAC,CAAA,IAAWA,IAASF,EAAc,IAAI,CAAC,CAAA,EAGrF,OAAAJ,EAAQ,iBAAiB,UAAWE,CAAS,EAC7CF,EAAQ,iBAAiB,QAASO,CAAO,EAElC,IAAM,CACXP,EAAQ,oBAAoB,UAAWE,CAAS,EAChDF,EAAQ,oBAAoB,QAASO,CAAO,CAAA,CAC9C,EACC,CAACd,EAASI,EAAY,MAAON,CAAM,CAAC,EAEnCA,EAAeG,EACZ,CAAE,MAAAA,EAAO,IAAKG,CAAA,CACvB"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),n=r=>{const e=c.useRef(!1),t=c.useRef(r);return t.current=r,async(...u)=>{if(!e.current){e.current=!0;try{return await t.current(...u)}finally{e.current=!1}}}};exports.useLockCallback=n;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),u=r=>{const e=n.useRef(!1),t=n.useRef(r);return t.current=r,async(...c)=>{if(!e.current){e.current=!0;try{return await t.current(...c)}finally{e.current=!1}}}};exports.useLockCallback=u;
2
2
  //# sourceMappingURL=useLockCallback.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useLockCallback.cjs","sources":["../../../../src/hooks/useLockCallback/useLockCallback.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * @name useLockCallback\n * @description - Hook that prevents a callback from being executed multiple times simultaneously\n * @category Utilities\n *\n * @param {Function} callback The callback to be locked\n * @returns {Function} The locked callback\n *\n * @example\n * const lockedCallback = useLockCallback(() => promise());\n */\nexport const useLockCallback = <Callback extends (...args: any[]) => any>(callback: Callback) => {\n const lockRef = useRef(false);\n const callbackRef = useRef(callback);\n callbackRef.current = callback;\n\n return async (...args: Parameters<Callback>) => {\n if (lockRef.current) return;\n lockRef.current = true;\n\n try {\n return await callbackRef.current(...args);\n } finally {\n lockRef.current = false;\n }\n };\n};\n"],"names":["useLockCallback","callback","lockRef","useRef","callbackRef","args"],"mappings":"yGAaaA,EAA6DC,GAAuB,CAC/F,MAAMC,EAAUC,EAAAA,OAAO,EAAK,EACtBC,EAAcD,EAAAA,OAAOF,CAAQ,EACnC,OAAAG,EAAY,QAAUH,EAEf,SAAUI,IAA+B,CAC9C,GAAI,CAAAH,EAAQ,QACZ,CAAAA,EAAQ,QAAU,GAElB,GAAI,CACF,OAAO,MAAME,EAAY,QAAQ,GAAGC,CAAI,CAAA,QAC1C,CACEH,EAAQ,QAAU,EAAA,EACpB,CAEJ"}
1
+ {"version":3,"file":"useLockCallback.cjs","sources":["../../../../src/hooks/useLockCallback/useLockCallback.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * @name useLockCallback\n * @description - Hook that prevents a callback from being executed multiple times simultaneously\n * @category Utilities\n *\n * @param {Function} callback The callback to be locked\n * @returns {Function} The locked callback\n *\n * @example\n * const lockedCallback = useLockCallback(() => promise());\n */\nexport const useLockCallback = <Callback extends (...args: any[]) => any>(callback: Callback) => {\n const lockRef = useRef(false);\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n return async (...args: Parameters<Callback>) => {\n if (lockRef.current) return;\n lockRef.current = true;\n\n try {\n return await internalCallbackRef.current(...args);\n } finally {\n lockRef.current = false;\n }\n };\n};\n"],"names":["useLockCallback","callback","lockRef","useRef","internalCallbackRef","args"],"mappings":"yGAaaA,EAA6DC,GAAuB,CAC/F,MAAMC,EAAUC,EAAAA,OAAO,EAAK,EACtBC,EAAsBD,EAAAA,OAAOF,CAAQ,EAC3C,OAAAG,EAAoB,QAAUH,EAEvB,SAAUI,IAA+B,CAC9C,GAAI,CAAAH,EAAQ,QACZ,CAAAA,EAAQ,QAAU,GAElB,GAAI,CACF,OAAO,MAAME,EAAoB,QAAQ,GAAGC,CAAI,CAAA,QAClD,CACEH,EAAQ,QAAU,EAAA,EACpB,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMemory.cjs","sources":["../../../../src/hooks/useMemory/useMemory.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\ndeclare global {\n interface Performance {\n memory: {\n readonly jsHeapSizeLimit: number;\n readonly totalJSHeapSize: number;\n readonly usedJSHeapSize: number;\n };\n }\n}\n\n/** The use memory return type */\nexport interface UseMemoryReturn {\n /** The memory supported status */\n supported: boolean;\n /** The current memory usage */\n value: Performance['memory'];\n}\n\n/**\n * @name useMemory\n * @description - Hook that gives you current memory usage\n * @category Browser\n *\n * @browserapi performance.memory https://developer.mozilla.org/en-US/docs/Web/API/Performance/memory\n *\n * @returns {UseMemoryReturn} An object containing the current memory usage\n *\n * @example\n * const { supported, value } = useMemory();\n */\nexport const useMemory = (): UseMemoryReturn => {\n const supported = performance && 'memory' in performance && !!performance.memory;\n const [value, setValue] = useState<Performance['memory']>(\n performance?.memory ?? {\n jsHeapSizeLimit: 0,\n totalJSHeapSize: 0,\n usedJSHeapSize: 0\n }\n );\n\n useEffect(() => {\n if (!supported) return;\n\n const intervalId = setInterval(() => setValue(performance.memory), 1000);\n\n return () => clearInterval(intervalId);\n }, []);\n\n return { supported, value };\n};\n"],"names":["useMemory","supported","value","setValue","useState","useEffect","intervalId"],"mappings":"yGAgCaA,EAAY,IAAuB,CAC9C,MAAMC,EAAY,aAAe,WAAY,aAAe,CAAC,CAAC,YAAY,OACpE,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SACxB,aAAa,QAAU,CACrB,gBAAiB,EACjB,gBAAiB,EACjB,eAAgB,CAAA,CAClB,EAGFC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACJ,EAAW,OAEhB,MAAMK,EAAa,YAAY,IAAMH,EAAS,YAAY,MAAM,EAAG,GAAI,EAEvE,MAAO,IAAM,cAAcG,CAAU,CAAA,EACpC,EAAE,EAEE,CAAE,UAAAL,EAAW,MAAAC,CAAA,CACtB"}
1
+ {"version":3,"file":"useMemory.cjs","sources":["../../../../src/hooks/useMemory/useMemory.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\ndeclare global {\n interface Performance {\n memory: {\n readonly jsHeapSizeLimit: number;\n readonly totalJSHeapSize: number;\n readonly usedJSHeapSize: number;\n };\n }\n}\n\n/** The use memory return type */\nexport interface UseMemoryReturn {\n /** The memory supported status */\n supported: boolean;\n /** The current memory usage */\n value: Performance['memory'];\n}\n\n/**\n * @name useMemory\n * @description - Hook that gives you current memory usage\n * @category Browser\n *\n * @browserapi performance.memory https://developer.mozilla.org/en-US/docs/Web/API/Performance/memory\n *\n * @returns {UseMemoryReturn} An object containing the current memory usage\n *\n * @example\n * const { supported, value } = useMemory();\n */\nexport const useMemory = (): UseMemoryReturn => {\n const supported = performance && 'memory' in performance && !!performance.memory;\n const [value, setValue] = useState<Performance['memory']>(\n performance?.memory ?? {\n jsHeapSizeLimit: 0,\n totalJSHeapSize: 0,\n usedJSHeapSize: 0\n }\n );\n\n useEffect(() => {\n if (!supported) return;\n const intervalId = setInterval(() => setValue(performance.memory), 1000);\n return () => clearInterval(intervalId);\n }, []);\n\n return { supported, value };\n};\n"],"names":["useMemory","supported","value","setValue","useState","useEffect","intervalId"],"mappings":"yGAgCaA,EAAY,IAAuB,CAC9C,MAAMC,EAAY,aAAe,WAAY,aAAe,CAAC,CAAC,YAAY,OACpE,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SACxB,aAAa,QAAU,CACrB,gBAAiB,EACjB,gBAAiB,EACjB,eAAgB,CAAA,CAClB,EAGFC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACJ,EAAW,OAChB,MAAMK,EAAa,YAAY,IAAMH,EAAS,YAAY,MAAM,EAAG,GAAI,EACvE,MAAO,IAAM,cAAcG,CAAU,CAAA,EACpC,EAAE,EAEE,CAAE,UAAAL,EAAW,MAAAC,CAAA,CACtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useScroll.cjs","sources":["../../../../src/hooks/useScroll/useScroll.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\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\n\nexport interface UseScrollOptions {\n /** The on scroll callback */\n onScroll?: (params: UseScrollCallbackParams, event: Event) => void;\n\n /** The on end scroll callback */\n onStop?: (event: Event) => void;\n\n /** Offset arrived states by x pixels. */\n offset?: {\n left?: number;\n right?: number;\n top?: number;\n bottom?: number;\n };\n}\n\nexport interface UseScrollCallbackParams {\n /** The element x position */\n x: number;\n /** The element y position */\n y: number;\n /** State of scroll arrived */\n arrived: {\n left: boolean;\n right: boolean;\n top: boolean;\n bottom: boolean;\n };\n /** State of scroll direction */\n directions: {\n left: boolean;\n right: boolean;\n top: boolean;\n bottom: boolean;\n };\n}\n\nexport interface UseScroll {\n (target: HookTarget, callback?: (params: UseScrollCallbackParams, event: Event) => void): boolean;\n\n (target: HookTarget, options?: UseScrollOptions): boolean;\n\n <Target extends Element>(\n callback?: (params: UseScrollCallbackParams, event: Event) => void,\n target?: never\n ): {\n ref: StateRef<Target>;\n scrolling: boolean;\n };\n\n <Target extends Element>(\n options?: UseScrollOptions,\n target?: never\n ): {\n ref: StateRef<Target>;\n scrolling: boolean;\n };\n}\n\n/**\n * @name useScroll\n * @description - Hook that allows you to control scroll a element\n * @category Sensors\n *\n * @overload\n * @template Target The target element\n * @param {ScrollBehavior} [options.behavior=auto] The behavior of scrolling\n * @param {number} [options.offset.left=0] The left offset for arrived states\n * @param {number} [options.offset.right=0] The right offset for arrived states\n * @param {number} [options.offset.top=0] The top offset for arrived states\n * @param {number} [options.offset.bottom=0] The bottom offset for arrived states\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [options.onScroll] The callback function to be invoked on scroll\n * @param {(event: Event) => void} [options.onStop] The callback function to be invoked on scroll end\n * @returns {boolean} The state of scrolling\n *\n * @example\n * const scrolling = useScroll(ref, options);\n *\n * @overload\n * @template Target The target element\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [callback] The callback function to be invoked on scroll\n * @returns {boolean} The state of scrolling\n *\n * @example\n * const scrolling = useScroll(ref, () => console.log('callback'));\n *\n * @overload\n * @template Target The target element\n * @param {Target} target The target element to scroll\n * @param {ScrollBehavior} [options.behavior=auto] The behavior of scrolling\n * @param {number} [options.offset.left=0] The left offset for arrived states\n * @param {number} [options.offset.right=0] The right offset for arrived states\n * @param {number} [options.offset.top=0] The top offset for arrived states\n * @param {number} [options.offset.bottom=0] The bottom offset for arrived states\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [options.onScroll] The callback function to be invoked on scroll\n * @param {(event: Event) => void} [options.onStop] The callback function to be invoked on scroll end\n * @returns {[StateRef<Target>, boolean]} The state of scrolling\n *\n * @example\n * const { ref, scrolling } = useScroll(options);\n *\n * @overload\n * @template Target The target element\n * @param {Target} target The target element to scroll\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [callback] The callback function to be invoked on scroll\n * @returns {[StateRef<Target>, boolean]} The state of scrolling\n *\n * @example\n * const { ref, scrolling } = useScroll(() => console.log('callback'));\n */\nexport const useScroll = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onScroll: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onScroll: params[0] }\n ) as UseScrollOptions | undefined;\n\n const internalRef = useRefState<Element>();\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n const [scrolling, setScrolling] = useState(false);\n const scrollPositionRef = useRef({ x: 0, y: 0 });\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const element = (target ? getElement(target) : internalRef.current) as Element;\n\n if (!element) return;\n\n const onScrollEnd = (event: Event) => {\n setScrolling(false);\n options?.onStop?.(event);\n };\n\n const onScroll = (event: Event) => {\n setScrolling(true);\n const target = (\n event.target === document ? (event.target as Document).documentElement : event.target\n ) as HTMLElement;\n\n const { display, flexDirection, direction } = target.style;\n const directionMultiplier = direction === 'rtl' ? -1 : 1;\n\n const scrollLeft = target.scrollLeft;\n let scrollTop = target.scrollTop;\n if (target instanceof Document && !scrollTop) scrollTop = window.document.body.scrollTop;\n\n const offset = internalOptionsRef.current?.offset;\n const left = scrollLeft * directionMultiplier <= (offset?.left ?? 0);\n const right =\n scrollLeft * directionMultiplier + target.clientWidth >=\n target.scrollWidth - (offset?.right ?? 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n const top = scrollTop <= (offset?.top ?? 0);\n const bottom =\n scrollTop + target.clientHeight >=\n target.scrollHeight - (offset?.bottom ?? 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\n\n const isColumnReverse = display === 'flex' && flexDirection === 'column-reverse';\n const isRowReverse = display === 'flex' && flexDirection === 'column-reverse';\n\n const params = {\n x: scrollLeft,\n y: scrollTop,\n directions: {\n left: scrollLeft < scrollPositionRef.current.x,\n right: scrollLeft > scrollPositionRef.current.x,\n top: scrollTop < scrollPositionRef.current.y,\n bottom: scrollTop > scrollPositionRef.current.y\n },\n arrived: {\n left: isRowReverse ? right : left,\n right: isRowReverse ? left : right,\n top: isColumnReverse ? bottom : top,\n bottom: isColumnReverse ? top : bottom\n }\n };\n\n scrollPositionRef.current = { x: scrollLeft, y: scrollTop };\n internalOptionsRef.current?.onScroll?.(params, event);\n };\n\n element.addEventListener('scroll', onScroll);\n element.addEventListener('scrollend', onScrollEnd);\n\n return () => {\n element.removeEventListener('scroll', onScroll);\n element.removeEventListener('scrollend', onScrollEnd);\n };\n }, [target, internalRef.state]);\n\n if (target) return scrolling;\n return {\n ref: internalRef,\n scrolling\n };\n}) as UseScroll;\n"],"names":["ARRIVED_STATE_THRESHOLD_PIXELS","useScroll","params","target","isTarget","options","internalRef","useRefState","internalOptionsRef","useRef","scrolling","setScrolling","useState","scrollPositionRef","useEffect","element","getElement","onScrollEnd","event","onScroll","display","flexDirection","direction","directionMultiplier","scrollLeft","scrollTop","offset","left","right","top","bottom","isColumnReverse","isRowReverse"],"mappings":"mPAUMA,EAAiC,EAgH1BC,EAAa,IAAIC,IAAkB,CAC9C,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,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,EAAcC,EAAAA,YAAA,EACdC,EAAqBC,EAAAA,OAAOJ,CAAO,EACzCG,EAAmB,QAAUH,EAE7B,KAAM,CAACK,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAK,EAC1CC,EAAoBJ,EAAAA,OAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAqE/C,OAnEAK,EAAAA,UAAU,IAAM,CACd,GAAI,CAACX,GAAU,CAACG,EAAY,MAAO,OACnC,MAAMS,EAAWZ,EAASa,EAAAA,WAAWb,CAAM,EAAIG,EAAY,QAE3D,GAAI,CAACS,EAAS,OAEd,MAAME,EAAeC,GAAiB,CACpCP,EAAa,EAAK,EAClBN,GAAS,SAASa,CAAK,CAAA,EAGnBC,EAAYD,GAAiB,CACjCP,EAAa,EAAI,EACjB,MAAMR,EACJe,EAAM,SAAW,SAAYA,EAAM,OAAoB,gBAAkBA,EAAM,OAG3E,CAAE,QAAAE,EAAS,cAAAC,EAAe,UAAAC,CAAA,EAAcnB,EAAO,MAC/CoB,EAAsBD,IAAc,MAAQ,GAAK,EAEjDE,EAAarB,EAAO,WAC1B,IAAIsB,EAAYtB,EAAO,UACnBA,aAAkB,UAAY,CAACsB,IAAWA,EAAY,OAAO,SAAS,KAAK,WAE/E,MAAMC,EAASlB,EAAmB,SAAS,OACrCmB,EAAOH,EAAaD,IAAwBG,GAAQ,MAAQ,GAC5DE,EACJJ,EAAaD,EAAsBpB,EAAO,aAC1CA,EAAO,aAAeuB,GAAQ,OAAS,GAAK1B,EACxC6B,EAAMJ,IAAcC,GAAQ,KAAO,GACnCI,EACJL,EAAYtB,EAAO,cACnBA,EAAO,cAAgBuB,GAAQ,QAAU,GAAK1B,EAE1C+B,EAAkBX,IAAY,QAAUC,IAAkB,iBAC1DW,EAAeZ,IAAY,QAAUC,IAAkB,iBAEvDnB,EAAS,CACb,EAAGsB,EACH,EAAGC,EACH,WAAY,CACV,KAAMD,EAAaX,EAAkB,QAAQ,EAC7C,MAAOW,EAAaX,EAAkB,QAAQ,EAC9C,IAAKY,EAAYZ,EAAkB,QAAQ,EAC3C,OAAQY,EAAYZ,EAAkB,QAAQ,CAAA,EAEhD,QAAS,CACP,KAAMmB,EAAeJ,EAAQD,EAC7B,MAAOK,EAAeL,EAAOC,EAC7B,IAAKG,EAAkBD,EAASD,EAChC,OAAQE,EAAkBF,EAAMC,CAAA,CAClC,EAGFjB,EAAkB,QAAU,CAAE,EAAGW,EAAY,EAAGC,CAAA,EAChDjB,EAAmB,SAAS,WAAWN,EAAQgB,CAAK,CAAA,EAGtD,OAAAH,EAAQ,iBAAiB,SAAUI,CAAQ,EAC3CJ,EAAQ,iBAAiB,YAAaE,CAAW,EAE1C,IAAM,CACXF,EAAQ,oBAAoB,SAAUI,CAAQ,EAC9CJ,EAAQ,oBAAoB,YAAaE,CAAW,CAAA,CACtD,EACC,CAACd,EAAQG,EAAY,KAAK,CAAC,EAE1BH,EAAeO,EACZ,CACL,IAAKJ,EACL,UAAAI,CAAA,CAEJ"}
1
+ {"version":3,"file":"useScroll.cjs","sources":["../../../../src/hooks/useScroll/useScroll.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\r\n\r\nimport type { HookTarget } from '@/utils/helpers';\r\n\r\nimport { getElement, isTarget } from '@/utils/helpers';\r\n\r\nimport type { StateRef } from '../useRefState/useRefState';\r\n\r\nimport { useRefState } from '../useRefState/useRefState';\r\n\r\nconst ARRIVED_STATE_THRESHOLD_PIXELS = 1;\r\n\r\nexport interface UseScrollOptions {\r\n /** The on scroll callback */\r\n onScroll?: (params: UseScrollCallbackParams, event: Event) => void;\r\n\r\n /** The on end scroll callback */\r\n onStop?: (event: Event) => void;\r\n\r\n /** Offset arrived states by x pixels. */\r\n offset?: {\r\n left?: number;\r\n right?: number;\r\n top?: number;\r\n bottom?: number;\r\n };\r\n}\r\n\r\nexport interface UseScrollCallbackParams {\r\n /** The element x position */\r\n x: number;\r\n /** The element y position */\r\n y: number;\r\n /** State of scroll arrived */\r\n arrived: {\r\n left: boolean;\r\n right: boolean;\r\n top: boolean;\r\n bottom: boolean;\r\n };\r\n /** State of scroll direction */\r\n directions: {\r\n left: boolean;\r\n right: boolean;\r\n top: boolean;\r\n bottom: boolean;\r\n };\r\n}\r\n\r\nexport interface UseScroll {\r\n (target: HookTarget, callback?: (params: UseScrollCallbackParams, event: Event) => void): boolean;\r\n\r\n (target: HookTarget, options?: UseScrollOptions): boolean;\r\n\r\n <Target extends Element>(\r\n callback?: (params: UseScrollCallbackParams, event: Event) => void,\r\n target?: never\r\n ): {\r\n ref: StateRef<Target>;\r\n scrolling: boolean;\r\n };\r\n\r\n <Target extends Element>(\r\n options?: UseScrollOptions,\r\n target?: never\r\n ): {\r\n ref: StateRef<Target>;\r\n scrolling: boolean;\r\n };\r\n}\r\n\r\n/**\r\n * @name useScroll\r\n * @description - Hook that allows you to control scroll a element\r\n * @category Sensors\r\n *\r\n * @overload\r\n * @template Target The target element\r\n * @param {ScrollBehavior} [options.behavior=auto] The behavior of scrolling\r\n * @param {number} [options.offset.left=0] The left offset for arrived states\r\n * @param {number} [options.offset.right=0] The right offset for arrived states\r\n * @param {number} [options.offset.top=0] The top offset for arrived states\r\n * @param {number} [options.offset.bottom=0] The bottom offset for arrived states\r\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [options.onScroll] The callback function to be invoked on scroll\r\n * @param {(event: Event) => void} [options.onStop] The callback function to be invoked on scroll end\r\n * @returns {boolean} The state of scrolling\r\n *\r\n * @example\r\n * const scrolling = useScroll(ref, options);\r\n *\r\n * @overload\r\n * @template Target The target element\r\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [callback] The callback function to be invoked on scroll\r\n * @returns {boolean} The state of scrolling\r\n *\r\n * @example\r\n * const scrolling = useScroll(ref, () => console.log('callback'));\r\n *\r\n * @overload\r\n * @template Target The target element\r\n * @param {Target} target The target element to scroll\r\n * @param {ScrollBehavior} [options.behavior=auto] The behavior of scrolling\r\n * @param {number} [options.offset.left=0] The left offset for arrived states\r\n * @param {number} [options.offset.right=0] The right offset for arrived states\r\n * @param {number} [options.offset.top=0] The top offset for arrived states\r\n * @param {number} [options.offset.bottom=0] The bottom offset for arrived states\r\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [options.onScroll] The callback function to be invoked on scroll\r\n * @param {(event: Event) => void} [options.onStop] The callback function to be invoked on scroll end\r\n * @returns {[StateRef<Target>, boolean]} The state of scrolling\r\n *\r\n * @example\r\n * const { ref, scrolling } = useScroll(options);\r\n *\r\n * @overload\r\n * @template Target The target element\r\n * @param {Target} target The target element to scroll\r\n * @param {(params: UseScrollCallbackParams, event: Event) => void} [callback] The callback function to be invoked on scroll\r\n * @returns {[StateRef<Target>, boolean]} The state of scrolling\r\n *\r\n * @example\r\n * const { ref, scrolling } = useScroll(() => console.log('callback'));\r\n */\r\nexport const useScroll = ((...params: any[]) => {\r\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\r\n const options = (\r\n target\r\n ? typeof params[1] === 'object'\r\n ? params[1]\r\n : { onScroll: params[1] }\r\n : typeof params[0] === 'object'\r\n ? params[0]\r\n : { onScroll: params[0] }\r\n ) as UseScrollOptions | undefined;\r\n\r\n const internalRef = useRefState<Element>();\r\n const internalOptionsRef = useRef(options);\r\n internalOptionsRef.current = options;\r\n\r\n const [scrolling, setScrolling] = useState(false);\r\n const scrollPositionRef = useRef({ x: 0, y: 0 });\r\n\r\n useEffect(() => {\r\n if (!target && !internalRef.state) return;\r\n const element = (target ? getElement(target) : internalRef.current) as Element;\r\n\r\n if (!element) return;\r\n\r\n const onScrollEnd = (event: Event) => {\r\n setScrolling(false);\r\n options?.onStop?.(event);\r\n };\r\n\r\n const onScroll = (event: Event) => {\r\n setScrolling(true);\r\n const target = (\r\n event.target === document ? (event.target as Document).documentElement : event.target\r\n ) as HTMLElement;\r\n\r\n const { display, flexDirection, direction } = target.style;\r\n const directionMultiplier = direction === 'rtl' ? -1 : 1;\r\n\r\n const scrollLeft = target.scrollLeft;\r\n let scrollTop = target.scrollTop;\r\n if (target instanceof Document && !scrollTop) scrollTop = window.document.body.scrollTop;\r\n\r\n const offset = internalOptionsRef.current?.offset;\r\n const left = scrollLeft * directionMultiplier <= (offset?.left ?? 0);\r\n const right =\r\n scrollLeft * directionMultiplier + target.clientWidth >=\r\n target.scrollWidth - (offset?.right ?? 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\r\n const top = scrollTop <= (offset?.top ?? 0);\r\n const bottom =\r\n scrollTop + target.clientHeight >=\r\n target.scrollHeight - (offset?.bottom ?? 0) - ARRIVED_STATE_THRESHOLD_PIXELS;\r\n\r\n const isColumnReverse = display === 'flex' && flexDirection === 'column-reverse';\r\n const isRowReverse = display === 'flex' && flexDirection === 'column-reverse';\r\n\r\n const params = {\r\n x: scrollLeft,\r\n y: scrollTop,\r\n directions: {\r\n left: scrollLeft < scrollPositionRef.current.x,\r\n right: scrollLeft > scrollPositionRef.current.x,\r\n top: scrollTop < scrollPositionRef.current.y,\r\n bottom: scrollTop > scrollPositionRef.current.y\r\n },\r\n arrived: {\r\n left: isRowReverse ? right : left,\r\n right: isRowReverse ? left : right,\r\n top: isColumnReverse ? bottom : top,\r\n bottom: isColumnReverse ? top : bottom\r\n }\r\n };\r\n\r\n scrollPositionRef.current = { x: scrollLeft, y: scrollTop };\r\n internalOptionsRef.current?.onScroll?.(params, event);\r\n };\r\n\r\n element.addEventListener('scroll', onScroll);\r\n element.addEventListener('scrollend', onScrollEnd);\r\n\r\n return () => {\r\n element.removeEventListener('scroll', onScroll);\r\n element.removeEventListener('scrollend', onScrollEnd);\r\n };\r\n }, [target, internalRef.state]);\r\n\r\n if (target) return scrolling;\r\n return {\r\n ref: internalRef,\r\n scrolling\r\n };\r\n}) as UseScroll;\r\n"],"names":["ARRIVED_STATE_THRESHOLD_PIXELS","useScroll","params","target","isTarget","options","internalRef","useRefState","internalOptionsRef","useRef","scrolling","setScrolling","useState","scrollPositionRef","useEffect","element","getElement","onScrollEnd","event","onScroll","display","flexDirection","direction","directionMultiplier","scrollLeft","scrollTop","offset","left","right","top","bottom","isColumnReverse","isRowReverse"],"mappings":"mPAUMA,EAAiC,EAgH1BC,EAAa,IAAIC,IAAkB,CAC9C,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,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,EAAcC,EAAAA,YAAA,EACdC,EAAqBC,EAAAA,OAAOJ,CAAO,EACzCG,EAAmB,QAAUH,EAE7B,KAAM,CAACK,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAK,EAC1CC,EAAoBJ,EAAAA,OAAO,CAAE,EAAG,EAAG,EAAG,EAAG,EAqE/C,OAnEAK,EAAAA,UAAU,IAAM,CACd,GAAI,CAACX,GAAU,CAACG,EAAY,MAAO,OACnC,MAAMS,EAAWZ,EAASa,EAAAA,WAAWb,CAAM,EAAIG,EAAY,QAE3D,GAAI,CAACS,EAAS,OAEd,MAAME,EAAeC,GAAiB,CACpCP,EAAa,EAAK,EAClBN,GAAS,SAASa,CAAK,CAAA,EAGnBC,EAAYD,GAAiB,CACjCP,EAAa,EAAI,EACjB,MAAMR,EACJe,EAAM,SAAW,SAAYA,EAAM,OAAoB,gBAAkBA,EAAM,OAG3E,CAAE,QAAAE,EAAS,cAAAC,EAAe,UAAAC,CAAA,EAAcnB,EAAO,MAC/CoB,EAAsBD,IAAc,MAAQ,GAAK,EAEjDE,EAAarB,EAAO,WAC1B,IAAIsB,EAAYtB,EAAO,UACnBA,aAAkB,UAAY,CAACsB,IAAWA,EAAY,OAAO,SAAS,KAAK,WAE/E,MAAMC,EAASlB,EAAmB,SAAS,OACrCmB,EAAOH,EAAaD,IAAwBG,GAAQ,MAAQ,GAC5DE,EACJJ,EAAaD,EAAsBpB,EAAO,aAC1CA,EAAO,aAAeuB,GAAQ,OAAS,GAAK1B,EACxC6B,EAAMJ,IAAcC,GAAQ,KAAO,GACnCI,EACJL,EAAYtB,EAAO,cACnBA,EAAO,cAAgBuB,GAAQ,QAAU,GAAK1B,EAE1C+B,EAAkBX,IAAY,QAAUC,IAAkB,iBAC1DW,EAAeZ,IAAY,QAAUC,IAAkB,iBAEvDnB,EAAS,CACb,EAAGsB,EACH,EAAGC,EACH,WAAY,CACV,KAAMD,EAAaX,EAAkB,QAAQ,EAC7C,MAAOW,EAAaX,EAAkB,QAAQ,EAC9C,IAAKY,EAAYZ,EAAkB,QAAQ,EAC3C,OAAQY,EAAYZ,EAAkB,QAAQ,CAAA,EAEhD,QAAS,CACP,KAAMmB,EAAeJ,EAAQD,EAC7B,MAAOK,EAAeL,EAAOC,EAC7B,IAAKG,EAAkBD,EAASD,EAChC,OAAQE,EAAkBF,EAAMC,CAAA,CAClC,EAGFjB,EAAkB,QAAU,CAAE,EAAGW,EAAY,EAAGC,CAAA,EAChDjB,EAAmB,SAAS,WAAWN,EAAQgB,CAAK,CAAA,EAGtD,OAAAH,EAAQ,iBAAiB,SAAUI,CAAQ,EAC3CJ,EAAQ,iBAAiB,YAAaE,CAAW,EAE1C,IAAM,CACXF,EAAQ,oBAAoB,SAAUI,CAAQ,EAC9CJ,EAAQ,oBAAoB,YAAaE,CAAW,CAAA,CACtD,EACC,CAACd,EAAQG,EAAY,KAAK,CAAC,EAE1BH,EAAeO,EACZ,CACL,IAAKJ,EACL,UAAAI,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useWindowEvent.cjs","sources":["../../../../src/hooks/useWindowEvent/useWindowEvent.ts"],"sourcesContent":["import { target } from '@/utils/helpers';\n\nimport type { UseEventListenerOptions } from '../useEventListener/useEventListener';\n\nimport { useEventListener } from '../useEventListener/useEventListener';\n\n/**\n * @name useWindowEvent\n * @description - Hook attaches an event listener to the window object for the specified event\n * @category Browser\n *\n * @template Event Key of window event map.\n * @param {Event} event The event to listen for.\n * @param {(event: WindowEventMap[Event]) => void} listener The callback function to be executed when the event is triggered\n * @param {UseEventListenerOptions} [options] The options for the event listener\n * @returns {void}\n *\n * @example\n * useWindowEvent('click', () => console.log('clicked'));\n */\nexport const useWindowEvent = <Event extends keyof WindowEventMap>(\n event: Event,\n listener: (this: Window, event: WindowEventMap[Event]) => any,\n options?: UseEventListenerOptions\n) => useEventListener(target(window), event, listener, options);\n"],"names":["useWindowEvent","event","listener","options","useEventListener","target"],"mappings":"4LAoBaA,EAAiB,CAC5BC,EACAC,EACAC,IACGC,EAAAA,iBAAiBC,EAAAA,OAAO,MAAM,EAAGJ,EAAOC,EAAUC,CAAO"}
1
+ {"version":3,"file":"useWindowEvent.cjs","sources":["../../../../src/hooks/useWindowEvent/useWindowEvent.ts"],"sourcesContent":["import { target } from '@/utils/helpers';\n\nimport type { UseEventListenerOptions } from '../useEventListener/useEventListener';\n\nimport { useEventListener } from '../useEventListener/useEventListener';\n\n/**\n * @name useWindowEvent\n * @description - Hook attaches an event listener to the window object for the specified event\n * @category Events\n *\n * @template Event Key of window event map.\n * @param {Event} event The event to listen for.\n * @param {(event: WindowEventMap[Event]) => void} listener The callback function to be executed when the event is triggered\n * @param {UseEventListenerOptions} [options] The options for the event listener\n * @returns {void}\n *\n * @example\n * useWindowEvent('click', () => console.log('clicked'));\n */\nexport const useWindowEvent = <Event extends keyof WindowEventMap>(\n event: Event,\n listener: (this: Window, event: WindowEventMap[Event]) => any,\n options?: UseEventListenerOptions\n) => useEventListener(target(window), event, listener, options);\n"],"names":["useWindowEvent","event","listener","options","useEventListener","target"],"mappings":"4LAoBaA,EAAiB,CAC5BC,EACAC,EACAC,IACGC,EAAAA,iBAAiBC,EAAAA,OAAO,MAAM,EAAGJ,EAAOC,EAAUC,CAAO"}
@@ -1 +1 @@
1
- {"version":3,"file":"useWindowScroll.cjs","sources":["../../../../src/hooks/useWindowScroll/useWindowScroll.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface ScrollPosition {\n x: number;\n y: number;\n}\n\nexport const scrollTo = ({\n x,\n y,\n behavior = 'smooth'\n}: Partial<ScrollPosition & ScrollOptions>) => {\n const scrollOptions: ScrollToOptions = { behavior };\n if (typeof x === 'number') scrollOptions.left = x;\n if (typeof y === 'number') scrollOptions.top = y;\n window.scrollTo(scrollOptions);\n};\n\n/**\n * @name useWindowScroll\n * @description - Hook that manages the window scroll position\n * @category Browser\n *\n * @returns {UseWindowScrollReturn} An object containing the current window scroll position\n *\n * @example\n * const { value, scrollTo } = useWindowScroll();\n */\nexport const useWindowScroll = () => {\n const [value, setValue] = useState<ScrollPosition>({\n x: typeof window !== 'undefined' ? window.scrollX : Number.POSITIVE_INFINITY,\n y: typeof window !== 'undefined' ? window.scrollY : Number.POSITIVE_INFINITY\n });\n\n useEffect(() => {\n const onChange = () => setValue({ x: window.scrollX, y: window.scrollY });\n window.addEventListener('scroll', onChange);\n window.addEventListener('resize', onChange);\n return () => {\n window.removeEventListener('scroll', onChange);\n window.removeEventListener('resize', onChange);\n };\n }, []);\n\n return { value, scrollTo };\n};\n"],"names":["scrollTo","x","y","behavior","scrollOptions","useWindowScroll","value","setValue","useState","useEffect","onChange"],"mappings":"yGAOaA,EAAW,CAAC,CACvB,EAAAC,EACA,EAAAC,EACA,SAAAC,EAAW,QACb,IAA+C,CAC7C,MAAMC,EAAiC,CAAE,SAAAD,CAAA,EACrC,OAAOF,GAAM,WAAUG,EAAc,KAAOH,GAC5C,OAAOC,GAAM,WAAUE,EAAc,IAAMF,GAC/C,OAAO,SAASE,CAAa,CAC/B,EAYaC,EAAkB,IAAM,CACnC,KAAM,CAACC,EAAOC,CAAQ,EAAIC,WAAyB,CACjD,EAAG,OAAO,OAAW,IAAc,OAAO,QAAU,OAAO,kBAC3D,EAAG,OAAO,OAAW,IAAc,OAAO,QAAU,OAAO,iBAAA,CAC5D,EAEDC,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,IAAMH,EAAS,CAAE,EAAG,OAAO,QAAS,EAAG,OAAO,QAAS,EACxE,cAAO,iBAAiB,SAAUG,CAAQ,EAC1C,OAAO,iBAAiB,SAAUA,CAAQ,EACnC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAQ,EAC7C,OAAO,oBAAoB,SAAUA,CAAQ,CAAA,CAC/C,EACC,EAAE,EAEE,CAAE,MAAAJ,EAAO,SAAAN,CAAA,CAClB"}
1
+ {"version":3,"file":"useWindowScroll.cjs","sources":["../../../../src/hooks/useWindowScroll/useWindowScroll.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface ScrollPosition {\n x: number;\n y: number;\n}\n\nexport const scrollTo = ({\n x,\n y,\n behavior = 'smooth'\n}: Partial<ScrollPosition & ScrollOptions>) => {\n const scrollOptions: ScrollToOptions = { behavior };\n if (typeof x === 'number') scrollOptions.left = x;\n if (typeof y === 'number') scrollOptions.top = y;\n window.scrollTo(scrollOptions);\n};\n\n/**\n * @name useWindowScroll\n * @description - Hook that manages the window scroll position\n * @category Sensors\n *\n * @returns {UseWindowScrollReturn} An object containing the current window scroll position\n *\n * @example\n * const { value, scrollTo } = useWindowScroll();\n */\nexport const useWindowScroll = () => {\n const [value, setValue] = useState<ScrollPosition>({\n x: typeof window !== 'undefined' ? window.scrollX : Number.POSITIVE_INFINITY,\n y: typeof window !== 'undefined' ? window.scrollY : Number.POSITIVE_INFINITY\n });\n\n useEffect(() => {\n const onChange = () => setValue({ x: window.scrollX, y: window.scrollY });\n window.addEventListener('scroll', onChange);\n window.addEventListener('resize', onChange);\n return () => {\n window.removeEventListener('scroll', onChange);\n window.removeEventListener('resize', onChange);\n };\n }, []);\n\n return { value, scrollTo };\n};\n"],"names":["scrollTo","x","y","behavior","scrollOptions","useWindowScroll","value","setValue","useState","useEffect","onChange"],"mappings":"yGAOaA,EAAW,CAAC,CACvB,EAAAC,EACA,EAAAC,EACA,SAAAC,EAAW,QACb,IAA+C,CAC7C,MAAMC,EAAiC,CAAE,SAAAD,CAAA,EACrC,OAAOF,GAAM,WAAUG,EAAc,KAAOH,GAC5C,OAAOC,GAAM,WAAUE,EAAc,IAAMF,GAC/C,OAAO,SAASE,CAAa,CAC/B,EAYaC,EAAkB,IAAM,CACnC,KAAM,CAACC,EAAOC,CAAQ,EAAIC,WAAyB,CACjD,EAAG,OAAO,OAAW,IAAc,OAAO,QAAU,OAAO,kBAC3D,EAAG,OAAO,OAAW,IAAc,OAAO,QAAU,OAAO,iBAAA,CAC5D,EAEDC,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,IAAMH,EAAS,CAAE,EAAG,OAAO,QAAS,EAAG,OAAO,QAAS,EACxE,cAAO,iBAAiB,SAAUG,CAAQ,EAC1C,OAAO,iBAAiB,SAAUA,CAAQ,EACnC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAQ,EAC7C,OAAO,oBAAoB,SAAUA,CAAQ,CAAA,CAC/C,EACC,EAAE,EAEE,CAAE,MAAAJ,EAAO,SAAAN,CAAA,CAClB"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("./helpers/createContext/createContext.cjs"),y=require("./helpers/createEventEmitter/createEventEmitter.cjs"),I=require("./helpers/createReactiveContext/createReactiveContext.cjs"),O=require("./helpers/createStore/createStore.cjs"),v=require("./hooks/useActiveElement/useActiveElement.cjs"),k=require("./hooks/useAsync/useAsync.cjs"),h=require("./hooks/useAudio/useAudio.cjs"),A=require("./hooks/useBattery/useBattery.cjs"),D=require("./hooks/useBluetooth/useBluetooth.cjs"),M=require("./hooks/useBoolean/useBoolean.cjs"),e=require("./hooks/useBreakpoints/useBreakpoints.cjs"),L=require("./hooks/useBroadcastChannel/useBroadcastChannel.cjs"),b=require("./hooks/useBrowserLanguage/useBrowserLanguage.cjs"),f=require("./hooks/useClickOutside/useClickOutside.cjs"),_=require("./hooks/useClipboard/useClipboard.cjs"),N=require("./hooks/useConst/useConst.cjs"),s=require("./hooks/useCookie/useCookie.cjs"),i=require("./hooks/useCookies/useCookies.cjs"),B=require("./hooks/useCopy/useCopy.cjs"),F=require("./hooks/useCounter/useCounter.cjs"),K=require("./hooks/useCssVar/useCssVar.cjs"),V=require("./hooks/useDebounceCallback/useDebounceCallback.cjs"),U=require("./hooks/useDebounceValue/useDebounceValue.cjs"),w=require("./hooks/useDefault/useDefault.cjs"),W=require("./hooks/useDeviceMotion/useDeviceMotion.cjs"),H=require("./hooks/useDeviceOrientation/useDeviceOrientation.cjs"),x=require("./hooks/useDevicePixelRatio/useDevicePixelRatio.cjs"),Q=require("./hooks/useDidUpdate/useDidUpdate.cjs"),z=require("./hooks/useDisclosure/useDisclosure.cjs"),G=require("./hooks/useDisplayMedia/useDisplayMedia.cjs"),X=require("./hooks/useDocumentEvent/useDocumentEvent.cjs"),Z=require("./hooks/useDocumentTitle/useDocumentTitle.cjs"),j=require("./hooks/useDocumentVisibility/useDocumentVisibility.cjs"),n=require("./hooks/useDoubleClick/useDoubleClick.cjs"),J=require("./hooks/useDropZone/useDropZone.cjs"),Y=require("./hooks/useElementSize/useElementSize.cjs"),$=require("./hooks/useEvent/useEvent.cjs"),ee=require("./hooks/useEventListener/useEventListener.cjs"),se=require("./hooks/useEventSource/useEventSource.cjs"),ue=require("./hooks/useEyeDropper/useEyeDropper.cjs"),re=require("./hooks/useFavicon/useFavicon.cjs"),te=require("./hooks/useField/useField.cjs"),oe=require("./hooks/useFileDialog/useFileDialog.cjs"),ie=require("./hooks/useFocus/useFocus.cjs"),ne=require("./hooks/useFps/useFps.cjs"),ce=require("./hooks/useFul/useFul.cjs"),ae=require("./hooks/useFullscreen/useFullscreen.cjs"),c=require("./hooks/useGamepad/useGamepad.cjs"),le=require("./hooks/useGeolocation/useGeolocation.cjs"),Se=require("./hooks/useHash/useHash.cjs"),a=require("./hooks/useHotkeys/useHotkeys.cjs"),qe=require("./hooks/useHover/useHover.cjs"),de=require("./hooks/useIdle/useIdle.cjs"),Ee=require("./hooks/useImage/useImage.cjs"),ge=require("./hooks/useInfiniteScroll/useInfiniteScroll.cjs"),Pe=require("./hooks/useIntersectionObserver/useIntersectionObserver.cjs"),Te=require("./hooks/useInterval/useInterval.cjs"),Ce=require("./hooks/useIsFirstRender/useIsFirstRender.cjs"),me=require("./hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),Re=require("./hooks/useKeyboard/useKeyboard.cjs"),pe=require("./hooks/useKeyPress/useKeyPress.cjs"),ye=require("./hooks/useKeyPressEvent/useKeyPressEvent.cjs"),Ie=require("./hooks/useKeysPressed/useKeysPressed.cjs"),Oe=require("./hooks/useLastChanged/useLastChanged.cjs"),ve=require("./hooks/useLatest/useLatest.cjs"),ke=require("./hooks/useLess/useLess.cjs"),he=require("./hooks/useList/useList.cjs"),Ae=require("./hooks/useLocalStorage/useLocalStorage.cjs"),De=require("./hooks/useLockCallback/useLockCallback.cjs"),Me=require("./hooks/useLogger/useLogger.cjs"),Le=require("./hooks/useLongPress/useLongPress.cjs"),be=require("./hooks/useMap/useMap.cjs"),fe=require("./hooks/useMeasure/useMeasure.cjs"),l=require("./hooks/useMediaControls/useMediaControls.cjs"),_e=require("./hooks/useMediaQuery/useMediaQuery.cjs"),Ne=require("./hooks/useMemory/useMemory.cjs"),Be=require("./hooks/useMount/useMount.cjs"),Fe=require("./hooks/useMouse/useMouse.cjs"),Ke=require("./hooks/useMutation/useMutation.cjs"),Ve=require("./hooks/useMutationObserver/useMutationObserver.cjs"),S=require("./hooks/useNetwork/useNetwork.cjs"),Ue=require("./hooks/useOffsetPagination/useOffsetPagination.cjs"),we=require("./hooks/useOnce/useOnce.cjs"),We=require("./hooks/useOnline/useOnline.cjs"),q=require("./hooks/useOperatingSystem/useOperatingSystem.cjs"),He=require("./hooks/useOptimistic/useOptimistic.cjs"),xe=require("./hooks/useOrientation/useOrientation.cjs"),Qe=require("./hooks/useOtpCredential/useOtpCredential.cjs"),ze=require("./hooks/usePageLeave/usePageLeave.cjs"),r=require("./hooks/usePaint/usePaint.cjs"),Ge=require("./hooks/useParallax/useParallax.cjs"),Xe=require("./hooks/usePerformanceObserver/usePerformanceObserver.cjs"),Ze=require("./hooks/usePermission/usePermission.cjs"),je=require("./hooks/usePictureInPicture/usePictureInPicture.cjs"),Je=require("./hooks/usePointerLock/usePointerLock.cjs"),Ye=require("./hooks/usePostMessage/usePostMessage.cjs"),$e=require("./hooks/usePreferredColorScheme/usePreferredColorScheme.cjs"),es=require("./hooks/usePreferredContrast/usePreferredContrast.cjs"),ss=require("./hooks/usePreferredDark/usePreferredDark.cjs"),us=require("./hooks/usePreferredLanguages/usePreferredLanguages.cjs"),rs=require("./hooks/usePreferredReducedMotion/usePreferredReducedMotion.cjs"),ts=require("./hooks/usePrevious/usePrevious.cjs"),os=require("./hooks/useQuery/useQuery.cjs"),is=require("./hooks/useQueue/useQueue.cjs"),ns=require("./hooks/useRaf/useRaf.cjs"),cs=require("./hooks/useRafValue/useRafValue.cjs"),as=require("./hooks/useRefState/useRefState.cjs"),ls=require("./hooks/useRenderCount/useRenderCount.cjs"),Ss=require("./hooks/useRenderInfo/useRenderInfo.cjs"),qs=require("./hooks/useRerender/useRerender.cjs"),ds=require("./hooks/useResizeObserver/useResizeObserver.cjs"),Es=require("./hooks/useScreenOrientation/useScreenOrientation.cjs"),d=require("./hooks/useScript/useScript.cjs"),gs=require("./hooks/useScroll/useScroll.cjs"),Ps=require("./hooks/useScrollIntoView/useScrollIntoView.cjs"),Ts=require("./hooks/useScrollTo/useScrollTo.cjs"),Cs=require("./hooks/useSessionStorage/useSessionStorage.cjs"),ms=require("./hooks/useSet/useSet.cjs"),E=require("./hooks/useShallowEffect/useShallowEffect.cjs"),Rs=require("./hooks/useShare/useShare.cjs"),g=require("./hooks/useSpeechRecognition/useSpeechRecognition.cjs"),ps=require("./hooks/useSpeechSynthesis/useSpeechSynthesis.cjs"),P=require("./hooks/useStateHistory/useStateHistory.cjs"),ys=require("./hooks/useStep/useStep.cjs"),Is=require("./hooks/useSticky/useSticky.cjs"),Os=require("./hooks/useStopwatch/useStopwatch.cjs"),t=require("./hooks/useStorage/useStorage.cjs"),vs=require("./hooks/useTextDirection/useTextDirection.cjs"),T=require("./hooks/useTextSelection/useTextSelection.cjs"),ks=require("./hooks/useThrottleCallback/useThrottleCallback.cjs"),hs=require("./hooks/useThrottleValue/useThrottleValue.cjs"),As=require("./hooks/useTime/useTime.cjs"),Ds=require("./hooks/useTimeout/useTimeout.cjs"),C=require("./hooks/useTimer/useTimer.cjs"),Ms=require("./hooks/useToggle/useToggle.cjs"),Ls=require("./hooks/useUnmount/useUnmount.cjs"),u=require("./hooks/useUrlSearchParam/useUrlSearchParam.cjs"),bs=require("./hooks/useUrlSearchParams/useUrlSearchParams.cjs"),fs=require("./hooks/useVibrate/useVibrate.cjs"),_s=require("./hooks/useWakeLock/useWakeLock.cjs"),Ns=require("./hooks/useWebSocket/useWebSocket.cjs"),Bs=require("./hooks/useWindowEvent/useWindowEvent.cjs"),Fs=require("./hooks/useWindowFocus/useWindowFocus.cjs"),m=require("./hooks/useWindowScroll/useWindowScroll.cjs"),Ks=require("./hooks/useWindowSize/useWindowSize.cjs"),Vs=require("./hooks/useWizard/useWizard.cjs"),R=require("./utils/helpers/copy.cjs"),Us=require("./utils/helpers/debounce.cjs"),ws=require("./utils/helpers/getDate.cjs"),o=require("./utils/helpers/getElement.cjs"),Ws=require("./utils/helpers/getRetry.cjs"),Hs=require("./utils/helpers/isTarget.cjs"),xs=require("./utils/helpers/throttle.cjs");exports.createContext=p.createContext;exports.createEventEmitter=y.createEventEmitter;exports.createReactiveContext=I.createReactiveContext;exports.createStore=O.createStore;exports.useActiveElement=v.useActiveElement;exports.useAsync=k.useAsync;exports.useAudio=h.useAudio;exports.useBattery=A.useBattery;exports.useBluetooth=D.useBluetooth;exports.useBoolean=M.useBoolean;exports.BREAKPOINTS_ANT_DESIGN=e.BREAKPOINTS_ANT_DESIGN;exports.BREAKPOINTS_BOOTSTRAP_V5=e.BREAKPOINTS_BOOTSTRAP_V5;exports.BREAKPOINTS_MANTINE=e.BREAKPOINTS_MANTINE;exports.BREAKPOINTS_MASTER_CSS=e.BREAKPOINTS_MASTER_CSS;exports.BREAKPOINTS_MATERIAL_UI=e.BREAKPOINTS_MATERIAL_UI;exports.BREAKPOINTS_PRIME_FLEX=e.BREAKPOINTS_PRIME_FLEX;exports.BREAKPOINTS_QUASAR_V2=e.BREAKPOINTS_QUASAR_V2;exports.BREAKPOINTS_SEMANTIC=e.BREAKPOINTS_SEMANTIC;exports.BREAKPOINTS_TAILWIND=e.BREAKPOINTS_TAILWIND;exports.useBreakpoints=e.useBreakpoints;exports.useBroadcastChannel=L.useBroadcastChannel;exports.useBrowserLanguage=b.useBrowserLanguage;exports.useClickOutside=f.useClickOutside;exports.useClipboard=_.useClipboard;exports.useConst=N.useConst;exports.COOKIE_EVENT=s.COOKIE_EVENT;exports.dispatchCookieEvent=s.dispatchCookieEvent;exports.getCookie=s.getCookie;exports.getCookies=s.getCookies;exports.removeCookie=s.removeCookie;exports.removeCookieItem=s.removeCookieItem;exports.setCookie=s.setCookie;exports.setCookieItem=s.setCookieItem;exports.useCookie=s.useCookie;exports.clearCookies=i.clearCookies;exports.useCookies=i.useCookies;exports.useCopy=B.useCopy;exports.useCounter=F.useCounter;exports.useCssVar=K.useCssVar;exports.useDebounceCallback=V.useDebounceCallback;exports.useDebounceValue=U.useDebounceValue;exports.useDefault=w.useDefault;exports.useDeviceMotion=W.useDeviceMotion;exports.useDeviceOrientation=H.useDeviceOrientation;exports.useDevicePixelRatio=x.useDevicePixelRatio;exports.useDidUpdate=Q.useDidUpdate;exports.useDisclosure=z.useDisclosure;exports.useDisplayMedia=G.useDisplayMedia;exports.useDocumentEvent=X.useDocumentEvent;exports.useDocumentTitle=Z.useDocumentTitle;exports.useDocumentVisibility=j.useDocumentVisibility;exports.DEFAULT_THRESHOLD_TIME=n.DEFAULT_THRESHOLD_TIME;exports.useDoubleClick=n.useDoubleClick;exports.useDropZone=J.useDropZone;exports.useElementSize=Y.useElementSize;exports.useEvent=$.useEvent;exports.useEventListener=ee.useEventListener;exports.useEventSource=se.useEventSource;exports.useEyeDropper=ue.useEyeDropper;exports.useFavicon=re.useFavicon;exports.useField=te.useField;exports.useFileDialog=oe.useFileDialog;exports.useFocus=ie.useFocus;exports.useFps=ne.useFps;exports.useFul=ce.useFul;exports.useFullscreen=ae.useFullscreen;exports.mapGamepadToXbox360Controller=c.mapGamepadToXbox360Controller;exports.useGamepad=c.useGamepad;exports.useGeolocation=le.useGeolocation;exports.useHash=Se.useHash;exports.isHotkeyMatch=a.isHotkeyMatch;exports.useHotkeys=a.useHotkeys;exports.useHover=qe.useHover;exports.useIdle=de.useIdle;exports.useImage=Ee.useImage;exports.useInfiniteScroll=ge.useInfiniteScroll;exports.useIntersectionObserver=Pe.useIntersectionObserver;exports.useInterval=Te.useInterval;exports.useIsFirstRender=Ce.useIsFirstRender;exports.useIsomorphicLayoutEffect=me.useIsomorphicLayoutEffect;exports.useKeyboard=Re.useKeyboard;exports.useKeyPress=pe.useKeyPress;exports.useKeyPressEvent=ye.useKeyPressEvent;exports.useKeysPressed=Ie.useKeysPressed;exports.useLastChanged=Oe.useLastChanged;exports.useLatest=ve.useLatest;exports.useLess=ke.useLess;exports.useList=he.useList;exports.useLocalStorage=Ae.useLocalStorage;exports.useLockCallback=De.useLockCallback;exports.useLogger=Me.useLogger;exports.useLongPress=Le.useLongPress;exports.useMap=be.useMap;exports.useMeasure=fe.useMeasure;exports.timeRangeToArray=l.timeRangeToArray;exports.useMediaControls=l.useMediaControls;exports.useMediaQuery=_e.useMediaQuery;exports.useMemory=Ne.useMemory;exports.useMount=Be.useMount;exports.useMouse=Fe.useMouse;exports.useMutation=Ke.useMutation;exports.useMutationObserver=Ve.useMutationObserver;exports.getConnection=S.getConnection;exports.useNetwork=S.useNetwork;exports.useOffsetPagination=Ue.useOffsetPagination;exports.useOnce=we.useOnce;exports.useOnline=We.useOnline;exports.getOperatingSystem=q.getOperatingSystem;exports.useOperatingSystem=q.useOperatingSystem;exports.useOptimistic=He.useOptimistic;exports.useOrientation=xe.useOrientation;exports.useOtpCredential=Qe.useOtpCredential;exports.usePageLeave=ze.usePageLeave;exports.Paint=r.Paint;exports.Pointer=r.Pointer;exports.usePaint=r.usePaint;exports.useParallax=Ge.useParallax;exports.usePerformanceObserver=Xe.usePerformanceObserver;exports.usePermission=Ze.usePermission;exports.usePictureInPicture=je.usePictureInPicture;exports.usePointerLock=Je.usePointerLock;exports.usePostMessage=Ye.usePostMessage;exports.usePreferredColorScheme=$e.usePreferredColorScheme;exports.usePreferredContrast=es.usePreferredContrast;exports.usePreferredDark=ss.usePreferredDark;exports.usePreferredLanguages=us.usePreferredLanguages;exports.usePreferredReducedMotion=rs.usePreferredReducedMotion;exports.usePrevious=ts.usePrevious;exports.useQuery=os.useQuery;exports.useQueue=is.useQueue;exports.useRaf=ns.useRaf;exports.useRafValue=cs.useRafValue;exports.useRefState=as.useRefState;exports.useRenderCount=ls.useRenderCount;exports.useRenderInfo=Ss.useRenderInfo;exports.useRerender=qs.useRerender;exports.useResizeObserver=ds.useResizeObserver;exports.useScreenOrientation=Es.useScreenOrientation;exports.SCRIPT_STATUS_ATTRIBUTE_NAME=d.SCRIPT_STATUS_ATTRIBUTE_NAME;exports.useScript=d.useScript;exports.useScroll=gs.useScroll;exports.useScrollIntoView=Ps.useScrollIntoView;exports.useScrollTo=Ts.useScrollTo;exports.useSessionStorage=Cs.useSessionStorage;exports.useSet=ms.useSet;exports.deepEqual=E.deepEqual;exports.useShallowEffect=E.useShallowEffect;exports.useShare=Rs.useShare;exports.getSpeechRecognition=g.getSpeechRecognition;exports.useSpeechRecognition=g.useSpeechRecognition;exports.useSpeechSynthesis=ps.useSpeechSynthesis;exports.stateHistoryReducer=P.stateHistoryReducer;exports.useStateHistory=P.useStateHistory;exports.useStep=ys.useStep;exports.useSticky=Is.useSticky;exports.useStopwatch=Os.useStopwatch;exports.STORAGE_EVENT=t.STORAGE_EVENT;exports.dispatchStorageEvent=t.dispatchStorageEvent;exports.useStorage=t.useStorage;exports.useTextDirection=vs.useTextDirection;exports.getRangesSelection=T.getRangesSelection;exports.useTextSelection=T.useTextSelection;exports.useThrottleCallback=ks.useThrottleCallback;exports.useThrottleValue=hs.useThrottleValue;exports.useTime=As.useTime;exports.useTimeout=Ds.useTimeout;exports.getTimeFromSeconds=C.getTimeFromSeconds;exports.useTimer=C.useTimer;exports.useToggle=Ms.useToggle;exports.useUnmount=Ls.useUnmount;exports.URL_SEARCH_PARAMS_EVENT=u.URL_SEARCH_PARAMS_EVENT;exports.createQueryString=u.createQueryString;exports.dispatchUrlSearchParamsEvent=u.dispatchUrlSearchParamsEvent;exports.getUrlSearchParams=u.getUrlSearchParams;exports.useUrlSearchParam=u.useUrlSearchParam;exports.useUrlSearchParams=bs.useUrlSearchParams;exports.useVibrate=fs.useVibrate;exports.useWakeLock=_s.useWakeLock;exports.useWebSocket=Ns.useWebSocket;exports.useWindowEvent=Bs.useWindowEvent;exports.useWindowFocus=Fs.useWindowFocus;exports.scrollTo=m.scrollTo;exports.useWindowScroll=m.useWindowScroll;exports.useWindowSize=Ks.useWindowSize;exports.useWizard=Vs.useWizard;exports.copy=R.copy;exports.legacyCopyToClipboard=R.legacyCopyToClipboard;exports.debounce=Us.debounce;exports.getDate=ws.getDate;exports.getElement=o.getElement;exports.target=o.target;exports.targetSymbol=o.targetSymbol;exports.getRetry=Ws.getRetry;exports.isTarget=Hs.isTarget;exports.throttle=xs.throttle;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("./helpers/createContext/createContext.cjs"),y=require("./helpers/createEventEmitter/createEventEmitter.cjs"),I=require("./helpers/createReactiveContext/createReactiveContext.cjs"),O=require("./helpers/createStore/createStore.cjs"),v=require("./hooks/useActiveElement/useActiveElement.cjs"),k=require("./hooks/useAsync/useAsync.cjs"),A=require("./hooks/useAudio/useAudio.cjs"),h=require("./hooks/useAutoScroll/useAutoScroll.cjs"),D=require("./hooks/useBattery/useBattery.cjs"),M=require("./hooks/useBluetooth/useBluetooth.cjs"),L=require("./hooks/useBoolean/useBoolean.cjs"),e=require("./hooks/useBreakpoints/useBreakpoints.cjs"),b=require("./hooks/useBroadcastChannel/useBroadcastChannel.cjs"),f=require("./hooks/useBrowserLanguage/useBrowserLanguage.cjs"),_=require("./hooks/useClickOutside/useClickOutside.cjs"),N=require("./hooks/useClipboard/useClipboard.cjs"),B=require("./hooks/useConst/useConst.cjs"),s=require("./hooks/useCookie/useCookie.cjs"),i=require("./hooks/useCookies/useCookies.cjs"),F=require("./hooks/useCopy/useCopy.cjs"),K=require("./hooks/useCounter/useCounter.cjs"),V=require("./hooks/useCssVar/useCssVar.cjs"),U=require("./hooks/useDebounceCallback/useDebounceCallback.cjs"),w=require("./hooks/useDebounceValue/useDebounceValue.cjs"),W=require("./hooks/useDefault/useDefault.cjs"),H=require("./hooks/useDeviceMotion/useDeviceMotion.cjs"),x=require("./hooks/useDeviceOrientation/useDeviceOrientation.cjs"),Q=require("./hooks/useDevicePixelRatio/useDevicePixelRatio.cjs"),z=require("./hooks/useDidUpdate/useDidUpdate.cjs"),G=require("./hooks/useDisclosure/useDisclosure.cjs"),X=require("./hooks/useDisplayMedia/useDisplayMedia.cjs"),Z=require("./hooks/useDocumentEvent/useDocumentEvent.cjs"),j=require("./hooks/useDocumentTitle/useDocumentTitle.cjs"),J=require("./hooks/useDocumentVisibility/useDocumentVisibility.cjs"),n=require("./hooks/useDoubleClick/useDoubleClick.cjs"),Y=require("./hooks/useDropZone/useDropZone.cjs"),$=require("./hooks/useElementSize/useElementSize.cjs"),ee=require("./hooks/useEvent/useEvent.cjs"),se=require("./hooks/useEventListener/useEventListener.cjs"),ue=require("./hooks/useEventSource/useEventSource.cjs"),re=require("./hooks/useEyeDropper/useEyeDropper.cjs"),te=require("./hooks/useFavicon/useFavicon.cjs"),oe=require("./hooks/useField/useField.cjs"),ie=require("./hooks/useFileDialog/useFileDialog.cjs"),ne=require("./hooks/useFocus/useFocus.cjs"),ce=require("./hooks/useFps/useFps.cjs"),ae=require("./hooks/useFul/useFul.cjs"),le=require("./hooks/useFullscreen/useFullscreen.cjs"),c=require("./hooks/useGamepad/useGamepad.cjs"),Se=require("./hooks/useGeolocation/useGeolocation.cjs"),qe=require("./hooks/useHash/useHash.cjs"),a=require("./hooks/useHotkeys/useHotkeys.cjs"),de=require("./hooks/useHover/useHover.cjs"),Ee=require("./hooks/useIdle/useIdle.cjs"),ge=require("./hooks/useImage/useImage.cjs"),Pe=require("./hooks/useInfiniteScroll/useInfiniteScroll.cjs"),Te=require("./hooks/useIntersectionObserver/useIntersectionObserver.cjs"),Ce=require("./hooks/useInterval/useInterval.cjs"),me=require("./hooks/useIsFirstRender/useIsFirstRender.cjs"),Re=require("./hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),pe=require("./hooks/useKeyboard/useKeyboard.cjs"),ye=require("./hooks/useKeyPress/useKeyPress.cjs"),Ie=require("./hooks/useKeyPressEvent/useKeyPressEvent.cjs"),Oe=require("./hooks/useKeysPressed/useKeysPressed.cjs"),ve=require("./hooks/useLastChanged/useLastChanged.cjs"),ke=require("./hooks/useLatest/useLatest.cjs"),Ae=require("./hooks/useLess/useLess.cjs"),he=require("./hooks/useList/useList.cjs"),De=require("./hooks/useLocalStorage/useLocalStorage.cjs"),Me=require("./hooks/useLockCallback/useLockCallback.cjs"),Le=require("./hooks/useLogger/useLogger.cjs"),be=require("./hooks/useLongPress/useLongPress.cjs"),fe=require("./hooks/useMap/useMap.cjs"),_e=require("./hooks/useMeasure/useMeasure.cjs"),l=require("./hooks/useMediaControls/useMediaControls.cjs"),Ne=require("./hooks/useMediaQuery/useMediaQuery.cjs"),Be=require("./hooks/useMemory/useMemory.cjs"),Fe=require("./hooks/useMount/useMount.cjs"),Ke=require("./hooks/useMouse/useMouse.cjs"),Ve=require("./hooks/useMutation/useMutation.cjs"),Ue=require("./hooks/useMutationObserver/useMutationObserver.cjs"),S=require("./hooks/useNetwork/useNetwork.cjs"),we=require("./hooks/useOffsetPagination/useOffsetPagination.cjs"),We=require("./hooks/useOnce/useOnce.cjs"),He=require("./hooks/useOnline/useOnline.cjs"),q=require("./hooks/useOperatingSystem/useOperatingSystem.cjs"),xe=require("./hooks/useOptimistic/useOptimistic.cjs"),Qe=require("./hooks/useOrientation/useOrientation.cjs"),ze=require("./hooks/useOtpCredential/useOtpCredential.cjs"),Ge=require("./hooks/usePageLeave/usePageLeave.cjs"),r=require("./hooks/usePaint/usePaint.cjs"),Xe=require("./hooks/useParallax/useParallax.cjs"),Ze=require("./hooks/usePerformanceObserver/usePerformanceObserver.cjs"),je=require("./hooks/usePermission/usePermission.cjs"),Je=require("./hooks/usePictureInPicture/usePictureInPicture.cjs"),Ye=require("./hooks/usePointerLock/usePointerLock.cjs"),$e=require("./hooks/usePostMessage/usePostMessage.cjs"),es=require("./hooks/usePreferredColorScheme/usePreferredColorScheme.cjs"),ss=require("./hooks/usePreferredContrast/usePreferredContrast.cjs"),us=require("./hooks/usePreferredDark/usePreferredDark.cjs"),rs=require("./hooks/usePreferredLanguages/usePreferredLanguages.cjs"),ts=require("./hooks/usePreferredReducedMotion/usePreferredReducedMotion.cjs"),os=require("./hooks/usePrevious/usePrevious.cjs"),is=require("./hooks/useQuery/useQuery.cjs"),ns=require("./hooks/useQueue/useQueue.cjs"),cs=require("./hooks/useRaf/useRaf.cjs"),as=require("./hooks/useRafValue/useRafValue.cjs"),ls=require("./hooks/useRefState/useRefState.cjs"),Ss=require("./hooks/useRenderCount/useRenderCount.cjs"),qs=require("./hooks/useRenderInfo/useRenderInfo.cjs"),ds=require("./hooks/useRerender/useRerender.cjs"),Es=require("./hooks/useResizeObserver/useResizeObserver.cjs"),gs=require("./hooks/useScreenOrientation/useScreenOrientation.cjs"),d=require("./hooks/useScript/useScript.cjs"),Ps=require("./hooks/useScroll/useScroll.cjs"),Ts=require("./hooks/useScrollIntoView/useScrollIntoView.cjs"),Cs=require("./hooks/useScrollTo/useScrollTo.cjs"),ms=require("./hooks/useSessionStorage/useSessionStorage.cjs"),Rs=require("./hooks/useSet/useSet.cjs"),E=require("./hooks/useShallowEffect/useShallowEffect.cjs"),ps=require("./hooks/useShare/useShare.cjs"),g=require("./hooks/useSpeechRecognition/useSpeechRecognition.cjs"),ys=require("./hooks/useSpeechSynthesis/useSpeechSynthesis.cjs"),P=require("./hooks/useStateHistory/useStateHistory.cjs"),Is=require("./hooks/useStep/useStep.cjs"),Os=require("./hooks/useSticky/useSticky.cjs"),vs=require("./hooks/useStopwatch/useStopwatch.cjs"),t=require("./hooks/useStorage/useStorage.cjs"),ks=require("./hooks/useTextDirection/useTextDirection.cjs"),T=require("./hooks/useTextSelection/useTextSelection.cjs"),As=require("./hooks/useThrottleCallback/useThrottleCallback.cjs"),hs=require("./hooks/useThrottleValue/useThrottleValue.cjs"),Ds=require("./hooks/useTime/useTime.cjs"),Ms=require("./hooks/useTimeout/useTimeout.cjs"),C=require("./hooks/useTimer/useTimer.cjs"),Ls=require("./hooks/useToggle/useToggle.cjs"),bs=require("./hooks/useUnmount/useUnmount.cjs"),u=require("./hooks/useUrlSearchParam/useUrlSearchParam.cjs"),fs=require("./hooks/useUrlSearchParams/useUrlSearchParams.cjs"),_s=require("./hooks/useVibrate/useVibrate.cjs"),Ns=require("./hooks/useWakeLock/useWakeLock.cjs"),Bs=require("./hooks/useWebSocket/useWebSocket.cjs"),Fs=require("./hooks/useWindowEvent/useWindowEvent.cjs"),Ks=require("./hooks/useWindowFocus/useWindowFocus.cjs"),m=require("./hooks/useWindowScroll/useWindowScroll.cjs"),Vs=require("./hooks/useWindowSize/useWindowSize.cjs"),Us=require("./hooks/useWizard/useWizard.cjs"),R=require("./utils/helpers/copy.cjs"),ws=require("./utils/helpers/debounce.cjs"),Ws=require("./utils/helpers/getDate.cjs"),o=require("./utils/helpers/getElement.cjs"),Hs=require("./utils/helpers/getRetry.cjs"),xs=require("./utils/helpers/isTarget.cjs"),Qs=require("./utils/helpers/throttle.cjs");exports.createContext=p.createContext;exports.createEventEmitter=y.createEventEmitter;exports.createReactiveContext=I.createReactiveContext;exports.createStore=O.createStore;exports.useActiveElement=v.useActiveElement;exports.useAsync=k.useAsync;exports.useAudio=A.useAudio;exports.useAutoScroll=h.useAutoScroll;exports.useBattery=D.useBattery;exports.useBluetooth=M.useBluetooth;exports.useBoolean=L.useBoolean;exports.BREAKPOINTS_ANT_DESIGN=e.BREAKPOINTS_ANT_DESIGN;exports.BREAKPOINTS_BOOTSTRAP_V5=e.BREAKPOINTS_BOOTSTRAP_V5;exports.BREAKPOINTS_MANTINE=e.BREAKPOINTS_MANTINE;exports.BREAKPOINTS_MASTER_CSS=e.BREAKPOINTS_MASTER_CSS;exports.BREAKPOINTS_MATERIAL_UI=e.BREAKPOINTS_MATERIAL_UI;exports.BREAKPOINTS_PRIME_FLEX=e.BREAKPOINTS_PRIME_FLEX;exports.BREAKPOINTS_QUASAR_V2=e.BREAKPOINTS_QUASAR_V2;exports.BREAKPOINTS_SEMANTIC=e.BREAKPOINTS_SEMANTIC;exports.BREAKPOINTS_TAILWIND=e.BREAKPOINTS_TAILWIND;exports.useBreakpoints=e.useBreakpoints;exports.useBroadcastChannel=b.useBroadcastChannel;exports.useBrowserLanguage=f.useBrowserLanguage;exports.useClickOutside=_.useClickOutside;exports.useClipboard=N.useClipboard;exports.useConst=B.useConst;exports.COOKIE_EVENT=s.COOKIE_EVENT;exports.dispatchCookieEvent=s.dispatchCookieEvent;exports.getCookie=s.getCookie;exports.getCookies=s.getCookies;exports.removeCookie=s.removeCookie;exports.removeCookieItem=s.removeCookieItem;exports.setCookie=s.setCookie;exports.setCookieItem=s.setCookieItem;exports.useCookie=s.useCookie;exports.clearCookies=i.clearCookies;exports.useCookies=i.useCookies;exports.useCopy=F.useCopy;exports.useCounter=K.useCounter;exports.useCssVar=V.useCssVar;exports.useDebounceCallback=U.useDebounceCallback;exports.useDebounceValue=w.useDebounceValue;exports.useDefault=W.useDefault;exports.useDeviceMotion=H.useDeviceMotion;exports.useDeviceOrientation=x.useDeviceOrientation;exports.useDevicePixelRatio=Q.useDevicePixelRatio;exports.useDidUpdate=z.useDidUpdate;exports.useDisclosure=G.useDisclosure;exports.useDisplayMedia=X.useDisplayMedia;exports.useDocumentEvent=Z.useDocumentEvent;exports.useDocumentTitle=j.useDocumentTitle;exports.useDocumentVisibility=J.useDocumentVisibility;exports.DEFAULT_THRESHOLD_TIME=n.DEFAULT_THRESHOLD_TIME;exports.useDoubleClick=n.useDoubleClick;exports.useDropZone=Y.useDropZone;exports.useElementSize=$.useElementSize;exports.useEvent=ee.useEvent;exports.useEventListener=se.useEventListener;exports.useEventSource=ue.useEventSource;exports.useEyeDropper=re.useEyeDropper;exports.useFavicon=te.useFavicon;exports.useField=oe.useField;exports.useFileDialog=ie.useFileDialog;exports.useFocus=ne.useFocus;exports.useFps=ce.useFps;exports.useFul=ae.useFul;exports.useFullscreen=le.useFullscreen;exports.mapGamepadToXbox360Controller=c.mapGamepadToXbox360Controller;exports.useGamepad=c.useGamepad;exports.useGeolocation=Se.useGeolocation;exports.useHash=qe.useHash;exports.isHotkeyMatch=a.isHotkeyMatch;exports.useHotkeys=a.useHotkeys;exports.useHover=de.useHover;exports.useIdle=Ee.useIdle;exports.useImage=ge.useImage;exports.useInfiniteScroll=Pe.useInfiniteScroll;exports.useIntersectionObserver=Te.useIntersectionObserver;exports.useInterval=Ce.useInterval;exports.useIsFirstRender=me.useIsFirstRender;exports.useIsomorphicLayoutEffect=Re.useIsomorphicLayoutEffect;exports.useKeyboard=pe.useKeyboard;exports.useKeyPress=ye.useKeyPress;exports.useKeyPressEvent=Ie.useKeyPressEvent;exports.useKeysPressed=Oe.useKeysPressed;exports.useLastChanged=ve.useLastChanged;exports.useLatest=ke.useLatest;exports.useLess=Ae.useLess;exports.useList=he.useList;exports.useLocalStorage=De.useLocalStorage;exports.useLockCallback=Me.useLockCallback;exports.useLogger=Le.useLogger;exports.useLongPress=be.useLongPress;exports.useMap=fe.useMap;exports.useMeasure=_e.useMeasure;exports.timeRangeToArray=l.timeRangeToArray;exports.useMediaControls=l.useMediaControls;exports.useMediaQuery=Ne.useMediaQuery;exports.useMemory=Be.useMemory;exports.useMount=Fe.useMount;exports.useMouse=Ke.useMouse;exports.useMutation=Ve.useMutation;exports.useMutationObserver=Ue.useMutationObserver;exports.getConnection=S.getConnection;exports.useNetwork=S.useNetwork;exports.useOffsetPagination=we.useOffsetPagination;exports.useOnce=We.useOnce;exports.useOnline=He.useOnline;exports.getOperatingSystem=q.getOperatingSystem;exports.useOperatingSystem=q.useOperatingSystem;exports.useOptimistic=xe.useOptimistic;exports.useOrientation=Qe.useOrientation;exports.useOtpCredential=ze.useOtpCredential;exports.usePageLeave=Ge.usePageLeave;exports.Paint=r.Paint;exports.Pointer=r.Pointer;exports.usePaint=r.usePaint;exports.useParallax=Xe.useParallax;exports.usePerformanceObserver=Ze.usePerformanceObserver;exports.usePermission=je.usePermission;exports.usePictureInPicture=Je.usePictureInPicture;exports.usePointerLock=Ye.usePointerLock;exports.usePostMessage=$e.usePostMessage;exports.usePreferredColorScheme=es.usePreferredColorScheme;exports.usePreferredContrast=ss.usePreferredContrast;exports.usePreferredDark=us.usePreferredDark;exports.usePreferredLanguages=rs.usePreferredLanguages;exports.usePreferredReducedMotion=ts.usePreferredReducedMotion;exports.usePrevious=os.usePrevious;exports.useQuery=is.useQuery;exports.useQueue=ns.useQueue;exports.useRaf=cs.useRaf;exports.useRafValue=as.useRafValue;exports.useRefState=ls.useRefState;exports.useRenderCount=Ss.useRenderCount;exports.useRenderInfo=qs.useRenderInfo;exports.useRerender=ds.useRerender;exports.useResizeObserver=Es.useResizeObserver;exports.useScreenOrientation=gs.useScreenOrientation;exports.SCRIPT_STATUS_ATTRIBUTE_NAME=d.SCRIPT_STATUS_ATTRIBUTE_NAME;exports.useScript=d.useScript;exports.useScroll=Ps.useScroll;exports.useScrollIntoView=Ts.useScrollIntoView;exports.useScrollTo=Cs.useScrollTo;exports.useSessionStorage=ms.useSessionStorage;exports.useSet=Rs.useSet;exports.deepEqual=E.deepEqual;exports.useShallowEffect=E.useShallowEffect;exports.useShare=ps.useShare;exports.getSpeechRecognition=g.getSpeechRecognition;exports.useSpeechRecognition=g.useSpeechRecognition;exports.useSpeechSynthesis=ys.useSpeechSynthesis;exports.stateHistoryReducer=P.stateHistoryReducer;exports.useStateHistory=P.useStateHistory;exports.useStep=Is.useStep;exports.useSticky=Os.useSticky;exports.useStopwatch=vs.useStopwatch;exports.STORAGE_EVENT=t.STORAGE_EVENT;exports.dispatchStorageEvent=t.dispatchStorageEvent;exports.useStorage=t.useStorage;exports.useTextDirection=ks.useTextDirection;exports.getRangesSelection=T.getRangesSelection;exports.useTextSelection=T.useTextSelection;exports.useThrottleCallback=As.useThrottleCallback;exports.useThrottleValue=hs.useThrottleValue;exports.useTime=Ds.useTime;exports.useTimeout=Ms.useTimeout;exports.getTimeFromSeconds=C.getTimeFromSeconds;exports.useTimer=C.useTimer;exports.useToggle=Ls.useToggle;exports.useUnmount=bs.useUnmount;exports.URL_SEARCH_PARAMS_EVENT=u.URL_SEARCH_PARAMS_EVENT;exports.createQueryString=u.createQueryString;exports.dispatchUrlSearchParamsEvent=u.dispatchUrlSearchParamsEvent;exports.getUrlSearchParams=u.getUrlSearchParams;exports.useUrlSearchParam=u.useUrlSearchParam;exports.useUrlSearchParams=fs.useUrlSearchParams;exports.useVibrate=_s.useVibrate;exports.useWakeLock=Ns.useWakeLock;exports.useWebSocket=Bs.useWebSocket;exports.useWindowEvent=Fs.useWindowEvent;exports.useWindowFocus=Ks.useWindowFocus;exports.scrollTo=m.scrollTo;exports.useWindowScroll=m.useWindowScroll;exports.useWindowSize=Vs.useWindowSize;exports.useWizard=Us.useWizard;exports.copy=R.copy;exports.legacyCopyToClipboard=R.legacyCopyToClipboard;exports.debounce=ws.debounce;exports.getDate=Ws.getDate;exports.getElement=o.getElement;exports.target=o.target;exports.targetSymbol=o.targetSymbol;exports.getRetry=Hs.getRetry;exports.isTarget=xs.isTarget;exports.throttle=Qs.throttle;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAudio.mjs","sources":["../../../../src/hooks/useAudio/useAudio.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\n\n/** Type sprite map */\nexport interface SpriteMap {\n /** [start time in seconds, end time in seconds] */\n [key: string]: [number, number];\n}\n\n/** Type use audio options */\nexport interface UseAudioOptions {\n /** Whether audio playback is initially enabled */\n immediately?: boolean;\n /** Whether to stop current playback when starting a new one */\n interrupt?: boolean;\n /** Initial playback speed (0.5 to 2) */\n playbackRate?: number;\n /** Map of named audio segments for sprite-based playback */\n sprite?: SpriteMap;\n /** Initial volume level (0 to 1) */\n volume?: number;\n}\n\n/** Type use audio return type */\nexport interface UseAudioReturn {\n /** Current playback speed (0.5 to 2) */\n playbackRate: number;\n /** Whether audio is currently playing */\n playing: boolean;\n /** Current volume level (0 to 1) */\n volume: number;\n /** Set playback speed (0.5 to 2) */\n changePlaybackRate: (value: number) => void;\n /** Pause audio playback at current position */\n pause: () => void;\n /** Start audio playback from the beginning or specified sprite segment */\n play: (sprite?: string) => Promise<void>;\n /** Set audio volume level (0 to 1) */\n setVolume: (value: number) => void;\n /** Stop audio playback and reset position to start */\n stop: () => void;\n}\n\n/**\n * @name useAudio\n * @description - Hook that manages audio playback with sprite support\n * @category Browser\n *\n * @browserapi Audio https://developer.mozilla.org/en-US/docs/Web/API/Audio\n *\n * @template Value The type of the value\n * @param {string} url The URL of the audio file to play\n * @param {UseAudioOptions} [options] Audio configuration options\n * @param {number} [options.volume=1] Initial volume level (0 to 1)\n * @param {number} [options.playbackRate=1] Initial playback speed (0.5 to 2)\n * @param {boolean} [options.interrupt=false] Whether to stop current playback when starting a new one\n * @param {boolean} [options.soundEnabled=true] Whether audio playback is initially enabled\n * @param {SpriteMap} [options.sprite] Map of named audio segments for sprite-based playback\n * @returns {UseAudioReturn} An object containing audio controls and state\n *\n * @example\n * const audio = useAudio(\"/path/to/sound.mp3\");\n */\nexport const useAudio = (\n src: string,\n options: UseAudioOptions = {}\n): UseAudioReturn => {\n const [playing, setPlaying] = useState(false);\n const [volume, setCurrentVolume] = useState(options.volume ?? 1);\n const [playbackRate, setPlaybackRate] = useState(options.playbackRate ?? 1);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n\n useEffect(() => {\n const audio = new Audio(src);\n\n audio.volume = volume;\n audio.playbackRate = playbackRate;\n audioRef.current = audio;\n\n if (options.immediately) audio.play();\n\n const onPlay = () => setPlaying(true);\n const onPause = () => setPlaying(false);\n const onEnded = () => setPlaying(false);\n const onTimeUpdate = () => {};\n const onVolumeChange = () => setCurrentVolume(audio.volume);\n const onRateChange = () => setPlaybackRate(audio.playbackRate);\n\n audio.addEventListener(\"play\", onPlay);\n audio.addEventListener(\"pause\", onPause);\n audio.addEventListener(\"ended\", onEnded);\n audio.addEventListener(\"timeupdate\", onTimeUpdate);\n audio.addEventListener(\"volumechange\", onVolumeChange);\n audio.addEventListener(\"ratechange\", onRateChange);\n\n return () => {\n audio.removeEventListener(\"play\", onPlay);\n audio.removeEventListener(\"pause\", onPause);\n audio.removeEventListener(\"ended\", onEnded);\n audio.removeEventListener(\"timeupdate\", onTimeUpdate);\n audio.removeEventListener(\"volumechange\", onVolumeChange);\n audio.removeEventListener(\"ratechange\", onRateChange);\n\n audio.pause();\n audio.remove();\n };\n }, [src]);\n\n const stop = () => {\n if (!audioRef.current) return;\n audioRef.current.pause();\n audioRef.current.currentTime = 0;\n };\n\n const play = async (spriteName?: string) => {\n if (!audioRef.current) return;\n if (options.interrupt) stop();\n\n if (!spriteName || !options.sprite?.[spriteName]) {\n await audioRef.current.play();\n return;\n }\n\n const [start, end] = options.sprite[spriteName];\n audioRef.current.currentTime = start;\n await audioRef.current.play();\n\n const checkTime = () => {\n if (!audioRef.current) return;\n if (audioRef.current.currentTime >= end) {\n stop();\n }\n\n if (!playing) return;\n\n requestAnimationFrame(checkTime);\n };\n\n requestAnimationFrame(checkTime);\n };\n\n const pause = () => audioRef.current?.pause();\n\n const setVolume = (value: number) => {\n if (!audioRef.current) return;\n const newVolume = Math.max(0, Math.min(1, value));\n audioRef.current.volume = newVolume;\n setCurrentVolume(newVolume);\n };\n\n const changePlaybackRate = (value: number) => {\n if (!audioRef.current) return;\n const newRate = Math.max(0.5, Math.min(2, value));\n audioRef.current.playbackRate = newRate;\n setPlaybackRate(newRate);\n };\n\n return {\n play,\n pause,\n stop,\n playing,\n setVolume,\n volume,\n changePlaybackRate,\n playbackRate,\n };\n};\n"],"names":["useAudio","src","options","playing","setPlaying","useState","volume","setCurrentVolume","playbackRate","setPlaybackRate","audioRef","useRef","useEffect","audio","onPlay","onPause","onEnded","onTimeUpdate","onVolumeChange","onRateChange","stop","spriteName","start","end","checkTime","value","newVolume","newRate"],"mappings":";AA8DO,MAAMA,IAAW,CACtBC,GACAC,IAA2B,OACR;AACnB,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAS,EAAK,GACtC,CAACC,GAAQC,CAAgB,IAAIF,EAASH,EAAQ,UAAU,CAAC,GACzD,CAACM,GAAcC,CAAe,IAAIJ,EAASH,EAAQ,gBAAgB,CAAC,GAEpEQ,IAAWC,EAAgC,IAAI;AAErD,EAAAC,EAAU,MAAM;AACd,UAAMC,IAAQ,IAAI,MAAMZ,CAAG;AAE3B,IAAAY,EAAM,SAASP,GACfO,EAAM,eAAeL,GACrBE,EAAS,UAAUG,GAEfX,EAAQ,eAAaW,EAAM,KAAA;AAE/B,UAAMC,IAAS,MAAMV,EAAW,EAAI,GAC9BW,IAAU,MAAMX,EAAW,EAAK,GAChCY,IAAU,MAAMZ,EAAW,EAAK,GAChCa,IAAe,MAAM;AAAA,IAAA,GACrBC,IAAiB,MAAMX,EAAiBM,EAAM,MAAM,GACpDM,IAAe,MAAMV,EAAgBI,EAAM,YAAY;AAE7D,WAAAA,EAAM,iBAAiB,QAAQC,CAAM,GACrCD,EAAM,iBAAiB,SAASE,CAAO,GACvCF,EAAM,iBAAiB,SAASG,CAAO,GACvCH,EAAM,iBAAiB,cAAcI,CAAY,GACjDJ,EAAM,iBAAiB,gBAAgBK,CAAc,GACrDL,EAAM,iBAAiB,cAAcM,CAAY,GAE1C,MAAM;AACX,MAAAN,EAAM,oBAAoB,QAAQC,CAAM,GACxCD,EAAM,oBAAoB,SAASE,CAAO,GAC1CF,EAAM,oBAAoB,SAASG,CAAO,GAC1CH,EAAM,oBAAoB,cAAcI,CAAY,GACpDJ,EAAM,oBAAoB,gBAAgBK,CAAc,GACxDL,EAAM,oBAAoB,cAAcM,CAAY,GAEpDN,EAAM,MAAA,GACNA,EAAM,OAAA;AAAA,IAAO;AAAA,EACf,GACC,CAACZ,CAAG,CAAC;AAER,QAAMmB,IAAO,MAAM;AACjB,IAAKV,EAAS,YACdA,EAAS,QAAQ,MAAA,GACjBA,EAAS,QAAQ,cAAc;AAAA,EAAA;AA8CjC,SAAO;AAAA,IACL,MA5CW,OAAOW,MAAwB;AAC1C,UAAI,CAACX,EAAS,QAAS;AAGvB,UAFIR,EAAQ,aAAWkB,EAAA,GAEnB,CAACC,KAAc,CAACnB,EAAQ,SAASmB,CAAU,GAAG;AAChD,cAAMX,EAAS,QAAQ,KAAA;AACvB;AAAA,MAAA;AAGF,YAAM,CAACY,GAAOC,CAAG,IAAIrB,EAAQ,OAAOmB,CAAU;AAC9C,MAAAX,EAAS,QAAQ,cAAcY,GAC/B,MAAMZ,EAAS,QAAQ,KAAA;AAEvB,YAAMc,IAAY,MAAM;AACtB,QAAKd,EAAS,YACVA,EAAS,QAAQ,eAAea,KAClCH,EAAA,GAGGjB,KAEL,sBAAsBqB,CAAS;AAAA,MAAA;AAGjC,4BAAsBA,CAAS;AAAA,IAAA;AAAA,IAqB/B,OAlBY,MAAMd,EAAS,SAAS,MAAA;AAAA,IAmBpC,MAAAU;AAAA,IACA,SAAAjB;AAAA,IACA,WAnBgB,CAACsB,MAAkB;AACnC,UAAI,CAACf,EAAS,QAAS;AACvB,YAAMgB,IAAY,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGD,CAAK,CAAC;AAChD,MAAAf,EAAS,QAAQ,SAASgB,GAC1BnB,EAAiBmB,CAAS;AAAA,IAAA;AAAA,IAgB1B,QAAApB;AAAA,IACA,oBAdyB,CAACmB,MAAkB;AAC5C,UAAI,CAACf,EAAS,QAAS;AACvB,YAAMiB,IAAU,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGF,CAAK,CAAC;AAChD,MAAAf,EAAS,QAAQ,eAAeiB,GAChClB,EAAgBkB,CAAO;AAAA,IAAA;AAAA,IAWvB,cAAAnB;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"useAudio.mjs","sources":["../../../../src/hooks/useAudio/useAudio.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** Type sprite map */\nexport interface SpriteMap {\n /** [start time in seconds, end time in seconds] */\n [key: string]: [number, number];\n}\n\n/** Type use audio options */\nexport interface UseAudioOptions {\n /** Whether audio playback is initially enabled */\n immediately?: boolean;\n /** Whether to stop current playback when starting a new one */\n interrupt?: boolean;\n /** Initial playback speed (0.5 to 2) */\n playbackRate?: number;\n /** Map of named audio segments for sprite-based playback */\n sprite?: SpriteMap;\n /** Initial volume level (0 to 1) */\n volume?: number;\n}\n\n/** Type use audio return type */\nexport interface UseAudioReturn {\n /** Current playback speed (0.5 to 2) */\n playbackRate: number;\n /** Whether audio is currently playing */\n playing: boolean;\n /** Current volume level (0 to 1) */\n volume: number;\n /** Set playback speed (0.5 to 2) */\n changePlaybackRate: (value: number) => void;\n /** Pause audio playback at current position */\n pause: () => void;\n /** Start audio playback from the beginning or specified sprite segment */\n play: (sprite?: string) => Promise<void>;\n /** Set audio volume level (0 to 1) */\n setVolume: (value: number) => void;\n /** Stop audio playback and reset position to start */\n stop: () => void;\n}\n\n/**\n * @name useAudio\n * @description - Hook that manages audio playback with sprite support\n * @category Browser\n *\n * @browserapi Audio https://developer.mozilla.org/en-US/docs/Web/API/Audio\n *\n * @template Value The type of the value\n * @param {string} url The URL of the audio file to play\n * @param {UseAudioOptions} [options] Audio configuration options\n * @param {number} [options.volume=1] Initial volume level (0 to 1)\n * @param {number} [options.playbackRate=1] Initial playback speed (0.5 to 2)\n * @param {boolean} [options.interrupt=false] Whether to stop current playback when starting a new one\n * @param {boolean} [options.soundEnabled=true] Whether audio playback is initially enabled\n * @param {SpriteMap} [options.sprite] Map of named audio segments for sprite-based playback\n * @returns {UseAudioReturn} An object containing audio controls and state\n *\n * @example\n * const audio = useAudio(\"/path/to/sound.mp3\");\n */\nexport const useAudio = (src: string, options: UseAudioOptions = {}): UseAudioReturn => {\n const [playing, setPlaying] = useState(false);\n const [volume, setCurrentVolume] = useState(options.volume ?? 1);\n const [playbackRate, setPlaybackRate] = useState(options.playbackRate ?? 1);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n\n useEffect(() => {\n const audio = new Audio(src);\n\n audio.volume = volume;\n audio.playbackRate = playbackRate;\n audioRef.current = audio;\n\n if (options.immediately) audio.play();\n\n const onPlay = () => setPlaying(true);\n const onPause = () => setPlaying(false);\n const onEnded = () => setPlaying(false);\n const onTimeUpdate = () => {};\n const onVolumeChange = () => setCurrentVolume(audio.volume);\n const onRateChange = () => setPlaybackRate(audio.playbackRate);\n\n audio.addEventListener('play', onPlay);\n audio.addEventListener('pause', onPause);\n audio.addEventListener('ended', onEnded);\n audio.addEventListener('timeupdate', onTimeUpdate);\n audio.addEventListener('volumechange', onVolumeChange);\n audio.addEventListener('ratechange', onRateChange);\n\n return () => {\n audio.removeEventListener('play', onPlay);\n audio.removeEventListener('pause', onPause);\n audio.removeEventListener('ended', onEnded);\n audio.removeEventListener('timeupdate', onTimeUpdate);\n audio.removeEventListener('volumechange', onVolumeChange);\n audio.removeEventListener('ratechange', onRateChange);\n\n audio.pause();\n audio.remove();\n };\n }, [src]);\n\n const stop = () => {\n if (!audioRef.current) return;\n audioRef.current.pause();\n audioRef.current.currentTime = 0;\n };\n\n const play = async (spriteName?: string) => {\n if (!audioRef.current) return;\n if (options.interrupt) stop();\n\n if (!spriteName || !options.sprite?.[spriteName]) {\n await audioRef.current.play();\n return;\n }\n\n const [start, end] = options.sprite[spriteName];\n audioRef.current.currentTime = start;\n await audioRef.current.play();\n\n const checkTime = () => {\n if (!audioRef.current) return;\n if (audioRef.current.currentTime >= end) {\n stop();\n }\n\n if (!playing) return;\n\n requestAnimationFrame(checkTime);\n };\n\n requestAnimationFrame(checkTime);\n };\n\n const pause = () => audioRef.current?.pause();\n\n const setVolume = (value: number) => {\n if (!audioRef.current) return;\n const newVolume = Math.max(0, Math.min(1, value));\n audioRef.current.volume = newVolume;\n setCurrentVolume(newVolume);\n };\n\n const changePlaybackRate = (value: number) => {\n if (!audioRef.current) return;\n const newRate = Math.max(0.5, Math.min(2, value));\n audioRef.current.playbackRate = newRate;\n setPlaybackRate(newRate);\n };\n\n return {\n play,\n pause,\n stop,\n playing,\n setVolume,\n volume,\n changePlaybackRate,\n playbackRate\n };\n};\n"],"names":["useAudio","src","options","playing","setPlaying","useState","volume","setCurrentVolume","playbackRate","setPlaybackRate","audioRef","useRef","useEffect","audio","onPlay","onPause","onEnded","onTimeUpdate","onVolumeChange","onRateChange","stop","spriteName","start","end","checkTime","value","newVolume","newRate"],"mappings":";AA8DO,MAAMA,IAAW,CAACC,GAAaC,IAA2B,OAAuB;AACtF,QAAM,CAACC,GAASC,CAAU,IAAIC,EAAS,EAAK,GACtC,CAACC,GAAQC,CAAgB,IAAIF,EAASH,EAAQ,UAAU,CAAC,GACzD,CAACM,GAAcC,CAAe,IAAIJ,EAASH,EAAQ,gBAAgB,CAAC,GAEpEQ,IAAWC,EAAgC,IAAI;AAErD,EAAAC,EAAU,MAAM;AACd,UAAMC,IAAQ,IAAI,MAAMZ,CAAG;AAE3B,IAAAY,EAAM,SAASP,GACfO,EAAM,eAAeL,GACrBE,EAAS,UAAUG,GAEfX,EAAQ,eAAaW,EAAM,KAAA;AAE/B,UAAMC,IAAS,MAAMV,EAAW,EAAI,GAC9BW,IAAU,MAAMX,EAAW,EAAK,GAChCY,IAAU,MAAMZ,EAAW,EAAK,GAChCa,IAAe,MAAM;AAAA,IAAA,GACrBC,IAAiB,MAAMX,EAAiBM,EAAM,MAAM,GACpDM,IAAe,MAAMV,EAAgBI,EAAM,YAAY;AAE7D,WAAAA,EAAM,iBAAiB,QAAQC,CAAM,GACrCD,EAAM,iBAAiB,SAASE,CAAO,GACvCF,EAAM,iBAAiB,SAASG,CAAO,GACvCH,EAAM,iBAAiB,cAAcI,CAAY,GACjDJ,EAAM,iBAAiB,gBAAgBK,CAAc,GACrDL,EAAM,iBAAiB,cAAcM,CAAY,GAE1C,MAAM;AACX,MAAAN,EAAM,oBAAoB,QAAQC,CAAM,GACxCD,EAAM,oBAAoB,SAASE,CAAO,GAC1CF,EAAM,oBAAoB,SAASG,CAAO,GAC1CH,EAAM,oBAAoB,cAAcI,CAAY,GACpDJ,EAAM,oBAAoB,gBAAgBK,CAAc,GACxDL,EAAM,oBAAoB,cAAcM,CAAY,GAEpDN,EAAM,MAAA,GACNA,EAAM,OAAA;AAAA,IAAO;AAAA,EACf,GACC,CAACZ,CAAG,CAAC;AAER,QAAMmB,IAAO,MAAM;AACjB,IAAKV,EAAS,YACdA,EAAS,QAAQ,MAAA,GACjBA,EAAS,QAAQ,cAAc;AAAA,EAAA;AA8CjC,SAAO;AAAA,IACL,MA5CW,OAAOW,MAAwB;AAC1C,UAAI,CAACX,EAAS,QAAS;AAGvB,UAFIR,EAAQ,aAAWkB,EAAA,GAEnB,CAACC,KAAc,CAACnB,EAAQ,SAASmB,CAAU,GAAG;AAChD,cAAMX,EAAS,QAAQ,KAAA;AACvB;AAAA,MAAA;AAGF,YAAM,CAACY,GAAOC,CAAG,IAAIrB,EAAQ,OAAOmB,CAAU;AAC9C,MAAAX,EAAS,QAAQ,cAAcY,GAC/B,MAAMZ,EAAS,QAAQ,KAAA;AAEvB,YAAMc,IAAY,MAAM;AACtB,QAAKd,EAAS,YACVA,EAAS,QAAQ,eAAea,KAClCH,EAAA,GAGGjB,KAEL,sBAAsBqB,CAAS;AAAA,MAAA;AAGjC,4BAAsBA,CAAS;AAAA,IAAA;AAAA,IAqB/B,OAlBY,MAAMd,EAAS,SAAS,MAAA;AAAA,IAmBpC,MAAAU;AAAA,IACA,SAAAjB;AAAA,IACA,WAnBgB,CAACsB,MAAkB;AACnC,UAAI,CAACf,EAAS,QAAS;AACvB,YAAMgB,IAAY,KAAK,IAAI,GAAG,KAAK,IAAI,GAAGD,CAAK,CAAC;AAChD,MAAAf,EAAS,QAAQ,SAASgB,GAC1BnB,EAAiBmB,CAAS;AAAA,IAAA;AAAA,IAgB1B,QAAApB;AAAA,IACA,oBAdyB,CAACmB,MAAkB;AAC5C,UAAI,CAACf,EAAS,QAAS;AACvB,YAAMiB,IAAU,KAAK,IAAI,KAAK,KAAK,IAAI,GAAGF,CAAK,CAAC;AAChD,MAAAf,EAAS,QAAQ,eAAeiB,GAChClB,EAAgBkB,CAAO;AAAA,IAAA;AAAA,IAWvB,cAAAnB;AAAA,EAAA;AAEJ;"}
@@ -0,0 +1,39 @@
1
+ import { useEffect as Y } from "react";
2
+ import { useRefState as g } from "../useRefState/useRefState.mjs";
3
+ import { getElement as T } from "../../utils/helpers/getElement.mjs";
4
+ const M = (...o) => {
5
+ const n = typeof o[0] != "object" || "current" in o[0] ? o[0] : void 0, S = o[1] || (typeof o[0] == "object" ? o[0] : {}), { enabled: u = !0 } = S, c = g();
6
+ if (Y(() => {
7
+ if (!u || !n && !c.state) return;
8
+ const t = n ? T(n) : c.state;
9
+ if (!t) return;
10
+ let r = !0, i = 0, h = 0;
11
+ const f = () => {
12
+ const { scrollHeight: e, clientHeight: s, scrollTop: l } = t, E = e - s, L = E / 2;
13
+ l < h ? r = !1 : E - l <= L && (r = !0), h = l;
14
+ }, a = (e) => {
15
+ e.deltaY < 0 ? r = !1 : f();
16
+ }, d = (e) => {
17
+ i = e.touches[0].clientY;
18
+ }, v = (e) => {
19
+ const s = e.touches[0].clientY;
20
+ i - s < 0 ? r = !1 : f(), i = s;
21
+ }, b = () => {
22
+ r && t.scrollTo({ top: t.scrollHeight });
23
+ };
24
+ t.addEventListener("wheel", a), t.addEventListener("touchstart", d), t.addEventListener("touchmove", v);
25
+ const m = new MutationObserver(b);
26
+ return m.observe(t, {
27
+ childList: !0,
28
+ subtree: !0,
29
+ characterData: !0
30
+ }), () => {
31
+ m.disconnect(), t.removeEventListener("wheel", a), t.removeEventListener("touchstart", d), t.removeEventListener("touchmove", v);
32
+ };
33
+ }, [u, n, c.state]), !n)
34
+ return c;
35
+ };
36
+ export {
37
+ M as useAutoScroll
38
+ };
39
+ //# sourceMappingURL=useAutoScroll.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAutoScroll.mjs","sources":["../../../../src/hooks/useAutoScroll/useAutoScroll.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use auto scroll options type */\nexport interface UseAutoScrollOptions {\n /** Whether auto-scrolling is enabled */\n enabled?: boolean;\n}\n\nexport interface UseAutoScroll {\n (target: HookTarget, options?: UseAutoScrollOptions): void;\n\n <Target extends HTMLElement>(options?: UseAutoScrollOptions): StateRef<Target>;\n}\n\n/**\n * @name useAutoScroll\n * @description - Hook that automatically scrolls a list element to the bottom\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element to auto-scroll\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {void}\n *\n * @example\n * useAutoScroll(ref);\n *\n * @overload\n * @template Target\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {StateRef<Target>} A React ref to attach to the list element\n *\n * @example\n * const ref = useAutoScroll();\n */\nexport const useAutoScroll = ((...params: any[]) => {\n const target = (\n typeof params[0] !== 'object' || 'current' in params[0] ? params[0] : undefined\n ) as HookTarget | undefined;\n const options = (params[1] ||\n (typeof params[0] === 'object' ? params[0] : {})) as UseAutoScrollOptions;\n const { enabled = true } = options;\n\n const internalRef = useRefState<HTMLElement>();\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n\n const element = (target ? getElement(target) : internalRef.state) as HTMLElement;\n\n if (!element) return;\n\n let shouldAutoScroll = true;\n let touchStartY = 0;\n let lastScrollTop = 0;\n\n const onCheckScrollPosition = () => {\n const { scrollHeight, clientHeight, scrollTop } = element;\n const maxScrollHeight = scrollHeight - clientHeight;\n const scrollThreshold = maxScrollHeight / 2;\n\n if (scrollTop < lastScrollTop) shouldAutoScroll = false;\n else if (maxScrollHeight - scrollTop <= scrollThreshold) shouldAutoScroll = true;\n\n lastScrollTop = scrollTop;\n };\n\n const onWheel = (event: WheelEvent) => {\n if (event.deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n };\n\n const onTouchStart = (event: TouchEvent) => {\n touchStartY = event.touches[0].clientY;\n };\n\n const onTouchMove = (event: TouchEvent) => {\n const touchEndY = event.touches[0].clientY;\n const deltaY = touchStartY - touchEndY;\n\n if (deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n\n touchStartY = touchEndY;\n };\n\n const onMutation = () => {\n if (!shouldAutoScroll) return;\n element.scrollTo({ top: element.scrollHeight });\n };\n\n element.addEventListener('wheel', onWheel);\n element.addEventListener('touchstart', onTouchStart);\n element.addEventListener('touchmove', onTouchMove);\n\n const observer = new MutationObserver(onMutation);\n\n observer.observe(element, {\n childList: true,\n subtree: true,\n characterData: true\n });\n\n return () => {\n observer.disconnect();\n element.removeEventListener('wheel', onWheel);\n element.removeEventListener('touchstart', onTouchStart);\n element.removeEventListener('touchmove', onTouchMove);\n };\n }, [enabled, target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseAutoScroll;\n"],"names":["useAutoScroll","params","target","options","enabled","internalRef","useRefState","useEffect","element","getElement","shouldAutoScroll","touchStartY","lastScrollTop","onCheckScrollPosition","scrollHeight","clientHeight","scrollTop","maxScrollHeight","scrollThreshold","onWheel","event","onTouchStart","onTouchMove","touchEndY","onMutation","observer"],"mappings":";;;AA2CO,MAAMA,IAAiB,IAAIC,MAAkB;AAClD,QAAMC,IACJ,OAAOD,EAAO,CAAC,KAAM,YAAY,aAAaA,EAAO,CAAC,IAAIA,EAAO,CAAC,IAAI,QAElEE,IAAWF,EAAO,CAAC,MACtB,OAAOA,EAAO,CAAC,KAAM,WAAWA,EAAO,CAAC,IAAI,CAAA,IACzC,EAAE,SAAAG,IAAU,GAAA,IAASD,GAErBE,IAAcC,EAAA;AAoEpB,MAlEAC,EAAU,MAAM;AACd,QAAI,CAACH,KAAY,CAACF,KAAU,CAACG,EAAY,MAAQ;AAEjD,UAAMG,IAAWN,IAASO,EAAWP,CAAM,IAAIG,EAAY;AAE3D,QAAI,CAACG,EAAS;AAEd,QAAIE,IAAmB,IACnBC,IAAc,GACdC,IAAgB;AAEpB,UAAMC,IAAwB,MAAM;AAClC,YAAM,EAAE,cAAAC,GAAc,cAAAC,GAAc,WAAAC,EAAA,IAAcR,GAC5CS,IAAkBH,IAAeC,GACjCG,IAAkBD,IAAkB;AAE1C,MAAID,IAAYJ,IAAeF,IAAmB,KACzCO,IAAkBD,KAAaE,MAAiBR,IAAmB,KAE5EE,IAAgBI;AAAA,IAAA,GAGZG,IAAU,CAACC,MAAsB;AACrC,MAAIA,EAAM,SAAS,IAAGV,IAAmB,KACpCG,EAAA;AAAA,IAAsB,GAGvBQ,IAAe,CAACD,MAAsB;AAC1C,MAAAT,IAAcS,EAAM,QAAQ,CAAC,EAAE;AAAA,IAAA,GAG3BE,IAAc,CAACF,MAAsB;AACzC,YAAMG,IAAYH,EAAM,QAAQ,CAAC,EAAE;AAGnC,MAFeT,IAAcY,IAEhB,IAAGb,IAAmB,KAC9BG,EAAA,GAELF,IAAcY;AAAA,IAAA,GAGVC,IAAa,MAAM;AACvB,MAAKd,KACLF,EAAQ,SAAS,EAAE,KAAKA,EAAQ,cAAc;AAAA,IAAA;AAGhD,IAAAA,EAAQ,iBAAiB,SAASW,CAAO,GACzCX,EAAQ,iBAAiB,cAAca,CAAY,GACnDb,EAAQ,iBAAiB,aAAac,CAAW;AAEjD,UAAMG,IAAW,IAAI,iBAAiBD,CAAU;AAEhD,WAAAC,EAAS,QAAQjB,GAAS;AAAA,MACxB,WAAW;AAAA,MACX,SAAS;AAAA,MACT,eAAe;AAAA,IAAA,CAChB,GAEM,MAAM;AACX,MAAAiB,EAAS,WAAA,GACTjB,EAAQ,oBAAoB,SAASW,CAAO,GAC5CX,EAAQ,oBAAoB,cAAca,CAAY,GACtDb,EAAQ,oBAAoB,aAAac,CAAW;AAAA,IAAA;AAAA,EACtD,GACC,CAAClB,GAASF,GAAQG,EAAY,KAAK,CAAC,GAEnC,CAAAH;AACJ,WAAOG;AACT;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBattery.mjs","sources":["../../../../src/hooks/useBattery/useBattery.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface BatteryManager extends EventTarget {\n charging: boolean;\n chargingTime: number;\n dischargingTime: number;\n level: number;\n}\n\ndeclare global {\n interface Navigator {\n readonly getBattery: () => Promise<BatteryManager>;\n }\n}\n\n/** The use battery value type */\nexport interface UseBatteryValue {\n /** Is charging battery? */\n charging: boolean;\n /** Time until the battery is fully charged */\n chargingTime: number;\n /** Time until the battery is completely discharged */\n dischargingTime: number;\n /** Battery charge level from 0 to 1 */\n level: number;\n /** Is battery information loading? */\n loading: boolean;\n}\n\n/** The use battery return type */\nexport interface UseBatteryStateReturn {\n /** Whether the battery api is supported*/\n supported: boolean;\n /** The use battery value type */\n value: UseBatteryValue;\n}\n\n/**\n * @name useBattery\n * @description - Hook for getting information about battery status\n * @category Browser\n *\n * @browserapi navigator.getBattery https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getBattery\n *\n * @returns {UseBatteryStateReturn} Object containing battery information & Battery API support\n *\n * @example\n * const { supported, loading, charging, chargingTime, dischargingTime, level } = useBattery();\n */\nexport const useBattery = (): UseBatteryStateReturn => {\n const supported =\n typeof navigator !== 'undefined' &&\n 'getBattery' in navigator &&\n typeof navigator.getBattery === 'function';\n const [value, setValue] = useState<UseBatteryValue>({\n loading: supported,\n level: 0,\n charging: false,\n chargingTime: 0,\n dischargingTime: 0\n });\n\n useEffect(() => {\n if (!supported) return;\n let battery: BatteryManager | null;\n\n const onChange = () =>\n setValue({\n loading: false,\n level: battery?.level ?? 0,\n charging: battery?.charging ?? false,\n dischargingTime: battery?.dischargingTime ?? 0,\n chargingTime: battery?.chargingTime ?? 0\n });\n\n navigator.getBattery().then((batteryManager) => {\n battery = batteryManager;\n onChange();\n\n battery.addEventListener('levelchange', onChange);\n battery.addEventListener('chargingchange', onChange);\n battery.addEventListener('chargingtimechange', onChange);\n battery.addEventListener('dischargingtimechange', onChange);\n });\n\n return () => {\n if (!battery) return;\n console.log('unmount', battery);\n battery.removeEventListener('levelchange', onChange);\n battery.removeEventListener('chargingchange', onChange);\n battery.removeEventListener('chargingtimechange', onChange);\n battery.removeEventListener('dischargingtimechange', onChange);\n };\n }, []);\n\n return { supported, value };\n};\n"],"names":["useBattery","supported","value","setValue","useState","useEffect","battery","onChange","batteryManager"],"mappings":";AAiDO,MAAMA,IAAa,MAA6B;AACrD,QAAMC,IACJ,OAAO,YAAc,OACrB,gBAAgB,aAChB,OAAO,UAAU,cAAe,YAC5B,CAACC,GAAOC,CAAQ,IAAIC,EAA0B;AAAA,IAClD,SAASH;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,cAAc;AAAA,IACd,iBAAiB;AAAA,EAAA,CAClB;AAED,SAAAI,EAAU,MAAM;AACd,QAAI,CAACJ,EAAW;AAChB,QAAIK;AAEJ,UAAMC,IAAW,MACfJ,EAAS;AAAA,MACP,SAAS;AAAA,MACT,OAAOG,GAAS,SAAS;AAAA,MACzB,UAAUA,GAAS,YAAY;AAAA,MAC/B,iBAAiBA,GAAS,mBAAmB;AAAA,MAC7C,cAAcA,GAAS,gBAAgB;AAAA,IAAA,CACxC;AAEH,qBAAU,WAAA,EAAa,KAAK,CAACE,MAAmB;AAC9C,MAAAF,IAAUE,GACVD,EAAA,GAEAD,EAAQ,iBAAiB,eAAeC,CAAQ,GAChDD,EAAQ,iBAAiB,kBAAkBC,CAAQ,GACnDD,EAAQ,iBAAiB,sBAAsBC,CAAQ,GACvDD,EAAQ,iBAAiB,yBAAyBC,CAAQ;AAAA,IAAA,CAC3D,GAEM,MAAM;AACX,MAAKD,MACL,QAAQ,IAAI,WAAWA,CAAO,GAC9BA,EAAQ,oBAAoB,eAAeC,CAAQ,GACnDD,EAAQ,oBAAoB,kBAAkBC,CAAQ,GACtDD,EAAQ,oBAAoB,sBAAsBC,CAAQ,GAC1DD,EAAQ,oBAAoB,yBAAyBC,CAAQ;AAAA,IAAA;AAAA,EAC/D,GACC,EAAE,GAEE,EAAE,WAAAN,GAAW,OAAAC,EAAA;AACtB;"}
1
+ {"version":3,"file":"useBattery.mjs","sources":["../../../../src/hooks/useBattery/useBattery.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface BatteryManager extends EventTarget {\n charging: boolean;\n chargingTime: number;\n dischargingTime: number;\n level: number;\n}\n\ndeclare global {\n interface Navigator {\n readonly getBattery: () => Promise<BatteryManager>;\n }\n}\n\n/** The use battery value type */\nexport interface UseBatteryValue {\n /** Is charging battery? */\n charging: boolean;\n /** Time until the battery is fully charged */\n chargingTime: number;\n /** Time until the battery is completely discharged */\n dischargingTime: number;\n /** Battery charge level from 0 to 1 */\n level: number;\n /** Is battery information loading? */\n loading: boolean;\n}\n\n/** The use battery return type */\nexport interface UseBatteryStateReturn {\n /** Whether the battery api is supported*/\n supported: boolean;\n /** The use battery value type */\n value: UseBatteryValue;\n}\n\n/**\n * @name useBattery\n * @description - Hook for getting information about battery status\n * @category Browser\n *\n * @browserapi navigator.getBattery https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getBattery\n *\n * @returns {UseBatteryStateReturn} Object containing battery information & Battery API support\n *\n * @example\n * const { supported, loading, charging, chargingTime, dischargingTime, level } = useBattery();\n */\nexport const useBattery = (): UseBatteryStateReturn => {\n const supported =\n typeof navigator !== 'undefined' &&\n 'getBattery' in navigator &&\n typeof navigator.getBattery === 'function';\n const [value, setValue] = useState<UseBatteryValue>({\n loading: supported,\n level: 0,\n charging: false,\n chargingTime: 0,\n dischargingTime: 0\n });\n\n useEffect(() => {\n if (!supported) return;\n\n let battery: BatteryManager | null;\n\n const onChange = () =>\n setValue({\n loading: false,\n level: battery?.level ?? 0,\n charging: battery?.charging ?? false,\n dischargingTime: battery?.dischargingTime ?? 0,\n chargingTime: battery?.chargingTime ?? 0\n });\n\n navigator.getBattery().then((batteryManager) => {\n battery = batteryManager;\n onChange();\n\n battery.addEventListener('levelchange', onChange);\n battery.addEventListener('chargingchange', onChange);\n battery.addEventListener('chargingtimechange', onChange);\n battery.addEventListener('dischargingtimechange', onChange);\n });\n\n return () => {\n if (!battery) return;\n console.log('unmount', battery);\n battery.removeEventListener('levelchange', onChange);\n battery.removeEventListener('chargingchange', onChange);\n battery.removeEventListener('chargingtimechange', onChange);\n battery.removeEventListener('dischargingtimechange', onChange);\n };\n }, []);\n\n return { supported, value };\n};\n"],"names":["useBattery","supported","value","setValue","useState","useEffect","battery","onChange","batteryManager"],"mappings":";AAiDO,MAAMA,IAAa,MAA6B;AACrD,QAAMC,IACJ,OAAO,YAAc,OACrB,gBAAgB,aAChB,OAAO,UAAU,cAAe,YAC5B,CAACC,GAAOC,CAAQ,IAAIC,EAA0B;AAAA,IAClD,SAASH;AAAA,IACT,OAAO;AAAA,IACP,UAAU;AAAA,IACV,cAAc;AAAA,IACd,iBAAiB;AAAA,EAAA,CAClB;AAED,SAAAI,EAAU,MAAM;AACd,QAAI,CAACJ,EAAW;AAEhB,QAAIK;AAEJ,UAAMC,IAAW,MACfJ,EAAS;AAAA,MACP,SAAS;AAAA,MACT,OAAOG,GAAS,SAAS;AAAA,MACzB,UAAUA,GAAS,YAAY;AAAA,MAC/B,iBAAiBA,GAAS,mBAAmB;AAAA,MAC7C,cAAcA,GAAS,gBAAgB;AAAA,IAAA,CACxC;AAEH,qBAAU,WAAA,EAAa,KAAK,CAACE,MAAmB;AAC9C,MAAAF,IAAUE,GACVD,EAAA,GAEAD,EAAQ,iBAAiB,eAAeC,CAAQ,GAChDD,EAAQ,iBAAiB,kBAAkBC,CAAQ,GACnDD,EAAQ,iBAAiB,sBAAsBC,CAAQ,GACvDD,EAAQ,iBAAiB,yBAAyBC,CAAQ;AAAA,IAAA,CAC3D,GAEM,MAAM;AACX,MAAKD,MACL,QAAQ,IAAI,WAAWA,CAAO,GAC9BA,EAAQ,oBAAoB,eAAeC,CAAQ,GACnDD,EAAQ,oBAAoB,kBAAkBC,CAAQ,GACtDD,EAAQ,oBAAoB,sBAAsBC,CAAQ,GAC1DD,EAAQ,oBAAoB,yBAAyBC,CAAQ;AAAA,IAAA;AAAA,EAC/D,GACC,EAAE,GAEE,EAAE,WAAAN,GAAW,OAAAC,EAAA;AACtB;"}