@siberiacancode/reactuse 0.2.29 → 0.2.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (530) hide show
  1. package/README.md +71 -71
  2. package/dist/cjs/helpers/createContext/createContext.cjs.map +1 -1
  3. package/dist/cjs/helpers/createEventEmitter/createEventEmitter.cjs.map +1 -1
  4. package/dist/cjs/helpers/createReactiveContext/createReactiveContext.cjs.map +1 -1
  5. package/dist/cjs/helpers/createStore/createStore.cjs.map +1 -1
  6. package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs.map +1 -1
  7. package/dist/cjs/hooks/useAsync/useAsync.cjs.map +1 -1
  8. package/dist/cjs/hooks/useAudio/useAudio.cjs.map +1 -1
  9. package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs +1 -1
  10. package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs.map +1 -1
  11. package/dist/cjs/hooks/useBattery/useBattery.cjs +1 -1
  12. package/dist/cjs/hooks/useBattery/useBattery.cjs.map +1 -1
  13. package/dist/cjs/hooks/useBluetooth/useBluetooth.cjs +1 -1
  14. package/dist/cjs/hooks/useBluetooth/useBluetooth.cjs.map +1 -1
  15. package/dist/cjs/hooks/useBoolean/useBoolean.cjs.map +1 -1
  16. package/dist/cjs/hooks/useBreakpoints/useBreakpoints.cjs.map +1 -1
  17. package/dist/cjs/hooks/useBroadcastChannel/useBroadcastChannel.cjs +1 -1
  18. package/dist/cjs/hooks/useBroadcastChannel/useBroadcastChannel.cjs.map +1 -1
  19. package/dist/cjs/hooks/useBrowserLanguage/useBrowserLanguage.cjs.map +1 -1
  20. package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
  21. package/dist/cjs/hooks/useClipboard/useClipboard.cjs.map +1 -1
  22. package/dist/cjs/hooks/useConst/useConst.cjs.map +1 -1
  23. package/dist/cjs/hooks/useCookie/useCookie.cjs.map +1 -1
  24. package/dist/cjs/hooks/useCookies/useCookies.cjs.map +1 -1
  25. package/dist/cjs/hooks/useCopy/useCopy.cjs.map +1 -1
  26. package/dist/cjs/hooks/useCounter/useCounter.cjs.map +1 -1
  27. package/dist/cjs/hooks/useCssVar/useCssVar.cjs.map +1 -1
  28. package/dist/cjs/hooks/useDebounceCallback/useDebounceCallback.cjs.map +1 -1
  29. package/dist/cjs/hooks/useDebounceState/useDebounceState.cjs +2 -0
  30. package/dist/cjs/hooks/useDebounceState/useDebounceState.cjs.map +1 -0
  31. package/dist/cjs/hooks/useDebounceValue/useDebounceValue.cjs.map +1 -1
  32. package/dist/cjs/hooks/useDefault/useDefault.cjs.map +1 -1
  33. package/dist/cjs/hooks/useDeviceMotion/useDeviceMotion.cjs.map +1 -1
  34. package/dist/cjs/hooks/useDeviceOrientation/useDeviceOrientation.cjs +1 -1
  35. package/dist/cjs/hooks/useDeviceOrientation/useDeviceOrientation.cjs.map +1 -1
  36. package/dist/cjs/hooks/useDevicePixelRatio/useDevicePixelRatio.cjs +1 -1
  37. package/dist/cjs/hooks/useDevicePixelRatio/useDevicePixelRatio.cjs.map +1 -1
  38. package/dist/cjs/hooks/useDidUpdate/useDidUpdate.cjs.map +1 -1
  39. package/dist/cjs/hooks/useDisclosure/useDisclosure.cjs.map +1 -1
  40. package/dist/cjs/hooks/useDisplayMedia/useDisplayMedia.cjs.map +1 -1
  41. package/dist/cjs/hooks/useDocumentEvent/useDocumentEvent.cjs.map +1 -1
  42. package/dist/cjs/hooks/useDocumentTitle/useDocumentTitle.cjs.map +1 -1
  43. package/dist/cjs/hooks/useDocumentVisibility/useDocumentVisibility.cjs.map +1 -1
  44. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs.map +1 -1
  45. package/dist/cjs/hooks/useDropZone/useDropZone.cjs +1 -1
  46. package/dist/cjs/hooks/useDropZone/useDropZone.cjs.map +1 -1
  47. package/dist/cjs/hooks/useElementSize/useElementSize.cjs.map +1 -1
  48. package/dist/cjs/hooks/useEvent/useEvent.cjs.map +1 -1
  49. package/dist/cjs/hooks/useEventListener/useEventListener.cjs +1 -1
  50. package/dist/cjs/hooks/useEventListener/useEventListener.cjs.map +1 -1
  51. package/dist/cjs/hooks/useEventSource/useEventSource.cjs.map +1 -1
  52. package/dist/cjs/hooks/useEyeDropper/useEyeDropper.cjs +1 -1
  53. package/dist/cjs/hooks/useEyeDropper/useEyeDropper.cjs.map +1 -1
  54. package/dist/cjs/hooks/useFavicon/useFavicon.cjs +1 -1
  55. package/dist/cjs/hooks/useFavicon/useFavicon.cjs.map +1 -1
  56. package/dist/cjs/hooks/useField/useField.cjs.map +1 -1
  57. package/dist/cjs/hooks/useFileDialog/useFileDialog.cjs.map +1 -1
  58. package/dist/cjs/hooks/useFocus/useFocus.cjs +1 -1
  59. package/dist/cjs/hooks/useFocus/useFocus.cjs.map +1 -1
  60. package/dist/cjs/hooks/useFps/useFps.cjs.map +1 -1
  61. package/dist/cjs/hooks/useFul/useFul.cjs.map +1 -1
  62. package/dist/cjs/hooks/useFullscreen/useFullscreen.cjs.map +1 -1
  63. package/dist/cjs/hooks/useGamepad/useGamepad.cjs +1 -1
  64. package/dist/cjs/hooks/useGamepad/useGamepad.cjs.map +1 -1
  65. package/dist/cjs/hooks/useGeolocation/useGeolocation.cjs.map +1 -1
  66. package/dist/cjs/hooks/useHash/useHash.cjs.map +1 -1
  67. package/dist/cjs/hooks/useHotkeys/useHotkeys.cjs.map +1 -1
  68. package/dist/cjs/hooks/useHover/useHover.cjs +1 -1
  69. package/dist/cjs/hooks/useHover/useHover.cjs.map +1 -1
  70. package/dist/cjs/hooks/useIdle/useIdle.cjs.map +1 -1
  71. package/dist/cjs/hooks/useImage/useImage.cjs.map +1 -1
  72. package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs.map +1 -1
  73. package/dist/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs +1 -1
  74. package/dist/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs.map +1 -1
  75. package/dist/cjs/hooks/useInterval/useInterval.cjs.map +1 -1
  76. package/dist/cjs/hooks/useIsFirstRender/useIsFirstRender.cjs.map +1 -1
  77. package/dist/cjs/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs.map +1 -1
  78. package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs.map +1 -1
  79. package/dist/cjs/hooks/useKeyPressEvent/useKeyPressEvent.cjs.map +1 -1
  80. package/dist/cjs/hooks/useKeyboard/useKeyboard.cjs.map +1 -1
  81. package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs.map +1 -1
  82. package/dist/cjs/hooks/useLastChanged/useLastChanged.cjs.map +1 -1
  83. package/dist/cjs/hooks/useLatest/useLatest.cjs.map +1 -1
  84. package/dist/cjs/hooks/useLess/useLess.cjs.map +1 -1
  85. package/dist/cjs/hooks/useList/useList.cjs.map +1 -1
  86. package/dist/cjs/hooks/useLocalStorage/useLocalStorage.cjs.map +1 -1
  87. package/dist/cjs/hooks/useLockCallback/useLockCallback.cjs.map +1 -1
  88. package/dist/cjs/hooks/useLockScroll/useLockScroll.cjs.map +1 -1
  89. package/dist/cjs/hooks/useLogger/useLogger.cjs.map +1 -1
  90. package/dist/cjs/hooks/useLongPress/useLongPress.cjs.map +1 -1
  91. package/dist/cjs/hooks/useMap/useMap.cjs.map +1 -1
  92. package/dist/cjs/hooks/useMeasure/useMeasure.cjs.map +1 -1
  93. package/dist/cjs/hooks/useMediaControls/useMediaControls.cjs.map +1 -1
  94. package/dist/cjs/hooks/useMediaQuery/useMediaQuery.cjs.map +1 -1
  95. package/dist/cjs/hooks/useMemory/useMemory.cjs +1 -1
  96. package/dist/cjs/hooks/useMemory/useMemory.cjs.map +1 -1
  97. package/dist/cjs/hooks/useMergedRef/useMergedRef.cjs +2 -0
  98. package/dist/cjs/hooks/useMergedRef/useMergedRef.cjs.map +1 -0
  99. package/dist/cjs/hooks/useMount/useMount.cjs.map +1 -1
  100. package/dist/cjs/hooks/useMouse/useMouse.cjs.map +1 -1
  101. package/dist/cjs/hooks/useMutation/useMutation.cjs +1 -1
  102. package/dist/cjs/hooks/useMutation/useMutation.cjs.map +1 -1
  103. package/dist/cjs/hooks/useMutationObserver/useMutationObserver.cjs +1 -1
  104. package/dist/cjs/hooks/useMutationObserver/useMutationObserver.cjs.map +1 -1
  105. package/dist/cjs/hooks/useNetwork/useNetwork.cjs.map +1 -1
  106. package/dist/cjs/hooks/useOffsetPagination/useOffsetPagination.cjs.map +1 -1
  107. package/dist/cjs/hooks/useOnce/useOnce.cjs.map +1 -1
  108. package/dist/cjs/hooks/useOnline/useOnline.cjs.map +1 -1
  109. package/dist/cjs/hooks/useOperatingSystem/useOperatingSystem.cjs.map +1 -1
  110. package/dist/cjs/hooks/useOptimistic/useOptimistic.cjs.map +1 -1
  111. package/dist/cjs/hooks/useOrientation/useOrientation.cjs +1 -1
  112. package/dist/cjs/hooks/useOrientation/useOrientation.cjs.map +1 -1
  113. package/dist/cjs/hooks/useOtpCredential/useOtpCredential.cjs +1 -1
  114. package/dist/cjs/hooks/useOtpCredential/useOtpCredential.cjs.map +1 -1
  115. package/dist/cjs/hooks/usePageLeave/usePageLeave.cjs.map +1 -1
  116. package/dist/cjs/hooks/usePaint/usePaint.cjs.map +1 -1
  117. package/dist/cjs/hooks/useParallax/useParallax.cjs.map +1 -1
  118. package/dist/cjs/hooks/usePerformanceObserver/usePerformanceObserver.cjs +1 -1
  119. package/dist/cjs/hooks/usePerformanceObserver/usePerformanceObserver.cjs.map +1 -1
  120. package/dist/cjs/hooks/usePermission/usePermission.cjs +1 -1
  121. package/dist/cjs/hooks/usePermission/usePermission.cjs.map +1 -1
  122. package/dist/cjs/hooks/usePictureInPicture/usePictureInPicture.cjs +1 -1
  123. package/dist/cjs/hooks/usePictureInPicture/usePictureInPicture.cjs.map +1 -1
  124. package/dist/cjs/hooks/usePointerLock/usePointerLock.cjs +1 -1
  125. package/dist/cjs/hooks/usePointerLock/usePointerLock.cjs.map +1 -1
  126. package/dist/cjs/hooks/usePostMessage/usePostMessage.cjs.map +1 -1
  127. package/dist/cjs/hooks/usePreferredColorScheme/usePreferredColorScheme.cjs.map +1 -1
  128. package/dist/cjs/hooks/usePreferredContrast/usePreferredContrast.cjs.map +1 -1
  129. package/dist/cjs/hooks/usePreferredDark/usePreferredDark.cjs.map +1 -1
  130. package/dist/cjs/hooks/usePreferredLanguages/usePreferredLanguages.cjs.map +1 -1
  131. package/dist/cjs/hooks/usePreferredReducedMotion/usePreferredReducedMotion.cjs.map +1 -1
  132. package/dist/cjs/hooks/usePrevious/usePrevious.cjs.map +1 -1
  133. package/dist/cjs/hooks/useQuery/useQuery.cjs.map +1 -1
  134. package/dist/cjs/hooks/useQueue/useQueue.cjs.map +1 -1
  135. package/dist/cjs/hooks/useRaf/useRaf.cjs.map +1 -1
  136. package/dist/cjs/hooks/useRafState/useRafState.cjs.map +1 -1
  137. package/dist/cjs/hooks/useRefState/useRefState.cjs.map +1 -1
  138. package/dist/cjs/hooks/useRenderCount/useRenderCount.cjs.map +1 -1
  139. package/dist/cjs/hooks/useRenderInfo/useRenderInfo.cjs.map +1 -1
  140. package/dist/cjs/hooks/useRerender/useRerender.cjs.map +1 -1
  141. package/dist/cjs/hooks/useResizeObserver/useResizeObserver.cjs +1 -1
  142. package/dist/cjs/hooks/useResizeObserver/useResizeObserver.cjs.map +1 -1
  143. package/dist/cjs/hooks/useRightClick/useRightClick.cjs.map +1 -1
  144. package/dist/cjs/hooks/useScript/useScript.cjs.map +1 -1
  145. package/dist/cjs/hooks/useScroll/useScroll.cjs.map +1 -1
  146. package/dist/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs.map +1 -1
  147. package/dist/cjs/hooks/useScrollTo/useScrollTo.cjs.map +1 -1
  148. package/dist/cjs/hooks/useSessionStorage/useSessionStorage.cjs.map +1 -1
  149. package/dist/cjs/hooks/useSet/useSet.cjs.map +1 -1
  150. package/dist/cjs/hooks/useShallowEffect/useShallowEffect.cjs.map +1 -1
  151. package/dist/cjs/hooks/useShare/useShare.cjs +1 -1
  152. package/dist/cjs/hooks/useShare/useShare.cjs.map +1 -1
  153. package/dist/cjs/hooks/useSpeechRecognition/useSpeechRecognition.cjs.map +1 -1
  154. package/dist/cjs/hooks/useSpeechSynthesis/useSpeechSynthesis.cjs +1 -1
  155. package/dist/cjs/hooks/useSpeechSynthesis/useSpeechSynthesis.cjs.map +1 -1
  156. package/dist/cjs/hooks/useStateHistory/useStateHistory.cjs.map +1 -1
  157. package/dist/cjs/hooks/useStep/useStep.cjs.map +1 -1
  158. package/dist/cjs/hooks/useSticky/useSticky.cjs.map +1 -1
  159. package/dist/cjs/hooks/useStopwatch/useStopwatch.cjs.map +1 -1
  160. package/dist/cjs/hooks/useStorage/useStorage.cjs.map +1 -1
  161. package/dist/cjs/hooks/useTextDirection/useTextDirection.cjs +1 -1
  162. package/dist/cjs/hooks/useTextDirection/useTextDirection.cjs.map +1 -1
  163. package/dist/cjs/hooks/useTextSelection/useTextSelection.cjs.map +1 -1
  164. package/dist/cjs/hooks/useThrottleCallback/useThrottleCallback.cjs.map +1 -1
  165. package/dist/cjs/hooks/useThrottleState/useThrottleState.cjs +2 -0
  166. package/dist/cjs/hooks/useThrottleState/useThrottleState.cjs.map +1 -0
  167. package/dist/cjs/hooks/useThrottleValue/useThrottleValue.cjs.map +1 -1
  168. package/dist/cjs/hooks/useTime/useTime.cjs.map +1 -1
  169. package/dist/cjs/hooks/useTimeout/useTimeout.cjs.map +1 -1
  170. package/dist/cjs/hooks/useTimer/useTimer.cjs.map +1 -1
  171. package/dist/cjs/hooks/useToggle/useToggle.cjs.map +1 -1
  172. package/dist/cjs/hooks/useUnmount/useUnmount.cjs.map +1 -1
  173. package/dist/cjs/hooks/useUrlSearchParam/useUrlSearchParam.cjs.map +1 -1
  174. package/dist/cjs/hooks/useUrlSearchParams/useUrlSearchParams.cjs.map +1 -1
  175. package/dist/cjs/hooks/useVibrate/useVibrate.cjs +1 -1
  176. package/dist/cjs/hooks/useVibrate/useVibrate.cjs.map +1 -1
  177. package/dist/cjs/hooks/useVirtualKeyboard/useVirtualKeyboard.cjs +1 -1
  178. package/dist/cjs/hooks/useVirtualKeyboard/useVirtualKeyboard.cjs.map +1 -1
  179. package/dist/cjs/hooks/useWakeLock/useWakeLock.cjs +1 -1
  180. package/dist/cjs/hooks/useWakeLock/useWakeLock.cjs.map +1 -1
  181. package/dist/cjs/hooks/useWebSocket/useWebSocket.cjs.map +1 -1
  182. package/dist/cjs/hooks/useWindowEvent/useWindowEvent.cjs.map +1 -1
  183. package/dist/cjs/hooks/useWindowFocus/useWindowFocus.cjs.map +1 -1
  184. package/dist/cjs/hooks/useWindowScroll/useWindowScroll.cjs.map +1 -1
  185. package/dist/cjs/hooks/useWindowSize/useWindowSize.cjs.map +1 -1
  186. package/dist/cjs/hooks/useWizard/useWizard.cjs.map +1 -1
  187. package/dist/cjs/index.cjs +1 -1
  188. package/dist/esm/helpers/createContext/createContext.mjs.map +1 -1
  189. package/dist/esm/helpers/createEventEmitter/createEventEmitter.mjs.map +1 -1
  190. package/dist/esm/helpers/createReactiveContext/createReactiveContext.mjs.map +1 -1
  191. package/dist/esm/helpers/createStore/createStore.mjs.map +1 -1
  192. package/dist/esm/hooks/useActiveElement/useActiveElement.mjs.map +1 -1
  193. package/dist/esm/hooks/useAsync/useAsync.mjs.map +1 -1
  194. package/dist/esm/hooks/useAudio/useAudio.mjs.map +1 -1
  195. package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs +25 -31
  196. package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs.map +1 -1
  197. package/dist/esm/hooks/useBattery/useBattery.mjs +1 -1
  198. package/dist/esm/hooks/useBattery/useBattery.mjs.map +1 -1
  199. package/dist/esm/hooks/useBluetooth/useBluetooth.mjs +16 -18
  200. package/dist/esm/hooks/useBluetooth/useBluetooth.mjs.map +1 -1
  201. package/dist/esm/hooks/useBoolean/useBoolean.mjs.map +1 -1
  202. package/dist/esm/hooks/useBreakpoints/useBreakpoints.mjs.map +1 -1
  203. package/dist/esm/hooks/useBroadcastChannel/useBroadcastChannel.mjs +8 -8
  204. package/dist/esm/hooks/useBroadcastChannel/useBroadcastChannel.mjs.map +1 -1
  205. package/dist/esm/hooks/useBrowserLanguage/useBrowserLanguage.mjs.map +1 -1
  206. package/dist/esm/hooks/useClickOutside/useClickOutside.mjs.map +1 -1
  207. package/dist/esm/hooks/useClipboard/useClipboard.mjs.map +1 -1
  208. package/dist/esm/hooks/useConst/useConst.mjs.map +1 -1
  209. package/dist/esm/hooks/useCookie/useCookie.mjs.map +1 -1
  210. package/dist/esm/hooks/useCookies/useCookies.mjs.map +1 -1
  211. package/dist/esm/hooks/useCopy/useCopy.mjs.map +1 -1
  212. package/dist/esm/hooks/useCounter/useCounter.mjs.map +1 -1
  213. package/dist/esm/hooks/useCssVar/useCssVar.mjs.map +1 -1
  214. package/dist/esm/hooks/useDebounceCallback/useDebounceCallback.mjs.map +1 -1
  215. package/dist/esm/hooks/useDebounceState/useDebounceState.mjs +10 -0
  216. package/dist/esm/hooks/useDebounceState/useDebounceState.mjs.map +1 -0
  217. package/dist/esm/hooks/useDebounceValue/useDebounceValue.mjs.map +1 -1
  218. package/dist/esm/hooks/useDefault/useDefault.mjs.map +1 -1
  219. package/dist/esm/hooks/useDeviceMotion/useDeviceMotion.mjs.map +1 -1
  220. package/dist/esm/hooks/useDeviceOrientation/useDeviceOrientation.mjs +1 -1
  221. package/dist/esm/hooks/useDeviceOrientation/useDeviceOrientation.mjs.map +1 -1
  222. package/dist/esm/hooks/useDevicePixelRatio/useDevicePixelRatio.mjs +1 -1
  223. package/dist/esm/hooks/useDevicePixelRatio/useDevicePixelRatio.mjs.map +1 -1
  224. package/dist/esm/hooks/useDidUpdate/useDidUpdate.mjs.map +1 -1
  225. package/dist/esm/hooks/useDisclosure/useDisclosure.mjs.map +1 -1
  226. package/dist/esm/hooks/useDisplayMedia/useDisplayMedia.mjs.map +1 -1
  227. package/dist/esm/hooks/useDocumentEvent/useDocumentEvent.mjs.map +1 -1
  228. package/dist/esm/hooks/useDocumentTitle/useDocumentTitle.mjs.map +1 -1
  229. package/dist/esm/hooks/useDocumentVisibility/useDocumentVisibility.mjs.map +1 -1
  230. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs.map +1 -1
  231. package/dist/esm/hooks/useDropZone/useDropZone.mjs +12 -12
  232. package/dist/esm/hooks/useDropZone/useDropZone.mjs.map +1 -1
  233. package/dist/esm/hooks/useElementSize/useElementSize.mjs.map +1 -1
  234. package/dist/esm/hooks/useEvent/useEvent.mjs.map +1 -1
  235. package/dist/esm/hooks/useEventListener/useEventListener.mjs +15 -15
  236. package/dist/esm/hooks/useEventListener/useEventListener.mjs.map +1 -1
  237. package/dist/esm/hooks/useEventSource/useEventSource.mjs.map +1 -1
  238. package/dist/esm/hooks/useEyeDropper/useEyeDropper.mjs +3 -3
  239. package/dist/esm/hooks/useEyeDropper/useEyeDropper.mjs.map +1 -1
  240. package/dist/esm/hooks/useFavicon/useFavicon.mjs +12 -15
  241. package/dist/esm/hooks/useFavicon/useFavicon.mjs.map +1 -1
  242. package/dist/esm/hooks/useField/useField.mjs.map +1 -1
  243. package/dist/esm/hooks/useFileDialog/useFileDialog.mjs.map +1 -1
  244. package/dist/esm/hooks/useFocus/useFocus.mjs +26 -22
  245. package/dist/esm/hooks/useFocus/useFocus.mjs.map +1 -1
  246. package/dist/esm/hooks/useFps/useFps.mjs.map +1 -1
  247. package/dist/esm/hooks/useFul/useFul.mjs.map +1 -1
  248. package/dist/esm/hooks/useFullscreen/useFullscreen.mjs.map +1 -1
  249. package/dist/esm/hooks/useGamepad/useGamepad.mjs +13 -13
  250. package/dist/esm/hooks/useGamepad/useGamepad.mjs.map +1 -1
  251. package/dist/esm/hooks/useGeolocation/useGeolocation.mjs.map +1 -1
  252. package/dist/esm/hooks/useHash/useHash.mjs.map +1 -1
  253. package/dist/esm/hooks/useHotkeys/useHotkeys.mjs.map +1 -1
  254. package/dist/esm/hooks/useHover/useHover.mjs +15 -15
  255. package/dist/esm/hooks/useHover/useHover.mjs.map +1 -1
  256. package/dist/esm/hooks/useIdle/useIdle.mjs.map +1 -1
  257. package/dist/esm/hooks/useImage/useImage.mjs.map +1 -1
  258. package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs.map +1 -1
  259. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.mjs +19 -18
  260. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.mjs.map +1 -1
  261. package/dist/esm/hooks/useInterval/useInterval.mjs.map +1 -1
  262. package/dist/esm/hooks/useIsFirstRender/useIsFirstRender.mjs.map +1 -1
  263. package/dist/esm/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs.map +1 -1
  264. package/dist/esm/hooks/useKeyPress/useKeyPress.mjs.map +1 -1
  265. package/dist/esm/hooks/useKeyPressEvent/useKeyPressEvent.mjs.map +1 -1
  266. package/dist/esm/hooks/useKeyboard/useKeyboard.mjs.map +1 -1
  267. package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs.map +1 -1
  268. package/dist/esm/hooks/useLastChanged/useLastChanged.mjs.map +1 -1
  269. package/dist/esm/hooks/useLatest/useLatest.mjs.map +1 -1
  270. package/dist/esm/hooks/useLess/useLess.mjs.map +1 -1
  271. package/dist/esm/hooks/useList/useList.mjs.map +1 -1
  272. package/dist/esm/hooks/useLocalStorage/useLocalStorage.mjs.map +1 -1
  273. package/dist/esm/hooks/useLockCallback/useLockCallback.mjs.map +1 -1
  274. package/dist/esm/hooks/useLockScroll/useLockScroll.mjs.map +1 -1
  275. package/dist/esm/hooks/useLogger/useLogger.mjs.map +1 -1
  276. package/dist/esm/hooks/useLongPress/useLongPress.mjs.map +1 -1
  277. package/dist/esm/hooks/useMap/useMap.mjs.map +1 -1
  278. package/dist/esm/hooks/useMeasure/useMeasure.mjs.map +1 -1
  279. package/dist/esm/hooks/useMediaControls/useMediaControls.mjs.map +1 -1
  280. package/dist/esm/hooks/useMediaQuery/useMediaQuery.mjs.map +1 -1
  281. package/dist/esm/hooks/useMemory/useMemory.mjs +4 -4
  282. package/dist/esm/hooks/useMemory/useMemory.mjs.map +1 -1
  283. package/dist/esm/hooks/useMergedRef/useMergedRef.mjs +25 -0
  284. package/dist/esm/hooks/useMergedRef/useMergedRef.mjs.map +1 -0
  285. package/dist/esm/hooks/useMount/useMount.mjs.map +1 -1
  286. package/dist/esm/hooks/useMouse/useMouse.mjs.map +1 -1
  287. package/dist/esm/hooks/useMutation/useMutation.mjs +18 -18
  288. package/dist/esm/hooks/useMutation/useMutation.mjs.map +1 -1
  289. package/dist/esm/hooks/useMutationObserver/useMutationObserver.mjs +28 -20
  290. package/dist/esm/hooks/useMutationObserver/useMutationObserver.mjs.map +1 -1
  291. package/dist/esm/hooks/useNetwork/useNetwork.mjs.map +1 -1
  292. package/dist/esm/hooks/useOffsetPagination/useOffsetPagination.mjs.map +1 -1
  293. package/dist/esm/hooks/useOnce/useOnce.mjs.map +1 -1
  294. package/dist/esm/hooks/useOnline/useOnline.mjs.map +1 -1
  295. package/dist/esm/hooks/useOperatingSystem/useOperatingSystem.mjs.map +1 -1
  296. package/dist/esm/hooks/useOptimistic/useOptimistic.mjs.map +1 -1
  297. package/dist/esm/hooks/useOrientation/useOrientation.mjs +9 -9
  298. package/dist/esm/hooks/useOrientation/useOrientation.mjs.map +1 -1
  299. package/dist/esm/hooks/useOtpCredential/useOtpCredential.mjs +3 -3
  300. package/dist/esm/hooks/useOtpCredential/useOtpCredential.mjs.map +1 -1
  301. package/dist/esm/hooks/usePageLeave/usePageLeave.mjs.map +1 -1
  302. package/dist/esm/hooks/usePaint/usePaint.mjs.map +1 -1
  303. package/dist/esm/hooks/useParallax/useParallax.mjs.map +1 -1
  304. package/dist/esm/hooks/usePerformanceObserver/usePerformanceObserver.mjs +11 -11
  305. package/dist/esm/hooks/usePerformanceObserver/usePerformanceObserver.mjs.map +1 -1
  306. package/dist/esm/hooks/usePermission/usePermission.mjs +4 -4
  307. package/dist/esm/hooks/usePermission/usePermission.mjs.map +1 -1
  308. package/dist/esm/hooks/usePictureInPicture/usePictureInPicture.mjs +17 -17
  309. package/dist/esm/hooks/usePictureInPicture/usePictureInPicture.mjs.map +1 -1
  310. package/dist/esm/hooks/usePointerLock/usePointerLock.mjs +3 -3
  311. package/dist/esm/hooks/usePointerLock/usePointerLock.mjs.map +1 -1
  312. package/dist/esm/hooks/usePostMessage/usePostMessage.mjs.map +1 -1
  313. package/dist/esm/hooks/usePreferredColorScheme/usePreferredColorScheme.mjs.map +1 -1
  314. package/dist/esm/hooks/usePreferredContrast/usePreferredContrast.mjs.map +1 -1
  315. package/dist/esm/hooks/usePreferredDark/usePreferredDark.mjs.map +1 -1
  316. package/dist/esm/hooks/usePreferredLanguages/usePreferredLanguages.mjs.map +1 -1
  317. package/dist/esm/hooks/usePreferredReducedMotion/usePreferredReducedMotion.mjs.map +1 -1
  318. package/dist/esm/hooks/usePrevious/usePrevious.mjs.map +1 -1
  319. package/dist/esm/hooks/useQuery/useQuery.mjs.map +1 -1
  320. package/dist/esm/hooks/useQueue/useQueue.mjs.map +1 -1
  321. package/dist/esm/hooks/useRaf/useRaf.mjs.map +1 -1
  322. package/dist/esm/hooks/useRafState/useRafState.mjs.map +1 -1
  323. package/dist/esm/hooks/useRefState/useRefState.mjs.map +1 -1
  324. package/dist/esm/hooks/useRenderCount/useRenderCount.mjs.map +1 -1
  325. package/dist/esm/hooks/useRenderInfo/useRenderInfo.mjs.map +1 -1
  326. package/dist/esm/hooks/useRerender/useRerender.mjs.map +1 -1
  327. package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs +17 -16
  328. package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs.map +1 -1
  329. package/dist/esm/hooks/useRightClick/useRightClick.mjs.map +1 -1
  330. package/dist/esm/hooks/useScript/useScript.mjs.map +1 -1
  331. package/dist/esm/hooks/useScroll/useScroll.mjs.map +1 -1
  332. package/dist/esm/hooks/useScrollIntoView/useScrollIntoView.mjs.map +1 -1
  333. package/dist/esm/hooks/useScrollTo/useScrollTo.mjs.map +1 -1
  334. package/dist/esm/hooks/useSessionStorage/useSessionStorage.mjs.map +1 -1
  335. package/dist/esm/hooks/useSet/useSet.mjs.map +1 -1
  336. package/dist/esm/hooks/useShallowEffect/useShallowEffect.mjs.map +1 -1
  337. package/dist/esm/hooks/useShare/useShare.mjs +1 -1
  338. package/dist/esm/hooks/useShare/useShare.mjs.map +1 -1
  339. package/dist/esm/hooks/useSpeechRecognition/useSpeechRecognition.mjs.map +1 -1
  340. package/dist/esm/hooks/useSpeechSynthesis/useSpeechSynthesis.mjs +11 -11
  341. package/dist/esm/hooks/useSpeechSynthesis/useSpeechSynthesis.mjs.map +1 -1
  342. package/dist/esm/hooks/useStateHistory/useStateHistory.mjs.map +1 -1
  343. package/dist/esm/hooks/useStep/useStep.mjs.map +1 -1
  344. package/dist/esm/hooks/useSticky/useSticky.mjs.map +1 -1
  345. package/dist/esm/hooks/useStopwatch/useStopwatch.mjs.map +1 -1
  346. package/dist/esm/hooks/useStorage/useStorage.mjs.map +1 -1
  347. package/dist/esm/hooks/useTextDirection/useTextDirection.mjs +14 -14
  348. package/dist/esm/hooks/useTextDirection/useTextDirection.mjs.map +1 -1
  349. package/dist/esm/hooks/useTextSelection/useTextSelection.mjs.map +1 -1
  350. package/dist/esm/hooks/useThrottleCallback/useThrottleCallback.mjs.map +1 -1
  351. package/dist/esm/hooks/useThrottleState/useThrottleState.mjs +10 -0
  352. package/dist/esm/hooks/useThrottleState/useThrottleState.mjs.map +1 -0
  353. package/dist/esm/hooks/useThrottleValue/useThrottleValue.mjs.map +1 -1
  354. package/dist/esm/hooks/useTime/useTime.mjs.map +1 -1
  355. package/dist/esm/hooks/useTimeout/useTimeout.mjs.map +1 -1
  356. package/dist/esm/hooks/useTimer/useTimer.mjs.map +1 -1
  357. package/dist/esm/hooks/useToggle/useToggle.mjs.map +1 -1
  358. package/dist/esm/hooks/useUnmount/useUnmount.mjs.map +1 -1
  359. package/dist/esm/hooks/useUrlSearchParam/useUrlSearchParam.mjs.map +1 -1
  360. package/dist/esm/hooks/useUrlSearchParams/useUrlSearchParams.mjs.map +1 -1
  361. package/dist/esm/hooks/useVibrate/useVibrate.mjs +12 -12
  362. package/dist/esm/hooks/useVibrate/useVibrate.mjs.map +1 -1
  363. package/dist/esm/hooks/useVirtualKeyboard/useVirtualKeyboard.mjs +7 -7
  364. package/dist/esm/hooks/useVirtualKeyboard/useVirtualKeyboard.mjs.map +1 -1
  365. package/dist/esm/hooks/useWakeLock/useWakeLock.mjs +1 -1
  366. package/dist/esm/hooks/useWakeLock/useWakeLock.mjs.map +1 -1
  367. package/dist/esm/hooks/useWebSocket/useWebSocket.mjs.map +1 -1
  368. package/dist/esm/hooks/useWindowEvent/useWindowEvent.mjs.map +1 -1
  369. package/dist/esm/hooks/useWindowFocus/useWindowFocus.mjs.map +1 -1
  370. package/dist/esm/hooks/useWindowScroll/useWindowScroll.mjs.map +1 -1
  371. package/dist/esm/hooks/useWindowSize/useWindowSize.mjs.map +1 -1
  372. package/dist/esm/hooks/useWizard/useWizard.mjs.map +1 -1
  373. package/dist/esm/index.mjs +147 -139
  374. package/dist/esm/index.mjs.map +1 -1
  375. package/dist/types/helpers/createContext/createContext.d.ts +1 -0
  376. package/dist/types/helpers/createEventEmitter/createEventEmitter.d.ts +1 -0
  377. package/dist/types/helpers/createReactiveContext/createReactiveContext.d.ts +1 -0
  378. package/dist/types/helpers/createStore/createStore.d.ts +1 -0
  379. package/dist/types/hooks/state.d.ts +1 -0
  380. package/dist/types/hooks/useActiveElement/useActiveElement.d.ts +1 -0
  381. package/dist/types/hooks/useAsync/useAsync.d.ts +1 -0
  382. package/dist/types/hooks/useAudio/useAudio.d.ts +2 -1
  383. package/dist/types/hooks/useAutoScroll/useAutoScroll.d.ts +1 -0
  384. package/dist/types/hooks/useBattery/useBattery.d.ts +1 -0
  385. package/dist/types/hooks/useBluetooth/useBluetooth.d.ts +1 -0
  386. package/dist/types/hooks/useBoolean/useBoolean.d.ts +2 -1
  387. package/dist/types/hooks/useBreakpoints/useBreakpoints.d.ts +1 -0
  388. package/dist/types/hooks/useBroadcastChannel/useBroadcastChannel.d.ts +1 -0
  389. package/dist/types/hooks/useBrowserLanguage/useBrowserLanguage.d.ts +2 -1
  390. package/dist/types/hooks/useClickOutside/useClickOutside.d.ts +2 -1
  391. package/dist/types/hooks/useClipboard/useClipboard.d.ts +2 -1
  392. package/dist/types/hooks/useConst/useConst.d.ts +2 -1
  393. package/dist/types/hooks/useCookie/useCookie.d.ts +2 -1
  394. package/dist/types/hooks/useCookies/useCookies.d.ts +2 -1
  395. package/dist/types/hooks/useCopy/useCopy.d.ts +2 -1
  396. package/dist/types/hooks/useCounter/useCounter.d.ts +2 -1
  397. package/dist/types/hooks/useCssVar/useCssVar.d.ts +2 -1
  398. package/dist/types/hooks/useDebounceCallback/useDebounceCallback.d.ts +1 -0
  399. package/dist/types/hooks/useDebounceState/useDebounceState.d.ts +15 -0
  400. package/dist/types/hooks/useDebounceValue/useDebounceValue.d.ts +2 -1
  401. package/dist/types/hooks/useDefault/useDefault.d.ts +2 -1
  402. package/dist/types/hooks/useDeviceMotion/useDeviceMotion.d.ts +2 -1
  403. package/dist/types/hooks/useDeviceOrientation/useDeviceOrientation.d.ts +1 -0
  404. package/dist/types/hooks/useDevicePixelRatio/useDevicePixelRatio.d.ts +1 -0
  405. package/dist/types/hooks/useDidUpdate/useDidUpdate.d.ts +2 -1
  406. package/dist/types/hooks/useDisclosure/useDisclosure.d.ts +2 -1
  407. package/dist/types/hooks/useDisplayMedia/useDisplayMedia.d.ts +1 -0
  408. package/dist/types/hooks/useDocumentEvent/useDocumentEvent.d.ts +2 -1
  409. package/dist/types/hooks/useDocumentTitle/useDocumentTitle.d.ts +2 -1
  410. package/dist/types/hooks/useDocumentVisibility/useDocumentVisibility.d.ts +2 -1
  411. package/dist/types/hooks/useDoubleClick/useDoubleClick.d.ts +2 -1
  412. package/dist/types/hooks/useDropZone/useDropZone.d.ts +2 -1
  413. package/dist/types/hooks/useElementSize/useElementSize.d.ts +2 -1
  414. package/dist/types/hooks/useEvent/useEvent.d.ts +2 -1
  415. package/dist/types/hooks/useEventListener/useEventListener.d.ts +5 -2
  416. package/dist/types/hooks/useEventSource/useEventSource.d.ts +1 -0
  417. package/dist/types/hooks/useEyeDropper/useEyeDropper.d.ts +1 -0
  418. package/dist/types/hooks/useFavicon/useFavicon.d.ts +2 -1
  419. package/dist/types/hooks/useField/useField.d.ts +1 -0
  420. package/dist/types/hooks/useFileDialog/useFileDialog.d.ts +1 -0
  421. package/dist/types/hooks/useFocus/useFocus.d.ts +25 -0
  422. package/dist/types/hooks/useFps/useFps.d.ts +1 -0
  423. package/dist/types/hooks/useFul/useFul.d.ts +1 -0
  424. package/dist/types/hooks/useFullscreen/useFullscreen.d.ts +1 -0
  425. package/dist/types/hooks/useGamepad/useGamepad.d.ts +1 -0
  426. package/dist/types/hooks/useGeolocation/useGeolocation.d.ts +1 -0
  427. package/dist/types/hooks/useHash/useHash.d.ts +1 -0
  428. package/dist/types/hooks/useHotkeys/useHotkeys.d.ts +1 -0
  429. package/dist/types/hooks/useHover/useHover.d.ts +3 -0
  430. package/dist/types/hooks/useIdle/useIdle.d.ts +1 -0
  431. package/dist/types/hooks/useImage/useImage.d.ts +1 -0
  432. package/dist/types/hooks/useInfiniteScroll/useInfiniteScroll.d.ts +1 -0
  433. package/dist/types/hooks/useIntersectionObserver/useIntersectionObserver.d.ts +15 -6
  434. package/dist/types/hooks/useInterval/useInterval.d.ts +1 -0
  435. package/dist/types/hooks/useIsFirstRender/useIsFirstRender.d.ts +1 -0
  436. package/dist/types/hooks/useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.d.ts +1 -0
  437. package/dist/types/hooks/useKeyPress/useKeyPress.d.ts +1 -0
  438. package/dist/types/hooks/useKeyPressEvent/useKeyPressEvent.d.ts +1 -0
  439. package/dist/types/hooks/useKeyboard/useKeyboard.d.ts +1 -0
  440. package/dist/types/hooks/useKeysPressed/useKeysPressed.d.ts +1 -2
  441. package/dist/types/hooks/useLastChanged/useLastChanged.d.ts +1 -0
  442. package/dist/types/hooks/useLatest/useLatest.d.ts +1 -0
  443. package/dist/types/hooks/useLess/useLess.d.ts +1 -0
  444. package/dist/types/hooks/useList/useList.d.ts +1 -0
  445. package/dist/types/hooks/useLocalStorage/useLocalStorage.d.ts +1 -0
  446. package/dist/types/hooks/useLockCallback/useLockCallback.d.ts +1 -0
  447. package/dist/types/hooks/useLockScroll/useLockScroll.d.ts +1 -1
  448. package/dist/types/hooks/useLogger/useLogger.d.ts +1 -0
  449. package/dist/types/hooks/useLongPress/useLongPress.d.ts +1 -0
  450. package/dist/types/hooks/useMap/useMap.d.ts +1 -0
  451. package/dist/types/hooks/useMeasure/useMeasure.d.ts +1 -0
  452. package/dist/types/hooks/useMediaControls/useMediaControls.d.ts +1 -0
  453. package/dist/types/hooks/useMediaQuery/useMediaQuery.d.ts +1 -0
  454. package/dist/types/hooks/useMemory/useMemory.d.ts +1 -0
  455. package/dist/types/hooks/useMergedRef/useMergedRef.d.ts +17 -0
  456. package/dist/types/hooks/useMount/useMount.d.ts +1 -0
  457. package/dist/types/hooks/useMouse/useMouse.d.ts +1 -0
  458. package/dist/types/hooks/useMutation/useMutation.d.ts +1 -0
  459. package/dist/types/hooks/useMutationObserver/useMutationObserver.d.ts +43 -26
  460. package/dist/types/hooks/useNetwork/useNetwork.d.ts +1 -0
  461. package/dist/types/hooks/useObject/useObject.d.ts +1 -0
  462. package/dist/types/hooks/useOffsetPagination/useOffsetPagination.d.ts +1 -0
  463. package/dist/types/hooks/useOnce/useOnce.d.ts +1 -0
  464. package/dist/types/hooks/useOnline/useOnline.d.ts +1 -0
  465. package/dist/types/hooks/useOperatingSystem/useOperatingSystem.d.ts +1 -0
  466. package/dist/types/hooks/useOptimistic/useOptimistic.d.ts +1 -0
  467. package/dist/types/hooks/useOrientation/useOrientation.d.ts +2 -1
  468. package/dist/types/hooks/useOtpCredential/useOtpCredential.d.ts +1 -0
  469. package/dist/types/hooks/usePageLeave/usePageLeave.d.ts +1 -0
  470. package/dist/types/hooks/usePaint/usePaint.d.ts +1 -0
  471. package/dist/types/hooks/useParallax/useParallax.d.ts +1 -0
  472. package/dist/types/hooks/usePerformanceObserver/usePerformanceObserver.d.ts +1 -0
  473. package/dist/types/hooks/usePermission/usePermission.d.ts +1 -0
  474. package/dist/types/hooks/usePictureInPicture/usePictureInPicture.d.ts +1 -0
  475. package/dist/types/hooks/usePointerLock/usePointerLock.d.ts +1 -0
  476. package/dist/types/hooks/usePostMessage/usePostMessage.d.ts +1 -0
  477. package/dist/types/hooks/usePreferredColorScheme/usePreferredColorScheme.d.ts +1 -0
  478. package/dist/types/hooks/usePreferredContrast/usePreferredContrast.d.ts +1 -0
  479. package/dist/types/hooks/usePreferredDark/usePreferredDark.d.ts +1 -0
  480. package/dist/types/hooks/usePreferredLanguages/usePreferredLanguages.d.ts +1 -0
  481. package/dist/types/hooks/usePreferredReducedMotion/usePreferredReducedMotion.d.ts +1 -0
  482. package/dist/types/hooks/usePrevious/usePrevious.d.ts +1 -0
  483. package/dist/types/hooks/useQuery/useQuery.d.ts +1 -0
  484. package/dist/types/hooks/useQueue/useQueue.d.ts +1 -0
  485. package/dist/types/hooks/useRaf/useRaf.d.ts +1 -0
  486. package/dist/types/hooks/useRafState/useRafState.d.ts +3 -0
  487. package/dist/types/hooks/useRefState/useRefState.d.ts +1 -0
  488. package/dist/types/hooks/useRenderCount/useRenderCount.d.ts +1 -0
  489. package/dist/types/hooks/useRenderInfo/useRenderInfo.d.ts +1 -0
  490. package/dist/types/hooks/useRerender/useRerender.d.ts +1 -0
  491. package/dist/types/hooks/useResizeObserver/useResizeObserver.d.ts +55 -31
  492. package/dist/types/hooks/useRightClick/useRightClick.d.ts +1 -0
  493. package/dist/types/hooks/useScript/useScript.d.ts +1 -0
  494. package/dist/types/hooks/useScroll/useScroll.d.ts +1 -0
  495. package/dist/types/hooks/useScrollIntoView/useScrollIntoView.d.ts +1 -0
  496. package/dist/types/hooks/useScrollTo/useScrollTo.d.ts +1 -0
  497. package/dist/types/hooks/useSessionStorage/useSessionStorage.d.ts +1 -0
  498. package/dist/types/hooks/useSet/useSet.d.ts +1 -0
  499. package/dist/types/hooks/useShallowEffect/useShallowEffect.d.ts +1 -0
  500. package/dist/types/hooks/useShare/useShare.d.ts +1 -0
  501. package/dist/types/hooks/useSpeechRecognition/useSpeechRecognition.d.ts +1 -0
  502. package/dist/types/hooks/useSpeechSynthesis/useSpeechSynthesis.d.ts +1 -0
  503. package/dist/types/hooks/useStateHistory/useStateHistory.d.ts +1 -0
  504. package/dist/types/hooks/useStep/useStep.d.ts +1 -0
  505. package/dist/types/hooks/useSticky/useSticky.d.ts +1 -0
  506. package/dist/types/hooks/useStopwatch/useStopwatch.d.ts +1 -0
  507. package/dist/types/hooks/useStorage/useStorage.d.ts +1 -0
  508. package/dist/types/hooks/useTextDirection/useTextDirection.d.ts +1 -0
  509. package/dist/types/hooks/useTextSelection/useTextSelection.d.ts +1 -0
  510. package/dist/types/hooks/useThrottleCallback/useThrottleCallback.d.ts +1 -0
  511. package/dist/types/hooks/useThrottleState/useThrottleState.d.ts +15 -0
  512. package/dist/types/hooks/useThrottleValue/useThrottleValue.d.ts +1 -0
  513. package/dist/types/hooks/useTime/useTime.d.ts +1 -0
  514. package/dist/types/hooks/useTimeout/useTimeout.d.ts +1 -0
  515. package/dist/types/hooks/useTimer/useTimer.d.ts +1 -0
  516. package/dist/types/hooks/useToggle/useToggle.d.ts +1 -0
  517. package/dist/types/hooks/useUnmount/useUnmount.d.ts +1 -0
  518. package/dist/types/hooks/useUrlSearchParam/useUrlSearchParam.d.ts +1 -0
  519. package/dist/types/hooks/useUrlSearchParams/useUrlSearchParams.d.ts +1 -0
  520. package/dist/types/hooks/useVibrate/useVibrate.d.ts +1 -0
  521. package/dist/types/hooks/useVirtualKeyboard/useVirtualKeyboard.d.ts +1 -0
  522. package/dist/types/hooks/useWakeLock/useWakeLock.d.ts +1 -0
  523. package/dist/types/hooks/useWebSocket/useWebSocket.d.ts +17 -0
  524. package/dist/types/hooks/useWindowEvent/useWindowEvent.d.ts +1 -0
  525. package/dist/types/hooks/useWindowFocus/useWindowFocus.d.ts +1 -0
  526. package/dist/types/hooks/useWindowScroll/useWindowScroll.d.ts +1 -0
  527. package/dist/types/hooks/useWindowSize/useWindowSize.d.ts +1 -0
  528. package/dist/types/hooks/useWizard/useWizard.d.ts +1 -0
  529. package/dist/types/hooks/utilities.d.ts +2 -0
  530. package/package.json +89 -89
