@siberiacancode/reactuse 0.2.11 → 0.2.13

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 (413) hide show
  1. package/README.md +71 -71
  2. package/dist/cjs/helpers/createContext/createContext.cjs.map +1 -1
  3. package/dist/cjs/helpers/createReactiveContext/createReactiveContext.cjs.map +1 -1
  4. package/dist/cjs/helpers/createStore/createStore.cjs.map +1 -1
  5. package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs +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/useBattery/useBattery.cjs +1 -1
  9. package/dist/cjs/hooks/useBattery/useBattery.cjs.map +1 -1
  10. package/dist/cjs/hooks/useBluetooth/useBluetooth.cjs +1 -1
  11. package/dist/cjs/hooks/useBluetooth/useBluetooth.cjs.map +1 -1
  12. package/dist/cjs/hooks/useBoolean/useBoolean.cjs.map +1 -1
  13. package/dist/cjs/hooks/useBreakpoints/useBreakpoints.cjs.map +1 -1
  14. package/dist/cjs/hooks/useBrowserLanguage/useBrowserLanguage.cjs.map +1 -1
  15. package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
  16. package/dist/cjs/hooks/useClipboard/useClipboard.cjs +1 -1
  17. package/dist/cjs/hooks/useClipboard/useClipboard.cjs.map +1 -1
  18. package/dist/cjs/hooks/useCookie/useCookie.cjs +1 -1
  19. package/dist/cjs/hooks/useCookie/useCookie.cjs.map +1 -1
  20. package/dist/cjs/hooks/useCookies/useCookies.cjs +1 -1
  21. package/dist/cjs/hooks/useCookies/useCookies.cjs.map +1 -1
  22. package/dist/cjs/hooks/useCopy/useCopy.cjs.map +1 -1
  23. package/dist/cjs/hooks/useCounter/useCounter.cjs +1 -1
  24. package/dist/cjs/hooks/useCounter/useCounter.cjs.map +1 -1
  25. package/dist/cjs/hooks/useCssVar/useCssVar.cjs +1 -1
  26. package/dist/cjs/hooks/useCssVar/useCssVar.cjs.map +1 -1
  27. package/dist/cjs/hooks/useDebounceCallback/useDebounceCallback.cjs.map +1 -1
  28. package/dist/cjs/hooks/useDebounceValue/useDebounceValue.cjs.map +1 -1
  29. package/dist/cjs/hooks/useDeviceMotion/useDeviceMotion.cjs +1 -1
  30. package/dist/cjs/hooks/useDeviceMotion/useDeviceMotion.cjs.map +1 -1
  31. package/dist/cjs/hooks/useDeviceOrientation/useDeviceOrientation.cjs.map +1 -1
  32. package/dist/cjs/hooks/useDevicePixelRatio/useDevicePixelRatio.cjs.map +1 -1
  33. package/dist/cjs/hooks/useDidUpdate/useDidUpdate.cjs.map +1 -1
  34. package/dist/cjs/hooks/useDisclosure/useDisclosure.cjs +1 -1
  35. package/dist/cjs/hooks/useDisclosure/useDisclosure.cjs.map +1 -1
  36. package/dist/cjs/hooks/useDisplayMedia/useDisplayMedia.cjs +1 -1
  37. package/dist/cjs/hooks/useDisplayMedia/useDisplayMedia.cjs.map +1 -1
  38. package/dist/cjs/hooks/useDocumentEvent/useDocumentEvent.cjs.map +1 -1
  39. package/dist/cjs/hooks/useDocumentTitle/useDocumentTitle.cjs +1 -1
  40. package/dist/cjs/hooks/useDocumentTitle/useDocumentTitle.cjs.map +1 -1
  41. package/dist/cjs/hooks/useDocumentVisibility/useDocumentVisibility.cjs.map +1 -1
  42. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs +1 -1
  43. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs.map +1 -1
  44. package/dist/cjs/hooks/useDropZone/useDropZone.cjs +1 -1
  45. package/dist/cjs/hooks/useDropZone/useDropZone.cjs.map +1 -1
  46. package/dist/cjs/hooks/useElementSize/useElementSize.cjs.map +1 -1
  47. package/dist/cjs/hooks/useEvent/useEvent.cjs.map +1 -1
  48. package/dist/cjs/hooks/useEventListener/useEventListener.cjs.map +1 -1
  49. package/dist/cjs/hooks/useEventSource/useEventSource.cjs +1 -1
  50. package/dist/cjs/hooks/useEventSource/useEventSource.cjs.map +1 -1
  51. package/dist/cjs/hooks/useEyeDropper/useEyeDropper.cjs.map +1 -1
  52. package/dist/cjs/hooks/useFavicon/useFavicon.cjs +1 -1
  53. package/dist/cjs/hooks/useFavicon/useFavicon.cjs.map +1 -1
  54. package/dist/cjs/hooks/useField/useField.cjs +1 -1
  55. package/dist/cjs/hooks/useField/useField.cjs.map +1 -1
  56. package/dist/cjs/hooks/useFileDialog/useFileDialog.cjs +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 +1 -1
  63. package/dist/cjs/hooks/useFullscreen/useFullscreen.cjs.map +1 -1
  64. package/dist/cjs/hooks/useGamepad/useGamepad.cjs.map +1 -1
  65. package/dist/cjs/hooks/useGeolocation/useGeolocation.cjs +1 -1
  66. package/dist/cjs/hooks/useGeolocation/useGeolocation.cjs.map +1 -1
  67. package/dist/cjs/hooks/useHash/useHash.cjs.map +1 -1
  68. package/dist/cjs/hooks/useHotkeys/useHotkeys.cjs +1 -1
  69. package/dist/cjs/hooks/useHotkeys/useHotkeys.cjs.map +1 -1
  70. package/dist/cjs/hooks/useHover/useHover.cjs +1 -1
  71. package/dist/cjs/hooks/useHover/useHover.cjs.map +1 -1
  72. package/dist/cjs/hooks/useIdle/useIdle.cjs.map +1 -1
  73. package/dist/cjs/hooks/useImage/useImage.cjs.map +1 -1
  74. package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs +1 -1
  75. package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs.map +1 -1
  76. package/dist/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs +1 -1
  77. package/dist/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs.map +1 -1
  78. package/dist/cjs/hooks/useInterval/useInterval.cjs +1 -1
  79. package/dist/cjs/hooks/useInterval/useInterval.cjs.map +1 -1
  80. package/dist/cjs/hooks/useIsFirstRender/useIsFirstRender.cjs.map +1 -1
  81. package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs +1 -1
  82. package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs.map +1 -1
  83. package/dist/cjs/hooks/useKeyPressEvent/useKeyPressEvent.cjs +1 -1
  84. package/dist/cjs/hooks/useKeyPressEvent/useKeyPressEvent.cjs.map +1 -1
  85. package/dist/cjs/hooks/useKeyboard/useKeyboard.cjs +1 -1
  86. package/dist/cjs/hooks/useKeyboard/useKeyboard.cjs.map +1 -1
  87. package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs +1 -1
  88. package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs.map +1 -1
  89. package/dist/cjs/hooks/useLastChanged/useLastChanged.cjs +1 -1
  90. package/dist/cjs/hooks/useLastChanged/useLastChanged.cjs.map +1 -1
  91. package/dist/cjs/hooks/useLatest/useLatest.cjs +1 -1
  92. package/dist/cjs/hooks/useLatest/useLatest.cjs.map +1 -1
  93. package/dist/cjs/hooks/useLess/useLess.cjs.map +1 -1
  94. package/dist/cjs/hooks/useList/useList.cjs.map +1 -1
  95. package/dist/cjs/hooks/useLockCallback/useLockCallback.cjs.map +1 -1
  96. package/dist/cjs/hooks/useLogger/useLogger.cjs.map +1 -1
  97. package/dist/cjs/hooks/useLongPress/useLongPress.cjs +1 -1
  98. package/dist/cjs/hooks/useLongPress/useLongPress.cjs.map +1 -1
  99. package/dist/cjs/hooks/useMap/useMap.cjs.map +1 -1
  100. package/dist/cjs/hooks/useMeasure/useMeasure.cjs.map +1 -1
  101. package/dist/cjs/hooks/useMediaQuery/useMediaQuery.cjs.map +1 -1
  102. package/dist/cjs/hooks/useMemory/useMemory.cjs +1 -1
  103. package/dist/cjs/hooks/useMemory/useMemory.cjs.map +1 -1
  104. package/dist/cjs/hooks/useMount/useMount.cjs.map +1 -1
  105. package/dist/cjs/hooks/useMouse/useMouse.cjs.map +1 -1
  106. package/dist/cjs/hooks/useMutation/useMutation.cjs +1 -1
  107. package/dist/cjs/hooks/useMutation/useMutation.cjs.map +1 -1
  108. package/dist/cjs/hooks/useMutationObserver/useMutationObserver.cjs +1 -1
  109. package/dist/cjs/hooks/useMutationObserver/useMutationObserver.cjs.map +1 -1
  110. package/dist/cjs/hooks/useNetwork/useNetwork.cjs +1 -1
  111. package/dist/cjs/hooks/useNetwork/useNetwork.cjs.map +1 -1
  112. package/dist/cjs/hooks/useOffsetPagination/useOffsetPagination.cjs.map +1 -1
  113. package/dist/cjs/hooks/useOnce/useOnce.cjs.map +1 -1
  114. package/dist/cjs/hooks/useOnline/useOnline.cjs.map +1 -1
  115. package/dist/cjs/hooks/useOperatingSystem/useOperatingSystem.cjs.map +1 -1
  116. package/dist/cjs/hooks/useOptimistic/useOptimistic.cjs.map +1 -1
  117. package/dist/cjs/hooks/useOrientation/useOrientation.cjs.map +1 -1
  118. package/dist/cjs/hooks/useOtpCredential/useOtpCredential.cjs +1 -1
  119. package/dist/cjs/hooks/useOtpCredential/useOtpCredential.cjs.map +1 -1
  120. package/dist/cjs/hooks/usePageLeave/usePageLeave.cjs +1 -1
  121. package/dist/cjs/hooks/usePageLeave/usePageLeave.cjs.map +1 -1
  122. package/dist/cjs/hooks/usePaint/usePaint.cjs +1 -1
  123. package/dist/cjs/hooks/usePaint/usePaint.cjs.map +1 -1
  124. package/dist/cjs/hooks/useParallax/useParallax.cjs.map +1 -1
  125. package/dist/cjs/hooks/usePerformanceObserver/usePerformanceObserver.cjs +1 -1
  126. package/dist/cjs/hooks/usePerformanceObserver/usePerformanceObserver.cjs.map +1 -1
  127. package/dist/cjs/hooks/usePermission/usePermission.cjs +1 -1
  128. package/dist/cjs/hooks/usePermission/usePermission.cjs.map +1 -1
  129. package/dist/cjs/hooks/usePointerLock/usePointerLock.cjs.map +1 -1
  130. package/dist/cjs/hooks/usePostMessage/usePostMessage.cjs.map +1 -1
  131. package/dist/cjs/hooks/usePreferredColorScheme/usePreferredColorScheme.cjs.map +1 -1
  132. package/dist/cjs/hooks/usePreferredContrast/usePreferredContrast.cjs.map +1 -1
  133. package/dist/cjs/hooks/usePreferredLanguages/usePreferredLanguages.cjs.map +1 -1
  134. package/dist/cjs/hooks/usePreferredReducedMotion/usePreferredReducedMotion.cjs.map +1 -1
  135. package/dist/cjs/hooks/usePrevious/usePrevious.cjs +1 -1
  136. package/dist/cjs/hooks/usePrevious/usePrevious.cjs.map +1 -1
  137. package/dist/cjs/hooks/useQuery/useQuery.cjs +1 -1
  138. package/dist/cjs/hooks/useQuery/useQuery.cjs.map +1 -1
  139. package/dist/cjs/hooks/useQueue/useQueue.cjs.map +1 -1
  140. package/dist/cjs/hooks/useRaf/useRaf.cjs +1 -1
  141. package/dist/cjs/hooks/useRaf/useRaf.cjs.map +1 -1
  142. package/dist/cjs/hooks/useRafValue/useRafValue.cjs.map +1 -1
  143. package/dist/cjs/hooks/useRefState/useRefState.cjs.map +1 -1
  144. package/dist/cjs/hooks/useRenderCount/useRenderCount.cjs.map +1 -1
  145. package/dist/cjs/hooks/useRenderInfo/useRenderInfo.cjs.map +1 -1
  146. package/dist/cjs/hooks/useRerender/useRerender.cjs.map +1 -1
  147. package/dist/cjs/hooks/useResizeObserver/useResizeObserver.cjs +1 -1
  148. package/dist/cjs/hooks/useResizeObserver/useResizeObserver.cjs.map +1 -1
  149. package/dist/cjs/hooks/useScreenOrientation/useScreenOrientation.cjs +1 -1
  150. package/dist/cjs/hooks/useScreenOrientation/useScreenOrientation.cjs.map +1 -1
  151. package/dist/cjs/hooks/useScript/useScript.cjs +1 -1
  152. package/dist/cjs/hooks/useScript/useScript.cjs.map +1 -1
  153. package/dist/cjs/hooks/useScroll/useScroll.cjs +1 -1
  154. package/dist/cjs/hooks/useScroll/useScroll.cjs.map +1 -1
  155. package/dist/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs.map +1 -1
  156. package/dist/cjs/hooks/useScrollTo/useScrollTo.cjs.map +1 -1
  157. package/dist/cjs/hooks/useSet/useSet.cjs.map +1 -1
  158. package/dist/cjs/hooks/useShare/useShare.cjs.map +1 -1
  159. package/dist/cjs/hooks/useSpeechRecognition/useSpeechRecognition.cjs +1 -1
  160. package/dist/cjs/hooks/useSpeechRecognition/useSpeechRecognition.cjs.map +1 -1
  161. package/dist/cjs/hooks/useSpeechSynthesis/useSpeechSynthesis.cjs +1 -1
  162. package/dist/cjs/hooks/useSpeechSynthesis/useSpeechSynthesis.cjs.map +1 -1
  163. package/dist/cjs/hooks/useStateHistory/useStateHistory.cjs.map +1 -1
  164. package/dist/cjs/hooks/useStep/useStep.cjs.map +1 -1
  165. package/dist/cjs/hooks/useSticky/useSticky.cjs +1 -1
  166. package/dist/cjs/hooks/useSticky/useSticky.cjs.map +1 -1
  167. package/dist/cjs/hooks/useStopwatch/useStopwatch.cjs +1 -1
  168. package/dist/cjs/hooks/useStopwatch/useStopwatch.cjs.map +1 -1
  169. package/dist/cjs/hooks/useStorage/useStorage.cjs +1 -1
  170. package/dist/cjs/hooks/useStorage/useStorage.cjs.map +1 -1
  171. package/dist/cjs/hooks/useTextDirection/useTextDirection.cjs +1 -1
  172. package/dist/cjs/hooks/useTextDirection/useTextDirection.cjs.map +1 -1
  173. package/dist/cjs/hooks/useTextSelection/useTextSelection.cjs +1 -1
  174. package/dist/cjs/hooks/useTextSelection/useTextSelection.cjs.map +1 -1
  175. package/dist/cjs/hooks/useThrottleCallback/useThrottleCallback.cjs.map +1 -1
  176. package/dist/cjs/hooks/useThrottleValue/useThrottleValue.cjs.map +1 -1
  177. package/dist/cjs/hooks/useTime/useTime.cjs.map +1 -1
  178. package/dist/cjs/hooks/useTimeout/useTimeout.cjs.map +1 -1
  179. package/dist/cjs/hooks/useTimer/useTimer.cjs +1 -1
  180. package/dist/cjs/hooks/useTimer/useTimer.cjs.map +1 -1
  181. package/dist/cjs/hooks/useToggle/useToggle.cjs.map +1 -1
  182. package/dist/cjs/hooks/useUnmount/useUnmount.cjs.map +1 -1
  183. package/dist/cjs/hooks/useUrlSearchParam/useUrlSearchParam.cjs +1 -1
  184. package/dist/cjs/hooks/useUrlSearchParam/useUrlSearchParam.cjs.map +1 -1
  185. package/dist/cjs/hooks/useUrlSearchParams/useUrlSearchParams.cjs +1 -1
  186. package/dist/cjs/hooks/useUrlSearchParams/useUrlSearchParams.cjs.map +1 -1
  187. package/dist/cjs/hooks/useVibrate/useVibrate.cjs.map +1 -1
  188. package/dist/cjs/hooks/useWakeLock/useWakeLock.cjs +1 -1
  189. package/dist/cjs/hooks/useWakeLock/useWakeLock.cjs.map +1 -1
  190. package/dist/cjs/hooks/useWebSocket/useWebSocket.cjs +1 -1
  191. package/dist/cjs/hooks/useWebSocket/useWebSocket.cjs.map +1 -1
  192. package/dist/cjs/hooks/useWindowEvent/useWindowEvent.cjs.map +1 -1
  193. package/dist/cjs/hooks/useWindowFocus/useWindowFocus.cjs.map +1 -1
  194. package/dist/cjs/hooks/useWindowScroll/useWindowScroll.cjs.map +1 -1
  195. package/dist/cjs/hooks/useWindowSize/useWindowSize.cjs +1 -1
  196. package/dist/cjs/hooks/useWindowSize/useWindowSize.cjs.map +1 -1
  197. package/dist/cjs/hooks/useWizard/useWizard.cjs +1 -1
  198. package/dist/cjs/hooks/useWizard/useWizard.cjs.map +1 -1
  199. package/dist/cjs/utils/helpers/copy.cjs.map +1 -1
  200. package/dist/cjs/utils/helpers/debounce.cjs.map +1 -1
  201. package/dist/cjs/utils/helpers/getDate.cjs.map +1 -1
  202. package/dist/cjs/utils/helpers/getElement.cjs.map +1 -1
  203. package/dist/cjs/utils/helpers/getRetry.cjs.map +1 -1
  204. package/dist/cjs/utils/helpers/isTarget.cjs.map +1 -1
  205. package/dist/cjs/utils/helpers/throttle.cjs.map +1 -1
  206. package/dist/esm/helpers/createContext/createContext.mjs.map +1 -1
  207. package/dist/esm/helpers/createReactiveContext/createReactiveContext.mjs.map +1 -1
  208. package/dist/esm/helpers/createStore/createStore.mjs.map +1 -1
  209. package/dist/esm/hooks/useActiveElement/useActiveElement.mjs +1 -1
  210. package/dist/esm/hooks/useActiveElement/useActiveElement.mjs.map +1 -1
  211. package/dist/esm/hooks/useAsync/useAsync.mjs.map +1 -1
  212. package/dist/esm/hooks/useBattery/useBattery.mjs +10 -10
  213. package/dist/esm/hooks/useBattery/useBattery.mjs.map +1 -1
  214. package/dist/esm/hooks/useBluetooth/useBluetooth.mjs +14 -15
  215. package/dist/esm/hooks/useBluetooth/useBluetooth.mjs.map +1 -1
  216. package/dist/esm/hooks/useBoolean/useBoolean.mjs.map +1 -1
  217. package/dist/esm/hooks/useBreakpoints/useBreakpoints.mjs.map +1 -1
  218. package/dist/esm/hooks/useBrowserLanguage/useBrowserLanguage.mjs.map +1 -1
  219. package/dist/esm/hooks/useClickOutside/useClickOutside.mjs.map +1 -1
  220. package/dist/esm/hooks/useClipboard/useClipboard.mjs +13 -14
  221. package/dist/esm/hooks/useClipboard/useClipboard.mjs.map +1 -1
  222. package/dist/esm/hooks/useConst/useConst.mjs.map +1 -1
  223. package/dist/esm/hooks/useCookie/useCookie.mjs +27 -27
  224. package/dist/esm/hooks/useCookie/useCookie.mjs.map +1 -1
  225. package/dist/esm/hooks/useCookies/useCookies.mjs +19 -19
  226. package/dist/esm/hooks/useCookies/useCookies.mjs.map +1 -1
  227. package/dist/esm/hooks/useCopy/useCopy.mjs.map +1 -1
  228. package/dist/esm/hooks/useCounter/useCounter.mjs +5 -6
  229. package/dist/esm/hooks/useCounter/useCounter.mjs.map +1 -1
  230. package/dist/esm/hooks/useCssVar/useCssVar.mjs +13 -14
  231. package/dist/esm/hooks/useCssVar/useCssVar.mjs.map +1 -1
  232. package/dist/esm/hooks/useDebounceCallback/useDebounceCallback.mjs.map +1 -1
  233. package/dist/esm/hooks/useDebounceValue/useDebounceValue.mjs.map +1 -1
  234. package/dist/esm/hooks/useDefault/useDefault.mjs.map +1 -1
  235. package/dist/esm/hooks/useDeviceMotion/useDeviceMotion.mjs +18 -19
  236. package/dist/esm/hooks/useDeviceMotion/useDeviceMotion.mjs.map +1 -1
  237. package/dist/esm/hooks/useDeviceOrientation/useDeviceOrientation.mjs.map +1 -1
  238. package/dist/esm/hooks/useDevicePixelRatio/useDevicePixelRatio.mjs.map +1 -1
  239. package/dist/esm/hooks/useDidUpdate/useDidUpdate.mjs.map +1 -1
  240. package/dist/esm/hooks/useDisclosure/useDisclosure.mjs +5 -11
  241. package/dist/esm/hooks/useDisclosure/useDisclosure.mjs.map +1 -1
  242. package/dist/esm/hooks/useDisplayMedia/useDisplayMedia.mjs +28 -28
  243. package/dist/esm/hooks/useDisplayMedia/useDisplayMedia.mjs.map +1 -1
  244. package/dist/esm/hooks/useDocumentEvent/useDocumentEvent.mjs.map +1 -1
  245. package/dist/esm/hooks/useDocumentTitle/useDocumentTitle.mjs +15 -15
  246. package/dist/esm/hooks/useDocumentTitle/useDocumentTitle.mjs.map +1 -1
  247. package/dist/esm/hooks/useDocumentVisibility/useDocumentVisibility.mjs.map +1 -1
  248. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs +11 -13
  249. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs.map +1 -1
  250. package/dist/esm/hooks/useDropZone/useDropZone.mjs +27 -28
  251. package/dist/esm/hooks/useDropZone/useDropZone.mjs.map +1 -1
  252. package/dist/esm/hooks/useElementSize/useElementSize.mjs.map +1 -1
  253. package/dist/esm/hooks/useEvent/useEvent.mjs.map +1 -1
  254. package/dist/esm/hooks/useEventListener/useEventListener.mjs.map +1 -1
  255. package/dist/esm/hooks/useEventSource/useEventSource.mjs +37 -40
  256. package/dist/esm/hooks/useEventSource/useEventSource.mjs.map +1 -1
  257. package/dist/esm/hooks/useEyeDropper/useEyeDropper.mjs.map +1 -1
  258. package/dist/esm/hooks/useFavicon/useFavicon.mjs +11 -12
  259. package/dist/esm/hooks/useFavicon/useFavicon.mjs.map +1 -1
  260. package/dist/esm/hooks/useField/useField.mjs +45 -49
  261. package/dist/esm/hooks/useField/useField.mjs.map +1 -1
  262. package/dist/esm/hooks/useFileDialog/useFileDialog.mjs +22 -25
  263. package/dist/esm/hooks/useFileDialog/useFileDialog.mjs.map +1 -1
  264. package/dist/esm/hooks/useFocus/useFocus.mjs +24 -32
  265. package/dist/esm/hooks/useFocus/useFocus.mjs.map +1 -1
  266. package/dist/esm/hooks/useFps/useFps.mjs.map +1 -1
  267. package/dist/esm/hooks/useFul/useFul.mjs.map +1 -1
  268. package/dist/esm/hooks/useFullscreen/useFullscreen.mjs +23 -24
  269. package/dist/esm/hooks/useFullscreen/useFullscreen.mjs.map +1 -1
  270. package/dist/esm/hooks/useGamepad/useGamepad.mjs.map +1 -1
  271. package/dist/esm/hooks/useGeolocation/useGeolocation.mjs +24 -24
  272. package/dist/esm/hooks/useGeolocation/useGeolocation.mjs.map +1 -1
  273. package/dist/esm/hooks/useHash/useHash.mjs.map +1 -1
  274. package/dist/esm/hooks/useHotkeys/useHotkeys.mjs +24 -25
  275. package/dist/esm/hooks/useHotkeys/useHotkeys.mjs.map +1 -1
  276. package/dist/esm/hooks/useHover/useHover.mjs +20 -22
  277. package/dist/esm/hooks/useHover/useHover.mjs.map +1 -1
  278. package/dist/esm/hooks/useIdle/useIdle.mjs.map +1 -1
  279. package/dist/esm/hooks/useImage/useImage.mjs.map +1 -1
  280. package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs +14 -14
  281. package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs.map +1 -1
  282. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.mjs +19 -20
  283. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.mjs.map +1 -1
  284. package/dist/esm/hooks/useInterval/useInterval.mjs +8 -8
  285. package/dist/esm/hooks/useInterval/useInterval.mjs.map +1 -1
  286. package/dist/esm/hooks/useIsFirstRender/useIsFirstRender.mjs.map +1 -1
  287. package/dist/esm/hooks/useKeyPress/useKeyPress.mjs +22 -24
  288. package/dist/esm/hooks/useKeyPress/useKeyPress.mjs.map +1 -1
  289. package/dist/esm/hooks/useKeyPressEvent/useKeyPressEvent.mjs +23 -23
  290. package/dist/esm/hooks/useKeyPressEvent/useKeyPressEvent.mjs.map +1 -1
  291. package/dist/esm/hooks/useKeyboard/useKeyboard.mjs +16 -22
  292. package/dist/esm/hooks/useKeyboard/useKeyboard.mjs.map +1 -1
  293. package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs +20 -20
  294. package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs.map +1 -1
  295. package/dist/esm/hooks/useLastChanged/useLastChanged.mjs +6 -6
  296. package/dist/esm/hooks/useLastChanged/useLastChanged.mjs.map +1 -1
  297. package/dist/esm/hooks/useLatest/useLatest.mjs +12 -4
  298. package/dist/esm/hooks/useLatest/useLatest.mjs.map +1 -1
  299. package/dist/esm/hooks/useLess/useLess.mjs.map +1 -1
  300. package/dist/esm/hooks/useList/useList.mjs.map +1 -1
  301. package/dist/esm/hooks/useLockCallback/useLockCallback.mjs.map +1 -1
  302. package/dist/esm/hooks/useLogger/useLogger.mjs.map +1 -1
  303. package/dist/esm/hooks/useLongPress/useLongPress.mjs +23 -27
  304. package/dist/esm/hooks/useLongPress/useLongPress.mjs.map +1 -1
  305. package/dist/esm/hooks/useMap/useMap.mjs.map +1 -1
  306. package/dist/esm/hooks/useMeasure/useMeasure.mjs.map +1 -1
  307. package/dist/esm/hooks/useMediaQuery/useMediaQuery.mjs.map +1 -1
  308. package/dist/esm/hooks/useMemory/useMemory.mjs +1 -1
  309. package/dist/esm/hooks/useMemory/useMemory.mjs.map +1 -1
  310. package/dist/esm/hooks/useMount/useMount.mjs.map +1 -1
  311. package/dist/esm/hooks/useMouse/useMouse.mjs.map +1 -1
  312. package/dist/esm/hooks/useMutation/useMutation.mjs +38 -42
  313. package/dist/esm/hooks/useMutation/useMutation.mjs.map +1 -1
  314. package/dist/esm/hooks/useMutationObserver/useMutationObserver.mjs +12 -12
  315. package/dist/esm/hooks/useMutationObserver/useMutationObserver.mjs.map +1 -1
  316. package/dist/esm/hooks/useNetwork/useNetwork.mjs +28 -28
  317. package/dist/esm/hooks/useNetwork/useNetwork.mjs.map +1 -1
  318. package/dist/esm/hooks/useOffsetPagination/useOffsetPagination.mjs.map +1 -1
  319. package/dist/esm/hooks/useOnce/useOnce.mjs.map +1 -1
  320. package/dist/esm/hooks/useOnline/useOnline.mjs.map +1 -1
  321. package/dist/esm/hooks/useOperatingSystem/useOperatingSystem.mjs.map +1 -1
  322. package/dist/esm/hooks/useOptimistic/useOptimistic.mjs.map +1 -1
  323. package/dist/esm/hooks/useOrientation/useOrientation.mjs.map +1 -1
  324. package/dist/esm/hooks/useOtpCredential/useOtpCredential.mjs +12 -13
  325. package/dist/esm/hooks/useOtpCredential/useOtpCredential.mjs.map +1 -1
  326. package/dist/esm/hooks/usePageLeave/usePageLeave.mjs +6 -6
  327. package/dist/esm/hooks/usePageLeave/usePageLeave.mjs.map +1 -1
  328. package/dist/esm/hooks/usePaint/usePaint.mjs +87 -93
  329. package/dist/esm/hooks/usePaint/usePaint.mjs.map +1 -1
  330. package/dist/esm/hooks/useParallax/useParallax.mjs.map +1 -1
  331. package/dist/esm/hooks/usePerformanceObserver/usePerformanceObserver.mjs +17 -19
  332. package/dist/esm/hooks/usePerformanceObserver/usePerformanceObserver.mjs.map +1 -1
  333. package/dist/esm/hooks/usePermission/usePermission.mjs +13 -13
  334. package/dist/esm/hooks/usePermission/usePermission.mjs.map +1 -1
  335. package/dist/esm/hooks/usePointerLock/usePointerLock.mjs.map +1 -1
  336. package/dist/esm/hooks/usePostMessage/usePostMessage.mjs.map +1 -1
  337. package/dist/esm/hooks/usePreferredColorScheme/usePreferredColorScheme.mjs.map +1 -1
  338. package/dist/esm/hooks/usePreferredContrast/usePreferredContrast.mjs.map +1 -1
  339. package/dist/esm/hooks/usePreferredDark/usePreferredDark.mjs.map +1 -1
  340. package/dist/esm/hooks/usePreferredLanguages/usePreferredLanguages.mjs.map +1 -1
  341. package/dist/esm/hooks/usePrevious/usePrevious.mjs +4 -4
  342. package/dist/esm/hooks/usePrevious/usePrevious.mjs.map +1 -1
  343. package/dist/esm/hooks/useQuery/useQuery.mjs +39 -41
  344. package/dist/esm/hooks/useQuery/useQuery.mjs.map +1 -1
  345. package/dist/esm/hooks/useQueue/useQueue.mjs.map +1 -1
  346. package/dist/esm/hooks/useRaf/useRaf.mjs +21 -21
  347. package/dist/esm/hooks/useRaf/useRaf.mjs.map +1 -1
  348. package/dist/esm/hooks/useRafValue/useRafValue.mjs.map +1 -1
  349. package/dist/esm/hooks/useRefState/useRefState.mjs.map +1 -1
  350. package/dist/esm/hooks/useRenderCount/useRenderCount.mjs.map +1 -1
  351. package/dist/esm/hooks/useRenderInfo/useRenderInfo.mjs.map +1 -1
  352. package/dist/esm/hooks/useRerender/useRerender.mjs.map +1 -1
  353. package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs +16 -17
  354. package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs.map +1 -1
  355. package/dist/esm/hooks/useScreenOrientation/useScreenOrientation.mjs +11 -11
  356. package/dist/esm/hooks/useScreenOrientation/useScreenOrientation.mjs.map +1 -1
  357. package/dist/esm/hooks/useScript/useScript.mjs +16 -16
  358. package/dist/esm/hooks/useScript/useScript.mjs.map +1 -1
  359. package/dist/esm/hooks/useScroll/useScroll.mjs +37 -39
  360. package/dist/esm/hooks/useScroll/useScroll.mjs.map +1 -1
  361. package/dist/esm/hooks/useScrollIntoView/useScrollIntoView.mjs.map +1 -1
  362. package/dist/esm/hooks/useScrollTo/useScrollTo.mjs.map +1 -1
  363. package/dist/esm/hooks/useSet/useSet.mjs.map +1 -1
  364. package/dist/esm/hooks/useShare/useShare.mjs.map +1 -1
  365. package/dist/esm/hooks/useSpeechRecognition/useSpeechRecognition.mjs +35 -35
  366. package/dist/esm/hooks/useSpeechRecognition/useSpeechRecognition.mjs.map +1 -1
  367. package/dist/esm/hooks/useSpeechSynthesis/useSpeechSynthesis.mjs +36 -42
  368. package/dist/esm/hooks/useSpeechSynthesis/useSpeechSynthesis.mjs.map +1 -1
  369. package/dist/esm/hooks/useStateHistory/useStateHistory.mjs.map +1 -1
  370. package/dist/esm/hooks/useStep/useStep.mjs.map +1 -1
  371. package/dist/esm/hooks/useSticky/useSticky.mjs +12 -12
  372. package/dist/esm/hooks/useSticky/useSticky.mjs.map +1 -1
  373. package/dist/esm/hooks/useStopwatch/useStopwatch.mjs +10 -11
  374. package/dist/esm/hooks/useStopwatch/useStopwatch.mjs.map +1 -1
  375. package/dist/esm/hooks/useStorage/useStorage.mjs +27 -27
  376. package/dist/esm/hooks/useStorage/useStorage.mjs.map +1 -1
  377. package/dist/esm/hooks/useTextDirection/useTextDirection.mjs +21 -24
  378. package/dist/esm/hooks/useTextDirection/useTextDirection.mjs.map +1 -1
  379. package/dist/esm/hooks/useTextSelection/useTextSelection.mjs +7 -7
  380. package/dist/esm/hooks/useTextSelection/useTextSelection.mjs.map +1 -1
  381. package/dist/esm/hooks/useThrottleCallback/useThrottleCallback.mjs.map +1 -1
  382. package/dist/esm/hooks/useThrottleValue/useThrottleValue.mjs.map +1 -1
  383. package/dist/esm/hooks/useTime/useTime.mjs.map +1 -1
  384. package/dist/esm/hooks/useTimeout/useTimeout.mjs.map +1 -1
  385. package/dist/esm/hooks/useTimer/useTimer.mjs +51 -54
  386. package/dist/esm/hooks/useTimer/useTimer.mjs.map +1 -1
  387. package/dist/esm/hooks/useToggle/useToggle.mjs.map +1 -1
  388. package/dist/esm/hooks/useUnmount/useUnmount.mjs.map +1 -1
  389. package/dist/esm/hooks/useUrlSearchParam/useUrlSearchParam.mjs +38 -38
  390. package/dist/esm/hooks/useUrlSearchParam/useUrlSearchParam.mjs.map +1 -1
  391. package/dist/esm/hooks/useUrlSearchParams/useUrlSearchParams.mjs +29 -29
  392. package/dist/esm/hooks/useUrlSearchParams/useUrlSearchParams.mjs.map +1 -1
  393. package/dist/esm/hooks/useVibrate/useVibrate.mjs.map +1 -1
  394. package/dist/esm/hooks/useWakeLock/useWakeLock.mjs +16 -16
  395. package/dist/esm/hooks/useWakeLock/useWakeLock.mjs.map +1 -1
  396. package/dist/esm/hooks/useWebSocket/useWebSocket.mjs +28 -38
  397. package/dist/esm/hooks/useWebSocket/useWebSocket.mjs.map +1 -1
  398. package/dist/esm/hooks/useWindowEvent/useWindowEvent.mjs.map +1 -1
  399. package/dist/esm/hooks/useWindowFocus/useWindowFocus.mjs.map +1 -1
  400. package/dist/esm/hooks/useWindowScroll/useWindowScroll.mjs.map +1 -1
  401. package/dist/esm/hooks/useWindowSize/useWindowSize.mjs +9 -9
  402. package/dist/esm/hooks/useWindowSize/useWindowSize.mjs.map +1 -1
  403. package/dist/esm/hooks/useWizard/useWizard.mjs +9 -11
  404. package/dist/esm/hooks/useWizard/useWizard.mjs.map +1 -1
  405. package/dist/esm/utils/helpers/copy.mjs.map +1 -1
  406. package/dist/esm/utils/helpers/debounce.mjs.map +1 -1
  407. package/dist/esm/utils/helpers/getDate.mjs.map +1 -1
  408. package/dist/esm/utils/helpers/getElement.mjs.map +1 -1
  409. package/dist/esm/utils/helpers/getRetry.mjs.map +1 -1
  410. package/dist/esm/utils/helpers/isTarget.mjs.map +1 -1
  411. package/dist/esm/utils/helpers/throttle.mjs.map +1 -1
  412. package/dist/types/hooks/useLatest/useLatest.d.ts +7 -2
  413. package/package.json +5 -5
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react"),g=require("../useRefState/useRefState.cjs"),v=require("../../utils/helpers/isTarget.cjs"),R=require("../../utils/helpers/getElement.cjs"),O=(...t)=>{const e=v.isTarget(t[0])?t[0]:void 0,o=e?t[1]:t[0],n=e?t[2]:t[1],[r,b]=s.useState(),d=(n==null?void 0:n.enabled)??!0,c=g.useRefState(window.document.documentElement),i=s.useRef(o);i.current=o;const l=s.useRef(n);l.current=n,s.useEffect(()=>{if(!d&&!e&&!c.state)return;const a=e?R.getElement(e):c.current;if(!a)return;const u=new MutationObserver(i.current);return b(u),u.observe(a,l.current),()=>{u.disconnect()}},[e,c.state]);const f=()=>r==null?void 0:r.disconnect();return e?{stop:f,observer:r}:{ref:c,stop:f,observer:r}};exports.useMutationObserver=O;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),v=require("../useRefState/useRefState.cjs"),g=require("../../utils/helpers/isTarget.cjs"),R=require("../../utils/helpers/getElement.cjs"),O=(...t)=>{const e=g.isTarget(t[0])?t[0]:void 0,u=e?t[1]:t[0],s=e?t[2]:t[1],[o,b]=r.useState(),d=s?.enabled??!0,n=v.useRefState(window.document.documentElement),i=r.useRef(u);i.current=u;const l=r.useRef(s);l.current=s,r.useEffect(()=>{if(!d||!e&&!n.state)return;const a=e?R.getElement(e):n.current;if(!a)return;const c=new MutationObserver(i.current);return b(c),c.observe(a,l.current),()=>{c.disconnect()}},[e,n.state]);const f=()=>o?.disconnect();return e?{stop:f,observer:o}:{ref:n,stop:f,observer:o}};exports.useMutationObserver=O;
2
2
  //# sourceMappingURL=useMutationObserver.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useMutationObserver.cjs","sources":["../../../../src/hooks/useMutationObserver/useMutationObserver.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The mutation observer target element type */\nexport type UseMutationObserverTarget = HookTarget;\n\n/** The mutation observer return type */\nexport interface UseMutationObserverReturn {\n /** The mutation observer instance */\n observer: MutationObserver;\n /** The mutation observer entries */\n stop: () => void;\n}\n\n/** The mutation observer options type */\nexport interface UseMutationObserverOptions extends MutationObserverInit {\n /** The enabled state of the mutation observer */\n enabled?: boolean;\n}\n\nexport interface UseMutationObserver {\n (\n target: HookTarget,\n callback: MutationCallback,\n options?: UseMutationObserverOptions\n ): UseMutationObserverReturn;\n\n <Target extends Element>(\n callback: MutationCallback,\n options?: UseMutationObserverOptions,\n target?: never\n ): UseMutationObserverReturn & { ref: StateRef<Target> };\n}\n\n/**\n * @name useMutationObserver\n * @description - Hook that gives you mutation observer state\n * @category Browser\n *\n * @overload\n * @template Target The target element\n * @param {MutationCallback} callback The callback to execute when mutation is detected\n * @param {boolean} [options.enabled=true] The enabled state of the mutation observer\n * @param {boolean} [options.attributes] Set to true if mutations to target's attributes are to be observed\n * @param {boolean} [options.characterData] Set to true if mutations to target's data are to be observed\n * @param {boolean} [options.childList] Set to true if mutations to target's children are to be observed\n * @param {boolean} [options.subtree] Set to true if mutations to not just target, but also target's descendants are to be observed\n * @param {boolean} [options.characterDataOldValue] Set to true if characterData is set to true or omitted and target's data before the mutation needs to be recorded\n * @param {boolean} [options.attributeOldValue] Set to a list of attribute local names (without namespace) if not all attribute mutations need to be observed and attributes is true or omitted\n * @param {string[]} [options.attributeFilter] Set to a list of attribute local names (without namespace) if not all attribute mutations need to be observed and attributes is true or omitted\n * @returns {UseMutationObserverReturn & { ref: StateRef<Target> }} An object containing the mutation observer state\n *\n * @example\n * const { ref, observer, stop } = useMutationObserver(() => console.log('callback'))\n *\n * @overload\n * @param {HookTarget} target The target element to observe\n * @param {MutationCallback} callback The callback to execute when mutation is detected\n * @param {boolean} [options.enabled=true] The enabled state of the mutation observer\n * @param {boolean} [options.attributes] Set to true if mutations to target's attributes are to be observed\n * @param {boolean} [options.characterData] Set to true if mutations to target's data are to be observed\n * @param {boolean} [options.childList] Set to true if mutations to target's children are to be observed\n * @param {boolean} [options.subtree] Set to true if mutations to not just target, but also target's descendants are to be observed\n * @param {boolean} [options.characterDataOldValue] Set to true if characterData is set to true or omitted and target's data before the mutation needs to be recorded\n * @param {boolean} [options.attributeOldValue] Set to a list of attribute local names (without namespace) if not all attribute mutations need to be observed and attributes is true or omitted\n * @param {string[]} [options.attributeFilter] Set to a list of attribute local names (without namespace) if not all attribute mutations need to be observed and attributes is true or omitted\n * @returns {UseMutationObserverReturn} An object containing the mutation observer state\n *\n * @example\n * const { observer, stop } = useMutationObserver(ref, () => console.log('callback'))\n */\nexport const useMutationObserver = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as MutationCallback;\n const options = (target ? params[2] : params[1]) as UseMutationObserverOptions | undefined;\n\n const [observer, setObserver] = useState<MutationObserver>();\n const enabled = options?.enabled ?? true;\n\n const internalRef = useRefState<Element>(window.document.documentElement);\n const internalCallbackRef = useRef<MutationCallback>(callback);\n internalCallbackRef.current = callback;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!enabled && !target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const observer = new MutationObserver(internalCallbackRef.current);\n setObserver(observer);\n observer.observe(element, internalOptionsRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [target, internalRef.state]);\n\n const stop = () => observer?.disconnect();\n\n if (target) return { stop, observer };\n return {\n ref: internalRef,\n stop,\n observer\n };\n}) as UseMutationObserver;\n"],"names":["useMutationObserver","params","target","isTarget","callback","options","observer","setObserver","useState","enabled","internalRef","useRefState","internalCallbackRef","useRef","internalOptionsRef","useEffect","element","getElement","stop"],"mappings":"mPA8EaA,EAAuB,IAAIC,IAAkB,CAClD,MAAAC,EAAUC,WAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAYF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACzCI,EAAWH,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAExC,CAACK,EAAUC,CAAW,EAAIC,WAA2B,EACrDC,GAAUJ,GAAA,YAAAA,EAAS,UAAW,GAE9BK,EAAcC,EAAA,YAAqB,OAAO,SAAS,eAAe,EAClEC,EAAsBC,SAAyBT,CAAQ,EAC7DQ,EAAoB,QAAUR,EACxB,MAAAU,EAAqBD,SAAOR,CAAO,EACzCS,EAAmB,QAAUT,EAE7BU,EAAAA,UAAU,IAAM,CACd,GAAI,CAACN,GAAW,CAACP,GAAU,CAACQ,EAAY,MAAO,OAE/C,MAAMM,EAAWd,EAASe,EAAAA,WAAWf,CAAM,EAAIQ,EAAY,QAC3D,GAAI,CAACM,EAAS,OAEd,MAAMV,EAAW,IAAI,iBAAiBM,EAAoB,OAAO,EACjE,OAAAL,EAAYD,CAAQ,EACpBA,EAAS,QAAQU,EAASF,EAAmB,OAAO,EAE7C,IAAM,CACXR,EAAS,WAAW,CACtB,CACC,EAAA,CAACJ,EAAQQ,EAAY,KAAK,CAAC,EAExB,MAAAQ,EAAO,IAAMZ,GAAA,YAAAA,EAAU,aAE7B,OAAIJ,EAAe,CAAE,KAAAgB,EAAM,SAAAZ,CAAS,EAC7B,CACL,IAAKI,EACL,KAAAQ,EACA,SAAAZ,CACF,CACF"}
