@siberiacancode/reactuse 0.2.19 → 0.2.21

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.
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),h=(i,r={})=>{const[l,s]=u.useState(!1),[m,d]=u.useState(r.volume??1),[v,y]=u.useState(r.playbackRate??1),t=u.useRef(null);u.useEffect(()=>{const e=new Audio(i);e.volume=m,e.playbackRate=v,t.current=e,r.immediately&&e.play();const n=()=>s(!0),c=()=>s(!1),a=()=>s(!1),p=()=>{},f=()=>d(e.volume),E=()=>y(e.playbackRate);return e.addEventListener("play",n),e.addEventListener("pause",c),e.addEventListener("ended",a),e.addEventListener("timeupdate",p),e.addEventListener("volumechange",f),e.addEventListener("ratechange",E),()=>{e.removeEventListener("play",n),e.removeEventListener("pause",c),e.removeEventListener("ended",a),e.removeEventListener("timeupdate",p),e.removeEventListener("volumechange",f),e.removeEventListener("ratechange",E),e.pause(),e.remove()}},[i]);const o=()=>{t.current&&(t.current.pause(),t.current.currentTime=0)};return{play:async e=>{if(!t.current)return;if(r.interrupt&&o(),!e||!r.sprite?.[e]){await t.current.play();return}const[n,c]=r.sprite[e];t.current.currentTime=n,await t.current.play();const a=()=>{t.current&&(t.current.currentTime>=c&&o(),l&&requestAnimationFrame(a))};requestAnimationFrame(a)},pause:()=>t.current?.pause(),stop:o,playing:l,setVolume:e=>{if(!t.current)return;const n=Math.max(0,Math.min(1,e));t.current.volume=n,d(n)},volume:m,changePlaybackRate:e=>{if(!t.current)return;const n=Math.max(.5,Math.min(2,e));t.current.playbackRate=n,y(n)},playbackRate:v}};exports.useAudio=h;
2
+ //# sourceMappingURL=useAudio.cjs.map
@@ -0,0 +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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),I=require("../useRefState/useRefState.cjs"),J=require("../../utils/helpers/isTarget.cjs"),K=require("../../utils/helpers/getElement.cjs"),V=r=>{let a=[];for(let s=0;s<r.length;++s)a=[...a,[r.start(s),r.end(s)]];return a},N=(...r)=>{const a=J.isTarget(r[0])?r[0]:void 0,s=a?typeof r[1]=="object"?r[1]:{src:r[1]}:typeof r[0]=="object"?r[0]:{src:r[0]},u=I.useRefState(),t=n.useRef(null),[c,o]=n.useState(!1),[i,d]=n.useState(0),[j,l]=n.useState(0),[x,m]=n.useState(!1),[D,W]=n.useState(!1),[B,O]=n.useState([]),[U,v]=n.useState(!1),[z,g]=n.useState(!1),[F,f]=n.useState(1),[G,E]=n.useState(!1),[H,y]=n.useState(1);n.useEffect(()=>{const e=a?K.getElement(a):u.current;if(!e)return;t.current=e,e.src=s.src,s.type&&e.setAttribute("type",s.type),s.media&&e.setAttribute("media",s.media),d(e.duration),l(e.currentTime),o(!1),g(e.ended),E(e.muted),y(e.volume),f(e.playbackRate);const p=()=>{o(!0),v(!1)},k=()=>o(!1),h=()=>W(!0),b=()=>v(!0),R=()=>m(!0),T=()=>m(!1),M=()=>{o(!1),g(!0)},P=()=>d(e.duration),q=()=>l(e.currentTime),w=()=>{E(e.muted),y(e.volume)},A=()=>f(e.playbackRate),C=()=>O(V(e.buffered));return e.addEventListener("playing",p),e.addEventListener("pause",k),e.addEventListener("waiting",h),e.addEventListener("progress",C),e.addEventListener("stalled",b),e.addEventListener("seeking",R),e.addEventListener("seeked",T),e.addEventListener("ended",M),e.addEventListener("loadedmetadata",P),e.addEventListener("timeupdate",q),e.addEventListener("volumechange",w),e.addEventListener("ratechange",A),()=>{e.removeEventListener("playing",p),e.removeEventListener("pause",k),e.removeEventListener("waiting",h),e.removeEventListener("progress",C),e.removeEventListener("stalled",b),e.removeEventListener("seeking",R),e.removeEventListener("seeked",T),e.removeEventListener("ended",M),e.removeEventListener("loadedmetadata",P),e.removeEventListener("timeupdate",q),e.removeEventListener("volumechange",w),e.removeEventListener("ratechange",A)}},[a,u.state]);const L=async()=>{const e=t.current;e&&await e.play()},S=()=>{t.current&&t.current.pause()};return{playing:c,duration:i,currentTime:j,seeking:x,waiting:D,buffered:B,stalled:U,ended:z,playbackRate:F,muted:G,volume:H,play:L,pause:S,toggle:async()=>c?S():L(),seek:e=>{t.current&&(t.current.currentTime=Math.min(Math.max(e,0),i))},changeVolume:e=>{t.current&&(t.current.volume=Math.min(Math.max(e,0),1))},mute:()=>{t.current&&(t.current.muted=!0)},unmute:()=>{t.current&&(t.current.muted=!1)},changePlaybackRate:e=>{t.current&&(t.current.playbackRate=e)},...!a&&{ref:u}}};exports.timeRangeToArray=V;exports.useMediaControls=N;
2
+ //# sourceMappingURL=useMediaControls.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMediaControls.cjs","sources":["../../../../src/hooks/useMediaControls/useMediaControls.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport const timeRangeToArray = (timeRanges: TimeRanges) => {\n let ranges: [number, number][] = [];\n\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n\n return ranges;\n};\n\n/** The media source configuration type */\nexport interface UseMediaSource {\n /** The media attribute of the media */\n media?: string;\n /** The source URL of the media */\n src: string;\n /** The MIME type of the media */\n type?: string;\n}\n\n/** The media controls return type */\nexport interface UseMediaControlsReturn {\n /** Whether the media is currently buffering */\n buffered: [number, number][];\n /** The current playback position in seconds */\n currentTime: number;\n /** The total duration of the media in seconds */\n duration: number;\n /** Whether the media has ended */\n ended: boolean;\n /** Whether the media is currently muted */\n muted: boolean;\n /** The current playback rate (1.0 is normal speed) */\n playbackRate: number;\n /** Whether the media is currently playing */\n playing: boolean;\n /** Whether the media is currently seeking */\n seeking: boolean;\n /** Whether the media is currently stalled */\n stalled: boolean;\n /** The current volume level (0.0 to 1.0) */\n volume: number;\n /** Whether the media is currently waiting */\n waiting: boolean;\n\n /** Set the playback rate */\n changePlaybackRate: (rate: number) => void;\n /** Set the volume level (0.0 to 1.0) */\n changeVolume: (volume: number) => void;\n /** Set the muted state */\n mute: () => void;\n /** Pause the media */\n pause: () => void;\n /** Start playing the media */\n play: () => Promise<void>;\n /** Seek to a specific time in seconds */\n seek: (time: number) => void;\n /** Toggle between play and pause */\n toggle: () => Promise<void>;\n /** Set the unmuted state */\n unmute: () => void;\n}\n\nexport interface UseMediaControls {\n (target: HookTarget, src: string): UseMediaControlsReturn;\n\n (target: HookTarget, options: UseMediaSource): UseMediaControlsReturn;\n\n <Target extends HTMLMediaElement>(\n src: string\n ): UseMediaControlsReturn & {\n ref: StateRef<Target>;\n };\n\n <Target extends HTMLMediaElement>(\n options: UseMediaSource\n ): UseMediaControlsReturn & { ref: StateRef<Target> };\n}\n\n/**\n * @name useMediaControls\n * @description Hook that provides controls for HTML media elements (audio/video)\n * @category Browser\n *\n * @overload\n * @param {HookTarget} target The target media element\n * @param {string} src The source URL of the media\n * @returns {UseMediaControlsReturn} An object containing media controls and state\n *\n * @example\n * const { playing, play, pause } = useMediaControls(videoRef, 'video.mp4');\n *\n * @overload\n * @param {HookTarget} target The target media element\n * @param {UseMediaSource} options The media source configuration\n * @returns {UseMediaControlsReturn} An object containing media controls and state\n *\n * @example\n * const { playing, play, pause } = useMediaControls(audioRef, { src: 'audio.mp3', type: 'audio/mp3' });\n *\n * @overload\n * @template Target The target media element type\n * @param {string} src The source URL of the media\n * @returns {UseMediaControlsReturn & { ref: StateRef<Target> }} An object containing media controls, state and ref\n *\n * @example\n * const { ref, playing, play, pause } = useMediaControls<HTMLVideoElement>('video.mp4');\n *\n * @overload\n * @template Target The target media element type\n * @param {UseMediaSource} options The media source configuration\n * @returns {UseMediaControlsReturn & { ref: StateRef<Target> }} An object containing media controls, state and ref\n *\n * @example\n * const { ref, playing, play, pause } = useMediaControls<HTMLVideoElement>({ src: 'video.mp4', type: 'video/mp4' });\n */\nexport const useMediaControls = ((...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 : { src: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { src: params[0] }\n ) as UseMediaSource;\n\n const internalRef = useRefState<HTMLMediaElement>();\n const elementRef = useRef<HTMLMediaElement | null>(null);\n\n const [playing, setPlaying] = useState(false);\n const [duration, setDuration] = useState(0);\n const [currentTime, setCurrentTime] = useState(0);\n const [seeking, setSeeking] = useState(false);\n const [waiting, setWaiting] = useState(false);\n const [buffered, setBuffered] = useState<[number, number][]>([]);\n const [stalled, setStalled] = useState(false);\n const [ended, setEnded] = useState(false);\n const [playbackRate, setPlaybackRateState] = useState(1);\n\n const [muted, setMutedState] = useState(false);\n const [volume, setVolumeState] = useState(1);\n\n useEffect(() => {\n const element = (target ? getElement(target) : internalRef.current) as HTMLMediaElement;\n\n if (!element) return;\n\n elementRef.current = element;\n element.src = options.src;\n\n if (options.type) element.setAttribute('type', options.type);\n if (options.media) element.setAttribute('media', options.media);\n\n setDuration(element.duration);\n setCurrentTime(element.currentTime);\n setPlaying(false);\n setEnded(element.ended);\n setMutedState(element.muted);\n setVolumeState(element.volume);\n setPlaybackRateState(element.playbackRate);\n\n const onPlaying = () => {\n setPlaying(true);\n setStalled(false);\n };\n const onPause = () => setPlaying(false);\n const onWaiting = () => setWaiting(true);\n const onStalled = () => setStalled(true);\n const onSeeking = () => setSeeking(true);\n const onSeeked = () => setSeeking(false);\n const onEnded = () => {\n setPlaying(false);\n setEnded(true);\n };\n const onDurationChange = () => setDuration(element.duration);\n const onTimeUpdate = () => setCurrentTime(element.currentTime);\n const onVolumechange = () => {\n setMutedState(element.muted);\n setVolumeState(element.volume);\n };\n const onRatechange = () => setPlaybackRateState(element.playbackRate);\n const onProgress = () => setBuffered(timeRangeToArray(element.buffered));\n\n element.addEventListener('playing', onPlaying);\n element.addEventListener('pause', onPause);\n element.addEventListener('waiting', onWaiting);\n element.addEventListener('progress', onProgress);\n element.addEventListener('stalled', onStalled);\n element.addEventListener('seeking', onSeeking);\n element.addEventListener('seeked', onSeeked);\n element.addEventListener('ended', onEnded);\n element.addEventListener('loadedmetadata', onDurationChange);\n element.addEventListener('timeupdate', onTimeUpdate);\n element.addEventListener('volumechange', onVolumechange);\n element.addEventListener('ratechange', onRatechange);\n\n return () => {\n element.removeEventListener('playing', onPlaying);\n element.removeEventListener('pause', onPause);\n element.removeEventListener('waiting', onWaiting);\n element.removeEventListener('progress', onProgress);\n element.removeEventListener('stalled', onStalled);\n element.removeEventListener('seeking', onSeeking);\n element.removeEventListener('seeked', onSeeked);\n element.removeEventListener('ended', onEnded);\n element.removeEventListener('loadedmetadata', onDurationChange);\n element.removeEventListener('timeupdate', onTimeUpdate);\n element.removeEventListener('volumechange', onVolumechange);\n element.removeEventListener('ratechange', onRatechange);\n };\n }, [target, internalRef.state]);\n\n const play = async () => {\n const element = elementRef.current;\n if (!element) return;\n\n await element.play();\n };\n\n const pause = () => {\n if (!elementRef.current) return;\n elementRef.current.pause();\n };\n\n const toggle = async () => {\n if (playing) return pause();\n return play();\n };\n\n const seek = (time: number) => {\n if (!elementRef.current) return;\n elementRef.current.currentTime = Math.min(Math.max(time, 0), duration);\n };\n\n const changeVolume = (value: number) => {\n if (!elementRef.current) return;\n elementRef.current.volume = Math.min(Math.max(value, 0), 1);\n };\n\n const mute = () => {\n if (!elementRef.current) return;\n elementRef.current.muted = true;\n };\n\n const unmute = () => {\n if (!elementRef.current) return;\n elementRef.current.muted = false;\n };\n\n const changePlaybackRate = (value: number) => {\n if (!elementRef.current) return;\n elementRef.current.playbackRate = value;\n };\n\n return {\n playing,\n duration,\n currentTime,\n seeking,\n waiting,\n buffered,\n stalled,\n ended,\n playbackRate,\n muted,\n volume,\n\n play,\n pause,\n toggle,\n seek,\n changeVolume,\n mute,\n unmute,\n changePlaybackRate,\n\n ...(!target && { ref: internalRef })\n };\n}) as UseMediaControls;\n"],"names":["timeRangeToArray","timeRanges","ranges","i","useMediaControls","params","target","isTarget","options","internalRef","useRefState","elementRef","useRef","playing","setPlaying","useState","duration","setDuration","currentTime","setCurrentTime","seeking","setSeeking","waiting","setWaiting","buffered","setBuffered","stalled","setStalled","ended","setEnded","playbackRate","setPlaybackRateState","muted","setMutedState","volume","setVolumeState","useEffect","element","getElement","onPlaying","onPause","onWaiting","onStalled","onSeeking","onSeeked","onEnded","onDurationChange","onTimeUpdate","onVolumechange","onRatechange","onProgress","play","pause","time","value"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react"),v=require("../useRefState/useRefState.cjs"),g=require("../../utils/helpers/isTarget.cjs"),m=require("../../utils/helpers/getElement.cjs"),I=(...n)=>{const t=g.isTarget(n[0])?n[0]:void 0,r=(t?n[1]:n[0])??{},[a,u]=i.useState(!1),f=v.useRefState(),c=i.useRef(null),o=i.useRef(r);o.current=r;const s=typeof document<"u"&&"pictureInPictureEnabled"in document,l=async()=>{s&&c.current&&(await c.current.requestPictureInPicture(),u(!0),r.onEnter?.())},d=async()=>{s&&(await document.exitPictureInPicture(),u(!1),r.onExit?.())};i.useEffect(()=>{const e=t?m.getElement(t):f.current;if(!e)return;c.current=e;const P=()=>{u(!0),o.current.onEnter?.()},E=()=>{u(!1),o.current.onExit?.()};return e.addEventListener("enterpictureinpicture",P),e.addEventListener("leavepictureinpicture",E),()=>{e.removeEventListener("enterpictureinpicture",P),e.removeEventListener("leavepictureinpicture",E)}},[t]);const p={open:a,supported:s,enter:l,exit:d,toggle:async()=>{a?await d():await l()}};return t?p:{...p,ref:f}};exports.usePictureInPicture=I;
2
+ //# sourceMappingURL=usePictureInPicture.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePictureInPicture.cjs","sources":["../../../../src/hooks/usePictureInPicture/usePictureInPicture.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 use picture in picture options type */\nexport interface UsePictureInPictureOptions {\n /** The callback when Picture-in-Picture mode is entered */\n onEnter?: () => void;\n /** The callback when Picture-in-Picture mode is exited */\n onExit?: () => void;\n}\n\n/** The use picture in picture return type */\nexport interface UsePictureInPictureReturn {\n /** Whether Picture-in-Picture mode is currently active */\n open: boolean;\n /** Whether Picture-in-Picture mode is supported by the browser */\n supported: boolean;\n /** Request to enter Picture-in-Picture mode */\n enter: () => Promise<void>;\n /** Request to exit Picture-in-Picture mode */\n exit: () => Promise<void>;\n /** Toggle Picture-in-Picture mode */\n toggle: () => Promise<void>;\n}\n\nexport interface UsePictureInPicture {\n (target: HookTarget, options?: UsePictureInPictureOptions): UsePictureInPictureReturn;\n\n (options?: UsePictureInPictureOptions): UsePictureInPictureReturn & {\n ref: StateRef<HTMLVideoElement>;\n };\n}\n\n/**\n * @name usePictureInPicture\n * @description - Hook that provides Picture-in-Picture functionality for video elements\n * @category Browser\n *\n * @browserapi window.PictureInPicture https://developer.mozilla.org/en-US/docs/Web/API/Picture-in-Picture_API\n *\n * @overload\n * @param {HookTarget} target The target video element\n * @param {() => void} [options.onEnter] Callback when Picture-in-Picture mode is entered\n * @param {() => void} [options.onExit] Callback when Picture-in-Picture mode is exited\n * @returns {UsePictureInPictureReturn} An object containing Picture-in-Picture state and controls\n *\n * @example\n * const { open, supported, enter, exit, toggle } = usePictureInPicture(videoRef);\n *\n * @overload\n * @param {() => void} [options.onEnter] Callback when Picture-in-Picture mode is entered\n * @param {() => void} [options.onExit] Callback when Picture-in-Picture mode is exited\n * @returns {UsePictureInPictureReturn & { ref: StateRef<HTMLVideoElement> }} An object containing Picture-in-Picture state, controls and ref\n *\n * @example\n * const { ref, open, supported, enter, exit, toggle } = usePictureInPicture();\n */\nexport const usePictureInPicture = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = ((target ? params[1] : params[0]) as UsePictureInPictureOptions) ?? {};\n\n const [open, setOpen] = useState(false);\n\n const internalRef = useRefState<HTMLVideoElement>();\n const elementRef = useRef<HTMLVideoElement>(null);\n const onOptionsRef = useRef<UsePictureInPictureOptions>(options);\n onOptionsRef.current = options;\n\n const supported = typeof document !== 'undefined' && 'pictureInPictureEnabled' in document;\n\n const enter = async () => {\n if (!supported) return;\n\n if (!elementRef.current) return;\n\n await elementRef.current.requestPictureInPicture();\n setOpen(true);\n\n options.onEnter?.();\n };\n\n const exit = async () => {\n if (!supported) return;\n\n await document.exitPictureInPicture();\n setOpen(false);\n options.onExit?.();\n };\n\n useEffect(() => {\n const element = target ? (getElement(target) as HTMLVideoElement) : internalRef.current;\n if (!element) return;\n\n elementRef.current = element;\n\n const onEnterPictureInPicture = () => {\n setOpen(true);\n onOptionsRef.current.onEnter?.();\n };\n\n const onLeavePictureInPicture = () => {\n setOpen(false);\n onOptionsRef.current.onExit?.();\n };\n\n element.addEventListener('enterpictureinpicture', onEnterPictureInPicture);\n element.addEventListener('leavepictureinpicture', onLeavePictureInPicture);\n\n return () => {\n element.removeEventListener('enterpictureinpicture', onEnterPictureInPicture);\n element.removeEventListener('leavepictureinpicture', onLeavePictureInPicture);\n };\n }, [target]);\n\n const toggle = async () => {\n if (open) await exit();\n else await enter();\n };\n\n const value = {\n open,\n supported,\n enter,\n exit,\n toggle\n };\n\n if (target) return value;\n return { ...value, ref: internalRef };\n}) as UsePictureInPicture;\n"],"names":["usePictureInPicture","params","target","isTarget","options","open","setOpen","useState","internalRef","useRefState","elementRef","useRef","onOptionsRef","supported","enter","exit","useEffect","element","getElement","onEnterPictureInPicture","onLeavePictureInPicture","value"],"mappings":"mPAgEaA,EAAuB,IAAIC,IAAkB,CACxD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,GAAYF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,IAAqC,CAAA,EAE9E,CAACI,EAAMC,CAAO,EAAIC,EAAAA,SAAS,EAAK,EAEhCC,EAAcC,EAAAA,YAAA,EACdC,EAAaC,EAAAA,OAAyB,IAAI,EAC1CC,EAAeD,EAAAA,OAAmCP,CAAO,EAC/DQ,EAAa,QAAUR,EAEvB,MAAMS,EAAY,OAAO,SAAa,KAAe,4BAA6B,SAE5EC,EAAQ,SAAY,CACnBD,GAEAH,EAAW,UAEhB,MAAMA,EAAW,QAAQ,wBAAA,EACzBJ,EAAQ,EAAI,EAEZF,EAAQ,UAAA,EAAU,EAGdW,EAAO,SAAY,CAClBF,IAEL,MAAM,SAAS,qBAAA,EACfP,EAAQ,EAAK,EACbF,EAAQ,SAAA,EAAS,EAGnBY,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAUf,EAAUgB,EAAAA,WAAWhB,CAAM,EAAyBM,EAAY,QAChF,GAAI,CAACS,EAAS,OAEdP,EAAW,QAAUO,EAErB,MAAME,EAA0B,IAAM,CACpCb,EAAQ,EAAI,EACZM,EAAa,QAAQ,UAAA,CAAU,EAG3BQ,EAA0B,IAAM,CACpCd,EAAQ,EAAK,EACbM,EAAa,QAAQ,SAAA,CAAS,EAGhC,OAAAK,EAAQ,iBAAiB,wBAAyBE,CAAuB,EACzEF,EAAQ,iBAAiB,wBAAyBG,CAAuB,EAElE,IAAM,CACXH,EAAQ,oBAAoB,wBAAyBE,CAAuB,EAC5EF,EAAQ,oBAAoB,wBAAyBG,CAAuB,CAAA,CAC9E,EACC,CAAClB,CAAM,CAAC,EAOX,MAAMmB,EAAQ,CACZ,KAAAhB,EACA,UAAAQ,EACA,MAAAC,EACA,KAAAC,EACA,OAVa,SAAY,CACrBV,QAAYU,EAAA,QACLD,EAAA,CAAM,CAQjB,EAGF,OAAIZ,EAAemB,EACZ,CAAE,GAAGA,EAAO,IAAKb,CAAA,CAC1B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useShallowEffect.cjs","sources":["../../../../src/hooks/useShallowEffect/useShallowEffect.ts"],"sourcesContent":["import type { DependencyList, EffectCallback } from 'react';\n\nimport { useEffect, useRef } from 'react';\n\nexport const deepEqual = (a: any, b: any): boolean => {\n if (a === b) return true;\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (typeof a !== 'object') return a === b;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n if (Array.isArray(a))\n return a.length === b.length && a.every((value, index) => deepEqual(value, b[index]));\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n};\n\n/**\n * @name useShallowEffect\n * @description - Hook that executes an effect only when dependencies change shallowly or deeply.\n * @category Lifecycle\n *\n * @param {EffectCallback} effect The effect callback\n * @param {DependencyList} [deps] The dependencies list for the effect\n *\n * @example\n * useShallowEffect(() => console.log(\"effect\"), [user]);\n */\nexport const useShallowEffect = (effect: EffectCallback, deps?: DependencyList) => {\n const depsRef = useRef<DependencyList>(deps);\n\n if (!depsRef.current || !deepEqual(deps, depsRef.current)) {\n depsRef.current = deps;\n }\n\n useEffect(effect, depsRef.current);\n};\n"],"names":["deepEqual","a","b","value","index","keysA","keysB","key","useShallowEffect","effect","deps","depsRef","useRef","useEffect"],"mappings":"yGAIaA,EAAY,CAACC,EAAQC,IAAoB,CACpD,GAAID,IAAMC,EAAG,MAAO,GACpB,GAAID,GAAK,MAAQC,GAAK,YAAaD,IAAMC,EACzC,GAAI,OAAOD,GAAM,OAAOC,EAAG,MAAO,GAClC,GAAI,OAAOD,GAAM,SAAU,OAAOA,IAAMC,EACxC,GAAI,MAAM,QAAQD,CAAC,IAAM,MAAM,QAAQC,CAAC,EAAG,MAAO,GAElD,GAAI,MAAM,QAAQD,CAAC,EACjB,OAAOA,EAAE,SAAWC,EAAE,QAAUD,EAAE,MAAM,CAACE,EAAOC,IAAUJ,EAAUG,EAAOD,EAAEE,CAAK,CAAC,CAAC,EAEtF,MAAMC,EAAQ,OAAO,KAAKJ,CAAC,EACrBK,EAAQ,OAAO,KAAKJ,CAAC,EAE3B,GAAIG,EAAM,SAAWC,EAAM,OAAQ,MAAO,GAE1C,UAAWC,KAAOF,EAEhB,GADI,CAACC,EAAM,SAASC,CAAG,GACnB,CAACP,EAAUC,EAAEM,CAAG,EAAGL,EAAEK,CAAG,CAAC,EAAG,MAAO,GAGzC,MAAO,EACT,EAaaC,EAAmB,CAACC,EAAwBC,IAA0B,CACjF,MAAMC,EAAUC,EAAAA,OAAuBF,CAAI,GAEvC,CAACC,EAAQ,SAAW,CAACX,EAAUU,EAAMC,EAAQ,OAAO,KACtDA,EAAQ,QAAUD,GAGpBG,YAAUJ,EAAQE,EAAQ,OAAO,CACnC"}
1
+ {"version":3,"file":"useShallowEffect.cjs","sources":["../../../../src/hooks/useShallowEffect/useShallowEffect.ts"],"sourcesContent":["import type { DependencyList, EffectCallback } from 'react';\n\nimport { useEffect, useRef } from 'react';\n\nexport const deepEqual = (a: any, b: any): boolean => {\n if (a === b) return true;\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (typeof a !== 'object') return a === b;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n if (Array.isArray(a))\n return a.length === b.length && a.every((value, index) => deepEqual(value, b[index]));\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n};\n\n/**\n * @name useShallowEffect\n * @description - Hook that executes an effect only when dependencies change shallowly or deeply\n * @category Lifecycle\n *\n * @param {EffectCallback} effect The effect callback\n * @param {DependencyList} [deps] The dependencies list for the effect\n *\n * @example\n * useShallowEffect(() => console.log(\"effect\"), [user]);\n */\nexport const useShallowEffect = (effect: EffectCallback, deps?: DependencyList) => {\n const depsRef = useRef<DependencyList>(deps);\n\n if (!depsRef.current || !deepEqual(deps, depsRef.current)) {\n depsRef.current = deps;\n }\n\n useEffect(effect, depsRef.current);\n};\n"],"names":["deepEqual","a","b","value","index","keysA","keysB","key","useShallowEffect","effect","deps","depsRef","useRef","useEffect"],"mappings":"yGAIaA,EAAY,CAACC,EAAQC,IAAoB,CACpD,GAAID,IAAMC,EAAG,MAAO,GACpB,GAAID,GAAK,MAAQC,GAAK,YAAaD,IAAMC,EACzC,GAAI,OAAOD,GAAM,OAAOC,EAAG,MAAO,GAClC,GAAI,OAAOD,GAAM,SAAU,OAAOA,IAAMC,EACxC,GAAI,MAAM,QAAQD,CAAC,IAAM,MAAM,QAAQC,CAAC,EAAG,MAAO,GAElD,GAAI,MAAM,QAAQD,CAAC,EACjB,OAAOA,EAAE,SAAWC,EAAE,QAAUD,EAAE,MAAM,CAACE,EAAOC,IAAUJ,EAAUG,EAAOD,EAAEE,CAAK,CAAC,CAAC,EAEtF,MAAMC,EAAQ,OAAO,KAAKJ,CAAC,EACrBK,EAAQ,OAAO,KAAKJ,CAAC,EAE3B,GAAIG,EAAM,SAAWC,EAAM,OAAQ,MAAO,GAE1C,UAAWC,KAAOF,EAEhB,GADI,CAACC,EAAM,SAASC,CAAG,GACnB,CAACP,EAAUC,EAAEM,CAAG,EAAGL,EAAEK,CAAG,CAAC,EAAG,MAAO,GAGzC,MAAO,EACT,EAaaC,EAAmB,CAACC,EAAwBC,IAA0B,CACjF,MAAMC,EAAUC,EAAAA,OAAuBF,CAAI,GAEvC,CAACC,EAAQ,SAAW,CAACX,EAAUU,EAAMC,EAAQ,OAAO,KACtDA,EAAQ,QAAUD,GAGpBG,YAAUJ,EAAQE,EAAQ,OAAO,CACnC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const R=require("./helpers/createContext/createContext.cjs"),p=require("./helpers/createEventEmitter/createEventEmitter.cjs"),y=require("./helpers/createReactiveContext/createReactiveContext.cjs"),O=require("./helpers/createStore/createStore.cjs"),v=require("./hooks/useActiveElement/useActiveElement.cjs"),I=require("./hooks/useAsync/useAsync.cjs"),k=require("./hooks/useBattery/useBattery.cjs"),D=require("./hooks/useBluetooth/useBluetooth.cjs"),h=require("./hooks/useBoolean/useBoolean.cjs"),e=require("./hooks/useBreakpoints/useBreakpoints.cjs"),A=require("./hooks/useBrowserLanguage/useBrowserLanguage.cjs"),L=require("./hooks/useClickOutside/useClickOutside.cjs"),b=require("./hooks/useClipboard/useClipboard.cjs"),f=require("./hooks/useConst/useConst.cjs"),s=require("./hooks/useCookie/useCookie.cjs"),i=require("./hooks/useCookies/useCookies.cjs"),M=require("./hooks/useCopy/useCopy.cjs"),_=require("./hooks/useCounter/useCounter.cjs"),N=require("./hooks/useCssVar/useCssVar.cjs"),B=require("./hooks/useDebounceCallback/useDebounceCallback.cjs"),F=require("./hooks/useDebounceValue/useDebounceValue.cjs"),K=require("./hooks/useDefault/useDefault.cjs"),V=require("./hooks/useDeviceMotion/useDeviceMotion.cjs"),U=require("./hooks/useDeviceOrientation/useDeviceOrientation.cjs"),w=require("./hooks/useDevicePixelRatio/useDevicePixelRatio.cjs"),W=require("./hooks/useDidUpdate/useDidUpdate.cjs"),H=require("./hooks/useDisclosure/useDisclosure.cjs"),x=require("./hooks/useDisplayMedia/useDisplayMedia.cjs"),Q=require("./hooks/useDocumentEvent/useDocumentEvent.cjs"),z=require("./hooks/useDocumentTitle/useDocumentTitle.cjs"),G=require("./hooks/useDocumentVisibility/useDocumentVisibility.cjs"),n=require("./hooks/useDoubleClick/useDoubleClick.cjs"),X=require("./hooks/useDropZone/useDropZone.cjs"),Z=require("./hooks/useElementSize/useElementSize.cjs"),j=require("./hooks/useEvent/useEvent.cjs"),J=require("./hooks/useEventListener/useEventListener.cjs"),Y=require("./hooks/useEventSource/useEventSource.cjs"),$=require("./hooks/useEyeDropper/useEyeDropper.cjs"),ee=require("./hooks/useFavicon/useFavicon.cjs"),se=require("./hooks/useField/useField.cjs"),ue=require("./hooks/useFileDialog/useFileDialog.cjs"),re=require("./hooks/useFocus/useFocus.cjs"),te=require("./hooks/useFps/useFps.cjs"),oe=require("./hooks/useFul/useFul.cjs"),ie=require("./hooks/useFullscreen/useFullscreen.cjs"),c=require("./hooks/useGamepad/useGamepad.cjs"),ne=require("./hooks/useGeolocation/useGeolocation.cjs"),ce=require("./hooks/useHash/useHash.cjs"),a=require("./hooks/useHotkeys/useHotkeys.cjs"),ae=require("./hooks/useHover/useHover.cjs"),le=require("./hooks/useIdle/useIdle.cjs"),Se=require("./hooks/useImage/useImage.cjs"),qe=require("./hooks/useInfiniteScroll/useInfiniteScroll.cjs"),Ee=require("./hooks/useIntersectionObserver/useIntersectionObserver.cjs"),de=require("./hooks/useInterval/useInterval.cjs"),ge=require("./hooks/useIsFirstRender/useIsFirstRender.cjs"),Te=require("./hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),Pe=require("./hooks/useKeyboard/useKeyboard.cjs"),me=require("./hooks/useKeyPress/useKeyPress.cjs"),Ce=require("./hooks/useKeyPressEvent/useKeyPressEvent.cjs"),Re=require("./hooks/useKeysPressed/useKeysPressed.cjs"),pe=require("./hooks/useLastChanged/useLastChanged.cjs"),ye=require("./hooks/useLatest/useLatest.cjs"),Oe=require("./hooks/useLess/useLess.cjs"),ve=require("./hooks/useList/useList.cjs"),Ie=require("./hooks/useLocalStorage/useLocalStorage.cjs"),ke=require("./hooks/useLockCallback/useLockCallback.cjs"),De=require("./hooks/useLogger/useLogger.cjs"),he=require("./hooks/useLongPress/useLongPress.cjs"),Ae=require("./hooks/useMap/useMap.cjs"),Le=require("./hooks/useMeasure/useMeasure.cjs"),be=require("./hooks/useMediaQuery/useMediaQuery.cjs"),fe=require("./hooks/useMemory/useMemory.cjs"),Me=require("./hooks/useMount/useMount.cjs"),_e=require("./hooks/useMouse/useMouse.cjs"),Ne=require("./hooks/useMutation/useMutation.cjs"),Be=require("./hooks/useMutationObserver/useMutationObserver.cjs"),l=require("./hooks/useNetwork/useNetwork.cjs"),Fe=require("./hooks/useOffsetPagination/useOffsetPagination.cjs"),Ke=require("./hooks/useOnce/useOnce.cjs"),Ve=require("./hooks/useOnline/useOnline.cjs"),S=require("./hooks/useOperatingSystem/useOperatingSystem.cjs"),Ue=require("./hooks/useOptimistic/useOptimistic.cjs"),we=require("./hooks/useOrientation/useOrientation.cjs"),We=require("./hooks/useOtpCredential/useOtpCredential.cjs"),He=require("./hooks/usePageLeave/usePageLeave.cjs"),r=require("./hooks/usePaint/usePaint.cjs"),xe=require("./hooks/useParallax/useParallax.cjs"),Qe=require("./hooks/usePerformanceObserver/usePerformanceObserver.cjs"),ze=require("./hooks/usePermission/usePermission.cjs"),Ge=require("./hooks/usePointerLock/usePointerLock.cjs"),Xe=require("./hooks/usePostMessage/usePostMessage.cjs"),Ze=require("./hooks/usePreferredColorScheme/usePreferredColorScheme.cjs"),je=require("./hooks/usePreferredContrast/usePreferredContrast.cjs"),Je=require("./hooks/usePreferredDark/usePreferredDark.cjs"),Ye=require("./hooks/usePreferredLanguages/usePreferredLanguages.cjs"),$e=require("./hooks/usePreferredReducedMotion/usePreferredReducedMotion.cjs"),es=require("./hooks/usePrevious/usePrevious.cjs"),ss=require("./hooks/useQuery/useQuery.cjs"),us=require("./hooks/useQueue/useQueue.cjs"),rs=require("./hooks/useRaf/useRaf.cjs"),ts=require("./hooks/useRafValue/useRafValue.cjs"),os=require("./hooks/useRefState/useRefState.cjs"),is=require("./hooks/useRenderCount/useRenderCount.cjs"),ns=require("./hooks/useRenderInfo/useRenderInfo.cjs"),cs=require("./hooks/useRerender/useRerender.cjs"),as=require("./hooks/useResizeObserver/useResizeObserver.cjs"),ls=require("./hooks/useScreenOrientation/useScreenOrientation.cjs"),q=require("./hooks/useScript/useScript.cjs"),Ss=require("./hooks/useScroll/useScroll.cjs"),qs=require("./hooks/useScrollIntoView/useScrollIntoView.cjs"),Es=require("./hooks/useScrollTo/useScrollTo.cjs"),ds=require("./hooks/useSessionStorage/useSessionStorage.cjs"),gs=require("./hooks/useSet/useSet.cjs"),E=require("./hooks/useShallowEffect/useShallowEffect.cjs"),Ts=require("./hooks/useShare/useShare.cjs"),d=require("./hooks/useSpeechRecognition/useSpeechRecognition.cjs"),Ps=require("./hooks/useSpeechSynthesis/useSpeechSynthesis.cjs"),g=require("./hooks/useStateHistory/useStateHistory.cjs"),ms=require("./hooks/useStep/useStep.cjs"),Cs=require("./hooks/useSticky/useSticky.cjs"),Rs=require("./hooks/useStopwatch/useStopwatch.cjs"),t=require("./hooks/useStorage/useStorage.cjs"),ps=require("./hooks/useTextDirection/useTextDirection.cjs"),T=require("./hooks/useTextSelection/useTextSelection.cjs"),ys=require("./hooks/useThrottleCallback/useThrottleCallback.cjs"),Os=require("./hooks/useThrottleValue/useThrottleValue.cjs"),vs=require("./hooks/useTime/useTime.cjs"),Is=require("./hooks/useTimeout/useTimeout.cjs"),P=require("./hooks/useTimer/useTimer.cjs"),ks=require("./hooks/useToggle/useToggle.cjs"),Ds=require("./hooks/useUnmount/useUnmount.cjs"),u=require("./hooks/useUrlSearchParam/useUrlSearchParam.cjs"),hs=require("./hooks/useUrlSearchParams/useUrlSearchParams.cjs"),As=require("./hooks/useVibrate/useVibrate.cjs"),Ls=require("./hooks/useWakeLock/useWakeLock.cjs"),bs=require("./hooks/useWebSocket/useWebSocket.cjs"),fs=require("./hooks/useWindowEvent/useWindowEvent.cjs"),Ms=require("./hooks/useWindowFocus/useWindowFocus.cjs"),m=require("./hooks/useWindowScroll/useWindowScroll.cjs"),_s=require("./hooks/useWindowSize/useWindowSize.cjs"),Ns=require("./hooks/useWizard/useWizard.cjs"),C=require("./utils/helpers/copy.cjs"),Bs=require("./utils/helpers/debounce.cjs"),Fs=require("./utils/helpers/getDate.cjs"),o=require("./utils/helpers/getElement.cjs"),Ks=require("./utils/helpers/getRetry.cjs"),Vs=require("./utils/helpers/isTarget.cjs"),Us=require("./utils/helpers/throttle.cjs");exports.createContext=R.createContext;exports.createEventEmitter=p.createEventEmitter;exports.createReactiveContext=y.createReactiveContext;exports.createStore=O.createStore;exports.useActiveElement=v.useActiveElement;exports.useAsync=I.useAsync;exports.useBattery=k.useBattery;exports.useBluetooth=D.useBluetooth;exports.useBoolean=h.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.useBrowserLanguage=A.useBrowserLanguage;exports.useClickOutside=L.useClickOutside;exports.useClipboard=b.useClipboard;exports.useConst=f.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=M.useCopy;exports.useCounter=_.useCounter;exports.useCssVar=N.useCssVar;exports.useDebounceCallback=B.useDebounceCallback;exports.useDebounceValue=F.useDebounceValue;exports.useDefault=K.useDefault;exports.useDeviceMotion=V.useDeviceMotion;exports.useDeviceOrientation=U.useDeviceOrientation;exports.useDevicePixelRatio=w.useDevicePixelRatio;exports.useDidUpdate=W.useDidUpdate;exports.useDisclosure=H.useDisclosure;exports.useDisplayMedia=x.useDisplayMedia;exports.useDocumentEvent=Q.useDocumentEvent;exports.useDocumentTitle=z.useDocumentTitle;exports.useDocumentVisibility=G.useDocumentVisibility;exports.DEFAULT_THRESHOLD_TIME=n.DEFAULT_THRESHOLD_TIME;exports.useDoubleClick=n.useDoubleClick;exports.useDropZone=X.useDropZone;exports.useElementSize=Z.useElementSize;exports.useEvent=j.useEvent;exports.useEventListener=J.useEventListener;exports.useEventSource=Y.useEventSource;exports.useEyeDropper=$.useEyeDropper;exports.useFavicon=ee.useFavicon;exports.useField=se.useField;exports.useFileDialog=ue.useFileDialog;exports.useFocus=re.useFocus;exports.useFps=te.useFps;exports.useFul=oe.useFul;exports.useFullscreen=ie.useFullscreen;exports.mapGamepadToXbox360Controller=c.mapGamepadToXbox360Controller;exports.useGamepad=c.useGamepad;exports.useGeolocation=ne.useGeolocation;exports.useHash=ce.useHash;exports.isHotkeyMatch=a.isHotkeyMatch;exports.useHotkeys=a.useHotkeys;exports.useHover=ae.useHover;exports.useIdle=le.useIdle;exports.useImage=Se.useImage;exports.useInfiniteScroll=qe.useInfiniteScroll;exports.useIntersectionObserver=Ee.useIntersectionObserver;exports.useInterval=de.useInterval;exports.useIsFirstRender=ge.useIsFirstRender;exports.useIsomorphicLayoutEffect=Te.useIsomorphicLayoutEffect;exports.useKeyboard=Pe.useKeyboard;exports.useKeyPress=me.useKeyPress;exports.useKeyPressEvent=Ce.useKeyPressEvent;exports.useKeysPressed=Re.useKeysPressed;exports.useLastChanged=pe.useLastChanged;exports.useLatest=ye.useLatest;exports.useLess=Oe.useLess;exports.useList=ve.useList;exports.useLocalStorage=Ie.useLocalStorage;exports.useLockCallback=ke.useLockCallback;exports.useLogger=De.useLogger;exports.useLongPress=he.useLongPress;exports.useMap=Ae.useMap;exports.useMeasure=Le.useMeasure;exports.useMediaQuery=be.useMediaQuery;exports.useMemory=fe.useMemory;exports.useMount=Me.useMount;exports.useMouse=_e.useMouse;exports.useMutation=Ne.useMutation;exports.useMutationObserver=Be.useMutationObserver;exports.getConnection=l.getConnection;exports.useNetwork=l.useNetwork;exports.useOffsetPagination=Fe.useOffsetPagination;exports.useOnce=Ke.useOnce;exports.useOnline=Ve.useOnline;exports.getOperatingSystem=S.getOperatingSystem;exports.useOperatingSystem=S.useOperatingSystem;exports.useOptimistic=Ue.useOptimistic;exports.useOrientation=we.useOrientation;exports.useOtpCredential=We.useOtpCredential;exports.usePageLeave=He.usePageLeave;exports.Paint=r.Paint;exports.Pointer=r.Pointer;exports.usePaint=r.usePaint;exports.useParallax=xe.useParallax;exports.usePerformanceObserver=Qe.usePerformanceObserver;exports.usePermission=ze.usePermission;exports.usePointerLock=Ge.usePointerLock;exports.usePostMessage=Xe.usePostMessage;exports.usePreferredColorScheme=Ze.usePreferredColorScheme;exports.usePreferredContrast=je.usePreferredContrast;exports.usePreferredDark=Je.usePreferredDark;exports.usePreferredLanguages=Ye.usePreferredLanguages;exports.usePreferredReducedMotion=$e.usePreferredReducedMotion;exports.usePrevious=es.usePrevious;exports.useQuery=ss.useQuery;exports.useQueue=us.useQueue;exports.useRaf=rs.useRaf;exports.useRafValue=ts.useRafValue;exports.useRefState=os.useRefState;exports.useRenderCount=is.useRenderCount;exports.useRenderInfo=ns.useRenderInfo;exports.useRerender=cs.useRerender;exports.useResizeObserver=as.useResizeObserver;exports.useScreenOrientation=ls.useScreenOrientation;exports.SCRIPT_STATUS_ATTRIBUTE_NAME=q.SCRIPT_STATUS_ATTRIBUTE_NAME;exports.useScript=q.useScript;exports.useScroll=Ss.useScroll;exports.useScrollIntoView=qs.useScrollIntoView;exports.useScrollTo=Es.useScrollTo;exports.useSessionStorage=ds.useSessionStorage;exports.useSet=gs.useSet;exports.deepEqual=E.deepEqual;exports.useShallowEffect=E.useShallowEffect;exports.useShare=Ts.useShare;exports.getSpeechRecognition=d.getSpeechRecognition;exports.useSpeechRecognition=d.useSpeechRecognition;exports.useSpeechSynthesis=Ps.useSpeechSynthesis;exports.stateHistoryReducer=g.stateHistoryReducer;exports.useStateHistory=g.useStateHistory;exports.useStep=ms.useStep;exports.useSticky=Cs.useSticky;exports.useStopwatch=Rs.useStopwatch;exports.STORAGE_EVENT=t.STORAGE_EVENT;exports.dispatchStorageEvent=t.dispatchStorageEvent;exports.useStorage=t.useStorage;exports.useTextDirection=ps.useTextDirection;exports.getRangesSelection=T.getRangesSelection;exports.useTextSelection=T.useTextSelection;exports.useThrottleCallback=ys.useThrottleCallback;exports.useThrottleValue=Os.useThrottleValue;exports.useTime=vs.useTime;exports.useTimeout=Is.useTimeout;exports.getTimeFromSeconds=P.getTimeFromSeconds;exports.useTimer=P.useTimer;exports.useToggle=ks.useToggle;exports.useUnmount=Ds.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=hs.useUrlSearchParams;exports.useVibrate=As.useVibrate;exports.useWakeLock=Ls.useWakeLock;exports.useWebSocket=bs.useWebSocket;exports.useWindowEvent=fs.useWindowEvent;exports.useWindowFocus=Ms.useWindowFocus;exports.scrollTo=m.scrollTo;exports.useWindowScroll=m.useWindowScroll;exports.useWindowSize=_s.useWindowSize;exports.useWizard=Ns.useWizard;exports.copy=C.copy;exports.legacyCopyToClipboard=C.legacyCopyToClipboard;exports.debounce=Bs.debounce;exports.getDate=Fs.getDate;exports.getElement=o.getElement;exports.target=o.target;exports.targetSymbol=o.targetSymbol;exports.getRetry=Ks.getRetry;exports.isTarget=Vs.isTarget;exports.throttle=Us.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"),D=require("./hooks/useBattery/useBattery.cjs"),h=require("./hooks/useBluetooth/useBluetooth.cjs"),M=require("./hooks/useBoolean/useBoolean.cjs"),e=require("./hooks/useBreakpoints/useBreakpoints.cjs"),L=require("./hooks/useBrowserLanguage/useBrowserLanguage.cjs"),b=require("./hooks/useClickOutside/useClickOutside.cjs"),f=require("./hooks/useClipboard/useClipboard.cjs"),_=require("./hooks/useConst/useConst.cjs"),s=require("./hooks/useCookie/useCookie.cjs"),i=require("./hooks/useCookies/useCookies.cjs"),N=require("./hooks/useCopy/useCopy.cjs"),B=require("./hooks/useCounter/useCounter.cjs"),F=require("./hooks/useCssVar/useCssVar.cjs"),K=require("./hooks/useDebounceCallback/useDebounceCallback.cjs"),V=require("./hooks/useDebounceValue/useDebounceValue.cjs"),U=require("./hooks/useDefault/useDefault.cjs"),w=require("./hooks/useDeviceMotion/useDeviceMotion.cjs"),W=require("./hooks/useDeviceOrientation/useDeviceOrientation.cjs"),H=require("./hooks/useDevicePixelRatio/useDevicePixelRatio.cjs"),x=require("./hooks/useDidUpdate/useDidUpdate.cjs"),Q=require("./hooks/useDisclosure/useDisclosure.cjs"),z=require("./hooks/useDisplayMedia/useDisplayMedia.cjs"),G=require("./hooks/useDocumentEvent/useDocumentEvent.cjs"),X=require("./hooks/useDocumentTitle/useDocumentTitle.cjs"),Z=require("./hooks/useDocumentVisibility/useDocumentVisibility.cjs"),n=require("./hooks/useDoubleClick/useDoubleClick.cjs"),j=require("./hooks/useDropZone/useDropZone.cjs"),J=require("./hooks/useElementSize/useElementSize.cjs"),Y=require("./hooks/useEvent/useEvent.cjs"),$=require("./hooks/useEventListener/useEventListener.cjs"),ee=require("./hooks/useEventSource/useEventSource.cjs"),se=require("./hooks/useEyeDropper/useEyeDropper.cjs"),ue=require("./hooks/useFavicon/useFavicon.cjs"),re=require("./hooks/useField/useField.cjs"),te=require("./hooks/useFileDialog/useFileDialog.cjs"),oe=require("./hooks/useFocus/useFocus.cjs"),ie=require("./hooks/useFps/useFps.cjs"),ne=require("./hooks/useFul/useFul.cjs"),ce=require("./hooks/useFullscreen/useFullscreen.cjs"),c=require("./hooks/useGamepad/useGamepad.cjs"),ae=require("./hooks/useGeolocation/useGeolocation.cjs"),le=require("./hooks/useHash/useHash.cjs"),a=require("./hooks/useHotkeys/useHotkeys.cjs"),Se=require("./hooks/useHover/useHover.cjs"),qe=require("./hooks/useIdle/useIdle.cjs"),de=require("./hooks/useImage/useImage.cjs"),Ee=require("./hooks/useInfiniteScroll/useInfiniteScroll.cjs"),ge=require("./hooks/useIntersectionObserver/useIntersectionObserver.cjs"),Pe=require("./hooks/useInterval/useInterval.cjs"),Te=require("./hooks/useIsFirstRender/useIsFirstRender.cjs"),Ce=require("./hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),me=require("./hooks/useKeyboard/useKeyboard.cjs"),Re=require("./hooks/useKeyPress/useKeyPress.cjs"),pe=require("./hooks/useKeyPressEvent/useKeyPressEvent.cjs"),ye=require("./hooks/useKeysPressed/useKeysPressed.cjs"),Ie=require("./hooks/useLastChanged/useLastChanged.cjs"),Oe=require("./hooks/useLatest/useLatest.cjs"),ve=require("./hooks/useLess/useLess.cjs"),ke=require("./hooks/useList/useList.cjs"),Ae=require("./hooks/useLocalStorage/useLocalStorage.cjs"),De=require("./hooks/useLockCallback/useLockCallback.cjs"),he=require("./hooks/useLogger/useLogger.cjs"),Me=require("./hooks/useLongPress/useLongPress.cjs"),Le=require("./hooks/useMap/useMap.cjs"),be=require("./hooks/useMeasure/useMeasure.cjs"),l=require("./hooks/useMediaControls/useMediaControls.cjs"),fe=require("./hooks/useMediaQuery/useMediaQuery.cjs"),_e=require("./hooks/useMemory/useMemory.cjs"),Ne=require("./hooks/useMount/useMount.cjs"),Be=require("./hooks/useMouse/useMouse.cjs"),Fe=require("./hooks/useMutation/useMutation.cjs"),Ke=require("./hooks/useMutationObserver/useMutationObserver.cjs"),S=require("./hooks/useNetwork/useNetwork.cjs"),Ve=require("./hooks/useOffsetPagination/useOffsetPagination.cjs"),Ue=require("./hooks/useOnce/useOnce.cjs"),we=require("./hooks/useOnline/useOnline.cjs"),q=require("./hooks/useOperatingSystem/useOperatingSystem.cjs"),We=require("./hooks/useOptimistic/useOptimistic.cjs"),He=require("./hooks/useOrientation/useOrientation.cjs"),xe=require("./hooks/useOtpCredential/useOtpCredential.cjs"),Qe=require("./hooks/usePageLeave/usePageLeave.cjs"),r=require("./hooks/usePaint/usePaint.cjs"),ze=require("./hooks/useParallax/useParallax.cjs"),Ge=require("./hooks/usePerformanceObserver/usePerformanceObserver.cjs"),Xe=require("./hooks/usePermission/usePermission.cjs"),Ze=require("./hooks/usePictureInPicture/usePictureInPicture.cjs"),je=require("./hooks/usePointerLock/usePointerLock.cjs"),Je=require("./hooks/usePostMessage/usePostMessage.cjs"),Ye=require("./hooks/usePreferredColorScheme/usePreferredColorScheme.cjs"),$e=require("./hooks/usePreferredContrast/usePreferredContrast.cjs"),es=require("./hooks/usePreferredDark/usePreferredDark.cjs"),ss=require("./hooks/usePreferredLanguages/usePreferredLanguages.cjs"),us=require("./hooks/usePreferredReducedMotion/usePreferredReducedMotion.cjs"),rs=require("./hooks/usePrevious/usePrevious.cjs"),ts=require("./hooks/useQuery/useQuery.cjs"),os=require("./hooks/useQueue/useQueue.cjs"),is=require("./hooks/useRaf/useRaf.cjs"),ns=require("./hooks/useRafValue/useRafValue.cjs"),cs=require("./hooks/useRefState/useRefState.cjs"),as=require("./hooks/useRenderCount/useRenderCount.cjs"),ls=require("./hooks/useRenderInfo/useRenderInfo.cjs"),Ss=require("./hooks/useRerender/useRerender.cjs"),qs=require("./hooks/useResizeObserver/useResizeObserver.cjs"),ds=require("./hooks/useScreenOrientation/useScreenOrientation.cjs"),d=require("./hooks/useScript/useScript.cjs"),Es=require("./hooks/useScroll/useScroll.cjs"),gs=require("./hooks/useScrollIntoView/useScrollIntoView.cjs"),Ps=require("./hooks/useScrollTo/useScrollTo.cjs"),Ts=require("./hooks/useSessionStorage/useSessionStorage.cjs"),Cs=require("./hooks/useSet/useSet.cjs"),E=require("./hooks/useShallowEffect/useShallowEffect.cjs"),ms=require("./hooks/useShare/useShare.cjs"),g=require("./hooks/useSpeechRecognition/useSpeechRecognition.cjs"),Rs=require("./hooks/useSpeechSynthesis/useSpeechSynthesis.cjs"),P=require("./hooks/useStateHistory/useStateHistory.cjs"),ps=require("./hooks/useStep/useStep.cjs"),ys=require("./hooks/useSticky/useSticky.cjs"),Is=require("./hooks/useStopwatch/useStopwatch.cjs"),t=require("./hooks/useStorage/useStorage.cjs"),Os=require("./hooks/useTextDirection/useTextDirection.cjs"),T=require("./hooks/useTextSelection/useTextSelection.cjs"),vs=require("./hooks/useThrottleCallback/useThrottleCallback.cjs"),ks=require("./hooks/useThrottleValue/useThrottleValue.cjs"),As=require("./hooks/useTime/useTime.cjs"),Ds=require("./hooks/useTimeout/useTimeout.cjs"),C=require("./hooks/useTimer/useTimer.cjs"),hs=require("./hooks/useToggle/useToggle.cjs"),Ms=require("./hooks/useUnmount/useUnmount.cjs"),u=require("./hooks/useUrlSearchParam/useUrlSearchParam.cjs"),Ls=require("./hooks/useUrlSearchParams/useUrlSearchParams.cjs"),bs=require("./hooks/useVibrate/useVibrate.cjs"),fs=require("./hooks/useWakeLock/useWakeLock.cjs"),_s=require("./hooks/useWebSocket/useWebSocket.cjs"),Ns=require("./hooks/useWindowEvent/useWindowEvent.cjs"),Bs=require("./hooks/useWindowFocus/useWindowFocus.cjs"),m=require("./hooks/useWindowScroll/useWindowScroll.cjs"),Fs=require("./hooks/useWindowSize/useWindowSize.cjs"),Ks=require("./hooks/useWizard/useWizard.cjs"),R=require("./utils/helpers/copy.cjs"),Vs=require("./utils/helpers/debounce.cjs"),Us=require("./utils/helpers/getDate.cjs"),o=require("./utils/helpers/getElement.cjs"),ws=require("./utils/helpers/getRetry.cjs"),Ws=require("./utils/helpers/isTarget.cjs"),Hs=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.useBattery=D.useBattery;exports.useBluetooth=h.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.useBrowserLanguage=L.useBrowserLanguage;exports.useClickOutside=b.useClickOutside;exports.useClipboard=f.useClipboard;exports.useConst=_.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=N.useCopy;exports.useCounter=B.useCounter;exports.useCssVar=F.useCssVar;exports.useDebounceCallback=K.useDebounceCallback;exports.useDebounceValue=V.useDebounceValue;exports.useDefault=U.useDefault;exports.useDeviceMotion=w.useDeviceMotion;exports.useDeviceOrientation=W.useDeviceOrientation;exports.useDevicePixelRatio=H.useDevicePixelRatio;exports.useDidUpdate=x.useDidUpdate;exports.useDisclosure=Q.useDisclosure;exports.useDisplayMedia=z.useDisplayMedia;exports.useDocumentEvent=G.useDocumentEvent;exports.useDocumentTitle=X.useDocumentTitle;exports.useDocumentVisibility=Z.useDocumentVisibility;exports.DEFAULT_THRESHOLD_TIME=n.DEFAULT_THRESHOLD_TIME;exports.useDoubleClick=n.useDoubleClick;exports.useDropZone=j.useDropZone;exports.useElementSize=J.useElementSize;exports.useEvent=Y.useEvent;exports.useEventListener=$.useEventListener;exports.useEventSource=ee.useEventSource;exports.useEyeDropper=se.useEyeDropper;exports.useFavicon=ue.useFavicon;exports.useField=re.useField;exports.useFileDialog=te.useFileDialog;exports.useFocus=oe.useFocus;exports.useFps=ie.useFps;exports.useFul=ne.useFul;exports.useFullscreen=ce.useFullscreen;exports.mapGamepadToXbox360Controller=c.mapGamepadToXbox360Controller;exports.useGamepad=c.useGamepad;exports.useGeolocation=ae.useGeolocation;exports.useHash=le.useHash;exports.isHotkeyMatch=a.isHotkeyMatch;exports.useHotkeys=a.useHotkeys;exports.useHover=Se.useHover;exports.useIdle=qe.useIdle;exports.useImage=de.useImage;exports.useInfiniteScroll=Ee.useInfiniteScroll;exports.useIntersectionObserver=ge.useIntersectionObserver;exports.useInterval=Pe.useInterval;exports.useIsFirstRender=Te.useIsFirstRender;exports.useIsomorphicLayoutEffect=Ce.useIsomorphicLayoutEffect;exports.useKeyboard=me.useKeyboard;exports.useKeyPress=Re.useKeyPress;exports.useKeyPressEvent=pe.useKeyPressEvent;exports.useKeysPressed=ye.useKeysPressed;exports.useLastChanged=Ie.useLastChanged;exports.useLatest=Oe.useLatest;exports.useLess=ve.useLess;exports.useList=ke.useList;exports.useLocalStorage=Ae.useLocalStorage;exports.useLockCallback=De.useLockCallback;exports.useLogger=he.useLogger;exports.useLongPress=Me.useLongPress;exports.useMap=Le.useMap;exports.useMeasure=be.useMeasure;exports.timeRangeToArray=l.timeRangeToArray;exports.useMediaControls=l.useMediaControls;exports.useMediaQuery=fe.useMediaQuery;exports.useMemory=_e.useMemory;exports.useMount=Ne.useMount;exports.useMouse=Be.useMouse;exports.useMutation=Fe.useMutation;exports.useMutationObserver=Ke.useMutationObserver;exports.getConnection=S.getConnection;exports.useNetwork=S.useNetwork;exports.useOffsetPagination=Ve.useOffsetPagination;exports.useOnce=Ue.useOnce;exports.useOnline=we.useOnline;exports.getOperatingSystem=q.getOperatingSystem;exports.useOperatingSystem=q.useOperatingSystem;exports.useOptimistic=We.useOptimistic;exports.useOrientation=He.useOrientation;exports.useOtpCredential=xe.useOtpCredential;exports.usePageLeave=Qe.usePageLeave;exports.Paint=r.Paint;exports.Pointer=r.Pointer;exports.usePaint=r.usePaint;exports.useParallax=ze.useParallax;exports.usePerformanceObserver=Ge.usePerformanceObserver;exports.usePermission=Xe.usePermission;exports.usePictureInPicture=Ze.usePictureInPicture;exports.usePointerLock=je.usePointerLock;exports.usePostMessage=Je.usePostMessage;exports.usePreferredColorScheme=Ye.usePreferredColorScheme;exports.usePreferredContrast=$e.usePreferredContrast;exports.usePreferredDark=es.usePreferredDark;exports.usePreferredLanguages=ss.usePreferredLanguages;exports.usePreferredReducedMotion=us.usePreferredReducedMotion;exports.usePrevious=rs.usePrevious;exports.useQuery=ts.useQuery;exports.useQueue=os.useQueue;exports.useRaf=is.useRaf;exports.useRafValue=ns.useRafValue;exports.useRefState=cs.useRefState;exports.useRenderCount=as.useRenderCount;exports.useRenderInfo=ls.useRenderInfo;exports.useRerender=Ss.useRerender;exports.useResizeObserver=qs.useResizeObserver;exports.useScreenOrientation=ds.useScreenOrientation;exports.SCRIPT_STATUS_ATTRIBUTE_NAME=d.SCRIPT_STATUS_ATTRIBUTE_NAME;exports.useScript=d.useScript;exports.useScroll=Es.useScroll;exports.useScrollIntoView=gs.useScrollIntoView;exports.useScrollTo=Ps.useScrollTo;exports.useSessionStorage=Ts.useSessionStorage;exports.useSet=Cs.useSet;exports.deepEqual=E.deepEqual;exports.useShallowEffect=E.useShallowEffect;exports.useShare=ms.useShare;exports.getSpeechRecognition=g.getSpeechRecognition;exports.useSpeechRecognition=g.useSpeechRecognition;exports.useSpeechSynthesis=Rs.useSpeechSynthesis;exports.stateHistoryReducer=P.stateHistoryReducer;exports.useStateHistory=P.useStateHistory;exports.useStep=ps.useStep;exports.useSticky=ys.useSticky;exports.useStopwatch=Is.useStopwatch;exports.STORAGE_EVENT=t.STORAGE_EVENT;exports.dispatchStorageEvent=t.dispatchStorageEvent;exports.useStorage=t.useStorage;exports.useTextDirection=Os.useTextDirection;exports.getRangesSelection=T.getRangesSelection;exports.useTextSelection=T.useTextSelection;exports.useThrottleCallback=vs.useThrottleCallback;exports.useThrottleValue=ks.useThrottleValue;exports.useTime=As.useTime;exports.useTimeout=Ds.useTimeout;exports.getTimeFromSeconds=C.getTimeFromSeconds;exports.useTimer=C.useTimer;exports.useToggle=hs.useToggle;exports.useUnmount=Ms.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=Ls.useUrlSearchParams;exports.useVibrate=bs.useVibrate;exports.useWakeLock=fs.useWakeLock;exports.useWebSocket=_s.useWebSocket;exports.useWindowEvent=Ns.useWindowEvent;exports.useWindowFocus=Bs.useWindowFocus;exports.scrollTo=m.scrollTo;exports.useWindowScroll=m.useWindowScroll;exports.useWindowSize=Fs.useWindowSize;exports.useWizard=Ks.useWizard;exports.copy=R.copy;exports.legacyCopyToClipboard=R.legacyCopyToClipboard;exports.debounce=Vs.debounce;exports.getDate=Us.getDate;exports.getElement=o.getElement;exports.target=o.target;exports.targetSymbol=o.targetSymbol;exports.getRetry=ws.getRetry;exports.isTarget=Ws.isTarget;exports.throttle=Hs.throttle;
2
2
  //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,50 @@
