@siberiacancode/reactuse 0.3.10 → 0.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs +1 -1
- package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs.map +1 -1
- package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs +1 -1
- package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs.map +1 -1
- package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs +1 -1
- package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
- package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs +1 -1
- package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs.map +1 -1
- package/dist/cjs/hooks/useFocusTrap/useFocusTrap.cjs.map +1 -1
- package/dist/cjs/hooks/useHash/useHash.cjs +1 -1
- package/dist/cjs/hooks/useHash/useHash.cjs.map +1 -1
- package/dist/cjs/hooks/useHover/useHover.cjs +1 -1
- package/dist/cjs/hooks/useHover/useHover.cjs.map +1 -1
- package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs +1 -1
- package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs.map +1 -1
- package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs +1 -1
- package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs.map +1 -1
- package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs +1 -1
- package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs.map +1 -1
- package/dist/cjs/hooks/useLongPress/useLongPress.cjs +1 -1
- package/dist/cjs/hooks/useLongPress/useLongPress.cjs.map +1 -1
- package/dist/cjs/hooks/useMediaControls/useMediaControls.cjs.map +1 -1
- package/dist/cjs/hooks/usePostMessage/usePostMessage.cjs +1 -1
- package/dist/cjs/hooks/usePostMessage/usePostMessage.cjs.map +1 -1
- package/dist/cjs/hooks/useSticky/useSticky.cjs +1 -1
- package/dist/cjs/hooks/useSticky/useSticky.cjs.map +1 -1
- package/dist/cjs/hooks/useWindowScroll/useWindowScroll.cjs +1 -1
- package/dist/cjs/hooks/useWindowScroll/useWindowScroll.cjs.map +1 -1
- package/dist/esm/hooks/useActiveElement/useActiveElement.mjs +1 -1
- package/dist/esm/hooks/useActiveElement/useActiveElement.mjs.map +1 -1
- package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs +11 -11
- package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs.map +1 -1
- package/dist/esm/hooks/useClickOutside/useClickOutside.mjs +9 -9
- package/dist/esm/hooks/useClickOutside/useClickOutside.mjs.map +1 -1
- package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs +3 -1
- package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs.map +1 -1
- package/dist/esm/hooks/useFocusTrap/useFocusTrap.mjs.map +1 -1
- package/dist/esm/hooks/useHash/useHash.mjs +6 -3
- package/dist/esm/hooks/useHash/useHash.mjs.map +1 -1
- package/dist/esm/hooks/useHover/useHover.mjs +4 -4
- package/dist/esm/hooks/useHover/useHover.mjs.map +1 -1
- package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs +1 -1
- package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs.map +1 -1
- package/dist/esm/hooks/useKeyPress/useKeyPress.mjs +1 -1
- package/dist/esm/hooks/useKeyPress/useKeyPress.mjs.map +1 -1
- package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs +1 -1
- package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs.map +1 -1
- package/dist/esm/hooks/useLongPress/useLongPress.mjs +1 -4
- package/dist/esm/hooks/useLongPress/useLongPress.mjs.map +1 -1
- package/dist/esm/hooks/useMediaControls/useMediaControls.mjs.map +1 -1
- package/dist/esm/hooks/usePostMessage/usePostMessage.mjs +18 -14
- package/dist/esm/hooks/usePostMessage/usePostMessage.mjs.map +1 -1
- package/dist/esm/hooks/useSticky/useSticky.mjs +1 -1
- package/dist/esm/hooks/useSticky/useSticky.mjs.map +1 -1
- package/dist/esm/hooks/useWindowScroll/useWindowScroll.mjs +1 -4
- package/dist/esm/hooks/useWindowScroll/useWindowScroll.mjs.map +1 -1
- package/dist/types/hooks/useActiveElement/useActiveElement.d.ts +4 -3
- package/dist/types/hooks/useAutoScroll/useAutoScroll.d.ts +5 -3
- package/dist/types/hooks/useClickOutside/useClickOutside.d.ts +5 -3
- package/dist/types/hooks/useDoubleClick/useDoubleClick.d.ts +7 -5
- package/dist/types/hooks/useFocusTrap/useFocusTrap.d.ts +2 -2
- package/dist/types/hooks/useHash/useHash.d.ts +10 -5
- package/dist/types/hooks/useHover/useHover.d.ts +8 -6
- package/dist/types/hooks/useInfiniteScroll/useInfiniteScroll.d.ts +12 -6
- package/dist/types/hooks/useKeyPress/useKeyPress.d.ts +10 -4
- package/dist/types/hooks/useKeysPressed/useKeysPressed.d.ts +10 -10
- package/dist/types/hooks/useLongPress/useLongPress.d.ts +9 -3
- package/dist/types/hooks/usePostMessage/usePostMessage.d.ts +5 -2
- package/dist/types/hooks/useSticky/useSticky.d.ts +5 -5
- package/package.json +89 -89
|
@@ -1 +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 { 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 * @usage low\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 = (\n target ? isTarget.getElement(target) : internalRef.current\n ) 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 && isTarget.getRawElement(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 (value = !playing) => {\n if (value) return play();\n return pause();\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","onPlaying","onPause","onWaiting","onStalled","onSeeking","onSeeked","onEnded","onDurationChange","onTimeUpdate","onVolumechange","onRatechange","onProgress","play","pause","value","time"],"mappings":"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"}
|
|
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 { 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 /** 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 * @usage low\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 = (\n target ? isTarget.getElement(target) : internalRef.current\n ) 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 && isTarget.getRawElement(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 (value = !playing) => {\n if (value) return play();\n return pause();\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","onPlaying","onPause","onWaiting","onStalled","onSeeking","onSeeked","onEnded","onDurationChange","onTimeUpdate","onVolumechange","onRatechange","onProgress","play","pause","value","time"],"mappings":"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"}
|
|
@@ -1,20 +1,24 @@
|
|
|
1
|
-
import { useRef as
|
|
2
|
-
const
|
|
3
|
-
const
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
import { useRef as i, useEffect as u } from "react";
|
|
2
|
+
const f = (s, t) => {
|
|
3
|
+
const o = i(t);
|
|
4
|
+
o.current = t;
|
|
5
|
+
const r = i(s);
|
|
6
|
+
return r.current = s, u(() => {
|
|
7
|
+
const n = (e) => {
|
|
8
|
+
if (Array.isArray(r.current)) {
|
|
9
|
+
if (!r.current.includes(e.origin)) return;
|
|
10
|
+
} else if (r.current !== "*" && e.origin !== r.current)
|
|
11
|
+
return;
|
|
12
|
+
o.current(e.data, e);
|
|
7
13
|
};
|
|
8
|
-
return window.addEventListener("message",
|
|
9
|
-
}, []), (
|
|
10
|
-
if (Array.isArray(
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
14
|
-
window.postMessage(r, e);
|
|
14
|
+
return window.addEventListener("message", n), () => window.removeEventListener("message", n);
|
|
15
|
+
}, []), (n) => {
|
|
16
|
+
if (Array.isArray(r.current))
|
|
17
|
+
return r.current.forEach((e) => window.postMessage(n, e));
|
|
18
|
+
window.postMessage(n, r.current);
|
|
15
19
|
};
|
|
16
20
|
};
|
|
17
21
|
export {
|
|
18
|
-
|
|
22
|
+
f as usePostMessage
|
|
19
23
|
};
|
|
20
24
|
//# sourceMappingURL=usePostMessage.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"usePostMessage.mjs","sources":["../../../../src/hooks/usePostMessage/usePostMessage.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nexport type UsePostMessageReturn<Message> = (message: Message) => void;\n\n/**\n * @name usePostMessage\n * @description - Hook that allows you to receive messages from other origins\n * @category Browser\n * @usage low\n *\n * @overload\n * @template Message The message data type\n * @param {
|
|
1
|
+
{"version":3,"file":"usePostMessage.mjs","sources":["../../../../src/hooks/usePostMessage/usePostMessage.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\n/** The origin of the message */\nexport type UsePostMessageOrigin = string | '*' | string[];\n\n/** The return type of the usePostMessage hook */\nexport type UsePostMessageReturn<Message> = (message: Message) => void;\n\n/**\n * @name usePostMessage\n * @description - Hook that allows you to receive messages from other origins\n * @category Browser\n * @usage low\n *\n * @overload\n * @template Message The message data type\n * @param {UsePostMessageOrigin} origin The origin of the message\n * @param {(message: Message) => Message} callback callback to get received message\n * @returns {(message: Message) => void} An object containing the current message\n *\n * @example\n * const postMessage = usePostMessage();\n */\nexport const usePostMessage = <Message>(\n origin: UsePostMessageOrigin,\n callback: (message: Message, event: MessageEvent<Message>) => void\n): UsePostMessageReturn<Message> => {\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n const internalOriginRef = useRef(origin);\n internalOriginRef.current = origin;\n\n useEffect(() => {\n const onMessage = (event: MessageEvent<Message>) => {\n if (Array.isArray(internalOriginRef.current)) {\n if (!internalOriginRef.current.includes(event.origin)) return;\n } else if (internalOriginRef.current !== '*' && event.origin !== internalOriginRef.current)\n return;\n\n internalCallbackRef.current(event.data as Message, event);\n };\n\n window.addEventListener('message', onMessage);\n return () => window.removeEventListener('message', onMessage);\n }, []);\n\n const postMessage = (message: Message) => {\n if (Array.isArray(internalOriginRef.current))\n return internalOriginRef.current.forEach((origin) => window.postMessage(message, origin));\n\n window.postMessage(message, internalOriginRef.current);\n };\n\n return postMessage;\n};\n"],"names":["usePostMessage","origin","callback","internalCallbackRef","useRef","internalOriginRef","useEffect","onMessage","event","message"],"mappings":";AAuBO,MAAMA,IAAiB,CAC5BC,GACAC,MACkC;AAClC,QAAMC,IAAsBC,EAAOF,CAAQ;AAC3C,EAAAC,EAAoB,UAAUD;AAC9B,QAAMG,IAAoBD,EAAOH,CAAM;AACvC,SAAAI,EAAkB,UAAUJ,GAE5BK,EAAU,MAAM;AACd,UAAMC,IAAY,CAACC,MAAiC;AAClD,UAAI,MAAM,QAAQH,EAAkB,OAAO;AACzC,YAAI,CAACA,EAAkB,QAAQ,SAASG,EAAM,MAAM,EAAG;AAAA,iBAC9CH,EAAkB,YAAY,OAAOG,EAAM,WAAWH,EAAkB;AACjF;AAEF,MAAAF,EAAoB,QAAQK,EAAM,MAAiBA,CAAK;AAAA,IAAA;AAG1D,kBAAO,iBAAiB,WAAWD,CAAS,GACrC,MAAM,OAAO,oBAAoB,WAAWA,CAAS;AAAA,EAAA,GAC3D,EAAE,GAEe,CAACE,MAAqB;AACxC,QAAI,MAAM,QAAQJ,EAAkB,OAAO;AACzC,aAAOA,EAAkB,QAAQ,QAAQ,CAACJ,MAAW,OAAO,YAAYQ,GAASR,CAAM,CAAC;AAE1F,WAAO,YAAYQ,GAASJ,EAAkB,OAAO;AAAA,EAAA;AAIzD;"}
|
|
@@ -20,7 +20,7 @@ const R = ((...o) => {
|
|
|
20
20
|
return e.addEventListener("scroll", n), window.addEventListener("resize", n), window.addEventListener("orientationchange", n), n(), () => {
|
|
21
21
|
e.removeEventListener("scroll", n), window.removeEventListener("resize", n), window.removeEventListener("orientationchange", n);
|
|
22
22
|
};
|
|
23
|
-
}, [t && s.getRawElement(t), i.state, c, r?.root]), t ? u : {
|
|
23
|
+
}, [t && s.getRawElement(t), i.state, c, r?.root]), t ? { stuck: u } : {
|
|
24
24
|
stuck: u,
|
|
25
25
|
ref: i
|
|
26
26
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useSticky.mjs","sources":["../../../../src/hooks/useSticky/useSticky.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use sticky return type */\nexport interface UseStickyReturn {\n stuck: boolean;\n}\n\n/** The use sticky axis type */\nexport type UseStickyAxis = 'horizontal' | 'vertical';\n\n/** The use sticky options type */\nexport interface UseStickyOptions {\n axis?: UseStickyAxis;\n root?: HookTarget;\n}\n\nexport interface UseSticky {\n (target: HookTarget, options?: UseStickyOptions):
|
|
1
|
+
{"version":3,"file":"useSticky.mjs","sources":["../../../../src/hooks/useSticky/useSticky.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use sticky return type */\nexport interface UseStickyReturn {\n stuck: boolean;\n}\n\n/** The use sticky axis type */\nexport type UseStickyAxis = 'horizontal' | 'vertical';\n\n/** The use sticky options type */\nexport interface UseStickyOptions {\n axis?: UseStickyAxis;\n root?: HookTarget;\n}\n\nexport interface UseSticky {\n (target: HookTarget, options?: UseStickyOptions): UseStickyReturn;\n\n <Target extends Element>(\n options?: UseStickyOptions,\n target?: never\n ): UseStickyReturn & {\n ref: StateRef<Target>;\n };\n}\n\n/**\n * @name UseSticky\n * @description - Hook that allows you to detect that your sticky component is stuck\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {HookTarget} target The target sticky element\n * @param {UseStickyAxis} [options.axis='vertical'] The axis of motion of the sticky component\n * @param {UseStickyRoot} [options.root=document] The element that contains your sticky component\n * @returns {UseStickyReturn} The state of the sticky\n *\n * @example\n * const { stuck } = useSticky(ref);\n *\n * @overload\n * @param {UseStickyAxis} [options.axis='vertical'] The axis of motion of the sticky component\n * @param {UseStickyRoot} [options.root=document] The element that contains your sticky component\n * @returns {{ ref: StateRef<Target> } & UseStickyReturn} The state of the sticky\n *\n * @example\n * const { stuck, ref } = useSticky();\n */\nexport const useSticky = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseStickyOptions;\n const axis = options?.axis ?? 'vertical';\n\n const internalRef = useRefState<Element>();\n const [stuck, setStuck] = useState(false);\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = (target ? isTarget.getElement(target) : internalRef.current) as Element;\n\n if (!element) return;\n\n const root = (options?.root ? isTarget.getElement(options.root) : document) as Element;\n const elementOffsetTop =\n element.getBoundingClientRect().top + root.scrollTop - root.getBoundingClientRect().top;\n const elementOffsetLeft =\n element.getBoundingClientRect().left + root.scrollLeft - root.getBoundingClientRect().left;\n\n const onSticky = () => {\n if (axis === 'vertical') {\n const scrollTop = root.scrollTop;\n setStuck(scrollTop >= elementOffsetTop);\n }\n\n if (axis === 'horizontal') {\n const scrollLeft = root.scrollLeft;\n setStuck(scrollLeft >= elementOffsetLeft);\n }\n };\n\n root.addEventListener('scroll', onSticky);\n window.addEventListener('resize', onSticky);\n window.addEventListener('orientationchange', onSticky);\n\n onSticky();\n\n return () => {\n root.removeEventListener('scroll', onSticky);\n window.removeEventListener('resize', onSticky);\n window.removeEventListener('orientationchange', onSticky);\n };\n }, [target && isTarget.getRawElement(target), internalRef.state, axis, options?.root]);\n\n if (target) return { stuck };\n return {\n stuck,\n ref: internalRef\n };\n}) as UseSticky;\n"],"names":["useSticky","params","target","isTarget","options","axis","internalRef","useRefState","stuck","setStuck","useState","useEffect","element","root","elementOffsetTop","elementOffsetLeft","onSticky","scrollTop","scrollLeft"],"mappings":";;;AA0DO,MAAMA,KAAa,IAAIC,MAAkB;AAC9C,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAWF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACxCI,IAAOD,GAAS,QAAQ,YAExBE,IAAcC,EAAA,GACd,CAACC,GAAOC,CAAQ,IAAIC,EAAS,EAAK;AAwCxC,SAtCAC,EAAU,MAAM;AACd,QAAI,CAACT,KAAU,CAACI,EAAY,MAAO;AAEnC,UAAMM,IAAWV,IAASC,EAAS,WAAWD,CAAM,IAAII,EAAY;AAEpE,QAAI,CAACM,EAAS;AAEd,UAAMC,IAAQT,GAAS,OAAOD,EAAS,WAAWC,EAAQ,IAAI,IAAI,UAC5DU,IACJF,EAAQ,wBAAwB,MAAMC,EAAK,YAAYA,EAAK,sBAAA,EAAwB,KAChFE,IACJH,EAAQ,wBAAwB,OAAOC,EAAK,aAAaA,EAAK,sBAAA,EAAwB,MAElFG,IAAW,MAAM;AACrB,UAAIX,MAAS,YAAY;AACvB,cAAMY,IAAYJ,EAAK;AACvB,QAAAJ,EAASQ,KAAaH,CAAgB;AAAA,MAAA;AAGxC,UAAIT,MAAS,cAAc;AACzB,cAAMa,IAAaL,EAAK;AACxB,QAAAJ,EAASS,KAAcH,CAAiB;AAAA,MAAA;AAAA,IAC1C;AAGF,WAAAF,EAAK,iBAAiB,UAAUG,CAAQ,GACxC,OAAO,iBAAiB,UAAUA,CAAQ,GAC1C,OAAO,iBAAiB,qBAAqBA,CAAQ,GAErDA,EAAA,GAEO,MAAM;AACX,MAAAH,EAAK,oBAAoB,UAAUG,CAAQ,GAC3C,OAAO,oBAAoB,UAAUA,CAAQ,GAC7C,OAAO,oBAAoB,qBAAqBA,CAAQ;AAAA,IAAA;AAAA,EAC1D,GACC,CAACd,KAAUC,EAAS,cAAcD,CAAM,GAAGI,EAAY,OAAOD,GAAMD,GAAS,IAAI,CAAC,GAEjFF,IAAe,EAAE,OAAAM,EAAA,IACd;AAAA,IACL,OAAAA;AAAA,IACA,KAAKF;AAAA,EAAA;AAET;"}
|
|
@@ -7,10 +7,7 @@ const i = ({
|
|
|
7
7
|
const r = { behavior: e };
|
|
8
8
|
typeof o == "number" && (r.left = o), typeof n == "number" && (r.top = n), window.scrollTo(r);
|
|
9
9
|
}, w = () => {
|
|
10
|
-
const [o, n] = t({
|
|
11
|
-
x: typeof window < "u" ? window.scrollX : Number.POSITIVE_INFINITY,
|
|
12
|
-
y: typeof window < "u" ? window.scrollY : Number.POSITIVE_INFINITY
|
|
13
|
-
});
|
|
10
|
+
const [o, n] = t(() => typeof window > "u" ? { x: Number.POSITIVE_INFINITY, y: Number.POSITIVE_INFINITY } : { x: window.scrollX, y: window.scrollY });
|
|
14
11
|
return s(() => {
|
|
15
12
|
const e = () => n({ x: window.scrollX, y: window.scrollY });
|
|
16
13
|
return window.addEventListener("scroll", e), window.addEventListener("resize", e), () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useWindowScroll.mjs","sources":["../../../../src/hooks/useWindowScroll/useWindowScroll.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface ScrollPosition {\n x: number;\n y: number;\n}\n\nexport const scrollTo = ({\n x,\n y,\n behavior = 'smooth'\n}: Partial<ScrollPosition & ScrollOptions>) => {\n const scrollOptions: ScrollToOptions = { behavior };\n if (typeof x === 'number') scrollOptions.left = x;\n if (typeof y === 'number') scrollOptions.top = y;\n window.scrollTo(scrollOptions);\n};\n\n/**\n * @name useWindowScroll\n * @description - Hook that manages the window scroll position\n * @category Sensors\n * @usage low\n *\n * @returns {UseWindowScrollReturn} An object containing the current window scroll position\n *\n * @example\n * const { value, scrollTo } = useWindowScroll();\n */\nexport const useWindowScroll = () => {\n const [value, setValue] = useState<ScrollPosition>({\n
|
|
1
|
+
{"version":3,"file":"useWindowScroll.mjs","sources":["../../../../src/hooks/useWindowScroll/useWindowScroll.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface ScrollPosition {\n x: number;\n y: number;\n}\n\nexport const scrollTo = ({\n x,\n y,\n behavior = 'smooth'\n}: Partial<ScrollPosition & ScrollOptions>) => {\n const scrollOptions: ScrollToOptions = { behavior };\n if (typeof x === 'number') scrollOptions.left = x;\n if (typeof y === 'number') scrollOptions.top = y;\n window.scrollTo(scrollOptions);\n};\n\n/**\n * @name useWindowScroll\n * @description - Hook that manages the window scroll position\n * @category Sensors\n * @usage low\n *\n * @returns {UseWindowScrollReturn} An object containing the current window scroll position\n *\n * @example\n * const { value, scrollTo } = useWindowScroll();\n */\nexport const useWindowScroll = () => {\n const [value, setValue] = useState<ScrollPosition>(() => {\n if (typeof window === 'undefined')\n return { x: Number.POSITIVE_INFINITY, y: Number.POSITIVE_INFINITY };\n return { x: window.scrollX, y: window.scrollY };\n });\n\n useEffect(() => {\n const onChange = () => setValue({ x: window.scrollX, y: window.scrollY });\n window.addEventListener('scroll', onChange);\n window.addEventListener('resize', onChange);\n return () => {\n window.removeEventListener('scroll', onChange);\n window.removeEventListener('resize', onChange);\n };\n }, []);\n\n return { value, scrollTo };\n};\n"],"names":["scrollTo","x","y","behavior","scrollOptions","useWindowScroll","value","setValue","useState","useEffect","onChange"],"mappings":";AAOO,MAAMA,IAAW,CAAC;AAAA,EACvB,GAAAC;AAAA,EACA,GAAAC;AAAA,EACA,UAAAC,IAAW;AACb,MAA+C;AAC7C,QAAMC,IAAiC,EAAE,UAAAD,EAAA;AACzC,EAAI,OAAOF,KAAM,aAAUG,EAAc,OAAOH,IAC5C,OAAOC,KAAM,aAAUE,EAAc,MAAMF,IAC/C,OAAO,SAASE,CAAa;AAC/B,GAaaC,IAAkB,MAAM;AACnC,QAAM,CAACC,GAAOC,CAAQ,IAAIC,EAAyB,MAC7C,OAAO,SAAW,MACb,EAAE,GAAG,OAAO,mBAAmB,GAAG,OAAO,kBAAA,IAC3C,EAAE,GAAG,OAAO,SAAS,GAAG,OAAO,QAAA,CACvC;AAED,SAAAC,EAAU,MAAM;AACd,UAAMC,IAAW,MAAMH,EAAS,EAAE,GAAG,OAAO,SAAS,GAAG,OAAO,SAAS;AACxE,kBAAO,iBAAiB,UAAUG,CAAQ,GAC1C,OAAO,iBAAiB,UAAUA,CAAQ,GACnC,MAAM;AACX,aAAO,oBAAoB,UAAUA,CAAQ,GAC7C,OAAO,oBAAoB,UAAUA,CAAQ;AAAA,IAAA;AAAA,EAC/C,GACC,EAAE,GAEE,EAAE,OAAAJ,GAAO,UAAAN,EAAA;AAClB;"}
|
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
import { HookTarget } from '../../utils/helpers';
|
|
2
2
|
import { StateRef } from '../useRefState/useRefState';
|
|
3
3
|
/** The use active element return type */
|
|
4
|
-
export
|
|
4
|
+
export interface UseActiveElementReturn<ActiveElement extends HTMLElement = HTMLElement> {
|
|
5
|
+
value: ActiveElement | null;
|
|
6
|
+
}
|
|
5
7
|
export interface UseActiveElement {
|
|
6
8
|
(): UseActiveElementReturn;
|
|
7
9
|
<Target extends Element, ActiveElement extends HTMLElement = HTMLElement>(target?: never): {
|
|
8
10
|
ref: StateRef<Target>;
|
|
9
|
-
|
|
10
|
-
};
|
|
11
|
+
} & UseActiveElementReturn<ActiveElement>;
|
|
11
12
|
<ActiveElement extends HTMLElement = HTMLElement>(target: HookTarget): UseActiveElementReturn<ActiveElement>;
|
|
12
13
|
}
|
|
13
14
|
/**
|
|
@@ -9,7 +9,9 @@ export interface UseAutoScrollOptions {
|
|
|
9
9
|
}
|
|
10
10
|
export interface UseAutoScroll {
|
|
11
11
|
(target: HookTarget, options?: UseAutoScrollOptions): void;
|
|
12
|
-
<Target extends HTMLElement>(options?: UseAutoScrollOptions):
|
|
12
|
+
<Target extends HTMLElement>(options?: UseAutoScrollOptions): {
|
|
13
|
+
ref: StateRef<Target>;
|
|
14
|
+
};
|
|
13
15
|
}
|
|
14
16
|
/**
|
|
15
17
|
* @name useAutoScroll
|
|
@@ -28,9 +30,9 @@ export interface UseAutoScroll {
|
|
|
28
30
|
* @overload
|
|
29
31
|
* @template Target
|
|
30
32
|
* @param {boolean} [options.enabled] Whether auto-scrolling is enabled
|
|
31
|
-
* @returns {StateRef<Target>} A React ref to attach to the list element
|
|
33
|
+
* @returns {{ ref: StateRef<Target> }} A React ref to attach to the list element
|
|
32
34
|
*
|
|
33
35
|
* @example
|
|
34
|
-
* const ref = useAutoScroll();
|
|
36
|
+
* const { ref } = useAutoScroll();
|
|
35
37
|
*/
|
|
36
38
|
export declare const useAutoScroll: UseAutoScroll;
|
|
@@ -2,7 +2,9 @@ import { HookTarget } from '../../utils/helpers';
|
|
|
2
2
|
import { StateRef } from '../useRefState/useRefState';
|
|
3
3
|
export interface UseClickOutside {
|
|
4
4
|
(target: HookTarget, callback: (event: Event) => void): void;
|
|
5
|
-
<Target extends Element>(callback: (event: Event) => void, target?: never):
|
|
5
|
+
<Target extends Element>(callback: (event: Event) => void, target?: never): {
|
|
6
|
+
ref: StateRef<Target>;
|
|
7
|
+
};
|
|
6
8
|
}
|
|
7
9
|
/**
|
|
8
10
|
* @name useClickOutside
|
|
@@ -21,10 +23,10 @@ export interface UseClickOutside {
|
|
|
21
23
|
* @overload
|
|
22
24
|
* @template Target The target element(s)
|
|
23
25
|
* @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected
|
|
24
|
-
* @returns {StateRef<Target>} A ref to attach to the target element
|
|
26
|
+
* @returns {{ ref: StateRef<Target> }} A ref to attach to the target element
|
|
25
27
|
*
|
|
26
28
|
* @example
|
|
27
|
-
* const ref = useClickOutside<HTMLDivElement>(() => console.log('click outside'));
|
|
29
|
+
* const { ref } = useClickOutside<HTMLDivElement>(() => console.log('click outside'));
|
|
28
30
|
*
|
|
29
31
|
* @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useClickOutside.html}
|
|
30
32
|
*/
|
|
@@ -9,8 +9,10 @@ export interface UseDoubleClickOptions {
|
|
|
9
9
|
onSingleClick?: (event: DoubleClickEvents) => void;
|
|
10
10
|
}
|
|
11
11
|
export interface UseDoubleClick {
|
|
12
|
-
(target: HookTarget, callback: (event: DoubleClickEvents) => void, options?: UseDoubleClickOptions):
|
|
13
|
-
<Target extends Element>(callback: (event: DoubleClickEvents) => void, options?: UseDoubleClickOptions, target?: never):
|
|
12
|
+
(target: HookTarget, callback: (event: DoubleClickEvents) => void, options?: UseDoubleClickOptions): void;
|
|
13
|
+
<Target extends Element>(callback: (event: DoubleClickEvents) => void, options?: UseDoubleClickOptions, target?: never): {
|
|
14
|
+
ref: StateRef<Target>;
|
|
15
|
+
};
|
|
14
16
|
}
|
|
15
17
|
export declare const DEFAULT_THRESHOLD_TIME = 300;
|
|
16
18
|
/**
|
|
@@ -23,7 +25,7 @@ export declare const DEFAULT_THRESHOLD_TIME = 300;
|
|
|
23
25
|
* @param {HookTarget} target The target element to be double clicked
|
|
24
26
|
* @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click
|
|
25
27
|
* @param {UseDoubleClickOptions} [options] The options for the double click
|
|
26
|
-
* @returns {
|
|
28
|
+
* @returns {void} The double clicking state
|
|
27
29
|
*
|
|
28
30
|
* @example
|
|
29
31
|
* useDoubleClick(ref, () => console.log('double clicked'));
|
|
@@ -32,10 +34,10 @@ export declare const DEFAULT_THRESHOLD_TIME = 300;
|
|
|
32
34
|
* @template Target The target element
|
|
33
35
|
* @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click
|
|
34
36
|
* @param {UseDoubleClickOptions} [options] The options for the double click
|
|
35
|
-
* @returns {
|
|
37
|
+
* @returns {{ ref: StateRef<Target> }} The double clicking state
|
|
36
38
|
*
|
|
37
39
|
* @example
|
|
38
|
-
* const ref = useDoubleClick(() => console.log('double clicked'));
|
|
40
|
+
* const { ref } = useDoubleClick(() => console.log('double clicked'));
|
|
39
41
|
*
|
|
40
42
|
* @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useDoubleClick.html}
|
|
41
43
|
*/
|
|
@@ -27,7 +27,7 @@ export interface UseFocusTrap {
|
|
|
27
27
|
* @overload
|
|
28
28
|
* @param {HookTarget} target The target element for focus trap
|
|
29
29
|
* @param {boolean} [active=true] Whether focus trap is active
|
|
30
|
-
* @returns {UseFocusTrapReturn} Object with
|
|
30
|
+
* @returns {UseFocusTrapReturn} Object with the focus trap state and methods
|
|
31
31
|
*
|
|
32
32
|
* @example
|
|
33
33
|
* const { active, disable, toggle, enable } = useFocusTrap(ref, true);
|
|
@@ -35,7 +35,7 @@ export interface UseFocusTrap {
|
|
|
35
35
|
* @overload
|
|
36
36
|
* @template Target The target element type
|
|
37
37
|
* @param {boolean} [active=true] Whether focus trap is active
|
|
38
|
-
* @returns {UseFocusTrapReturn & { ref: StateRef<Target> }} Object with
|
|
38
|
+
* @returns {UseFocusTrapReturn & { ref: StateRef<Target> }} Object with the focus trap state and methods
|
|
39
39
|
*
|
|
40
40
|
* @example
|
|
41
41
|
* const { ref, active, disable, toggle, enable } = useFocusTrap(true);
|
|
@@ -9,7 +9,12 @@ export interface UseHashOptions {
|
|
|
9
9
|
onChange?: (hash: string) => void;
|
|
10
10
|
}
|
|
11
11
|
/** The use hash return type */
|
|
12
|
-
|
|
12
|
+
interface UseHashReturn {
|
|
13
|
+
/** The hash value */
|
|
14
|
+
value: string;
|
|
15
|
+
/** The function to set the hash value */
|
|
16
|
+
set: (value: string) => void;
|
|
17
|
+
}
|
|
13
18
|
export interface UseHash {
|
|
14
19
|
(initialValue?: string, options?: UseHashOptions): UseHashReturn;
|
|
15
20
|
(options?: UseHashOptions): UseHashReturn;
|
|
@@ -31,7 +36,7 @@ export interface UseHash {
|
|
|
31
36
|
* @returns {UseHashReturn} An array containing the hash value and a function to set the hash value
|
|
32
37
|
*
|
|
33
38
|
* @example
|
|
34
|
-
* const
|
|
39
|
+
* const { value, set } = useHash("initial");
|
|
35
40
|
*
|
|
36
41
|
* @overload
|
|
37
42
|
* @param {string} [initialValue] The initial hash value if no hash exists
|
|
@@ -39,7 +44,7 @@ export interface UseHash {
|
|
|
39
44
|
* @returns {UseHashReturn} An array containing the hash value and a function to set the hash value
|
|
40
45
|
*
|
|
41
46
|
* @example
|
|
42
|
-
* const
|
|
47
|
+
* const { value, set } = useHash("initial", (newHash) => console.log('callback'));
|
|
43
48
|
*
|
|
44
49
|
* @overload
|
|
45
50
|
* @param {UseHashOptions} [options] Configuration options
|
|
@@ -49,14 +54,14 @@ export interface UseHash {
|
|
|
49
54
|
* @returns {UseHashReturn} An array containing the hash value and a function to set the hash value
|
|
50
55
|
*
|
|
51
56
|
* @example
|
|
52
|
-
* const
|
|
57
|
+
* const { value, set } = useHash();
|
|
53
58
|
*
|
|
54
59
|
* @overload
|
|
55
60
|
* @param {(hash: string) => void} [callback] Callback function called when hash changes
|
|
56
61
|
* @returns {UseHashReturn} An array containing the hash value and a function to set the hash value
|
|
57
62
|
*
|
|
58
63
|
* @example
|
|
59
|
-
* const
|
|
64
|
+
* const { value, set } = useHash((newHash) => console.log('callback'));
|
|
60
65
|
*/
|
|
61
66
|
export declare const useHash: UseHash;
|
|
62
67
|
export {};
|
|
@@ -9,18 +9,20 @@ export interface UseHoverOptions {
|
|
|
9
9
|
/** The on leave callback */
|
|
10
10
|
onLeave?: (event: Event) => void;
|
|
11
11
|
}
|
|
12
|
+
/** The use hover return type */
|
|
12
13
|
export interface UseHoverReturn {
|
|
14
|
+
/** The value of the hover */
|
|
13
15
|
value: boolean;
|
|
14
16
|
}
|
|
15
17
|
export interface UseHover {
|
|
16
|
-
(target: HookTarget, callback?: (event: Event) => void):
|
|
17
|
-
(target: HookTarget, options?: UseHoverOptions):
|
|
18
|
-
<Target extends Element>(callback?: (event: Event) => void, target?: never): {
|
|
18
|
+
(target: HookTarget, callback?: (event: Event) => void): UseHoverReturn;
|
|
19
|
+
(target: HookTarget, options?: UseHoverOptions): UseHoverReturn;
|
|
20
|
+
<Target extends Element>(callback?: (event: Event) => void, target?: never): UseHoverReturn & {
|
|
19
21
|
ref: StateRef<Target>;
|
|
20
|
-
}
|
|
21
|
-
<Target extends Element>(options?: UseHoverOptions, target?: never): {
|
|
22
|
+
};
|
|
23
|
+
<Target extends Element>(options?: UseHoverOptions, target?: never): UseHoverReturn & {
|
|
22
24
|
ref: StateRef<Target>;
|
|
23
|
-
}
|
|
25
|
+
};
|
|
24
26
|
}
|
|
25
27
|
/**
|
|
26
28
|
* @name useHover
|
|
@@ -7,11 +7,17 @@ export interface UseInfiniteScrollOptions {
|
|
|
7
7
|
/** The distance in pixels to trigger the callback */
|
|
8
8
|
distance?: number;
|
|
9
9
|
}
|
|
10
|
+
/** The use infinite scroll return type */
|
|
11
|
+
export interface UseInfiniteScrollReturn {
|
|
12
|
+
/** The loading state of the infinite scroll */
|
|
13
|
+
loading: boolean;
|
|
14
|
+
/** The ref to attach to the element */
|
|
15
|
+
ref: StateRef<Element>;
|
|
16
|
+
}
|
|
10
17
|
export interface UseInfiniteScroll {
|
|
11
|
-
(target: HookTarget, callback: (event: Event) => void, options?: UseInfiniteScrollOptions):
|
|
12
|
-
<Target extends Element>(callback: (event: Event) => void, options?: UseInfiniteScrollOptions, target?: never): {
|
|
18
|
+
(target: HookTarget, callback: (event: Event) => void, options?: UseInfiniteScrollOptions): UseInfiniteScrollReturn;
|
|
19
|
+
<Target extends Element>(callback: (event: Event) => void, options?: UseInfiniteScrollOptions, target?: never): UseInfiniteScrollReturn & {
|
|
13
20
|
ref: StateRef<Target>;
|
|
14
|
-
loading: boolean;
|
|
15
21
|
};
|
|
16
22
|
}
|
|
17
23
|
/**
|
|
@@ -25,7 +31,7 @@ export interface UseInfiniteScroll {
|
|
|
25
31
|
* @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected
|
|
26
32
|
* @param {number} [options.distance=10] The distance in pixels to trigger the callback
|
|
27
33
|
* @param {string} [options.direction='bottom'] The direction to trigger the callback
|
|
28
|
-
* @returns {{ ref: StateRef<Target
|
|
34
|
+
* @returns {UseInfiniteScrollReturn & { ref: StateRef<Target> }} An object containing the ref and loading
|
|
29
35
|
*
|
|
30
36
|
* @example
|
|
31
37
|
* const { ref, loading } = useInfiniteScroll(() => console.log('infinite scroll'));
|
|
@@ -35,9 +41,9 @@ export interface UseInfiniteScroll {
|
|
|
35
41
|
* @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected
|
|
36
42
|
* @param {number} [options.distance=10] The distance in pixels to trigger the callback
|
|
37
43
|
* @param {string} [options.direction='bottom'] The direction to trigger the callback
|
|
38
|
-
* @returns {
|
|
44
|
+
* @returns {UseInfiniteScrollReturn} An object containing the ref and loading
|
|
39
45
|
*
|
|
40
46
|
* @example
|
|
41
|
-
* const loading = useInfiniteScroll(ref, () => console.log('infinite scroll'));
|
|
47
|
+
* const { loading } = useInfiniteScroll(ref, () => console.log('infinite scroll'));
|
|
42
48
|
*/
|
|
43
49
|
export declare const useInfiniteScroll: UseInfiniteScroll;
|
|
@@ -4,10 +4,16 @@ import { StateRef } from '../useRefState/useRefState';
|
|
|
4
4
|
export type UseKeyPressKey = string | string[];
|
|
5
5
|
/** The callback function to be invoked when key is pressed */
|
|
6
6
|
export type UseKeyPressCallback = (pressed: boolean, event: KeyboardEvent) => void;
|
|
7
|
+
/** The use key press return type */
|
|
8
|
+
export interface UseKeyPressReturn {
|
|
9
|
+
/** The pressed state of the key */
|
|
10
|
+
pressed: boolean;
|
|
11
|
+
/** The ref to attach to the element */
|
|
12
|
+
ref: StateRef<Element>;
|
|
13
|
+
}
|
|
7
14
|
export interface UseKeyPress {
|
|
8
|
-
(target: HookTarget | Window, key: UseKeyPressKey, callback?: UseKeyPressCallback):
|
|
9
|
-
<Target extends Element>(key: UseKeyPressKey, callback?: UseKeyPressCallback, target?: never): {
|
|
10
|
-
pressed: boolean;
|
|
15
|
+
(target: HookTarget | Window, key: UseKeyPressKey, callback?: UseKeyPressCallback): UseKeyPressReturn;
|
|
16
|
+
<Target extends Element>(key: UseKeyPressKey, callback?: UseKeyPressCallback, target?: never): UseKeyPressReturn & {
|
|
11
17
|
ref: StateRef<Target>;
|
|
12
18
|
};
|
|
13
19
|
}
|
|
@@ -21,7 +27,7 @@ export interface UseKeyPress {
|
|
|
21
27
|
* @param {HookTarget} [target=window] The target to attach the event listeners to
|
|
22
28
|
* @param {UseKeyPressKey} key The key or keys to listen for
|
|
23
29
|
* @param {(pressed: boolean, event: KeyboardEvent) => void} [callback] Callback function invoked when key is pressed
|
|
24
|
-
* @returns {
|
|
30
|
+
* @returns {UseKeyPressReturn} An object containing the pressed state and ref
|
|
25
31
|
*
|
|
26
32
|
* @example
|
|
27
33
|
* const isKeyPressed = useKeyPress(ref, 'a');
|
|
@@ -5,16 +5,16 @@ export interface UseKeysPressedOptions {
|
|
|
5
5
|
/** Enable or disable the event listeners */
|
|
6
6
|
enabled?: boolean;
|
|
7
7
|
}
|
|
8
|
-
export interface
|
|
9
|
-
|
|
8
|
+
export interface UseKeysPressedReturn {
|
|
9
|
+
/** The array of currently pressed keys */
|
|
10
|
+
value: Array<{
|
|
10
11
|
key: string;
|
|
11
12
|
code: string;
|
|
12
13
|
}>;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
}>;
|
|
14
|
+
}
|
|
15
|
+
export interface UseKeysPressed {
|
|
16
|
+
(target: HookTarget | Window, options?: UseKeysPressedOptions): UseKeysPressedReturn;
|
|
17
|
+
<Target extends Element>(options?: UseKeysPressedOptions): UseKeysPressedReturn & {
|
|
18
18
|
ref: StateRef<Target>;
|
|
19
19
|
};
|
|
20
20
|
}
|
|
@@ -27,15 +27,15 @@ export interface UseKeysPressed {
|
|
|
27
27
|
* @overload
|
|
28
28
|
* @param {HookTarget | Window} target DOM element or ref to attach keyboard listeners to
|
|
29
29
|
* @param {UseKeysPressedOptions} [options.enabled=true] Enable or disable the event listeners
|
|
30
|
-
* @returns {
|
|
30
|
+
* @returns {UseKeysPressedReturn} Object containing the array of currently pressed keys
|
|
31
31
|
*
|
|
32
32
|
* @example
|
|
33
|
-
* const
|
|
33
|
+
* const { value } = useKeysPressed(ref);
|
|
34
34
|
*
|
|
35
35
|
* @overload
|
|
36
36
|
* @template Target - Type of the target DOM element
|
|
37
37
|
* @param {UseKeysPressedOptions} [options] - Optional configuration options
|
|
38
|
-
* @returns {
|
|
38
|
+
* @returns {UseKeysPressedReturn & { ref: StateRef<Target> }} Object containing the array of currently pressed keys and ref to attach to the element
|
|
39
39
|
*
|
|
40
40
|
* @example
|
|
41
41
|
* const { value, ref } = useKeysPressed();
|
|
@@ -7,12 +7,18 @@ export interface UseLongPressOptions {
|
|
|
7
7
|
onFinish?: (event: LongPressEvents) => void;
|
|
8
8
|
onStart?: (event: LongPressEvents) => void;
|
|
9
9
|
}
|
|
10
|
+
/** The use long press return type */
|
|
11
|
+
export interface UseLongPressReturn {
|
|
12
|
+
/** The long pressing state */
|
|
13
|
+
pressed: boolean;
|
|
14
|
+
/** The ref to attach to the element */
|
|
15
|
+
ref: StateRef<Element>;
|
|
16
|
+
}
|
|
10
17
|
export interface UseLongPress {
|
|
11
|
-
(target: HookTarget, callback: (event: LongPressEvents) => void, options?: UseLongPressOptions):
|
|
18
|
+
(target: HookTarget, callback: (event: LongPressEvents) => void, options?: UseLongPressOptions): UseLongPressReturn;
|
|
12
19
|
<Target extends Element>(callback: (event: LongPressEvents) => void, options?: UseLongPressOptions, target?: never): {
|
|
13
20
|
ref: StateRef<Target>;
|
|
14
|
-
|
|
15
|
-
};
|
|
21
|
+
} & UseLongPressReturn;
|
|
16
22
|
}
|
|
17
23
|
/**
|
|
18
24
|
* @name useLongPress
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
/** The origin of the message */
|
|
2
|
+
export type UsePostMessageOrigin = string | '*' | string[];
|
|
3
|
+
/** The return type of the usePostMessage hook */
|
|
1
4
|
export type UsePostMessageReturn<Message> = (message: Message) => void;
|
|
2
5
|
/**
|
|
3
6
|
* @name usePostMessage
|
|
@@ -7,11 +10,11 @@ export type UsePostMessageReturn<Message> = (message: Message) => void;
|
|
|
7
10
|
*
|
|
8
11
|
* @overload
|
|
9
12
|
* @template Message The message data type
|
|
10
|
-
* @param {
|
|
13
|
+
* @param {UsePostMessageOrigin} origin The origin of the message
|
|
11
14
|
* @param {(message: Message) => Message} callback callback to get received message
|
|
12
15
|
* @returns {(message: Message) => void} An object containing the current message
|
|
13
16
|
*
|
|
14
17
|
* @example
|
|
15
18
|
* const postMessage = usePostMessage();
|
|
16
19
|
*/
|
|
17
|
-
export declare const usePostMessage: <Message>(origin:
|
|
20
|
+
export declare const usePostMessage: <Message>(origin: UsePostMessageOrigin, callback: (message: Message, event: MessageEvent<Message>) => void) => UsePostMessageReturn<Message>;
|
|
@@ -12,10 +12,10 @@ export interface UseStickyOptions {
|
|
|
12
12
|
root?: HookTarget;
|
|
13
13
|
}
|
|
14
14
|
export interface UseSticky {
|
|
15
|
-
(target: HookTarget, options?: UseStickyOptions):
|
|
16
|
-
<Target extends Element>(options?: UseStickyOptions, target?: never): {
|
|
15
|
+
(target: HookTarget, options?: UseStickyOptions): UseStickyReturn;
|
|
16
|
+
<Target extends Element>(options?: UseStickyOptions, target?: never): UseStickyReturn & {
|
|
17
17
|
ref: StateRef<Target>;
|
|
18
|
-
}
|
|
18
|
+
};
|
|
19
19
|
}
|
|
20
20
|
/**
|
|
21
21
|
* @name UseSticky
|
|
@@ -30,12 +30,12 @@ export interface UseSticky {
|
|
|
30
30
|
* @returns {UseStickyReturn} The state of the sticky
|
|
31
31
|
*
|
|
32
32
|
* @example
|
|
33
|
-
* const stuck
|
|
33
|
+
* const { stuck } = useSticky(ref);
|
|
34
34
|
*
|
|
35
35
|
* @overload
|
|
36
36
|
* @param {UseStickyAxis} [options.axis='vertical'] The axis of motion of the sticky component
|
|
37
37
|
* @param {UseStickyRoot} [options.root=document] The element that contains your sticky component
|
|
38
|
-
* @returns {{
|
|
38
|
+
* @returns {{ ref: StateRef<Target> } & UseStickyReturn} The state of the sticky
|
|
39
39
|
*
|
|
40
40
|
* @example
|
|
41
41
|
* const { stuck, ref } = useSticky();
|