1
+ {"version":3,"file":"useMutationObserver.cjs","sources":["../../../../src/hooks/useMutationObserver/useMutationObserver.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The mutation observer target element type */\nexport type UseMutationObserverTarget = HookTarget;\n\n/** The mutation observer return type */\nexport interface UseMutationObserverReturn {\n /** The mutation observer instance */\n observer: MutationObserver;\n /** The mutation observer entries */\n stop: () => void;\n}\n\n/** The mutation observer options type */\nexport interface UseMutationObserverOptions extends MutationObserverInit {\n /** The enabled state of the mutation observer */\n enabled?: boolean;\n}\n\nexport interface UseMutationObserver {\n (\n target: HookTarget,\n callback: MutationCallback,\n options?: UseMutationObserverOptions\n ): UseMutationObserverReturn;\n\n <Target extends Element>(\n callback: MutationCallback,\n options?: UseMutationObserverOptions,\n target?: never\n ): UseMutationObserverReturn & { ref: StateRef<Target> };\n}\n\n/**\n * @name useMutationObserver\n * @description - Hook that gives you mutation observer state\n * @category Browser\n *\n * @overload\n * @template Target The target element\n * @param {MutationCallback} callback The callback to execute when mutation is detected\n * @param {boolean} [options.enabled=true] The enabled state of the mutation observer\n * @param {boolean} [options.attributes] Set to true if mutations to target's attributes are to be observed\n * @param {boolean} [options.characterData] Set to true if mutations to target's data are to be observed\n * @param {boolean} [options.childList] Set to true if mutations to target's children are to be observed\n * @param {boolean} [options.subtree] Set to true if mutations to not just target, but also target's descendants are to be observed\n * @param {boolean} [options.characterDataOldValue] Set to true if characterData is set to true or omitted and target's data before the mutation needs to be recorded\n * @param {boolean} [options.attributeOldValue] Set to a list of attribute local names (without namespace) if not all attribute mutations need to be observed and attributes is true or omitted\n * @param {string[]} [options.attributeFilter] Set to a list of attribute local names (without namespace) if not all attribute mutations need to be observed and attributes is true or omitted\n * @returns {UseMutationObserverReturn & { ref: StateRef<Target> }} An object containing the mutation observer state\n *\n * @example\n * const { ref, observer, stop } = useMutationObserver(() => console.log('callback'))\n *\n * @overload\n * @param {HookTarget} target The target element to observe\n * @param {MutationCallback} callback The callback to execute when mutation is detected\n * @param {boolean} [options.enabled=true] The enabled state of the mutation observer\n * @param {boolean} [options.attributes] Set to true if mutations to target's attributes are to be observed\n * @param {boolean} [options.characterData] Set to true if mutations to target's data are to be observed\n * @param {boolean} [options.childList] Set to true if mutations to target's children are to be observed\n * @param {boolean} [options.subtree] Set to true if mutations to not just target, but also target's descendants are to be observed\n * @param {boolean} [options.characterDataOldValue] Set to true if characterData is set to true or omitted and target's data before the mutation needs to be recorded\n * @param {boolean} [options.attributeOldValue] Set to a list of attribute local names (without namespace) if not all attribute mutations need to be observed and attributes is true or omitted\n * @param {string[]} [options.attributeFilter] Set to a list of attribute local names (without namespace) if not all attribute mutations need to be observed and attributes is true or omitted\n * @returns {UseMutationObserverReturn} An object containing the mutation observer state\n *\n * @example\n * const { observer, stop } = useMutationObserver(ref, () => console.log('callback'))\n */\nexport const useMutationObserver = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as MutationCallback;\n const options = (target ? params[2] : params[1]) as UseMutationObserverOptions | undefined;\n\n const [observer, setObserver] = useState<MutationObserver>();\n const enabled = options?.enabled ?? true;\n\n const internalRef = useRefState<Element>(window.document.documentElement);\n const internalCallbackRef = useRef<MutationCallback>(callback);\n internalCallbackRef.current = callback;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const observer = new MutationObserver(internalCallbackRef.current);\n setObserver(observer);\n observer.observe(element, internalOptionsRef.current);\n\n return () => {\n observer.disconnect();\n };\n }, [target, internalRef.state]);\n\n const stop = () => observer?.disconnect();\n\n if (target) return { stop, observer };\n return {\n ref: internalRef,\n stop,\n observer\n };\n}) as UseMutationObserver;\n"],"names":["useMutationObserver","params","target","isTarget","callback","options","observer","setObserver","useState","enabled","internalRef","useRefState","internalCallbackRef","useRef","internalOptionsRef","useEffect","element","getElement","stop"],"mappings":"mPA8EaA,EAAuB,IAAIC,IAAkB,CACxD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAYF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EACzCI,EAAWH,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAExC,CAACK,EAAUC,CAAW,EAAIC,WAAA,EAC1BC,EAAUJ,GAAS,SAAW,GAE9BK,EAAcC,EAAAA,YAAqB,OAAO,SAAS,eAAe,EAClEC,EAAsBC,EAAAA,OAAyBT,CAAQ,EAC7DQ,EAAoB,QAAUR,EAC9B,MAAMU,EAAqBD,EAAAA,OAAOR,CAAO,EACzCS,EAAmB,QAAUT,EAE7BU,EAAAA,UAAU,IAAM,CACd,GAAI,CAACN,GAAY,CAACP,GAAU,CAACQ,EAAY,MAAQ,OAEjD,MAAMM,EAAWd,EAASe,EAAAA,WAAWf,CAAM,EAAIQ,EAAY,QAC3D,GAAI,CAACM,EAAS,OAEd,MAAMV,EAAW,IAAI,iBAAiBM,EAAoB,OAAO,EACjE,OAAAL,EAAYD,CAAQ,EACpBA,EAAS,QAAQU,EAASF,EAAmB,OAAO,EAE7C,IAAM,CACXR,EAAS,WAAA,CAAW,CACtB,EACC,CAACJ,EAAQQ,EAAY,KAAK,CAAC,EAE9B,MAAMQ,EAAO,IAAMZ,GAAU,WAAA,EAE7B,OAAIJ,EAAe,CAAE,KAAAgB,EAAM,SAAAZ,CAAA,EACpB,CACL,IAAKI,EACL,KAAAQ,EACA,SAAAZ,CAAA,CAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react"),r=()=>(navigator==null?void 0:navigator.connection)||(navigator==null?void 0:navigator.mozConnection)||(navigator==null?void 0:navigator.webkitConnection),d=()=>{const[s,v]=i.useState(()=>{if(typeof navigator>"u")return{online:!1,type:void 0,effectiveType:void 0,saveData:!1,downlink:0,downlinkMax:0,rtt:0};const a=navigator.onLine,e=r();return{online:a,downlink:e==null?void 0:e.downlink,downlinkMax:e==null?void 0:e.downlinkMax,effectiveType:e==null?void 0:e.effectiveType,rtt:e==null?void 0:e.rtt,saveData:e==null?void 0:e.saveData,type:e==null?void 0:e.type}});return i.useEffect(()=>{const a=()=>{const n=navigator.onLine,t=r();v({online:n,downlink:t==null?void 0:t.downlink,downlinkMax:t==null?void 0:t.downlinkMax,effectiveType:t==null?void 0:t.effectiveType,rtt:t==null?void 0:t.rtt,saveData:t==null?void 0:t.saveData,type:t==null?void 0:t.type})};window.addEventListener("online",a,{passive:!0}),window.addEventListener("offline",a,{passive:!0});const e=r();return e&&e.addEventListener("change",a,{passive:!0}),()=>{window.removeEventListener("online",a),window.removeEventListener("offline",a),e&&e.removeEventListener("change",a)}}),s};exports.getConnection=r;exports.useNetwork=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react"),o=()=>navigator?.connection||navigator?.mozConnection||navigator?.webkitConnection,c=()=>{const[a,r]=i.useState(()=>{if(typeof navigator>"u")return{online:!1,type:void 0,effectiveType:void 0,saveData:!1,downlink:0,downlinkMax:0,rtt:0};const n=navigator.onLine,e=o();return{online:n,downlink:e?.downlink,downlinkMax:e?.downlinkMax,effectiveType:e?.effectiveType,rtt:e?.rtt,saveData:e?.saveData,type:e?.type}});return i.useEffect(()=>{const n=()=>{const s=navigator.onLine,t=o();r({online:s,downlink:t?.downlink,downlinkMax:t?.downlinkMax,effectiveType:t?.effectiveType,rtt:t?.rtt,saveData:t?.saveData,type:t?.type})};window.addEventListener("online",n,{passive:!0}),window.addEventListener("offline",n,{passive:!0});const e=o();return e&&e.addEventListener("change",n,{passive:!0}),()=>{window.removeEventListener("online",n),window.removeEventListener("offline",n),e&&e.removeEventListener("change",n)}}),a};exports.getConnection=o;exports.useNetwork=c;
2
2
  //# sourceMappingURL=useNetwork.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useNetwork.cjs","sources":["../../../../src/hooks/useNetwork/useNetwork.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface Connection extends EventTarget {\n readonly downlink: number;\n readonly downlinkMax: number;\n readonly effectiveType: '2g' | '3g' | '4g' | 'slow-2g';\n readonly rtt: number;\n readonly saveData: boolean;\n onChange: (event: Event) => void;\n readonly type:\n | 'bluetooth'\n | 'cellular'\n | 'ethernet'\n | 'mixed'\n | 'none'\n | 'other'\n | 'unknown'\n | 'wifi'\n | 'wimax';\n}\n\ndeclare global {\n interface Navigator {\n readonly connection: Connection;\n readonly mozConnection: Connection;\n readonly webkitConnection: Connection;\n }\n}\n\n/** The type of network connection */\nexport type ConnectionType = Connection['type'];\n/** The effective type of connection */\nexport type ConnectionEffectiveType = Connection['effectiveType'];\n\n/** The use network return type */\nexport interface UseNetworkReturn {\n /** The estimated downlink speed in megabits per seconds */\n downlink?: Connection['downlink'];\n /** The maximum downlink speed, if available */\n downlinkMax?: Connection['downlinkMax'];\n /** The effective type of connection (e.g., '2g', '3g', '4g') */\n effectiveType?: Connection['effectiveType'];\n /** Indicates if the device is currently online */\n online: boolean;\n /** The estimated round-trip time in milliseconds */\n rtt?: Connection['rtt'];\n /** Indicates if the user has enabled data saving mode */\n saveData?: Connection['saveData'];\n /** The type of network connection (e.g., 'wifi', 'cellular') */\n type?: Connection['type'];\n}\n\nexport const getConnection = () =>\n navigator?.connection || navigator?.mozConnection || navigator?.webkitConnection;\n\n/**\n * @name useNetwork\n * @description - Hook to track network status\n * @category Sensors\n *\n * @browserapi navigator.connection https://developer.mozilla.org/en-US/docs/Web/API/Navigator/connection\n *\n * @returns {UseNetworkReturn} An object containing the network status\n *\n * @example\n * const { online, downlink, downlinkMax, effectiveType, rtt, saveData, type } = useNetwork();\n */\nexport const useNetwork = (): UseNetworkReturn => {\n const [value, setValue] = useState(() => {\n if (typeof navigator === 'undefined') {\n return {\n online: false,\n type: undefined,\n effectiveType: undefined,\n saveData: false,\n downlink: 0,\n downlinkMax: 0,\n rtt: 0\n };\n }\n const online = navigator.onLine;\n const connection = getConnection();\n\n return {\n online,\n downlink: connection?.downlink,\n downlinkMax: connection?.downlinkMax,\n effectiveType: connection?.effectiveType,\n rtt: connection?.rtt,\n saveData: connection?.saveData,\n type: connection?.type\n };\n });\n\n useEffect(() => {\n const callback = () => {\n const online = navigator.onLine;\n const connection = getConnection();\n\n setValue({\n online,\n downlink: connection?.downlink,\n downlinkMax: connection?.downlinkMax,\n effectiveType: connection?.effectiveType,\n rtt: connection?.rtt,\n saveData: connection?.saveData,\n type: connection?.type\n });\n };\n window.addEventListener('online', callback, { passive: true });\n window.addEventListener('offline', callback, { passive: true });\n\n const connection = getConnection();\n\n if (connection) {\n connection.addEventListener('change', callback, { passive: true });\n }\n\n return () => {\n window.removeEventListener('online', callback);\n window.removeEventListener('offline', callback);\n\n if (connection) {\n connection.removeEventListener('change', callback);\n }\n };\n });\n\n return value;\n};\n"],"names":["getConnection","useNetwork","value","setValue","useState","online","connection","useEffect","callback"],"mappings":"yGAoDaA,EAAgB,KAC3B,iCAAW,cAAc,iCAAW,iBAAiB,iCAAW,kBAcrDC,EAAa,IAAwB,CAChD,KAAM,CAACC,EAAOC,CAAQ,EAAIC,WAAS,IAAM,CACnC,GAAA,OAAO,UAAc,IAChB,MAAA,CACL,OAAQ,GACR,KAAM,OACN,cAAe,OACf,SAAU,GACV,SAAU,EACV,YAAa,EACb,IAAK,CACP,EAEF,MAAMC,EAAS,UAAU,OACnBC,EAAaN,EAAc,EAE1B,MAAA,CACL,OAAAK,EACA,SAAUC,GAAA,YAAAA,EAAY,SACtB,YAAaA,GAAA,YAAAA,EAAY,YACzB,cAAeA,GAAA,YAAAA,EAAY,cAC3B,IAAKA,GAAA,YAAAA,EAAY,IACjB,SAAUA,GAAA,YAAAA,EAAY,SACtB,KAAMA,GAAA,YAAAA,EAAY,IACpB,CAAA,CACD,EAEDC,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,IAAM,CACrB,MAAMH,EAAS,UAAU,OACnBC,EAAaN,EAAc,EAExBG,EAAA,CACP,OAAAE,EACA,SAAUC,GAAAA,YAAAA,EAAY,SACtB,YAAaA,GAAAA,YAAAA,EAAY,YACzB,cAAeA,GAAAA,YAAAA,EAAY,cAC3B,IAAKA,GAAAA,YAAAA,EAAY,IACjB,SAAUA,GAAAA,YAAAA,EAAY,SACtB,KAAMA,GAAAA,YAAAA,EAAY,IAAA,CACnB,CACH,EACA,OAAO,iBAAiB,SAAUE,EAAU,CAAE,QAAS,GAAM,EAC7D,OAAO,iBAAiB,UAAWA,EAAU,CAAE,QAAS,GAAM,EAE9D,MAAMF,EAAaN,EAAc,EAEjC,OAAIM,GACFA,EAAW,iBAAiB,SAAUE,EAAU,CAAE,QAAS,GAAM,EAG5D,IAAM,CACJ,OAAA,oBAAoB,SAAUA,CAAQ,EACtC,OAAA,oBAAoB,UAAWA,CAAQ,EAE1CF,GACSA,EAAA,oBAAoB,SAAUE,CAAQ,CAErD,CAAA,CACD,EAEMN,CACT"}