1
+ import { useState as o, useRef as h, useEffect as L } from "react";
2
+ const w = (i, r = {}) => {
3
+ const [l, c] = o(!1), [m, d] = o(r.volume ?? 1), [v, p] = o(r.playbackRate ?? 1), t = h(null);
4
+ L(() => {
5
+ const e = new Audio(i);
6
+ e.volume = m, e.playbackRate = v, t.current = e, r.immediately && e.play();
7
+ const n = () => c(!0), u = () => c(!1), a = () => c(!1), y = () => {
8
+ }, f = () => d(e.volume), E = () => p(e.playbackRate);
9
+ return e.addEventListener("play", n), e.addEventListener("pause", u), e.addEventListener("ended", a), e.addEventListener("timeupdate", y), e.addEventListener("volumechange", f), e.addEventListener("ratechange", E), () => {
10
+ e.removeEventListener("play", n), e.removeEventListener("pause", u), e.removeEventListener("ended", a), e.removeEventListener("timeupdate", y), e.removeEventListener("volumechange", f), e.removeEventListener("ratechange", E), e.pause(), e.remove();
11
+ };
12
+ }, [i]);
13
+ const s = () => {
14
+ t.current && (t.current.pause(), t.current.currentTime = 0);
15
+ };
16
+ return {
17
+ play: async (e) => {
18
+ if (!t.current) return;
19
+ if (r.interrupt && s(), !e || !r.sprite?.[e]) {
20
+ await t.current.play();
21
+ return;
22
+ }
23
+ const [n, u] = r.sprite[e];
24
+ t.current.currentTime = n, await t.current.play();
25
+ const a = () => {
26
+ t.current && (t.current.currentTime >= u && s(), l && requestAnimationFrame(a));
27
+ };
28
+ requestAnimationFrame(a);
29
+ },
30
+ pause: () => t.current?.pause(),
31
+ stop: s,
32
+ playing: l,
33
+ setVolume: (e) => {
34
+ if (!t.current) return;
35
+ const n = Math.max(0, Math.min(1, e));
36
+ t.current.volume = n, d(n);
37
+ },
38
+ volume: m,
39
+ changePlaybackRate: (e) => {
40
+ if (!t.current) return;
41
+ const n = Math.max(0.5, Math.min(2, e));
42
+ t.current.playbackRate = n, p(n);
43
+ },
44
+ playbackRate: v
45
+ };
46
+ };
47
+ export {
48
+ w as useAudio
49
+ };
50
+ //# sourceMappingURL=useAudio.mjs.map
@@ -0,0 +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;"}
@@ -0,0 +1,70 @@
1
+ import { useRef as I, useState as r, useEffect as J } from "react";
2
+ import { useRefState as K } from "../useRefState/useRefState.mjs";
3
+ import { isTarget as N } from "../../utils/helpers/isTarget.mjs";
4
+ import { getElement as O } from "../../utils/helpers/getElement.mjs";
5
+ const Q = (n) => {
6
+ let a = [];
7
+ for (let s = 0; s < n.length; ++s)
8
+ a = [...a, [n.start(s), n.end(s)]];
9
+ return a;
10
+ }, ae = (...n) => {
11
+ const a = N(n[0]) ? n[0] : void 0, s = a ? typeof n[1] == "object" ? n[1] : { src: n[1] } : typeof n[0] == "object" ? n[0] : { src: n[0] }, i = K(), t = I(null), [c, o] = r(!1), [u, d] = r(0), [C, l] = r(0), [j, m] = r(!1), [D, W] = r(!1), [B, U] = r([]), [q, f] = r(!1), [z, v] = r(!1), [F, g] = r(1), [G, E] = r(!1), [H, L] = r(1);
12
+ J(() => {
13
+ const e = a ? O(a) : i.current;
14
+ if (!e) return;
15
+ t.current = e, e.src = s.src, s.type && e.setAttribute("type", s.type), s.media && e.setAttribute("media", s.media), d(e.duration), l(e.currentTime), o(!1), v(e.ended), E(e.muted), L(e.volume), g(e.playbackRate);
16
+ const k = () => {
17
+ o(!0), f(!1);
18
+ }, h = () => o(!1), b = () => W(!0), R = () => f(!0), S = () => m(!0), T = () => m(!1), P = () => {
19
+ o(!1), v(!0);
20
+ }, M = () => d(e.duration), w = () => l(e.currentTime), V = () => {
21
+ E(e.muted), L(e.volume);
22
+ }, x = () => g(e.playbackRate), A = () => U(Q(e.buffered));
23
+ return e.addEventListener("playing", k), e.addEventListener("pause", h), e.addEventListener("waiting", b), e.addEventListener("progress", A), e.addEventListener("stalled", R), e.addEventListener("seeking", S), e.addEventListener("seeked", T), e.addEventListener("ended", P), e.addEventListener("loadedmetadata", M), e.addEventListener("timeupdate", w), e.addEventListener("volumechange", V), e.addEventListener("ratechange", x), () => {
24
+ e.removeEventListener("playing", k), e.removeEventListener("pause", h), e.removeEventListener("waiting", b), e.removeEventListener("progress", A), e.removeEventListener("stalled", R), e.removeEventListener("seeking", S), e.removeEventListener("seeked", T), e.removeEventListener("ended", P), e.removeEventListener("loadedmetadata", M), e.removeEventListener("timeupdate", w), e.removeEventListener("volumechange", V), e.removeEventListener("ratechange", x);
25
+ };
26
+ }, [a, i.state]);
27
+ const p = async () => {
28
+ const e = t.current;
29
+ e && await e.play();
30
+ }, y = () => {
31
+ t.current && t.current.pause();
32
+ };
33
+ return {
34
+ playing: c,
35
+ duration: u,
36
+ currentTime: C,
37
+ seeking: j,
38
+ waiting: D,
39
+ buffered: B,
40
+ stalled: q,
41
+ ended: z,
42
+ playbackRate: F,
43
+ muted: G,
44
+ volume: H,
45
+ play: p,
46
+ pause: y,
47
+ toggle: async () => c ? y() : p(),
48
+ seek: (e) => {
49
+ t.current && (t.current.currentTime = Math.min(Math.max(e, 0), u));
50
+ },
51
+ changeVolume: (e) => {
52
+ t.current && (t.current.volume = Math.min(Math.max(e, 0), 1));
53
+ },
54
+ mute: () => {
55
+ t.current && (t.current.muted = !0);
56
+ },
57
+ unmute: () => {
58
+ t.current && (t.current.muted = !1);
59
+ },
60
+ changePlaybackRate: (e) => {
61
+ t.current && (t.current.playbackRate = e);
62
+ },
63
+ ...!a && { ref: i }
64
+ };
65
+ };
66
+ export {
67
+ Q as timeRangeToArray,
68
+ ae as useMediaControls
69
+ };
70
+ //# sourceMappingURL=useMediaControls.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMediaControls.mjs","sources":["../../../../src/hooks/useMediaControls/useMediaControls.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport const timeRangeToArray = (timeRanges: TimeRanges) => {\n let ranges: [number, number][] = [];\n\n for (let i = 0; i < timeRanges.length; ++i)\n ranges = [...ranges, [timeRanges.start(i), timeRanges.end(i)]];\n\n return ranges;\n};\n\n/** The media source configuration type */\nexport interface UseMediaSource {\n /** The media attribute of the media */\n media?: string;\n /** The source URL of the media */\n src: string;\n /** The MIME type of the media */\n type?: string;\n}\n\n/** The media controls return type */\nexport interface UseMediaControlsReturn {\n /** Whether the media is currently buffering */\n buffered: [number, number][];\n /** The current playback position in seconds */\n currentTime: number;\n /** The total duration of the media in seconds */\n duration: number;\n /** Whether the media has ended */\n ended: boolean;\n /** Whether the media is currently muted */\n muted: boolean;\n /** The current playback rate (1.0 is normal speed) */\n playbackRate: number;\n /** Whether the media is currently playing */\n playing: boolean;\n /** Whether the media is currently seeking */\n seeking: boolean;\n /** Whether the media is currently stalled */\n stalled: boolean;\n /** The current volume level (0.0 to 1.0) */\n volume: number;\n /** Whether the media is currently waiting */\n waiting: boolean;\n\n /** Set the playback rate */\n changePlaybackRate: (rate: number) => void;\n /** Set the volume level (0.0 to 1.0) */\n changeVolume: (volume: number) => void;\n /** Set the muted state */\n mute: () => void;\n /** Pause the media */\n pause: () => void;\n /** Start playing the media */\n play: () => Promise<void>;\n /** Seek to a specific time in seconds */\n seek: (time: number) => void;\n /** Toggle between play and pause */\n toggle: () => Promise<void>;\n /** Set the unmuted state */\n unmute: () => void;\n}\n\nexport interface UseMediaControls {\n (target: HookTarget, src: string): UseMediaControlsReturn;\n\n (target: HookTarget, options: UseMediaSource): UseMediaControlsReturn;\n\n <Target extends HTMLMediaElement>(\n src: string\n ): UseMediaControlsReturn & {\n ref: StateRef<Target>;\n };\n\n <Target extends HTMLMediaElement>(\n options: UseMediaSource\n ): UseMediaControlsReturn & { ref: StateRef<Target> };\n}\n\n/**\n * @name useMediaControls\n * @description Hook that provides controls for HTML media elements (audio/video)\n * @category Browser\n *\n * @overload\n * @param {HookTarget} target The target media element\n * @param {string} src The source URL of the media\n * @returns {UseMediaControlsReturn} An object containing media controls and state\n *\n * @example\n * const { playing, play, pause } = useMediaControls(videoRef, 'video.mp4');\n *\n * @overload\n * @param {HookTarget} target The target media element\n * @param {UseMediaSource} options The media source configuration\n * @returns {UseMediaControlsReturn} An object containing media controls and state\n *\n * @example\n * const { playing, play, pause } = useMediaControls(audioRef, { src: 'audio.mp3', type: 'audio/mp3' });\n *\n * @overload\n * @template Target The target media element type\n * @param {string} src The source URL of the media\n * @returns {UseMediaControlsReturn & { ref: StateRef<Target> }} An object containing media controls, state and ref\n *\n * @example\n * const { ref, playing, play, pause } = useMediaControls<HTMLVideoElement>('video.mp4');\n *\n * @overload\n * @template Target The target media element type\n * @param {UseMediaSource} options The media source configuration\n * @returns {UseMediaControlsReturn & { ref: StateRef<Target> }} An object containing media controls, state and ref\n *\n * @example\n * const { ref, playing, play, pause } = useMediaControls<HTMLVideoElement>({ src: 'video.mp4', type: 'video/mp4' });\n */\nexport const useMediaControls = ((...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 : { src: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { src: params[0] }\n ) as UseMediaSource;\n\n const internalRef = useRefState<HTMLMediaElement>();\n const elementRef = useRef<HTMLMediaElement | null>(null);\n\n const [playing, setPlaying] = useState(false);\n const [duration, setDuration] = useState(0);\n const [currentTime, setCurrentTime] = useState(0);\n const [seeking, setSeeking] = useState(false);\n const [waiting, setWaiting] = useState(false);\n const [buffered, setBuffered] = useState<[number, number][]>([]);\n const [stalled, setStalled] = useState(false);\n const [ended, setEnded] = useState(false);\n const [playbackRate, setPlaybackRateState] = useState(1);\n\n const [muted, setMutedState] = useState(false);\n const [volume, setVolumeState] = useState(1);\n\n useEffect(() => {\n const element = (target ? getElement(target) : internalRef.current) as HTMLMediaElement;\n\n if (!element) return;\n\n elementRef.current = element;\n element.src = options.src;\n\n if (options.type) element.setAttribute('type', options.type);\n if (options.media) element.setAttribute('media', options.media);\n\n setDuration(element.duration);\n setCurrentTime(element.currentTime);\n setPlaying(false);\n setEnded(element.ended);\n setMutedState(element.muted);\n setVolumeState(element.volume);\n setPlaybackRateState(element.playbackRate);\n\n const onPlaying = () => {\n setPlaying(true);\n setStalled(false);\n };\n const onPause = () => setPlaying(false);\n const onWaiting = () => setWaiting(true);\n const onStalled = () => setStalled(true);\n const onSeeking = () => setSeeking(true);\n const onSeeked = () => setSeeking(false);\n const onEnded = () => {\n setPlaying(false);\n setEnded(true);\n };\n const onDurationChange = () => setDuration(element.duration);\n const onTimeUpdate = () => setCurrentTime(element.currentTime);\n const onVolumechange = () => {\n setMutedState(element.muted);\n setVolumeState(element.volume);\n };\n const onRatechange = () => setPlaybackRateState(element.playbackRate);\n const onProgress = () => setBuffered(timeRangeToArray(element.buffered));\n\n element.addEventListener('playing', onPlaying);\n element.addEventListener('pause', onPause);\n element.addEventListener('waiting', onWaiting);\n element.addEventListener('progress', onProgress);\n element.addEventListener('stalled', onStalled);\n element.addEventListener('seeking', onSeeking);\n element.addEventListener('seeked', onSeeked);\n element.addEventListener('ended', onEnded);\n element.addEventListener('loadedmetadata', onDurationChange);\n element.addEventListener('timeupdate', onTimeUpdate);\n element.addEventListener('volumechange', onVolumechange);\n element.addEventListener('ratechange', onRatechange);\n\n return () => {\n element.removeEventListener('playing', onPlaying);\n element.removeEventListener('pause', onPause);\n element.removeEventListener('waiting', onWaiting);\n element.removeEventListener('progress', onProgress);\n element.removeEventListener('stalled', onStalled);\n element.removeEventListener('seeking', onSeeking);\n element.removeEventListener('seeked', onSeeked);\n element.removeEventListener('ended', onEnded);\n element.removeEventListener('loadedmetadata', onDurationChange);\n element.removeEventListener('timeupdate', onTimeUpdate);\n element.removeEventListener('volumechange', onVolumechange);\n element.removeEventListener('ratechange', onRatechange);\n };\n }, [target, internalRef.state]);\n\n const play = async () => {\n const element = elementRef.current;\n if (!element) return;\n\n await element.play();\n };\n\n const pause = () => {\n if (!elementRef.current) return;\n elementRef.current.pause();\n };\n\n const toggle = async () => {\n if (playing) return pause();\n return play();\n };\n\n const seek = (time: number) => {\n if (!elementRef.current) return;\n elementRef.current.currentTime = Math.min(Math.max(time, 0), duration);\n };\n\n const changeVolume = (value: number) => {\n if (!elementRef.current) return;\n elementRef.current.volume = Math.min(Math.max(value, 0), 1);\n };\n\n const mute = () => {\n if (!elementRef.current) return;\n elementRef.current.muted = true;\n };\n\n const unmute = () => {\n if (!elementRef.current) return;\n elementRef.current.muted = false;\n };\n\n const changePlaybackRate = (value: number) => {\n if (!elementRef.current) return;\n elementRef.current.playbackRate = value;\n };\n\n return {\n playing,\n duration,\n currentTime,\n seeking,\n waiting,\n buffered,\n stalled,\n ended,\n playbackRate,\n muted,\n volume,\n\n play,\n pause,\n toggle,\n seek,\n changeVolume,\n mute,\n unmute,\n changePlaybackRate,\n\n ...(!target && { ref: internalRef })\n };\n}) as UseMediaControls;\n"],"names":["timeRangeToArray","timeRanges","ranges","i","useMediaControls","params","target","isTarget","options","internalRef","useRefState","elementRef","useRef","playing","setPlaying","useState","duration","setDuration","currentTime","setCurrentTime","seeking","setSeeking","waiting","setWaiting","buffered","setBuffered","stalled","setStalled","ended","setEnded","playbackRate","setPlaybackRateState","muted","setMutedState","volume","setVolumeState","useEffect","element","getElement","onPlaying","onPause","onWaiting","onStalled","onSeeking","onSeeked","onEnded","onDurationChange","onTimeUpdate","onVolumechange","onRatechange","onProgress","play","pause","time","value"],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ import { useState as v, useRef as E, useEffect as P } from "react";
2
+ import { useRefState as g } from "../useRefState/useRefState.mjs";
3
+ import { isTarget as I } from "../../utils/helpers/isTarget.mjs";
4
+ import { getElement as x } from "../../utils/helpers/getElement.mjs";
5
+ const S = (...n) => {
6
+ const t = I(n[0]) ? n[0] : void 0, r = (t ? n[1] : n[0]) ?? {}, [s, i] = v(!1), f = g(), c = E(null), u = E(r);
7
+ u.current = r;
8
+ const o = typeof document < "u" && "pictureInPictureEnabled" in document, a = async () => {
9
+ o && c.current && (await c.current.requestPictureInPicture(), i(!0), r.onEnter?.());
10
+ }, p = async () => {
11
+ o && (await document.exitPictureInPicture(), i(!1), r.onExit?.());
12
+ };
13
+ P(() => {
14
+ const e = t ? x(t) : f.current;
15
+ if (!e) return;
16
+ c.current = e;
17
+ const m = () => {
18
+ i(!0), u.current.onEnter?.();
19
+ }, d = () => {
20
+ i(!1), u.current.onExit?.();
21
+ };
22
+ return e.addEventListener("enterpictureinpicture", m), e.addEventListener("leavepictureinpicture", d), () => {
23
+ e.removeEventListener("enterpictureinpicture", m), e.removeEventListener("leavepictureinpicture", d);
24
+ };
25
+ }, [t]);
26
+ const l = {
27
+ open: s,
28
+ supported: o,
29
+ enter: a,
30
+ exit: p,
31
+ toggle: async () => {
32
+ s ? await p() : await a();
33
+ }
34
+ };
35
+ return t ? l : { ...l, ref: f };
36
+ };
37
+ export {
38
+ S as usePictureInPicture
39
+ };
40
+ //# sourceMappingURL=usePictureInPicture.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePictureInPicture.mjs","sources":["../../../../src/hooks/usePictureInPicture/usePictureInPicture.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 use picture in picture options type */\nexport interface UsePictureInPictureOptions {\n /** The callback when Picture-in-Picture mode is entered */\n onEnter?: () => void;\n /** The callback when Picture-in-Picture mode is exited */\n onExit?: () => void;\n}\n\n/** The use picture in picture return type */\nexport interface UsePictureInPictureReturn {\n /** Whether Picture-in-Picture mode is currently active */\n open: boolean;\n /** Whether Picture-in-Picture mode is supported by the browser */\n supported: boolean;\n /** Request to enter Picture-in-Picture mode */\n enter: () => Promise<void>;\n /** Request to exit Picture-in-Picture mode */\n exit: () => Promise<void>;\n /** Toggle Picture-in-Picture mode */\n toggle: () => Promise<void>;\n}\n\nexport interface UsePictureInPicture {\n (target: HookTarget, options?: UsePictureInPictureOptions): UsePictureInPictureReturn;\n\n (options?: UsePictureInPictureOptions): UsePictureInPictureReturn & {\n ref: StateRef<HTMLVideoElement>;\n };\n}\n\n/**\n * @name usePictureInPicture\n * @description - Hook that provides Picture-in-Picture functionality for video elements\n * @category Browser\n *\n * @browserapi window.PictureInPicture https://developer.mozilla.org/en-US/docs/Web/API/Picture-in-Picture_API\n *\n * @overload\n * @param {HookTarget} target The target video element\n * @param {() => void} [options.onEnter] Callback when Picture-in-Picture mode is entered\n * @param {() => void} [options.onExit] Callback when Picture-in-Picture mode is exited\n * @returns {UsePictureInPictureReturn} An object containing Picture-in-Picture state and controls\n *\n * @example\n * const { open, supported, enter, exit, toggle } = usePictureInPicture(videoRef);\n *\n * @overload\n * @param {() => void} [options.onEnter] Callback when Picture-in-Picture mode is entered\n * @param {() => void} [options.onExit] Callback when Picture-in-Picture mode is exited\n * @returns {UsePictureInPictureReturn & { ref: StateRef<HTMLVideoElement> }} An object containing Picture-in-Picture state, controls and ref\n *\n * @example\n * const { ref, open, supported, enter, exit, toggle } = usePictureInPicture();\n */\nexport const usePictureInPicture = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = ((target ? params[1] : params[0]) as UsePictureInPictureOptions) ?? {};\n\n const [open, setOpen] = useState(false);\n\n const internalRef = useRefState<HTMLVideoElement>();\n const elementRef = useRef<HTMLVideoElement>(null);\n const onOptionsRef = useRef<UsePictureInPictureOptions>(options);\n onOptionsRef.current = options;\n\n const supported = typeof document !== 'undefined' && 'pictureInPictureEnabled' in document;\n\n const enter = async () => {\n if (!supported) return;\n\n if (!elementRef.current) return;\n\n await elementRef.current.requestPictureInPicture();\n setOpen(true);\n\n options.onEnter?.();\n };\n\n const exit = async () => {\n if (!supported) return;\n\n await document.exitPictureInPicture();\n setOpen(false);\n options.onExit?.();\n };\n\n useEffect(() => {\n const element = target ? (getElement(target) as HTMLVideoElement) : internalRef.current;\n if (!element) return;\n\n elementRef.current = element;\n\n const onEnterPictureInPicture = () => {\n setOpen(true);\n onOptionsRef.current.onEnter?.();\n };\n\n const onLeavePictureInPicture = () => {\n setOpen(false);\n onOptionsRef.current.onExit?.();\n };\n\n element.addEventListener('enterpictureinpicture', onEnterPictureInPicture);\n element.addEventListener('leavepictureinpicture', onLeavePictureInPicture);\n\n return () => {\n element.removeEventListener('enterpictureinpicture', onEnterPictureInPicture);\n element.removeEventListener('leavepictureinpicture', onLeavePictureInPicture);\n };\n }, [target]);\n\n const toggle = async () => {\n if (open) await exit();\n else await enter();\n };\n\n const value = {\n open,\n supported,\n enter,\n exit,\n toggle\n };\n\n if (target) return value;\n return { ...value, ref: internalRef };\n}) as UsePictureInPicture;\n"],"names":["usePictureInPicture","params","target","isTarget","options","open","setOpen","useState","internalRef","useRefState","elementRef","useRef","onOptionsRef","supported","enter","exit","useEffect","element","getElement","onEnterPictureInPicture","onLeavePictureInPicture","value"],"mappings":";;;;AAgEO,MAAMA,IAAuB,IAAIC,MAAkB;AACxD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,KAAYF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,MAAqC,CAAA,GAE9E,CAACI,GAAMC,CAAO,IAAIC,EAAS,EAAK,GAEhCC,IAAcC,EAAA,GACdC,IAAaC,EAAyB,IAAI,GAC1CC,IAAeD,EAAmCP,CAAO;AAC/D,EAAAQ,EAAa,UAAUR;AAEvB,QAAMS,IAAY,OAAO,WAAa,OAAe,6BAA6B,UAE5EC,IAAQ,YAAY;AACxB,IAAKD,KAEAH,EAAW,YAEhB,MAAMA,EAAW,QAAQ,wBAAA,GACzBJ,EAAQ,EAAI,GAEZF,EAAQ,UAAA;AAAA,EAAU,GAGdW,IAAO,YAAY;AACvB,IAAKF,MAEL,MAAM,SAAS,qBAAA,GACfP,EAAQ,EAAK,GACbF,EAAQ,SAAA;AAAA,EAAS;AAGnB,EAAAY,EAAU,MAAM;AACd,UAAMC,IAAUf,IAAUgB,EAAWhB,CAAM,IAAyBM,EAAY;AAChF,QAAI,CAACS,EAAS;AAEd,IAAAP,EAAW,UAAUO;AAErB,UAAME,IAA0B,MAAM;AACpC,MAAAb,EAAQ,EAAI,GACZM,EAAa,QAAQ,UAAA;AAAA,IAAU,GAG3BQ,IAA0B,MAAM;AACpC,MAAAd,EAAQ,EAAK,GACbM,EAAa,QAAQ,SAAA;AAAA,IAAS;AAGhC,WAAAK,EAAQ,iBAAiB,yBAAyBE,CAAuB,GACzEF,EAAQ,iBAAiB,yBAAyBG,CAAuB,GAElE,MAAM;AACX,MAAAH,EAAQ,oBAAoB,yBAAyBE,CAAuB,GAC5EF,EAAQ,oBAAoB,yBAAyBG,CAAuB;AAAA,IAAA;AAAA,EAC9E,GACC,CAAClB,CAAM,CAAC;AAOX,QAAMmB,IAAQ;AAAA,IACZ,MAAAhB;AAAA,IACA,WAAAQ;AAAA,IACA,OAAAC;AAAA,IACA,MAAAC;AAAA,IACA,QAVa,YAAY;AACzB,MAAIV,UAAYU,EAAA,UACLD,EAAA;AAAA,IAAM;AAAA,EAQjB;AAGF,SAAIZ,IAAemB,IACZ,EAAE,GAAGA,GAAO,KAAKb,EAAA;AAC1B;"}
@@ -1 +1 @@
1
- {"version":3,"file":"useShallowEffect.mjs","sources":["../../../../src/hooks/useShallowEffect/useShallowEffect.ts"],"sourcesContent":["import type { DependencyList, EffectCallback } from 'react';\n\nimport { useEffect, useRef } from 'react';\n\nexport const deepEqual = (a: any, b: any): boolean => {\n if (a === b) return true;\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (typeof a !== 'object') return a === b;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n if (Array.isArray(a))\n return a.length === b.length && a.every((value, index) => deepEqual(value, b[index]));\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n};\n\n/**\n * @name useShallowEffect\n * @description - Hook that executes an effect only when dependencies change shallowly or deeply.\n * @category Lifecycle\n *\n * @param {EffectCallback} effect The effect callback\n * @param {DependencyList} [deps] The dependencies list for the effect\n *\n * @example\n * useShallowEffect(() => console.log(\"effect\"), [user]);\n */\nexport const useShallowEffect = (effect: EffectCallback, deps?: DependencyList) => {\n const depsRef = useRef<DependencyList>(deps);\n\n if (!depsRef.current || !deepEqual(deps, depsRef.current)) {\n depsRef.current = deps;\n }\n\n useEffect(effect, depsRef.current);\n};\n"],"names":["deepEqual","a","b","value","index","keysA","keysB","key","useShallowEffect","effect","deps","depsRef","useRef","useEffect"],"mappings":";AAIO,MAAMA,IAAY,CAACC,GAAQC,MAAoB;AACpD,MAAID,MAAMC,EAAG,QAAO;AACpB,MAAID,KAAK,QAAQC,KAAK,aAAaD,MAAMC;AACzC,MAAI,OAAOD,KAAM,OAAOC,EAAG,QAAO;AAClC,MAAI,OAAOD,KAAM,SAAU,QAAOA,MAAMC;AACxC,MAAI,MAAM,QAAQD,CAAC,MAAM,MAAM,QAAQC,CAAC,EAAG,QAAO;AAElD,MAAI,MAAM,QAAQD,CAAC;AACjB,WAAOA,EAAE,WAAWC,EAAE,UAAUD,EAAE,MAAM,CAACE,GAAOC,MAAUJ,EAAUG,GAAOD,EAAEE,CAAK,CAAC,CAAC;AAEtF,QAAMC,IAAQ,OAAO,KAAKJ,CAAC,GACrBK,IAAQ,OAAO,KAAKJ,CAAC;AAE3B,MAAIG,EAAM,WAAWC,EAAM,OAAQ,QAAO;AAE1C,aAAWC,KAAOF;AAEhB,QADI,CAACC,EAAM,SAASC,CAAG,KACnB,CAACP,EAAUC,EAAEM,CAAG,GAAGL,EAAEK,CAAG,CAAC,EAAG,QAAO;AAGzC,SAAO;AACT,GAaaC,IAAmB,CAACC,GAAwBC,MAA0B;AACjF,QAAMC,IAAUC,EAAuBF,CAAI;AAE3C,GAAI,CAACC,EAAQ,WAAW,CAACX,EAAUU,GAAMC,EAAQ,OAAO,OACtDA,EAAQ,UAAUD,IAGpBG,EAAUJ,GAAQE,EAAQ,OAAO;AACnC;"}
1
+ {"version":3,"file":"useShallowEffect.mjs","sources":["../../../../src/hooks/useShallowEffect/useShallowEffect.ts"],"sourcesContent":["import type { DependencyList, EffectCallback } from 'react';\n\nimport { useEffect, useRef } from 'react';\n\nexport const deepEqual = (a: any, b: any): boolean => {\n if (a === b) return true;\n if (a == null || b == null) return a === b;\n if (typeof a !== typeof b) return false;\n if (typeof a !== 'object') return a === b;\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n if (Array.isArray(a))\n return a.length === b.length && a.every((value, index) => deepEqual(value, b[index]));\n\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n\n if (keysA.length !== keysB.length) return false;\n\n for (const key of keysA) {\n if (!keysB.includes(key)) return false;\n if (!deepEqual(a[key], b[key])) return false;\n }\n\n return true;\n};\n\n/**\n * @name useShallowEffect\n * @description - Hook that executes an effect only when dependencies change shallowly or deeply\n * @category Lifecycle\n *\n * @param {EffectCallback} effect The effect callback\n * @param {DependencyList} [deps] The dependencies list for the effect\n *\n * @example\n * useShallowEffect(() => console.log(\"effect\"), [user]);\n */\nexport const useShallowEffect = (effect: EffectCallback, deps?: DependencyList) => {\n const depsRef = useRef<DependencyList>(deps);\n\n if (!depsRef.current || !deepEqual(deps, depsRef.current)) {\n depsRef.current = deps;\n }\n\n useEffect(effect, depsRef.current);\n};\n"],"names":["deepEqual","a","b","value","index","keysA","keysB","key","useShallowEffect","effect","deps","depsRef","useRef","useEffect"],"mappings":";AAIO,MAAMA,IAAY,CAACC,GAAQC,MAAoB;AACpD,MAAID,MAAMC,EAAG,QAAO;AACpB,MAAID,KAAK,QAAQC,KAAK,aAAaD,MAAMC;AACzC,MAAI,OAAOD,KAAM,OAAOC,EAAG,QAAO;AAClC,MAAI,OAAOD,KAAM,SAAU,QAAOA,MAAMC;AACxC,MAAI,MAAM,QAAQD,CAAC,MAAM,MAAM,QAAQC,CAAC,EAAG,QAAO;AAElD,MAAI,MAAM,QAAQD,CAAC;AACjB,WAAOA,EAAE,WAAWC,EAAE,UAAUD,EAAE,MAAM,CAACE,GAAOC,MAAUJ,EAAUG,GAAOD,EAAEE,CAAK,CAAC,CAAC;AAEtF,QAAMC,IAAQ,OAAO,KAAKJ,CAAC,GACrBK,IAAQ,OAAO,KAAKJ,CAAC;AAE3B,MAAIG,EAAM,WAAWC,EAAM,OAAQ,QAAO;AAE1C,aAAWC,KAAOF;AAEhB,QADI,CAACC,EAAM,SAASC,CAAG,KACnB,CAACP,EAAUC,EAAEM,CAAG,GAAGL,EAAEK,CAAG,CAAC,EAAG,QAAO;AAGzC,SAAO;AACT,GAaaC,IAAmB,CAACC,GAAwBC,MAA0B;AACjF,QAAMC,IAAUC,EAAuBF,CAAI;AAE3C,GAAI,CAACC,EAAQ,WAAW,CAACX,EAAUU,GAAMC,EAAQ,OAAO,OACtDA,EAAQ,UAAUD,IAGpBG,EAAUJ,GAAQE,EAAQ,OAAO;AACnC;"}