package/README.md CHANGED
@@ -1,71 +1,71 @@
1
- <div align="center">
2
- <a href="https://reactuse.dev">
3
- <picture>
4
- <img alt="React Use logo" src="https://siberiacancode.github.io/reactuse/logo.svg" height="128">
5
- </picture>
6
- </a>
7
- <h1>React Use</h1>
8
-
9
- <a href="https://www.npmjs.com/package/@siberiacancode/reactuse"><img alt="NPM version" src="https://img.shields.io/npm/v/@siberiacancode/reactuse.svg?style=for-the-badge&labelColor=000000"></a>
10
- <a href="https://github.com/siberiacancode/reactuse/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/npm/l/@siberiacancode/reactuse.svg?style=for-the-badge&labelColor=000000"></a>
11
- <a href="https://github.com/siberiacancode/reactuse/discussions"><img alt="Join the community on GitHub" src="https://img.shields.io/badge/Join%20the%20community-blueviolet.svg?style=for-the-badge&logo=React&labelColor=000000&logoWidth=20"></a>
12
-
13
- </div>
14
-
15
- React Use delivers **production-ready hooks** that solve real-world problems. Built with **TypeScript-first** approach, **SSR compatibility**, and **tree-shaking optimization** - everything you need to build modern React applications. Improve your react applications with our library 📦 designed for comfort and speed.
16
-
17
- ## Documentation
18
-
19
- Visit https://siberiacancode.github.io/reactuse to view the full documentation.
20
-
21
- ## Getting Started
22
-
23
- ```bash
24
- npm install @siberiacancode/reactuse
25
- ```
26
-
27
- ```tsx
28
- import { useCounter } from '@siberiacancode/reactuse';
29
-
30
- const App = () => {
31
- const counter = useCounter(0);
32
-
33
- return (
34
- <div>
35
- <h1>Count: {counter.value}</h1>
36
- <button onClick={() => counter.inc()}>+1</button>
37
- <button onClick={() => counter.dec()}>-1</button>
38
- </div>
39
- );
40
- };
41
- ```
42
-
43
- ## CLI installation
44
-
45
- Use the CLI to add hooks to your project with [useverse](https://www.npmjs.com/package/useverse).
46
-
47
- ```bash
48
- npx useverse@latest init
49
- ```
50
-
51
- ```bash
52
- npx useverse@latest add [hook]
53
- ```
54
-
55
- You will be presented with a list of hooks to choose from:
56
-
57
- ```bash
58
- Which hooks would you like to add? › Space to select. A to toggle all.
59
- Enter to submit.
60
-
61
- ◯ useActiveElement
62
- ◯ useAsync
63
- ◯ useBattery
64
- ◯ useBluetooth
65
- ◯ useBoolean
66
- ◯ useBreakpoints
67
- ◯ useBrowserLanguage
68
- ◯ useClickOutside
69
- ◯ useClipboard
70
- ◯ useConst
71
- ```
1
+ <div align="center">
2
+ <a href="https://siberiacancode.github.io/reactuse/">
3
+ <picture>
4
+ <img alt="React Use logo" src="https://siberiacancode.github.io/reactuse/logo.svg" height="128">
5
+ </picture>
6
+ </a>
7
+ <h1>React Use</h1>
8
+
9
+ <a href="https://www.npmjs.com/package/@siberiacancode/reactuse"><img alt="NPM version" src="https://img.shields.io/npm/v/@siberiacancode/reactuse.svg?style=for-the-badge&labelColor=000000"></a>
10
+ <a href="https://github.com/siberiacancode/reactuse/blob/main/LICENSE"><img alt="License" src="https://img.shields.io/npm/l/@siberiacancode/reactuse.svg?style=for-the-badge&labelColor=000000"></a>
11
+ <a href="https://github.com/siberiacancode/reactuse/discussions"><img alt="Join the community on GitHub" src="https://img.shields.io/badge/Join%20the%20community-blueviolet.svg?style=for-the-badge&logo=React&labelColor=000000&logoWidth=20"></a>
12
+
13
+ </div>
14
+
15
+ React Use delivers **production-ready hooks** that solve real-world problems. Built with **TypeScript-first** approach, **SSR compatibility**, and **tree-shaking optimization** - everything you need to build modern React applications. Improve your react applications with our library 📦 designed for comfort and speed.
16
+
17
+ ## Documentation
18
+
19
+ Visit https://siberiacancode.github.io/reactuse to view the full documentation.
20
+
21
+ ## Getting Started
22
+
23
+ ```bash
24
+ npm install @siberiacancode/reactuse
25
+ ```
26
+
27
+ ```tsx
28
+ import { useCounter } from "@siberiacancode/reactuse";
29
+
30
+ const App = () => {
31
+ const counter = useCounter(0);
32
+
33
+ return (
34
+ <div>
35
+ <h1>Count: {counter.value}</h1>
36
+ <button onClick={() => counter.inc()}>+1</button>
37
+ <button onClick={() => counter.dec()}>-1</button>
38
+ </div>
39
+ );
40
+ };
41
+ ```
42
+
43
+ ## CLI installation
44
+
45
+ Use the CLI to add hooks to your project with [useverse](https://www.npmjs.com/package/useverse).
46
+
47
+ ```bash
48
+ npx useverse@latest init
49
+ ```
50
+
51
+ ```bash
52
+ npx useverse@latest add [hook]
53
+ ```
54
+
55
+ You will be presented with a list of hooks to choose from:
56
+
57
+ ```bash
58
+ Which hooks would you like to add? › Space to select. A to toggle all.
59
+ Enter to submit.
60
+
61
+ ◯ useActiveElement
62
+ ◯ useAsync
63
+ ◯ useBattery
64
+ ◯ useBluetooth
65
+ ◯ useBoolean
66
+ ◯ useBreakpoints
67
+ ◯ useBrowserLanguage
68
+ ◯ useClickOutside
69
+ ◯ useClipboard
70
+ ◯ useConst
71
+ ```
@@ -1 +1 @@
1
- {"version":3,"file":"createContext.cjs","sources":["../../../../src/helpers/createContext/createContext.tsx"],"sourcesContent":["import type { JSX, ReactNode } from 'react';\n\nimport { createContext as createReactContext, useContext, useMemo, useState } from 'react';\n\n/** The create context options type */\nexport interface CreateContextOptions {\n /** Display name for the context (useful for debugging) */\n name?: string;\n /** Whether to throw an error if context is used outside of Provider */\n strict?: boolean;\n}\n\n/** The context value type */\nexport interface ContextValue<Value> {\n /** The context value */\n value: Value | undefined;\n /** The context set function */\n set: (value: Value) => void;\n}\n\n/** The provider props type */\nexport interface ProviderProps<Value> {\n /** The children */\n children?: ReactNode;\n /** The initial value */\n initialValue?: Value;\n}\n\n/** The create context return type */\nexport interface CreateContextReturn<Value> {\n /** The context instance */\n instance: React.Context<ContextValue<Value>>;\n /** The provider component */\n Provider: (props: ProviderProps<Value>) => JSX.Element;\n /** The selector hook */\n useSelect: {\n <Selected>(selector: (value: Value) => Selected): Selected;\n (): ContextValue<Value>;\n };\n}\n\n/**\n * @name createContext\n * @description - Creates a typed context with additional utilities\n * @category Helpers\n *\n * @template Value - The type of value that will be stored in the context\n * @param {Value | undefined} [defaultValue] - Default value for the context\n * @param {CreateContextOptions<Value>} [options] - Additional options for context creation\n * @returns {CreateContextReturn<Value>} Object containing context utilities and components\n *\n * @example\n * const { useSelect, instance, Provider } = createContext<number>(0);\n */\nexport const createContext = <Value,>(\n defaultValue: Value | undefined = undefined,\n options: CreateContextOptions = {}\n): CreateContextReturn<Value> => {\n const Context = createReactContext<{\n value: Value | undefined;\n set: (value: Value) => void;\n }>({\n value: defaultValue,\n set: () => {}\n });\n\n Context.displayName = options.name;\n\n function useSelect(): ContextValue<Value>;\n function useSelect<Selected>(selector: (value: Value) => Selected): Selected;\n function useSelect<Selected>(selector?: (value: Value) => Selected) {\n const context = useContext(Context);\n\n if (!context && options.strict) {\n throw new Error(`Context hook ${options.name} must be used inside a Provider`);\n }\n\n if (!selector) {\n return context;\n }\n\n return selector(context.value as Value);\n }\n\n const Provider = ({ children, initialValue }: ProviderProps<Value>) => {\n const [profile, setProfile] = useState<Value | undefined>(initialValue ?? defaultValue);\n\n const value = useMemo(\n () => ({\n value: profile,\n set: setProfile\n }),\n [profile]\n );\n\n return <Context value={value}>{children}</Context>;\n };\n\n return {\n useSelect,\n instance: Context,\n Provider\n } as const;\n};\n"],"names":["createContext","defaultValue","options","Context","createReactContext","useSelect","selector","context","useContext","children","initialValue","profile","setProfile","useState","value","useMemo","jsx"],"mappings":"wIAsDaA,EAAgB,CAC3BC,EAAkC,OAClCC,EAAgC,CAAA,IACD,CAC/B,MAAMC,EAAUC,EAAAA,cAGb,CACD,MAAOH,EACP,IAAK,IAAM,CAAA,CAAC,CACb,EAEDE,EAAQ,YAAcD,EAAQ,KAI9B,SAASG,EAAoBC,EAAuC,CAClE,MAAMC,EAAUC,EAAAA,WAAWL,CAAO,EAElC,GAAI,CAACI,GAAWL,EAAQ,OACtB,MAAM,IAAI,MAAM,gBAAgBA,EAAQ,IAAI,iCAAiC,EAG/E,OAAKI,EAIEA,EAASC,EAAQ,KAAc,EAH7BA,CAG6B,CAiBxC,MAAO,CACL,UAAAF,EACA,SAAUF,EACV,SAjBe,CAAC,CAAE,SAAAM,EAAU,aAAAC,KAAyC,CACrE,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAA4BH,GAAgBT,CAAY,EAEhFa,EAAQC,EAAAA,QACZ,KAAO,CACL,MAAOJ,EACP,IAAKC,CAAA,GAEP,CAACD,CAAO,CAAA,EAGV,OAAOK,EAAAA,IAACb,EAAA,CAAQ,MAAAW,EAAe,SAAAL,CAAA,CAAS,CAAA,CAMxC,CAEJ"}
1
+ {"version":3,"file":"createContext.cjs","sources":["../../../../src/helpers/createContext/createContext.tsx"],"sourcesContent":["import type { JSX, ReactNode } from 'react';\n\nimport { createContext as createReactContext, useContext, useMemo, useState } from 'react';\n\n/** The create context options type */\nexport interface CreateContextOptions {\n /** Display name for the context (useful for debugging) */\n name?: string;\n /** Whether to throw an error if context is used outside of Provider */\n strict?: boolean;\n}\n\n/** The context value type */\nexport interface ContextValue<Value> {\n /** The context value */\n value: Value | undefined;\n /** The context set function */\n set: (value: Value) => void;\n}\n\n/** The provider props type */\nexport interface ProviderProps<Value> {\n /** The children */\n children?: ReactNode;\n /** The initial value */\n initialValue?: Value;\n}\n\n/** The create context return type */\nexport interface CreateContextReturn<Value> {\n /** The context instance */\n instance: React.Context<ContextValue<Value>>;\n /** The provider component */\n Provider: (props: ProviderProps<Value>) => JSX.Element;\n /** The selector hook */\n useSelect: {\n <Selected>(selector: (value: Value) => Selected): Selected;\n (): ContextValue<Value>;\n };\n}\n\n/**\n * @name createContext\n * @description - Creates a typed context with additional utilities\n * @category Helpers\n * @usage high\n *\n * @template Value - The type of value that will be stored in the context\n * @param {Value | undefined} [defaultValue] - Default value for the context\n * @param {CreateContextOptions<Value>} [options] - Additional options for context creation\n * @returns {CreateContextReturn<Value>} Object containing context utilities and components\n *\n * @example\n * const { useSelect, instance, Provider } = createContext<number>(0);\n */\nexport const createContext = <Value,>(\n defaultValue: Value | undefined = undefined,\n options: CreateContextOptions = {}\n): CreateContextReturn<Value> => {\n const Context = createReactContext<{\n value: Value | undefined;\n set: (value: Value) => void;\n }>({\n value: defaultValue,\n set: () => {}\n });\n\n Context.displayName = options.name;\n\n function useSelect(): ContextValue<Value>;\n function useSelect<Selected>(selector: (value: Value) => Selected): Selected;\n function useSelect<Selected>(selector?: (value: Value) => Selected) {\n const context = useContext(Context);\n\n if (!context && options.strict) {\n throw new Error(`Context hook ${options.name} must be used inside a Provider`);\n }\n\n if (!selector) {\n return context;\n }\n\n return selector(context.value as Value);\n }\n\n const Provider = ({ children, initialValue }: ProviderProps<Value>) => {\n const [profile, setProfile] = useState<Value | undefined>(initialValue ?? defaultValue);\n\n const value = useMemo(\n () => ({\n value: profile,\n set: setProfile\n }),\n [profile]\n );\n\n return <Context value={value}>{children}</Context>;\n };\n\n return {\n useSelect,\n instance: Context,\n Provider\n } as const;\n};\n"],"names":["createContext","defaultValue","options","Context","createReactContext","useSelect","selector","context","useContext","children","initialValue","profile","setProfile","useState","value","useMemo","jsx"],"mappings":"wIAuDaA,EAAgB,CAC3BC,EAAkC,OAClCC,EAAgC,CAAA,IACD,CAC/B,MAAMC,EAAUC,EAAAA,cAGb,CACD,MAAOH,EACP,IAAK,IAAM,CAAA,CAAC,CACb,EAEDE,EAAQ,YAAcD,EAAQ,KAI9B,SAASG,EAAoBC,EAAuC,CAClE,MAAMC,EAAUC,EAAAA,WAAWL,CAAO,EAElC,GAAI,CAACI,GAAWL,EAAQ,OACtB,MAAM,IAAI,MAAM,gBAAgBA,EAAQ,IAAI,iCAAiC,EAG/E,OAAKI,EAIEA,EAASC,EAAQ,KAAc,EAH7BA,CAG6B,CAiBxC,MAAO,CACL,UAAAF,EACA,SAAUF,EACV,SAjBe,CAAC,CAAE,SAAAM,EAAU,aAAAC,KAAyC,CACrE,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAA4BH,GAAgBT,CAAY,EAEhFa,EAAQC,EAAAA,QACZ,KAAO,CACL,MAAOJ,EACP,IAAKC,CAAA,GAEP,CAACD,CAAO,CAAA,EAGV,OAAOK,EAAAA,IAACb,EAAA,CAAQ,MAAAW,EAAe,SAAAL,CAAA,CAAS,CAAA,CAMxC,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"createEventEmitter.cjs","sources":["../../../../src/helpers/createEventEmitter/createEventEmitter.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/**\n * @name createEventEmitter\n * @description - Creates a type-safe event emitter\n * @category Helpers\n *\n * @template Events - The type of events and their data\n * @returns {EventEmitterApi<Events>} - Object containing event emitter methods and hook\n *\n * @example\n * const { push, subscribe, unsubscribe, useSubscribe } = createEventEmitter<{ foo: number }>();\n */\nexport const createEventEmitter = <Events extends Record<string, any> = Record<string, any>>() => {\n type ListenerMap = Map<string, Set<(data: any) => void>>;\n const listeners: ListenerMap = new Map();\n\n const push = <Event extends keyof Events>(event: Event, data: Events[Event]) => {\n const eventListeners = listeners.get(event as string);\n eventListeners?.forEach((listener) => listener(data));\n };\n\n const unsubscribe = <Key extends keyof Events>(\n event: Key,\n listener: (data: Events[Key]) => void\n ) => {\n const eventKey = event as string;\n const eventListeners = listeners.get(eventKey);\n if (!eventListeners) return;\n eventListeners.delete(listener);\n if (!eventListeners.size) listeners.delete(eventKey);\n };\n\n const subscribe = <Key extends keyof Events>(\n event: Key,\n listener: (data: Events[Key]) => void\n ) => {\n const eventKey = event as string;\n if (!listeners.has(eventKey)) listeners.set(eventKey, new Set());\n const eventListeners = listeners.get(event as string)!;\n eventListeners.add(listener);\n\n return () => {\n unsubscribe(event, listener);\n };\n };\n\n const useSubscribe = <Event extends keyof Events>(\n event: Event,\n listener?: (data: Events[Event]) => void\n ) => {\n const [data, setData] = useState<Events[Event] | undefined>(undefined);\n const listenerRef = useRef(listener);\n listenerRef.current = listener;\n\n useEffect(() => {\n const onSubscribe = (data: Events[Event]) => {\n setData(data);\n listenerRef.current?.(data);\n };\n\n const unsubscribe = subscribe(event, onSubscribe);\n return () => {\n unsubscribe();\n };\n }, [event]);\n\n return data;\n };\n\n return {\n push,\n subscribe,\n unsubscribe,\n useSubscribe\n };\n};\n"],"names":["createEventEmitter","listeners","push","event","data","listener","unsubscribe","eventKey","eventListeners","subscribe","setData","useState","listenerRef","useRef","useEffect"],"mappings":"yGAaaA,EAAqB,IAAgE,CAEhG,MAAMC,MAA6B,IAE7BC,EAAO,CAA6BC,EAAcC,IAAwB,CACvDH,EAAU,IAAIE,CAAe,GACpC,QAASE,GAAaA,EAASD,CAAI,CAAC,CAAA,EAGhDE,EAAc,CAClBH,EACAE,IACG,CACH,MAAME,EAAWJ,EACXK,EAAiBP,EAAU,IAAIM,CAAQ,EACxCC,IACLA,EAAe,OAAOH,CAAQ,EACzBG,EAAe,MAAMP,EAAU,OAAOM,CAAQ,EAAA,EAG/CE,EAAY,CAChBN,EACAE,IACG,CACH,MAAME,EAAWJ,EACjB,OAAKF,EAAU,IAAIM,CAAQ,KAAa,IAAIA,EAAU,IAAI,GAAK,EACxCN,EAAU,IAAIE,CAAe,EACrC,IAAIE,CAAQ,EAEpB,IAAM,CACXC,EAAYH,EAAOE,CAAQ,CAAA,CAC7B,EA0BF,MAAO,CACL,KAAAH,EACA,UAAAO,EACA,YAAAH,EACA,aA3BmB,CACnBH,EACAE,IACG,CACH,KAAM,CAACD,EAAMM,CAAO,EAAIC,EAAAA,SAAoC,MAAS,EAC/DC,EAAcC,EAAAA,OAAOR,CAAQ,EACnC,OAAAO,EAAY,QAAUP,EAEtBS,EAAAA,UAAU,IAAM,CAMd,MAAMR,EAAcG,EAAUN,EALTC,GAAwB,CAC3CM,EAAQN,CAAI,EACZQ,EAAY,UAAUR,CAAI,CAAA,CAGoB,EAChD,MAAO,IAAM,CACXE,EAAAA,CAAY,CACd,EACC,CAACH,CAAK,CAAC,EAEHC,CAAA,CAOP,CAEJ"}
1
+ {"version":3,"file":"createEventEmitter.cjs","sources":["../../../../src/helpers/createEventEmitter/createEventEmitter.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/**\n * @name createEventEmitter\n * @description - Creates a type-safe event emitter\n * @category Helpers\n * @usage low\n *\n * @template Events - The type of events and their data\n * @returns {EventEmitterApi<Events>} - Object containing event emitter methods and hook\n *\n * @example\n * const { push, subscribe, unsubscribe, useSubscribe } = createEventEmitter<{ foo: number }>();\n */\nexport const createEventEmitter = <Events extends Record<string, any> = Record<string, any>>() => {\n type ListenerMap = Map<string, Set<(data: any) => void>>;\n const listeners: ListenerMap = new Map();\n\n const push = <Event extends keyof Events>(event: Event, data: Events[Event]) => {\n const eventListeners = listeners.get(event as string);\n eventListeners?.forEach((listener) => listener(data));\n };\n\n const unsubscribe = <Key extends keyof Events>(\n event: Key,\n listener: (data: Events[Key]) => void\n ) => {\n const eventKey = event as string;\n const eventListeners = listeners.get(eventKey);\n if (!eventListeners) return;\n eventListeners.delete(listener);\n if (!eventListeners.size) listeners.delete(eventKey);\n };\n\n const subscribe = <Key extends keyof Events>(\n event: Key,\n listener: (data: Events[Key]) => void\n ) => {\n const eventKey = event as string;\n if (!listeners.has(eventKey)) listeners.set(eventKey, new Set());\n const eventListeners = listeners.get(event as string)!;\n eventListeners.add(listener);\n\n return () => {\n unsubscribe(event, listener);\n };\n };\n\n const useSubscribe = <Event extends keyof Events>(\n event: Event,\n listener?: (data: Events[Event]) => void\n ) => {\n const [data, setData] = useState<Events[Event] | undefined>(undefined);\n const listenerRef = useRef(listener);\n listenerRef.current = listener;\n\n useEffect(() => {\n const onSubscribe = (data: Events[Event]) => {\n setData(data);\n listenerRef.current?.(data);\n };\n\n const unsubscribe = subscribe(event, onSubscribe);\n return () => {\n unsubscribe();\n };\n }, [event]);\n\n return data;\n };\n\n return {\n push,\n subscribe,\n unsubscribe,\n useSubscribe\n };\n};\n"],"names":["createEventEmitter","listeners","push","event","data","listener","unsubscribe","eventKey","eventListeners","subscribe","setData","useState","listenerRef","useRef","useEffect"],"mappings":"yGAcaA,EAAqB,IAAgE,CAEhG,MAAMC,MAA6B,IAE7BC,EAAO,CAA6BC,EAAcC,IAAwB,CACvDH,EAAU,IAAIE,CAAe,GACpC,QAASE,GAAaA,EAASD,CAAI,CAAC,CAAA,EAGhDE,EAAc,CAClBH,EACAE,IACG,CACH,MAAME,EAAWJ,EACXK,EAAiBP,EAAU,IAAIM,CAAQ,EACxCC,IACLA,EAAe,OAAOH,CAAQ,EACzBG,EAAe,MAAMP,EAAU,OAAOM,CAAQ,EAAA,EAG/CE,EAAY,CAChBN,EACAE,IACG,CACH,MAAME,EAAWJ,EACjB,OAAKF,EAAU,IAAIM,CAAQ,KAAa,IAAIA,EAAU,IAAI,GAAK,EACxCN,EAAU,IAAIE,CAAe,EACrC,IAAIE,CAAQ,EAEpB,IAAM,CACXC,EAAYH,EAAOE,CAAQ,CAAA,CAC7B,EA0BF,MAAO,CACL,KAAAH,EACA,UAAAO,EACA,YAAAH,EACA,aA3BmB,CACnBH,EACAE,IACG,CACH,KAAM,CAACD,EAAMM,CAAO,EAAIC,EAAAA,SAAoC,MAAS,EAC/DC,EAAcC,EAAAA,OAAOR,CAAQ,EACnC,OAAAO,EAAY,QAAUP,EAEtBS,EAAAA,UAAU,IAAM,CAMd,MAAMR,EAAcG,EAAUN,EALTC,GAAwB,CAC3CM,EAAQN,CAAI,EACZQ,EAAY,UAAUR,CAAI,CAAA,CAGoB,EAChD,MAAO,IAAM,CACXE,EAAAA,CAAY,CACd,EACC,CAACH,CAAK,CAAC,EAEHC,CAAA,CAOP,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"createReactiveContext.cjs","sources":["../../../../src/helpers/createReactiveContext/createReactiveContext.ts"],"sourcesContent":["import type { Context, FC, Provider, ProviderProps, RefObject } from 'react';\n\nimport {\n createContext,\n createElement,\n startTransition,\n useContext,\n useMemo,\n useRef,\n useState\n} from 'react';\n\nimport { useEvent, useIsomorphicLayoutEffect } from '@/hooks';\n\n/** The create reactive context options type */\nexport interface CreateReactiveContextOptions {\n /** Display name for the context (useful for debugging) */\n name?: string;\n /** Whether to throw an error if context is used outside of Provider */\n strict?: boolean;\n}\n\n/** The create reactive context return type */\nexport interface CreateReactiveContextReturn<Value> {\n /** The context instance */\n instance: Context<ReactiveContextValue<Value>>;\n /** The Provider component for the context */\n Provider: Provider<Value>;\n /** A hook to select a part of the context state */\n useSelector: <Selected>(selector?: (state: Value) => Selected) => Selected;\n}\n\ntype ContextListener<Value> = (value: Value) => void;\n\ninterface ReactiveContextValue<Value> {\n /** The listeners for the context */\n listeners: Set<ContextListener<Value>>;\n /** The value for the context */\n value: RefObject<Value>;\n}\n\nconst createProvider = <Value>(originalProvider: Provider<ReactiveContextValue<Value>>) => {\n const Provider: FC<ProviderProps<Value>> = (props) => {\n const valueRef = useRef(props.value);\n const contextValue = useMemo<ReactiveContextValue<Value>>(\n () => ({\n value: valueRef,\n listeners: new Set()\n }),\n []\n );\n\n useIsomorphicLayoutEffect(() => {\n if (!Object.is(valueRef.current, props.value)) {\n valueRef.current = props.value;\n\n startTransition(() => {\n contextValue.listeners.forEach((listener) => {\n listener(valueRef.current);\n });\n });\n }\n }, [props.value]);\n\n return createElement(originalProvider, { value: contextValue }, props.children);\n };\n\n return Provider as unknown as Provider<ReactiveContextValue<Value>>;\n};\n\nconst createReactiveContextSelector = <Value, Selected>(\n Context: Context<ReactiveContextValue<Value>>,\n selector: (state: Value) => Selected,\n options: CreateReactiveContextOptions = {}\n) => {\n const context = useContext(Context);\n\n if (!context && options.strict) {\n throw new Error(`Context hook ${options.name} must be used inside a Provider`);\n }\n\n const [value, setValue] = useState({\n selected: selector(context.value.current),\n value: context.value.current\n });\n\n const dispatch = useEvent((newValue: Value) => {\n setValue((prevValue) => {\n if (Object.is(prevValue.value, newValue)) return prevValue;\n\n const newSelected = selector(newValue);\n if (Object.is(prevValue.selected, newSelected)) return prevValue;\n\n return { value: newValue, selected: newSelected };\n });\n });\n\n useIsomorphicLayoutEffect(() => {\n context.listeners.add(dispatch);\n return () => {\n context.listeners.delete(dispatch);\n };\n }, [context.listeners]);\n\n return value.selected;\n};\n\n/**\n * @name createReactiveContext\n * @description - Creates a typed context selector with optimized updates for state selection\n * @category Helpers\n *\n * @warning - For complex interfaces, we strongly recommend using state management solutions outside of React like createStore, reatom, effector, or zustand instead of context\n *\n * @template Value - The type of value that will be stored in the context\n * @param {Value | undefined} [defaultValue] - Default value for the context\n * @param {CreateReactiveContextOptions<Value>} [options] - Additional options for context creation\n * @returns {CreateReactiveContextReturn<Value>} Object containing context utilities and components\n *\n * @example\n * const { Provider, useSelector, instance } = createReactiveContext<number>(0);\n */\nexport const createReactiveContext = <Value extends Record<string, any>>(\n defaultValue: Value | undefined = undefined,\n options: CreateReactiveContextOptions = {}\n) => {\n const Context = createContext<ReactiveContextValue<Value>>({\n value: { current: defaultValue as Value },\n listeners: new Set()\n });\n\n const Provider = createProvider(Context.Provider) as unknown as Provider<Value>;\n\n Context.displayName = options.name;\n\n function useSelector(): Value;\n function useSelector<SelectedValue>(selector: (state: Value) => SelectedValue): SelectedValue;\n function useSelector<SelectedValue>(selector?: (state: Value) => SelectedValue) {\n return createReactiveContextSelector(\n Context as unknown as Context<ReactiveContextValue<Value>>,\n selector ?? ((state) => state as unknown as SelectedValue),\n options\n );\n }\n\n return { instance: Context, Provider, useSelector };\n};\n"],"names":["createProvider","originalProvider","props","valueRef","useRef","contextValue","useMemo","useIsomorphicLayoutEffect","startTransition","listener","createElement","createReactiveContextSelector","Context","selector","options","context","useContext","value","setValue","useState","dispatch","useEvent","newValue","prevValue","newSelected","createReactiveContext","defaultValue","createContext","Provider","useSelector","state"],"mappings":"yOAyCMA,EAAyBC,GACeC,GAAU,CACpD,MAAMC,EAAWC,EAAAA,OAAOF,EAAM,KAAK,EAC7BG,EAAeC,EAAAA,QACnB,KAAO,CACL,MAAOH,EACP,cAAe,GAAI,GAErB,CAAA,CAAC,EAGHI,OAAAA,EAAAA,0BAA0B,IAAM,CACzB,OAAO,GAAGJ,EAAS,QAASD,EAAM,KAAK,IAC1CC,EAAS,QAAUD,EAAM,MAEzBM,EAAAA,gBAAgB,IAAM,CACpBH,EAAa,UAAU,QAASI,GAAa,CAC3CA,EAASN,EAAS,OAAO,CAAA,CAC1B,CAAA,CACF,EACH,EACC,CAACD,EAAM,KAAK,CAAC,EAETQ,EAAAA,cAAcT,EAAkB,CAAE,MAAOI,CAAA,EAAgBH,EAAM,QAAQ,CAAA,EAM5ES,EAAgC,CACpCC,EACAC,EACAC,EAAwC,CAAA,IACrC,CACH,MAAMC,EAAUC,EAAAA,WAAWJ,CAAO,EAElC,GAAI,CAACG,GAAWD,EAAQ,OACtB,MAAM,IAAI,MAAM,gBAAgBA,EAAQ,IAAI,iCAAiC,EAG/E,KAAM,CAACG,EAAOC,CAAQ,EAAIC,WAAS,CACjC,SAAUN,EAASE,EAAQ,MAAM,OAAO,EACxC,MAAOA,EAAQ,MAAM,OAAA,CACtB,EAEKK,EAAWC,WAAUC,GAAoB,CAC7CJ,EAAUK,GAAc,CACtB,GAAI,OAAO,GAAGA,EAAU,MAAOD,CAAQ,EAAG,OAAOC,EAEjD,MAAMC,EAAcX,EAASS,CAAQ,EACrC,OAAI,OAAO,GAAGC,EAAU,SAAUC,CAAW,EAAUD,EAEhD,CAAE,MAAOD,EAAU,SAAUE,CAAA,CAAY,CACjD,CAAA,CACF,EAEDjB,OAAAA,EAAAA,0BAA0B,KACxBQ,EAAQ,UAAU,IAAIK,CAAQ,EACvB,IAAM,CACXL,EAAQ,UAAU,OAAOK,CAAQ,CAAA,GAElC,CAACL,EAAQ,SAAS,CAAC,EAEfE,EAAM,QACf,EAiBaQ,EAAwB,CACnCC,EAAkC,OAClCZ,EAAwC,CAAA,IACrC,CACH,MAAMF,EAAUe,EAAAA,cAA2C,CACzD,MAAO,CAAE,QAASD,CAAA,EAClB,cAAe,GAAI,CACpB,EAEKE,EAAW5B,EAAeY,EAAQ,QAAQ,EAEhDA,EAAQ,YAAcE,EAAQ,KAI9B,SAASe,EAA2BhB,EAA4C,CAC9E,OAAOF,EACLC,EACAC,IAAciB,GAAUA,GACxBhB,CAAA,CACF,CAGF,MAAO,CAAE,SAAUF,EAAS,SAAAgB,EAAU,YAAAC,CAAA,CACxC"}
1
+ {"version":3,"file":"createReactiveContext.cjs","sources":["../../../../src/helpers/createReactiveContext/createReactiveContext.ts"],"sourcesContent":["import type { Context, FC, Provider, ProviderProps, RefObject } from 'react';\n\nimport {\n createContext,\n createElement,\n startTransition,\n useContext,\n useMemo,\n useRef,\n useState\n} from 'react';\n\nimport { useEvent, useIsomorphicLayoutEffect } from '@/hooks';\n\n/** The create reactive context options type */\nexport interface CreateReactiveContextOptions {\n /** Display name for the context (useful for debugging) */\n name?: string;\n /** Whether to throw an error if context is used outside of Provider */\n strict?: boolean;\n}\n\n/** The create reactive context return type */\nexport interface CreateReactiveContextReturn<Value> {\n /** The context instance */\n instance: Context<ReactiveContextValue<Value>>;\n /** The Provider component for the context */\n Provider: Provider<Value>;\n /** A hook to select a part of the context state */\n useSelector: <Selected>(selector?: (state: Value) => Selected) => Selected;\n}\n\ntype ContextListener<Value> = (value: Value) => void;\n\ninterface ReactiveContextValue<Value> {\n /** The listeners for the context */\n listeners: Set<ContextListener<Value>>;\n /** The value for the context */\n value: RefObject<Value>;\n}\n\nconst createProvider = <Value>(originalProvider: Provider<ReactiveContextValue<Value>>) => {\n const Provider: FC<ProviderProps<Value>> = (props) => {\n const valueRef = useRef(props.value);\n const contextValue = useMemo<ReactiveContextValue<Value>>(\n () => ({\n value: valueRef,\n listeners: new Set()\n }),\n []\n );\n\n useIsomorphicLayoutEffect(() => {\n if (!Object.is(valueRef.current, props.value)) {\n valueRef.current = props.value;\n\n startTransition(() => {\n contextValue.listeners.forEach((listener) => {\n listener(valueRef.current);\n });\n });\n }\n }, [props.value]);\n\n return createElement(originalProvider, { value: contextValue }, props.children);\n };\n\n return Provider as unknown as Provider<ReactiveContextValue<Value>>;\n};\n\nconst createReactiveContextSelector = <Value, Selected>(\n Context: Context<ReactiveContextValue<Value>>,\n selector: (state: Value) => Selected,\n options: CreateReactiveContextOptions = {}\n) => {\n const context = useContext(Context);\n\n if (!context && options.strict) {\n throw new Error(`Context hook ${options.name} must be used inside a Provider`);\n }\n\n const [value, setValue] = useState({\n selected: selector(context.value.current),\n value: context.value.current\n });\n\n const dispatch = useEvent((newValue: Value) => {\n setValue((prevValue) => {\n if (Object.is(prevValue.value, newValue)) return prevValue;\n\n const newSelected = selector(newValue);\n if (Object.is(prevValue.selected, newSelected)) return prevValue;\n\n return { value: newValue, selected: newSelected };\n });\n });\n\n useIsomorphicLayoutEffect(() => {\n context.listeners.add(dispatch);\n return () => {\n context.listeners.delete(dispatch);\n };\n }, [context.listeners]);\n\n return value.selected;\n};\n\n/**\n * @name createReactiveContext\n * @description - Creates a typed context selector with optimized updates for state selection\n * @category Helpers\n * @usage low\n *\n * @warning - For complex interfaces, we strongly recommend using state management solutions outside of React like createStore, reatom, effector, or zustand instead of context\n *\n * @template Value - The type of value that will be stored in the context\n * @param {Value | undefined} [defaultValue] - Default value for the context\n * @param {CreateReactiveContextOptions<Value>} [options] - Additional options for context creation\n * @returns {CreateReactiveContextReturn<Value>} Object containing context utilities and components\n *\n * @example\n * const { Provider, useSelector, instance } = createReactiveContext<number>(0);\n */\nexport const createReactiveContext = <Value extends Record<string, any>>(\n defaultValue: Value | undefined = undefined,\n options: CreateReactiveContextOptions = {}\n) => {\n const Context = createContext<ReactiveContextValue<Value>>({\n value: { current: defaultValue as Value },\n listeners: new Set()\n });\n\n const Provider = createProvider(Context.Provider) as unknown as Provider<Value>;\n\n Context.displayName = options.name;\n\n function useSelector(): Value;\n function useSelector<SelectedValue>(selector: (state: Value) => SelectedValue): SelectedValue;\n function useSelector<SelectedValue>(selector?: (state: Value) => SelectedValue) {\n return createReactiveContextSelector(\n Context as unknown as Context<ReactiveContextValue<Value>>,\n selector ?? ((state) => state as unknown as SelectedValue),\n options\n );\n }\n\n return { instance: Context, Provider, useSelector };\n};\n"],"names":["createProvider","originalProvider","props","valueRef","useRef","contextValue","useMemo","useIsomorphicLayoutEffect","startTransition","listener","createElement","createReactiveContextSelector","Context","selector","options","context","useContext","value","setValue","useState","dispatch","useEvent","newValue","prevValue","newSelected","createReactiveContext","defaultValue","createContext","Provider","useSelector","state"],"mappings":"yOAyCMA,EAAyBC,GACeC,GAAU,CACpD,MAAMC,EAAWC,EAAAA,OAAOF,EAAM,KAAK,EAC7BG,EAAeC,EAAAA,QACnB,KAAO,CACL,MAAOH,EACP,cAAe,GAAI,GAErB,CAAA,CAAC,EAGHI,OAAAA,EAAAA,0BAA0B,IAAM,CACzB,OAAO,GAAGJ,EAAS,QAASD,EAAM,KAAK,IAC1CC,EAAS,QAAUD,EAAM,MAEzBM,EAAAA,gBAAgB,IAAM,CACpBH,EAAa,UAAU,QAASI,GAAa,CAC3CA,EAASN,EAAS,OAAO,CAAA,CAC1B,CAAA,CACF,EACH,EACC,CAACD,EAAM,KAAK,CAAC,EAETQ,EAAAA,cAAcT,EAAkB,CAAE,MAAOI,CAAA,EAAgBH,EAAM,QAAQ,CAAA,EAM5ES,EAAgC,CACpCC,EACAC,EACAC,EAAwC,CAAA,IACrC,CACH,MAAMC,EAAUC,EAAAA,WAAWJ,CAAO,EAElC,GAAI,CAACG,GAAWD,EAAQ,OACtB,MAAM,IAAI,MAAM,gBAAgBA,EAAQ,IAAI,iCAAiC,EAG/E,KAAM,CAACG,EAAOC,CAAQ,EAAIC,WAAS,CACjC,SAAUN,EAASE,EAAQ,MAAM,OAAO,EACxC,MAAOA,EAAQ,MAAM,OAAA,CACtB,EAEKK,EAAWC,WAAUC,GAAoB,CAC7CJ,EAAUK,GAAc,CACtB,GAAI,OAAO,GAAGA,EAAU,MAAOD,CAAQ,EAAG,OAAOC,EAEjD,MAAMC,EAAcX,EAASS,CAAQ,EACrC,OAAI,OAAO,GAAGC,EAAU,SAAUC,CAAW,EAAUD,EAEhD,CAAE,MAAOD,EAAU,SAAUE,CAAA,CAAY,CACjD,CAAA,CACF,EAEDjB,OAAAA,EAAAA,0BAA0B,KACxBQ,EAAQ,UAAU,IAAIK,CAAQ,EACvB,IAAM,CACXL,EAAQ,UAAU,OAAOK,CAAQ,CAAA,GAElC,CAACL,EAAQ,SAAS,CAAC,EAEfE,EAAM,QACf,EAkBaQ,EAAwB,CACnCC,EAAkC,OAClCZ,EAAwC,CAAA,IACrC,CACH,MAAMF,EAAUe,EAAAA,cAA2C,CACzD,MAAO,CAAE,QAASD,CAAA,EAClB,cAAe,GAAI,CACpB,EAEKE,EAAW5B,EAAeY,EAAQ,QAAQ,EAEhDA,EAAQ,YAAcE,EAAQ,KAI9B,SAASe,EAA2BhB,EAA4C,CAC9E,OAAOF,EACLC,EACAC,IAAciB,GAAUA,GACxBhB,CAAA,CACF,CAGF,MAAO,CAAE,SAAUF,EAAS,SAAAgB,EAAU,YAAAC,CAAA,CACxC"}
@@ -1 +1 @@
1
- {"version":3,"file":"createStore.cjs","sources":["../../../../src/helpers/createStore/createStore.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\ntype StoreSetAction<Value> = ((prev: Value) => Partial<Value>) | Partial<Value>;\n\ntype StoreListener<Value> = (state: Value, prevState: Value) => void;\n\ntype StoreCreator<Value> = (\n set: (action: StoreSetAction<Value>) => void,\n get: () => Value\n) => Value;\n\nexport interface StoreApi<Value> {\n getInitialState: () => Value;\n getState: () => Value;\n setState: (action: StoreSetAction<Value>) => void;\n subscribe: (listener: StoreListener<Value>) => () => void;\n}\n\n/**\n * @name createStore\n * @description - Creates a store with state management capabilities\n * @category Helpers\n *\n * @template Value - The type of the store state\n * @param {StateCreator<Value>} createState - Function that initializes the store state\n * @returns {StoreApi<Value>} - Object containing store methods and hook for accessing state\n *\n * @example\n * const { set, get, use, subscribe } = createStore((set) => ({\n * count: 0,\n * increment: () => set(state => ({ count: state.count + 1 }))\n * }));\n */\nexport const createStore = <Value>(createState: StoreCreator<Value> | Value) => {\n let state: Value;\n const listeners: Set<StoreListener<Value>> = new Set();\n\n const setState: StoreApi<Value>['setState'] = (action: StoreSetAction<Value>) => {\n const nextState = typeof action === 'function' ? action(state) : action;\n\n if (!Object.is(nextState, state)) {\n const prevState = state;\n state =\n typeof nextState !== 'object' || nextState === null\n ? nextState\n : Object.assign({}, state, nextState);\n\n listeners.forEach((listener) => listener(state, prevState));\n }\n };\n\n const subscribe = (listener: StoreListener<Value>) => {\n listeners.add(listener);\n\n return () => listeners.delete(listener);\n };\n\n const getState = () => state;\n const getInitialState = () => state;\n\n if (typeof createState === 'function') {\n state = (createState as StoreCreator<Value>)(setState, getState);\n } else {\n state = createState;\n }\n\n function useStore(): Value;\n function useStore<Selected>(selector: (state: Value) => Selected): Selected;\n function useStore<Selected>(selector?: (state: Value) => Selected): Selected | Value {\n return useSyncExternalStore(\n subscribe,\n () => (selector ? selector(getState()) : getState()),\n () => (selector ? selector(getInitialState()) : getInitialState())\n );\n }\n\n return {\n set: setState,\n get: getState,\n use: useStore,\n subscribe\n };\n};\n"],"names":["createStore","createState","state","listeners","setState","action","nextState","prevState","listener","subscribe","getState","getInitialState","useStore","selector","useSyncExternalStore"],"mappings":"yGAiCaA,EAAsBC,GAA6C,CAC9E,IAAIC,EACJ,MAAMC,MAA2C,IAE3CC,EAAyCC,GAAkC,CAC/E,MAAMC,EAAY,OAAOD,GAAW,WAAaA,EAAOH,CAAK,EAAIG,EAEjE,GAAI,CAAC,OAAO,GAAGC,EAAWJ,CAAK,EAAG,CAChC,MAAMK,EAAYL,EAClBA,EACE,OAAOI,GAAc,UAAYA,IAAc,KAC3CA,EACA,OAAO,OAAO,GAAIJ,EAAOI,CAAS,EAExCH,EAAU,QAASK,GAAaA,EAASN,EAAOK,CAAS,CAAC,CAAA,CAC5D,EAGIE,EAAaD,IACjBL,EAAU,IAAIK,CAAQ,EAEf,IAAML,EAAU,OAAOK,CAAQ,GAGlCE,EAAW,IAAMR,EACjBS,EAAkB,IAAMT,EAE1B,OAAOD,GAAgB,WACzBC,EAASD,EAAoCG,EAAUM,CAAQ,EAE/DR,EAAQD,EAKV,SAASW,EAAmBC,EAAyD,CACnF,OAAOC,EAAAA,qBACLL,EACA,IAAOI,EAAWA,EAASH,EAAA,CAAU,EAAIA,EAAA,EACzC,IAAOG,EAAWA,EAASF,EAAA,CAAiB,EAAIA,EAAA,CAAgB,CAClE,CAGF,MAAO,CACL,IAAKP,EACL,IAAKM,EACL,IAAKE,EACL,UAAAH,CAAA,CAEJ"}
1
+ {"version":3,"file":"createStore.cjs","sources":["../../../../src/helpers/createStore/createStore.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\ntype StoreSetAction<Value> = ((prev: Value) => Partial<Value>) | Partial<Value>;\n\ntype StoreListener<Value> = (state: Value, prevState: Value) => void;\n\ntype StoreCreator<Value> = (\n set: (action: StoreSetAction<Value>) => void,\n get: () => Value\n) => Value;\n\nexport interface StoreApi<Value> {\n getInitialState: () => Value;\n getState: () => Value;\n setState: (action: StoreSetAction<Value>) => void;\n subscribe: (listener: StoreListener<Value>) => () => void;\n}\n\n/**\n * @name createStore\n * @description - Creates a store with state management capabilities\n * @category Helpers\n * @usage medium\n *\n * @template Value - The type of the store state\n * @param {StateCreator<Value>} createState - Function that initializes the store state\n * @returns {StoreApi<Value>} - Object containing store methods and hook for accessing state\n *\n * @example\n * const { set, get, use, subscribe } = createStore((set) => ({\n * count: 0,\n * increment: () => set(state => ({ count: state.count + 1 }))\n * }));\n */\nexport const createStore = <Value>(createState: StoreCreator<Value> | Value) => {\n let state: Value;\n const listeners: Set<StoreListener<Value>> = new Set();\n\n const setState: StoreApi<Value>['setState'] = (action: StoreSetAction<Value>) => {\n const nextState = typeof action === 'function' ? action(state) : action;\n\n if (!Object.is(nextState, state)) {\n const prevState = state;\n state =\n typeof nextState !== 'object' || nextState === null\n ? nextState\n : Object.assign({}, state, nextState);\n\n listeners.forEach((listener) => listener(state, prevState));\n }\n };\n\n const subscribe = (listener: StoreListener<Value>) => {\n listeners.add(listener);\n\n return () => listeners.delete(listener);\n };\n\n const getState = () => state;\n const getInitialState = () => state;\n\n if (typeof createState === 'function') {\n state = (createState as StoreCreator<Value>)(setState, getState);\n } else {\n state = createState;\n }\n\n function useStore(): Value;\n function useStore<Selected>(selector: (state: Value) => Selected): Selected;\n function useStore<Selected>(selector?: (state: Value) => Selected): Selected | Value {\n return useSyncExternalStore(\n subscribe,\n () => (selector ? selector(getState()) : getState()),\n () => (selector ? selector(getInitialState()) : getInitialState())\n );\n }\n\n return {\n set: setState,\n get: getState,\n use: useStore,\n subscribe\n };\n};\n"],"names":["createStore","createState","state","listeners","setState","action","nextState","prevState","listener","subscribe","getState","getInitialState","useStore","selector","useSyncExternalStore"],"mappings":"yGAkCaA,EAAsBC,GAA6C,CAC9E,IAAIC,EACJ,MAAMC,MAA2C,IAE3CC,EAAyCC,GAAkC,CAC/E,MAAMC,EAAY,OAAOD,GAAW,WAAaA,EAAOH,CAAK,EAAIG,EAEjE,GAAI,CAAC,OAAO,GAAGC,EAAWJ,CAAK,EAAG,CAChC,MAAMK,EAAYL,EAClBA,EACE,OAAOI,GAAc,UAAYA,IAAc,KAC3CA,EACA,OAAO,OAAO,GAAIJ,EAAOI,CAAS,EAExCH,EAAU,QAASK,GAAaA,EAASN,EAAOK,CAAS,CAAC,CAAA,CAC5D,EAGIE,EAAaD,IACjBL,EAAU,IAAIK,CAAQ,EAEf,IAAML,EAAU,OAAOK,CAAQ,GAGlCE,EAAW,IAAMR,EACjBS,EAAkB,IAAMT,EAE1B,OAAOD,GAAgB,WACzBC,EAASD,EAAoCG,EAAUM,CAAQ,EAE/DR,EAAQD,EAKV,SAASW,EAAmBC,EAAyD,CACnF,OAAOC,EAAAA,qBACLL,EACA,IAAOI,EAAWA,EAASH,EAAA,CAAU,EAAIA,EAAA,EACzC,IAAOG,EAAWA,EAASF,EAAA,CAAiB,EAAIA,EAAA,CAAgB,CAClE,CAGF,MAAO,CACL,IAAKP,EACL,IAAKM,EACL,IAAKE,EACL,UAAAH,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useActiveElement.cjs","sources":["../../../../src/hooks/useActiveElement/useActiveElement.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport interface UseActiveElement {\n (): HTMLElement | null;\n\n <Target extends Element, ActiveElement extends HTMLElement = HTMLElement>(\n target?: never\n ): {\n ref: StateRef<Target>;\n value: ActiveElement | null;\n };\n\n <ActiveElement extends HTMLElement = HTMLElement>(target: HookTarget): ActiveElement | null;\n}\n\n/**\n * @name useActiveElement\n * @description - Hook that returns the active element\n * @category Elements\n *\n * @overload\n * @param {HookTarget} [target=window] The target element to observe active element changes\n * @returns {ActiveElement | null} The active element\n *\n * @example\n * const activeElement = useActiveElement(ref);\n *\n * @overload\n * @template ActiveElement The active element type\n * @returns {{ ref: StateRef<Element>; activeElement: ActiveElement | null }} An object containing the ref and active element\n *\n * @example\n * const { ref, value } = useActiveElement();\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useActiveElement.html}\n */\nexport const useActiveElement = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n\n const [value, setValue] = useState<HTMLElement | null>(null);\n const internalRef = useRefState(window);\n\n useEffect(() => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n\n if (!element) return;\n\n const observer = new MutationObserver((mutations) => {\n mutations\n .filter((mutation) => mutation.removedNodes.length)\n .map((mutation) => Array.from(mutation.removedNodes))\n .flat()\n .forEach((node) => {\n setValue((prevActiveElement) => {\n if (node === prevActiveElement) return document.activeElement as HTMLElement | null;\n return prevActiveElement;\n });\n });\n });\n\n observer.observe(element, {\n childList: true,\n subtree: true\n });\n\n const onActiveElementChange = () => setValue(document?.activeElement as HTMLElement | null);\n\n element.addEventListener('focus', onActiveElementChange, true);\n element.addEventListener('blur', onActiveElementChange, true);\n\n return () => {\n observer.disconnect();\n element.removeEventListener('focus', onActiveElementChange, true);\n element.removeEventListener('blur', onActiveElementChange, true);\n };\n }, [target, internalRef.state]);\n\n if (target) return value;\n return {\n ref: internalRef,\n value\n };\n}) as UseActiveElement;\n"],"names":["useActiveElement","params","target","isTarget","value","setValue","useState","internalRef","useRefState","useEffect","element","getElement","observer","mutations","mutation","node","prevActiveElement","onActiveElementChange"],"mappings":"mPA4CaA,EAAoB,IAAIC,IAAkB,CACrD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAE5C,CAACG,EAAOC,CAAQ,EAAIC,EAAAA,SAA6B,IAAI,EACrDC,EAAcC,EAAAA,YAAY,MAAM,EAqCtC,OAnCAC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAWR,EAASS,EAAAA,WAAWT,CAAM,EAAIK,EAAY,QAE3D,GAAI,CAACG,EAAS,OAEd,MAAME,EAAW,IAAI,iBAAkBC,GAAc,CACnDA,EACG,OAAQC,GAAaA,EAAS,aAAa,MAAM,EACjD,IAAKA,GAAa,MAAM,KAAKA,EAAS,YAAY,CAAC,EACnD,OACA,QAASC,GAAS,CACjBV,EAAUW,GACJD,IAASC,EAA0B,SAAS,cACzCA,CACR,CAAA,CACF,CAAA,CACJ,EAEDJ,EAAS,QAAQF,EAAS,CACxB,UAAW,GACX,QAAS,EAAA,CACV,EAED,MAAMO,EAAwB,IAAMZ,EAAS,UAAU,aAAmC,EAE1F,OAAAK,EAAQ,iBAAiB,QAASO,EAAuB,EAAI,EAC7DP,EAAQ,iBAAiB,OAAQO,EAAuB,EAAI,EAErD,IAAM,CACXL,EAAS,WAAA,EACTF,EAAQ,oBAAoB,QAASO,EAAuB,EAAI,EAChEP,EAAQ,oBAAoB,OAAQO,EAAuB,EAAI,CAAA,CACjE,EACC,CAACf,EAAQK,EAAY,KAAK,CAAC,EAE1BL,EAAeE,EACZ,CACL,IAAKG,EACL,MAAAH,CAAA,CAEJ"}
1
+ {"version":3,"file":"useActiveElement.cjs","sources":["../../../../src/hooks/useActiveElement/useActiveElement.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport interface UseActiveElement {\n (): HTMLElement | null;\n\n <Target extends Element, ActiveElement extends HTMLElement = HTMLElement>(\n target?: never\n ): {\n ref: StateRef<Target>;\n value: ActiveElement | null;\n };\n\n <ActiveElement extends HTMLElement = HTMLElement>(target: HookTarget): ActiveElement | null;\n}\n\n/**\n * @name useActiveElement\n * @description - Hook that returns the active element\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {HookTarget} [target=window] The target element to observe active element changes\n * @returns {ActiveElement | null} The active element\n *\n * @example\n * const activeElement = useActiveElement(ref);\n *\n * @overload\n * @template ActiveElement The active element type\n * @returns {{ ref: StateRef<Element>; activeElement: ActiveElement | null }} An object containing the ref and active element\n *\n * @example\n * const { ref, value } = useActiveElement();\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useActiveElement.html}\n */\nexport const useActiveElement = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n\n const [value, setValue] = useState<HTMLElement | null>(null);\n const internalRef = useRefState(window);\n\n useEffect(() => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n\n if (!element) return;\n\n const observer = new MutationObserver((mutations) => {\n mutations\n .filter((mutation) => mutation.removedNodes.length)\n .map((mutation) => Array.from(mutation.removedNodes))\n .flat()\n .forEach((node) => {\n setValue((prevActiveElement) => {\n if (node === prevActiveElement) return document.activeElement as HTMLElement | null;\n return prevActiveElement;\n });\n });\n });\n\n observer.observe(element, {\n childList: true,\n subtree: true\n });\n\n const onActiveElementChange = () => setValue(document?.activeElement as HTMLElement | null);\n\n element.addEventListener('focus', onActiveElementChange, true);\n element.addEventListener('blur', onActiveElementChange, true);\n\n return () => {\n observer.disconnect();\n element.removeEventListener('focus', onActiveElementChange, true);\n element.removeEventListener('blur', onActiveElementChange, true);\n };\n }, [target, internalRef.state]);\n\n if (target) return value;\n return {\n ref: internalRef,\n value\n };\n}) as UseActiveElement;\n"],"names":["useActiveElement","params","target","isTarget","value","setValue","useState","internalRef","useRefState","useEffect","element","getElement","observer","mutations","mutation","node","prevActiveElement","onActiveElementChange"],"mappings":"mPA6CaA,EAAoB,IAAIC,IAAkB,CACrD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAE5C,CAACG,EAAOC,CAAQ,EAAIC,EAAAA,SAA6B,IAAI,EACrDC,EAAcC,EAAAA,YAAY,MAAM,EAqCtC,OAnCAC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAWR,EAASS,EAAAA,WAAWT,CAAM,EAAIK,EAAY,QAE3D,GAAI,CAACG,EAAS,OAEd,MAAME,EAAW,IAAI,iBAAkBC,GAAc,CACnDA,EACG,OAAQC,GAAaA,EAAS,aAAa,MAAM,EACjD,IAAKA,GAAa,MAAM,KAAKA,EAAS,YAAY,CAAC,EACnD,OACA,QAASC,GAAS,CACjBV,EAAUW,GACJD,IAASC,EAA0B,SAAS,cACzCA,CACR,CAAA,CACF,CAAA,CACJ,EAEDJ,EAAS,QAAQF,EAAS,CACxB,UAAW,GACX,QAAS,EAAA,CACV,EAED,MAAMO,EAAwB,IAAMZ,EAAS,UAAU,aAAmC,EAE1F,OAAAK,EAAQ,iBAAiB,QAASO,EAAuB,EAAI,EAC7DP,EAAQ,iBAAiB,OAAQO,EAAuB,EAAI,EAErD,IAAM,CACXL,EAAS,WAAA,EACTF,EAAQ,oBAAoB,QAASO,EAAuB,EAAI,EAChEP,EAAQ,oBAAoB,OAAQO,EAAuB,EAAI,CAAA,CACjE,EACC,CAACf,EAAQK,EAAY,KAAK,CAAC,EAE1BL,EAAeE,EACZ,CACL,IAAKG,EACL,MAAAH,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAsync.cjs","sources":["../../../../src/hooks/useAsync/useAsync.ts"],"sourcesContent":["import type { DependencyList } from 'react';\n\nimport { useEffect, useState } from 'react';\n\n/* The use query return type */\nexport interface UseAsyncReturn<Data> {\n /* The state of the query */\n data?: Data;\n /* The error of the query */\n error?: Error;\n /* The error state of the query */\n isError: boolean;\n /* The loading state of the query */\n isLoading: boolean;\n}\n\n/**\n * @name useAsync\n * @description - Hook that provides the state of an async callback\n * @category Async\n *\n * @param {() => Promise<Data>} callback The async callback\n * @param {DependencyList} [deps=[]] The dependencies of the callback\n * @returns {UseAsyncReturn<Data>} The state of the async callback\n *\n * @example\n * const { data, isLoading, isError, error } = useAsync(() => fetch('url'), [deps]);\n */\nexport const useAsync = <Data>(\n callback: () => Promise<Data>,\n deps: DependencyList = []\n): UseAsyncReturn<Data> => {\n const [isLoading, setIsLoading] = useState(true);\n const [isError, setIsError] = useState(false);\n\n const [error, setError] = useState<Error | undefined>(undefined);\n const [data, setData] = useState<Data | undefined>(undefined);\n\n useEffect(() => {\n setIsLoading(true);\n callback()\n .then((response) => {\n setData(response);\n setError(undefined);\n setIsError(false);\n })\n .catch((error: Error) => {\n setError(error);\n setIsError(true);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }, deps);\n\n return {\n data,\n isLoading,\n isError,\n error\n };\n};\n"],"names":["useAsync","callback","deps","isLoading","setIsLoading","useState","isError","setIsError","error","setError","data","setData","useEffect","response"],"mappings":"yGA4BaA,EAAW,CACtBC,EACAC,EAAuB,KACE,CACzB,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAI,EACzC,CAACC,EAASC,CAAU,EAAIF,EAAAA,SAAS,EAAK,EAEtC,CAACG,EAAOC,CAAQ,EAAIJ,EAAAA,SAA4B,MAAS,EACzD,CAACK,EAAMC,CAAO,EAAIN,EAAAA,SAA2B,MAAS,EAE5DO,OAAAA,EAAAA,UAAU,IAAM,CACdR,EAAa,EAAI,EACjBH,EAAA,EACG,KAAMY,GAAa,CAClBF,EAAQE,CAAQ,EAChBJ,EAAS,MAAS,EAClBF,EAAW,EAAK,CAAA,CACjB,EACA,MAAOC,GAAiB,CACvBC,EAASD,CAAK,EACdD,EAAW,EAAI,CAAA,CAChB,EACA,QAAQ,IAAM,CACbH,EAAa,EAAK,CAAA,CACnB,CAAA,EACFF,CAAI,EAEA,CACL,KAAAQ,EACA,UAAAP,EACA,QAAAG,EACA,MAAAE,CAAA,CAEJ"}
1
+ {"version":3,"file":"useAsync.cjs","sources":["../../../../src/hooks/useAsync/useAsync.ts"],"sourcesContent":["import type { DependencyList } from 'react';\n\nimport { useEffect, useState } from 'react';\n\n/* The use query return type */\nexport interface UseAsyncReturn<Data> {\n /* The state of the query */\n data?: Data;\n /* The error of the query */\n error?: Error;\n /* The error state of the query */\n isError: boolean;\n /* The loading state of the query */\n isLoading: boolean;\n}\n\n/**\n * @name useAsync\n * @description - Hook that provides the state of an async callback\n * @category Async\n * @usage medium\n *\n * @param {() => Promise<Data>} callback The async callback\n * @param {DependencyList} [deps=[]] The dependencies of the callback\n * @returns {UseAsyncReturn<Data>} The state of the async callback\n *\n * @example\n * const { data, isLoading, isError, error } = useAsync(() => fetch('url'), [deps]);\n */\nexport const useAsync = <Data>(\n callback: () => Promise<Data>,\n deps: DependencyList = []\n): UseAsyncReturn<Data> => {\n const [isLoading, setIsLoading] = useState(true);\n const [isError, setIsError] = useState(false);\n\n const [error, setError] = useState<Error | undefined>(undefined);\n const [data, setData] = useState<Data | undefined>(undefined);\n\n useEffect(() => {\n setIsLoading(true);\n callback()\n .then((response) => {\n setData(response);\n setError(undefined);\n setIsError(false);\n })\n .catch((error: Error) => {\n setError(error);\n setIsError(true);\n })\n .finally(() => {\n setIsLoading(false);\n });\n }, deps);\n\n return {\n data,\n isLoading,\n isError,\n error\n };\n};\n"],"names":["useAsync","callback","deps","isLoading","setIsLoading","useState","isError","setIsError","error","setError","data","setData","useEffect","response"],"mappings":"yGA6BaA,EAAW,CACtBC,EACAC,EAAuB,KACE,CACzB,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAI,EACzC,CAACC,EAASC,CAAU,EAAIF,EAAAA,SAAS,EAAK,EAEtC,CAACG,EAAOC,CAAQ,EAAIJ,EAAAA,SAA4B,MAAS,EACzD,CAACK,EAAMC,CAAO,EAAIN,EAAAA,SAA2B,MAAS,EAE5DO,OAAAA,EAAAA,UAAU,IAAM,CACdR,EAAa,EAAI,EACjBH,EAAA,EACG,KAAMY,GAAa,CAClBF,EAAQE,CAAQ,EAChBJ,EAAS,MAAS,EAClBF,EAAW,EAAK,CAAA,CACjB,EACA,MAAOC,GAAiB,CACvBC,EAASD,CAAK,EACdD,EAAW,EAAI,CAAA,CAChB,EACA,QAAQ,IAAM,CACbH,EAAa,EAAK,CAAA,CACnB,CAAA,EACFF,CAAI,EAEA,CACL,KAAAQ,EACA,UAAAP,EACA,QAAAG,EACA,MAAAE,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useAudio.cjs","sources":["../../../../src/hooks/useAudio/useAudio.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** Type sprite map */\nexport interface SpriteMap {\n /** [start time in seconds, end time in seconds] */\n [key: string]: [number, number];\n}\n\n/** Type use audio options */\nexport interface UseAudioOptions {\n /** Whether audio playback is initially enabled */\n immediately?: boolean;\n /** Whether to stop current playback when starting a new one */\n interrupt?: boolean;\n /** Initial playback speed (0.5 to 2) */\n playbackRate?: number;\n /** Map of named audio segments for sprite-based playback */\n sprite?: SpriteMap;\n /** Initial volume level (0 to 1) */\n volume?: number;\n}\n\n/** Type use audio return type */\nexport interface UseAudioReturn {\n /** Current playback speed (0.5 to 2) */\n playbackRate: number;\n /** Whether audio is currently playing */\n playing: boolean;\n /** Current volume level (0 to 1) */\n volume: number;\n /** Set playback speed (0.5 to 2) */\n changePlaybackRate: (value: number) => void;\n /** Pause audio playback at current position */\n pause: () => void;\n /** Start audio playback from the beginning or specified sprite segment */\n play: (sprite?: string) => Promise<void>;\n /** Set audio volume level (0 to 1) */\n setVolume: (value: number) => void;\n /** Stop audio playback and reset position to start */\n stop: () => void;\n}\n\n/**\n * @name useAudio\n * @description - Hook that manages audio playback with sprite support\n * @category Browser\n *\n * @browserapi Audio https://developer.mozilla.org/en-US/docs/Web/API/Audio\n *\n * @template Value The type of the value\n * @param {string} url The URL of the audio file to play\n * @param {UseAudioOptions} [options] Audio configuration options\n * @param {number} [options.volume=1] Initial volume level (0 to 1)\n * @param {number} [options.playbackRate=1] Initial playback speed (0.5 to 2)\n * @param {boolean} [options.interrupt=false] Whether to stop current playback when starting a new one\n * @param {boolean} [options.soundEnabled=true] Whether audio playback is initially enabled\n * @param {SpriteMap} [options.sprite] Map of named audio segments for sprite-based playback\n * @returns {UseAudioReturn} An object containing audio controls and state\n *\n * @example\n * const audio = useAudio(\"/path/to/sound.mp3\");\n */\nexport const useAudio = (src: string, options: UseAudioOptions = {}): UseAudioReturn => {\n const [playing, setPlaying] = useState(false);\n const [volume, setCurrentVolume] = useState(options.volume ?? 1);\n const [playbackRate, setPlaybackRate] = useState(options.playbackRate ?? 1);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n\n useEffect(() => {\n const audio = new Audio(src);\n\n audio.volume = volume;\n audio.playbackRate = playbackRate;\n audioRef.current = audio;\n\n if (options.immediately) audio.play();\n\n const onPlay = () => setPlaying(true);\n const onPause = () => setPlaying(false);\n const onEnded = () => setPlaying(false);\n const onTimeUpdate = () => {};\n const onVolumeChange = () => setCurrentVolume(audio.volume);\n const onRateChange = () => setPlaybackRate(audio.playbackRate);\n\n audio.addEventListener('play', onPlay);\n audio.addEventListener('pause', onPause);\n audio.addEventListener('ended', onEnded);\n audio.addEventListener('timeupdate', onTimeUpdate);\n audio.addEventListener('volumechange', onVolumeChange);\n audio.addEventListener('ratechange', onRateChange);\n\n return () => {\n audio.removeEventListener('play', onPlay);\n audio.removeEventListener('pause', onPause);\n audio.removeEventListener('ended', onEnded);\n audio.removeEventListener('timeupdate', onTimeUpdate);\n audio.removeEventListener('volumechange', onVolumeChange);\n audio.removeEventListener('ratechange', onRateChange);\n\n audio.pause();\n audio.remove();\n };\n }, [src]);\n\n const stop = () => {\n if (!audioRef.current) return;\n audioRef.current.pause();\n audioRef.current.currentTime = 0;\n };\n\n const play = async (spriteName?: string) => {\n if (!audioRef.current) return;\n if (options.interrupt) stop();\n\n if (!spriteName || !options.sprite?.[spriteName]) {\n await audioRef.current.play();\n return;\n }\n\n const [start, end] = options.sprite[spriteName];\n audioRef.current.currentTime = start;\n await audioRef.current.play();\n\n const checkTime = () => {\n if (!audioRef.current) return;\n if (audioRef.current.currentTime >= end) {\n stop();\n }\n\n if (!playing) return;\n\n requestAnimationFrame(checkTime);\n };\n\n requestAnimationFrame(checkTime);\n };\n\n const pause = () => audioRef.current?.pause();\n\n const setVolume = (value: number) => {\n if (!audioRef.current) return;\n const newVolume = Math.max(0, Math.min(1, value));\n audioRef.current.volume = newVolume;\n setCurrentVolume(newVolume);\n };\n\n const changePlaybackRate = (value: number) => {\n if (!audioRef.current) return;\n const newRate = Math.max(0.5, Math.min(2, value));\n audioRef.current.playbackRate = newRate;\n setPlaybackRate(newRate);\n };\n\n return {\n play,\n pause,\n stop,\n playing,\n setVolume,\n volume,\n changePlaybackRate,\n playbackRate\n };\n};\n"],"names":["useAudio","src","options","playing","setPlaying","useState","volume","setCurrentVolume","playbackRate","setPlaybackRate","audioRef","useRef","useEffect","audio","onPlay","onPause","onEnded","onTimeUpdate","onVolumeChange","onRateChange","stop","spriteName","start","end","checkTime","value","newVolume","newRate"],"mappings":"yGA8DaA,EAAW,CAACC,EAAaC,EAA2B,KAAuB,CACtF,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtC,CAACC,EAAQC,CAAgB,EAAIF,EAAAA,SAASH,EAAQ,QAAU,CAAC,EACzD,CAACM,EAAcC,CAAe,EAAIJ,EAAAA,SAASH,EAAQ,cAAgB,CAAC,EAEpEQ,EAAWC,EAAAA,OAAgC,IAAI,EAErDC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAQ,IAAI,MAAMZ,CAAG,EAE3BY,EAAM,OAASP,EACfO,EAAM,aAAeL,EACrBE,EAAS,QAAUG,EAEfX,EAAQ,aAAaW,EAAM,KAAA,EAE/B,MAAMC,EAAS,IAAMV,EAAW,EAAI,EAC9BW,EAAU,IAAMX,EAAW,EAAK,EAChCY,EAAU,IAAMZ,EAAW,EAAK,EAChCa,EAAe,IAAM,CAAA,EACrBC,EAAiB,IAAMX,EAAiBM,EAAM,MAAM,EACpDM,EAAe,IAAMV,EAAgBI,EAAM,YAAY,EAE7D,OAAAA,EAAM,iBAAiB,OAAQC,CAAM,EACrCD,EAAM,iBAAiB,QAASE,CAAO,EACvCF,EAAM,iBAAiB,QAASG,CAAO,EACvCH,EAAM,iBAAiB,aAAcI,CAAY,EACjDJ,EAAM,iBAAiB,eAAgBK,CAAc,EACrDL,EAAM,iBAAiB,aAAcM,CAAY,EAE1C,IAAM,CACXN,EAAM,oBAAoB,OAAQC,CAAM,EACxCD,EAAM,oBAAoB,QAASE,CAAO,EAC1CF,EAAM,oBAAoB,QAASG,CAAO,EAC1CH,EAAM,oBAAoB,aAAcI,CAAY,EACpDJ,EAAM,oBAAoB,eAAgBK,CAAc,EACxDL,EAAM,oBAAoB,aAAcM,CAAY,EAEpDN,EAAM,MAAA,EACNA,EAAM,OAAA,CAAO,CACf,EACC,CAACZ,CAAG,CAAC,EAER,MAAMmB,EAAO,IAAM,CACZV,EAAS,UACdA,EAAS,QAAQ,MAAA,EACjBA,EAAS,QAAQ,YAAc,EAAA,EA8CjC,MAAO,CACL,KA5CW,MAAOW,GAAwB,CAC1C,GAAI,CAACX,EAAS,QAAS,OAGvB,GAFIR,EAAQ,WAAWkB,EAAA,EAEnB,CAACC,GAAc,CAACnB,EAAQ,SAASmB,CAAU,EAAG,CAChD,MAAMX,EAAS,QAAQ,KAAA,EACvB,MAAA,CAGF,KAAM,CAACY,EAAOC,CAAG,EAAIrB,EAAQ,OAAOmB,CAAU,EAC9CX,EAAS,QAAQ,YAAcY,EAC/B,MAAMZ,EAAS,QAAQ,KAAA,EAEvB,MAAMc,EAAY,IAAM,CACjBd,EAAS,UACVA,EAAS,QAAQ,aAAea,GAClCH,EAAA,EAGGjB,GAEL,sBAAsBqB,CAAS,EAAA,EAGjC,sBAAsBA,CAAS,CAAA,EAqB/B,MAlBY,IAAMd,EAAS,SAAS,MAAA,EAmBpC,KAAAU,EACA,QAAAjB,EACA,UAnBiBsB,GAAkB,CACnC,GAAI,CAACf,EAAS,QAAS,OACvB,MAAMgB,EAAY,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGD,CAAK,CAAC,EAChDf,EAAS,QAAQ,OAASgB,EAC1BnB,EAAiBmB,CAAS,CAAA,EAgB1B,OAAApB,EACA,mBAd0BmB,GAAkB,CAC5C,GAAI,CAACf,EAAS,QAAS,OACvB,MAAMiB,EAAU,KAAK,IAAI,GAAK,KAAK,IAAI,EAAGF,CAAK,CAAC,EAChDf,EAAS,QAAQ,aAAeiB,EAChClB,EAAgBkB,CAAO,CAAA,EAWvB,aAAAnB,CAAA,CAEJ"}
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 * @usage low\n\n * @browserapi Audio https://developer.mozilla.org/en-US/docs/Web/API/Audio\n *\n * @template Value The type of the value\n * @param {string} url The URL of the audio file to play\n * @param {UseAudioOptions} [options] Audio configuration options\n * @param {number} [options.volume=1] Initial volume level (0 to 1)\n * @param {number} [options.playbackRate=1] Initial playback speed (0.5 to 2)\n * @param {boolean} [options.interrupt=false] Whether to stop current playback when starting a new one\n * @param {boolean} [options.soundEnabled=true] Whether audio playback is initially enabled\n * @param {SpriteMap} [options.sprite] Map of named audio segments for sprite-based playback\n * @returns {UseAudioReturn} An object containing audio controls and state\n *\n * @example\n * const audio = useAudio(\"/path/to/sound.mp3\");\n */\nexport const useAudio = (src: string, options: UseAudioOptions = {}): UseAudioReturn => {\n const [playing, setPlaying] = useState(false);\n const [volume, setCurrentVolume] = useState(options.volume ?? 1);\n const [playbackRate, setPlaybackRate] = useState(options.playbackRate ?? 1);\n\n const audioRef = useRef<HTMLAudioElement | null>(null);\n\n useEffect(() => {\n const audio = new Audio(src);\n\n audio.volume = volume;\n audio.playbackRate = playbackRate;\n audioRef.current = audio;\n\n if (options.immediately) audio.play();\n\n const onPlay = () => setPlaying(true);\n const onPause = () => setPlaying(false);\n const onEnded = () => setPlaying(false);\n const onTimeUpdate = () => {};\n const onVolumeChange = () => setCurrentVolume(audio.volume);\n const onRateChange = () => setPlaybackRate(audio.playbackRate);\n\n audio.addEventListener('play', onPlay);\n audio.addEventListener('pause', onPause);\n audio.addEventListener('ended', onEnded);\n audio.addEventListener('timeupdate', onTimeUpdate);\n audio.addEventListener('volumechange', onVolumeChange);\n audio.addEventListener('ratechange', onRateChange);\n\n return () => {\n audio.removeEventListener('play', onPlay);\n audio.removeEventListener('pause', onPause);\n audio.removeEventListener('ended', onEnded);\n audio.removeEventListener('timeupdate', onTimeUpdate);\n audio.removeEventListener('volumechange', onVolumeChange);\n audio.removeEventListener('ratechange', onRateChange);\n\n audio.pause();\n audio.remove();\n };\n }, [src]);\n\n const stop = () => {\n if (!audioRef.current) return;\n audioRef.current.pause();\n audioRef.current.currentTime = 0;\n };\n\n const play = async (spriteName?: string) => {\n if (!audioRef.current) return;\n if (options.interrupt) stop();\n\n if (!spriteName || !options.sprite?.[spriteName]) {\n await audioRef.current.play();\n return;\n }\n\n const [start, end] = options.sprite[spriteName];\n audioRef.current.currentTime = start;\n await audioRef.current.play();\n\n const checkTime = () => {\n if (!audioRef.current) return;\n if (audioRef.current.currentTime >= end) {\n stop();\n }\n\n if (!playing) return;\n\n requestAnimationFrame(checkTime);\n };\n\n requestAnimationFrame(checkTime);\n };\n\n const pause = () => audioRef.current?.pause();\n\n const setVolume = (value: number) => {\n if (!audioRef.current) return;\n const newVolume = Math.max(0, Math.min(1, value));\n audioRef.current.volume = newVolume;\n setCurrentVolume(newVolume);\n };\n\n const changePlaybackRate = (value: number) => {\n if (!audioRef.current) return;\n const newRate = Math.max(0.5, Math.min(2, value));\n audioRef.current.playbackRate = newRate;\n setPlaybackRate(newRate);\n };\n\n return {\n play,\n pause,\n stop,\n playing,\n setVolume,\n volume,\n changePlaybackRate,\n playbackRate\n };\n};\n"],"names":["useAudio","src","options","playing","setPlaying","useState","volume","setCurrentVolume","playbackRate","setPlaybackRate","audioRef","useRef","useEffect","audio","onPlay","onPause","onEnded","onTimeUpdate","onVolumeChange","onRateChange","stop","spriteName","start","end","checkTime","value","newVolume","newRate"],"mappings":"yGA+DaA,EAAW,CAACC,EAAaC,EAA2B,KAAuB,CACtF,KAAM,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtC,CAACC,EAAQC,CAAgB,EAAIF,EAAAA,SAASH,EAAQ,QAAU,CAAC,EACzD,CAACM,EAAcC,CAAe,EAAIJ,EAAAA,SAASH,EAAQ,cAAgB,CAAC,EAEpEQ,EAAWC,EAAAA,OAAgC,IAAI,EAErDC,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAQ,IAAI,MAAMZ,CAAG,EAE3BY,EAAM,OAASP,EACfO,EAAM,aAAeL,EACrBE,EAAS,QAAUG,EAEfX,EAAQ,aAAaW,EAAM,KAAA,EAE/B,MAAMC,EAAS,IAAMV,EAAW,EAAI,EAC9BW,EAAU,IAAMX,EAAW,EAAK,EAChCY,EAAU,IAAMZ,EAAW,EAAK,EAChCa,EAAe,IAAM,CAAA,EACrBC,EAAiB,IAAMX,EAAiBM,EAAM,MAAM,EACpDM,EAAe,IAAMV,EAAgBI,EAAM,YAAY,EAE7D,OAAAA,EAAM,iBAAiB,OAAQC,CAAM,EACrCD,EAAM,iBAAiB,QAASE,CAAO,EACvCF,EAAM,iBAAiB,QAASG,CAAO,EACvCH,EAAM,iBAAiB,aAAcI,CAAY,EACjDJ,EAAM,iBAAiB,eAAgBK,CAAc,EACrDL,EAAM,iBAAiB,aAAcM,CAAY,EAE1C,IAAM,CACXN,EAAM,oBAAoB,OAAQC,CAAM,EACxCD,EAAM,oBAAoB,QAASE,CAAO,EAC1CF,EAAM,oBAAoB,QAASG,CAAO,EAC1CH,EAAM,oBAAoB,aAAcI,CAAY,EACpDJ,EAAM,oBAAoB,eAAgBK,CAAc,EACxDL,EAAM,oBAAoB,aAAcM,CAAY,EAEpDN,EAAM,MAAA,EACNA,EAAM,OAAA,CAAO,CACf,EACC,CAACZ,CAAG,CAAC,EAER,MAAMmB,EAAO,IAAM,CACZV,EAAS,UACdA,EAAS,QAAQ,MAAA,EACjBA,EAAS,QAAQ,YAAc,EAAA,EA8CjC,MAAO,CACL,KA5CW,MAAOW,GAAwB,CAC1C,GAAI,CAACX,EAAS,QAAS,OAGvB,GAFIR,EAAQ,WAAWkB,EAAA,EAEnB,CAACC,GAAc,CAACnB,EAAQ,SAASmB,CAAU,EAAG,CAChD,MAAMX,EAAS,QAAQ,KAAA,EACvB,MAAA,CAGF,KAAM,CAACY,EAAOC,CAAG,EAAIrB,EAAQ,OAAOmB,CAAU,EAC9CX,EAAS,QAAQ,YAAcY,EAC/B,MAAMZ,EAAS,QAAQ,KAAA,EAEvB,MAAMc,EAAY,IAAM,CACjBd,EAAS,UACVA,EAAS,QAAQ,aAAea,GAClCH,EAAA,EAGGjB,GAEL,sBAAsBqB,CAAS,EAAA,EAGjC,sBAAsBA,CAAS,CAAA,EAqB/B,MAlBY,IAAMd,EAAS,SAAS,MAAA,EAmBpC,KAAAU,EACA,QAAAjB,EACA,UAnBiBsB,GAAkB,CACnC,GAAI,CAACf,EAAS,QAAS,OACvB,MAAMgB,EAAY,KAAK,IAAI,EAAG,KAAK,IAAI,EAAGD,CAAK,CAAC,EAChDf,EAAS,QAAQ,OAASgB,EAC1BnB,EAAiBmB,CAAS,CAAA,EAgB1B,OAAApB,EACA,mBAd0BmB,GAAkB,CAC5C,GAAI,CAACf,EAAS,QAAS,OACvB,MAAMiB,EAAU,KAAK,IAAI,GAAK,KAAK,IAAI,EAAGF,CAAK,CAAC,EAChDf,EAAS,QAAQ,aAAeiB,EAChClB,EAAgBkB,CAAO,CAAA,EAWvB,aAAAnB,CAAA,CAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const L=require("react"),m=require("../useRefState/useRefState.cjs"),R=require("../../utils/helpers/isTarget.cjs"),q=require("../../utils/helpers/getElement.cjs"),H=(...n)=>{const c=R.isTarget(n[0])?n[0]:void 0,f=n[1]||(typeof n[0]=="object"?n[0]:{}),{enabled:v=!0}=f,l=m.useRefState(),o=L.useRef(f);if(o.current=f,L.useEffect(()=>{if(!v||!c&&!l.state)return;const e=c?q.getElement(c):l.state;if(!e)return;let s=!0,a=0,h=0;const g=()=>{if(o.current.force)return;const{scrollHeight:t,clientHeight:u,scrollTop:r}=e,i=t-u,d=i/2;console.log(i,r,d,r<h,i-r<=d),r<h?s=!1:i-r<=d&&(s=!0),h=r},S=t=>{o.current.force||(t.deltaY<0?s=!1:g())},E=t=>{o.current.force||(a=t.touches[0].clientY)},T=t=>{if(o.current.force)return;const u=t.touches[0].clientY;a-u<0?s=!1:g(),a=u},Y=()=>{!s&&!o.current.force||e.scrollTo({top:e.scrollHeight})};e.addEventListener("wheel",S),e.addEventListener("touchstart",E),e.addEventListener("touchmove",T);const b=new MutationObserver(Y);return b.observe(e,{childList:!0,subtree:!0,characterData:!0}),()=>{b.disconnect(),e.removeEventListener("wheel",S),e.removeEventListener("touchstart",E),e.removeEventListener("touchmove",T)}},[v,c,l.state]),!c)return l};exports.useAutoScroll=H;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const b=require("react"),m=require("../useRefState/useRefState.cjs"),R=require("../../utils/helpers/isTarget.cjs"),q=require("../../utils/helpers/getElement.cjs"),H=(...o)=>{const n=R.isTarget(o[0])?o[0]:void 0,i=o[1]||(typeof o[0]=="object"?o[0]:{}),{enabled:a=!0}=i,s=m.useRefState(),r=b.useRef(i);if(r.current=i,b.useEffect(()=>{if(!a||!n&&!s.state)return;const e=n?q.getElement(n):s.state;if(!e)return;let c=!0,f=0,h=0;const d=()=>{if(r.current.force)return;const{scrollHeight:t,clientHeight:l,scrollTop:u}=e,T=t-l,Y=T/2;u<h?c=!1:T-u<=Y&&(c=!0),h=u},v=t=>{r.current.force||(t.deltaY<0?c=!1:d())},S=t=>{r.current.force||(f=t.touches[0].clientY)},g=t=>{if(r.current.force)return;const l=t.touches[0].clientY;f-l<0?c=!1:d(),f=l},L=()=>{!c&&!r.current.force||e.scrollTo({top:e.scrollHeight})};e.addEventListener("wheel",v),e.addEventListener("touchstart",S),e.addEventListener("touchmove",g);const E=new MutationObserver(L);return E.observe(e,{childList:!0,subtree:!0,characterData:!0}),()=>{E.disconnect(),e.removeEventListener("wheel",v),e.removeEventListener("touchstart",S),e.removeEventListener("touchmove",g)}},[a,n,s.state]),!n)return s};exports.useAutoScroll=H;
2
2
  //# sourceMappingURL=useAutoScroll.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useAutoScroll.cjs","sources":["../../../../src/hooks/useAutoScroll/useAutoScroll.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use auto scroll options type */\nexport interface UseAutoScrollOptions {\n /** Whether auto-scrolling is enabled */\n enabled?: boolean;\n /** Whether to force auto-scrolling regardless of user interactions */\n force?: boolean;\n}\n\nexport interface UseAutoScroll {\n (target: HookTarget, options?: UseAutoScrollOptions): void;\n\n <Target extends HTMLElement>(options?: UseAutoScrollOptions): StateRef<Target>;\n}\n\n/**\n * @name useAutoScroll\n * @description - Hook that automatically scrolls a list element to the bottom\n * @category Elements\n *\n * @overload\n * @param {HookTarget} target The target element to auto-scroll\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {void}\n *\n * @example\n * useAutoScroll(ref);\n *\n * @overload\n * @template Target\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {StateRef<Target>} A React ref to attach to the list element\n *\n * @example\n * const ref = useAutoScroll();\n */\nexport const useAutoScroll = ((...params: any[]) => {\n const target = isTarget(params[0]) ? params[0] : undefined;\n const options = (params[1] ||\n (typeof params[0] === 'object' ? params[0] : {})) as UseAutoScrollOptions;\n const { enabled = true } = options;\n\n const internalRef = useRefState<HTMLElement>();\n const internalOptionsRef = useRef<UseAutoScrollOptions>(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n\n const element = (target ? getElement(target) : internalRef.state) as HTMLElement;\n\n if (!element) return;\n\n let shouldAutoScroll = true;\n let touchStartY = 0;\n let lastScrollTop = 0;\n\n const onCheckScrollPosition = () => {\n if (internalOptionsRef.current.force) return;\n\n const { scrollHeight, clientHeight, scrollTop } = element;\n const maxScrollHeight = scrollHeight - clientHeight;\n const scrollThreshold = maxScrollHeight / 2;\n console.log(\n maxScrollHeight,\n scrollTop,\n scrollThreshold,\n scrollTop < lastScrollTop,\n maxScrollHeight - scrollTop <= scrollThreshold\n );\n\n if (scrollTop < lastScrollTop) shouldAutoScroll = false;\n else if (maxScrollHeight - scrollTop <= scrollThreshold) shouldAutoScroll = true;\n\n lastScrollTop = scrollTop;\n };\n\n const onWheel = (event: WheelEvent) => {\n if (internalOptionsRef.current.force) return;\n\n if (event.deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n };\n\n const onTouchStart = (event: TouchEvent) => {\n if (internalOptionsRef.current.force) return;\n touchStartY = event.touches[0].clientY;\n };\n\n const onTouchMove = (event: TouchEvent) => {\n if (internalOptionsRef.current.force) return;\n\n const touchEndY = event.touches[0].clientY;\n const deltaY = touchStartY - touchEndY;\n\n if (deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n\n touchStartY = touchEndY;\n };\n\n const onMutation = () => {\n if (!shouldAutoScroll && !internalOptionsRef.current.force) return;\n element.scrollTo({ top: element.scrollHeight });\n };\n\n element.addEventListener('wheel', onWheel);\n element.addEventListener('touchstart', onTouchStart);\n element.addEventListener('touchmove', onTouchMove);\n\n const observer = new MutationObserver(onMutation);\n\n observer.observe(element, {\n childList: true,\n subtree: true,\n characterData: true\n });\n\n return () => {\n observer.disconnect();\n element.removeEventListener('wheel', onWheel);\n element.removeEventListener('touchstart', onTouchStart);\n element.removeEventListener('touchmove', onTouchMove);\n };\n }, [enabled, target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseAutoScroll;\n"],"names":["useAutoScroll","params","target","isTarget","options","enabled","internalRef","useRefState","internalOptionsRef","useRef","useEffect","element","getElement","shouldAutoScroll","touchStartY","lastScrollTop","onCheckScrollPosition","scrollHeight","clientHeight","scrollTop","maxScrollHeight","scrollThreshold","onWheel","event","onTouchStart","onTouchMove","touchEndY","onMutation","observer"],"mappings":"mPA6CaA,EAAiB,IAAIC,IAAkB,CAClD,MAAMC,EAASC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC3CG,EAAWH,EAAO,CAAC,IACtB,OAAOA,EAAO,CAAC,GAAM,SAAWA,EAAO,CAAC,EAAI,CAAA,GACzC,CAAE,QAAAI,EAAU,EAAA,EAASD,EAErBE,EAAcC,EAAAA,YAAA,EACdC,EAAqBC,EAAAA,OAA6BL,CAAO,EAmF/D,GAlFAI,EAAmB,QAAUJ,EAE7BM,EAAAA,UAAU,IAAM,CACd,GAAI,CAACL,GAAY,CAACH,GAAU,CAACI,EAAY,MAAQ,OAEjD,MAAMK,EAAWT,EAASU,EAAAA,WAAWV,CAAM,EAAII,EAAY,MAE3D,GAAI,CAACK,EAAS,OAEd,IAAIE,EAAmB,GACnBC,EAAc,EACdC,EAAgB,EAEpB,MAAMC,EAAwB,IAAM,CAClC,GAAIR,EAAmB,QAAQ,MAAO,OAEtC,KAAM,CAAE,aAAAS,EAAc,aAAAC,EAAc,UAAAC,CAAA,EAAcR,EAC5CS,EAAkBH,EAAeC,EACjCG,EAAkBD,EAAkB,EAC1C,QAAQ,IACNA,EACAD,EACAE,EACAF,EAAYJ,EACZK,EAAkBD,GAAaE,CAAA,EAG7BF,EAAYJ,EAAeF,EAAmB,GACzCO,EAAkBD,GAAaE,IAAiBR,EAAmB,IAE5EE,EAAgBI,CAAA,EAGZG,EAAWC,GAAsB,CACjCf,EAAmB,QAAQ,QAE3Be,EAAM,OAAS,EAAGV,EAAmB,GACpCG,EAAA,EAAsB,EAGvBQ,EAAgBD,GAAsB,CACtCf,EAAmB,QAAQ,QAC/BM,EAAcS,EAAM,QAAQ,CAAC,EAAE,QAAA,EAG3BE,EAAeF,GAAsB,CACzC,GAAIf,EAAmB,QAAQ,MAAO,OAEtC,MAAMkB,EAAYH,EAAM,QAAQ,CAAC,EAAE,QACpBT,EAAcY,EAEhB,EAAGb,EAAmB,GAC9BG,EAAA,EAELF,EAAcY,CAAA,EAGVC,EAAa,IAAM,CACnB,CAACd,GAAoB,CAACL,EAAmB,QAAQ,OACrDG,EAAQ,SAAS,CAAE,IAAKA,EAAQ,aAAc,CAAA,EAGhDA,EAAQ,iBAAiB,QAASW,CAAO,EACzCX,EAAQ,iBAAiB,aAAca,CAAY,EACnDb,EAAQ,iBAAiB,YAAac,CAAW,EAEjD,MAAMG,EAAW,IAAI,iBAAiBD,CAAU,EAEhD,OAAAC,EAAS,QAAQjB,EAAS,CACxB,UAAW,GACX,QAAS,GACT,cAAe,EAAA,CAChB,EAEM,IAAM,CACXiB,EAAS,WAAA,EACTjB,EAAQ,oBAAoB,QAASW,CAAO,EAC5CX,EAAQ,oBAAoB,aAAca,CAAY,EACtDb,EAAQ,oBAAoB,YAAac,CAAW,CAAA,CACtD,EACC,CAACpB,EAASH,EAAQI,EAAY,KAAK,CAAC,EAEnC,CAAAJ,EACJ,OAAOI,CACT"}
1
+ {"version":3,"file":"useAutoScroll.cjs","sources":["../../../../src/hooks/useAutoScroll/useAutoScroll.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use auto scroll options type */\nexport interface UseAutoScrollOptions {\n /** Whether auto-scrolling is enabled */\n enabled?: boolean;\n /** Whether to force auto-scrolling regardless of user interactions */\n force?: boolean;\n}\n\nexport interface UseAutoScroll {\n (target: HookTarget, options?: UseAutoScrollOptions): void;\n\n <Target extends HTMLElement>(options?: UseAutoScrollOptions): StateRef<Target>;\n}\n\n/**\n * @name useAutoScroll\n * @description - Hook that automatically scrolls a list element to the bottom\n * @category Elements\n * @usage low\n *\n * @overload\n * @param {HookTarget} target The target element to auto-scroll\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {void}\n *\n * @example\n * useAutoScroll(ref);\n *\n * @overload\n * @template Target\n * @param {boolean} [options.enabled] Whether auto-scrolling is enabled\n * @returns {StateRef<Target>} A React ref to attach to the list element\n *\n * @example\n * const ref = useAutoScroll();\n */\nexport const useAutoScroll = ((...params: any[]) => {\n const target = isTarget(params[0]) ? params[0] : undefined;\n const options = (params[1] ||\n (typeof params[0] === 'object' ? params[0] : {})) as UseAutoScrollOptions;\n const { enabled = true } = options;\n\n const internalRef = useRefState<HTMLElement>();\n const internalOptionsRef = useRef<UseAutoScrollOptions>(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n\n const element = (target ? getElement(target) : internalRef.state) as HTMLElement;\n\n if (!element) return;\n\n let shouldAutoScroll = true;\n let touchStartY = 0;\n let lastScrollTop = 0;\n\n const onCheckScrollPosition = () => {\n if (internalOptionsRef.current.force) return;\n\n const { scrollHeight, clientHeight, scrollTop } = element;\n const maxScrollHeight = scrollHeight - clientHeight;\n const scrollThreshold = maxScrollHeight / 2;\n\n if (scrollTop < lastScrollTop) shouldAutoScroll = false;\n else if (maxScrollHeight - scrollTop <= scrollThreshold) shouldAutoScroll = true;\n\n lastScrollTop = scrollTop;\n };\n\n const onWheel = (event: WheelEvent) => {\n if (internalOptionsRef.current.force) return;\n\n if (event.deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n };\n\n const onTouchStart = (event: TouchEvent) => {\n if (internalOptionsRef.current.force) return;\n touchStartY = event.touches[0].clientY;\n };\n\n const onTouchMove = (event: TouchEvent) => {\n if (internalOptionsRef.current.force) return;\n\n const touchEndY = event.touches[0].clientY;\n const deltaY = touchStartY - touchEndY;\n\n if (deltaY < 0) shouldAutoScroll = false;\n else onCheckScrollPosition();\n\n touchStartY = touchEndY;\n };\n\n const onMutation = () => {\n if (!shouldAutoScroll && !internalOptionsRef.current.force) return;\n element.scrollTo({ top: element.scrollHeight });\n };\n\n element.addEventListener('wheel', onWheel);\n element.addEventListener('touchstart', onTouchStart);\n element.addEventListener('touchmove', onTouchMove);\n\n const observer = new MutationObserver(onMutation);\n\n observer.observe(element, {\n childList: true,\n subtree: true,\n characterData: true\n });\n\n return () => {\n observer.disconnect();\n element.removeEventListener('wheel', onWheel);\n element.removeEventListener('touchstart', onTouchStart);\n element.removeEventListener('touchmove', onTouchMove);\n };\n }, [enabled, target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseAutoScroll;\n"],"names":["useAutoScroll","params","target","isTarget","options","enabled","internalRef","useRefState","internalOptionsRef","useRef","useEffect","element","getElement","shouldAutoScroll","touchStartY","lastScrollTop","onCheckScrollPosition","scrollHeight","clientHeight","scrollTop","maxScrollHeight","scrollThreshold","onWheel","event","onTouchStart","onTouchMove","touchEndY","onMutation","observer"],"mappings":"mPA8CaA,EAAiB,IAAIC,IAAkB,CAClD,MAAMC,EAASC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC3CG,EAAWH,EAAO,CAAC,IACtB,OAAOA,EAAO,CAAC,GAAM,SAAWA,EAAO,CAAC,EAAI,CAAA,GACzC,CAAE,QAAAI,EAAU,EAAA,EAASD,EAErBE,EAAcC,EAAAA,YAAA,EACdC,EAAqBC,EAAAA,OAA6BL,CAAO,EA4E/D,GA3EAI,EAAmB,QAAUJ,EAE7BM,EAAAA,UAAU,IAAM,CACd,GAAI,CAACL,GAAY,CAACH,GAAU,CAACI,EAAY,MAAQ,OAEjD,MAAMK,EAAWT,EAASU,EAAAA,WAAWV,CAAM,EAAII,EAAY,MAE3D,GAAI,CAACK,EAAS,OAEd,IAAIE,EAAmB,GACnBC,EAAc,EACdC,EAAgB,EAEpB,MAAMC,EAAwB,IAAM,CAClC,GAAIR,EAAmB,QAAQ,MAAO,OAEtC,KAAM,CAAE,aAAAS,EAAc,aAAAC,EAAc,UAAAC,CAAA,EAAcR,EAC5CS,EAAkBH,EAAeC,EACjCG,EAAkBD,EAAkB,EAEtCD,EAAYJ,EAAeF,EAAmB,GACzCO,EAAkBD,GAAaE,IAAiBR,EAAmB,IAE5EE,EAAgBI,CAAA,EAGZG,EAAWC,GAAsB,CACjCf,EAAmB,QAAQ,QAE3Be,EAAM,OAAS,EAAGV,EAAmB,GACpCG,EAAA,EAAsB,EAGvBQ,EAAgBD,GAAsB,CACtCf,EAAmB,QAAQ,QAC/BM,EAAcS,EAAM,QAAQ,CAAC,EAAE,QAAA,EAG3BE,EAAeF,GAAsB,CACzC,GAAIf,EAAmB,QAAQ,MAAO,OAEtC,MAAMkB,EAAYH,EAAM,QAAQ,CAAC,EAAE,QACpBT,EAAcY,EAEhB,EAAGb,EAAmB,GAC9BG,EAAA,EAELF,EAAcY,CAAA,EAGVC,EAAa,IAAM,CACnB,CAACd,GAAoB,CAACL,EAAmB,QAAQ,OACrDG,EAAQ,SAAS,CAAE,IAAKA,EAAQ,aAAc,CAAA,EAGhDA,EAAQ,iBAAiB,QAASW,CAAO,EACzCX,EAAQ,iBAAiB,aAAca,CAAY,EACnDb,EAAQ,iBAAiB,YAAac,CAAW,EAEjD,MAAMG,EAAW,IAAI,iBAAiBD,CAAU,EAEhD,OAAAC,EAAS,QAAQjB,EAAS,CACxB,UAAW,GACX,QAAS,GACT,cAAe,EAAA,CAChB,EAEM,IAAM,CACXiB,EAAS,WAAA,EACTjB,EAAQ,oBAAoB,QAASW,CAAO,EAC5CX,EAAQ,oBAAoB,aAAca,CAAY,EACtDb,EAAQ,oBAAoB,YAAac,CAAW,CAAA,CACtD,EACC,CAACpB,EAASH,EAAQI,EAAY,KAAK,CAAC,EAEnC,CAAAJ,EACJ,OAAOI,CACT"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react"),c=()=>{const t=typeof navigator<"u"&&"getBattery"in navigator&&typeof navigator.getBattery=="function",[i,r]=a.useState({loading:t,level:0,charging:!1,chargingTime:0,dischargingTime:0});return a.useEffect(()=>{if(!t)return;let e;const n=()=>r({loading:!1,level:e?.level??0,charging:e?.charging??!1,dischargingTime:e?.dischargingTime??0,chargingTime:e?.chargingTime??0});return navigator.getBattery().then(g=>{e=g,n(),e.addEventListener("levelchange",n),e.addEventListener("chargingchange",n),e.addEventListener("chargingtimechange",n),e.addEventListener("dischargingtimechange",n)}),()=>{e&&(console.log("unmount",e),e.removeEventListener("levelchange",n),e.removeEventListener("chargingchange",n),e.removeEventListener("chargingtimechange",n),e.removeEventListener("dischargingtimechange",n))}},[]),{supported:t,value:i}};exports.useBattery=c;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react"),c=()=>{const n=typeof navigator<"u"&&"getBattery"in navigator&&typeof navigator.getBattery=="function",[i,r]=a.useState({loading:n,level:0,charging:!1,chargingTime:0,dischargingTime:0});return a.useEffect(()=>{if(!n)return;let e;const t=()=>r({loading:!1,level:e?.level??0,charging:e?.charging??!1,dischargingTime:e?.dischargingTime??0,chargingTime:e?.chargingTime??0});return navigator.getBattery().then(g=>{e=g,t(),e.addEventListener("levelchange",t),e.addEventListener("chargingchange",t),e.addEventListener("chargingtimechange",t),e.addEventListener("dischargingtimechange",t)}),()=>{e&&(e.removeEventListener("levelchange",t),e.removeEventListener("chargingchange",t),e.removeEventListener("chargingtimechange",t),e.removeEventListener("dischargingtimechange",t))}},[]),{supported:n,value:i}};exports.useBattery=c;
2
2
  //# sourceMappingURL=useBattery.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBattery.cjs","sources":["../../../../src/hooks/useBattery/useBattery.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface BatteryManager extends EventTarget {\n charging: boolean;\n chargingTime: number;\n dischargingTime: number;\n level: number;\n}\n\ndeclare global {\n interface Navigator {\n readonly getBattery: () => Promise<BatteryManager>;\n }\n}\n\n/** The use battery value type */\nexport interface UseBatteryValue {\n /** Is charging battery? */\n charging: boolean;\n /** Time until the battery is fully charged */\n chargingTime: number;\n /** Time until the battery is completely discharged */\n dischargingTime: number;\n /** Battery charge level from 0 to 1 */\n level: number;\n /** Is battery information loading? */\n loading: boolean;\n}\n\n/** The use battery return type */\nexport interface UseBatteryStateReturn {\n /** Whether the battery api is supported*/\n supported: boolean;\n /** The use battery value type */\n value: UseBatteryValue;\n}\n\n/**\n * @name useBattery\n * @description - Hook for getting information about battery status\n * @category Browser\n *\n * @browserapi navigator.getBattery https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getBattery\n *\n * @returns {UseBatteryStateReturn} Object containing battery information & Battery API support\n *\n * @example\n * const { supported, loading, charging, chargingTime, dischargingTime, level } = useBattery();\n */\nexport const useBattery = (): UseBatteryStateReturn => {\n const supported =\n typeof navigator !== 'undefined' &&\n 'getBattery' in navigator &&\n typeof navigator.getBattery === 'function';\n const [value, setValue] = useState<UseBatteryValue>({\n loading: supported,\n level: 0,\n charging: false,\n chargingTime: 0,\n dischargingTime: 0\n });\n\n useEffect(() => {\n if (!supported) return;\n\n let battery: BatteryManager | null;\n\n const onChange = () =>\n setValue({\n loading: false,\n level: battery?.level ?? 0,\n charging: battery?.charging ?? false,\n dischargingTime: battery?.dischargingTime ?? 0,\n chargingTime: battery?.chargingTime ?? 0\n });\n\n navigator.getBattery().then((batteryManager) => {\n battery = batteryManager;\n onChange();\n\n battery.addEventListener('levelchange', onChange);\n battery.addEventListener('chargingchange', onChange);\n battery.addEventListener('chargingtimechange', onChange);\n battery.addEventListener('dischargingtimechange', onChange);\n });\n\n return () => {\n if (!battery) return;\n console.log('unmount', battery);\n battery.removeEventListener('levelchange', onChange);\n battery.removeEventListener('chargingchange', onChange);\n battery.removeEventListener('chargingtimechange', onChange);\n battery.removeEventListener('dischargingtimechange', onChange);\n };\n }, []);\n\n return { supported, value };\n};\n"],"names":["useBattery","supported","value","setValue","useState","useEffect","battery","onChange","batteryManager"],"mappings":"yGAiDaA,EAAa,IAA6B,CACrD,MAAMC,EACJ,OAAO,UAAc,KACrB,eAAgB,WAChB,OAAO,UAAU,YAAe,WAC5B,CAACC,EAAOC,CAAQ,EAAIC,WAA0B,CAClD,QAASH,EACT,MAAO,EACP,SAAU,GACV,aAAc,EACd,gBAAiB,CAAA,CAClB,EAEDI,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACJ,EAAW,OAEhB,IAAIK,EAEJ,MAAMC,EAAW,IACfJ,EAAS,CACP,QAAS,GACT,MAAOG,GAAS,OAAS,EACzB,SAAUA,GAAS,UAAY,GAC/B,gBAAiBA,GAAS,iBAAmB,EAC7C,aAAcA,GAAS,cAAgB,CAAA,CACxC,EAEH,iBAAU,WAAA,EAAa,KAAME,GAAmB,CAC9CF,EAAUE,EACVD,EAAA,EAEAD,EAAQ,iBAAiB,cAAeC,CAAQ,EAChDD,EAAQ,iBAAiB,iBAAkBC,CAAQ,EACnDD,EAAQ,iBAAiB,qBAAsBC,CAAQ,EACvDD,EAAQ,iBAAiB,wBAAyBC,CAAQ,CAAA,CAC3D,EAEM,IAAM,CACND,IACL,QAAQ,IAAI,UAAWA,CAAO,EAC9BA,EAAQ,oBAAoB,cAAeC,CAAQ,EACnDD,EAAQ,oBAAoB,iBAAkBC,CAAQ,EACtDD,EAAQ,oBAAoB,qBAAsBC,CAAQ,EAC1DD,EAAQ,oBAAoB,wBAAyBC,CAAQ,EAAA,CAC/D,EACC,EAAE,EAEE,CAAE,UAAAN,EAAW,MAAAC,CAAA,CACtB"}
1
+ {"version":3,"file":"useBattery.cjs","sources":["../../../../src/hooks/useBattery/useBattery.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface BatteryManager extends EventTarget {\n charging: boolean;\n chargingTime: number;\n dischargingTime: number;\n level: number;\n}\n\ndeclare global {\n interface Navigator {\n readonly getBattery: () => Promise<BatteryManager>;\n }\n}\n\n/** The use battery value type */\nexport interface UseBatteryValue {\n /** Is charging battery? */\n charging: boolean;\n /** Time until the battery is fully charged */\n chargingTime: number;\n /** Time until the battery is completely discharged */\n dischargingTime: number;\n /** Battery charge level from 0 to 1 */\n level: number;\n /** Is battery information loading? */\n loading: boolean;\n}\n\n/** The use battery return type */\nexport interface UseBatteryStateReturn {\n /** Whether the battery api is supported*/\n supported: boolean;\n /** The use battery value type */\n value: UseBatteryValue;\n}\n\n/**\n * @name useBattery\n * @description - Hook for getting information about battery status\n * @category Browser\n * @usage low\n *\n * @browserapi navigator.getBattery https://developer.mozilla.org/en-US/docs/Web/API/Navigator/getBattery\n *\n * @returns {UseBatteryStateReturn} Object containing battery information & Battery API support\n *\n * @example\n * const { supported, loading, charging, chargingTime, dischargingTime, level } = useBattery();\n */\nexport const useBattery = (): UseBatteryStateReturn => {\n const supported =\n typeof navigator !== 'undefined' &&\n 'getBattery' in navigator &&\n typeof navigator.getBattery === 'function';\n\n const [value, setValue] = useState<UseBatteryValue>({\n loading: supported,\n level: 0,\n charging: false,\n chargingTime: 0,\n dischargingTime: 0\n });\n\n useEffect(() => {\n if (!supported) return;\n\n let battery: BatteryManager | null;\n\n const onChange = () =>\n setValue({\n loading: false,\n level: battery?.level ?? 0,\n charging: battery?.charging ?? false,\n dischargingTime: battery?.dischargingTime ?? 0,\n chargingTime: battery?.chargingTime ?? 0\n });\n\n navigator.getBattery().then((batteryManager) => {\n battery = batteryManager;\n onChange();\n\n battery.addEventListener('levelchange', onChange);\n battery.addEventListener('chargingchange', onChange);\n battery.addEventListener('chargingtimechange', onChange);\n battery.addEventListener('dischargingtimechange', onChange);\n });\n\n return () => {\n if (!battery) return;\n battery.removeEventListener('levelchange', onChange);\n battery.removeEventListener('chargingchange', onChange);\n battery.removeEventListener('chargingtimechange', onChange);\n battery.removeEventListener('dischargingtimechange', onChange);\n };\n }, []);\n\n return { supported, value };\n};\n"],"names":["useBattery","supported","value","setValue","useState","useEffect","battery","onChange","batteryManager"],"mappings":"yGAkDaA,EAAa,IAA6B,CACrD,MAAMC,EACJ,OAAO,UAAc,KACrB,eAAgB,WAChB,OAAO,UAAU,YAAe,WAE5B,CAACC,EAAOC,CAAQ,EAAIC,WAA0B,CAClD,QAASH,EACT,MAAO,EACP,SAAU,GACV,aAAc,EACd,gBAAiB,CAAA,CAClB,EAEDI,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACJ,EAAW,OAEhB,IAAIK,EAEJ,MAAMC,EAAW,IACfJ,EAAS,CACP,QAAS,GACT,MAAOG,GAAS,OAAS,EACzB,SAAUA,GAAS,UAAY,GAC/B,gBAAiBA,GAAS,iBAAmB,EAC7C,aAAcA,GAAS,cAAgB,CAAA,CACxC,EAEH,iBAAU,WAAA,EAAa,KAAME,GAAmB,CAC9CF,EAAUE,EACVD,EAAA,EAEAD,EAAQ,iBAAiB,cAAeC,CAAQ,EAChDD,EAAQ,iBAAiB,iBAAkBC,CAAQ,EACnDD,EAAQ,iBAAiB,qBAAsBC,CAAQ,EACvDD,EAAQ,iBAAiB,wBAAyBC,CAAQ,CAAA,CAC3D,EAEM,IAAM,CACND,IACLA,EAAQ,oBAAoB,cAAeC,CAAQ,EACnDD,EAAQ,oBAAoB,iBAAkBC,CAAQ,EACtDD,EAAQ,oBAAoB,qBAAsBC,CAAQ,EAC1DD,EAAQ,oBAAoB,wBAAyBC,CAAQ,EAAA,CAC/D,EACC,EAAE,EAEE,CAAE,UAAAN,EAAW,MAAAC,CAAA,CACtB"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),p=u=>{const o=typeof navigator<"u"&&"bluetooth"in navigator,{acceptAllDevices:d=!1,filters:s,optionalServices:l}=u??{},[f,c]=t.useState(!1),[e,r]=t.useState(void 0),[g,a]=t.useState(void 0),S=async()=>{if(!o)return;const n=await navigator.bluetooth.requestDevice({acceptAllDevices:d,optionalServices:l,...s&&{filters:s,acceptAllDevices:!1}});r(n)};return t.useEffect(()=>{if(e&&e.gatt){const n=async()=>{if(!e.gatt)return;const v=await e.gatt.connect();a(v),c(v.connected)},i=()=>{a(void 0),r(void 0),c(!1)};return e.addEventListener("gattserverdisconnected",i),n(),()=>{e.removeEventListener("gattserverdisconnected",i),e.gatt?.disconnect()}}},[e]),{supported:o,connected:f,device:e,requestDevice:S,server:g}};exports.useBluetooth=p;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),p=u=>{const n=typeof navigator<"u"&&"bluetooth"in navigator&&!!navigator.bluetooth,{acceptAllDevices:d=!1,filters:s,optionalServices:l}=u??{},[f,c]=t.useState(!1),[e,r]=t.useState(void 0),[g,a]=t.useState(void 0),S=async()=>{if(!n)return;const o=await navigator.bluetooth.requestDevice({acceptAllDevices:d,optionalServices:l,...s&&{filters:s,acceptAllDevices:!1}});r(o)};return t.useEffect(()=>{if(!e?.gatt)return;const o=async()=>{const v=await e.gatt.connect();a(v),c(v.connected)},i=()=>{a(void 0),r(void 0),c(!1)};return e.addEventListener("gattserverdisconnected",i),o(),()=>{e.removeEventListener("gattserverdisconnected",i),e.gatt?.disconnect()}},[e]),{supported:n,connected:f,device:e,requestDevice:S,server:g}};exports.useBluetooth=p;
2
2
  //# sourceMappingURL=useBluetooth.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBluetooth.cjs","sources":["../../../../src/hooks/useBluetooth/useBluetooth.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/** The use bluetooth return type */\nexport interface UseBluetoothReturn {\n /** Indicates if bluetooth device is currently connected */\n connected: boolean;\n /** Describe connected bluetooth device */\n device?: BluetoothDevice;\n /** The GATT server for connected bluetooth device */\n server?: BluetoothRemoteGATTServer;\n /** Whether the bluetooth is supported*/\n supported: boolean;\n /** Function to request bluetooth device from the user */\n requestDevice: () => Promise<void>;\n}\n\n/** The use bluetooth options type */\nexport interface UseBluetoothOptions {\n /** The options to request all bluetooth devices */\n acceptAllDevices?: boolean;\n /** Array of filters to apply when scanning bluetooth devices */\n filters?: BluetoothLEScanFilter[];\n /** Array of optional services that the application can use */\n optionalServices?: BluetoothServiceUUID[];\n}\n\n/**\n * @name useBluetooth\n * @description - Hook for getting information about bluetooth\n * @category Browser\n *\n * @browserapi navigator.bluetooth https://developer.mozilla.org/en-US/docs/Web/API/Navigator/bluetooth\n *\n * @param {boolean} [options.acceptAllDevices=false] The options to request all Bluetooth devices\n * @param {Array<BluetoothLEScanFilter>} [options.filters] Array of filters to apply when scanning Bluetooth devices\n * @param {Array<BluetoothServiceUUID>} [options.optionalServices] Array of optional services that the application can use\n * @returns {UseBluetoothReturn} Object containing battery information & Battery API support\n *\n * @example\n * const { supported, connected, device, requestDevice, server } = useBluetooth(options);\n */\nexport const useBluetooth = (options?: UseBluetoothOptions): UseBluetoothReturn => {\n const supported = typeof navigator !== 'undefined' && 'bluetooth' in navigator;\n const { acceptAllDevices = false, filters, optionalServices } = options ?? {};\n\n const [connected, setIsConnected] = useState(false);\n const [device, setDevice] = useState<BluetoothDevice | undefined>(undefined);\n const [server, setServer] = useState<BluetoothRemoteGATTServer | undefined>(undefined);\n\n const requestDevice = async () => {\n if (!supported) return;\n\n const selectedDevice = await navigator.bluetooth.requestDevice({\n acceptAllDevices,\n optionalServices,\n ...(filters && { filters, acceptAllDevices: false })\n });\n\n setDevice(selectedDevice);\n };\n\n useEffect(() => {\n if (device && device.gatt) {\n const connectToBluetoothGATTServer = async () => {\n if (!device.gatt) return;\n const gattServer = await device.gatt.connect();\n setServer(gattServer);\n setIsConnected(gattServer.connected);\n };\n\n const reset = () => {\n setServer(undefined);\n setDevice(undefined);\n setIsConnected(false);\n };\n\n device.addEventListener('gattserverdisconnected', reset);\n connectToBluetoothGATTServer();\n\n return () => {\n device.removeEventListener('gattserverdisconnected', reset);\n device.gatt?.disconnect();\n };\n }\n }, [device]);\n\n return {\n supported,\n connected,\n device,\n requestDevice,\n server\n };\n};\n"],"names":["useBluetooth","options","supported","acceptAllDevices","filters","optionalServices","connected","setIsConnected","useState","device","setDevice","server","setServer","requestDevice","selectedDevice","useEffect","connectToBluetoothGATTServer","gattServer","reset"],"mappings":"yGAyCaA,EAAgBC,GAAsD,CACjF,MAAMC,EAAY,OAAO,UAAc,KAAe,cAAe,UAC/D,CAAE,iBAAAC,EAAmB,GAAO,QAAAC,EAAS,iBAAAC,CAAA,EAAqBJ,GAAW,CAAA,EAErE,CAACK,EAAWC,CAAc,EAAIC,EAAAA,SAAS,EAAK,EAC5C,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAAsC,MAAS,EACrE,CAACG,EAAQC,CAAS,EAAIJ,EAAAA,SAAgD,MAAS,EAE/EK,EAAgB,SAAY,CAChC,GAAI,CAACX,EAAW,OAEhB,MAAMY,EAAiB,MAAM,UAAU,UAAU,cAAc,CAC7D,iBAAAX,EACA,iBAAAE,EACA,GAAID,GAAW,CAAE,QAAAA,EAAS,iBAAkB,EAAA,CAAM,CACnD,EAEDM,EAAUI,CAAc,CAAA,EAG1BC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAIN,GAAUA,EAAO,KAAM,CACzB,MAAMO,EAA+B,SAAY,CAC/C,GAAI,CAACP,EAAO,KAAM,OAClB,MAAMQ,EAAa,MAAMR,EAAO,KAAK,QAAA,EACrCG,EAAUK,CAAU,EACpBV,EAAeU,EAAW,SAAS,CAAA,EAG/BC,EAAQ,IAAM,CAClBN,EAAU,MAAS,EACnBF,EAAU,MAAS,EACnBH,EAAe,EAAK,CAAA,EAGtB,OAAAE,EAAO,iBAAiB,yBAA0BS,CAAK,EACvDF,EAAA,EAEO,IAAM,CACXP,EAAO,oBAAoB,yBAA0BS,CAAK,EAC1DT,EAAO,MAAM,WAAA,CAAW,CAC1B,CACF,EACC,CAACA,CAAM,CAAC,EAEJ,CACL,UAAAP,EACA,UAAAI,EACA,OAAAG,EACA,cAAAI,EACA,OAAAF,CAAA,CAEJ"}
1
+ {"version":3,"file":"useBluetooth.cjs","sources":["../../../../src/hooks/useBluetooth/useBluetooth.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/** The use bluetooth return type */\nexport interface UseBluetoothReturn {\n /** Indicates if bluetooth device is currently connected */\n connected: boolean;\n /** Describe connected bluetooth device */\n device?: BluetoothDevice;\n /** The GATT server for connected bluetooth device */\n server?: BluetoothRemoteGATTServer;\n /** Whether the bluetooth is supported*/\n supported: boolean;\n /** Function to request bluetooth device from the user */\n requestDevice: () => Promise<void>;\n}\n\n/** The use bluetooth options type */\nexport interface UseBluetoothOptions {\n /** The options to request all bluetooth devices */\n acceptAllDevices?: boolean;\n /** Array of filters to apply when scanning bluetooth devices */\n filters?: BluetoothLEScanFilter[];\n /** Array of optional services that the application can use */\n optionalServices?: BluetoothServiceUUID[];\n}\n\n/**\n * @name useBluetooth\n * @description - Hook for getting information about bluetooth\n * @category Browser\n * @usage low\n *\n * @browserapi navigator.bluetooth https://developer.mozilla.org/en-US/docs/Web/API/Navigator/bluetooth\n *\n * @param {boolean} [options.acceptAllDevices=false] The options to request all Bluetooth devices\n * @param {Array<BluetoothLEScanFilter>} [options.filters] Array of filters to apply when scanning Bluetooth devices\n * @param {Array<BluetoothServiceUUID>} [options.optionalServices] Array of optional services that the application can use\n * @returns {UseBluetoothReturn} Object containing battery information & Battery API support\n *\n * @example\n * const { supported, connected, device, requestDevice, server } = useBluetooth(options);\n */\nexport const useBluetooth = (options?: UseBluetoothOptions): UseBluetoothReturn => {\n const supported =\n typeof navigator !== 'undefined' && 'bluetooth' in navigator && !!navigator.bluetooth;\n const { acceptAllDevices = false, filters, optionalServices } = options ?? {};\n\n const [connected, setIsConnected] = useState(false);\n const [device, setDevice] = useState<BluetoothDevice | undefined>(undefined);\n const [server, setServer] = useState<BluetoothRemoteGATTServer | undefined>(undefined);\n\n const requestDevice = async () => {\n if (!supported) return;\n\n const selectedDevice = await navigator.bluetooth.requestDevice({\n acceptAllDevices,\n optionalServices,\n ...(filters && { filters, acceptAllDevices: false })\n });\n\n setDevice(selectedDevice);\n };\n\n useEffect(() => {\n if (!device?.gatt) return;\n\n const connectToBluetoothGATTServer = async () => {\n const gattServer = await device.gatt!.connect();\n setServer(gattServer);\n setIsConnected(gattServer.connected);\n };\n\n const reset = () => {\n setServer(undefined);\n setDevice(undefined);\n setIsConnected(false);\n };\n\n device.addEventListener('gattserverdisconnected', reset);\n connectToBluetoothGATTServer();\n\n return () => {\n device.removeEventListener('gattserverdisconnected', reset);\n device.gatt?.disconnect();\n };\n }, [device]);\n\n return {\n supported,\n connected,\n device,\n requestDevice,\n server\n };\n};\n"],"names":["useBluetooth","options","supported","acceptAllDevices","filters","optionalServices","connected","setIsConnected","useState","device","setDevice","server","setServer","requestDevice","selectedDevice","useEffect","connectToBluetoothGATTServer","gattServer","reset"],"mappings":"yGA0CaA,EAAgBC,GAAsD,CACjF,MAAMC,EACJ,OAAO,UAAc,KAAe,cAAe,WAAa,CAAC,CAAC,UAAU,UACxE,CAAE,iBAAAC,EAAmB,GAAO,QAAAC,EAAS,iBAAAC,CAAA,EAAqBJ,GAAW,CAAA,EAErE,CAACK,EAAWC,CAAc,EAAIC,EAAAA,SAAS,EAAK,EAC5C,CAACC,EAAQC,CAAS,EAAIF,EAAAA,SAAsC,MAAS,EACrE,CAACG,EAAQC,CAAS,EAAIJ,EAAAA,SAAgD,MAAS,EAE/EK,EAAgB,SAAY,CAChC,GAAI,CAACX,EAAW,OAEhB,MAAMY,EAAiB,MAAM,UAAU,UAAU,cAAc,CAC7D,iBAAAX,EACA,iBAAAE,EACA,GAAID,GAAW,CAAE,QAAAA,EAAS,iBAAkB,EAAA,CAAM,CACnD,EAEDM,EAAUI,CAAc,CAAA,EAG1BC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACN,GAAQ,KAAM,OAEnB,MAAMO,EAA+B,SAAY,CAC/C,MAAMC,EAAa,MAAMR,EAAO,KAAM,QAAA,EACtCG,EAAUK,CAAU,EACpBV,EAAeU,EAAW,SAAS,CAAA,EAG/BC,EAAQ,IAAM,CAClBN,EAAU,MAAS,EACnBF,EAAU,MAAS,EACnBH,EAAe,EAAK,CAAA,EAGtB,OAAAE,EAAO,iBAAiB,yBAA0BS,CAAK,EACvDF,EAAA,EAEO,IAAM,CACXP,EAAO,oBAAoB,yBAA0BS,CAAK,EAC1DT,EAAO,MAAM,WAAA,CAAW,CAC1B,EACC,CAACA,CAAM,CAAC,EAEJ,CACL,UAAAP,EACA,UAAAI,EACA,OAAAG,EACA,cAAAI,EACA,OAAAF,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBoolean.cjs","sources":["../../../../src/hooks/useBoolean/useBoolean.ts"],"sourcesContent":["import { useState } from 'react';\n\n/** The use boolean return type */\nexport type UseBooleanReturn = [\n /** The current boolean state value */\n value: boolean,\n /** Function to toggle the boolean state */\n toggle: (value?: boolean) => void\n];\n\n/**\n * @name useBoolean\n * @description - Hook provides opportunity to manage boolean state\n * @category State\n *\n * @param {boolean} [initialValue=false] The initial boolean value\n * @returns {UseBooleanReturn} An object containing the boolean state value and utility functions to manipulate the state\n *\n * @example\n * const [on, toggle] = useBoolean()\n */\nexport const useBoolean = (initialValue = false): UseBooleanReturn => {\n const [value, setValue] = useState(initialValue);\n const toggle = (value?: boolean) => setValue((prevValue) => value ?? !prevValue);\n\n return [value, toggle];\n};\n"],"names":["useBoolean","initialValue","value","setValue","useState","prevValue"],"mappings":"yGAqBaA,EAAa,CAACC,EAAe,KAA4B,CACpE,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAASH,CAAY,EAG/C,MAAO,CAACC,EAFQA,GAAoBC,EAAUE,GAAcH,GAAS,CAACG,CAAS,CAE1D,CACvB"}
1
+ {"version":3,"file":"useBoolean.cjs","sources":["../../../../src/hooks/useBoolean/useBoolean.ts"],"sourcesContent":["import { useState } from 'react';\n\n/** The use boolean return type */\nexport type UseBooleanReturn = [\n /** The current boolean state value */\n value: boolean,\n /** Function to toggle the boolean state */\n toggle: (value?: boolean) => void\n];\n\n/**\n * @name useBoolean\n * @description - Hook provides opportunity to manage boolean state\n * @category State\n * @usage necessary\n\n * @param {boolean} [initialValue=false] The initial boolean value\n * @returns {UseBooleanReturn} An object containing the boolean state value and utility functions to manipulate the state\n *\n * @example\n * const [on, toggle] = useBoolean()\n */\nexport const useBoolean = (initialValue = false): UseBooleanReturn => {\n const [value, setValue] = useState(initialValue);\n const toggle = (value?: boolean) => setValue((prevValue) => value ?? !prevValue);\n\n return [value, toggle];\n};\n"],"names":["useBoolean","initialValue","value","setValue","useState","prevValue"],"mappings":"yGAsBaA,EAAa,CAACC,EAAe,KAA4B,CACpE,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAASH,CAAY,EAG/C,MAAO,CAACC,EAFQA,GAAoBC,EAAUE,GAAcH,GAAS,CAACG,CAAS,CAE1D,CACvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBreakpoints.cjs","sources":["../../../../src/hooks/useBreakpoints/useBreakpoints.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useRerender } from '../useRerender/useRerender';\n\n/** The breakpoints type */\nexport type Breakpoints<Breakpoint extends string = string> = Record<Breakpoint, number>;\n\n/** The use breakpoints strategy */\nexport type UseBreakpointsStrategy = 'desktop-first' | 'mobile-first';\n\nconst match = (query: string) => window.matchMedia(query).matches;\n\n/** The use breakpoints return type */\nexport type UseBreakpointsReturn<Breakpoint extends string = string> = {\n /** The function that checks if the current breakpoint is greater than to the given breakpoint */\n greater: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is greater than or equal to the given breakpoint */\n greaterOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than to the given breakpoint */\n smaller: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than or equal to the given breakpoint */\n smallerOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is between to the given breakpoints */\n between: (a: Breakpoint, b: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is greater than to the given breakpoint */\n isGreater: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is greater than or equal to the given breakpoint */\n isGreaterOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than to the given breakpoint */\n isSmaller: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than or equal to the given breakpoint */\n isSmallerOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is between to the given breakpoints */\n isInBetween: (a: Breakpoint, b: Breakpoint) => boolean;\n /** The function that returns the current breakpoints */\n current: () => Breakpoint[];\n /** The function that returns the current active breakpoint */\n active: () => Breakpoint;\n} & Record<Breakpoint, boolean>;\n\n/**\n * @name useBreakpoints\n * @description - Hook that manages breakpoints\n * @category Browser\n *\n * @template {string} Breakpoint The name of the breakpoint\n * @param {Breakpoints<Breakpoint>} breakpoints The breakpoints to use\n * @param {UseBreakpointsStrategy} [strategy=min-width] The strategy to use for matching\n * @returns {UseBreakpointsReturn<Breakpoint>} An object containing the current breakpoint\n *\n * @example\n * const { greaterOrEqual, smallerOrEqual, current } = useBreakpoints({ mobile: 0, tablet: 640, laptop: 1024, desktop: 1280 });\n */\nexport const useBreakpoints = <Breakpoint extends string>(\n breakpoints: Breakpoints<Breakpoint>,\n strategy: UseBreakpointsStrategy = 'mobile-first'\n): UseBreakpointsReturn<Breakpoint> => {\n const rerender = useRerender();\n\n const getValue = (breakpoint: Breakpoint, delta?: number) => {\n if (delta) return `${Number(breakpoints[breakpoint]) + delta}px`;\n return `${breakpoints[breakpoint]}px`;\n };\n\n useEffect(() => {\n const onResize = () => rerender();\n window.addEventListener('resize', onResize);\n return () => {\n window.removeEventListener('resize', onResize);\n };\n }, []);\n\n const greaterOrEqual = (breakpoint: Breakpoint) => match(`(min-width: ${getValue(breakpoint)})`);\n const smallerOrEqual = (breakpoint: Breakpoint) => match(`(max-width: ${getValue(breakpoint)})`);\n const current = () =>\n Object.keys(breakpoints)\n .map((breakpoint) => [breakpoint, greaterOrEqual(breakpoint as Breakpoint)])\n .filter(([, value]) => value)\n .map(([breakpoint]) => breakpoint) as Breakpoint[];\n const active = () => {\n const breakpoints = current();\n return (breakpoints.length ? breakpoints.at(-1) : undefined) as Breakpoint;\n };\n\n const greater = (breakpoint: Breakpoint) => match(`(min-width: ${getValue(breakpoint, 0.1)})`);\n const smaller = (breakpoint: Breakpoint) => match(`(max-width: ${getValue(breakpoint, -0.1)})`);\n const between = (a: Breakpoint, b: Breakpoint) =>\n match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n\n const breakpointsKeys = (Object.keys(breakpoints) as Breakpoint[]).reduce(\n (acc, breakpoint) => {\n const value =\n strategy === 'mobile-first' ? greaterOrEqual(breakpoint) : smallerOrEqual(breakpoint);\n acc[breakpoint] = value;\n return acc;\n },\n {} as Record<Breakpoint, boolean>\n );\n\n return {\n current,\n greaterOrEqual,\n smallerOrEqual,\n active,\n greater,\n smaller,\n between,\n isGreater: greater,\n isGreaterOrEqual: greaterOrEqual,\n isSmaller: smaller,\n isSmallerOrEqual: smallerOrEqual,\n isInBetween: between,\n ...breakpointsKeys\n };\n};\n\n/** Breakpoints from Material UI */\nexport const BREAKPOINTS_MATERIAL_UI = {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1200,\n xl: 1536\n};\n\n/** Breakpoints from Mantine */\nexport const BREAKPOINTS_MANTINE = {\n xs: 576,\n sm: 768,\n md: 992,\n lg: 1200,\n xl: 1408\n};\n\n/** Breakpoints from Tailwind */\nexport const BREAKPOINTS_TAILWIND = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536\n};\n\n/** Breakpoints from Bootstrap V5 */\nexport const BREAKPOINTS_BOOTSTRAP_V5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\n\n/** Breakpoints from Ant Design */\nexport const BREAKPOINTS_ANT_DESIGN = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\n\n/** Breakpoints from Quasar V2 */\nexport const BREAKPOINTS_QUASAR_V2 = {\n xs: 0,\n sm: 600,\n md: 1024,\n lg: 1440,\n xl: 1920\n};\n\n/** Sematic Breakpoints */\nexport const BREAKPOINTS_SEMANTIC = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\n\n/** Breakpoints from Master CSS */\nexport const BREAKPOINTS_MASTER_CSS = {\n '3xs': 360,\n '2xs': 480,\n xs: 600,\n sm: 768,\n md: 1024,\n lg: 1280,\n xl: 1440,\n '2xl': 1600,\n '3xl': 1920,\n '4xl': 2560\n};\n\n/** Breakpoints from PrimeFlex */\nexport const BREAKPOINTS_PRIME_FLEX = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\n"],"names":["match","query","useBreakpoints","breakpoints","strategy","rerender","useRerender","getValue","breakpoint","delta","useEffect","onResize","greaterOrEqual","smallerOrEqual","current","value","active","greater","smaller","between","a","b","breakpointsKeys","acc","BREAKPOINTS_MATERIAL_UI","BREAKPOINTS_MANTINE","BREAKPOINTS_TAILWIND","BREAKPOINTS_BOOTSTRAP_V5","BREAKPOINTS_ANT_DESIGN","BREAKPOINTS_QUASAR_V2","BREAKPOINTS_SEMANTIC","BREAKPOINTS_MASTER_CSS","BREAKPOINTS_PRIME_FLEX"],"mappings":"qJAUMA,EAASC,GAAkB,OAAO,WAAWA,CAAK,EAAE,QA2C7CC,EAAiB,CAC5BC,EACAC,EAAmC,iBACE,CACrC,MAAMC,EAAWC,EAAAA,YAAA,EAEXC,EAAW,CAACC,EAAwBC,IACpCA,EAAc,GAAG,OAAON,EAAYK,CAAU,CAAC,EAAIC,CAAK,KACrD,GAAGN,EAAYK,CAAU,CAAC,KAGnCE,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,IAAMN,EAAA,EACvB,cAAO,iBAAiB,SAAUM,CAAQ,EACnC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAQ,CAAA,CAC/C,EACC,EAAE,EAEL,MAAMC,EAAkBJ,GAA2BR,EAAM,eAAeO,EAASC,CAAU,CAAC,GAAG,EACzFK,EAAkBL,GAA2BR,EAAM,eAAeO,EAASC,CAAU,CAAC,GAAG,EACzFM,EAAU,IACd,OAAO,KAAKX,CAAW,EACpB,IAAKK,GAAe,CAACA,EAAYI,EAAeJ,CAAwB,CAAC,CAAC,EAC1E,OAAO,CAAC,CAAA,CAAGO,CAAK,IAAMA,CAAK,EAC3B,IAAI,CAAC,CAACP,CAAU,IAAMA,CAAU,EAC/BQ,EAAS,IAAM,CACnB,MAAMb,EAAcW,EAAA,EACpB,OAAQX,EAAY,OAASA,EAAY,GAAG,EAAE,EAAI,MAAA,EAG9Cc,EAAWT,GAA2BR,EAAM,eAAeO,EAASC,EAAY,EAAG,CAAC,GAAG,EACvFU,EAAWV,GAA2BR,EAAM,eAAeO,EAASC,EAAY,GAAI,CAAC,GAAG,EACxFW,EAAU,CAACC,EAAeC,IAC9BrB,EAAM,eAAeO,EAASa,CAAC,CAAC,qBAAqBb,EAASc,EAAG,GAAI,CAAC,GAAG,EAErEC,EAAmB,OAAO,KAAKnB,CAAW,EAAmB,OACjE,CAACoB,EAAKf,IAAe,CACnB,MAAMO,EACJX,IAAa,eAAiBQ,EAAeJ,CAAU,EAAIK,EAAeL,CAAU,EACtF,OAAAe,EAAIf,CAAU,EAAIO,EACXQ,CAAA,EAET,CAAA,CAAC,EAGH,MAAO,CACL,QAAAT,EACA,eAAAF,EACA,eAAAC,EACA,OAAAG,EACA,QAAAC,EACA,QAAAC,EACA,QAAAC,EACA,UAAWF,EACX,iBAAkBL,EAClB,UAAWM,EACX,iBAAkBL,EAClB,YAAaM,EACb,GAAGG,CAAA,CAEP,EAGaE,EAA0B,CACrC,GAAI,EACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,IACN,EAGaC,EAAsB,CACjC,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,IACN,EAGaC,EAAuB,CAClC,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,KACJ,MAAO,IACT,EAGaC,EAA2B,CACtC,GAAI,EACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,IAAK,IACP,EAGaC,EAAyB,CACpC,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,IAAK,IACP,EAGaC,EAAwB,CACnC,GAAI,EACJ,GAAI,IACJ,GAAI,KACJ,GAAI,KACJ,GAAI,IACN,EAGaC,EAAuB,CAClC,QAAS,IACT,QAAS,IACT,QAAS,IACT,OAAQ,IACR,OAAQ,KACR,QAAS,KACT,UAAW,IACb,EAGaC,EAAyB,CACpC,MAAO,IACP,MAAO,IACP,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,MAAO,KACP,MAAO,KACP,MAAO,IACT,EAGaC,EAAyB,CACpC,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACN"}
1
+ {"version":3,"file":"useBreakpoints.cjs","sources":["../../../../src/hooks/useBreakpoints/useBreakpoints.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useRerender } from '../useRerender/useRerender';\n\n/** The breakpoints type */\nexport type Breakpoints<Breakpoint extends string = string> = Record<Breakpoint, number>;\n\n/** The use breakpoints strategy */\nexport type UseBreakpointsStrategy = 'desktop-first' | 'mobile-first';\n\nconst match = (query: string) => window.matchMedia(query).matches;\n\n/** The use breakpoints return type */\nexport type UseBreakpointsReturn<Breakpoint extends string = string> = {\n /** The function that checks if the current breakpoint is greater than to the given breakpoint */\n greater: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is greater than or equal to the given breakpoint */\n greaterOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than to the given breakpoint */\n smaller: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than or equal to the given breakpoint */\n smallerOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is between to the given breakpoints */\n between: (a: Breakpoint, b: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is greater than to the given breakpoint */\n isGreater: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is greater than or equal to the given breakpoint */\n isGreaterOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than to the given breakpoint */\n isSmaller: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is smaller than or equal to the given breakpoint */\n isSmallerOrEqual: (breakpoint: Breakpoint) => boolean;\n /** The function that checks if the current breakpoint is between to the given breakpoints */\n isInBetween: (a: Breakpoint, b: Breakpoint) => boolean;\n /** The function that returns the current breakpoints */\n current: () => Breakpoint[];\n /** The function that returns the current active breakpoint */\n active: () => Breakpoint;\n} & Record<Breakpoint, boolean>;\n\n/**\n * @name useBreakpoints\n * @description - Hook that manages breakpoints\n * @category Browser\n * @usage medium\n *\n * @template {string} Breakpoint The name of the breakpoint\n * @param {Breakpoints<Breakpoint>} breakpoints The breakpoints to use\n * @param {UseBreakpointsStrategy} [strategy=min-width] The strategy to use for matching\n * @returns {UseBreakpointsReturn<Breakpoint>} An object containing the current breakpoint\n *\n * @example\n * const { greaterOrEqual, smallerOrEqual, current } = useBreakpoints({ mobile: 0, tablet: 640, laptop: 1024, desktop: 1280 });\n */\nexport const useBreakpoints = <Breakpoint extends string>(\n breakpoints: Breakpoints<Breakpoint>,\n strategy: UseBreakpointsStrategy = 'mobile-first'\n): UseBreakpointsReturn<Breakpoint> => {\n const rerender = useRerender();\n\n const getValue = (breakpoint: Breakpoint, delta?: number) => {\n if (delta) return `${Number(breakpoints[breakpoint]) + delta}px`;\n return `${breakpoints[breakpoint]}px`;\n };\n\n useEffect(() => {\n const onResize = () => rerender();\n window.addEventListener('resize', onResize);\n return () => {\n window.removeEventListener('resize', onResize);\n };\n }, []);\n\n const greaterOrEqual = (breakpoint: Breakpoint) => match(`(min-width: ${getValue(breakpoint)})`);\n const smallerOrEqual = (breakpoint: Breakpoint) => match(`(max-width: ${getValue(breakpoint)})`);\n const current = () =>\n Object.keys(breakpoints)\n .map((breakpoint) => [breakpoint, greaterOrEqual(breakpoint as Breakpoint)])\n .filter(([, value]) => value)\n .map(([breakpoint]) => breakpoint) as Breakpoint[];\n const active = () => {\n const breakpoints = current();\n return (breakpoints.length ? breakpoints.at(-1) : undefined) as Breakpoint;\n };\n\n const greater = (breakpoint: Breakpoint) => match(`(min-width: ${getValue(breakpoint, 0.1)})`);\n const smaller = (breakpoint: Breakpoint) => match(`(max-width: ${getValue(breakpoint, -0.1)})`);\n const between = (a: Breakpoint, b: Breakpoint) =>\n match(`(min-width: ${getValue(a)}) and (max-width: ${getValue(b, -0.1)})`);\n\n const breakpointsKeys = (Object.keys(breakpoints) as Breakpoint[]).reduce(\n (acc, breakpoint) => {\n const value =\n strategy === 'mobile-first' ? greaterOrEqual(breakpoint) : smallerOrEqual(breakpoint);\n acc[breakpoint] = value;\n return acc;\n },\n {} as Record<Breakpoint, boolean>\n );\n\n return {\n current,\n greaterOrEqual,\n smallerOrEqual,\n active,\n greater,\n smaller,\n between,\n isGreater: greater,\n isGreaterOrEqual: greaterOrEqual,\n isSmaller: smaller,\n isSmallerOrEqual: smallerOrEqual,\n isInBetween: between,\n ...breakpointsKeys\n };\n};\n\n/** Breakpoints from Material UI */\nexport const BREAKPOINTS_MATERIAL_UI = {\n xs: 0,\n sm: 600,\n md: 900,\n lg: 1200,\n xl: 1536\n};\n\n/** Breakpoints from Mantine */\nexport const BREAKPOINTS_MANTINE = {\n xs: 576,\n sm: 768,\n md: 992,\n lg: 1200,\n xl: 1408\n};\n\n/** Breakpoints from Tailwind */\nexport const BREAKPOINTS_TAILWIND = {\n sm: 640,\n md: 768,\n lg: 1024,\n xl: 1280,\n '2xl': 1536\n};\n\n/** Breakpoints from Bootstrap V5 */\nexport const BREAKPOINTS_BOOTSTRAP_V5 = {\n xs: 0,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1400\n};\n\n/** Breakpoints from Ant Design */\nexport const BREAKPOINTS_ANT_DESIGN = {\n xs: 480,\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200,\n xxl: 1600\n};\n\n/** Breakpoints from Quasar V2 */\nexport const BREAKPOINTS_QUASAR_V2 = {\n xs: 0,\n sm: 600,\n md: 1024,\n lg: 1440,\n xl: 1920\n};\n\n/** Sematic Breakpoints */\nexport const BREAKPOINTS_SEMANTIC = {\n mobileS: 320,\n mobileM: 375,\n mobileL: 425,\n tablet: 768,\n laptop: 1024,\n laptopL: 1440,\n desktop4K: 2560\n};\n\n/** Breakpoints from Master CSS */\nexport const BREAKPOINTS_MASTER_CSS = {\n '3xs': 360,\n '2xs': 480,\n xs: 600,\n sm: 768,\n md: 1024,\n lg: 1280,\n xl: 1440,\n '2xl': 1600,\n '3xl': 1920,\n '4xl': 2560\n};\n\n/** Breakpoints from PrimeFlex */\nexport const BREAKPOINTS_PRIME_FLEX = {\n sm: 576,\n md: 768,\n lg: 992,\n xl: 1200\n};\n"],"names":["match","query","useBreakpoints","breakpoints","strategy","rerender","useRerender","getValue","breakpoint","delta","useEffect","onResize","greaterOrEqual","smallerOrEqual","current","value","active","greater","smaller","between","a","b","breakpointsKeys","acc","BREAKPOINTS_MATERIAL_UI","BREAKPOINTS_MANTINE","BREAKPOINTS_TAILWIND","BREAKPOINTS_BOOTSTRAP_V5","BREAKPOINTS_ANT_DESIGN","BREAKPOINTS_QUASAR_V2","BREAKPOINTS_SEMANTIC","BREAKPOINTS_MASTER_CSS","BREAKPOINTS_PRIME_FLEX"],"mappings":"qJAUMA,EAASC,GAAkB,OAAO,WAAWA,CAAK,EAAE,QA4C7CC,EAAiB,CAC5BC,EACAC,EAAmC,iBACE,CACrC,MAAMC,EAAWC,EAAAA,YAAA,EAEXC,EAAW,CAACC,EAAwBC,IACpCA,EAAc,GAAG,OAAON,EAAYK,CAAU,CAAC,EAAIC,CAAK,KACrD,GAAGN,EAAYK,CAAU,CAAC,KAGnCE,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,IAAMN,EAAA,EACvB,cAAO,iBAAiB,SAAUM,CAAQ,EACnC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAQ,CAAA,CAC/C,EACC,EAAE,EAEL,MAAMC,EAAkBJ,GAA2BR,EAAM,eAAeO,EAASC,CAAU,CAAC,GAAG,EACzFK,EAAkBL,GAA2BR,EAAM,eAAeO,EAASC,CAAU,CAAC,GAAG,EACzFM,EAAU,IACd,OAAO,KAAKX,CAAW,EACpB,IAAKK,GAAe,CAACA,EAAYI,EAAeJ,CAAwB,CAAC,CAAC,EAC1E,OAAO,CAAC,CAAA,CAAGO,CAAK,IAAMA,CAAK,EAC3B,IAAI,CAAC,CAACP,CAAU,IAAMA,CAAU,EAC/BQ,EAAS,IAAM,CACnB,MAAMb,EAAcW,EAAA,EACpB,OAAQX,EAAY,OAASA,EAAY,GAAG,EAAE,EAAI,MAAA,EAG9Cc,EAAWT,GAA2BR,EAAM,eAAeO,EAASC,EAAY,EAAG,CAAC,GAAG,EACvFU,EAAWV,GAA2BR,EAAM,eAAeO,EAASC,EAAY,GAAI,CAAC,GAAG,EACxFW,EAAU,CAACC,EAAeC,IAC9BrB,EAAM,eAAeO,EAASa,CAAC,CAAC,qBAAqBb,EAASc,EAAG,GAAI,CAAC,GAAG,EAErEC,EAAmB,OAAO,KAAKnB,CAAW,EAAmB,OACjE,CAACoB,EAAKf,IAAe,CACnB,MAAMO,EACJX,IAAa,eAAiBQ,EAAeJ,CAAU,EAAIK,EAAeL,CAAU,EACtF,OAAAe,EAAIf,CAAU,EAAIO,EACXQ,CAAA,EAET,CAAA,CAAC,EAGH,MAAO,CACL,QAAAT,EACA,eAAAF,EACA,eAAAC,EACA,OAAAG,EACA,QAAAC,EACA,QAAAC,EACA,QAAAC,EACA,UAAWF,EACX,iBAAkBL,EAClB,UAAWM,EACX,iBAAkBL,EAClB,YAAaM,EACb,GAAGG,CAAA,CAEP,EAGaE,EAA0B,CACrC,GAAI,EACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,IACN,EAGaC,EAAsB,CACjC,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,IACN,EAGaC,EAAuB,CAClC,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,KACJ,MAAO,IACT,EAGaC,EAA2B,CACtC,GAAI,EACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,IAAK,IACP,EAGaC,EAAyB,CACpC,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,IAAK,IACP,EAGaC,EAAwB,CACnC,GAAI,EACJ,GAAI,IACJ,GAAI,KACJ,GAAI,KACJ,GAAI,IACN,EAGaC,EAAuB,CAClC,QAAS,IACT,QAAS,IACT,QAAS,IACT,OAAQ,IACR,OAAQ,KACR,QAAS,KACT,UAAW,IACb,EAGaC,EAAyB,CACpC,MAAO,IACP,MAAO,IACP,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,MAAO,KACP,MAAO,KACP,MAAO,IACT,EAGaC,EAAyB,CACpC,GAAI,IACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACN"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),p=(s,d)=>{const o=typeof window<"u"&&"BroadcastChannel"in window,[l,c]=t.useState(!1),[i,f]=t.useState(),[g,v]=t.useState(),e=t.useRef(void 0);t.useEffect(()=>{if(!o)return;e.current=new BroadcastChannel(s);const r=n=>{f(n.data),d?.(n.data)},a=n=>v(n),u=()=>c(!0);return e.current.addEventListener("message",r),e.current.addEventListener("messageerror",a),e.current.addEventListener("close",u),()=>{e.current&&(e.current.removeEventListener("message",r),e.current.removeEventListener("messageerror",a),e.current.removeEventListener("close",u),e.current.close())}},[s]);const E=r=>{console.log("post",r,e.current),e.current&&e.current.postMessage(r)},m=()=>{e.current&&(e.current.close(),c(!0))};return{supported:o,channel:e.current,data:i,post:E,close:m,error:g,closed:l}};exports.useBroadcastChannel=p;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("react"),m=(s,d)=>{const o=typeof window<"u"&&"BroadcastChannel"in window&&!!window.BroadcastChannel,[l,c]=t.useState(!1),[i,f]=t.useState(),[g,v]=t.useState(),e=t.useRef(void 0);t.useEffect(()=>{if(!o)return;e.current=new BroadcastChannel(s);const r=n=>{f(n.data),d?.(n.data)},a=n=>v(n),u=()=>c(!0);return e.current.addEventListener("message",r),e.current.addEventListener("messageerror",a),e.current.addEventListener("close",u),()=>{e.current&&(e.current.removeEventListener("message",r),e.current.removeEventListener("messageerror",a),e.current.removeEventListener("close",u),e.current.close())}},[s]);const E=r=>{console.log("post",r,e.current),e.current&&e.current.postMessage(r)},h=()=>{e.current&&(e.current.close(),c(!0))};return{supported:o,channel:e.current,data:i,post:E,close:h,error:g,closed:l}};exports.useBroadcastChannel=m;
2
2
  //# sourceMappingURL=useBroadcastChannel.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBroadcastChannel.cjs","sources":["../../../../src/hooks/useBroadcastChannel/useBroadcastChannel.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use broadcast channel return type */\nexport interface UseBroadcastChannelReturn<Data = unknown> {\n /** The underlying BroadcastChannel instance if supported, undefined otherwise */\n channel?: BroadcastChannel;\n /** Whether the channel has been closed */\n closed: boolean;\n /** The most recently received data from other contexts */\n data?: Data;\n /** Error object if any error occurred during channel operations */\n error?: Event;\n /** Whether the BroadcastChannel API is supported in the current environment */\n supported: boolean;\n /** Function to close the channel and clean up resources */\n close: () => void;\n /** Function to send data to other contexts through the channel */\n post: (data: Data) => void;\n}\n\n/**\n * @name useBroadcastChannel\n * @description Hook that provides cross-tab/window communication\n * @category Browser\n *\n * @browserapi BroadcastChannel https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n *\n * @param {string} name The name of the channel\n * @param {Function} callback A callback function that will be called when a message is received\n * @returns {UseBroadcastChannelReturn} An object containing the channel state and controls\n *\n * @example\n * const { supported, data, post, error } = useBroadcastChannel('channel');\n */\nexport const useBroadcastChannel = <Data = unknown>(\n name: string,\n callback?: (data: Data) => void\n): UseBroadcastChannelReturn<Data> => {\n const supported = typeof window !== 'undefined' && 'BroadcastChannel' in window;\n\n const [closed, setClosed] = useState(false);\n const [data, setData] = useState<Data>();\n const [error, setError] = useState<MessageEvent>();\n const channelRef = useRef<BroadcastChannel>(undefined);\n\n useEffect(() => {\n if (!supported) return;\n\n channelRef.current = new BroadcastChannel(name);\n\n const onMessage = (event: MessageEvent) => {\n setData(event.data);\n callback?.(event.data);\n };\n const onMessageError = (event: MessageEvent) => setError(event);\n const onClose = () => setClosed(true);\n\n channelRef.current.addEventListener('message', onMessage);\n channelRef.current.addEventListener('messageerror', onMessageError);\n channelRef.current.addEventListener('close', onClose);\n\n return () => {\n if (channelRef.current) {\n channelRef.current.removeEventListener('message', onMessage);\n channelRef.current.removeEventListener('messageerror', onMessageError);\n channelRef.current.removeEventListener('close', onClose);\n channelRef.current.close();\n }\n };\n }, [name]);\n\n const post = (data: Data) => {\n console.log('post', data, channelRef.current);\n if (!channelRef.current) return;\n channelRef.current.postMessage(data);\n };\n\n const close = () => {\n if (!channelRef.current) return;\n channelRef.current.close();\n setClosed(true);\n };\n\n return {\n supported,\n channel: channelRef.current,\n data,\n post,\n close,\n error,\n closed\n };\n};\n"],"names":["useBroadcastChannel","name","callback","supported","closed","setClosed","useState","data","setData","error","setError","channelRef","useRef","useEffect","onMessage","event","onMessageError","onClose","post","close"],"mappings":"yGAkCaA,EAAsB,CACjCC,EACAC,IACoC,CACpC,MAAMC,EAAY,OAAO,OAAW,KAAe,qBAAsB,OAEnE,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EACpC,CAACC,EAAMC,CAAO,EAAIF,WAAA,EAClB,CAACG,EAAOC,CAAQ,EAAIJ,WAAA,EACpBK,EAAaC,EAAAA,OAAyB,MAAS,EAErDC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACV,EAAW,OAEhBQ,EAAW,QAAU,IAAI,iBAAiBV,CAAI,EAE9C,MAAMa,EAAaC,GAAwB,CACzCP,EAAQO,EAAM,IAAI,EAClBb,IAAWa,EAAM,IAAI,CAAA,EAEjBC,EAAkBD,GAAwBL,EAASK,CAAK,EACxDE,EAAU,IAAMZ,EAAU,EAAI,EAEpC,OAAAM,EAAW,QAAQ,iBAAiB,UAAWG,CAAS,EACxDH,EAAW,QAAQ,iBAAiB,eAAgBK,CAAc,EAClEL,EAAW,QAAQ,iBAAiB,QAASM,CAAO,EAE7C,IAAM,CACPN,EAAW,UACbA,EAAW,QAAQ,oBAAoB,UAAWG,CAAS,EAC3DH,EAAW,QAAQ,oBAAoB,eAAgBK,CAAc,EACrEL,EAAW,QAAQ,oBAAoB,QAASM,CAAO,EACvDN,EAAW,QAAQ,MAAA,EACrB,CACF,EACC,CAACV,CAAI,CAAC,EAET,MAAMiB,EAAQX,GAAe,CAC3B,QAAQ,IAAI,OAAQA,EAAMI,EAAW,OAAO,EACvCA,EAAW,SAChBA,EAAW,QAAQ,YAAYJ,CAAI,CAAA,EAG/BY,EAAQ,IAAM,CACbR,EAAW,UAChBA,EAAW,QAAQ,MAAA,EACnBN,EAAU,EAAI,EAAA,EAGhB,MAAO,CACL,UAAAF,EACA,QAASQ,EAAW,QACpB,KAAAJ,EACA,KAAAW,EACA,MAAAC,EACA,MAAAV,EACA,OAAAL,CAAA,CAEJ"}
1
+ {"version":3,"file":"useBroadcastChannel.cjs","sources":["../../../../src/hooks/useBroadcastChannel/useBroadcastChannel.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use broadcast channel return type */\nexport interface UseBroadcastChannelReturn<Data = unknown> {\n /** The underlying BroadcastChannel instance if supported, undefined otherwise */\n channel?: BroadcastChannel;\n /** Whether the channel has been closed */\n closed: boolean;\n /** The most recently received data from other contexts */\n data?: Data;\n /** Error object if any error occurred during channel operations */\n error?: Event;\n /** Whether the BroadcastChannel API is supported in the current environment */\n supported: boolean;\n /** Function to close the channel and clean up resources */\n close: () => void;\n /** Function to send data to other contexts through the channel */\n post: (data: Data) => void;\n}\n\n/**\n * @name useBroadcastChannel\n * @description Hook that provides cross-tab/window communication\n * @category Browser\n * @usage low\n *\n * @browserapi BroadcastChannel https://developer.mozilla.org/en-US/docs/Web/API/BroadcastChannel\n *\n * @param {string} name The name of the channel\n * @param {Function} callback A callback function that will be called when a message is received\n * @returns {UseBroadcastChannelReturn} An object containing the channel state and controls\n *\n * @example\n * const { supported, data, post, error } = useBroadcastChannel('channel');\n */\nexport const useBroadcastChannel = <Data = unknown>(\n name: string,\n callback?: (data: Data) => void\n): UseBroadcastChannelReturn<Data> => {\n const supported =\n typeof window !== 'undefined' && 'BroadcastChannel' in window && !!window.BroadcastChannel;\n\n const [closed, setClosed] = useState(false);\n const [data, setData] = useState<Data>();\n const [error, setError] = useState<MessageEvent>();\n const channelRef = useRef<BroadcastChannel>(undefined);\n\n useEffect(() => {\n if (!supported) return;\n\n channelRef.current = new BroadcastChannel(name);\n\n const onMessage = (event: MessageEvent) => {\n setData(event.data);\n callback?.(event.data);\n };\n const onMessageError = (event: MessageEvent) => setError(event);\n const onClose = () => setClosed(true);\n\n channelRef.current.addEventListener('message', onMessage);\n channelRef.current.addEventListener('messageerror', onMessageError);\n channelRef.current.addEventListener('close', onClose);\n\n return () => {\n if (channelRef.current) {\n channelRef.current.removeEventListener('message', onMessage);\n channelRef.current.removeEventListener('messageerror', onMessageError);\n channelRef.current.removeEventListener('close', onClose);\n channelRef.current.close();\n }\n };\n }, [name]);\n\n const post = (data: Data) => {\n console.log('post', data, channelRef.current);\n if (!channelRef.current) return;\n channelRef.current.postMessage(data);\n };\n\n const close = () => {\n if (!channelRef.current) return;\n channelRef.current.close();\n setClosed(true);\n };\n\n return {\n supported,\n channel: channelRef.current,\n data,\n post,\n close,\n error,\n closed\n };\n};\n"],"names":["useBroadcastChannel","name","callback","supported","closed","setClosed","useState","data","setData","error","setError","channelRef","useRef","useEffect","onMessage","event","onMessageError","onClose","post","close"],"mappings":"yGAmCaA,EAAsB,CACjCC,EACAC,IACoC,CACpC,MAAMC,EACJ,OAAO,OAAW,KAAe,qBAAsB,QAAU,CAAC,CAAC,OAAO,iBAEtE,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EACpC,CAACC,EAAMC,CAAO,EAAIF,WAAA,EAClB,CAACG,EAAOC,CAAQ,EAAIJ,WAAA,EACpBK,EAAaC,EAAAA,OAAyB,MAAS,EAErDC,EAAAA,UAAU,IAAM,CACd,GAAI,CAACV,EAAW,OAEhBQ,EAAW,QAAU,IAAI,iBAAiBV,CAAI,EAE9C,MAAMa,EAAaC,GAAwB,CACzCP,EAAQO,EAAM,IAAI,EAClBb,IAAWa,EAAM,IAAI,CAAA,EAEjBC,EAAkBD,GAAwBL,EAASK,CAAK,EACxDE,EAAU,IAAMZ,EAAU,EAAI,EAEpC,OAAAM,EAAW,QAAQ,iBAAiB,UAAWG,CAAS,EACxDH,EAAW,QAAQ,iBAAiB,eAAgBK,CAAc,EAClEL,EAAW,QAAQ,iBAAiB,QAASM,CAAO,EAE7C,IAAM,CACPN,EAAW,UACbA,EAAW,QAAQ,oBAAoB,UAAWG,CAAS,EAC3DH,EAAW,QAAQ,oBAAoB,eAAgBK,CAAc,EACrEL,EAAW,QAAQ,oBAAoB,QAASM,CAAO,EACvDN,EAAW,QAAQ,MAAA,EACrB,CACF,EACC,CAACV,CAAI,CAAC,EAET,MAAMiB,EAAQX,GAAe,CAC3B,QAAQ,IAAI,OAAQA,EAAMI,EAAW,OAAO,EACvCA,EAAW,SAChBA,EAAW,QAAQ,YAAYJ,CAAI,CAAA,EAG/BY,EAAQ,IAAM,CACbR,EAAW,UAChBA,EAAW,QAAQ,MAAA,EACnBN,EAAU,EAAI,EAAA,EAGhB,MAAO,CACL,UAAAF,EACA,QAASQ,EAAW,QACpB,KAAAJ,EACA,KAAAW,EACA,MAAAC,EACA,MAAAV,EACA,OAAAL,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useBrowserLanguage.cjs","sources":["../../../../src/hooks/useBrowserLanguage/useBrowserLanguage.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\nconst getSnapshot = () => navigator.language;\nconst getServerSnapshot = () => 'undetermined';\nconst subscribe = (callback: () => void) => {\n window.addEventListener('languagechange', callback);\n return () => window.removeEventListener('languagechange', callback);\n};\n\n/**\n * @name useBrowserLanguage\n * @description - Hook that returns the current browser language\n * @category User\n *\n * @browserapi navigator.language https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language\n *\n * @returns {string} The current browser language\n *\n * @example\n * const browserLanguage = useBrowserLanguage();\n */\nexport const useBrowserLanguage = () =>\n useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n"],"names":["getSnapshot","getServerSnapshot","subscribe","callback","useBrowserLanguage","useSyncExternalStore"],"mappings":"yGAEMA,EAAc,IAAM,UAAU,SAC9BC,EAAoB,IAAM,eAC1BC,EAAaC,IACjB,OAAO,iBAAiB,iBAAkBA,CAAQ,EAC3C,IAAM,OAAO,oBAAoB,iBAAkBA,CAAQ,GAevDC,EAAqB,IAChCC,EAAAA,qBAAqBH,EAAWF,EAAaC,CAAiB"}
1
+ {"version":3,"file":"useBrowserLanguage.cjs","sources":["../../../../src/hooks/useBrowserLanguage/useBrowserLanguage.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\nconst getSnapshot = () => navigator.language;\nconst getServerSnapshot = () => 'undetermined';\nconst subscribe = (callback: () => void) => {\n window.addEventListener('languagechange', callback);\n return () => window.removeEventListener('languagechange', callback);\n};\n\n/**\n * @name useBrowserLanguage\n * @description - Hook that returns the current browser language\n * @category User\n * @usage medium\n\n * @browserapi navigator.language https://developer.mozilla.org/en-US/docs/Web/API/Navigator/language\n *\n * @returns {string} The current browser language\n *\n * @example\n * const browserLanguage = useBrowserLanguage();\n */\nexport const useBrowserLanguage = () =>\n useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n"],"names":["getSnapshot","getServerSnapshot","subscribe","callback","useBrowserLanguage","useSyncExternalStore"],"mappings":"yGAEMA,EAAc,IAAM,UAAU,SAC9BC,EAAoB,IAAM,eAC1BC,EAAaC,IACjB,OAAO,iBAAiB,iBAAkBA,CAAQ,EAC3C,IAAM,OAAO,oBAAoB,iBAAkBA,CAAQ,GAgBvDC,EAAqB,IAChCC,EAAAA,qBAAqBH,EAAWF,EAAaC,CAAiB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useClickOutside.cjs","sources":["../../../../src/hooks/useClickOutside/useClickOutside.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport interface UseClickOutside {\n (target: HookTarget, callback: (event: Event) => void): void;\n\n <Target extends Element>(callback: (event: Event) => void, target?: never): StateRef<Target>;\n}\n\n/**\n * @name useClickOutside\n * @description - Hook to handle click events outside the specified target element(s)\n * @category Elements\n *\n * @overload\n * @param {HookTarget} target The target element(s) to detect outside clicks for\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {void}\n *\n * @example\n * useClickOutside(ref, () => console.log('click outside'));\n *\n * @overload\n * @template Target The target element(s)\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {(node: Target) => void} A React ref to attach to the target element\n *\n * @example\n * const ref = useClickOutside<HTMLDivElement>(() => console.log('click outside'));\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useClickOutside.html}\n */\nexport const useClickOutside = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (params[1] ? params[1] : params[0]) as (event: Event) => void;\n\n const internalRef = useRefState<Element>();\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const onClick = (event: Event) => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n\n if (element && !element.contains(event.target as Node)) {\n internalCallbackRef.current(event);\n }\n };\n\n document.addEventListener('click', onClick);\n\n return () => {\n document.removeEventListener('click', onClick);\n };\n }, [target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseClickOutside;\n"],"names":["useClickOutside","params","target","isTarget","callback","internalRef","useRefState","internalCallbackRef","useRef","useEffect","onClick","event","element","getElement"],"mappings":"mPAuCaA,EAAmB,IAAIC,IAAkB,CACpD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAYH,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAIA,EAAO,CAAC,EAE5CI,EAAcC,EAAAA,YAAA,EACdC,EAAsBC,EAAAA,OAAOJ,CAAQ,EAoB3C,GAnBAG,EAAoB,QAAUH,EAE9BK,EAAAA,UAAU,IAAM,CACd,GAAI,CAACP,GAAU,CAACG,EAAY,MAAO,OACnC,MAAMK,EAAWC,GAAiB,CAChC,MAAMC,EAAWV,EAASW,EAAAA,WAAWX,CAAM,EAAIG,EAAY,QAEvDO,GAAW,CAACA,EAAQ,SAASD,EAAM,MAAc,GACnDJ,EAAoB,QAAQI,CAAK,CACnC,EAGF,gBAAS,iBAAiB,QAASD,CAAO,EAEnC,IAAM,CACX,SAAS,oBAAoB,QAASA,CAAO,CAAA,CAC/C,EACC,CAACR,EAAQG,EAAY,KAAK,CAAC,EAE1B,CAAAH,EACJ,OAAOG,CACT"}
1
+ {"version":3,"file":"useClickOutside.cjs","sources":["../../../../src/hooks/useClickOutside/useClickOutside.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport interface UseClickOutside {\n (target: HookTarget, callback: (event: Event) => void): void;\n\n <Target extends Element>(callback: (event: Event) => void, target?: never): StateRef<Target>;\n}\n\n/**\n * @name useClickOutside\n * @description - Hook to handle click events outside the specified target element(s)\n * @category Elements \n * @usage necessary\n\n * @overload\n * @param {HookTarget} target The target element(s) to detect outside clicks for\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {void}\n *\n * @example\n * useClickOutside(ref, () => console.log('click outside'));\n *\n * @overload\n * @template Target The target element(s)\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @returns {(node: Target) => void} A React ref to attach to the target element\n *\n * @example\n * const ref = useClickOutside<HTMLDivElement>(() => console.log('click outside'));\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useClickOutside.html}\n */\nexport const useClickOutside = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (params[1] ? params[1] : params[0]) as (event: Event) => void;\n\n const internalRef = useRefState<Element>();\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const onClick = (event: Event) => {\n const element = (target ? getElement(target) : internalRef.current) as Element;\n\n if (element && !element.contains(event.target as Node)) {\n internalCallbackRef.current(event);\n }\n };\n\n document.addEventListener('click', onClick);\n\n return () => {\n document.removeEventListener('click', onClick);\n };\n }, [target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseClickOutside;\n"],"names":["useClickOutside","params","target","isTarget","callback","internalRef","useRefState","internalCallbackRef","useRef","useEffect","onClick","event","element","getElement"],"mappings":"mPAwCaA,EAAmB,IAAIC,IAAkB,CACpD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAYH,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAIA,EAAO,CAAC,EAE5CI,EAAcC,EAAAA,YAAA,EACdC,EAAsBC,EAAAA,OAAOJ,CAAQ,EAoB3C,GAnBAG,EAAoB,QAAUH,EAE9BK,EAAAA,UAAU,IAAM,CACd,GAAI,CAACP,GAAU,CAACG,EAAY,MAAO,OACnC,MAAMK,EAAWC,GAAiB,CAChC,MAAMC,EAAWV,EAASW,EAAAA,WAAWX,CAAM,EAAIG,EAAY,QAEvDO,GAAW,CAACA,EAAQ,SAASD,EAAM,MAAc,GACnDJ,EAAoB,QAAQI,CAAK,CACnC,EAGF,gBAAS,iBAAiB,QAASD,CAAO,EAEnC,IAAM,CACX,SAAS,oBAAoB,QAASA,CAAO,CAAA,CAC/C,EACC,CAACR,EAAQG,EAAY,KAAK,CAAC,EAE1B,CAAAH,EACJ,OAAOG,CACT"}