1
+ {"version":3,"file":"useNetwork.cjs","sources":["../../../../src/hooks/useNetwork/useNetwork.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport interface Connection extends EventTarget {\n readonly downlink: number;\n readonly downlinkMax: number;\n readonly effectiveType: '2g' | '3g' | '4g' | 'slow-2g';\n readonly rtt: number;\n readonly saveData: boolean;\n onChange: (event: Event) => void;\n readonly type:\n | 'bluetooth'\n | 'cellular'\n | 'ethernet'\n | 'mixed'\n | 'none'\n | 'other'\n | 'unknown'\n | 'wifi'\n | 'wimax';\n}\n\ndeclare global {\n interface Navigator {\n readonly connection: Connection;\n readonly mozConnection: Connection;\n readonly webkitConnection: Connection;\n }\n}\n\n/** The type of network connection */\nexport type ConnectionType = Connection['type'];\n/** The effective type of connection */\nexport type ConnectionEffectiveType = Connection['effectiveType'];\n\n/** The use network return type */\nexport interface UseNetworkReturn {\n /** The estimated downlink speed in megabits per seconds */\n downlink?: Connection['downlink'];\n /** The maximum downlink speed, if available */\n downlinkMax?: Connection['downlinkMax'];\n /** The effective type of connection (e.g., '2g', '3g', '4g') */\n effectiveType?: Connection['effectiveType'];\n /** Indicates if the device is currently online */\n online: boolean;\n /** The estimated round-trip time in milliseconds */\n rtt?: Connection['rtt'];\n /** Indicates if the user has enabled data saving mode */\n saveData?: Connection['saveData'];\n /** The type of network connection (e.g., 'wifi', 'cellular') */\n type?: Connection['type'];\n}\n\nexport const getConnection = () =>\n navigator?.connection || navigator?.mozConnection || navigator?.webkitConnection;\n\n/**\n * @name useNetwork\n * @description - Hook to track network status\n * @category Sensors\n *\n * @browserapi navigator.connection https://developer.mozilla.org/en-US/docs/Web/API/Navigator/connection\n *\n * @returns {UseNetworkReturn} An object containing the network status\n *\n * @example\n * const { online, downlink, downlinkMax, effectiveType, rtt, saveData, type } = useNetwork();\n */\nexport const useNetwork = (): UseNetworkReturn => {\n const [value, setValue] = useState(() => {\n if (typeof navigator === 'undefined') {\n return {\n online: false,\n type: undefined,\n effectiveType: undefined,\n saveData: false,\n downlink: 0,\n downlinkMax: 0,\n rtt: 0\n };\n }\n const online = navigator.onLine;\n const connection = getConnection();\n\n return {\n online,\n downlink: connection?.downlink,\n downlinkMax: connection?.downlinkMax,\n effectiveType: connection?.effectiveType,\n rtt: connection?.rtt,\n saveData: connection?.saveData,\n type: connection?.type\n };\n });\n\n useEffect(() => {\n const callback = () => {\n const online = navigator.onLine;\n const connection = getConnection();\n\n setValue({\n online,\n downlink: connection?.downlink,\n downlinkMax: connection?.downlinkMax,\n effectiveType: connection?.effectiveType,\n rtt: connection?.rtt,\n saveData: connection?.saveData,\n type: connection?.type\n });\n };\n window.addEventListener('online', callback, { passive: true });\n window.addEventListener('offline', callback, { passive: true });\n\n const connection = getConnection();\n\n if (connection) {\n connection.addEventListener('change', callback, { passive: true });\n }\n\n return () => {\n window.removeEventListener('online', callback);\n window.removeEventListener('offline', callback);\n\n if (connection) {\n connection.removeEventListener('change', callback);\n }\n };\n });\n\n return value;\n};\n"],"names":["getConnection","useNetwork","value","setValue","useState","online","connection","useEffect","callback"],"mappings":"yGAoDaA,EAAgB,IAC3B,WAAW,YAAc,WAAW,eAAiB,WAAW,iBAcrDC,EAAa,IAAwB,CAChD,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAS,IAAM,CACvC,GAAI,OAAO,UAAc,IACvB,MAAO,CACL,OAAQ,GACR,KAAM,OACN,cAAe,OACf,SAAU,GACV,SAAU,EACV,YAAa,EACb,IAAK,CAAA,EAGT,MAAMC,EAAS,UAAU,OACnBC,EAAaN,EAAA,EAEnB,MAAO,CACL,OAAAK,EACA,SAAUC,GAAY,SACtB,YAAaA,GAAY,YACzB,cAAeA,GAAY,cAC3B,IAAKA,GAAY,IACjB,SAAUA,GAAY,SACtB,KAAMA,GAAY,IAAA,CACpB,CACD,EAEDC,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,IAAM,CACrB,MAAMH,EAAS,UAAU,OACnBC,EAAaN,EAAA,EAEnBG,EAAS,CACP,OAAAE,EACA,SAAUC,GAAY,SACtB,YAAaA,GAAY,YACzB,cAAeA,GAAY,cAC3B,IAAKA,GAAY,IACjB,SAAUA,GAAY,SACtB,KAAMA,GAAY,IAAA,CACnB,CAAA,EAEH,OAAO,iBAAiB,SAAUE,EAAU,CAAE,QAAS,GAAM,EAC7D,OAAO,iBAAiB,UAAWA,EAAU,CAAE,QAAS,GAAM,EAE9D,MAAMF,EAAaN,EAAA,EAEnB,OAAIM,GACFA,EAAW,iBAAiB,SAAUE,EAAU,CAAE,QAAS,GAAM,EAG5D,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAQ,EAC7C,OAAO,oBAAoB,UAAWA,CAAQ,EAE1CF,GACFA,EAAW,oBAAoB,SAAUE,CAAQ,CACnD,CACF,CACD,EAEMN,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOffsetPagination.cjs","sources":["../../../../src/hooks/useOffsetPagination/useOffsetPagination.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use offset pagination return type */\nexport interface UseOffsetPaginationOptions {\n /** The initial page number */\n initialPage?: number;\n /** The number of items per page */\n pageSize?: number;\n /** The total number of items */\n total?: number;\n /** The callback function to be invoked when page changes */\n onPageChange?: ({ page, pageSize }: { page: number; pageSize: number }) => void;\n /** The callback function to be invoked when page count changes */\n onPageCountChange?: ({ page, pageSize }: { page: number; pageSize: number }) => void;\n /** The callback function to be invoked when page size changes */\n onPageSizeChange?: ({ page, pageSize }: { page: number; pageSize: number }) => void;\n}\n\n/** The use offset pagination return type */\nexport interface UseOffsetPaginationReturn {\n /** The number of items per page */\n currentPageSize: number;\n /** Whether the current page is the first page */\n isFirstPage: boolean;\n /** Whether the current page is the last page */\n isLastPage: boolean;\n /** The current page number */\n page: number;\n /** The total number of pages */\n pageCount: number;\n /** The callback function to go to the next page */\n next: () => void;\n /** The callback function to go to the previous page */\n prev: () => void;\n /** The callback function to set the current page */\n set: (page: number) => void;\n}\n\n/**\n * @name useOffsetPagination\n * @description - Hook that defines the logic when pagination\n * @category Utilities\n *\n * @param {UseOffsetPaginationOptions} options - The options for the hook\n * @param {number} [options.total] - The total number of items\n * @param {number} [options.pageSize] - The number of items per page\n * @param {number} [options.initialPage] - The current page\n * @param {({ page, pageSize }: { page: number; pageSize: number }) => void} [options.onPageChange] - The callback function to be invoked when page changes\n * @param {({ page, pageSize }: { page: number; pageSize: number }) => void} [options.onPageCountChange] - The callback function to be invoked when page count changes\n * @param {({ page, pageSize }: { page: number; pageSize: number }) => void} [options.onPageSizeChange] - The callback function to be invoked when page size changes\n * @returns {UseOffsetPaginationReturn} - The state of the hook\n *\n * @example\n * const { currentPage, currentPageSize, pageCount, isFirstPage, isLastPage, prev, next } = useOffsetPagination({\n * total: 100,\n * pageSize: 10,\n * page: 1,\n * onPageChange: (page) => {},\n * onPageCountChange: (pageCount) => {},\n * onPageSizeChange: (pageSize) => {}\n * });\n */\nexport const useOffsetPagination = ({\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n initialPage = 1,\n onPageChange = () => {},\n onPageCountChange = () => {},\n onPageSizeChange = () => {}\n}: UseOffsetPaginationOptions = {}): UseOffsetPaginationReturn => {\n const [page, setPage] = useState(initialPage);\n\n const onPageChangeRef = useRef(onPageChange);\n const onPageCountChangeRef = useRef(onPageCountChange);\n const onPageSizeChangeRef = useRef(onPageSizeChange);\n\n onPageChangeRef.current = onPageChange;\n onPageCountChangeRef.current = onPageCountChange;\n onPageSizeChangeRef.current = onPageSizeChange;\n\n const pageCount = Math.max(1, Math.ceil(total / pageSize));\n\n const isFirstPage = page === 1;\n const isLastPage = page === pageCount;\n\n const next = () => {\n if (isLastPage) return onPageChange({ page: pageCount, pageSize });\n\n setPage((prevPage) => {\n const page = prevPage + 1;\n onPageChange({ page, pageSize });\n return page;\n });\n };\n\n const prev = () => {\n if (isFirstPage) return onPageChange({ page: 1, pageSize });\n\n setPage((prevPage) => {\n const page = prevPage - 1;\n onPageChange({ page, pageSize });\n return page;\n });\n };\n\n const set = (page: number) => {\n setPage(page);\n onPageChange({ page, pageSize });\n };\n\n useEffect(() => {\n onPageCountChangeRef.current({ page, pageSize });\n }, [pageCount]);\n\n useEffect(() => {\n onPageSizeChangeRef.current({ page, pageSize });\n }, [pageSize]);\n\n return {\n page,\n set,\n currentPageSize: pageSize,\n isFirstPage,\n isLastPage,\n pageCount,\n next,\n prev\n };\n};\n"],"names":["useOffsetPagination","total","pageSize","initialPage","onPageChange","onPageCountChange","onPageSizeChange","page","setPage","useState","onPageChangeRef","useRef","onPageCountChangeRef","onPageSizeChangeRef","pageCount","isFirstPage","isLastPage","next","prevPage","prev","set","useEffect"],"mappings":"yGA8DaA,EAAsB,CAAC,CAClC,MAAAC,EAAQ,OAAO,kBACf,SAAAC,EAAW,GACX,YAAAC,EAAc,EACd,aAAAC,EAAe,IAAM,CAAC,EACtB,kBAAAC,EAAoB,IAAM,CAAC,EAC3B,iBAAAC,EAAmB,IAAM,CAAA,CAC3B,EAAgC,KAAkC,CAChE,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAASN,CAAW,EAEtCO,EAAkBC,SAAOP,CAAY,EACrCQ,EAAuBD,SAAON,CAAiB,EAC/CQ,EAAsBF,SAAOL,CAAgB,EAEnDI,EAAgB,QAAUN,EAC1BQ,EAAqB,QAAUP,EAC/BQ,EAAoB,QAAUP,EAExB,MAAAQ,EAAY,KAAK,IAAI,EAAG,KAAK,KAAKb,EAAQC,CAAQ,CAAC,EAEnDa,EAAcR,IAAS,EACvBS,EAAaT,IAASO,EAEtBG,EAAO,IAAM,CACjB,GAAID,EAAmB,OAAAZ,EAAa,CAAE,KAAMU,EAAW,SAAAZ,EAAU,EAEjEM,EAASU,GAAa,CACpB,MAAMX,EAAOW,EAAW,EACxB,OAAAd,EAAa,CAAE,KAAAG,EAAM,SAAAL,CAAA,CAAU,EACxBK,CAAA,CACR,CACH,EAEMY,EAAO,IAAM,CACjB,GAAIJ,EAAoB,OAAAX,EAAa,CAAE,KAAM,EAAG,SAAAF,EAAU,EAE1DM,EAASU,GAAa,CACpB,MAAMX,EAAOW,EAAW,EACxB,OAAAd,EAAa,CAAE,KAAAG,EAAM,SAAAL,CAAA,CAAU,EACxBK,CAAA,CACR,CACH,EAEMa,EAAOb,GAAiB,CAC5BC,EAAQD,CAAI,EACZH,EAAa,CAAE,KAAAG,EAAM,SAAAL,CAAA,CAAU,CACjC,EAEAmB,OAAAA,EAAAA,UAAU,IAAM,CACdT,EAAqB,QAAQ,CAAE,KAAAL,EAAM,SAAAL,CAAA,CAAU,CAAA,EAC9C,CAACY,CAAS,CAAC,EAEdO,EAAAA,UAAU,IAAM,CACdR,EAAoB,QAAQ,CAAE,KAAAN,EAAM,SAAAL,CAAA,CAAU,CAAA,EAC7C,CAACA,CAAQ,CAAC,EAEN,CACL,KAAAK,EACA,IAAAa,EACA,gBAAiBlB,EACjB,YAAAa,EACA,WAAAC,EACA,UAAAF,EACA,KAAAG,EACA,KAAAE,CACF,CACF"}
1
+ {"version":3,"file":"useOffsetPagination.cjs","sources":["../../../../src/hooks/useOffsetPagination/useOffsetPagination.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use offset pagination return type */\nexport interface UseOffsetPaginationOptions {\n /** The initial page number */\n initialPage?: number;\n /** The number of items per page */\n pageSize?: number;\n /** The total number of items */\n total?: number;\n /** The callback function to be invoked when page changes */\n onPageChange?: ({ page, pageSize }: { page: number; pageSize: number }) => void;\n /** The callback function to be invoked when page count changes */\n onPageCountChange?: ({ page, pageSize }: { page: number; pageSize: number }) => void;\n /** The callback function to be invoked when page size changes */\n onPageSizeChange?: ({ page, pageSize }: { page: number; pageSize: number }) => void;\n}\n\n/** The use offset pagination return type */\nexport interface UseOffsetPaginationReturn {\n /** The number of items per page */\n currentPageSize: number;\n /** Whether the current page is the first page */\n isFirstPage: boolean;\n /** Whether the current page is the last page */\n isLastPage: boolean;\n /** The current page number */\n page: number;\n /** The total number of pages */\n pageCount: number;\n /** The callback function to go to the next page */\n next: () => void;\n /** The callback function to go to the previous page */\n prev: () => void;\n /** The callback function to set the current page */\n set: (page: number) => void;\n}\n\n/**\n * @name useOffsetPagination\n * @description - Hook that defines the logic when pagination\n * @category Utilities\n *\n * @param {UseOffsetPaginationOptions} options - The options for the hook\n * @param {number} [options.total] - The total number of items\n * @param {number} [options.pageSize] - The number of items per page\n * @param {number} [options.initialPage] - The current page\n * @param {({ page, pageSize }: { page: number; pageSize: number }) => void} [options.onPageChange] - The callback function to be invoked when page changes\n * @param {({ page, pageSize }: { page: number; pageSize: number }) => void} [options.onPageCountChange] - The callback function to be invoked when page count changes\n * @param {({ page, pageSize }: { page: number; pageSize: number }) => void} [options.onPageSizeChange] - The callback function to be invoked when page size changes\n * @returns {UseOffsetPaginationReturn} - The state of the hook\n *\n * @example\n * const { currentPage, currentPageSize, pageCount, isFirstPage, isLastPage, prev, next } = useOffsetPagination({\n * total: 100,\n * pageSize: 10,\n * page: 1,\n * onPageChange: (page) => {},\n * onPageCountChange: (pageCount) => {},\n * onPageSizeChange: (pageSize) => {}\n * });\n */\nexport const useOffsetPagination = ({\n total = Number.POSITIVE_INFINITY,\n pageSize = 10,\n initialPage = 1,\n onPageChange = () => {},\n onPageCountChange = () => {},\n onPageSizeChange = () => {}\n}: UseOffsetPaginationOptions = {}): UseOffsetPaginationReturn => {\n const [page, setPage] = useState(initialPage);\n\n const onPageChangeRef = useRef(onPageChange);\n const onPageCountChangeRef = useRef(onPageCountChange);\n const onPageSizeChangeRef = useRef(onPageSizeChange);\n\n onPageChangeRef.current = onPageChange;\n onPageCountChangeRef.current = onPageCountChange;\n onPageSizeChangeRef.current = onPageSizeChange;\n\n const pageCount = Math.max(1, Math.ceil(total / pageSize));\n\n const isFirstPage = page === 1;\n const isLastPage = page === pageCount;\n\n const next = () => {\n if (isLastPage) return onPageChange({ page: pageCount, pageSize });\n\n setPage((prevPage) => {\n const page = prevPage + 1;\n onPageChange({ page, pageSize });\n return page;\n });\n };\n\n const prev = () => {\n if (isFirstPage) return onPageChange({ page: 1, pageSize });\n\n setPage((prevPage) => {\n const page = prevPage - 1;\n onPageChange({ page, pageSize });\n return page;\n });\n };\n\n const set = (page: number) => {\n setPage(page);\n onPageChange({ page, pageSize });\n };\n\n useEffect(() => {\n onPageCountChangeRef.current({ page, pageSize });\n }, [pageCount]);\n\n useEffect(() => {\n onPageSizeChangeRef.current({ page, pageSize });\n }, [pageSize]);\n\n return {\n page,\n set,\n currentPageSize: pageSize,\n isFirstPage,\n isLastPage,\n pageCount,\n next,\n prev\n };\n};\n"],"names":["useOffsetPagination","total","pageSize","initialPage","onPageChange","onPageCountChange","onPageSizeChange","page","setPage","useState","onPageChangeRef","useRef","onPageCountChangeRef","onPageSizeChangeRef","pageCount","isFirstPage","isLastPage","next","prevPage","prev","set","useEffect"],"mappings":"yGA8DaA,EAAsB,CAAC,CAClC,MAAAC,EAAQ,OAAO,kBACf,SAAAC,EAAW,GACX,YAAAC,EAAc,EACd,aAAAC,EAAe,IAAM,CAAA,EACrB,kBAAAC,EAAoB,IAAM,CAAA,EAC1B,iBAAAC,EAAmB,IAAM,CAAA,CAC3B,EAAgC,KAAkC,CAChE,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAASN,CAAW,EAEtCO,EAAkBC,EAAAA,OAAOP,CAAY,EACrCQ,EAAuBD,EAAAA,OAAON,CAAiB,EAC/CQ,EAAsBF,EAAAA,OAAOL,CAAgB,EAEnDI,EAAgB,QAAUN,EAC1BQ,EAAqB,QAAUP,EAC/BQ,EAAoB,QAAUP,EAE9B,MAAMQ,EAAY,KAAK,IAAI,EAAG,KAAK,KAAKb,EAAQC,CAAQ,CAAC,EAEnDa,EAAcR,IAAS,EACvBS,EAAaT,IAASO,EAEtBG,EAAO,IAAM,CACjB,GAAID,EAAY,OAAOZ,EAAa,CAAE,KAAMU,EAAW,SAAAZ,EAAU,EAEjEM,EAASU,GAAa,CACpB,MAAMX,EAAOW,EAAW,EACxB,OAAAd,EAAa,CAAE,KAAAG,EAAM,SAAAL,CAAA,CAAU,EACxBK,CAAA,CACR,CAAA,EAGGY,EAAO,IAAM,CACjB,GAAIJ,EAAa,OAAOX,EAAa,CAAE,KAAM,EAAG,SAAAF,EAAU,EAE1DM,EAASU,GAAa,CACpB,MAAMX,EAAOW,EAAW,EACxB,OAAAd,EAAa,CAAE,KAAAG,EAAM,SAAAL,CAAA,CAAU,EACxBK,CAAA,CACR,CAAA,EAGGa,EAAOb,GAAiB,CAC5BC,EAAQD,CAAI,EACZH,EAAa,CAAE,KAAAG,EAAM,SAAAL,CAAA,CAAU,CAAA,EAGjCmB,OAAAA,EAAAA,UAAU,IAAM,CACdT,EAAqB,QAAQ,CAAE,KAAAL,EAAM,SAAAL,CAAA,CAAU,CAAA,EAC9C,CAACY,CAAS,CAAC,EAEdO,EAAAA,UAAU,IAAM,CACdR,EAAoB,QAAQ,CAAE,KAAAN,EAAM,SAAAL,CAAA,CAAU,CAAA,EAC7C,CAACA,CAAQ,CAAC,EAEN,CACL,KAAAK,EACA,IAAAa,EACA,gBAAiBlB,EACjB,YAAAa,EACA,WAAAC,EACA,UAAAF,EACA,KAAAG,EACA,KAAAE,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOnce.cjs","sources":["../../../../src/hooks/useOnce/useOnce.ts"],"sourcesContent":["import type { EffectCallback } from 'react';\n\nimport { useEffect, useRef } from 'react';\n\n/**\n * @name useEffectOnce\n * @description - Hook that runs an effect only once. Please do not use it in production code!\n * @category Humor\n *\n * @warning - This hook will run effect only once even in strict mode. Please do not use it in production code!\n *\n * @param {EffectCallback} effect The effect to run\n *\n * @example\n * useOnce(() => console.log('effect once'));\n */\nexport function useOnce(effect: EffectCallback) {\n const cleanupRef = useRef<ReturnType<EffectCallback>>(undefined);\n const hasRunRef = useRef(false);\n const hasRenderedAfterRun = useRef(false);\n\n if (hasRunRef.current) {\n hasRenderedAfterRun.current = true;\n }\n\n useEffect(() => {\n if (hasRunRef.current) return;\n\n hasRunRef.current = true;\n cleanupRef.current = effect();\n\n return () => {\n if (!hasRenderedAfterRun.current) return;\n\n if (typeof cleanupRef.current === 'function') {\n cleanupRef.current();\n }\n };\n }, []);\n}\n"],"names":["useOnce","effect","cleanupRef","useRef","hasRunRef","hasRenderedAfterRun","useEffect"],"mappings":"yGAgBO,SAASA,EAAQC,EAAwB,CACxC,MAAAC,EAAaC,SAAmC,MAAS,EACzDC,EAAYD,SAAO,EAAK,EACxBE,EAAsBF,SAAO,EAAK,EAEpCC,EAAU,UACZC,EAAoB,QAAU,IAGhCC,EAAAA,UAAU,IAAM,CACd,GAAI,CAAAF,EAAU,QAEd,OAAAA,EAAU,QAAU,GACpBF,EAAW,QAAUD,EAAO,EAErB,IAAM,CACNI,EAAoB,SAErB,OAAOH,EAAW,SAAY,YAChCA,EAAW,QAAQ,CAEvB,CACF,EAAG,EAAE,CACP"}
1
+ {"version":3,"file":"useOnce.cjs","sources":["../../../../src/hooks/useOnce/useOnce.ts"],"sourcesContent":["import type { EffectCallback } from 'react';\n\nimport { useEffect, useRef } from 'react';\n\n/**\n * @name useEffectOnce\n * @description - Hook that runs an effect only once. Please do not use it in production code!\n * @category Humor\n *\n * @warning - This hook will run effect only once even in strict mode. Please do not use it in production code!\n *\n * @param {EffectCallback} effect The effect to run\n *\n * @example\n * useOnce(() => console.log('effect once'));\n */\nexport function useOnce(effect: EffectCallback) {\n const cleanupRef = useRef<ReturnType<EffectCallback>>(undefined);\n const hasRunRef = useRef(false);\n const hasRenderedAfterRun = useRef(false);\n\n if (hasRunRef.current) {\n hasRenderedAfterRun.current = true;\n }\n\n useEffect(() => {\n if (hasRunRef.current) return;\n\n hasRunRef.current = true;\n cleanupRef.current = effect();\n\n return () => {\n if (!hasRenderedAfterRun.current) return;\n\n if (typeof cleanupRef.current === 'function') {\n cleanupRef.current();\n }\n };\n }, []);\n}\n"],"names":["useOnce","effect","cleanupRef","useRef","hasRunRef","hasRenderedAfterRun","useEffect"],"mappings":"yGAgBO,SAASA,EAAQC,EAAwB,CAC9C,MAAMC,EAAaC,EAAAA,OAAmC,MAAS,EACzDC,EAAYD,EAAAA,OAAO,EAAK,EACxBE,EAAsBF,EAAAA,OAAO,EAAK,EAEpCC,EAAU,UACZC,EAAoB,QAAU,IAGhCC,EAAAA,UAAU,IAAM,CACd,GAAI,CAAAF,EAAU,QAEd,OAAAA,EAAU,QAAU,GACpBF,EAAW,QAAUD,EAAA,EAEd,IAAM,CACNI,EAAoB,SAErB,OAAOH,EAAW,SAAY,YAChCA,EAAW,QAAA,CACb,CACF,EACC,EAAE,CACP"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOnline.cjs","sources":["../../../../src/hooks/useOnline/useOnline.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\nconst getSnapshot = () => navigator.onLine;\nconst getServerSnapshot = () => false;\nconst subscribe = (callback: () => void) => {\n window.addEventListener('online', callback);\n window.addEventListener('offline', callback);\n return () => {\n window.removeEventListener('online', callback);\n window.removeEventListener('offline', callback);\n };\n};\n\n/**\n * @name useOnline\n * @description - Hook that manages if the user is online\n * @category Sensors\n *\n * @browserapi navigator.onLine https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLine\n *\n * @returns {boolean} A boolean indicating if the user is online\n *\n * @example\n * const online = useOnline();\n */\nexport const useOnline = () => useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n"],"names":["getSnapshot","getServerSnapshot","subscribe","callback","useOnline","useSyncExternalStore"],"mappings":"yGAEMA,EAAc,IAAM,UAAU,OAC9BC,EAAoB,IAAM,GAC1BC,EAAaC,IACV,OAAA,iBAAiB,SAAUA,CAAQ,EACnC,OAAA,iBAAiB,UAAWA,CAAQ,EACpC,IAAM,CACJ,OAAA,oBAAoB,SAAUA,CAAQ,EACtC,OAAA,oBAAoB,UAAWA,CAAQ,CAChD,GAeWC,EAAY,IAAMC,EAAAA,qBAAqBH,EAAWF,EAAaC,CAAiB"}
1
+ {"version":3,"file":"useOnline.cjs","sources":["../../../../src/hooks/useOnline/useOnline.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\nconst getSnapshot = () => navigator.onLine;\nconst getServerSnapshot = () => false;\nconst subscribe = (callback: () => void) => {\n window.addEventListener('online', callback);\n window.addEventListener('offline', callback);\n return () => {\n window.removeEventListener('online', callback);\n window.removeEventListener('offline', callback);\n };\n};\n\n/**\n * @name useOnline\n * @description - Hook that manages if the user is online\n * @category Sensors\n *\n * @browserapi navigator.onLine https://developer.mozilla.org/en-US/docs/Web/API/Navigator/onLine\n *\n * @returns {boolean} A boolean indicating if the user is online\n *\n * @example\n * const online = useOnline();\n */\nexport const useOnline = () => useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n"],"names":["getSnapshot","getServerSnapshot","subscribe","callback","useOnline","useSyncExternalStore"],"mappings":"yGAEMA,EAAc,IAAM,UAAU,OAC9BC,EAAoB,IAAM,GAC1BC,EAAaC,IACjB,OAAO,iBAAiB,SAAUA,CAAQ,EAC1C,OAAO,iBAAiB,UAAWA,CAAQ,EACpC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAQ,EAC7C,OAAO,oBAAoB,UAAWA,CAAQ,CAAA,GAgBrCC,EAAY,IAAMC,EAAAA,qBAAqBH,EAAWF,EAAaC,CAAiB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOperatingSystem.cjs","sources":["../../../../src/hooks/useOperatingSystem/useOperatingSystem.ts"],"sourcesContent":["import { useState } from 'react';\n\n/** The operating system type */\nexport type OperatingSystem = 'android' | 'ios' | 'linux' | 'macos' | 'undetermined' | 'windows';\n\nexport const getOperatingSystem = (): OperatingSystem => {\n if (typeof window === 'undefined') return 'undetermined';\n\n const { userAgent } = window.navigator;\n\n if (/Macintosh|MacIntel|MacPPC|Mac68K/i.test(userAgent)) return 'macos';\n if (/iPhone|iPad|iPod/i.test(userAgent)) return 'ios';\n if (/Win32|Win64|Windows|WinCE/i.test(userAgent)) return 'windows';\n if (/Android/i.test(userAgent)) return 'android';\n if (/Linux/i.test(userAgent)) return 'linux';\n\n return 'undetermined';\n};\n\n/**\n * @name useOperatingSystem\n * @description - Hook that returns the operating system of the current browser\n * @category Browser\n *\n * @returns {OperatingSystem} The operating system\n *\n * @example\n * const operatingSystem = useOperatingSystem();\n */\nexport const useOperatingSystem = () => {\n const [osOperatingSystem] = useState<OperatingSystem>(getOperatingSystem());\n return osOperatingSystem;\n};\n"],"names":["getOperatingSystem","userAgent","useOperatingSystem","osOperatingSystem","useState"],"mappings":"yGAKaA,EAAqB,IAAuB,CACnD,GAAA,OAAO,OAAW,IAAoB,MAAA,eAEpC,KAAA,CAAE,UAAAC,GAAc,OAAO,UAE7B,MAAI,oCAAoC,KAAKA,CAAS,EAAU,QAC5D,oBAAoB,KAAKA,CAAS,EAAU,MAC5C,6BAA6B,KAAKA,CAAS,EAAU,UACrD,WAAW,KAAKA,CAAS,EAAU,UACnC,SAAS,KAAKA,CAAS,EAAU,QAE9B,cACT,EAYaC,EAAqB,IAAM,CACtC,KAAM,CAACC,CAAiB,EAAIC,EAAA,SAA0BJ,GAAoB,EACnE,OAAAG,CACT"}
1
+ {"version":3,"file":"useOperatingSystem.cjs","sources":["../../../../src/hooks/useOperatingSystem/useOperatingSystem.ts"],"sourcesContent":["import { useState } from 'react';\n\n/** The operating system type */\nexport type OperatingSystem = 'android' | 'ios' | 'linux' | 'macos' | 'undetermined' | 'windows';\n\nexport const getOperatingSystem = (): OperatingSystem => {\n if (typeof window === 'undefined') return 'undetermined';\n\n const { userAgent } = window.navigator;\n\n if (/Macintosh|MacIntel|MacPPC|Mac68K/i.test(userAgent)) return 'macos';\n if (/iPhone|iPad|iPod/i.test(userAgent)) return 'ios';\n if (/Win32|Win64|Windows|WinCE/i.test(userAgent)) return 'windows';\n if (/Android/i.test(userAgent)) return 'android';\n if (/Linux/i.test(userAgent)) return 'linux';\n\n return 'undetermined';\n};\n\n/**\n * @name useOperatingSystem\n * @description - Hook that returns the operating system of the current browser\n * @category Browser\n *\n * @returns {OperatingSystem} The operating system\n *\n * @example\n * const operatingSystem = useOperatingSystem();\n */\nexport const useOperatingSystem = () => {\n const [osOperatingSystem] = useState<OperatingSystem>(getOperatingSystem());\n return osOperatingSystem;\n};\n"],"names":["getOperatingSystem","userAgent","useOperatingSystem","osOperatingSystem","useState"],"mappings":"yGAKaA,EAAqB,IAAuB,CACvD,GAAI,OAAO,OAAW,IAAa,MAAO,eAE1C,KAAM,CAAE,UAAAC,GAAc,OAAO,UAE7B,MAAI,oCAAoC,KAAKA,CAAS,EAAU,QAC5D,oBAAoB,KAAKA,CAAS,EAAU,MAC5C,6BAA6B,KAAKA,CAAS,EAAU,UACrD,WAAW,KAAKA,CAAS,EAAU,UACnC,SAAS,KAAKA,CAAS,EAAU,QAE9B,cACT,EAYaC,EAAqB,IAAM,CACtC,KAAM,CAACC,CAAiB,EAAIC,EAAAA,SAA0BJ,GAAoB,EAC1E,OAAOG,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOptimistic.cjs","sources":["../../../../src/hooks/useOptimistic/useOptimistic.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\n\nexport type UseOptimisticReturn<State> = [\n State,\n (optimisticValue: State, promise: Promise<any>) => void\n];\n\n/**\n * @name useOptimistic\n * @description - Hook that allows get optimistic value before its update\n * @category Utilities\n *\n * @template State The type of the state\n * @param {State} state The value to be returned initially and whenever no action is pending\n * @param {(currentState: State, optimisticValue: State) => State} update A pure function that takes the current state and the optimistic value passed to updateOptimistic and returns the resulting optimistic state\n * @returns {UseOptimisticReturn<State>} The resulting optimistic state, and the function to update it\n *\n * @example\n * const [optimisticValue, updateOptimistic] = useOptimistic<number>(count, (currentState, optimisticValue) => currentState + optimisticValue);\n */\nexport const useOptimistic = <State, OptimisticState = State>(\n externalState: State,\n update: (currentState: State, optimisticState: OptimisticState) => State\n) => {\n const [state, setState] = useState<State>(externalState);\n const internalUpdateRef = useRef(update);\n internalUpdateRef.current = update;\n\n const [promised, setPromised] = useState(false);\n\n useDidUpdate(() => {\n if (!promised) return;\n setState(externalState);\n setPromised(false);\n }, [promised]);\n\n const updateState = (optimisticValue: OptimisticState, promise: Promise<any>) => {\n setState((currentState) => internalUpdateRef.current(currentState, optimisticValue));\n return promise.finally(() => setPromised(true));\n };\n\n return [state, updateState] as const;\n};\n"],"names":["useOptimistic","externalState","update","state","setState","useState","internalUpdateRef","useRef","promised","setPromised","useDidUpdate","optimisticValue","promise","currentState"],"mappings":"uJAsBaA,EAAgB,CAC3BC,EACAC,IACG,CACH,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAgBJ,CAAa,EACjDK,EAAoBC,SAAOL,CAAM,EACvCI,EAAkB,QAAUJ,EAE5B,KAAM,CAACM,EAAUC,CAAW,EAAIJ,EAAAA,SAAS,EAAK,EAE9CK,OAAAA,EAAAA,aAAa,IAAM,CACZF,IACLJ,EAASH,CAAa,EACtBQ,EAAY,EAAK,EAAA,EAChB,CAACD,CAAQ,CAAC,EAON,CAACL,EALY,CAACQ,EAAkCC,KACrDR,EAAUS,GAAiBP,EAAkB,QAAQO,EAAcF,CAAe,CAAC,EAC5EC,EAAQ,QAAQ,IAAMH,EAAY,EAAI,CAAC,EAGtB,CAC5B"}
1
+ {"version":3,"file":"useOptimistic.cjs","sources":["../../../../src/hooks/useOptimistic/useOptimistic.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\n\nexport type UseOptimisticReturn<State> = [\n State,\n (optimisticValue: State, promise: Promise<any>) => void\n];\n\n/**\n * @name useOptimistic\n * @description - Hook that allows get optimistic value before its update\n * @category Utilities\n *\n * @template State The type of the state\n * @param {State} state The value to be returned initially and whenever no action is pending\n * @param {(currentState: State, optimisticValue: State) => State} update A pure function that takes the current state and the optimistic value passed to updateOptimistic and returns the resulting optimistic state\n * @returns {UseOptimisticReturn<State>} The resulting optimistic state, and the function to update it\n *\n * @example\n * const [optimisticValue, updateOptimistic] = useOptimistic<number>(count, (currentState, optimisticValue) => currentState + optimisticValue);\n */\nexport const useOptimistic = <State, OptimisticState = State>(\n externalState: State,\n update: (currentState: State, optimisticState: OptimisticState) => State\n) => {\n const [state, setState] = useState<State>(externalState);\n const internalUpdateRef = useRef(update);\n internalUpdateRef.current = update;\n\n const [promised, setPromised] = useState(false);\n\n useDidUpdate(() => {\n if (!promised) return;\n setState(externalState);\n setPromised(false);\n }, [promised]);\n\n const updateState = (optimisticValue: OptimisticState, promise: Promise<any>) => {\n setState((currentState) => internalUpdateRef.current(currentState, optimisticValue));\n return promise.finally(() => setPromised(true));\n };\n\n return [state, updateState] as const;\n};\n"],"names":["useOptimistic","externalState","update","state","setState","useState","internalUpdateRef","useRef","promised","setPromised","useDidUpdate","optimisticValue","promise","currentState"],"mappings":"uJAsBaA,EAAgB,CAC3BC,EACAC,IACG,CACH,KAAM,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAAgBJ,CAAa,EACjDK,EAAoBC,EAAAA,OAAOL,CAAM,EACvCI,EAAkB,QAAUJ,EAE5B,KAAM,CAACM,EAAUC,CAAW,EAAIJ,EAAAA,SAAS,EAAK,EAE9CK,OAAAA,EAAAA,aAAa,IAAM,CACZF,IACLJ,EAASH,CAAa,EACtBQ,EAAY,EAAK,EAAA,EAChB,CAACD,CAAQ,CAAC,EAON,CAACL,EALY,CAACQ,EAAkCC,KACrDR,EAAUS,GAAiBP,EAAkB,QAAQO,EAAcF,CAAe,CAAC,EAC5EC,EAAQ,QAAQ,IAAMH,EAAY,EAAI,CAAC,EAGtB,CAC5B"}
@@ -1 +1 @@
1
- {"version":3,"file":"useOrientation.cjs","sources":["../../../../src/hooks/useOrientation/useOrientation.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/** The use orientation return type */\nexport interface UseOrientationReturn {\n /** The current screen orientation angle */\n angle: number;\n /** The screen orientation type */\n type: OrientationType;\n}\n\n/**\n * @name useOrientation\n * @description - Hook that returns the current screen orientation\n * @category Browser\n *\n * @browserapi window.screen.orientation https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation\n *\n * @returns {UseOrientationReturn} An object containing the current screen orientation\n *\n * @example\n * const { angle, type } = useOrientation();\n */\nexport const useOrientation = (): UseOrientationReturn => {\n const [orientation, setOrientation] = useState<{\n angle: number;\n type: OrientationType;\n }>({ angle: 0, type: 'landscape-primary' });\n\n useEffect(() => {\n const onChange = () => setOrientation(window.screen.orientation);\n window.screen.orientation.addEventListener('change', onChange);\n return () => {\n window.screen.orientation.removeEventListener('change', onChange);\n };\n }, []);\n\n return orientation;\n};\n"],"names":["useOrientation","orientation","setOrientation","useState","useEffect","onChange"],"mappings":"yGAsBaA,EAAiB,IAA4B,CAClD,KAAA,CAACC,EAAaC,CAAc,EAAIC,EAAA,SAGnC,CAAE,MAAO,EAAG,KAAM,oBAAqB,EAE1CC,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,IAAMH,EAAe,OAAO,OAAO,WAAW,EAC/D,cAAO,OAAO,YAAY,iBAAiB,SAAUG,CAAQ,EACtD,IAAM,CACX,OAAO,OAAO,YAAY,oBAAoB,SAAUA,CAAQ,CAClE,CACF,EAAG,EAAE,EAEEJ,CACT"}
1
+ {"version":3,"file":"useOrientation.cjs","sources":["../../../../src/hooks/useOrientation/useOrientation.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/** The use orientation return type */\nexport interface UseOrientationReturn {\n /** The current screen orientation angle */\n angle: number;\n /** The screen orientation type */\n type: OrientationType;\n}\n\n/**\n * @name useOrientation\n * @description - Hook that returns the current screen orientation\n * @category Browser\n *\n * @browserapi window.screen.orientation https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation\n *\n * @returns {UseOrientationReturn} An object containing the current screen orientation\n *\n * @example\n * const { angle, type } = useOrientation();\n */\nexport const useOrientation = (): UseOrientationReturn => {\n const [orientation, setOrientation] = useState<{\n angle: number;\n type: OrientationType;\n }>({ angle: 0, type: 'landscape-primary' });\n\n useEffect(() => {\n const onChange = () => setOrientation(window.screen.orientation);\n window.screen.orientation.addEventListener('change', onChange);\n return () => {\n window.screen.orientation.removeEventListener('change', onChange);\n };\n }, []);\n\n return orientation;\n};\n"],"names":["useOrientation","orientation","setOrientation","useState","useEffect","onChange"],"mappings":"yGAsBaA,EAAiB,IAA4B,CACxD,KAAM,CAACC,EAAaC,CAAc,EAAIC,EAAAA,SAGnC,CAAE,MAAO,EAAG,KAAM,oBAAqB,EAE1CC,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAW,IAAMH,EAAe,OAAO,OAAO,WAAW,EAC/D,cAAO,OAAO,YAAY,iBAAiB,SAAUG,CAAQ,EACtD,IAAM,CACX,OAAO,OAAO,YAAY,oBAAoB,SAAUA,CAAQ,CAAA,CAClE,EACC,EAAE,EAEEJ,CACT"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const l=require("react"),d=(...t)=>{var i,a;const n=typeof t[0]=="function"?t[0]:(i=t[0])==null?void 0:i.onSuccess,o=typeof t[0]=="function"?(a=t[0])==null?void 0:a.onError:void 0,c=typeof navigator<"u"&&"OTPCredential"in window,[u,s]=l.useState(!1),e=l.useRef(new AbortController);return{supported:c,abort:()=>{e.current.abort(),e.current=new AbortController,e.current.signal.onabort=()=>s(!0)},aborted:u,get:async()=>{if(c){e.current=new AbortController;try{const r=await navigator.credentials.get({otp:{transport:["sms"]},signal:e.current.signal});return n==null||n(r),s(!1),r}catch(r){o==null||o(r)}}}}};exports.useOtpCredential=d;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),a=(...t)=>{const s=typeof t[0]=="function"?t[0]:t[0]?.onSuccess,u=typeof t[0]=="function"?t[0]?.onError:void 0,n=typeof navigator<"u"&&"OTPCredential"in window,[i,o]=c.useState(!1),e=c.useRef(new AbortController);return{supported:n,abort:()=>{e.current.abort(),e.current=new AbortController,e.current.signal.onabort=()=>o(!0)},aborted:i,get:async()=>{if(n){e.current=new AbortController;try{const r=await navigator.credentials.get({otp:{transport:["sms"]},signal:e.current.signal});return s?.(r),o(!1),r}catch(r){u?.(r)}}}}};exports.useOtpCredential=a;
2
2
  //# sourceMappingURL=useOtpCredential.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useOtpCredential.cjs","sources":["../../../../src/hooks/useOtpCredential/useOtpCredential.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\ndeclare global {\n interface OTPOptions {\n readonly transport: string[];\n }\n\n interface CredentialRequestOptions {\n readonly otp: OTPOptions;\n }\n\n interface Credential {\n readonly code: string;\n }\n}\n\n/* The use otp credential callback type */\nexport type UseOtpCredentialCallback = (otp: Credential | null) => void;\n\n/* The use otp credential options type */\nexport interface UseOtpCredentialParams {\n /* The callback function to be invoked on error */\n onError: (error: any) => void;\n /* The callback function to be invoked on success */\n onSuccess: (credential: Credential | null) => void;\n}\n\n/* The use otp credential return type */\nexport interface UseOtpCredentialReturn {\n /* The abort function */\n abort: AbortController['abort'];\n /* The aborted state of the query */\n aborted: boolean;\n /* The supported state of the otp credential */\n supported: boolean;\n /* The get otp credential function */\n get: () => Promise<Credential | null>;\n}\n\nexport interface UseOtpCredential {\n (callback?: UseOtpCredentialCallback): UseOtpCredentialReturn;\n\n (params?: UseOtpCredentialParams): UseOtpCredentialReturn;\n}\n\n/**\n * @name useOtpCredential\n * @description - Hook that creates an otp credential\n * @category Browser\n *\n * @browserapi navigator.credentials https://developer.mozilla.org/en-US/docs/Web/API/Navigator/credentials\n *\n * @overload\n * @param {UseOtpCredentialCallback} callback The callback function to be invoked\n * @returns {UseOtpCredentialReturn}\n *\n * @example\n * useOtpCredential((credential) => console.log(credential));\n *\n * @overload\n * @param {UseOtpCredentialCallback} params.onSuccess The callback function to be invoked on success\n * @param {UseOtpCredentialCallback} params.onError The callback function to be invoked on error\n * @returns {UseOtpCredentialReturn}\n *\n * @example\n * useOtpCredential({ onSuccess: (credential) => console.log(credential), onError: (error) => console.log(error) });\n */\nexport const useOtpCredential = ((...params: any[]) => {\n const onSuccess =\n typeof params[0] === 'function'\n ? (params[0] as UseOtpCredentialCallback | undefined)\n : (params[0] as UseOtpCredentialParams | undefined)?.onSuccess;\n\n const onError =\n typeof params[0] === 'function'\n ? (params[0] as UseOtpCredentialParams | undefined)?.onError\n : undefined;\n\n const supported = typeof navigator !== 'undefined' && 'OTPCredential' in window;\n const [aborted, setAborted] = useState(false);\n\n const abortControllerRef = useRef<AbortController>(new AbortController());\n\n const get = async () => {\n if (!supported) return;\n\n abortControllerRef.current = new AbortController();\n try {\n const credential = await navigator.credentials.get({\n otp: { transport: ['sms'] },\n signal: abortControllerRef.current.signal\n });\n onSuccess?.(credential);\n setAborted(false);\n return credential;\n } catch (error) {\n onError?.(error);\n }\n };\n\n const abort = () => {\n abortControllerRef.current.abort();\n abortControllerRef.current = new AbortController();\n abortControllerRef.current.signal.onabort = () => setAborted(true);\n };\n\n return { supported, abort, aborted, get };\n}) as UseOtpCredential;\n"],"names":["useOtpCredential","params","onSuccess","_a","onError","_b","supported","aborted","setAborted","useState","abortControllerRef","useRef","credential","error"],"mappings":"yGAmEaA,EAAoB,IAAIC,IAAkB,SAC/C,MAAAC,EACJ,OAAOD,EAAO,CAAC,GAAM,WAChBA,EAAO,CAAC,GACRE,EAAAF,EAAO,CAAC,IAAR,YAAAE,EAAkD,UAEnDC,EACJ,OAAOH,EAAO,CAAC,GAAM,YAChBI,EAAAJ,EAAO,CAAC,IAAR,YAAAI,EAAkD,QACnD,OAEAC,EAAY,OAAO,UAAc,KAAe,kBAAmB,OACnE,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EAEtCC,EAAqBC,EAAAA,OAAwB,IAAI,eAAiB,EAyBxE,MAAO,CAAE,UAAAL,EAAW,MANN,IAAM,CAClBI,EAAmB,QAAQ,MAAM,EACdA,EAAA,QAAU,IAAI,gBACjCA,EAAmB,QAAQ,OAAO,QAAU,IAAMF,EAAW,EAAI,CACnE,EAE2B,QAAAD,EAAS,IAvBxB,SAAY,CACtB,GAAKD,EAEc,CAAAI,EAAA,QAAU,IAAI,gBAC7B,GAAA,CACF,MAAME,EAAa,MAAM,UAAU,YAAY,IAAI,CACjD,IAAK,CAAE,UAAW,CAAC,KAAK,CAAE,EAC1B,OAAQF,EAAmB,QAAQ,MAAA,CACpC,EACD,OAAAR,GAAA,MAAAA,EAAYU,GACZJ,EAAW,EAAK,EACTI,QACAC,EAAO,CACdT,GAAA,MAAAA,EAAUS,EAAK,EAEnB,CAQwC,CAC1C"}
1
+ {"version":3,"file":"useOtpCredential.cjs","sources":["../../../../src/hooks/useOtpCredential/useOtpCredential.ts"],"sourcesContent":["import { useRef, useState } from 'react';\n\ndeclare global {\n interface OTPOptions {\n readonly transport: string[];\n }\n\n interface CredentialRequestOptions {\n readonly otp: OTPOptions;\n }\n\n interface Credential {\n readonly code: string;\n }\n}\n\n/* The use otp credential callback type */\nexport type UseOtpCredentialCallback = (otp: Credential | null) => void;\n\n/* The use otp credential options type */\nexport interface UseOtpCredentialParams {\n /* The callback function to be invoked on error */\n onError: (error: any) => void;\n /* The callback function to be invoked on success */\n onSuccess: (credential: Credential | null) => void;\n}\n\n/* The use otp credential return type */\nexport interface UseOtpCredentialReturn {\n /* The abort function */\n abort: AbortController['abort'];\n /* The aborted state of the query */\n aborted: boolean;\n /* The supported state of the otp credential */\n supported: boolean;\n /* The get otp credential function */\n get: () => Promise<Credential | null>;\n}\n\nexport interface UseOtpCredential {\n (callback?: UseOtpCredentialCallback): UseOtpCredentialReturn;\n\n (params?: UseOtpCredentialParams): UseOtpCredentialReturn;\n}\n\n/**\n * @name useOtpCredential\n * @description - Hook that creates an otp credential\n * @category Browser\n *\n * @browserapi navigator.credentials https://developer.mozilla.org/en-US/docs/Web/API/Navigator/credentials\n *\n * @overload\n * @param {UseOtpCredentialCallback} callback The callback function to be invoked\n * @returns {UseOtpCredentialReturn}\n *\n * @example\n * useOtpCredential((credential) => console.log(credential));\n *\n * @overload\n * @param {UseOtpCredentialCallback} params.onSuccess The callback function to be invoked on success\n * @param {UseOtpCredentialCallback} params.onError The callback function to be invoked on error\n * @returns {UseOtpCredentialReturn}\n *\n * @example\n * useOtpCredential({ onSuccess: (credential) => console.log(credential), onError: (error) => console.log(error) });\n */\nexport const useOtpCredential = ((...params: any[]) => {\n const onSuccess =\n typeof params[0] === 'function'\n ? (params[0] as UseOtpCredentialCallback | undefined)\n : (params[0] as UseOtpCredentialParams | undefined)?.onSuccess;\n\n const onError =\n typeof params[0] === 'function'\n ? (params[0] as UseOtpCredentialParams | undefined)?.onError\n : undefined;\n\n const supported = typeof navigator !== 'undefined' && 'OTPCredential' in window;\n const [aborted, setAborted] = useState(false);\n\n const abortControllerRef = useRef<AbortController>(new AbortController());\n\n const get = async () => {\n if (!supported) return;\n\n abortControllerRef.current = new AbortController();\n try {\n const credential = await navigator.credentials.get({\n otp: { transport: ['sms'] },\n signal: abortControllerRef.current.signal\n });\n onSuccess?.(credential);\n setAborted(false);\n return credential;\n } catch (error) {\n onError?.(error);\n }\n };\n\n const abort = () => {\n abortControllerRef.current.abort();\n abortControllerRef.current = new AbortController();\n abortControllerRef.current.signal.onabort = () => setAborted(true);\n };\n\n return { supported, abort, aborted, get };\n}) as UseOtpCredential;\n"],"names":["useOtpCredential","params","onSuccess","onError","supported","aborted","setAborted","useState","abortControllerRef","useRef","credential","error"],"mappings":"yGAmEaA,EAAoB,IAAIC,IAAkB,CACrD,MAAMC,EACJ,OAAOD,EAAO,CAAC,GAAM,WAChBA,EAAO,CAAC,EACRA,EAAO,CAAC,GAA0C,UAEnDE,EACJ,OAAOF,EAAO,CAAC,GAAM,WAChBA,EAAO,CAAC,GAA0C,QACnD,OAEAG,EAAY,OAAO,UAAc,KAAe,kBAAmB,OACnE,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EAEtCC,EAAqBC,EAAAA,OAAwB,IAAI,eAAiB,EAyBxE,MAAO,CAAE,UAAAL,EAAW,MANN,IAAM,CAClBI,EAAmB,QAAQ,MAAA,EAC3BA,EAAmB,QAAU,IAAI,gBACjCA,EAAmB,QAAQ,OAAO,QAAU,IAAMF,EAAW,EAAI,CAAA,EAGxC,QAAAD,EAAS,IAvBxB,SAAY,CACtB,GAAKD,EAEL,CAAAI,EAAmB,QAAU,IAAI,gBACjC,GAAI,CACF,MAAME,EAAa,MAAM,UAAU,YAAY,IAAI,CACjD,IAAK,CAAE,UAAW,CAAC,KAAK,CAAA,EACxB,OAAQF,EAAmB,QAAQ,MAAA,CACpC,EACD,OAAAN,IAAYQ,CAAU,EACtBJ,EAAW,EAAK,EACTI,CAAA,OACAC,EAAO,CACdR,IAAUQ,CAAK,CAAA,EACjB,CASkC,CACtC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),u=require("../useEvent/useEvent.cjs"),o=t=>{const[s,n]=r.useState(!1),e=u.useEvent(()=>{if(s)return n(!1);t==null||t(),n(!0)});return r.useEffect(()=>(document.addEventListener("mouseleave",e,{passive:!0}),document.addEventListener("mouseenter",e,{passive:!0}),()=>{document.removeEventListener("mouseenter",e),document.removeEventListener("mouseleave",e)}),[]),s};exports.usePageLeave=o;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),u=require("../useEvent/useEvent.cjs"),o=r=>{const[t,s]=n.useState(!1),e=u.useEvent(()=>{if(t)return s(!1);r?.(),s(!0)});return n.useEffect(()=>(document.addEventListener("mouseleave",e,{passive:!0}),document.addEventListener("mouseenter",e,{passive:!0}),()=>{document.removeEventListener("mouseenter",e),document.removeEventListener("mouseleave",e)}),[]),t};exports.usePageLeave=o;
2
2
  //# sourceMappingURL=usePageLeave.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePageLeave.cjs","sources":["../../../../src/hooks/usePageLeave/usePageLeave.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { useEvent } from '../useEvent/useEvent';\n\n/**\n * @name usePageLeave\n * @description - Hook what calls given function when mouse leaves the page\n * @category Sensors\n *\n * @param {() => void} [callback] The callback function what calls then mouse leaves the page\n * @returns {boolean} A boolean which determines if the mouse left the page\n *\n * @example\n * const isLeft = usePageLeave(() => console.log('on leave'))\n */\nexport const usePageLeave = (callback?: () => void) => {\n const [isLeft, setIsLeft] = useState(false);\n\n const onMouse = useEvent(() => {\n if (isLeft) return setIsLeft(false);\n callback?.();\n setIsLeft(true);\n });\n\n useEffect(() => {\n document.addEventListener('mouseleave', onMouse, { passive: true });\n document.addEventListener('mouseenter', onMouse, { passive: true });\n\n return () => {\n document.removeEventListener('mouseenter', onMouse);\n document.removeEventListener('mouseleave', onMouse);\n };\n }, []);\n\n return isLeft;\n};\n"],"names":["usePageLeave","callback","isLeft","setIsLeft","useState","onMouse","useEvent","useEffect"],"mappings":"+IAeaA,EAAgBC,GAA0B,CACrD,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EAEpCC,EAAUC,EAAAA,SAAS,IAAM,CACzB,GAAAJ,EAAe,OAAAC,EAAU,EAAK,EACvBF,GAAA,MAAAA,IACXE,EAAU,EAAI,CAAA,CACf,EAEDI,OAAAA,EAAAA,UAAU,KACR,SAAS,iBAAiB,aAAcF,EAAS,CAAE,QAAS,GAAM,EAClE,SAAS,iBAAiB,aAAcA,EAAS,CAAE,QAAS,GAAM,EAE3D,IAAM,CACF,SAAA,oBAAoB,aAAcA,CAAO,EACzC,SAAA,oBAAoB,aAAcA,CAAO,CACpD,GACC,EAAE,EAEEH,CACT"}
1
+ {"version":3,"file":"usePageLeave.cjs","sources":["../../../../src/hooks/usePageLeave/usePageLeave.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { useEvent } from '../useEvent/useEvent';\n\n/**\n * @name usePageLeave\n * @description - Hook what calls given function when mouse leaves the page\n * @category Sensors\n *\n * @param {() => void} [callback] The callback function what calls then mouse leaves the page\n * @returns {boolean} A boolean which determines if the mouse left the page\n *\n * @example\n * const isLeft = usePageLeave(() => console.log('on leave'))\n */\nexport const usePageLeave = (callback?: () => void) => {\n const [isLeft, setIsLeft] = useState(false);\n\n const onMouse = useEvent(() => {\n if (isLeft) return setIsLeft(false);\n callback?.();\n setIsLeft(true);\n });\n\n useEffect(() => {\n document.addEventListener('mouseleave', onMouse, { passive: true });\n document.addEventListener('mouseenter', onMouse, { passive: true });\n\n return () => {\n document.removeEventListener('mouseenter', onMouse);\n document.removeEventListener('mouseleave', onMouse);\n };\n }, []);\n\n return isLeft;\n};\n"],"names":["usePageLeave","callback","isLeft","setIsLeft","useState","onMouse","useEvent","useEffect"],"mappings":"+IAeaA,EAAgBC,GAA0B,CACrD,KAAM,CAACC,EAAQC,CAAS,EAAIC,EAAAA,SAAS,EAAK,EAEpCC,EAAUC,EAAAA,SAAS,IAAM,CAC7B,GAAIJ,EAAQ,OAAOC,EAAU,EAAK,EAClCF,IAAA,EACAE,EAAU,EAAI,CAAA,CACf,EAEDI,OAAAA,EAAAA,UAAU,KACR,SAAS,iBAAiB,aAAcF,EAAS,CAAE,QAAS,GAAM,EAClE,SAAS,iBAAiB,aAAcA,EAAS,CAAE,QAAS,GAAM,EAE3D,IAAM,CACX,SAAS,oBAAoB,aAAcA,CAAO,EAClD,SAAS,oBAAoB,aAAcA,CAAO,CAAA,GAEnD,EAAE,EAEEH,CACT"}
@@ -1,2 +1,2 @@
1
- "use strict";var U=Object.defineProperty;var A=(c,t,e)=>t in c?U(c,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):c[t]=e;var h=(c,t,e)=>A(c,typeof t!="symbol"?t+"":t,e);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("react"),T=require("../useEvent/useEvent.cjs"),B=require("../useRefState/useRefState.cjs"),I=require("../../utils/helpers/isTarget.cjs"),k=require("../../utils/helpers/getElement.cjs"),C=10;class v{constructor(t,e){h(this,"x");h(this,"y");this.x=t,this.y=e}update(t){this.x=t.x,this.y=t.y}getDifferenceTo(t){return new v(this.x-t.x,this.y-t.y)}getDistanceTo(t){const e=this.getDifferenceTo(t);return Math.sqrt(e.x**2+e.y**2)}getAngleTo(t){const e=this.getDifferenceTo(t);return Math.atan2(e.y,e.x)}equalsTo(t){return this.x===t.x&&this.y===t.y}moveByAngle(t,e){const o=t+Math.PI/2;return this.x+=Math.sin(o)*e,this.y-=Math.cos(o)*e,this}}class S{constructor({x:t,y:e,radius:o,smooth:d}){h(this,"pointer");h(this,"brush");h(this,"radius");h(this,"smooth",!1);h(this,"points",[]);h(this,"lines",[]);this.smooth=d,this.pointer=new v(t,e),this.brush=new v(t,e),this.radius=o,this.points=[],this.lines=[]}getBrushCoordinates(){return{x:this.brush.x,y:this.brush.y}}getPointerCoordinates(){return{x:this.pointer.x,y:this.pointer.y}}update(t){if(this.pointer.equalsTo(t))return!1;if(this.pointer.update(t),!this.smooth)return this.brush.update(t),this.points.push(this.getBrushCoordinates()),!0;const e=this.pointer.getDistanceTo(this.brush),o=this.pointer.getAngleTo(this.brush);if(Math.round((e-this.radius)*10)/10>0){const y=o+Math.PI/2;return this.brush.update({x:this.brush.x+Math.sin(y)*(e-this.radius),y:this.brush.y-Math.cos(y)*(e-this.radius)}),this.points.push(this.getBrushCoordinates()),!0}return!1}}const O=(...c)=>{const t=I.isTarget(c[0])?c[0]:void 0,e=(t?c[1]:c[0])??{},o=(e==null?void 0:e.color)??"black",d=(e==null?void 0:e.opacity)??1,y=(e==null?void 0:e.radius)??C,s=p.useRef(new S({x:0,y:0,radius:(e==null?void 0:e.radius)??C,smooth:(e==null?void 0:e.smooth)??!1})),[E,w]=p.useState(!1),m=B.useRefState(),n=p.useRef(null),f=(r,u,a,l)=>{if(!n.current)return;n.current.globalAlpha=a,n.current.strokeStyle=u,n.current.lineWidth=l*2,n.current.lineCap="round",n.current.lineJoin="round";let i=r[0],x=r[1];n.current.beginPath();for(let g=1;g<r.length;g+=1){const M={x:i.x+(x.x-i.x)/2,y:i.y+(x.y-i.y)/2};n.current.quadraticCurveTo(i.x,i.y,M.x,M.y),i=r[g],x=r[g+1]}n.current.lineTo(i.x,i.y),n.current.stroke()},b=()=>{n.current&&n.current.clearRect(0,0,n.current.canvas.width,n.current.canvas.height)},R=T.useEvent(r=>{var l;if(!E)return;(l=e==null?void 0:e.onMouseMove)==null||l.call(e,r,s.current);const u={x:r.offsetX,y:r.offsetY};s.current.update(u)&&n.current&&(b(),n.current.clearRect(0,0,n.current.canvas.width,n.current.canvas.height),s.current.lines.forEach(({points:i,color:x,opacity:g,radius:M})=>f(i,x,g,M)),f(s.current.points,o,d,y))}),P=T.useEvent(r=>{var a;if(!n.current)return;const u={x:r.offsetX,y:r.offsetY};s.current.brush.update(u),s.current.points.push(u),f(s.current.points,o,d,y),(a=e==null?void 0:e.onMouseDown)==null||a.call(e,r,s.current),w(!0)}),D=T.useEvent(r=>{var u;n.current&&(s.current.points.length&&(s.current.lines.push({points:s.current.points,color:o,opacity:d,radius:y}),s.current.points=[]),(u=e==null?void 0:e.onMouseUp)==null||u.call(e,r,s.current),w(!1))}),L=()=>{n.current&&(b(),s.current.lines=[],s.current.points=[])},q=()=>{n.current&&(b(),s.current.lines.pop(),s.current.lines.forEach(({points:r,color:u,opacity:a,radius:l})=>f(r,u,a,l)))};return p.useEffect(()=>{if(!t&&!m.state)return;const r=t?k.getElement(t):m.current;if(r)return n.current=r.getContext("2d"),e!=null&&e.initialLines&&(s.current.lines=e.initialLines,e.initialLines.forEach(({points:u,color:a,opacity:l,radius:i})=>f(u,a,l,i))),r.addEventListener("mousedown",P),r.addEventListener("mousemove",R),r.addEventListener("mouseup",D),()=>{r&&(r.removeEventListener("mousedown",P),r.removeEventListener("mousemove",R),r.removeEventListener("mouseup",D))}},[t,m.state]),t?{drawing:E,clear:L,undo:q,draw:f,lines:s.current.lines}:{ref:m,drawing:E,clear:L,undo:q,draw:f,lines:s.current.lines}};exports.Paint=S;exports.Pointer=v;exports.usePaint=O;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const v=require("react"),E=require("../useEvent/useEvent.cjs"),S=require("../useRefState/useRefState.cjs"),U=require("../../utils/helpers/isTarget.cjs"),A=require("../../utils/helpers/getElement.cjs"),q=10;class g{x;y;constructor(t,e){this.x=t,this.y=e}update(t){this.x=t.x,this.y=t.y}getDifferenceTo(t){return new g(this.x-t.x,this.y-t.y)}getDistanceTo(t){const e=this.getDifferenceTo(t);return Math.sqrt(e.x**2+e.y**2)}getAngleTo(t){const e=this.getDifferenceTo(t);return Math.atan2(e.y,e.x)}equalsTo(t){return this.x===t.x&&this.y===t.y}moveByAngle(t,e){const o=t+Math.PI/2;return this.x+=Math.sin(o)*e,this.y-=Math.cos(o)*e,this}}class C{pointer;brush;radius;smooth=!1;points=[];lines=[];constructor({x:t,y:e,radius:o,smooth:h}){this.smooth=h,this.pointer=new g(t,e),this.brush=new g(t,e),this.radius=o,this.points=[],this.lines=[]}getBrushCoordinates(){return{x:this.brush.x,y:this.brush.y}}getPointerCoordinates(){return{x:this.pointer.x,y:this.pointer.y}}update(t){if(this.pointer.equalsTo(t))return!1;if(this.pointer.update(t),!this.smooth)return this.brush.update(t),this.points.push(this.getBrushCoordinates()),!0;const e=this.pointer.getDistanceTo(this.brush),o=this.pointer.getAngleTo(this.brush);if(Math.round((e-this.radius)*10)/10>0){const l=o+Math.PI/2;return this.brush.update({x:this.brush.x+Math.sin(l)*(e-this.radius),y:this.brush.y-Math.cos(l)*(e-this.radius)}),this.points.push(this.getBrushCoordinates()),!0}return!1}}const B=(...p)=>{const t=U.isTarget(p[0])?p[0]:void 0,e=(t?p[1]:p[0])??{},o=e?.color??"black",h=e?.opacity??1,l=e?.radius??q,s=v.useRef(new C({x:0,y:0,radius:e?.radius??q,smooth:e?.smooth??!1})),[m,b]=v.useState(!1),x=S.useRefState(),n=v.useRef(null),c=(r,u,f,a)=>{if(!n.current)return;n.current.globalAlpha=f,n.current.strokeStyle=u,n.current.lineWidth=a*2,n.current.lineCap="round",n.current.lineJoin="round";let i=r[0],y=r[1];n.current.beginPath();for(let d=1;d<r.length;d+=1){const L={x:i.x+(y.x-i.x)/2,y:i.y+(y.y-i.y)/2};n.current.quadraticCurveTo(i.x,i.y,L.x,L.y),i=r[d],y=r[d+1]}n.current.lineTo(i.x,i.y),n.current.stroke()},M=()=>{n.current&&n.current.clearRect(0,0,n.current.canvas.width,n.current.canvas.height)},T=E.useEvent(r=>{if(!m)return;e?.onMouseMove?.(r,s.current);const u={x:r.offsetX,y:r.offsetY};s.current.update(u)&&n.current&&(M(),n.current.clearRect(0,0,n.current.canvas.width,n.current.canvas.height),s.current.lines.forEach(({points:a,color:i,opacity:y,radius:d})=>c(a,i,y,d)),c(s.current.points,o,h,l))}),w=E.useEvent(r=>{if(!n.current)return;const u={x:r.offsetX,y:r.offsetY};s.current.brush.update(u),s.current.points.push(u),c(s.current.points,o,h,l),e?.onMouseDown?.(r,s.current),b(!0)}),R=E.useEvent(r=>{n.current&&(s.current.points.length&&(s.current.lines.push({points:s.current.points,color:o,opacity:h,radius:l}),s.current.points=[]),e?.onMouseUp?.(r,s.current),b(!1))}),P=()=>{n.current&&(M(),s.current.lines=[],s.current.points=[])},D=()=>{n.current&&(M(),s.current.lines.pop(),s.current.lines.forEach(({points:r,color:u,opacity:f,radius:a})=>c(r,u,f,a)))};return v.useEffect(()=>{if(!t&&!x.state)return;const r=t?A.getElement(t):x.current;if(r)return n.current=r.getContext("2d"),e?.initialLines&&(s.current.lines=e.initialLines,e.initialLines.forEach(({points:u,color:f,opacity:a,radius:i})=>c(u,f,a,i))),r.addEventListener("mousedown",w),r.addEventListener("mousemove",T),r.addEventListener("mouseup",R),()=>{r&&(r.removeEventListener("mousedown",w),r.removeEventListener("mousemove",T),r.removeEventListener("mouseup",R))}},[t,x.state]),t?{drawing:m,clear:P,undo:D,draw:c,lines:s.current.lines}:{ref:x,drawing:m,clear:P,undo:D,draw:c,lines:s.current.lines}};exports.Paint=C;exports.Pointer=g;exports.usePaint=B;
2
2
  //# sourceMappingURL=usePaint.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePaint.cjs","sources":["../../../../src/hooks/usePaint/usePaint.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useEvent } from '../useEvent/useEvent';\nimport { useRefState } from '../useRefState/useRefState';\n\nconst DEFAULT_BRUSH_RADIUS = 10;\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport class Pointer implements Point {\n x: number;\n\n y: number;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n update(point: Point) {\n this.x = point.x;\n this.y = point.y;\n }\n\n getDifferenceTo(point: Point) {\n return new Pointer(this.x - point.x, this.y - point.y);\n }\n\n getDistanceTo(point: Point) {\n const diff = this.getDifferenceTo(point);\n return Math.sqrt(diff.x ** 2 + diff.y ** 2);\n }\n\n getAngleTo(point: Point) {\n const diff = this.getDifferenceTo(point);\n return Math.atan2(diff.y, diff.x);\n }\n\n equalsTo(point: Point) {\n return this.x === point.x && this.y === point.y;\n }\n\n moveByAngle(\n // The angle in radians\n angle: number,\n // How much the point should be moved\n distance: number\n ) {\n // Rotate the angle based on the browser coordinate system ([0,0] in the top left)\n const angleRotated = angle + Math.PI / 2;\n\n this.x += Math.sin(angleRotated) * distance;\n this.y -= Math.cos(angleRotated) * distance;\n\n return this;\n }\n}\n\nexport class Paint {\n pointer: Pointer;\n\n brush: Pointer;\n\n radius: number;\n\n smooth: boolean = false;\n\n points: Point[] = [];\n\n lines: { points: Point[]; color: string; radius: number; opacity: number }[] = [];\n\n constructor({ x, y, radius, smooth }: { x: number; y: number; radius: number; smooth: boolean }) {\n this.smooth = smooth;\n this.pointer = new Pointer(x, y);\n this.brush = new Pointer(x, y);\n this.radius = radius;\n this.points = [];\n this.lines = [];\n }\n\n getBrushCoordinates() {\n return {\n x: this.brush.x,\n y: this.brush.y\n };\n }\n\n getPointerCoordinates() {\n return {\n x: this.pointer.x,\n y: this.pointer.y\n };\n }\n\n update(point: Point) {\n if (this.pointer.equalsTo(point)) return false;\n this.pointer.update(point);\n\n if (!this.smooth) {\n this.brush.update(point);\n this.points.push(this.getBrushCoordinates());\n return true;\n }\n\n const distance = this.pointer.getDistanceTo(this.brush);\n const angle = this.pointer.getAngleTo(this.brush);\n const isOutside = Math.round((distance - this.radius) * 10) / 10 > 0;\n\n if (isOutside) {\n const angleRotated = angle + Math.PI / 2;\n this.brush.update({\n x: this.brush.x + Math.sin(angleRotated) * (distance - this.radius),\n y: this.brush.y - Math.cos(angleRotated) * (distance - this.radius)\n });\n this.points.push(this.getBrushCoordinates());\n return true;\n }\n\n return false;\n }\n}\n\nexport interface UsePaintOptions {\n /** Brush color */\n color?: string;\n /** Initial lines */\n initialLines?: Paint['lines'];\n /** Brush opacity */\n opacity?: number;\n /** Brush radius */\n radius?: number;\n /** Smooth brush movement */\n smooth?: boolean;\n /** Callback when the mouse is down */\n onMouseDown?: (event: MouseEvent, paint: Paint) => void;\n /** Callback when the mouse is moved */\n onMouseMove?: (event: MouseEvent, paint: Paint) => void;\n /** Callback when the mouse is up */\n onMouseUp?: (event: MouseEvent, paint: Paint) => void;\n}\n\nexport interface UsePaintReturn {\n drawing: boolean;\n lines: Paint['lines'];\n clear: () => void;\n draw: (points: Point[], color: string, opacity: number, radius: number) => void;\n undo: () => void;\n}\n\nexport interface UsePaint {\n (target: HookTarget, options?: UsePaintOptions): UsePaintReturn;\n\n <Target extends HTMLCanvasElement>(\n options?: UsePaintOptions,\n target?: never\n ): UsePaintReturn & { ref: StateRef<Target> };\n}\n\n/**\n * @name usePaint\n * @description - Hook that allows you to draw in a specific area\n * @category Browser\n *\n * @overload\n * @param {HookTarget} target The target element to be painted\n * @param {UsePaintOptions} [options] The options to be used\n * @returns {UsePaintReturn} An object containing the current pencil options and functions to interact with the paint\n *\n * @example\n * const drawing = usePaint(canvasRef);\n *\n * @overload\n * @param {UsePaintOptions} [options] The options to be used\n * @returns {UsePaintReturn & { ref: StateRef<HTMLCanvasElement> }} An object containing the current pencil options and functions to interact with the paint\n *\n * @example\n * const { ref, drawing } = usePaint();\n */\nexport const usePaint = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = ((target ? params[1] : params[0]) as UsePaintOptions) ?? {};\n\n const color = options?.color ?? 'black';\n const opacity = options?.opacity ?? 1;\n const radius = options?.radius ?? DEFAULT_BRUSH_RADIUS;\n\n const paintRef = useRef<Paint>(\n new Paint({\n x: 0,\n y: 0,\n radius: options?.radius ?? DEFAULT_BRUSH_RADIUS,\n smooth: options?.smooth ?? false\n })\n );\n const [drawing, setIsDrawing] = useState(false);\n const internalRef = useRefState<HTMLCanvasElement>();\n const contextRef = useRef<CanvasRenderingContext2D | null>(null);\n\n const draw = (points: Point[], color: string, opacity: number, radius: number) => {\n if (!contextRef.current) return;\n\n contextRef.current.globalAlpha = opacity;\n contextRef.current.strokeStyle = color;\n contextRef.current.lineWidth = radius * 2;\n contextRef.current.lineCap = 'round';\n contextRef.current.lineJoin = 'round';\n\n let p1 = points[0];\n let p2 = points[1];\n\n contextRef.current.beginPath();\n\n for (let i = 1; i < points.length; i += 1) {\n const midPoint = {\n x: p1.x + (p2.x - p1.x) / 2,\n y: p1.y + (p2.y - p1.y) / 2\n };\n contextRef.current.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n p1 = points[i];\n p2 = points[i + 1];\n }\n contextRef.current.lineTo(p1.x, p1.y);\n contextRef.current.stroke();\n };\n\n const clearCanvas = () => {\n if (!contextRef.current) return;\n contextRef.current.clearRect(\n 0,\n 0,\n contextRef.current.canvas.width,\n contextRef.current.canvas.height\n );\n };\n\n const onMouseMove = useEvent((event: MouseEvent) => {\n if (!drawing) return;\n options?.onMouseMove?.(event, paintRef.current);\n\n const point = { x: event.offsetX, y: event.offsetY };\n\n const isUpdated = paintRef.current.update(point);\n\n if (!isUpdated) return;\n if (!contextRef.current) return;\n clearCanvas();\n contextRef.current.clearRect(\n 0,\n 0,\n contextRef.current.canvas.width,\n contextRef.current.canvas.height\n );\n\n // const brush = paintRef.current.getBrushCoordinates();\n // // Draw brush point\n // contextRef.current.beginPath();\n // contextRef.current.fillStyle = 'red';\n // contextRef.current.arc(brush.x, brush.y, radius, 0, Math.PI * 2, true);\n // contextRef.current.fill();\n\n // // Draw the lazy radius.\n // contextRef.current.beginPath();\n // contextRef.current.strokeStyle = '#ccc';\n // contextRef.current.arc(brush.x, brush.y, radius * 2, 0, Math.PI * 2, true);\n // contextRef.current.stroke();\n\n paintRef.current.lines.forEach(({ points, color, opacity, radius }) =>\n draw(points, color, opacity, radius)\n );\n draw(paintRef.current.points, color, opacity, radius);\n });\n\n const onMouseDown = useEvent((event: MouseEvent) => {\n if (!contextRef.current) return;\n\n const point = { x: event.offsetX, y: event.offsetY };\n paintRef.current.brush.update(point);\n paintRef.current.points.push(point);\n draw(paintRef.current.points, color, opacity, radius);\n\n options?.onMouseDown?.(event, paintRef.current);\n setIsDrawing(true);\n });\n\n const onMouseUp = useEvent((event: MouseEvent) => {\n if (!contextRef.current) return;\n\n if (paintRef.current.points.length) {\n paintRef.current.lines.push({ points: paintRef.current.points, color, opacity, radius });\n paintRef.current.points = [];\n }\n\n options?.onMouseUp?.(event, paintRef.current);\n setIsDrawing(false);\n });\n\n const clear = () => {\n if (!contextRef.current) return;\n clearCanvas();\n paintRef.current.lines = [];\n paintRef.current.points = [];\n };\n\n const undo = () => {\n if (!contextRef.current) return;\n clearCanvas();\n\n paintRef.current.lines.pop();\n paintRef.current.lines.forEach(({ points, color, opacity, radius }) =>\n draw(points, color, opacity, radius)\n );\n };\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as HTMLCanvasElement;\n if (!element) return;\n contextRef.current = element.getContext('2d');\n\n if (options?.initialLines) {\n paintRef.current.lines = options.initialLines;\n options.initialLines.forEach(({ points, color, opacity, radius }) =>\n draw(points, color, opacity, radius)\n );\n }\n\n element.addEventListener('mousedown', onMouseDown);\n element.addEventListener('mousemove', onMouseMove);\n element.addEventListener('mouseup', onMouseUp);\n\n return () => {\n if (!element) return;\n element.removeEventListener('mousedown', onMouseDown);\n element.removeEventListener('mousemove', onMouseMove);\n element.removeEventListener('mouseup', onMouseUp);\n };\n }, [target, internalRef.state]);\n\n if (target) return { drawing, clear, undo, draw, lines: paintRef.current.lines };\n return { ref: internalRef, drawing, clear, undo, draw, lines: paintRef.current.lines };\n}) as UsePaint;\n"],"names":["DEFAULT_BRUSH_RADIUS","Pointer","x","y","__publicField","point","diff","angle","distance","angleRotated","Paint","radius","smooth","usePaint","params","target","isTarget","options","color","opacity","paintRef","useRef","drawing","setIsDrawing","useState","internalRef","useRefState","contextRef","draw","points","p1","p2","i","midPoint","clearCanvas","onMouseMove","useEvent","event","_a","onMouseDown","onMouseUp","clear","undo","useEffect","element","getElement"],"mappings":"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"}
1
+ {"version":3,"file":"usePaint.cjs","sources":["../../../../src/hooks/usePaint/usePaint.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useEvent } from '../useEvent/useEvent';\nimport { useRefState } from '../useRefState/useRefState';\n\nconst DEFAULT_BRUSH_RADIUS = 10;\n\nexport interface Point {\n x: number;\n y: number;\n}\n\nexport class Pointer implements Point {\n x: number;\n\n y: number;\n\n constructor(x: number, y: number) {\n this.x = x;\n this.y = y;\n }\n\n update(point: Point) {\n this.x = point.x;\n this.y = point.y;\n }\n\n getDifferenceTo(point: Point) {\n return new Pointer(this.x - point.x, this.y - point.y);\n }\n\n getDistanceTo(point: Point) {\n const diff = this.getDifferenceTo(point);\n return Math.sqrt(diff.x ** 2 + diff.y ** 2);\n }\n\n getAngleTo(point: Point) {\n const diff = this.getDifferenceTo(point);\n return Math.atan2(diff.y, diff.x);\n }\n\n equalsTo(point: Point) {\n return this.x === point.x && this.y === point.y;\n }\n\n moveByAngle(\n // The angle in radians\n angle: number,\n // How much the point should be moved\n distance: number\n ) {\n // Rotate the angle based on the browser coordinate system ([0,0] in the top left)\n const angleRotated = angle + Math.PI / 2;\n\n this.x += Math.sin(angleRotated) * distance;\n this.y -= Math.cos(angleRotated) * distance;\n\n return this;\n }\n}\n\nexport class Paint {\n pointer: Pointer;\n\n brush: Pointer;\n\n radius: number;\n\n smooth: boolean = false;\n\n points: Point[] = [];\n\n lines: { points: Point[]; color: string; radius: number; opacity: number }[] = [];\n\n constructor({ x, y, radius, smooth }: { x: number; y: number; radius: number; smooth: boolean }) {\n this.smooth = smooth;\n this.pointer = new Pointer(x, y);\n this.brush = new Pointer(x, y);\n this.radius = radius;\n this.points = [];\n this.lines = [];\n }\n\n getBrushCoordinates() {\n return {\n x: this.brush.x,\n y: this.brush.y\n };\n }\n\n getPointerCoordinates() {\n return {\n x: this.pointer.x,\n y: this.pointer.y\n };\n }\n\n update(point: Point) {\n if (this.pointer.equalsTo(point)) return false;\n this.pointer.update(point);\n\n if (!this.smooth) {\n this.brush.update(point);\n this.points.push(this.getBrushCoordinates());\n return true;\n }\n\n const distance = this.pointer.getDistanceTo(this.brush);\n const angle = this.pointer.getAngleTo(this.brush);\n const isOutside = Math.round((distance - this.radius) * 10) / 10 > 0;\n\n if (isOutside) {\n const angleRotated = angle + Math.PI / 2;\n this.brush.update({\n x: this.brush.x + Math.sin(angleRotated) * (distance - this.radius),\n y: this.brush.y - Math.cos(angleRotated) * (distance - this.radius)\n });\n this.points.push(this.getBrushCoordinates());\n return true;\n }\n\n return false;\n }\n}\n\nexport interface UsePaintOptions {\n /** Brush color */\n color?: string;\n /** Initial lines */\n initialLines?: Paint['lines'];\n /** Brush opacity */\n opacity?: number;\n /** Brush radius */\n radius?: number;\n /** Smooth brush movement */\n smooth?: boolean;\n /** Callback when the mouse is down */\n onMouseDown?: (event: MouseEvent, paint: Paint) => void;\n /** Callback when the mouse is moved */\n onMouseMove?: (event: MouseEvent, paint: Paint) => void;\n /** Callback when the mouse is up */\n onMouseUp?: (event: MouseEvent, paint: Paint) => void;\n}\n\nexport interface UsePaintReturn {\n drawing: boolean;\n lines: Paint['lines'];\n clear: () => void;\n draw: (points: Point[], color: string, opacity: number, radius: number) => void;\n undo: () => void;\n}\n\nexport interface UsePaint {\n (target: HookTarget, options?: UsePaintOptions): UsePaintReturn;\n\n <Target extends HTMLCanvasElement>(\n options?: UsePaintOptions,\n target?: never\n ): UsePaintReturn & { ref: StateRef<Target> };\n}\n\n/**\n * @name usePaint\n * @description - Hook that allows you to draw in a specific area\n * @category Browser\n *\n * @overload\n * @param {HookTarget} target The target element to be painted\n * @param {UsePaintOptions} [options] The options to be used\n * @returns {UsePaintReturn} An object containing the current pencil options and functions to interact with the paint\n *\n * @example\n * const drawing = usePaint(canvasRef);\n *\n * @overload\n * @param {UsePaintOptions} [options] The options to be used\n * @returns {UsePaintReturn & { ref: StateRef<HTMLCanvasElement> }} An object containing the current pencil options and functions to interact with the paint\n *\n * @example\n * const { ref, drawing } = usePaint();\n */\nexport const usePaint = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = ((target ? params[1] : params[0]) as UsePaintOptions) ?? {};\n\n const color = options?.color ?? 'black';\n const opacity = options?.opacity ?? 1;\n const radius = options?.radius ?? DEFAULT_BRUSH_RADIUS;\n\n const paintRef = useRef<Paint>(\n new Paint({\n x: 0,\n y: 0,\n radius: options?.radius ?? DEFAULT_BRUSH_RADIUS,\n smooth: options?.smooth ?? false\n })\n );\n const [drawing, setIsDrawing] = useState(false);\n const internalRef = useRefState<HTMLCanvasElement>();\n const contextRef = useRef<CanvasRenderingContext2D | null>(null);\n\n const draw = (points: Point[], color: string, opacity: number, radius: number) => {\n if (!contextRef.current) return;\n\n contextRef.current.globalAlpha = opacity;\n contextRef.current.strokeStyle = color;\n contextRef.current.lineWidth = radius * 2;\n contextRef.current.lineCap = 'round';\n contextRef.current.lineJoin = 'round';\n\n let p1 = points[0];\n let p2 = points[1];\n\n contextRef.current.beginPath();\n\n for (let i = 1; i < points.length; i += 1) {\n const midPoint = {\n x: p1.x + (p2.x - p1.x) / 2,\n y: p1.y + (p2.y - p1.y) / 2\n };\n contextRef.current.quadraticCurveTo(p1.x, p1.y, midPoint.x, midPoint.y);\n p1 = points[i];\n p2 = points[i + 1];\n }\n contextRef.current.lineTo(p1.x, p1.y);\n contextRef.current.stroke();\n };\n\n const clearCanvas = () => {\n if (!contextRef.current) return;\n contextRef.current.clearRect(\n 0,\n 0,\n contextRef.current.canvas.width,\n contextRef.current.canvas.height\n );\n };\n\n const onMouseMove = useEvent((event: MouseEvent) => {\n if (!drawing) return;\n options?.onMouseMove?.(event, paintRef.current);\n\n const point = { x: event.offsetX, y: event.offsetY };\n\n const isUpdated = paintRef.current.update(point);\n\n if (!isUpdated) return;\n if (!contextRef.current) return;\n clearCanvas();\n contextRef.current.clearRect(\n 0,\n 0,\n contextRef.current.canvas.width,\n contextRef.current.canvas.height\n );\n\n // const brush = paintRef.current.getBrushCoordinates();\n // // Draw brush point\n // contextRef.current.beginPath();\n // contextRef.current.fillStyle = 'red';\n // contextRef.current.arc(brush.x, brush.y, radius, 0, Math.PI * 2, true);\n // contextRef.current.fill();\n\n // // Draw the lazy radius.\n // contextRef.current.beginPath();\n // contextRef.current.strokeStyle = '#ccc';\n // contextRef.current.arc(brush.x, brush.y, radius * 2, 0, Math.PI * 2, true);\n // contextRef.current.stroke();\n\n paintRef.current.lines.forEach(({ points, color, opacity, radius }) =>\n draw(points, color, opacity, radius)\n );\n draw(paintRef.current.points, color, opacity, radius);\n });\n\n const onMouseDown = useEvent((event: MouseEvent) => {\n if (!contextRef.current) return;\n\n const point = { x: event.offsetX, y: event.offsetY };\n paintRef.current.brush.update(point);\n paintRef.current.points.push(point);\n draw(paintRef.current.points, color, opacity, radius);\n\n options?.onMouseDown?.(event, paintRef.current);\n setIsDrawing(true);\n });\n\n const onMouseUp = useEvent((event: MouseEvent) => {\n if (!contextRef.current) return;\n\n if (paintRef.current.points.length) {\n paintRef.current.lines.push({ points: paintRef.current.points, color, opacity, radius });\n paintRef.current.points = [];\n }\n\n options?.onMouseUp?.(event, paintRef.current);\n setIsDrawing(false);\n });\n\n const clear = () => {\n if (!contextRef.current) return;\n clearCanvas();\n paintRef.current.lines = [];\n paintRef.current.points = [];\n };\n\n const undo = () => {\n if (!contextRef.current) return;\n clearCanvas();\n\n paintRef.current.lines.pop();\n paintRef.current.lines.forEach(({ points, color, opacity, radius }) =>\n draw(points, color, opacity, radius)\n );\n };\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as HTMLCanvasElement;\n if (!element) return;\n contextRef.current = element.getContext('2d');\n\n if (options?.initialLines) {\n paintRef.current.lines = options.initialLines;\n options.initialLines.forEach(({ points, color, opacity, radius }) =>\n draw(points, color, opacity, radius)\n );\n }\n\n element.addEventListener('mousedown', onMouseDown);\n element.addEventListener('mousemove', onMouseMove);\n element.addEventListener('mouseup', onMouseUp);\n\n return () => {\n if (!element) return;\n element.removeEventListener('mousedown', onMouseDown);\n element.removeEventListener('mousemove', onMouseMove);\n element.removeEventListener('mouseup', onMouseUp);\n };\n }, [target, internalRef.state]);\n\n if (target) return { drawing, clear, undo, draw, lines: paintRef.current.lines };\n return { ref: internalRef, drawing, clear, undo, draw, lines: paintRef.current.lines };\n}) as UsePaint;\n"],"names":["DEFAULT_BRUSH_RADIUS","Pointer","x","y","point","diff","angle","distance","angleRotated","Paint","radius","smooth","usePaint","params","target","isTarget","options","color","opacity","paintRef","useRef","drawing","setIsDrawing","useState","internalRef","useRefState","contextRef","draw","points","p1","p2","i","midPoint","clearCanvas","onMouseMove","useEvent","event","onMouseDown","onMouseUp","clear","undo","useEffect","element","getElement"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"useParallax.cjs","sources":["../../../../src/hooks/useParallax/useParallax.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 { useDeviceOrientation } from '../useDeviceOrientation/useDeviceOrientation';\nimport { useRefState } from '../useRefState/useRefState';\nimport { useScreenOrientation } from '../useScreenOrientation/useScreenOrientation';\n\n/** The use parallax value type */\nexport interface UseParallaxValue {\n /** Roll value. Scaled to `-0.5 ~ 0.5` */\n roll: number;\n /** Sensor source, can be `mouse` or `deviceOrientation` */\n source: 'deviceOrientation' | 'mouse';\n /** Tilt value. Scaled to `-0.5 ~ 0.5` */\n tilt: number;\n}\n\n/** The use parallax options type */\nexport interface UseParallaxOptions {\n /** Device orientation roll adjust function */\n deviceOrientationRollAdjust?: (value: number) => number;\n /** Device orientation tilt adjust function */\n deviceOrientationTiltAdjust?: (value: number) => number;\n /** Mouse roll adjust function */\n mouseRollAdjust?: (value: number) => number;\n /** Mouse tilt adjust function */\n mouseTiltAdjust?: (value: number) => number;\n}\n\ninterface UseParallaxReturn {\n value: UseParallaxValue;\n}\n\nexport interface UseParallax {\n (target: HookTarget, options?: UseParallaxOptions): UseParallaxReturn;\n\n <Target extends Element>(\n options?: UseParallaxOptions,\n target?: never\n ): UseParallaxReturn & {\n ref: StateRef<Target>;\n };\n}\n\n/**\n * @name useParallax\n * @description - Hook to help create parallax effect\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element for the parallax effect\n * @param {UseParallaxOptions} options The options for the parallax effect\n * @returns {UseParallaxReturn} An object of parallax values\n *\n * @example\n * const { value } = useParallax(ref);\n *\n * @overload\n * @template Target The target element for the parallax effect\n * @param {UseParallaxOptions} options The options for the parallax effect\n * @returns {UseParallaxReturn & { ref: StateRef<Target> }} An object of parallax values\n *\n * @example\n * const { ref, value } = useParallax();\n */\nexport const useParallax = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (params[1] ? params[1] : params[0]) as UseParallaxOptions | undefined;\n\n const internalRef = useRefState<Element>();\n\n const screenOrientation = useScreenOrientation();\n const deviceOrientation = useDeviceOrientation();\n\n const {\n deviceOrientationRollAdjust = (value) => value,\n deviceOrientationTiltAdjust = (value) => value,\n mouseRollAdjust = (value) => value,\n mouseTiltAdjust = (value) => value\n } = (options ?? {}) as UseParallaxOptions;\n\n const [value, setValue] = useState({\n roll: 0,\n tilt: 0,\n source: 'mouse'\n });\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const onMouseMove = (event: MouseEvent) => {\n const { left, top } = element.getBoundingClientRect();\n const elementPositionX = left + window.scrollX;\n const elementPositionY = top + window.scrollY;\n\n const getSource = () => {\n const isDeviceOrientation =\n deviceOrientation.supported &&\n (deviceOrientation.value.alpha || deviceOrientation.value.gamma);\n\n if (isDeviceOrientation) return 'deviceOrientation';\n return 'mouse';\n };\n\n const getRoll = () => {\n const source = getSource();\n if (source === 'deviceOrientation') {\n let value: number;\n switch (screenOrientation.value.orientationType) {\n case 'landscape-primary':\n value = deviceOrientation.value.gamma! / 90;\n break;\n case 'landscape-secondary':\n value = -deviceOrientation.value.gamma! / 90;\n break;\n case 'portrait-primary':\n value = -deviceOrientation.value.beta! / 90;\n break;\n case 'portrait-secondary':\n value = deviceOrientation.value.beta! / 90;\n break;\n default:\n value = -deviceOrientation.value.beta! / 90;\n }\n return deviceOrientationRollAdjust(value);\n } else {\n const y = event.pageY - elementPositionY;\n const height = element.getBoundingClientRect().height;\n const value = -(y - height / 2) / height;\n return mouseRollAdjust(value);\n }\n };\n\n const getTilt = () => {\n const source = getSource();\n if (source === 'deviceOrientation') {\n let value: number;\n switch (screenOrientation.value.orientationType) {\n case 'landscape-primary':\n value = deviceOrientation.value.beta! / 90;\n break;\n case 'landscape-secondary':\n value = -deviceOrientation.value.beta! / 90;\n break;\n case 'portrait-primary':\n value = deviceOrientation.value.gamma! / 90;\n break;\n case 'portrait-secondary':\n value = -deviceOrientation.value.gamma! / 90;\n break;\n default:\n value = deviceOrientation.value.gamma! / 90;\n }\n return deviceOrientationTiltAdjust(value);\n } else {\n const x = event.pageX - elementPositionX;\n const width = element.getBoundingClientRect().width;\n const value = (x - width / 2) / width;\n return mouseTiltAdjust(value);\n }\n };\n\n const source = getSource();\n const roll = getRoll();\n const tilt = getTilt();\n\n setValue({\n roll,\n source,\n tilt\n });\n };\n\n document.addEventListener('mousemove', onMouseMove);\n return () => {\n document.removeEventListener('mousemove', onMouseMove);\n };\n }, [\n target,\n internalRef.state,\n screenOrientation.value.angle,\n screenOrientation.value.orientationType,\n deviceOrientation.value.gamma,\n deviceOrientation.value.beta,\n deviceOrientation.value.alpha,\n deviceOrientation.value.absolute\n ]);\n\n if (target) return { value };\n\n return {\n ref: internalRef,\n value\n };\n}) as UseParallax;\n"],"names":["useParallax","params","target","isTarget","options","internalRef","useRefState","screenOrientation","useScreenOrientation","deviceOrientation","useDeviceOrientation","deviceOrientationRollAdjust","value","deviceOrientationTiltAdjust","mouseRollAdjust","mouseTiltAdjust","setValue","useState","useEffect","element","getElement","onMouseMove","event","left","top","elementPositionX","elementPositionY","getSource","getRoll","y","height","getTilt","x","width","source","roll","tilt"],"mappings":"+WAsEaA,EAAe,IAAIC,IAAkB,CAC1C,MAAAC,EAAUC,WAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,EAAWH,EAAO,CAAC,EAAIA,EAAO,CAAC,EAAIA,EAAO,CAAC,EAE3CI,EAAcC,EAAAA,YAAqB,EAEnCC,EAAoBC,EAAAA,qBAAqB,EACzCC,EAAoBC,EAAAA,qBAAqB,EAEzC,CACJ,4BAAAC,EAA+BC,GAAUA,EACzC,4BAAAC,EAA+BD,GAAUA,EACzC,gBAAAE,EAAmBF,GAAUA,EAC7B,gBAAAG,EAAmBH,GAAUA,CAC/B,EAAKR,GAAW,CAAC,EAEX,CAACQ,EAAOI,CAAQ,EAAIC,WAAS,CACjC,KAAM,EACN,KAAM,EACN,OAAQ,OAAA,CACT,EA0GG,OAxGJC,EAAAA,UAAU,IAAM,CACd,GAAI,CAAChB,GAAU,CAACG,EAAY,MAAO,OAEnC,MAAMc,EAAWjB,EAASkB,EAAAA,WAAWlB,CAAM,EAAIG,EAAY,QAC3D,GAAI,CAACc,EAAS,OAER,MAAAE,EAAeC,GAAsB,CACzC,KAAM,CAAE,KAAAC,EAAM,IAAAC,GAAQL,EAAQ,sBAAsB,EAC9CM,EAAmBF,EAAO,OAAO,QACjCG,EAAmBF,EAAM,OAAO,QAEhCG,EAAY,IAEdlB,EAAkB,YACjBA,EAAkB,MAAM,OAASA,EAAkB,MAAM,OAE5B,oBACzB,QAGHmB,EAAU,IAAM,CAEpB,GADeD,EAAU,IACV,oBAAqB,CAC9Bf,IAAAA,EACI,OAAAL,EAAkB,MAAM,gBAAiB,CAC/C,IAAK,oBACHK,EAAQH,EAAkB,MAAM,MAAS,GACzC,MACF,IAAK,sBACHG,EAAQ,CAACH,EAAkB,MAAM,MAAS,GAC1C,MACF,IAAK,mBACHG,EAAQ,CAACH,EAAkB,MAAM,KAAQ,GACzC,MACF,IAAK,qBACHG,EAAQH,EAAkB,MAAM,KAAQ,GACxC,MACF,QACEG,EAAQ,CAACH,EAAkB,MAAM,KAAQ,EAAA,CAE7C,OAAOE,EAA4BC,CAAK,CAAA,KACnC,CACC,MAAAiB,EAAIP,EAAM,MAAQI,EAClBI,EAASX,EAAQ,sBAAA,EAAwB,OACzCP,EAAQ,EAAEiB,EAAIC,EAAS,GAAKA,EAClC,OAAOhB,EAAgBF,CAAK,CAAA,CAEhC,EAEMmB,EAAU,IAAM,CAEpB,GADeJ,EAAU,IACV,oBAAqB,CAC9Bf,IAAAA,EACI,OAAAL,EAAkB,MAAM,gBAAiB,CAC/C,IAAK,oBACHK,EAAQH,EAAkB,MAAM,KAAQ,GACxC,MACF,IAAK,sBACHG,EAAQ,CAACH,EAAkB,MAAM,KAAQ,GACzC,MACF,IAAK,mBACHG,EAAQH,EAAkB,MAAM,MAAS,GACzC,MACF,IAAK,qBACHG,EAAQ,CAACH,EAAkB,MAAM,MAAS,GAC1C,MACF,QACEG,EAAQH,EAAkB,MAAM,MAAS,EAAA,CAE7C,OAAOI,EAA4BD,CAAK,CAAA,KACnC,CACC,MAAAoB,EAAIV,EAAM,MAAQG,EAClBQ,EAAQd,EAAQ,sBAAA,EAAwB,MACxCP,GAASoB,EAAIC,EAAQ,GAAKA,EAChC,OAAOlB,EAAgBH,CAAK,CAAA,CAEhC,EAEMsB,EAASP,EAAU,EACnBQ,EAAOP,EAAQ,EACfQ,EAAOL,EAAQ,EAEZf,EAAA,CACP,KAAAmB,EACA,OAAAD,EACA,KAAAE,CAAA,CACD,CACH,EAES,gBAAA,iBAAiB,YAAaf,CAAW,EAC3C,IAAM,CACF,SAAA,oBAAoB,YAAaA,CAAW,CACvD,CAAA,EACC,CACDnB,EACAG,EAAY,MACZE,EAAkB,MAAM,MACxBA,EAAkB,MAAM,gBACxBE,EAAkB,MAAM,MACxBA,EAAkB,MAAM,KACxBA,EAAkB,MAAM,MACxBA,EAAkB,MAAM,QAAA,CACzB,EAEGP,EAAe,CAAE,MAAAU,CAAM,EAEpB,CACL,IAAKP,EACL,MAAAO,CACF,CACF"}
1
+ {"version":3,"file":"useParallax.cjs","sources":["../../../../src/hooks/useParallax/useParallax.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 { useDeviceOrientation } from '../useDeviceOrientation/useDeviceOrientation';\nimport { useRefState } from '../useRefState/useRefState';\nimport { useScreenOrientation } from '../useScreenOrientation/useScreenOrientation';\n\n/** The use parallax value type */\nexport interface UseParallaxValue {\n /** Roll value. Scaled to `-0.5 ~ 0.5` */\n roll: number;\n /** Sensor source, can be `mouse` or `deviceOrientation` */\n source: 'deviceOrientation' | 'mouse';\n /** Tilt value. Scaled to `-0.5 ~ 0.5` */\n tilt: number;\n}\n\n/** The use parallax options type */\nexport interface UseParallaxOptions {\n /** Device orientation roll adjust function */\n deviceOrientationRollAdjust?: (value: number) => number;\n /** Device orientation tilt adjust function */\n deviceOrientationTiltAdjust?: (value: number) => number;\n /** Mouse roll adjust function */\n mouseRollAdjust?: (value: number) => number;\n /** Mouse tilt adjust function */\n mouseTiltAdjust?: (value: number) => number;\n}\n\ninterface UseParallaxReturn {\n value: UseParallaxValue;\n}\n\nexport interface UseParallax {\n (target: HookTarget, options?: UseParallaxOptions): UseParallaxReturn;\n\n <Target extends Element>(\n options?: UseParallaxOptions,\n target?: never\n ): UseParallaxReturn & {\n ref: StateRef<Target>;\n };\n}\n\n/**\n * @name useParallax\n * @description - Hook to help create parallax effect\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element for the parallax effect\n * @param {UseParallaxOptions} options The options for the parallax effect\n * @returns {UseParallaxReturn} An object of parallax values\n *\n * @example\n * const { value } = useParallax(ref);\n *\n * @overload\n * @template Target The target element for the parallax effect\n * @param {UseParallaxOptions} options The options for the parallax effect\n * @returns {UseParallaxReturn & { ref: StateRef<Target> }} An object of parallax values\n *\n * @example\n * const { ref, value } = useParallax();\n */\nexport const useParallax = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (params[1] ? params[1] : params[0]) as UseParallaxOptions | undefined;\n\n const internalRef = useRefState<Element>();\n\n const screenOrientation = useScreenOrientation();\n const deviceOrientation = useDeviceOrientation();\n\n const {\n deviceOrientationRollAdjust = (value) => value,\n deviceOrientationTiltAdjust = (value) => value,\n mouseRollAdjust = (value) => value,\n mouseTiltAdjust = (value) => value\n } = (options ?? {}) as UseParallaxOptions;\n\n const [value, setValue] = useState({\n roll: 0,\n tilt: 0,\n source: 'mouse'\n });\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const onMouseMove = (event: MouseEvent) => {\n const { left, top } = element.getBoundingClientRect();\n const elementPositionX = left + window.scrollX;\n const elementPositionY = top + window.scrollY;\n\n const getSource = () => {\n const isDeviceOrientation =\n deviceOrientation.supported &&\n (deviceOrientation.value.alpha || deviceOrientation.value.gamma);\n\n if (isDeviceOrientation) return 'deviceOrientation';\n return 'mouse';\n };\n\n const getRoll = () => {\n const source = getSource();\n if (source === 'deviceOrientation') {\n let value: number;\n switch (screenOrientation.value.orientationType) {\n case 'landscape-primary':\n value = deviceOrientation.value.gamma! / 90;\n break;\n case 'landscape-secondary':\n value = -deviceOrientation.value.gamma! / 90;\n break;\n case 'portrait-primary':\n value = -deviceOrientation.value.beta! / 90;\n break;\n case 'portrait-secondary':\n value = deviceOrientation.value.beta! / 90;\n break;\n default:\n value = -deviceOrientation.value.beta! / 90;\n }\n return deviceOrientationRollAdjust(value);\n } else {\n const y = event.pageY - elementPositionY;\n const height = element.getBoundingClientRect().height;\n const value = -(y - height / 2) / height;\n return mouseRollAdjust(value);\n }\n };\n\n const getTilt = () => {\n const source = getSource();\n if (source === 'deviceOrientation') {\n let value: number;\n switch (screenOrientation.value.orientationType) {\n case 'landscape-primary':\n value = deviceOrientation.value.beta! / 90;\n break;\n case 'landscape-secondary':\n value = -deviceOrientation.value.beta! / 90;\n break;\n case 'portrait-primary':\n value = deviceOrientation.value.gamma! / 90;\n break;\n case 'portrait-secondary':\n value = -deviceOrientation.value.gamma! / 90;\n break;\n default:\n value = deviceOrientation.value.gamma! / 90;\n }\n return deviceOrientationTiltAdjust(value);\n } else {\n const x = event.pageX - elementPositionX;\n const width = element.getBoundingClientRect().width;\n const value = (x - width / 2) / width;\n return mouseTiltAdjust(value);\n }\n };\n\n const source = getSource();\n const roll = getRoll();\n const tilt = getTilt();\n\n setValue({\n roll,\n source,\n tilt\n });\n };\n\n document.addEventListener('mousemove', onMouseMove);\n return () => {\n document.removeEventListener('mousemove', onMouseMove);\n };\n }, [\n target,\n internalRef.state,\n screenOrientation.value.angle,\n screenOrientation.value.orientationType,\n deviceOrientation.value.gamma,\n deviceOrientation.value.beta,\n deviceOrientation.value.alpha,\n deviceOrientation.value.absolute\n ]);\n\n if (target) return { value };\n\n return {\n ref: internalRef,\n value\n };\n}) as UseParallax;\n"],"names":["useParallax","params","target","isTarget","options","internalRef","useRefState","screenOrientation","useScreenOrientation","deviceOrientation","useDeviceOrientation","deviceOrientationRollAdjust","value","deviceOrientationTiltAdjust","mouseRollAdjust","mouseTiltAdjust","setValue","useState","useEffect","element","getElement","onMouseMove","event","left","top","elementPositionX","elementPositionY","getSource","getRoll","y","height","getTilt","x","width","source","roll","tilt"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),a=(u,o)=>{const r=typeof window<"u"&&typeof PerformanceObserver<"u",[v,b]=n.useState([]),s=n.useRef(null),t=n.useRef(o);t.current=o;const c=()=>{if(!r)return;const e=new PerformanceObserver((i,m)=>{var d;b(i.getEntries()),(d=t.current)==null||d.call(t,i,m)});e.observe(u),s.current=e},f=()=>{var e;r&&((e=s.current)==null||e.disconnect(),s.current=null)};return n.useEffect(()=>{if(r)return u.immediate&&c(),()=>{f()}},[]),{supported:r,entries:v,start:c,stop:f}};exports.usePerformanceObserver=a;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("react"),l=(n,s)=>{const e=typeof window<"u"&&typeof PerformanceObserver<"u",[a,d]=r.useState([]),t=r.useRef(null),u=r.useRef(s);u.current=s;const o=()=>{if(!e)return;const f=new PerformanceObserver((i,b)=>{d(i.getEntries()),u.current?.(i,b)});f.observe(n),t.current=f},c=()=>{e&&(t.current?.disconnect(),t.current=null)};return r.useEffect(()=>{if(e)return n.immediate&&o(),()=>{c()}},[]),{supported:e,entries:a,start:o,stop:c}};exports.usePerformanceObserver=l;
2
2
  //# sourceMappingURL=usePerformanceObserver.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePerformanceObserver.cjs","sources":["../../../../src/hooks/usePerformanceObserver/usePerformanceObserver.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use performance observer options type */\nexport type UsePerformanceObserverOptions = PerformanceObserverInit & {\n /** Whether to start the observer immediately */\n immediate?: boolean;\n};\n\n/**\n * @name usePerformanceObserver\n * @description - Hook that allows you to observe performance entries\n * @category Sensors\n *\n * @browserapi PerformanceObserver https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver\n *\n * @param {UsePerformanceObserverOptions} options The options for the performance observer\n * @param {PerformanceObserverCallback} callback The function to handle performance entries\n * @returns {object} An object containing the observer's support status and methods to start and stop the observer\n *\n * @example\n * const { supported, entries, start, stop } = usePerformanceObserver();\n */\nexport const usePerformanceObserver = (\n options: UsePerformanceObserverOptions,\n callback?: PerformanceObserverCallback\n) => {\n const supported = typeof window !== 'undefined' && typeof PerformanceObserver !== 'undefined';\n const [entries, setEntries] = useState<PerformanceEntry[]>([]);\n\n const observerRef = useRef<PerformanceObserver | null>(null);\n const internalCallback = useRef<PerformanceObserverCallback | null>(callback);\n internalCallback.current = callback;\n\n const start = () => {\n if (!supported) return;\n const observer = new PerformanceObserver((entryList, observer) => {\n setEntries(entryList.getEntries());\n internalCallback.current?.(entryList, observer);\n });\n observer.observe(options);\n observerRef.current = observer;\n };\n\n const stop = () => {\n if (!supported) return;\n observerRef.current?.disconnect();\n observerRef.current = null;\n };\n\n useEffect(() => {\n if (!supported) return;\n if (options.immediate) start();\n\n return () => {\n stop();\n };\n }, []);\n\n return { supported, entries, start, stop };\n};\n"],"names":["usePerformanceObserver","options","callback","supported","entries","setEntries","useState","observerRef","useRef","internalCallback","start","observer","entryList","_a","stop","useEffect"],"mappings":"yGAsBaA,EAAyB,CACpCC,EACAC,IACG,CACH,MAAMC,EAAY,OAAO,OAAW,KAAe,OAAO,oBAAwB,IAC5E,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAA6B,CAAA,CAAE,EAEvDC,EAAcC,SAAmC,IAAI,EACrDC,EAAmBD,SAA2CN,CAAQ,EAC5EO,EAAiB,QAAUP,EAE3B,MAAMQ,EAAQ,IAAM,CAClB,GAAI,CAACP,EAAW,OAChB,MAAMQ,EAAW,IAAI,oBAAoB,CAACC,EAAWD,IAAa,OACrDN,EAAAO,EAAU,YAAY,GAChBC,EAAAJ,EAAA,UAAA,MAAAI,EAAA,KAAAJ,EAAUG,EAAWD,EAAQ,CAC/C,EACDA,EAAS,QAAQV,CAAO,EACxBM,EAAY,QAAUI,CACxB,EAEMG,EAAO,IAAM,OACZX,KACLU,EAAAN,EAAY,UAAZ,MAAAM,EAAqB,aACrBN,EAAY,QAAU,KACxB,EAEAQ,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAKZ,EACD,OAAAF,EAAQ,WAAiBS,EAAA,EAEtB,IAAM,CACNI,EAAA,CACP,CACF,EAAG,EAAE,EAEE,CAAE,UAAAX,EAAW,QAAAC,EAAS,MAAAM,EAAO,KAAAI,CAAK,CAC3C"}
1
+ {"version":3,"file":"usePerformanceObserver.cjs","sources":["../../../../src/hooks/usePerformanceObserver/usePerformanceObserver.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\n/** The use performance observer options type */\nexport type UsePerformanceObserverOptions = PerformanceObserverInit & {\n /** Whether to start the observer immediately */\n immediate?: boolean;\n};\n\n/**\n * @name usePerformanceObserver\n * @description - Hook that allows you to observe performance entries\n * @category Sensors\n *\n * @browserapi PerformanceObserver https://developer.mozilla.org/en-US/docs/Web/API/PerformanceObserver\n *\n * @param {UsePerformanceObserverOptions} options The options for the performance observer\n * @param {PerformanceObserverCallback} callback The function to handle performance entries\n * @returns {object} An object containing the observer's support status and methods to start and stop the observer\n *\n * @example\n * const { supported, entries, start, stop } = usePerformanceObserver();\n */\nexport const usePerformanceObserver = (\n options: UsePerformanceObserverOptions,\n callback?: PerformanceObserverCallback\n) => {\n const supported = typeof window !== 'undefined' && typeof PerformanceObserver !== 'undefined';\n const [entries, setEntries] = useState<PerformanceEntry[]>([]);\n\n const observerRef = useRef<PerformanceObserver | null>(null);\n const internalCallback = useRef<PerformanceObserverCallback | null>(callback);\n internalCallback.current = callback;\n\n const start = () => {\n if (!supported) return;\n const observer = new PerformanceObserver((entryList, observer) => {\n setEntries(entryList.getEntries());\n internalCallback.current?.(entryList, observer);\n });\n observer.observe(options);\n observerRef.current = observer;\n };\n\n const stop = () => {\n if (!supported) return;\n observerRef.current?.disconnect();\n observerRef.current = null;\n };\n\n useEffect(() => {\n if (!supported) return;\n if (options.immediate) start();\n\n return () => {\n stop();\n };\n }, []);\n\n return { supported, entries, start, stop };\n};\n"],"names":["usePerformanceObserver","options","callback","supported","entries","setEntries","useState","observerRef","useRef","internalCallback","start","observer","entryList","stop","useEffect"],"mappings":"yGAsBaA,EAAyB,CACpCC,EACAC,IACG,CACH,MAAMC,EAAY,OAAO,OAAW,KAAe,OAAO,oBAAwB,IAC5E,CAACC,EAASC,CAAU,EAAIC,EAAAA,SAA6B,CAAA,CAAE,EAEvDC,EAAcC,EAAAA,OAAmC,IAAI,EACrDC,EAAmBD,EAAAA,OAA2CN,CAAQ,EAC5EO,EAAiB,QAAUP,EAE3B,MAAMQ,EAAQ,IAAM,CAClB,GAAI,CAACP,EAAW,OAChB,MAAMQ,EAAW,IAAI,oBAAoB,CAACC,EAAWD,IAAa,CAChEN,EAAWO,EAAU,YAAY,EACjCH,EAAiB,UAAUG,EAAWD,CAAQ,CAAA,CAC/C,EACDA,EAAS,QAAQV,CAAO,EACxBM,EAAY,QAAUI,CAAA,EAGlBE,EAAO,IAAM,CACZV,IACLI,EAAY,SAAS,WAAA,EACrBA,EAAY,QAAU,KAAA,EAGxBO,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAKX,EACL,OAAIF,EAAQ,WAAWS,EAAA,EAEhB,IAAM,CACXG,EAAA,CAAK,CACP,EACC,EAAE,EAEE,CAAE,UAAAV,EAAW,QAAAC,EAAS,MAAAM,EAAO,KAAAG,CAAA,CACtC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),d=require("../useEvent/useEvent.cjs"),m=(r,t)=>{const n=typeof navigator<"u"&&"permissions"in navigator,[o,s]=u.useState("prompt"),a=(t==null?void 0:t.enabled)??!0,c={name:r},e=d.useEvent(async()=>{try{const i=await navigator.permissions.query(c);return s(i.state),i.state}catch{return s("prompt"),"prompt"}});return u.useEffect(()=>{if(!(!n||!a))return e(),window.addEventListener("change",e),()=>{window.removeEventListener("change",e)}},[r,a]),{state:o,supported:n,query:e}};exports.usePermission=m;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const i=require("react"),p=require("../useEvent/useEvent.cjs"),d=(t,a)=>{const n=typeof navigator<"u"&&"permissions"in navigator,[u,r]=i.useState("prompt"),s=a?.enabled??!0,c={name:t},e=p.useEvent(async()=>{try{const o=await navigator.permissions.query(c);return r(o.state),o.state}catch{return r("prompt"),"prompt"}});return i.useEffect(()=>{if(!(!n||!s))return e(),window.addEventListener("change",e),()=>{window.removeEventListener("change",e)}},[t,s]),{state:u,supported:n,query:e}};exports.usePermission=d;
2
2
  //# sourceMappingURL=usePermission.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"usePermission.cjs","sources":["../../../../src/hooks/usePermission/usePermission.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { useEvent } from '../useEvent/useEvent';\n\n/** The permission name */\nexport type UsePermissionName =\n | 'accelerometer'\n | 'accessibility-events'\n | 'ambient-light-sensor'\n | 'background-sync'\n | 'camera'\n | 'clipboard-read'\n | 'clipboard-write'\n | 'gyroscope'\n | 'magnetometer'\n | 'microphone'\n | 'notifications'\n | 'payment-handler'\n | 'persistent-storage'\n | 'push'\n | 'speaker'\n | PermissionName;\n\n/** The use permission options type */\nexport interface UsePermissionOptions {\n /** Whether the permission is enabled */\n enabled: boolean;\n}\n\n/** The use permission return type */\nexport interface UsePermissionReturn {\n /** The permission state */\n state: PermissionState;\n /** The permission supported status */\n supported: boolean;\n /** The permission query function */\n query: () => Promise<PermissionState>;\n}\n\n/**\n * @name usePermission\n * @description - Hook that gives you the state of permission\n * @category Browser\n *\n * @browserapi navigator.permissions https://developer.mozilla.org/en-US/docs/Web/API/Navigator/permissions\n *\n * @param {UsePermissionName} permissionDescriptorName - The permission name\n * @param {boolean} [options.enabled=true] - Whether the permission is enabled\n * @returns {UsePermissionReturn} An object containing the state and the supported status\n *\n * @example\n * const { state, supported, query } = usePermission('microphone');\n */\nexport const usePermission = (\n permissionDescriptorName: UsePermissionName,\n options?: UsePermissionOptions\n) => {\n const supported = typeof navigator !== 'undefined' && 'permissions' in navigator;\n const [state, setState] = useState<PermissionState>('prompt');\n const enabled = options?.enabled ?? true;\n\n const permissionDescriptor = { name: permissionDescriptorName };\n\n const query = useEvent(async () => {\n try {\n const permissionStatus = await navigator.permissions.query(\n permissionDescriptor as PermissionDescriptor\n );\n setState(permissionStatus.state);\n return permissionStatus.state;\n } catch {\n setState('prompt');\n return 'prompt';\n }\n });\n\n useEffect(() => {\n if (!supported || !enabled) return;\n query();\n window.addEventListener('change', query);\n return () => {\n window.removeEventListener('change', query);\n };\n }, [permissionDescriptorName, enabled]);\n\n return {\n state,\n supported,\n query\n };\n};\n"],"names":["usePermission","permissionDescriptorName","options","supported","state","setState","useState","enabled","permissionDescriptor","query","useEvent","permissionStatus","useEffect"],"mappings":"+IAqDaA,EAAgB,CAC3BC,EACAC,IACG,CACH,MAAMC,EAAY,OAAO,UAAc,KAAe,gBAAiB,UACjE,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAA0B,QAAQ,EACtDC,GAAUL,GAAA,YAAAA,EAAS,UAAW,GAE9BM,EAAuB,CAAE,KAAMP,CAAyB,EAExDQ,EAAQC,EAAAA,SAAS,SAAY,CAC7B,GAAA,CACI,MAAAC,EAAmB,MAAM,UAAU,YAAY,MACnDH,CACF,EACA,OAAAH,EAASM,EAAiB,KAAK,EACxBA,EAAiB,KAAA,MAClB,CACN,OAAAN,EAAS,QAAQ,EACV,QAAA,CACT,CACD,EAEDO,OAAAA,EAAAA,UAAU,IAAM,CACV,GAAA,GAACT,GAAa,CAACI,GACb,OAAAE,EAAA,EACC,OAAA,iBAAiB,SAAUA,CAAK,EAChC,IAAM,CACJ,OAAA,oBAAoB,SAAUA,CAAK,CAC5C,CAAA,EACC,CAACR,EAA0BM,CAAO,CAAC,EAE/B,CACL,MAAAH,EACA,UAAAD,EACA,MAAAM,CACF,CACF"}
1
+ {"version":3,"file":"usePermission.cjs","sources":["../../../../src/hooks/usePermission/usePermission.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nimport { useEvent } from '../useEvent/useEvent';\n\n/** The permission name */\nexport type UsePermissionName =\n | 'accelerometer'\n | 'accessibility-events'\n | 'ambient-light-sensor'\n | 'background-sync'\n | 'camera'\n | 'clipboard-read'\n | 'clipboard-write'\n | 'gyroscope'\n | 'magnetometer'\n | 'microphone'\n | 'notifications'\n | 'payment-handler'\n | 'persistent-storage'\n | 'push'\n | 'speaker'\n | PermissionName;\n\n/** The use permission options type */\nexport interface UsePermissionOptions {\n /** Whether the permission is enabled */\n enabled: boolean;\n}\n\n/** The use permission return type */\nexport interface UsePermissionReturn {\n /** The permission state */\n state: PermissionState;\n /** The permission supported status */\n supported: boolean;\n /** The permission query function */\n query: () => Promise<PermissionState>;\n}\n\n/**\n * @name usePermission\n * @description - Hook that gives you the state of permission\n * @category Browser\n *\n * @browserapi navigator.permissions https://developer.mozilla.org/en-US/docs/Web/API/Navigator/permissions\n *\n * @param {UsePermissionName} permissionDescriptorName - The permission name\n * @param {boolean} [options.enabled=true] - Whether the permission is enabled\n * @returns {UsePermissionReturn} An object containing the state and the supported status\n *\n * @example\n * const { state, supported, query } = usePermission('microphone');\n */\nexport const usePermission = (\n permissionDescriptorName: UsePermissionName,\n options?: UsePermissionOptions\n) => {\n const supported = typeof navigator !== 'undefined' && 'permissions' in navigator;\n const [state, setState] = useState<PermissionState>('prompt');\n const enabled = options?.enabled ?? true;\n\n const permissionDescriptor = { name: permissionDescriptorName };\n\n const query = useEvent(async () => {\n try {\n const permissionStatus = await navigator.permissions.query(\n permissionDescriptor as PermissionDescriptor\n );\n setState(permissionStatus.state);\n return permissionStatus.state;\n } catch {\n setState('prompt');\n return 'prompt';\n }\n });\n\n useEffect(() => {\n if (!supported || !enabled) return;\n query();\n window.addEventListener('change', query);\n return () => {\n window.removeEventListener('change', query);\n };\n }, [permissionDescriptorName, enabled]);\n\n return {\n state,\n supported,\n query\n };\n};\n"],"names":["usePermission","permissionDescriptorName","options","supported","state","setState","useState","enabled","permissionDescriptor","query","useEvent","permissionStatus","useEffect"],"mappings":"+IAqDaA,EAAgB,CAC3BC,EACAC,IACG,CACH,MAAMC,EAAY,OAAO,UAAc,KAAe,gBAAiB,UACjE,CAACC,EAAOC,CAAQ,EAAIC,EAAAA,SAA0B,QAAQ,EACtDC,EAAUL,GAAS,SAAW,GAE9BM,EAAuB,CAAE,KAAMP,CAAA,EAE/BQ,EAAQC,EAAAA,SAAS,SAAY,CACjC,GAAI,CACF,MAAMC,EAAmB,MAAM,UAAU,YAAY,MACnDH,CAAA,EAEF,OAAAH,EAASM,EAAiB,KAAK,EACxBA,EAAiB,KAAA,MAClB,CACN,OAAAN,EAAS,QAAQ,EACV,QAAA,CACT,CACD,EAEDO,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,GAACT,GAAa,CAACI,GACnB,OAAAE,EAAA,EACA,OAAO,iBAAiB,SAAUA,CAAK,EAChC,IAAM,CACX,OAAO,oBAAoB,SAAUA,CAAK,CAAA,CAC5C,EACC,CAACR,EAA0BM,CAAO,CAAC,EAE/B,CACL,MAAAH,EACA,UAAAD,EACA,MAAAM,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePointerLock.cjs","sources":["../../../../src/hooks/usePointerLock/usePointerLock.ts"],"sourcesContent":["import type { MouseEvent } from 'react';\n\nimport { useEffect, useState } from 'react';\n\n/** The use pointer lock return type */\ninterface UsePointerLockReturn {\n /** The pointer lock element */\n element?: Element;\n /** Whether the pointer lock is supported */\n supported: boolean;\n /** Lock the pointer lock */\n lock: (event: MouseEvent) => void;\n /** Unlock the pointer lock */\n unlock: () => boolean;\n}\n\n/**\n * @name usePointerLock\n * @description - Hook that provides reactive pointer lock\n * @category Sensors\n *\n * @browserapi pointerLockElement https://developer.mozilla.org/en-US/docs/Web/API/Document/pointerLockElement\n *\n * @returns {UsePointerLockReturn} An object containing the pointer lock element and functions to interact with the pointer lock\n *\n * @example\n * const { supported, lock, unlock, element } = usePointerLock();\n */\nexport const usePointerLock = (): UsePointerLockReturn => {\n const supported = typeof document !== 'undefined' && 'pointerLockElement' in document;\n const [element, setElement] = useState<Element>();\n\n useEffect(() => {\n if (!supported) return;\n\n const handlePointerLockChange = () => {\n if (!supported) return;\n\n const currentElement = document.pointerLockElement ?? element;\n\n if (currentElement && currentElement === element) {\n setElement(document.pointerLockElement as Element);\n }\n };\n const handlePointerLockError = () => {\n if (!supported) return;\n\n const currentElement = document.pointerLockElement ?? element;\n\n if (currentElement && currentElement === element) {\n const action = document.pointerLockElement ? 'release' : 'acquire';\n\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n };\n\n document.addEventListener('pointerlockchange', handlePointerLockChange);\n document.addEventListener('pointerlockerror', handlePointerLockError);\n\n return () => {\n document.removeEventListener('pointerlockchange', handlePointerLockChange);\n document.removeEventListener('pointerlockerror', handlePointerLockError);\n };\n }, []);\n\n const lock = (event: MouseEvent) => {\n if (!supported) return false;\n\n if (event instanceof Event) return false;\n\n event.currentTarget.requestPointerLock();\n\n setElement(event.currentTarget);\n return true;\n };\n\n const unlock = () => {\n if (!supported) return false;\n\n if (!element) return false;\n\n document.exitPointerLock();\n setElement(undefined);\n\n return true;\n };\n\n return {\n supported,\n element,\n lock,\n unlock\n };\n};\n"],"names":["usePointerLock","supported","element","setElement","useState","useEffect","handlePointerLockChange","currentElement","handlePointerLockError","action","event"],"mappings":"yGA4BaA,EAAiB,IAA4B,CACxD,MAAMC,EAAY,OAAO,SAAa,KAAe,uBAAwB,SACvE,CAACC,EAASC,CAAU,EAAIC,WAAkB,EAEhDC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACJ,EAAW,OAEhB,MAAMK,EAA0B,IAAM,CACpC,GAAI,CAACL,EAAW,OAEV,MAAAM,EAAiB,SAAS,oBAAsBL,EAElDK,GAAkBA,IAAmBL,GACvCC,EAAW,SAAS,kBAA6B,CAErD,EACMK,EAAyB,IAAM,CACnC,GAAI,CAACP,EAAW,OAEV,MAAAM,EAAiB,SAAS,oBAAsBL,EAElD,GAAAK,GAAkBA,IAAmBL,EAAS,CAC1C,MAAAO,EAAS,SAAS,mBAAqB,UAAY,UAEzD,MAAM,IAAI,MAAM,aAAaA,CAAM,gBAAgB,CAAA,CAEvD,EAES,gBAAA,iBAAiB,oBAAqBH,CAAuB,EAC7D,SAAA,iBAAiB,mBAAoBE,CAAsB,EAE7D,IAAM,CACF,SAAA,oBAAoB,oBAAqBF,CAAuB,EAChE,SAAA,oBAAoB,mBAAoBE,CAAsB,CACzE,CACF,EAAG,EAAE,EAwBE,CACL,UAAAP,EACA,QAAAC,EACA,KAzBYQ,GACR,CAACT,GAEDS,aAAiB,MAAc,IAEnCA,EAAM,cAAc,mBAAmB,EAEvCP,EAAWO,EAAM,aAAa,EACvB,IAkBP,OAfa,IACT,CAACT,GAED,CAACC,EAAgB,IAErB,SAAS,gBAAgB,EACzBC,EAAW,MAAS,EAEb,GAQT,CACF"}
1
+ {"version":3,"file":"usePointerLock.cjs","sources":["../../../../src/hooks/usePointerLock/usePointerLock.ts"],"sourcesContent":["import type { MouseEvent } from 'react';\n\nimport { useEffect, useState } from 'react';\n\n/** The use pointer lock return type */\ninterface UsePointerLockReturn {\n /** The pointer lock element */\n element?: Element;\n /** Whether the pointer lock is supported */\n supported: boolean;\n /** Lock the pointer lock */\n lock: (event: MouseEvent) => void;\n /** Unlock the pointer lock */\n unlock: () => boolean;\n}\n\n/**\n * @name usePointerLock\n * @description - Hook that provides reactive pointer lock\n * @category Sensors\n *\n * @browserapi pointerLockElement https://developer.mozilla.org/en-US/docs/Web/API/Document/pointerLockElement\n *\n * @returns {UsePointerLockReturn} An object containing the pointer lock element and functions to interact with the pointer lock\n *\n * @example\n * const { supported, lock, unlock, element } = usePointerLock();\n */\nexport const usePointerLock = (): UsePointerLockReturn => {\n const supported = typeof document !== 'undefined' && 'pointerLockElement' in document;\n const [element, setElement] = useState<Element>();\n\n useEffect(() => {\n if (!supported) return;\n\n const handlePointerLockChange = () => {\n if (!supported) return;\n\n const currentElement = document.pointerLockElement ?? element;\n\n if (currentElement && currentElement === element) {\n setElement(document.pointerLockElement as Element);\n }\n };\n const handlePointerLockError = () => {\n if (!supported) return;\n\n const currentElement = document.pointerLockElement ?? element;\n\n if (currentElement && currentElement === element) {\n const action = document.pointerLockElement ? 'release' : 'acquire';\n\n throw new Error(`Failed to ${action} pointer lock.`);\n }\n };\n\n document.addEventListener('pointerlockchange', handlePointerLockChange);\n document.addEventListener('pointerlockerror', handlePointerLockError);\n\n return () => {\n document.removeEventListener('pointerlockchange', handlePointerLockChange);\n document.removeEventListener('pointerlockerror', handlePointerLockError);\n };\n }, []);\n\n const lock = (event: MouseEvent) => {\n if (!supported) return false;\n\n if (event instanceof Event) return false;\n\n event.currentTarget.requestPointerLock();\n\n setElement(event.currentTarget);\n return true;\n };\n\n const unlock = () => {\n if (!supported) return false;\n\n if (!element) return false;\n\n document.exitPointerLock();\n setElement(undefined);\n\n return true;\n };\n\n return {\n supported,\n element,\n lock,\n unlock\n };\n};\n"],"names":["usePointerLock","supported","element","setElement","useState","useEffect","handlePointerLockChange","currentElement","handlePointerLockError","action","event"],"mappings":"yGA4BaA,EAAiB,IAA4B,CACxD,MAAMC,EAAY,OAAO,SAAa,KAAe,uBAAwB,SACvE,CAACC,EAASC,CAAU,EAAIC,WAAA,EAE9BC,OAAAA,EAAAA,UAAU,IAAM,CACd,GAAI,CAACJ,EAAW,OAEhB,MAAMK,EAA0B,IAAM,CACpC,GAAI,CAACL,EAAW,OAEhB,MAAMM,EAAiB,SAAS,oBAAsBL,EAElDK,GAAkBA,IAAmBL,GACvCC,EAAW,SAAS,kBAA6B,CACnD,EAEIK,EAAyB,IAAM,CACnC,GAAI,CAACP,EAAW,OAEhB,MAAMM,EAAiB,SAAS,oBAAsBL,EAEtD,GAAIK,GAAkBA,IAAmBL,EAAS,CAChD,MAAMO,EAAS,SAAS,mBAAqB,UAAY,UAEzD,MAAM,IAAI,MAAM,aAAaA,CAAM,gBAAgB,CAAA,CACrD,EAGF,gBAAS,iBAAiB,oBAAqBH,CAAuB,EACtE,SAAS,iBAAiB,mBAAoBE,CAAsB,EAE7D,IAAM,CACX,SAAS,oBAAoB,oBAAqBF,CAAuB,EACzE,SAAS,oBAAoB,mBAAoBE,CAAsB,CAAA,CACzE,EACC,EAAE,EAwBE,CACL,UAAAP,EACA,QAAAC,EACA,KAzBYQ,GACR,CAACT,GAEDS,aAAiB,MAAc,IAEnCA,EAAM,cAAc,mBAAA,EAEpBP,EAAWO,EAAM,aAAa,EACvB,IAkBP,OAfa,IACT,CAACT,GAED,CAACC,EAAgB,IAErB,SAAS,gBAAA,EACTC,EAAW,MAAS,EAEb,GAOP,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePostMessage.cjs","sources":["../../../../src/hooks/usePostMessage/usePostMessage.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nexport type UsePostMessageReturn<Message> = (message: Message) => void;\n\n/**\n * @name usePostMessage\n * @description - Hook that allows you to receive messages from other origins\n * @category Browser\n *\n * @overload\n * @template Message The message data type\n * @param {string | string[]} origin The origin of the message\n * @param {(message: Message) => Message} callback callback to get received message\n * @returns {(message: Message) => void} An object containing the current message\n *\n * @example\n * const postMessage = usePostMessage();\n */\nexport const usePostMessage = <Message>(\n origin: string | '*' | string[],\n callback: (message: Message, event: MessageEvent<Message>) => void\n): UsePostMessageReturn<Message> => {\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n useEffect(() => {\n const onMessage = (event: MessageEvent<Message>) => {\n if (\n (Array.isArray(origin) && (!origin.includes(event.origin) || !origin.includes('*'))) ||\n (event.origin !== origin && origin !== '*')\n )\n return;\n\n internalCallbackRef.current(event.data as Message, event);\n };\n\n window.addEventListener('message', onMessage);\n return () => window.removeEventListener('message', onMessage);\n }, []);\n\n const postMessage = (message: Message) => {\n if (Array.isArray(origin)) {\n origin.forEach((origin) => window.postMessage(message, origin));\n return;\n }\n\n window.postMessage(message, origin);\n };\n\n return postMessage;\n};\n"],"names":["usePostMessage","origin","callback","internalCallbackRef","useRef","useEffect","onMessage","event","message"],"mappings":"yGAkBaA,EAAiB,CAC5BC,EACAC,IACkC,CAC5B,MAAAC,EAAsBC,SAAOF,CAAQ,EAC3C,OAAAC,EAAoB,QAAUD,EAE9BG,EAAAA,UAAU,IAAM,CACR,MAAAC,EAAaC,GAAiC,CAE/C,MAAM,QAAQN,CAAM,IAAM,CAACA,EAAO,SAASM,EAAM,MAAM,GAAK,CAACN,EAAO,SAAS,GAAG,IAChFM,EAAM,SAAWN,GAAUA,IAAW,KAIrBE,EAAA,QAAQI,EAAM,KAAiBA,CAAK,CAC1D,EAEO,cAAA,iBAAiB,UAAWD,CAAS,EACrC,IAAM,OAAO,oBAAoB,UAAWA,CAAS,CAC9D,EAAG,EAAE,EAEgBE,GAAqB,CACpC,GAAA,MAAM,QAAQP,CAAM,EAAG,CACzBA,EAAO,QAASA,GAAW,OAAO,YAAYO,EAASP,CAAM,CAAC,EAC9D,MAAA,CAGK,OAAA,YAAYO,EAASP,CAAM,CACpC,CAGF"}
1
+ {"version":3,"file":"usePostMessage.cjs","sources":["../../../../src/hooks/usePostMessage/usePostMessage.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nexport type UsePostMessageReturn<Message> = (message: Message) => void;\n\n/**\n * @name usePostMessage\n * @description - Hook that allows you to receive messages from other origins\n * @category Browser\n *\n * @overload\n * @template Message The message data type\n * @param {string | string[]} origin The origin of the message\n * @param {(message: Message) => Message} callback callback to get received message\n * @returns {(message: Message) => void} An object containing the current message\n *\n * @example\n * const postMessage = usePostMessage();\n */\nexport const usePostMessage = <Message>(\n origin: string | '*' | string[],\n callback: (message: Message, event: MessageEvent<Message>) => void\n): UsePostMessageReturn<Message> => {\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n useEffect(() => {\n const onMessage = (event: MessageEvent<Message>) => {\n if (\n (Array.isArray(origin) && (!origin.includes(event.origin) || !origin.includes('*'))) ||\n (event.origin !== origin && origin !== '*')\n )\n return;\n\n internalCallbackRef.current(event.data as Message, event);\n };\n\n window.addEventListener('message', onMessage);\n return () => window.removeEventListener('message', onMessage);\n }, []);\n\n const postMessage = (message: Message) => {\n if (Array.isArray(origin)) {\n origin.forEach((origin) => window.postMessage(message, origin));\n return;\n }\n\n window.postMessage(message, origin);\n };\n\n return postMessage;\n};\n"],"names":["usePostMessage","origin","callback","internalCallbackRef","useRef","useEffect","onMessage","event","message"],"mappings":"yGAkBaA,EAAiB,CAC5BC,EACAC,IACkC,CAClC,MAAMC,EAAsBC,EAAAA,OAAOF,CAAQ,EAC3C,OAAAC,EAAoB,QAAUD,EAE9BG,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAaC,GAAiC,CAE/C,MAAM,QAAQN,CAAM,IAAM,CAACA,EAAO,SAASM,EAAM,MAAM,GAAK,CAACN,EAAO,SAAS,GAAG,IAChFM,EAAM,SAAWN,GAAUA,IAAW,KAIzCE,EAAoB,QAAQI,EAAM,KAAiBA,CAAK,CAAA,EAG1D,cAAO,iBAAiB,UAAWD,CAAS,EACrC,IAAM,OAAO,oBAAoB,UAAWA,CAAS,CAAA,EAC3D,EAAE,EAEgBE,GAAqB,CACxC,GAAI,MAAM,QAAQP,CAAM,EAAG,CACzBA,EAAO,QAASA,GAAW,OAAO,YAAYO,EAASP,CAAM,CAAC,EAC9D,MAAA,CAGF,OAAO,YAAYO,EAASP,CAAM,CAAA,CAItC"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePreferredColorScheme.cjs","sources":["../../../../src/hooks/usePreferredColorScheme/usePreferredColorScheme.ts"],"sourcesContent":["import { useMediaQuery } from '../useMediaQuery/useMediaQuery';\n\n/** The use preferred color scheme return type */\nexport type UsePreferredColorSchemeReturn = 'dark' | 'light' | 'no-preference';\n\n/**\n * @name usePreferredColorScheme\n * @description - Hook that returns user preferred color scheme\n * @category Browser\n *\n * @returns {UsePreferredColorSchemeReturn} String of preferred color scheme\n *\n * @example\n * const colorScheme = usePreferredColorScheme();\n */\nexport const usePreferredColorScheme = (): UsePreferredColorSchemeReturn => {\n const isLight = useMediaQuery('(prefers-color-scheme: light)');\n const isDark = useMediaQuery('(prefers-color-scheme: dark)');\n\n if (isLight) return 'light';\n if (isDark) return 'dark';\n return 'no-preference';\n};\n"],"names":["usePreferredColorScheme","isLight","useMediaQuery","isDark"],"mappings":"sIAeaA,EAA0B,IAAqC,CACpE,MAAAC,EAAUC,gBAAc,+BAA+B,EACvDC,EAASD,gBAAc,8BAA8B,EAE3D,OAAID,EAAgB,QAChBE,EAAe,OACZ,eACT"}
1
+ {"version":3,"file":"usePreferredColorScheme.cjs","sources":["../../../../src/hooks/usePreferredColorScheme/usePreferredColorScheme.ts"],"sourcesContent":["import { useMediaQuery } from '../useMediaQuery/useMediaQuery';\n\n/** The use preferred color scheme return type */\nexport type UsePreferredColorSchemeReturn = 'dark' | 'light' | 'no-preference';\n\n/**\n * @name usePreferredColorScheme\n * @description - Hook that returns user preferred color scheme\n * @category Browser\n *\n * @returns {UsePreferredColorSchemeReturn} String of preferred color scheme\n *\n * @example\n * const colorScheme = usePreferredColorScheme();\n */\nexport const usePreferredColorScheme = (): UsePreferredColorSchemeReturn => {\n const isLight = useMediaQuery('(prefers-color-scheme: light)');\n const isDark = useMediaQuery('(prefers-color-scheme: dark)');\n\n if (isLight) return 'light';\n if (isDark) return 'dark';\n return 'no-preference';\n};\n"],"names":["usePreferredColorScheme","isLight","useMediaQuery","isDark"],"mappings":"sIAeaA,EAA0B,IAAqC,CAC1E,MAAMC,EAAUC,EAAAA,cAAc,+BAA+B,EACvDC,EAASD,EAAAA,cAAc,8BAA8B,EAE3D,OAAID,EAAgB,QAChBE,EAAe,OACZ,eACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePreferredContrast.cjs","sources":["../../../../src/hooks/usePreferredContrast/usePreferredContrast.ts"],"sourcesContent":["import { useMediaQuery } from '../useMediaQuery/useMediaQuery';\n\n/** The use preferred contrast return type */\nexport type UsePreferredContrastReturn = 'custom' | 'less' | 'more' | 'no-preference';\n\n/**\n * @name usePreferredContrast\n * @description - Hook that returns the contrast preference\n * @category Browser\n *\n * @returns {UsePreferredContrastReturn} The contrast preference\n *\n * @example\n * const contrast = usePreferredContrast();\n */\nexport const usePreferredContrast = (): UsePreferredContrastReturn => {\n const more = useMediaQuery('(prefers-contrast: more)');\n const less = useMediaQuery('(prefers-contrast: less)');\n const custom = useMediaQuery('(prefers-contrast: custom)');\n return more ? 'more' : less ? 'less' : custom ? 'custom' : 'no-preference';\n};\n"],"names":["usePreferredContrast","more","useMediaQuery","less","custom"],"mappings":"sIAeaA,EAAuB,IAAkC,CAC9D,MAAAC,EAAOC,gBAAc,0BAA0B,EAC/CC,EAAOD,gBAAc,0BAA0B,EAC/CE,EAASF,gBAAc,4BAA4B,EACzD,OAAOD,EAAO,OAASE,EAAO,OAASC,EAAS,SAAW,eAC7D"}
1
+ {"version":3,"file":"usePreferredContrast.cjs","sources":["../../../../src/hooks/usePreferredContrast/usePreferredContrast.ts"],"sourcesContent":["import { useMediaQuery } from '../useMediaQuery/useMediaQuery';\n\n/** The use preferred contrast return type */\nexport type UsePreferredContrastReturn = 'custom' | 'less' | 'more' | 'no-preference';\n\n/**\n * @name usePreferredContrast\n * @description - Hook that returns the contrast preference\n * @category Browser\n *\n * @returns {UsePreferredContrastReturn} The contrast preference\n *\n * @example\n * const contrast = usePreferredContrast();\n */\nexport const usePreferredContrast = (): UsePreferredContrastReturn => {\n const more = useMediaQuery('(prefers-contrast: more)');\n const less = useMediaQuery('(prefers-contrast: less)');\n const custom = useMediaQuery('(prefers-contrast: custom)');\n return more ? 'more' : less ? 'less' : custom ? 'custom' : 'no-preference';\n};\n"],"names":["usePreferredContrast","more","useMediaQuery","less","custom"],"mappings":"sIAeaA,EAAuB,IAAkC,CACpE,MAAMC,EAAOC,EAAAA,cAAc,0BAA0B,EAC/CC,EAAOD,EAAAA,cAAc,0BAA0B,EAC/CE,EAASF,EAAAA,cAAc,4BAA4B,EACzD,OAAOD,EAAO,OAASE,EAAO,OAASC,EAAS,SAAW,eAC7D"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePreferredLanguages.cjs","sources":["../../../../src/hooks/usePreferredLanguages/usePreferredLanguages.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\nconst getSnapshot = () => window.navigator.languages;\nconst getServerSnapshot = () => [] as const;\nconst subscribe = (callback: () => void) => {\n window.addEventListener('languagechange', callback);\n return () => {\n window.removeEventListener('languagechange', callback);\n };\n};\n\n/**\n * @name usePreferredLanguages\n * @description Hook that returns a browser preferred languages from navigator\n * @category Browser\n *\n * @browserapi navigator.languages https://developer.mozilla.org/en-US/docs/Web/API/Navigator/languages\n *\n * @returns {readonly string[]} An array of strings representing the user's preferred languages\n *\n * @example\n * const languages = usePreferredLanguages();\n */\nexport const usePreferredLanguages = () =>\n useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n"],"names":["getSnapshot","getServerSnapshot","subscribe","callback","usePreferredLanguages","useSyncExternalStore"],"mappings":"yGAEMA,EAAc,IAAM,OAAO,UAAU,UACrCC,EAAoB,IAAM,CAAC,EAC3BC,EAAaC,IACV,OAAA,iBAAiB,iBAAkBA,CAAQ,EAC3C,IAAM,CACJ,OAAA,oBAAoB,iBAAkBA,CAAQ,CACvD,GAeWC,EAAwB,IACnCC,EAAAA,qBAAqBH,EAAWF,EAAaC,CAAiB"}
1
+ {"version":3,"file":"usePreferredLanguages.cjs","sources":["../../../../src/hooks/usePreferredLanguages/usePreferredLanguages.ts"],"sourcesContent":["import { useSyncExternalStore } from 'react';\n\nconst getSnapshot = () => window.navigator.languages;\nconst getServerSnapshot = () => [] as const;\nconst subscribe = (callback: () => void) => {\n window.addEventListener('languagechange', callback);\n return () => {\n window.removeEventListener('languagechange', callback);\n };\n};\n\n/**\n * @name usePreferredLanguages\n * @description Hook that returns a browser preferred languages from navigator\n * @category Browser\n *\n * @browserapi navigator.languages https://developer.mozilla.org/en-US/docs/Web/API/Navigator/languages\n *\n * @returns {readonly string[]} An array of strings representing the user's preferred languages\n *\n * @example\n * const languages = usePreferredLanguages();\n */\nexport const usePreferredLanguages = () =>\n useSyncExternalStore(subscribe, getSnapshot, getServerSnapshot);\n"],"names":["getSnapshot","getServerSnapshot","subscribe","callback","usePreferredLanguages","useSyncExternalStore"],"mappings":"yGAEMA,EAAc,IAAM,OAAO,UAAU,UACrCC,EAAoB,IAAM,CAAA,EAC1BC,EAAaC,IACjB,OAAO,iBAAiB,iBAAkBA,CAAQ,EAC3C,IAAM,CACX,OAAO,oBAAoB,iBAAkBA,CAAQ,CAAA,GAgB5CC,EAAwB,IACnCC,EAAAA,qBAAqBH,EAAWF,EAAaC,CAAiB"}
@@ -1 +1 @@
1
- {"version":3,"file":"usePreferredReducedMotion.cjs","sources":["../../../../src/hooks/usePreferredReducedMotion/usePreferredReducedMotion.ts"],"sourcesContent":["import { useMediaQuery } from '../useMediaQuery/useMediaQuery';\n\n/** The use preferred reduced motion return type */\nexport type UsePreferredReducedMotionReturn = 'no-preference' | 'reduce';\n\n/**\n * @name usePreferredReducedMotion\n * @description - Hook that returns the reduced motion preference\n * @category Browser\n *\n * @returns {UsePreferredReducedMotionReturn} The reduced motion preference\n *\n * @example\n * const reduced = usePreferredReducedMotion();\n */\nexport const usePreferredReducedMotion = (): UsePreferredReducedMotionReturn => {\n const reduced = useMediaQuery('(prefers-reduced-motion: reduce)');\n return reduced ? 'reduce' : 'no-preference';\n};\n"],"names":["usePreferredReducedMotion","useMediaQuery"],"mappings":"sIAeaA,EAA4B,IACvBC,gBAAc,kCAAkC,EAC/C,SAAW"}
1
+ {"version":3,"file":"usePreferredReducedMotion.cjs","sources":["../../../../src/hooks/usePreferredReducedMotion/usePreferredReducedMotion.ts"],"sourcesContent":["import { useMediaQuery } from '../useMediaQuery/useMediaQuery';\n\n/** The use preferred reduced motion return type */\nexport type UsePreferredReducedMotionReturn = 'no-preference' | 'reduce';\n\n/**\n * @name usePreferredReducedMotion\n * @description - Hook that returns the reduced motion preference\n * @category Browser\n *\n * @returns {UsePreferredReducedMotionReturn} The reduced motion preference\n *\n * @example\n * const reduced = usePreferredReducedMotion();\n */\nexport const usePreferredReducedMotion = (): UsePreferredReducedMotionReturn => {\n const reduced = useMediaQuery('(prefers-reduced-motion: reduce)');\n return reduced ? 'reduce' : 'no-preference';\n};\n"],"names":["usePreferredReducedMotion","useMediaQuery"],"mappings":"sIAeaA,EAA4B,IACvBC,EAAAA,cAAc,kCAAkC,EAC/C,SAAW"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("react"),s=(e,r)=>{const t=c.useRef(e),u=c.useRef(void 0);return((r==null?void 0:r.equality)??Object.is)(e,t.current)||(u.current=t.current,t.current=e),u.current};exports.usePrevious=s;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const u=require("react"),s=(e,c)=>{const r=u.useRef(e),t=u.useRef(void 0);return(c?.equality??Object.is)(e,r.current)||(t.current=r.current,r.current=e),t.current};exports.usePrevious=s;
2
2
  //# sourceMappingURL=usePrevious.cjs.map