@siberiacancode/reactuse 0.2.24 → 0.2.26

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 (281) hide show
  1. package/dist/cjs/helpers/createStore/createStore.cjs +1 -1
  2. package/dist/cjs/helpers/createStore/createStore.cjs.map +1 -1
  3. package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs +1 -1
  4. package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs.map +1 -1
  5. package/dist/cjs/hooks/useAsync/useAsync.cjs.map +1 -1
  6. package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs +1 -1
  7. package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs.map +1 -1
  8. package/dist/cjs/hooks/useBoolean/useBoolean.cjs.map +1 -1
  9. package/dist/cjs/hooks/useBrowserLanguage/useBrowserLanguage.cjs.map +1 -1
  10. package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
  11. package/dist/cjs/hooks/useCookie/useCookie.cjs.map +1 -1
  12. package/dist/cjs/hooks/useCookies/useCookies.cjs.map +1 -1
  13. package/dist/cjs/hooks/useCounter/useCounter.cjs.map +1 -1
  14. package/dist/cjs/hooks/useCssVar/useCssVar.cjs +1 -1
  15. package/dist/cjs/hooks/useCssVar/useCssVar.cjs.map +1 -1
  16. package/dist/cjs/hooks/useDefault/useDefault.cjs.map +1 -1
  17. package/dist/cjs/hooks/useDisclosure/useDisclosure.cjs.map +1 -1
  18. package/dist/cjs/hooks/useDisplayMedia/useDisplayMedia.cjs.map +1 -1
  19. package/dist/cjs/hooks/useDocumentTitle/useDocumentTitle.cjs.map +1 -1
  20. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs.map +1 -1
  21. package/dist/cjs/hooks/useElementSize/useElementSize.cjs.map +1 -1
  22. package/dist/cjs/hooks/useEvent/useEvent.cjs.map +1 -1
  23. package/dist/cjs/hooks/useEventSource/useEventSource.cjs.map +1 -1
  24. package/dist/cjs/hooks/useField/useField.cjs.map +1 -1
  25. package/dist/cjs/hooks/useFileDialog/useFileDialog.cjs.map +1 -1
  26. package/dist/cjs/hooks/useFocus/useFocus.cjs.map +1 -1
  27. package/dist/cjs/hooks/useFps/useFps.cjs.map +1 -1
  28. package/dist/cjs/hooks/useHash/useHash.cjs.map +1 -1
  29. package/dist/cjs/hooks/useHover/useHover.cjs.map +1 -1
  30. package/dist/cjs/hooks/useImage/useImage.cjs.map +1 -1
  31. package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs +1 -1
  32. package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs.map +1 -1
  33. package/dist/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs +1 -1
  34. package/dist/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs.map +1 -1
  35. package/dist/cjs/hooks/useLastChanged/useLastChanged.cjs.map +1 -1
  36. package/dist/cjs/hooks/useList/useList.cjs.map +1 -1
  37. package/dist/cjs/hooks/useLocalStorage/useLocalStorage.cjs.map +1 -1
  38. package/dist/cjs/hooks/useLockCallback/useLockCallback.cjs.map +1 -1
  39. package/dist/cjs/hooks/useLockScroll/useLockScroll.cjs +2 -0
  40. package/dist/cjs/hooks/useLockScroll/useLockScroll.cjs.map +1 -0
  41. package/dist/cjs/hooks/useLogger/useLogger.cjs.map +1 -1
  42. package/dist/cjs/hooks/useLongPress/useLongPress.cjs.map +1 -1
  43. package/dist/cjs/hooks/useMap/useMap.cjs.map +1 -1
  44. package/dist/cjs/hooks/useMutation/useMutation.cjs.map +1 -1
  45. package/dist/cjs/hooks/useMutationObserver/useMutationObserver.cjs.map +1 -1
  46. package/dist/cjs/hooks/useNetwork/useNetwork.cjs.map +1 -1
  47. package/dist/cjs/hooks/useOffsetPagination/useOffsetPagination.cjs.map +1 -1
  48. package/dist/cjs/hooks/useOnline/useOnline.cjs.map +1 -1
  49. package/dist/cjs/hooks/useOperatingSystem/useOperatingSystem.cjs.map +1 -1
  50. package/dist/cjs/hooks/useOptimistic/useOptimistic.cjs.map +1 -1
  51. package/dist/cjs/hooks/useOrientation/useOrientation.cjs +1 -1
  52. package/dist/cjs/hooks/useOrientation/useOrientation.cjs.map +1 -1
  53. package/dist/cjs/hooks/usePaint/usePaint.cjs.map +1 -1
  54. package/dist/cjs/hooks/useParallax/useParallax.cjs +1 -1
  55. package/dist/cjs/hooks/useParallax/useParallax.cjs.map +1 -1
  56. package/dist/cjs/hooks/usePointerLock/usePointerLock.cjs.map +1 -1
  57. package/dist/cjs/hooks/usePreferredColorScheme/usePreferredColorScheme.cjs.map +1 -1
  58. package/dist/cjs/hooks/usePreferredContrast/usePreferredContrast.cjs.map +1 -1
  59. package/dist/cjs/hooks/usePreferredDark/usePreferredDark.cjs.map +1 -1
  60. package/dist/cjs/hooks/usePreferredLanguages/usePreferredLanguages.cjs.map +1 -1
  61. package/dist/cjs/hooks/usePreferredReducedMotion/usePreferredReducedMotion.cjs.map +1 -1
  62. package/dist/cjs/hooks/useQuery/useQuery.cjs.map +1 -1
  63. package/dist/cjs/hooks/useQueue/useQueue.cjs.map +1 -1
  64. package/dist/cjs/hooks/useRaf/useRaf.cjs.map +1 -1
  65. package/dist/cjs/hooks/{useRafValue/useRafValue.cjs → useRafState/useRafState.cjs} +2 -2
  66. package/dist/cjs/hooks/useRafState/useRafState.cjs.map +1 -0
  67. package/dist/cjs/hooks/useRefState/useRefState.cjs.map +1 -1
  68. package/dist/cjs/hooks/useRenderCount/useRenderCount.cjs.map +1 -1
  69. package/dist/cjs/hooks/useRenderInfo/useRenderInfo.cjs.map +1 -1
  70. package/dist/cjs/hooks/useRerender/useRerender.cjs.map +1 -1
  71. package/dist/cjs/hooks/useResizeObserver/useResizeObserver.cjs.map +1 -1
  72. package/dist/cjs/hooks/useScript/useScript.cjs.map +1 -1
  73. package/dist/cjs/hooks/useScroll/useScroll.cjs.map +1 -1
  74. package/dist/cjs/hooks/useSessionStorage/useSessionStorage.cjs.map +1 -1
  75. package/dist/cjs/hooks/useSet/useSet.cjs.map +1 -1
  76. package/dist/cjs/hooks/useSpeechRecognition/useSpeechRecognition.cjs.map +1 -1
  77. package/dist/cjs/hooks/useSpeechSynthesis/useSpeechSynthesis.cjs.map +1 -1
  78. package/dist/cjs/hooks/useStateHistory/useStateHistory.cjs.map +1 -1
  79. package/dist/cjs/hooks/useStep/useStep.cjs.map +1 -1
  80. package/dist/cjs/hooks/useSticky/useSticky.cjs.map +1 -1
  81. package/dist/cjs/hooks/useStopwatch/useStopwatch.cjs +1 -1
  82. package/dist/cjs/hooks/useStopwatch/useStopwatch.cjs.map +1 -1
  83. package/dist/cjs/hooks/useStorage/useStorage.cjs.map +1 -1
  84. package/dist/cjs/hooks/useTextDirection/useTextDirection.cjs +1 -1
  85. package/dist/cjs/hooks/useTextDirection/useTextDirection.cjs.map +1 -1
  86. package/dist/cjs/hooks/useToggle/useToggle.cjs.map +1 -1
  87. package/dist/cjs/hooks/useUrlSearchParam/useUrlSearchParam.cjs.map +1 -1
  88. package/dist/cjs/hooks/useUrlSearchParams/useUrlSearchParams.cjs.map +1 -1
  89. package/dist/cjs/hooks/useWindowEvent/useWindowEvent.cjs.map +1 -1
  90. package/dist/cjs/hooks/useWizard/useWizard.cjs.map +1 -1
  91. package/dist/cjs/index.cjs +1 -1
  92. package/dist/esm/helpers/createStore/createStore.mjs +16 -16
  93. package/dist/esm/helpers/createStore/createStore.mjs.map +1 -1
  94. package/dist/esm/hooks/useActiveElement/useActiveElement.mjs +22 -17
  95. package/dist/esm/hooks/useActiveElement/useActiveElement.mjs.map +1 -1
  96. package/dist/esm/hooks/useAsync/useAsync.mjs.map +1 -1
  97. package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs +38 -29
  98. package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs.map +1 -1
  99. package/dist/esm/hooks/useBoolean/useBoolean.mjs.map +1 -1
  100. package/dist/esm/hooks/useBrowserLanguage/useBrowserLanguage.mjs.map +1 -1
  101. package/dist/esm/hooks/useClickOutside/useClickOutside.mjs.map +1 -1
  102. package/dist/esm/hooks/useCookie/useCookie.mjs.map +1 -1
  103. package/dist/esm/hooks/useCookies/useCookies.mjs.map +1 -1
  104. package/dist/esm/hooks/useCounter/useCounter.mjs.map +1 -1
  105. package/dist/esm/hooks/useCssVar/useCssVar.mjs +27 -24
  106. package/dist/esm/hooks/useCssVar/useCssVar.mjs.map +1 -1
  107. package/dist/esm/hooks/useDefault/useDefault.mjs.map +1 -1
  108. package/dist/esm/hooks/useDisclosure/useDisclosure.mjs.map +1 -1
  109. package/dist/esm/hooks/useDisplayMedia/useDisplayMedia.mjs.map +1 -1
  110. package/dist/esm/hooks/useDocumentTitle/useDocumentTitle.mjs +3 -1
  111. package/dist/esm/hooks/useDocumentTitle/useDocumentTitle.mjs.map +1 -1
  112. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs.map +1 -1
  113. package/dist/esm/hooks/useElementSize/useElementSize.mjs.map +1 -1
  114. package/dist/esm/hooks/useEvent/useEvent.mjs.map +1 -1
  115. package/dist/esm/hooks/useEventSource/useEventSource.mjs +3 -1
  116. package/dist/esm/hooks/useEventSource/useEventSource.mjs.map +1 -1
  117. package/dist/esm/hooks/useField/useField.mjs.map +1 -1
  118. package/dist/esm/hooks/useFileDialog/useFileDialog.mjs.map +1 -1
  119. package/dist/esm/hooks/useFocus/useFocus.mjs.map +1 -1
  120. package/dist/esm/hooks/useFps/useFps.mjs.map +1 -1
  121. package/dist/esm/hooks/useHash/useHash.mjs.map +1 -1
  122. package/dist/esm/hooks/useHover/useHover.mjs.map +1 -1
  123. package/dist/esm/hooks/useImage/useImage.mjs.map +1 -1
  124. package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs +27 -27
  125. package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs.map +1 -1
  126. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.mjs +5 -5
  127. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.mjs.map +1 -1
  128. package/dist/esm/hooks/useLastChanged/useLastChanged.mjs.map +1 -1
  129. package/dist/esm/hooks/useList/useList.mjs +15 -6
  130. package/dist/esm/hooks/useList/useList.mjs.map +1 -1
  131. package/dist/esm/hooks/useLocalStorage/useLocalStorage.mjs.map +1 -1
  132. package/dist/esm/hooks/useLockCallback/useLockCallback.mjs.map +1 -1
  133. package/dist/esm/hooks/useLockScroll/useLockScroll.mjs +44 -0
  134. package/dist/esm/hooks/useLockScroll/useLockScroll.mjs.map +1 -0
  135. package/dist/esm/hooks/useLogger/useLogger.mjs.map +1 -1
  136. package/dist/esm/hooks/useLongPress/useLongPress.mjs.map +1 -1
  137. package/dist/esm/hooks/useMap/useMap.mjs.map +1 -1
  138. package/dist/esm/hooks/useMutation/useMutation.mjs.map +1 -1
  139. package/dist/esm/hooks/useMutationObserver/useMutationObserver.mjs.map +1 -1
  140. package/dist/esm/hooks/useNetwork/useNetwork.mjs.map +1 -1
  141. package/dist/esm/hooks/useOffsetPagination/useOffsetPagination.mjs.map +1 -1
  142. package/dist/esm/hooks/useOnline/useOnline.mjs.map +1 -1
  143. package/dist/esm/hooks/useOperatingSystem/useOperatingSystem.mjs.map +1 -1
  144. package/dist/esm/hooks/useOptimistic/useOptimistic.mjs.map +1 -1
  145. package/dist/esm/hooks/useOrientation/useOrientation.mjs +25 -9
  146. package/dist/esm/hooks/useOrientation/useOrientation.mjs.map +1 -1
  147. package/dist/esm/hooks/usePaint/usePaint.mjs +14 -2
  148. package/dist/esm/hooks/usePaint/usePaint.mjs.map +1 -1
  149. package/dist/esm/hooks/useParallax/useParallax.mjs +9 -9
  150. package/dist/esm/hooks/useParallax/useParallax.mjs.map +1 -1
  151. package/dist/esm/hooks/usePointerLock/usePointerLock.mjs.map +1 -1
  152. package/dist/esm/hooks/usePreferredColorScheme/usePreferredColorScheme.mjs.map +1 -1
  153. package/dist/esm/hooks/usePreferredContrast/usePreferredContrast.mjs.map +1 -1
  154. package/dist/esm/hooks/usePreferredDark/usePreferredDark.mjs.map +1 -1
  155. package/dist/esm/hooks/usePreferredLanguages/usePreferredLanguages.mjs.map +1 -1
  156. package/dist/esm/hooks/usePreferredReducedMotion/usePreferredReducedMotion.mjs.map +1 -1
  157. package/dist/esm/hooks/useQuery/useQuery.mjs.map +1 -1
  158. package/dist/esm/hooks/useQueue/useQueue.mjs.map +1 -1
  159. package/dist/esm/hooks/useRaf/useRaf.mjs.map +1 -1
  160. package/dist/esm/hooks/{useRafValue/useRafValue.mjs → useRafState/useRafState.mjs} +2 -2
  161. package/dist/esm/hooks/useRafState/useRafState.mjs.map +1 -0
  162. package/dist/esm/hooks/useRefState/useRefState.mjs.map +1 -1
  163. package/dist/esm/hooks/useRenderCount/useRenderCount.mjs.map +1 -1
  164. package/dist/esm/hooks/useRenderInfo/useRenderInfo.mjs.map +1 -1
  165. package/dist/esm/hooks/useRerender/useRerender.mjs.map +1 -1
  166. package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs.map +1 -1
  167. package/dist/esm/hooks/useScript/useScript.mjs.map +1 -1
  168. package/dist/esm/hooks/useScroll/useScroll.mjs.map +1 -1
  169. package/dist/esm/hooks/useSessionStorage/useSessionStorage.mjs.map +1 -1
  170. package/dist/esm/hooks/useSet/useSet.mjs.map +1 -1
  171. package/dist/esm/hooks/useSpeechRecognition/useSpeechRecognition.mjs +14 -4
  172. package/dist/esm/hooks/useSpeechRecognition/useSpeechRecognition.mjs.map +1 -1
  173. package/dist/esm/hooks/useSpeechSynthesis/useSpeechSynthesis.mjs.map +1 -1
  174. package/dist/esm/hooks/useStateHistory/useStateHistory.mjs.map +1 -1
  175. package/dist/esm/hooks/useStep/useStep.mjs.map +1 -1
  176. package/dist/esm/hooks/useSticky/useSticky.mjs.map +1 -1
  177. package/dist/esm/hooks/useStopwatch/useStopwatch.mjs +18 -18
  178. package/dist/esm/hooks/useStopwatch/useStopwatch.mjs.map +1 -1
  179. package/dist/esm/hooks/useStorage/useStorage.mjs.map +1 -1
  180. package/dist/esm/hooks/useTextDirection/useTextDirection.mjs +19 -20
  181. package/dist/esm/hooks/useTextDirection/useTextDirection.mjs.map +1 -1
  182. package/dist/esm/hooks/useToggle/useToggle.mjs.map +1 -1
  183. package/dist/esm/hooks/useUrlSearchParam/useUrlSearchParam.mjs.map +1 -1
  184. package/dist/esm/hooks/useUrlSearchParams/useUrlSearchParams.mjs.map +1 -1
  185. package/dist/esm/hooks/useWindowEvent/useWindowEvent.mjs.map +1 -1
  186. package/dist/esm/hooks/useWizard/useWizard.mjs.map +1 -1
  187. package/dist/esm/index.mjs +323 -323
  188. package/dist/types/helpers/createStore/createStore.d.ts +1 -1
  189. package/dist/types/hooks/async.d.ts +5 -0
  190. package/dist/types/hooks/browser.d.ts +32 -0
  191. package/dist/types/hooks/debug.d.ts +4 -0
  192. package/dist/types/hooks/elements.d.ts +14 -0
  193. package/dist/types/hooks/fun.d.ts +3 -0
  194. package/dist/types/hooks/index.d.ts +11 -143
  195. package/dist/types/hooks/lifecycle.d.ts +6 -0
  196. package/dist/types/hooks/sensors.d.ts +34 -0
  197. package/dist/types/hooks/state.d.ts +25 -0
  198. package/dist/types/hooks/time.d.ts +5 -0
  199. package/dist/types/hooks/useActiveElement/useActiveElement.d.ts +21 -2
  200. package/dist/types/hooks/useAsync/useAsync.d.ts +1 -1
  201. package/dist/types/hooks/useAutoScroll/useAutoScroll.d.ts +3 -1
  202. package/dist/types/hooks/useBoolean/useBoolean.d.ts +1 -1
  203. package/dist/types/hooks/useBrowserLanguage/useBrowserLanguage.d.ts +1 -1
  204. package/dist/types/hooks/useClickOutside/useClickOutside.d.ts +1 -1
  205. package/dist/types/hooks/useCookie/useCookie.d.ts +1 -1
  206. package/dist/types/hooks/useCookies/useCookies.d.ts +1 -1
  207. package/dist/types/hooks/useCounter/useCounter.d.ts +1 -1
  208. package/dist/types/hooks/useCssVar/useCssVar.d.ts +1 -1
  209. package/dist/types/hooks/useDefault/useDefault.d.ts +1 -1
  210. package/dist/types/hooks/useDisclosure/useDisclosure.d.ts +1 -1
  211. package/dist/types/hooks/useDocumentTitle/useDocumentTitle.d.ts +2 -0
  212. package/dist/types/hooks/useDoubleClick/useDoubleClick.d.ts +1 -1
  213. package/dist/types/hooks/useEvent/useEvent.d.ts +1 -1
  214. package/dist/types/hooks/useField/useField.d.ts +1 -1
  215. package/dist/types/hooks/useFileDialog/useFileDialog.d.ts +1 -1
  216. package/dist/types/hooks/useFocus/useFocus.d.ts +1 -1
  217. package/dist/types/hooks/useFps/useFps.d.ts +1 -1
  218. package/dist/types/hooks/useHash/useHash.d.ts +1 -1
  219. package/dist/types/hooks/useHover/useHover.d.ts +1 -1
  220. package/dist/types/hooks/useImage/useImage.d.ts +1 -1
  221. package/dist/types/hooks/useIntersectionObserver/useIntersectionObserver.d.ts +7 -6
  222. package/dist/types/hooks/useLastChanged/useLastChanged.d.ts +1 -1
  223. package/dist/types/hooks/useList/useList.d.ts +1 -1
  224. package/dist/types/hooks/useLocalStorage/useLocalStorage.d.ts +1 -1
  225. package/dist/types/hooks/useLockCallback/useLockCallback.d.ts +1 -1
  226. package/dist/types/hooks/useLockScroll/useLockScroll.d.ts +49 -0
  227. package/dist/types/hooks/useLogger/useLogger.d.ts +1 -1
  228. package/dist/types/hooks/useLongPress/useLongPress.d.ts +1 -1
  229. package/dist/types/hooks/useMap/useMap.d.ts +1 -1
  230. package/dist/types/hooks/useMutation/useMutation.d.ts +1 -1
  231. package/dist/types/hooks/useMutationObserver/useMutationObserver.d.ts +1 -1
  232. package/dist/types/hooks/useNetwork/useNetwork.d.ts +1 -1
  233. package/dist/types/hooks/useOffsetPagination/useOffsetPagination.d.ts +1 -1
  234. package/dist/types/hooks/useOnline/useOnline.d.ts +1 -1
  235. package/dist/types/hooks/useOperatingSystem/useOperatingSystem.d.ts +1 -1
  236. package/dist/types/hooks/useOptimistic/useOptimistic.d.ts +1 -1
  237. package/dist/types/hooks/useOrientation/useOrientation.d.ts +26 -11
  238. package/dist/types/hooks/usePaint/usePaint.d.ts +1 -1
  239. package/dist/types/hooks/usePointerLock/usePointerLock.d.ts +1 -1
  240. package/dist/types/hooks/usePreferredColorScheme/usePreferredColorScheme.d.ts +1 -1
  241. package/dist/types/hooks/usePreferredContrast/usePreferredContrast.d.ts +1 -1
  242. package/dist/types/hooks/usePreferredDark/usePreferredDark.d.ts +1 -1
  243. package/dist/types/hooks/usePreferredLanguages/usePreferredLanguages.d.ts +1 -1
  244. package/dist/types/hooks/usePreferredReducedMotion/usePreferredReducedMotion.d.ts +1 -1
  245. package/dist/types/hooks/useQuery/useQuery.d.ts +1 -1
  246. package/dist/types/hooks/useQueue/useQueue.d.ts +1 -1
  247. package/dist/types/hooks/useRaf/useRaf.d.ts +1 -1
  248. package/dist/types/hooks/{useRafValue/useRafValue.d.ts → useRafState/useRafState.d.ts} +6 -6
  249. package/dist/types/hooks/useRefState/useRefState.d.ts +1 -1
  250. package/dist/types/hooks/useRenderCount/useRenderCount.d.ts +1 -1
  251. package/dist/types/hooks/useRenderInfo/useRenderInfo.d.ts +6 -1
  252. package/dist/types/hooks/useRerender/useRerender.d.ts +1 -1
  253. package/dist/types/hooks/useResizeObserver/useResizeObserver.d.ts +1 -1
  254. package/dist/types/hooks/useRightClick/useRightClick.d.ts +37 -0
  255. package/dist/types/hooks/useScript/useScript.d.ts +1 -1
  256. package/dist/types/hooks/useSessionStorage/useSessionStorage.d.ts +1 -1
  257. package/dist/types/hooks/useSet/useSet.d.ts +1 -1
  258. package/dist/types/hooks/useSpeechRecognition/useSpeechRecognition.d.ts +1 -1
  259. package/dist/types/hooks/useSpeechSynthesis/useSpeechSynthesis.d.ts +1 -1
  260. package/dist/types/hooks/useStateHistory/useStateHistory.d.ts +1 -1
  261. package/dist/types/hooks/useStep/useStep.d.ts +1 -1
  262. package/dist/types/hooks/useSticky/useSticky.d.ts +1 -1
  263. package/dist/types/hooks/useStopwatch/useStopwatch.d.ts +2 -2
  264. package/dist/types/hooks/useStorage/useStorage.d.ts +1 -1
  265. package/dist/types/hooks/useTextDirection/useTextDirection.d.ts +2 -2
  266. package/dist/types/hooks/useToggle/useToggle.d.ts +1 -1
  267. package/dist/types/hooks/useUrlSearchParam/useUrlSearchParam.d.ts +1 -1
  268. package/dist/types/hooks/useUrlSearchParams/useUrlSearchParams.d.ts +1 -1
  269. package/dist/types/hooks/useWindowEvent/useWindowEvent.d.ts +1 -1
  270. package/dist/types/hooks/useWizard/useWizard.d.ts +1 -1
  271. package/dist/types/hooks/user.d.ts +7 -0
  272. package/dist/types/hooks/utilities.d.ts +9 -0
  273. package/dist/types/utils/helpers/getElement.d.ts +1 -1
  274. package/package.json +89 -89
  275. package/dist/cjs/hooks/useRafValue/useRafValue.cjs.map +0 -1
  276. package/dist/cjs/hooks/useScreenOrientation/useScreenOrientation.cjs +0 -2
  277. package/dist/cjs/hooks/useScreenOrientation/useScreenOrientation.cjs.map +0 -1
  278. package/dist/esm/hooks/useRafValue/useRafValue.mjs.map +0 -1
  279. package/dist/esm/hooks/useScreenOrientation/useScreenOrientation.mjs +0 -31
  280. package/dist/esm/hooks/useScreenOrientation/useScreenOrientation.mjs.map +0 -1
  281. package/dist/types/hooks/useScreenOrientation/useScreenOrientation.d.ts +0 -35
@@ -1 +1 @@
1
- {"version":3,"file":"useFileDialog.cjs","sources":["../../../../src/hooks/useFileDialog/useFileDialog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { useEffect, useRef, useState } from 'react';\n\n/* The use file dialog options */\nexport interface UseFileDialogOptions extends Pick<ComponentProps<'input'>, 'accept' | 'multiple'> {\n /** The capture value */\n capture?: string;\n /** The reset value */\n reset?: boolean;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: '*',\n reset: false\n} satisfies UseFileDialogOptions;\n\n/* The use file dialog return type */\nexport interface UseFileDialogReturn {\n /** The selected files */\n value: FileList | null;\n /** The open function */\n open: (openParams?: UseFileDialogOptions) => void;\n /** The reset function */\n reset: () => void;\n}\n\nexport interface UseFileDialog {\n (\n callback?: (value: FileList | null) => void,\n options?: UseFileDialogOptions\n ): UseFileDialogReturn;\n\n (options?: UseFileDialogOptions, callback?: never): UseFileDialogReturn;\n}\n\n/**\n * @name useFileDialog\n * @description - Hook to handle file input\n * @category Browser\n *\n * @overload\n * @param {(value: FileList | null) => void} callback The callback to execute when a file is selected\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog((value) => console.log(value));\n *\n * @overload\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog({ accept: 'image/*' });\n */\nexport const useFileDialog = ((...params: any[]) => {\n const callback = (typeof params[0] === 'function' ? params[0] : undefined) as\n | ((value: FileList | null) => void)\n | undefined;\n const options = (callback ? params[0] : params[1]) as UseFileDialogOptions | undefined;\n\n const [value, setValue] = useState<FileList | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n const reset = () => {\n setValue(null);\n internalCallbackRef.current?.(null);\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const open = (openParams?: UseFileDialogOptions) => {\n if (!inputRef.current) return;\n\n inputRef.current.multiple =\n openParams?.multiple ?? options?.multiple ?? DEFAULT_OPTIONS.multiple;\n inputRef.current.accept = openParams?.accept ?? options?.accept ?? DEFAULT_OPTIONS.accept;\n\n const capture = openParams?.capture ?? options?.capture;\n if (capture) inputRef.current.capture = capture;\n\n if (openParams?.reset ?? options?.reset ?? DEFAULT_OPTIONS.reset) reset();\n\n inputRef.current.click();\n };\n\n useEffect(() => {\n const init = () => {\n const input = document.createElement('input');\n input.type = 'file';\n\n input.onchange = (event: Event) => {\n const { files } = event.target as HTMLInputElement;\n setValue(files);\n internalCallbackRef.current?.(files);\n };\n return input;\n };\n\n inputRef.current = init();\n return () => {\n inputRef.current?.remove();\n };\n }, [options?.multiple, options?.accept, options?.capture, options?.reset]);\n\n return { value, open, reset };\n}) as UseFileDialog;\n"],"names":["DEFAULT_OPTIONS","useFileDialog","params","callback","options","value","setValue","useState","inputRef","useRef","internalCallbackRef","reset","open","openParams","capture","useEffect","init","input","event","files"],"mappings":"yGAYMA,EAAkB,CACtB,SAAU,GACV,OAAQ,IACR,MAAO,EACT,EA+CaC,EAAiB,IAAIC,IAAkB,CAClD,MAAMC,EAAY,OAAOD,EAAO,CAAC,GAAM,WAAaA,EAAO,CAAC,EAAI,OAG1DE,EAAWD,EAAWD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAE1C,CAACG,EAAOC,CAAQ,EAAIC,EAAAA,SAA0B,IAAI,EAClDC,EAAWC,EAAAA,OAAgC,IAAI,EAC/CC,EAAsBD,EAAAA,OAAON,CAAQ,EAC3CO,EAAoB,QAAUP,EAE9B,MAAMQ,EAAQ,IAAM,CAClBL,EAAS,IAAI,EACbI,EAAoB,UAAU,IAAI,EAC9BF,EAAS,UAASA,EAAS,QAAQ,MAAQ,GAAA,EAG3CI,EAAQC,GAAsC,CAClD,GAAI,CAACL,EAAS,QAAS,OAEvBA,EAAS,QAAQ,SACfK,GAAY,UAAYT,GAAS,UAAYJ,EAAgB,SAC/DQ,EAAS,QAAQ,OAASK,GAAY,QAAUT,GAAS,QAAUJ,EAAgB,OAEnF,MAAMc,EAAUD,GAAY,SAAWT,GAAS,QAC5CU,IAASN,EAAS,QAAQ,QAAUM,IAEpCD,GAAY,OAAST,GAAS,OAASJ,EAAgB,QAAOW,EAAA,EAElEH,EAAS,QAAQ,MAAA,CAAM,EAGzBO,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAO,IAAM,CACjB,MAAMC,EAAQ,SAAS,cAAc,OAAO,EAC5C,OAAAA,EAAM,KAAO,OAEbA,EAAM,SAAYC,GAAiB,CACjC,KAAM,CAAE,MAAAC,GAAUD,EAAM,OACxBZ,EAASa,CAAK,EACdT,EAAoB,UAAUS,CAAK,CAAA,EAE9BF,CAAA,EAGT,OAAAT,EAAS,QAAUQ,EAAA,EACZ,IAAM,CACXR,EAAS,SAAS,OAAA,CAAO,CAC3B,EACC,CAACJ,GAAS,SAAUA,GAAS,OAAQA,GAAS,QAASA,GAAS,KAAK,CAAC,EAElE,CAAE,MAAAC,EAAO,KAAAO,EAAM,MAAAD,CAAA,CACxB"}
1
+ {"version":3,"file":"useFileDialog.cjs","sources":["../../../../src/hooks/useFileDialog/useFileDialog.ts"],"sourcesContent":["import type { ComponentProps } from 'react';\n\nimport { useEffect, useRef, useState } from 'react';\n\n/* The use file dialog options */\nexport interface UseFileDialogOptions extends Pick<ComponentProps<'input'>, 'accept' | 'multiple'> {\n /** The capture value */\n capture?: string;\n /** The reset value */\n reset?: boolean;\n}\n\nconst DEFAULT_OPTIONS = {\n multiple: true,\n accept: '*',\n reset: false\n} satisfies UseFileDialogOptions;\n\n/* The use file dialog return type */\nexport interface UseFileDialogReturn {\n /** The selected files */\n value: FileList | null;\n /** The open function */\n open: (openParams?: UseFileDialogOptions) => void;\n /** The reset function */\n reset: () => void;\n}\n\nexport interface UseFileDialog {\n (\n callback?: (value: FileList | null) => void,\n options?: UseFileDialogOptions\n ): UseFileDialogReturn;\n\n (options?: UseFileDialogOptions, callback?: never): UseFileDialogReturn;\n}\n\n/**\n * @name useFileDialog\n * @description - Hook to handle file input\n * @category Elements\n *\n * @overload\n * @param {(value: FileList | null) => void} callback The callback to execute when a file is selected\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog((value) => console.log(value));\n *\n * @overload\n * @param {boolean} [options.multiple=true] Whether multiple files can be selected\n * @param {string} [options.accept='*'] The accepted file types\n * @param {boolean} [options.reset=false] Whether the input should be reset when the callback is called\n * @param {string} [options.capture] The capture value\n * @returns {UseFileDialogReturn} An object containing the selected files\n *\n * @example\n * const { values, open, reset } = useFileDialog({ accept: 'image/*' });\n */\nexport const useFileDialog = ((...params: any[]) => {\n const callback = (typeof params[0] === 'function' ? params[0] : undefined) as\n | ((value: FileList | null) => void)\n | undefined;\n const options = (callback ? params[0] : params[1]) as UseFileDialogOptions | undefined;\n\n const [value, setValue] = useState<FileList | null>(null);\n const inputRef = useRef<HTMLInputElement | null>(null);\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n const reset = () => {\n setValue(null);\n internalCallbackRef.current?.(null);\n if (inputRef.current) inputRef.current.value = '';\n };\n\n const open = (openParams?: UseFileDialogOptions) => {\n if (!inputRef.current) return;\n\n inputRef.current.multiple =\n openParams?.multiple ?? options?.multiple ?? DEFAULT_OPTIONS.multiple;\n inputRef.current.accept = openParams?.accept ?? options?.accept ?? DEFAULT_OPTIONS.accept;\n\n const capture = openParams?.capture ?? options?.capture;\n if (capture) inputRef.current.capture = capture;\n\n if (openParams?.reset ?? options?.reset ?? DEFAULT_OPTIONS.reset) reset();\n\n inputRef.current.click();\n };\n\n useEffect(() => {\n const init = () => {\n const input = document.createElement('input');\n input.type = 'file';\n\n input.onchange = (event: Event) => {\n const { files } = event.target as HTMLInputElement;\n setValue(files);\n internalCallbackRef.current?.(files);\n };\n return input;\n };\n\n inputRef.current = init();\n return () => {\n inputRef.current?.remove();\n };\n }, [options?.multiple, options?.accept, options?.capture, options?.reset]);\n\n return { value, open, reset };\n}) as UseFileDialog;\n"],"names":["DEFAULT_OPTIONS","useFileDialog","params","callback","options","value","setValue","useState","inputRef","useRef","internalCallbackRef","reset","open","openParams","capture","useEffect","init","input","event","files"],"mappings":"yGAYMA,EAAkB,CACtB,SAAU,GACV,OAAQ,IACR,MAAO,EACT,EA+CaC,EAAiB,IAAIC,IAAkB,CAClD,MAAMC,EAAY,OAAOD,EAAO,CAAC,GAAM,WAAaA,EAAO,CAAC,EAAI,OAG1DE,EAAWD,EAAWD,EAAO,CAAC,EAAIA,EAAO,CAAC,EAE1C,CAACG,EAAOC,CAAQ,EAAIC,EAAAA,SAA0B,IAAI,EAClDC,EAAWC,EAAAA,OAAgC,IAAI,EAC/CC,EAAsBD,EAAAA,OAAON,CAAQ,EAC3CO,EAAoB,QAAUP,EAE9B,MAAMQ,EAAQ,IAAM,CAClBL,EAAS,IAAI,EACbI,EAAoB,UAAU,IAAI,EAC9BF,EAAS,UAASA,EAAS,QAAQ,MAAQ,GAAA,EAG3CI,EAAQC,GAAsC,CAClD,GAAI,CAACL,EAAS,QAAS,OAEvBA,EAAS,QAAQ,SACfK,GAAY,UAAYT,GAAS,UAAYJ,EAAgB,SAC/DQ,EAAS,QAAQ,OAASK,GAAY,QAAUT,GAAS,QAAUJ,EAAgB,OAEnF,MAAMc,EAAUD,GAAY,SAAWT,GAAS,QAC5CU,IAASN,EAAS,QAAQ,QAAUM,IAEpCD,GAAY,OAAST,GAAS,OAASJ,EAAgB,QAAOW,EAAA,EAElEH,EAAS,QAAQ,MAAA,CAAM,EAGzBO,OAAAA,EAAAA,UAAU,IAAM,CACd,MAAMC,EAAO,IAAM,CACjB,MAAMC,EAAQ,SAAS,cAAc,OAAO,EAC5C,OAAAA,EAAM,KAAO,OAEbA,EAAM,SAAYC,GAAiB,CACjC,KAAM,CAAE,MAAAC,GAAUD,EAAM,OACxBZ,EAASa,CAAK,EACdT,EAAoB,UAAUS,CAAK,CAAA,EAE9BF,CAAA,EAGT,OAAAT,EAAS,QAAUQ,EAAA,EACZ,IAAM,CACXR,EAAS,SAAS,OAAA,CAAO,CAC3B,EACC,CAACJ,GAAS,SAAUA,GAAS,OAAQA,GAAS,QAASA,GAAS,KAAK,CAAC,EAElE,CAAE,MAAAC,EAAO,KAAAO,EAAM,MAAAD,CAAA,CACxB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFocus.cjs","sources":["../../../../src/hooks/useFocus/useFocus.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use focus options type */\nexport interface UseFocusOptions {\n /** The initial focus state of the target */\n initialValue?: boolean;\n /** The on blur callback */\n onBlur?: (event: FocusEvent) => void;\n /** The on focus callback */\n onFocus?: (event: FocusEvent) => void;\n}\n\n/** The use focus return type */\nexport interface UseFocusReturn {\n /** The boolean state value of the target */\n focused: boolean;\n /** Blur the target */\n blur: () => void;\n /** Focus the target */\n focus: () => void;\n}\n\nexport interface UseFocus {\n (target: HookTarget, options?: UseFocusOptions): UseFocusReturn;\n\n <Target extends Element>(\n options?: UseFocusOptions,\n target?: never\n ): UseFocusReturn & { ref: StateRef<Target> };\n}\n\n/**\n * @name useFocus\n * @description - Hook that allows you to focus on a specific element\n * @category Browser\n *\n * @overload\n * @param {HookTarget} target The target element to focus\n * @param {boolean} [options.initialValue=false] The initial focus state of the target\n * @param {(event: FocusEvent) => void} [options.onFocus] The callback function to be invoked on focus\n * @param {(event: FocusEvent) => void} [options.onBlur] The callback function to be invoked on blur\n * @returns {UseFocusReturn} An object with focus state and methods\n *\n * @example\n * const { focus, blur, focused } = useFocus(ref);\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.initialValue=false] The initial focus state of the target\n * @param {(event: FocusEvent) => void} [options.onFocus] The callback function to be invoked on focus\n * @param {(event: FocusEvent) => void} [options.onBlur] The callback function to be invoked on blur\n * @returns {UseFocusReturn & { ref: StateRef<Target> }} An object with focus state, methods and ref\n *\n * @example\n * const { ref, focus, blur, focused } = useFocus();\n */\nexport const useFocus = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = ((target ? params[1] : params[0]) as UseFocusOptions) ?? {};\n const initialValue = options.initialValue ?? false;\n\n const [focused, setFocused] = useState(initialValue);\n const internalRef = useRefState<Element>();\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n const elementRef = useRef<HTMLElement | null>(null);\n\n const focus = () => elementRef.current?.focus();\n const blur = () => elementRef.current?.blur();\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const element = (target ? getElement(target) : internalRef.current) as HTMLElement;\n if (!element) return;\n\n elementRef.current = element;\n\n const onFocus = (event: FocusEvent) => {\n internalOptionsRef.current?.onFocus?.(event);\n if (!focus || (event.target as HTMLElement).matches?.(':focus-visible')) setFocused(true);\n };\n\n const onBlur = (event: FocusEvent) => {\n internalOptionsRef.current?.onBlur?.(event);\n setFocused(false);\n };\n\n if (initialValue) element.focus();\n\n element.addEventListener('focus', onFocus);\n element.addEventListener('blur', onBlur);\n\n return () => {\n element.removeEventListener('focus', onFocus);\n element.removeEventListener('blur', onBlur);\n };\n }, [target, internalRef.state]);\n\n if (target) return { focus, blur, focused };\n return {\n ref: internalRef,\n focus,\n blur,\n focused\n };\n}) as UseFocus;\n"],"names":["useFocus","params","target","isTarget","options","initialValue","focused","setFocused","useState","internalRef","useRefState","internalOptionsRef","useRef","elementRef","focus","blur","useEffect","element","getElement","onFocus","event","onBlur"],"mappings":"mPAgEaA,EAAY,IAAIC,IAAkB,CAC7C,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,GAAYF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,IAA0B,CAAA,EACnEI,EAAeD,EAAQ,cAAgB,GAEvC,CAACE,EAASC,CAAU,EAAIC,EAAAA,SAASH,CAAY,EAC7CI,EAAcC,EAAAA,YAAA,EACdC,EAAqBC,EAAAA,OAAOR,CAAO,EACzCO,EAAmB,QAAUP,EAE7B,MAAMS,EAAaD,EAAAA,OAA2B,IAAI,EAE5CE,EAAQ,IAAMD,EAAW,SAAS,MAAA,EAClCE,EAAO,IAAMF,EAAW,SAAS,KAAA,EA8BvC,OA5BAG,EAAAA,UAAU,IAAM,CACd,GAAI,CAACd,GAAU,CAACO,EAAY,MAAO,OACnC,MAAMQ,EAAWf,EAASgB,EAAAA,WAAWhB,CAAM,EAAIO,EAAY,QAC3D,GAAI,CAACQ,EAAS,OAEdJ,EAAW,QAAUI,EAErB,MAAME,EAAWC,GAAsB,CACrCT,EAAmB,SAAS,UAAUS,CAAK,GACvC,CAACN,GAAUM,EAAM,OAAuB,UAAU,gBAAgB,MAAc,EAAI,CAAA,EAGpFC,EAAUD,GAAsB,CACpCT,EAAmB,SAAS,SAASS,CAAK,EAC1Cb,EAAW,EAAK,CAAA,EAGlB,OAAIF,KAAsB,MAAA,EAE1BY,EAAQ,iBAAiB,QAASE,CAAO,EACzCF,EAAQ,iBAAiB,OAAQI,CAAM,EAEhC,IAAM,CACXJ,EAAQ,oBAAoB,QAASE,CAAO,EAC5CF,EAAQ,oBAAoB,OAAQI,CAAM,CAAA,CAC5C,EACC,CAACnB,EAAQO,EAAY,KAAK,CAAC,EAE1BP,EAAe,CAAE,MAAAY,EAAO,KAAAC,EAAM,QAAAT,CAAA,EAC3B,CACL,IAAKG,EACL,MAAAK,EACA,KAAAC,EACA,QAAAT,CAAA,CAEJ"}
1
+ {"version":3,"file":"useFocus.cjs","sources":["../../../../src/hooks/useFocus/useFocus.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use focus options type */\nexport interface UseFocusOptions {\n /** The initial focus state of the target */\n initialValue?: boolean;\n /** The on blur callback */\n onBlur?: (event: FocusEvent) => void;\n /** The on focus callback */\n onFocus?: (event: FocusEvent) => void;\n}\n\n/** The use focus return type */\nexport interface UseFocusReturn {\n /** The boolean state value of the target */\n focused: boolean;\n /** Blur the target */\n blur: () => void;\n /** Focus the target */\n focus: () => void;\n}\n\nexport interface UseFocus {\n (target: HookTarget, options?: UseFocusOptions): UseFocusReturn;\n\n <Target extends Element>(\n options?: UseFocusOptions,\n target?: never\n ): UseFocusReturn & { ref: StateRef<Target> };\n}\n\n/**\n * @name useFocus\n * @description - Hook that allows you to focus on a specific element\n * @category Elements\n *\n * @overload\n * @param {HookTarget} target The target element to focus\n * @param {boolean} [options.initialValue=false] The initial focus state of the target\n * @param {(event: FocusEvent) => void} [options.onFocus] The callback function to be invoked on focus\n * @param {(event: FocusEvent) => void} [options.onBlur] The callback function to be invoked on blur\n * @returns {UseFocusReturn} An object with focus state and methods\n *\n * @example\n * const { focus, blur, focused } = useFocus(ref);\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.initialValue=false] The initial focus state of the target\n * @param {(event: FocusEvent) => void} [options.onFocus] The callback function to be invoked on focus\n * @param {(event: FocusEvent) => void} [options.onBlur] The callback function to be invoked on blur\n * @returns {UseFocusReturn & { ref: StateRef<Target> }} An object with focus state, methods and ref\n *\n * @example\n * const { ref, focus, blur, focused } = useFocus();\n */\nexport const useFocus = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = ((target ? params[1] : params[0]) as UseFocusOptions) ?? {};\n const initialValue = options.initialValue ?? false;\n\n const [focused, setFocused] = useState(initialValue);\n const internalRef = useRefState<Element>();\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n const elementRef = useRef<HTMLElement | null>(null);\n\n const focus = () => elementRef.current?.focus();\n const blur = () => elementRef.current?.blur();\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const element = (target ? getElement(target) : internalRef.current) as HTMLElement;\n if (!element) return;\n\n elementRef.current = element;\n\n const onFocus = (event: FocusEvent) => {\n internalOptionsRef.current?.onFocus?.(event);\n if (!focus || (event.target as HTMLElement).matches?.(':focus-visible')) setFocused(true);\n };\n\n const onBlur = (event: FocusEvent) => {\n internalOptionsRef.current?.onBlur?.(event);\n setFocused(false);\n };\n\n if (initialValue) element.focus();\n\n element.addEventListener('focus', onFocus);\n element.addEventListener('blur', onBlur);\n\n return () => {\n element.removeEventListener('focus', onFocus);\n element.removeEventListener('blur', onBlur);\n };\n }, [target, internalRef.state]);\n\n if (target) return { focus, blur, focused };\n return {\n ref: internalRef,\n focus,\n blur,\n focused\n };\n}) as UseFocus;\n"],"names":["useFocus","params","target","isTarget","options","initialValue","focused","setFocused","useState","internalRef","useRefState","internalOptionsRef","useRef","elementRef","focus","blur","useEffect","element","getElement","onFocus","event","onBlur"],"mappings":"mPAgEaA,EAAY,IAAIC,IAAkB,CAC7C,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAC5CG,GAAYF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,IAA0B,CAAA,EACnEI,EAAeD,EAAQ,cAAgB,GAEvC,CAACE,EAASC,CAAU,EAAIC,EAAAA,SAASH,CAAY,EAC7CI,EAAcC,EAAAA,YAAA,EACdC,EAAqBC,EAAAA,OAAOR,CAAO,EACzCO,EAAmB,QAAUP,EAE7B,MAAMS,EAAaD,EAAAA,OAA2B,IAAI,EAE5CE,EAAQ,IAAMD,EAAW,SAAS,MAAA,EAClCE,EAAO,IAAMF,EAAW,SAAS,KAAA,EA8BvC,OA5BAG,EAAAA,UAAU,IAAM,CACd,GAAI,CAACd,GAAU,CAACO,EAAY,MAAO,OACnC,MAAMQ,EAAWf,EAASgB,EAAAA,WAAWhB,CAAM,EAAIO,EAAY,QAC3D,GAAI,CAACQ,EAAS,OAEdJ,EAAW,QAAUI,EAErB,MAAME,EAAWC,GAAsB,CACrCT,EAAmB,SAAS,UAAUS,CAAK,GACvC,CAACN,GAAUM,EAAM,OAAuB,UAAU,gBAAgB,MAAc,EAAI,CAAA,EAGpFC,EAAUD,GAAsB,CACpCT,EAAmB,SAAS,SAASS,CAAK,EAC1Cb,EAAW,EAAK,CAAA,EAGlB,OAAIF,KAAsB,MAAA,EAE1BY,EAAQ,iBAAiB,QAASE,CAAO,EACzCF,EAAQ,iBAAiB,OAAQI,CAAM,EAEhC,IAAM,CACXJ,EAAQ,oBAAoB,QAASE,CAAO,EAC5CF,EAAQ,oBAAoB,OAAQI,CAAM,CAAA,CAC5C,EACC,CAACnB,EAAQO,EAAY,KAAK,CAAC,EAE1BP,EAAe,CAAE,MAAAY,EAAO,KAAAC,EAAM,QAAAT,CAAA,EAC3B,CACL,IAAKG,EACL,MAAAK,EACA,KAAAC,EACA,QAAAT,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useFps.cjs","sources":["../../../../src/hooks/useFps/useFps.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/**\n * @name useFps\n * @description - Hook that measures frames per second\n * @category Sensors\n *\n * @browserapi requestAnimationFrame https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame\n *\n * @returns {number} A number which determines frames per second\n *\n * @example\n * const fps = useFps();\n */\nexport const useFps = () => {\n const [fps, setFps] = useState(0);\n\n useEffect(() => {\n let frameCount = 0;\n let startTime = performance.now();\n let rafId: number;\n\n const onRequestAnimationFrame = () => {\n frameCount += 1;\n const currentTime = performance.now();\n const elapsedTime = currentTime - startTime;\n\n if (elapsedTime >= 1000) {\n const calculatedFps = Math.round((frameCount * 1000) / elapsedTime);\n setFps(calculatedFps);\n frameCount = 0;\n startTime = currentTime;\n }\n\n rafId = requestAnimationFrame(onRequestAnimationFrame);\n };\n\n rafId = requestAnimationFrame(onRequestAnimationFrame);\n\n return () => {\n cancelAnimationFrame(rafId);\n };\n }, []);\n\n return fps;\n};\n"],"names":["useFps","fps","setFps","useState","useEffect","frameCount","startTime","rafId","onRequestAnimationFrame","currentTime","elapsedTime","calculatedFps"],"mappings":"yGAcaA,EAAS,IAAM,CAC1B,KAAM,CAACC,EAAKC,CAAM,EAAIC,EAAAA,SAAS,CAAC,EAEhCC,OAAAA,EAAAA,UAAU,IAAM,CACd,IAAIC,EAAa,EACbC,EAAY,YAAY,IAAA,EACxBC,EAEJ,MAAMC,EAA0B,IAAM,CACpCH,GAAc,EACd,MAAMI,EAAc,YAAY,IAAA,EAC1BC,EAAcD,EAAcH,EAElC,GAAII,GAAe,IAAM,CACvB,MAAMC,EAAgB,KAAK,MAAON,EAAa,IAAQK,CAAW,EAClER,EAAOS,CAAa,EACpBN,EAAa,EACbC,EAAYG,CAAA,CAGdF,EAAQ,sBAAsBC,CAAuB,CAAA,EAGvD,OAAAD,EAAQ,sBAAsBC,CAAuB,EAE9C,IAAM,CACX,qBAAqBD,CAAK,CAAA,CAC5B,EACC,EAAE,EAEEN,CACT"}
1
+ {"version":3,"file":"useFps.cjs","sources":["../../../../src/hooks/useFps/useFps.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\n/**\n * @name useFps\n * @description - Hook that measures frames per second\n * @category Browser\n *\n * @browserapi requestAnimationFrame https://developer.mozilla.org/en-US/docs/Web/API/window/requestAnimationFrame\n *\n * @returns {number} A number which determines frames per second\n *\n * @example\n * const fps = useFps();\n */\nexport const useFps = () => {\n const [fps, setFps] = useState(0);\n\n useEffect(() => {\n let frameCount = 0;\n let startTime = performance.now();\n let rafId: number;\n\n const onRequestAnimationFrame = () => {\n frameCount += 1;\n const currentTime = performance.now();\n const elapsedTime = currentTime - startTime;\n\n if (elapsedTime >= 1000) {\n const calculatedFps = Math.round((frameCount * 1000) / elapsedTime);\n setFps(calculatedFps);\n frameCount = 0;\n startTime = currentTime;\n }\n\n rafId = requestAnimationFrame(onRequestAnimationFrame);\n };\n\n rafId = requestAnimationFrame(onRequestAnimationFrame);\n\n return () => {\n cancelAnimationFrame(rafId);\n };\n }, []);\n\n return fps;\n};\n"],"names":["useFps","fps","setFps","useState","useEffect","frameCount","startTime","rafId","onRequestAnimationFrame","currentTime","elapsedTime","calculatedFps"],"mappings":"yGAcaA,EAAS,IAAM,CAC1B,KAAM,CAACC,EAAKC,CAAM,EAAIC,EAAAA,SAAS,CAAC,EAEhCC,OAAAA,EAAAA,UAAU,IAAM,CACd,IAAIC,EAAa,EACbC,EAAY,YAAY,IAAA,EACxBC,EAEJ,MAAMC,EAA0B,IAAM,CACpCH,GAAc,EACd,MAAMI,EAAc,YAAY,IAAA,EAC1BC,EAAcD,EAAcH,EAElC,GAAII,GAAe,IAAM,CACvB,MAAMC,EAAgB,KAAK,MAAON,EAAa,IAAQK,CAAW,EAClER,EAAOS,CAAa,EACpBN,EAAa,EACbC,EAAYG,CAAA,CAGdF,EAAQ,sBAAsBC,CAAuB,CAAA,EAGvD,OAAAD,EAAQ,sBAAsBC,CAAuB,EAE9C,IAAM,CACX,qBAAqBD,CAAK,CAAA,CAC5B,EACC,EAAE,EAEEN,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"useHash.cjs","sources":["../../../../src/hooks/useHash/useHash.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nconst getHash = () => decodeURIComponent(window.location.hash.replace('#', ''));\n\n/** The use hash return type */\ntype UseHashReturn = [string, (value: string) => void];\n\n/**\n * @name useHash\n * @description - Hook that manages the hash value\n * @category Browser\n *\n * @param {string} [initialValue] The initial hash value if no hash exists\n * @returns {UseHashReturn} An array containing the hash value and a function to set the hash value\n *\n * @example\n * const [hash, setHash] = useHash(\"initial\");\n */\nexport const useHash = (\n initialValue = '',\n mode: 'initial' | 'replace' = 'replace'\n): UseHashReturn => {\n const [hash, setHash] = useState(() => {\n if (typeof window === 'undefined') return initialValue;\n return getHash() || initialValue;\n });\n\n const set = (value: string) => {\n window.location.hash = value;\n setHash(value);\n };\n\n useEffect(() => {\n if (mode === 'replace') window.location.hash = hash;\n\n const onHashChange = () => setHash(getHash());\n window.addEventListener('hashchange', onHashChange);\n return () => {\n window.removeEventListener('hashchange', onHashChange);\n };\n }, []);\n\n return [hash, set] as const;\n};\n"],"names":["getHash","useHash","initialValue","mode","hash","setHash","useState","set","value","useEffect","onHashChange"],"mappings":"yGAEMA,EAAU,IAAM,mBAAmB,OAAO,SAAS,KAAK,QAAQ,IAAK,EAAE,CAAC,EAgBjEC,EAAU,CACrBC,EAAe,GACfC,EAA8B,YACZ,CAClB,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAAS,IAC3B,OAAO,OAAW,IAAoBJ,EACnCF,KAAaE,CACrB,EAEKK,EAAOC,GAAkB,CAC7B,OAAO,SAAS,KAAOA,EACvBH,EAAQG,CAAK,CAAA,EAGfC,OAAAA,EAAAA,UAAU,IAAM,CACVN,IAAS,YAAW,OAAO,SAAS,KAAOC,GAE/C,MAAMM,EAAe,IAAML,EAAQL,GAAS,EAC5C,cAAO,iBAAiB,aAAcU,CAAY,EAC3C,IAAM,CACX,OAAO,oBAAoB,aAAcA,CAAY,CAAA,CACvD,EACC,EAAE,EAEE,CAACN,EAAMG,CAAG,CACnB"}
1
+ {"version":3,"file":"useHash.cjs","sources":["../../../../src/hooks/useHash/useHash.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nconst getHash = () => decodeURIComponent(window.location.hash.replace('#', ''));\n\n/** The use hash return type */\ntype UseHashReturn = [string, (value: string) => void];\n\n/**\n * @name useHash\n * @description - Hook that manages the hash value\n * @category State\n *\n * @param {string} [initialValue] The initial hash value if no hash exists\n * @returns {UseHashReturn} An array containing the hash value and a function to set the hash value\n *\n * @example\n * const [hash, setHash] = useHash(\"initial\");\n */\nexport const useHash = (\n initialValue = '',\n mode: 'initial' | 'replace' = 'replace'\n): UseHashReturn => {\n const [hash, setHash] = useState(() => {\n if (typeof window === 'undefined') return initialValue;\n return getHash() || initialValue;\n });\n\n const set = (value: string) => {\n window.location.hash = value;\n setHash(value);\n };\n\n useEffect(() => {\n if (mode === 'replace') window.location.hash = hash;\n\n const onHashChange = () => setHash(getHash());\n window.addEventListener('hashchange', onHashChange);\n return () => {\n window.removeEventListener('hashchange', onHashChange);\n };\n }, []);\n\n return [hash, set] as const;\n};\n"],"names":["getHash","useHash","initialValue","mode","hash","setHash","useState","set","value","useEffect","onHashChange"],"mappings":"yGAEMA,EAAU,IAAM,mBAAmB,OAAO,SAAS,KAAK,QAAQ,IAAK,EAAE,CAAC,EAgBjEC,EAAU,CACrBC,EAAe,GACfC,EAA8B,YACZ,CAClB,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAAS,IAC3B,OAAO,OAAW,IAAoBJ,EACnCF,KAAaE,CACrB,EAEKK,EAAOC,GAAkB,CAC7B,OAAO,SAAS,KAAOA,EACvBH,EAAQG,CAAK,CAAA,EAGfC,OAAAA,EAAAA,UAAU,IAAM,CACVN,IAAS,YAAW,OAAO,SAAS,KAAOC,GAE/C,MAAMM,EAAe,IAAML,EAAQL,GAAS,EAC5C,cAAO,iBAAiB,aAAcU,CAAY,EAC3C,IAAM,CACX,OAAO,oBAAoB,aAAcA,CAAY,CAAA,CACvD,EACC,EAAE,EAEE,CAACN,EAAMG,CAAG,CACnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useHover.cjs","sources":["../../../../src/hooks/useHover/useHover.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use hover options type */\nexport interface UseHoverOptions {\n /** The on entry callback */\n onEntry?: (event: Event) => void;\n /** The on leave callback */\n onLeave?: (event: Event) => void;\n}\n\nexport interface UseHoverReturn {\n value: boolean;\n}\n\nexport interface UseHover {\n (target: HookTarget, callback?: (event: Event) => void): boolean;\n\n (target: HookTarget, options?: UseHoverOptions): boolean;\n\n <Target extends Element>(\n callback?: (event: Event) => void,\n target?: never\n ): { ref: StateRef<Target> } & UseHoverReturn;\n\n <Target extends Element>(\n options?: UseHoverOptions,\n target?: never\n ): { ref: StateRef<Target> } & UseHoverReturn;\n}\n\n/**\n * @name useHover\n * @description - Hook that defines the logic when hovering an element\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element to be hovered\n * @param {(event: Event) => void} [callback] The callback function to be invoked on mouse enter\n * @returns {boolean} The state of the hover\n *\n * @example\n * const hovering = useHover(ref, () => console.log('callback'));\n *\n * @overload\n * @param {HookTarget} target The target element to be hovered\n * @param {(event: Event) => void} [options.onEntry] The callback function to be invoked on mouse enter\n * @param {(event: Event) => void} [options.onLeave] The callback function to be invoked on mouse leave\n * @returns {boolean} The state of the hover\n *\n * @example\n * const hovering = useHover(ref, options);\n *\n * @overload\n * @template Target The target element\n * @param {(event: Event) => void} [callback] The callback function to be invoked on mouse enter\n * @returns {{ ref: StateRef<Target> } & UseHoverReturn} The state of the hover\n *\n * @example\n * const [ref, hovering] = useHover(() => console.log('callback'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: Event) => void} [options.onEntry] The callback function to be invoked on mouse enter\n * @param {(event: Event) => void} [options.onLeave] The callback function to be invoked on mouse leave\n * @returns {{ ref: StateRef<Target> } & UseHoverReturn} The state of the hover\n *\n * @example\n * const [ref, hovering] = useHover(options);\n */\nexport const useHover = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onEntry: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onEntry: params[0] }\n ) as UseHoverOptions | undefined;\n\n const [hovering, setHovering] = useState(false);\n const internalRef = useRefState<Element>();\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const element = (target ? getElement(target) : internalRef.current) as Element;\n\n if (!element) return;\n\n const onMouseEnter = (event: Event) => {\n internalOptionsRef.current?.onEntry?.(event);\n setHovering(true);\n };\n\n const onMouseLeave = (event: Event) => {\n internalOptionsRef.current?.onLeave?.(event);\n setHovering(false);\n };\n\n element.addEventListener('mouseenter', onMouseEnter);\n element.addEventListener('mouseleave', onMouseLeave);\n\n return () => {\n element.removeEventListener('mouseenter', onMouseEnter);\n element.removeEventListener('mouseleave', onMouseLeave);\n };\n }, [target, internalRef.state]);\n\n if (target) return hovering;\n return {\n ref: internalRef,\n value: hovering\n } as const;\n}) as UseHover;\n"],"names":["useHover","params","target","isTarget","options","hovering","setHovering","useState","internalRef","useRefState","internalOptionsRef","useRef","useEffect","element","getElement","onMouseEnter","event","onMouseLeave"],"mappings":"mPA6EaA,EAAY,IAAIC,IAAkB,CAC7C,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAE5CG,EACJF,EACI,OAAOD,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,QAASA,EAAO,CAAC,CAAA,EACrB,OAAOA,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,QAASA,EAAO,CAAC,CAAA,EAGrB,CAACI,EAAUC,CAAW,EAAIC,EAAAA,SAAS,EAAK,EACxCC,EAAcC,EAAAA,YAAA,EACdC,EAAqBC,EAAAA,OAAOP,CAAO,EA4BzC,OA3BAM,EAAmB,QAAUN,EAE7BQ,EAAAA,UAAU,IAAM,CACd,GAAI,CAACV,GAAU,CAACM,EAAY,MAAO,OACnC,MAAMK,EAAWX,EAASY,EAAAA,WAAWZ,CAAM,EAAIM,EAAY,QAE3D,GAAI,CAACK,EAAS,OAEd,MAAME,EAAgBC,GAAiB,CACrCN,EAAmB,SAAS,UAAUM,CAAK,EAC3CV,EAAY,EAAI,CAAA,EAGZW,EAAgBD,GAAiB,CACrCN,EAAmB,SAAS,UAAUM,CAAK,EAC3CV,EAAY,EAAK,CAAA,EAGnB,OAAAO,EAAQ,iBAAiB,aAAcE,CAAY,EACnDF,EAAQ,iBAAiB,aAAcI,CAAY,EAE5C,IAAM,CACXJ,EAAQ,oBAAoB,aAAcE,CAAY,EACtDF,EAAQ,oBAAoB,aAAcI,CAAY,CAAA,CACxD,EACC,CAACf,EAAQM,EAAY,KAAK,CAAC,EAE1BN,EAAeG,EACZ,CACL,IAAKG,EACL,MAAOH,CAAA,CAEX"}
1
+ {"version":3,"file":"useHover.cjs","sources":["../../../../src/hooks/useHover/useHover.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use hover options type */\nexport interface UseHoverOptions {\n /** The on entry callback */\n onEntry?: (event: Event) => void;\n /** The on leave callback */\n onLeave?: (event: Event) => void;\n}\n\nexport interface UseHoverReturn {\n value: boolean;\n}\n\nexport interface UseHover {\n (target: HookTarget, callback?: (event: Event) => void): boolean;\n\n (target: HookTarget, options?: UseHoverOptions): boolean;\n\n <Target extends Element>(\n callback?: (event: Event) => void,\n target?: never\n ): {\n ref: StateRef<Target>;\n } & UseHoverReturn;\n\n <Target extends Element>(\n options?: UseHoverOptions,\n target?: never\n ): {\n ref: StateRef<Target>;\n } & UseHoverReturn;\n}\n\n/**\n * @name useHover\n * @description - Hook that defines the logic when hovering an element\n * @category Elements\n *\n * @overload\n * @param {HookTarget} target The target element to be hovered\n * @param {(event: Event) => void} [callback] The callback function to be invoked on mouse enter\n * @returns {boolean} The state of the hover\n *\n * @example\n * const hovering = useHover(ref, () => console.log('callback'));\n *\n * @overload\n * @param {HookTarget} target The target element to be hovered\n * @param {(event: Event) => void} [options.onEntry] The callback function to be invoked on mouse enter\n * @param {(event: Event) => void} [options.onLeave] The callback function to be invoked on mouse leave\n * @returns {boolean} The state of the hover\n *\n * @example\n * const hovering = useHover(ref, options);\n *\n * @overload\n * @template Target The target element\n * @param {(event: Event) => void} [callback] The callback function to be invoked on mouse enter\n * @returns {{ ref: StateRef<Target> } & UseHoverReturn} The state of the hover\n *\n * @example\n * const [ref, hovering] = useHover(() => console.log('callback'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: Event) => void} [options.onEntry] The callback function to be invoked on mouse enter\n * @param {(event: Event) => void} [options.onLeave] The callback function to be invoked on mouse leave\n * @returns {{ ref: StateRef<Target> } & UseHoverReturn} The state of the hover\n *\n * @example\n * const [ref, hovering] = useHover(options);\n */\nexport const useHover = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onEntry: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onEntry: params[0] }\n ) as UseHoverOptions | undefined;\n\n const [hovering, setHovering] = useState(false);\n const internalRef = useRefState<Element>();\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const element = (target ? getElement(target) : internalRef.current) as Element;\n\n if (!element) return;\n\n const onMouseEnter = (event: Event) => {\n internalOptionsRef.current?.onEntry?.(event);\n setHovering(true);\n };\n\n const onMouseLeave = (event: Event) => {\n internalOptionsRef.current?.onLeave?.(event);\n setHovering(false);\n };\n\n element.addEventListener('mouseenter', onMouseEnter);\n element.addEventListener('mouseleave', onMouseLeave);\n\n return () => {\n element.removeEventListener('mouseenter', onMouseEnter);\n element.removeEventListener('mouseleave', onMouseLeave);\n };\n }, [target, internalRef.state]);\n\n if (target) return hovering;\n return {\n ref: internalRef,\n value: hovering\n } as const;\n}) as UseHover;\n"],"names":["useHover","params","target","isTarget","options","hovering","setHovering","useState","internalRef","useRefState","internalOptionsRef","useRef","useEffect","element","getElement","onMouseEnter","event","onMouseLeave"],"mappings":"mPAiFaA,EAAY,IAAIC,IAAkB,CAC7C,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAE5CG,EACJF,EACI,OAAOD,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,QAASA,EAAO,CAAC,CAAA,EACrB,OAAOA,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,QAASA,EAAO,CAAC,CAAA,EAGrB,CAACI,EAAUC,CAAW,EAAIC,EAAAA,SAAS,EAAK,EACxCC,EAAcC,EAAAA,YAAA,EACdC,EAAqBC,EAAAA,OAAOP,CAAO,EA4BzC,OA3BAM,EAAmB,QAAUN,EAE7BQ,EAAAA,UAAU,IAAM,CACd,GAAI,CAACV,GAAU,CAACM,EAAY,MAAO,OACnC,MAAMK,EAAWX,EAASY,EAAAA,WAAWZ,CAAM,EAAIM,EAAY,QAE3D,GAAI,CAACK,EAAS,OAEd,MAAME,EAAgBC,GAAiB,CACrCN,EAAmB,SAAS,UAAUM,CAAK,EAC3CV,EAAY,EAAI,CAAA,EAGZW,EAAgBD,GAAiB,CACrCN,EAAmB,SAAS,UAAUM,CAAK,EAC3CV,EAAY,EAAK,CAAA,EAGnB,OAAAO,EAAQ,iBAAiB,aAAcE,CAAY,EACnDF,EAAQ,iBAAiB,aAAcI,CAAY,EAE5C,IAAM,CACXJ,EAAQ,oBAAoB,aAAcE,CAAY,EACtDF,EAAQ,oBAAoB,aAAcI,CAAY,CAAA,CACxD,EACC,CAACf,EAAQM,EAAY,KAAK,CAAC,EAE1BN,EAAeG,EACZ,CACL,IAAKG,EACL,MAAOH,CAAA,CAEX"}
@@ -1 +1 @@
1
- {"version":3,"file":"useImage.cjs","sources":["../../../../src/hooks/useImage/useImage.ts"],"sourcesContent":["import type { UseQueryOptions, UseQueryReturn } from '../useQuery/useQuery';\n\nimport { useQuery } from '../useQuery/useQuery';\n\n/** The use image options */\nexport interface UseImageOptions {\n /** The alt of the image */\n alt?: string;\n /** The class of the image */\n class?: string;\n /** The crossorigin of the image */\n crossorigin?: string;\n /** The loading of the image */\n loading?: HTMLImageElement['loading'];\n /** The referrer policy of the image */\n referrerPolicy?: HTMLImageElement['referrerPolicy'];\n /** The sizes of the image */\n sizes?: string;\n /** The srcset of the image */\n srcset?: string;\n}\n\n/** The use image return type */\nexport type UseImageReturn = UseQueryReturn<HTMLImageElement>;\n\nconst loadImage = async (src: string, options: UseImageOptions = {}): Promise<HTMLImageElement> =>\n new Promise((resolve, reject) => {\n const img = new Image();\n const { srcset, sizes, class: className, loading, crossorigin, referrerPolicy } = options;\n\n img.src = src;\n if (srcset) img.srcset = srcset;\n if (sizes) img.sizes = sizes;\n if (className) img.className = className;\n if (loading) img.loading = loading;\n if (crossorigin) img.crossOrigin = crossorigin;\n\n if (referrerPolicy) img.referrerPolicy = referrerPolicy;\n\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n\n/**\n * @name useImage\n * @description - Hook that load an image in the browser\n * @category Browser\n *\n * @param {string} src The source of the image\n * @param {string} [options.srcset] The srcset of the image\n * @param {string} [options.sizes] The sizes of the image\n * @param {string} [options.alt] The alt of the image\n * @param {string} [options.class] The class of the image\n * @param {HTMLImageElement['loading']} [options.loading] The loading of the image\n * @param {string} [options.crossorigin] The crossorigin of the image\n * @param {HTMLImageElement['referrerPolicy']} [options.referrerPolicy] The referrerPolicy of the image\n * @param {DependencyList} [useQueryOptions.keys] The dependencies for the hook\n * @param {(data: Data) => void} [useQueryOptions.onSuccess] The callback function to be invoked on success\n * @param {(error: Error) => void} [useQueryOptions.onError] The callback function to be invoked on error\n * @param {number} [useQueryOptions.refetchInterval] The refetch interval\n * @param {boolean | number} [useQueryOptions.retry] The retry count of requests\n * @returns {UseImageReturn} An object with the state of the image\n *\n * @example\n * const { data, isLoading, isError, isSuccess, error, refetch, isRefetching } = useImage('https://example.com/image.png');\n */\nexport const useImage = (\n src: string,\n options?: UseImageOptions,\n useQueryOptions: Omit<\n UseQueryOptions<HTMLImageElement, HTMLImageElement>,\n 'initialData' | 'placeholderData' | 'select'\n > = {}\n) =>\n useQuery(() => loadImage(src, options), {\n keys: [src, ...(useQueryOptions.keys ?? [])],\n ...useQueryOptions\n });\n"],"names":["loadImage","src","options","resolve","reject","img","srcset","sizes","className","loading","crossorigin","referrerPolicy","useImage","useQueryOptions","useQuery"],"mappings":"4HAyBMA,EAAY,MAAOC,EAAaC,EAA2B,CAAA,IAC/D,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC/B,MAAMC,EAAM,IAAI,MACV,CAAE,OAAAC,EAAQ,MAAAC,EAAO,MAAOC,EAAW,QAAAC,EAAS,YAAAC,EAAa,eAAAC,GAAmBT,EAElFG,EAAI,IAAMJ,EACNK,MAAY,OAASA,GACrBC,MAAW,MAAQA,GACnBC,MAAe,UAAYA,GAC3BC,MAAa,QAAUA,GACvBC,MAAiB,YAAcA,GAE/BC,MAAoB,eAAiBA,GAEzCN,EAAI,OAAS,IAAMF,EAAQE,CAAG,EAC9BA,EAAI,QAAUD,CAChB,CAAC,EAyBUQ,EAAW,CACtBX,EACAC,EACAW,EAGI,CAAA,IAEJC,EAAAA,SAAS,IAAMd,EAAUC,EAAKC,CAAO,EAAG,CACtC,KAAM,CAACD,EAAK,GAAIY,EAAgB,MAAQ,CAAA,CAAG,EAC3C,GAAGA,CACL,CAAC"}
1
+ {"version":3,"file":"useImage.cjs","sources":["../../../../src/hooks/useImage/useImage.ts"],"sourcesContent":["import type { UseQueryOptions, UseQueryReturn } from '../useQuery/useQuery';\n\nimport { useQuery } from '../useQuery/useQuery';\n\n/** The use image options */\nexport interface UseImageOptions {\n /** The alt of the image */\n alt?: string;\n /** The class of the image */\n class?: string;\n /** The crossorigin of the image */\n crossorigin?: string;\n /** The loading of the image */\n loading?: HTMLImageElement['loading'];\n /** The referrer policy of the image */\n referrerPolicy?: HTMLImageElement['referrerPolicy'];\n /** The sizes of the image */\n sizes?: string;\n /** The srcset of the image */\n srcset?: string;\n}\n\n/** The use image return type */\nexport type UseImageReturn = UseQueryReturn<HTMLImageElement>;\n\nconst loadImage = async (src: string, options: UseImageOptions = {}): Promise<HTMLImageElement> =>\n new Promise((resolve, reject) => {\n const img = new Image();\n const { srcset, sizes, class: className, loading, crossorigin, referrerPolicy } = options;\n\n img.src = src;\n if (srcset) img.srcset = srcset;\n if (sizes) img.sizes = sizes;\n if (className) img.className = className;\n if (loading) img.loading = loading;\n if (crossorigin) img.crossOrigin = crossorigin;\n\n if (referrerPolicy) img.referrerPolicy = referrerPolicy;\n\n img.onload = () => resolve(img);\n img.onerror = reject;\n });\n\n/**\n * @name useImage\n * @description - Hook that load an image in the browser\n * @category Elements\n *\n * @param {string} src The source of the image\n * @param {string} [options.srcset] The srcset of the image\n * @param {string} [options.sizes] The sizes of the image\n * @param {string} [options.alt] The alt of the image\n * @param {string} [options.class] The class of the image\n * @param {HTMLImageElement['loading']} [options.loading] The loading of the image\n * @param {string} [options.crossorigin] The crossorigin of the image\n * @param {HTMLImageElement['referrerPolicy']} [options.referrerPolicy] The referrerPolicy of the image\n * @param {DependencyList} [useQueryOptions.keys] The dependencies for the hook\n * @param {(data: Data) => void} [useQueryOptions.onSuccess] The callback function to be invoked on success\n * @param {(error: Error) => void} [useQueryOptions.onError] The callback function to be invoked on error\n * @param {number} [useQueryOptions.refetchInterval] The refetch interval\n * @param {boolean | number} [useQueryOptions.retry] The retry count of requests\n * @returns {UseImageReturn} An object with the state of the image\n *\n * @example\n * const { data, isLoading, isError, isSuccess, error, refetch, isRefetching } = useImage('https://example.com/image.png');\n */\nexport const useImage = (\n src: string,\n options?: UseImageOptions,\n useQueryOptions: Omit<\n UseQueryOptions<HTMLImageElement, HTMLImageElement>,\n 'initialData' | 'placeholderData' | 'select'\n > = {}\n) =>\n useQuery(() => loadImage(src, options), {\n keys: [src, ...(useQueryOptions.keys ?? [])],\n ...useQueryOptions\n });\n"],"names":["loadImage","src","options","resolve","reject","img","srcset","sizes","className","loading","crossorigin","referrerPolicy","useImage","useQueryOptions","useQuery"],"mappings":"4HAyBMA,EAAY,MAAOC,EAAaC,EAA2B,CAAA,IAC/D,IAAI,QAAQ,CAACC,EAASC,IAAW,CAC/B,MAAMC,EAAM,IAAI,MACV,CAAE,OAAAC,EAAQ,MAAAC,EAAO,MAAOC,EAAW,QAAAC,EAAS,YAAAC,EAAa,eAAAC,GAAmBT,EAElFG,EAAI,IAAMJ,EACNK,MAAY,OAASA,GACrBC,MAAW,MAAQA,GACnBC,MAAe,UAAYA,GAC3BC,MAAa,QAAUA,GACvBC,MAAiB,YAAcA,GAE/BC,MAAoB,eAAiBA,GAEzCN,EAAI,OAAS,IAAMF,EAAQE,CAAG,EAC9BA,EAAI,QAAUD,CAChB,CAAC,EAyBUQ,EAAW,CACtBX,EACAC,EACAW,EAGI,CAAA,IAEJC,EAAAA,SAAS,IAAMd,EAAUC,EAAKC,CAAO,EAAG,CACtC,KAAM,CAACD,EAAK,GAAIY,EAAgB,MAAQ,CAAA,CAAG,EAC3C,GAAGA,CACL,CAAC"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react"),L=require("../useEvent/useEvent.cjs"),T=require("../useRefState/useRefState.cjs"),m=require("../../utils/helpers/isTarget.cjs"),y=require("../../utils/helpers/getElement.cjs"),I=(...e)=>{const t=m.isTarget(e[0])?e[0]:void 0,c=t?e[1]:e[0],i=t?e[2]:e[1],l=i?.direction??"bottom",u=i?.distance??10,[r,a]=s.useState(!1),o=T.useRefState(),f=s.useRef(c);f.current=c;const d=L.useEvent(async n=>{if(r)return;const{clientHeight:S,scrollHeight:b,scrollTop:g,clientWidth:h,scrollWidth:v,scrollLeft:E}=n.target,R=b-(g+S),q=v-(E+h);({bottom:R,top:g,right:q,left:E})[l]<=u&&(a(!0),await f.current(n),a(!1))});return s.useEffect(()=>{if(!t&&!o.state)return;const n=t?y.getElement(t):o.current;if(n)return n.addEventListener("scroll",d),()=>{n.removeEventListener("scroll",d)}},[t,o.state,l,u]),t?r:{ref:o,loading:r}};exports.useInfiniteScroll=I;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react"),m=require("../useRefState/useRefState.cjs"),y=require("../../utils/helpers/isTarget.cjs"),I=require("../../utils/helpers/getElement.cjs"),k=(...e)=>{const t=y.isTarget(e[0])?e[0]:void 0,s=t?e[1]:e[0],i=t?e[2]:e[1],l=i?.direction??"bottom",u=i?.distance??10,[n,a]=o.useState(!1),r=m.useRefState(),f=o.useRef(s);f.current=s;const d=o.useRef(n);return d.current=n,o.useEffect(()=>{if(!t&&!r.state)return;const c=t?I.getElement(t):r.current;if(!c)return;const g=async R=>{if(d.current)return;const{clientHeight:h,scrollHeight:L,scrollTop:S,clientWidth:E,scrollWidth:q,scrollLeft:b}=R.target,v=L-(S+h),T=q-(b+E);({bottom:v,top:S,right:T,left:b})[l]<=u&&(a(!0),await f.current(R),a(!1))};return c.addEventListener("scroll",g),()=>{c.removeEventListener("scroll",g)}},[t,r.state,l,u]),t?n:{ref:r,loading:n}};exports.useInfiniteScroll=k;
2
2
  //# sourceMappingURL=useInfiniteScroll.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useInfiniteScroll.cjs","sources":["../../../../src/hooks/useInfiniteScroll/useInfiniteScroll.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\n/** The use infinite scroll options type */\nexport interface UseInfiniteScrollOptions {\n /** The direction to trigger the callback */\n direction?: 'bottom' | 'left' | 'right' | 'top';\n /** The distance in pixels to trigger the callback */\n distance?: number;\n}\n\nexport interface UseInfiniteScroll {\n (\n target: HookTarget,\n callback: (event: Event) => void,\n options?: UseInfiniteScrollOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: Event) => void,\n options?: UseInfiniteScrollOptions,\n target?: never\n ): {\n ref: StateRef<Target>;\n loading: boolean;\n };\n}\n\n/**\n * @name useInfiniteScroll\n * @description - Hook that defines the logic for infinite scroll\n * @category Sensors\n *\n * @overload\n * @template Target The target element\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @param {number} [options.distance=10] The distance in pixels to trigger the callback\n * @param {string} [options.direction='bottom'] The direction to trigger the callback\n * @returns {{ ref: StateRef<Target>, loading: boolean }} An object containing the ref and loading\n *\n * @example\n * const { ref, loading } = useInfiniteScroll(() => console.log('infinite scroll'));\n *\n * @overload\n * @param {HookTarget} target The target element to detect infinite scroll for\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @param {number} [options.distance=10] The distance in pixels to trigger the callback\n * @param {string} [options.direction='bottom'] The direction to trigger the callback\n * @returns {boolean} A loading indicator of the infinite scroll\n *\n * @example\n * const loading = useInfiniteScroll(ref, () => console.log('infinite scroll'));\n */\nexport const useInfiniteScroll = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as (event: Event) => void;\n const options = (target ? params[2] : params[1]) as UseInfiniteScrollOptions | undefined;\n\n const direction = options?.direction ?? 'bottom';\n const distance = options?.distance ?? 10;\n\n const [loading, setIsLoading] = useState(false);\n\n const internalRef = useRefState<Element>();\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n const onLoadMore = useEvent(async (event: Event) => {\n if (loading) return;\n const { clientHeight, scrollHeight, scrollTop, clientWidth, scrollWidth, scrollLeft } =\n event.target as Element;\n const scrollBottom = scrollHeight - (scrollTop + clientHeight);\n const scrollRight = scrollWidth - (scrollLeft + clientWidth);\n\n const distances = {\n bottom: scrollBottom,\n top: scrollTop,\n right: scrollRight,\n left: scrollLeft\n };\n\n if (distances[direction] <= distance) {\n setIsLoading(true);\n await internalCallbackRef.current(event);\n setIsLoading(false);\n }\n });\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n element.addEventListener('scroll', onLoadMore);\n\n return () => {\n element.removeEventListener('scroll', onLoadMore);\n };\n }, [target, internalRef.state, direction, distance]);\n\n if (target) return loading;\n return {\n ref: internalRef,\n loading\n };\n}) as UseInfiniteScroll;\n"],"names":["useInfiniteScroll","params","target","isTarget","callback","options","direction","distance","loading","setIsLoading","useState","internalRef","useRefState","internalCallbackRef","useRef","onLoadMore","useEvent","event","clientHeight","scrollHeight","scrollTop","clientWidth","scrollWidth","scrollLeft","scrollBottom","scrollRight","useEffect","element","getElement"],"mappings":"yRA6DaA,EAAqB,IAAIC,IAAkB,CACtD,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,EAExCK,EAAYD,GAAS,WAAa,SAClCE,EAAWF,GAAS,UAAY,GAEhC,CAACG,EAASC,CAAY,EAAIC,EAAAA,SAAS,EAAK,EAExCC,EAAcC,EAAAA,YAAA,EACdC,EAAsBC,EAAAA,OAAOV,CAAQ,EAC3CS,EAAoB,QAAUT,EAE9B,MAAMW,EAAaC,WAAS,MAAOC,GAAiB,CAClD,GAAIT,EAAS,OACb,KAAM,CAAE,aAAAU,EAAc,aAAAC,EAAc,UAAAC,EAAW,YAAAC,EAAa,YAAAC,EAAa,WAAAC,GACvEN,EAAM,OACFO,EAAeL,GAAgBC,EAAYF,GAC3CO,EAAcH,GAAeC,EAAaF,IAE9B,CAChB,OAAQG,EACR,IAAKJ,EACL,MAAOK,EACP,KAAMF,CAAA,GAGMjB,CAAS,GAAKC,IAC1BE,EAAa,EAAI,EACjB,MAAMI,EAAoB,QAAQI,CAAK,EACvCR,EAAa,EAAK,EACpB,CACD,EAcD,OAZAiB,EAAAA,UAAU,IAAM,CACd,GAAI,CAACxB,GAAU,CAACS,EAAY,MAAO,OACnC,MAAMgB,EAAWzB,EAAS0B,EAAAA,WAAW1B,CAAM,EAAIS,EAAY,QAC3D,GAAKgB,EAEL,OAAAA,EAAQ,iBAAiB,SAAUZ,CAAU,EAEtC,IAAM,CACXY,EAAQ,oBAAoB,SAAUZ,CAAU,CAAA,CAClD,EACC,CAACb,EAAQS,EAAY,MAAOL,EAAWC,CAAQ,CAAC,EAE/CL,EAAeM,EACZ,CACL,IAAKG,EACL,QAAAH,CAAA,CAEJ"}
1
+ {"version":3,"file":"useInfiniteScroll.cjs","sources":["../../../../src/hooks/useInfiniteScroll/useInfiniteScroll.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use infinite scroll options type */\nexport interface UseInfiniteScrollOptions {\n /** The direction to trigger the callback */\n direction?: 'bottom' | 'left' | 'right' | 'top';\n /** The distance in pixels to trigger the callback */\n distance?: number;\n}\n\nexport interface UseInfiniteScroll {\n (\n target: HookTarget,\n callback: (event: Event) => void,\n options?: UseInfiniteScrollOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: Event) => void,\n options?: UseInfiniteScrollOptions,\n target?: never\n ): {\n ref: StateRef<Target>;\n loading: boolean;\n };\n}\n\n/**\n * @name useInfiniteScroll\n * @description - Hook that defines the logic for infinite scroll\n * @category Sensors\n *\n * @overload\n * @template Target The target element\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @param {number} [options.distance=10] The distance in pixels to trigger the callback\n * @param {string} [options.direction='bottom'] The direction to trigger the callback\n * @returns {{ ref: StateRef<Target>, loading: boolean }} An object containing the ref and loading\n *\n * @example\n * const { ref, loading } = useInfiniteScroll(() => console.log('infinite scroll'));\n *\n * @overload\n * @param {HookTarget} target The target element to detect infinite scroll for\n * @param {(event: Event) => void} callback The callback to execute when a click outside the target is detected\n * @param {number} [options.distance=10] The distance in pixels to trigger the callback\n * @param {string} [options.direction='bottom'] The direction to trigger the callback\n * @returns {boolean} A loading indicator of the infinite scroll\n *\n * @example\n * const loading = useInfiniteScroll(ref, () => console.log('infinite scroll'));\n */\nexport const useInfiniteScroll = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as (event: Event) => void;\n const options = (target ? params[2] : params[1]) as UseInfiniteScrollOptions | undefined;\n\n const direction = options?.direction ?? 'bottom';\n const distance = options?.distance ?? 10;\n\n const [loading, setIsLoading] = useState(false);\n\n const internalRef = useRefState<Element>();\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n const internalLoadingRef = useRef(loading);\n internalLoadingRef.current = loading;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n const element = (target ? getElement(target) : internalRef.current) as Element;\n if (!element) return;\n\n const onLoadMore = async (event: Event) => {\n if (internalLoadingRef.current) return;\n\n const { clientHeight, scrollHeight, scrollTop, clientWidth, scrollWidth, scrollLeft } =\n event.target as Element;\n const scrollBottom = scrollHeight - (scrollTop + clientHeight);\n const scrollRight = scrollWidth - (scrollLeft + clientWidth);\n\n const distances = {\n bottom: scrollBottom,\n top: scrollTop,\n right: scrollRight,\n left: scrollLeft\n };\n\n if (distances[direction] <= distance) {\n setIsLoading(true);\n await internalCallbackRef.current(event);\n setIsLoading(false);\n }\n };\n\n element.addEventListener('scroll', onLoadMore);\n\n return () => {\n element.removeEventListener('scroll', onLoadMore);\n };\n }, [target, internalRef.state, direction, distance]);\n\n if (target) return loading;\n return {\n ref: internalRef,\n loading\n };\n}) as UseInfiniteScroll;\n"],"names":["useInfiniteScroll","params","target","isTarget","callback","options","direction","distance","loading","setIsLoading","useState","internalRef","useRefState","internalCallbackRef","useRef","internalLoadingRef","useEffect","element","getElement","onLoadMore","event","clientHeight","scrollHeight","scrollTop","clientWidth","scrollWidth","scrollLeft","scrollBottom","scrollRight"],"mappings":"mPA4DaA,EAAqB,IAAIC,IAAkB,CACtD,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,EAExCK,EAAYD,GAAS,WAAa,SAClCE,EAAWF,GAAS,UAAY,GAEhC,CAACG,EAASC,CAAY,EAAIC,EAAAA,SAAS,EAAK,EAExCC,EAAcC,EAAAA,YAAA,EACdC,EAAsBC,EAAAA,OAAOV,CAAQ,EAC3CS,EAAoB,QAAUT,EAC9B,MAAMW,EAAqBD,EAAAA,OAAON,CAAO,EAqCzC,OApCAO,EAAmB,QAAUP,EAE7BQ,EAAAA,UAAU,IAAM,CACd,GAAI,CAACd,GAAU,CAACS,EAAY,MAAO,OACnC,MAAMM,EAAWf,EAASgB,EAAAA,WAAWhB,CAAM,EAAIS,EAAY,QAC3D,GAAI,CAACM,EAAS,OAEd,MAAME,EAAa,MAAOC,GAAiB,CACzC,GAAIL,EAAmB,QAAS,OAEhC,KAAM,CAAE,aAAAM,EAAc,aAAAC,EAAc,UAAAC,EAAW,YAAAC,EAAa,YAAAC,EAAa,WAAAC,GACvEN,EAAM,OACFO,EAAeL,GAAgBC,EAAYF,GAC3CO,EAAcH,GAAeC,EAAaF,IAE9B,CAChB,OAAQG,EACR,IAAKJ,EACL,MAAOK,EACP,KAAMF,CAAA,GAGMpB,CAAS,GAAKC,IAC1BE,EAAa,EAAI,EACjB,MAAMI,EAAoB,QAAQO,CAAK,EACvCX,EAAa,EAAK,EACpB,EAGF,OAAAQ,EAAQ,iBAAiB,SAAUE,CAAU,EAEtC,IAAM,CACXF,EAAQ,oBAAoB,SAAUE,CAAU,CAAA,CAClD,EACC,CAACjB,EAAQS,EAAY,MAAOL,EAAWC,CAAQ,CAAC,EAE/CL,EAAeM,EACZ,CACL,IAAKG,EACL,QAAAH,CAAA,CAEJ"}
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react"),d=require("../useRefState/useRefState.cjs"),v=require("../../utils/helpers/isTarget.cjs"),b=require("../../utils/helpers/getElement.cjs"),h=(...e)=>{const n=v.isTarget(e[0])?e[0]:void 0,t=n?typeof e[1]=="object"?e[1]:{onChange:e[1]}:typeof e[0]=="object"?e[0]:{onChange:e[0]},c=t?.onChange,i=t?.enabled??!0,[r,a]=s.useState(),o=d.useRefState(),u=s.useRef(c);return u.current=c,s.useEffect(()=>{if(!i||!n&&!o.state)return;const g=n?b.getElement(n):o.current;if(!g)return;const f=new IntersectionObserver(([l])=>{a(l),u.current?.(l)},{...t,root:t?.root?b.getElement(t.root):document});return f.observe(g),()=>{f.disconnect()}},[n,o.state,t?.rootMargin,t?.threshold,t?.root,i]),n?{entry:r,inView:!!r?.isIntersecting}:{ref:o,entry:r,inView:!!r?.isIntersecting}};exports.useIntersectionObserver=h;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const s=require("react"),d=require("../useRefState/useRefState.cjs"),v=require("../../utils/helpers/isTarget.cjs"),b=require("../../utils/helpers/getElement.cjs"),h=(...e)=>{const n=v.isTarget(e[0])?e[0]:void 0,t=n?typeof e[1]=="object"?e[1]:{onChange:e[1]}:typeof e[0]=="object"?e[0]:{onChange:e[0]},c=t?.onChange,i=t?.enabled??!0,[r,a]=s.useState(),o=d.useRefState(),u=s.useRef(c);return u.current=c,s.useEffect(()=>{if(!i||!n&&!o.state)return;const l=n?b.getElement(n):o.current;if(!l)return;const f=new IntersectionObserver(([g])=>{a(g),u.current?.(g)},{...t,root:t?.root?b.getElement(t.root):document});return f.observe(l),()=>{f.disconnect()}},[n,o.state,t?.rootMargin,t?.threshold,t?.root,i]),n?{entry:r,inView:!!r?.isIntersecting}:{ref:o,entry:r,inView:!!r?.isIntersecting}};exports.useIntersectionObserver=h;
2
2
  //# sourceMappingURL=useIntersectionObserver.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useIntersectionObserver.cjs","sources":["../../../../src/hooks/useIntersectionObserver/useIntersectionObserver.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 intersection observer options type */\nexport interface UseIntersectionObserverOptions extends Omit<IntersectionObserverInit, 'root'> {\n enabled?: boolean;\n root?: HookTarget;\n onChange?: (entry: IntersectionObserverEntry) => void;\n}\n\n/** The intersection observer return type */\nexport interface UseIntersectionObserverReturn {\n entry?: IntersectionObserverEntry;\n inView: boolean;\n}\n\nexport interface UseIntersectionObserver {\n <Target extends Element>(\n options?: UseIntersectionObserverOptions,\n target?: never\n ): UseIntersectionObserverReturn & { ref: StateRef<Target> };\n\n (target: HookTarget, options?: UseIntersectionObserverOptions): UseIntersectionObserverReturn;\n\n <Target extends Element>(\n callback: (entry: IntersectionObserverEntry) => void,\n target?: never\n ): UseIntersectionObserverReturn & { ref: StateRef<Target> };\n\n (\n callback: (entry: IntersectionObserverEntry) => void,\n target: HookTarget\n ): UseIntersectionObserverReturn;\n}\n\n/**\n * @name useIntersectionObserver\n * @description - Hook that gives you intersection observer state\n * @category Browser\n *\n * @browserapi IntersectionObserver https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver\n *\n * @overload\n * @param {HookTarget} target The target element to detect intersection\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root=document] The root element to observe\n * @returns {UseIntersectionObserverReturn} An object containing the state\n *\n * @example\n * const { ref, entry, inView } = useIntersectionObserver();\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root=document] The root element to observe\n * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element\n *\n * @example\n * const { entry, inView } = useIntersectionObserver(ref);\n *\n * @overload\n * @template Target The target element\n * @param {(entry: IntersectionObserverEntry) => void} callback The callback to execute when intersection is detected\n * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element\n *\n * @example\n * const { ref, entry, inView } = useIntersectionObserver(() => console.log('callback'));\n *\n * @overload\n * @param {(entry: IntersectionObserverEntry) => void} callback The callback to execute when intersection is detected\n * @param {HookTarget} target The target element to detect intersection\n * @returns {UseIntersectionObserverReturn} An object containing the state\n *\n * @example\n * const { entry, inView } = useIntersectionObserver(() => console.log('callback'), ref);\n */\nexport const useIntersectionObserver = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onChange: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onChange: params[0] }\n ) as UseIntersectionObserverOptions | undefined;\n\n const callback = options?.onChange;\n const enabled = options?.enabled ?? true;\n\n const [entry, setEntry] = useState<IntersectionObserverEntry>();\n\n const internalRef = useRefState<Element>();\n const internalOnChangeRef = useRef<UseIntersectionObserverOptions['onChange']>(callback);\n internalOnChangeRef.current = callback;\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n setEntry(entry);\n internalOnChangeRef.current?.(entry);\n },\n {\n ...options,\n root: options?.root ? (getElement(options.root) as Document | Element) : document\n }\n );\n\n observer.observe(element as Element);\n\n return () => {\n observer.disconnect();\n };\n }, [target, internalRef.state, options?.rootMargin, options?.threshold, options?.root, enabled]);\n\n if (target) return { entry, inView: !!entry?.isIntersecting };\n return {\n ref: internalRef,\n entry,\n inView: !!entry?.isIntersecting\n };\n}) as UseIntersectionObserver;\n"],"names":["useIntersectionObserver","params","target","isTarget","options","callback","enabled","entry","setEntry","useState","internalRef","useRefState","internalOnChangeRef","useRef","useEffect","element","getElement","observer"],"mappings":"mPAqFaA,EAA2B,IAAIC,IAAkB,CAC5D,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAE5CG,EACJF,EACI,OAAOD,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,SAAUA,EAAO,CAAC,CAAA,EACtB,OAAOA,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,SAAUA,EAAO,CAAC,CAAA,EAGtBI,EAAWD,GAAS,SACpBE,EAAUF,GAAS,SAAW,GAE9B,CAACG,EAAOC,CAAQ,EAAIC,WAAA,EAEpBC,EAAcC,EAAAA,YAAA,EACdC,EAAsBC,EAAAA,OAAmDR,CAAQ,EA2BvF,OA1BAO,EAAoB,QAAUP,EAE9BS,EAAAA,UAAU,IAAM,CACd,GAAI,CAACR,GAAY,CAACJ,GAAU,CAACQ,EAAY,MAAQ,OAEjD,MAAMK,EAAUb,EAASc,EAAAA,WAAWd,CAAM,EAAIQ,EAAY,QAC1D,GAAI,CAACK,EAAS,OAEd,MAAME,EAAW,IAAI,qBACnB,CAAC,CAACV,CAAK,IAAM,CACXC,EAASD,CAAK,EACdK,EAAoB,UAAUL,CAAK,CAAA,EAErC,CACE,GAAGH,EACH,KAAMA,GAAS,KAAQY,EAAAA,WAAWZ,EAAQ,IAAI,EAA2B,QAAA,CAC3E,EAGF,OAAAa,EAAS,QAAQF,CAAkB,EAE5B,IAAM,CACXE,EAAS,WAAA,CAAW,CACtB,EACC,CAACf,EAAQQ,EAAY,MAAON,GAAS,WAAYA,GAAS,UAAWA,GAAS,KAAME,CAAO,CAAC,EAE3FJ,EAAe,CAAE,MAAAK,EAAO,OAAQ,CAAC,CAACA,GAAO,cAAA,EACtC,CACL,IAAKG,EACL,MAAAH,EACA,OAAQ,CAAC,CAACA,GAAO,cAAA,CAErB"}
1
+ {"version":3,"file":"useIntersectionObserver.cjs","sources":["../../../../src/hooks/useIntersectionObserver/useIntersectionObserver.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type UseIntersectionObserverCallback = (entry: IntersectionObserverEntry) => void;\n\n/** The intersection observer options type */\nexport interface UseIntersectionObserverOptions extends Omit<IntersectionObserverInit, 'root'> {\n enabled?: boolean;\n onChange?: UseIntersectionObserverCallback;\n root?: HookTarget;\n}\n\n/** The intersection observer return type */\nexport interface UseIntersectionObserverReturn {\n entry?: IntersectionObserverEntry;\n inView: boolean;\n}\n\nexport interface UseIntersectionObserver {\n <Target extends Element>(\n options?: UseIntersectionObserverOptions,\n target?: never\n ): UseIntersectionObserverReturn & { ref: StateRef<Target> };\n\n (target: HookTarget, options?: UseIntersectionObserverOptions): UseIntersectionObserverReturn;\n\n <Target extends Element>(\n callback: UseIntersectionObserverCallback,\n target?: never\n ): UseIntersectionObserverReturn & { ref: StateRef<Target> };\n\n (callback: UseIntersectionObserverCallback, target: HookTarget): UseIntersectionObserverReturn;\n}\n\n/**\n * @name useIntersectionObserver\n * @description - Hook that gives you intersection observer state\n * @category Sensors\n *\n * @browserapi IntersectionObserver https://developer.mozilla.org/en-US/docs/Web/API/IntersectionObserver\n *\n * @overload\n * @param {HookTarget} target The target element to detect intersection\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root=document] The root element to observe\n * @returns {UseIntersectionObserverReturn} An object containing the state\n *\n * @example\n * const { ref, entry, inView } = useIntersectionObserver();\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.enabled=true] The IntersectionObserver options\n * @param {((entries: IntersectionObserverEntry[], observer: IntersectionObserver) => void) | undefined} [options.onChange] The callback to execute when intersection is detected\n * @param {HookTarget} [options.root=document] The root element to observe\n * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element\n *\n * @example\n * const { entry, inView } = useIntersectionObserver(ref);\n *\n * @overload\n * @template Target The target element\n * @param {UseIntersectionObserverCallback} callback The callback to execute when intersection is detected\n * @returns {UseIntersectionObserverReturn & { ref: StateRef<Target> }} A React ref to attach to the target element\n *\n * @example\n * const { ref, entry, inView } = useIntersectionObserver(() => console.log('callback'));\n *\n * @overload\n * @param {UseIntersectionObserverCallback} callback The callback to execute when intersection is detected\n * @param {HookTarget} target The target element to detect intersection\n * @returns {UseIntersectionObserverReturn} An object containing the state\n *\n * @example\n * const { entry, inView } = useIntersectionObserver(() => console.log('callback'), ref);\n */\nexport const useIntersectionObserver = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onChange: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onChange: params[0] }\n ) as UseIntersectionObserverOptions | undefined;\n\n const callback = options?.onChange;\n const enabled = options?.enabled ?? true;\n\n const [entry, setEntry] = useState<IntersectionObserverEntry>();\n\n const internalRef = useRefState<Element>();\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const observer = new IntersectionObserver(\n ([entry]) => {\n setEntry(entry);\n internalCallbackRef.current?.(entry);\n },\n {\n ...options,\n root: options?.root ? (getElement(options.root) as Document | Element) : document\n }\n );\n\n observer.observe(element as Element);\n\n return () => {\n observer.disconnect();\n };\n }, [target, internalRef.state, options?.rootMargin, options?.threshold, options?.root, enabled]);\n\n if (target) return { entry, inView: !!entry?.isIntersecting };\n return {\n ref: internalRef,\n entry,\n inView: !!entry?.isIntersecting\n };\n}) as UseIntersectionObserver;\n"],"names":["useIntersectionObserver","params","target","isTarget","options","callback","enabled","entry","setEntry","useState","internalRef","useRefState","internalCallbackRef","useRef","useEffect","element","getElement","observer"],"mappings":"mPAoFaA,EAA2B,IAAIC,IAAkB,CAC5D,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAE5CG,EACJF,EACI,OAAOD,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,SAAUA,EAAO,CAAC,CAAA,EACtB,OAAOA,EAAO,CAAC,GAAM,SACnBA,EAAO,CAAC,EACR,CAAE,SAAUA,EAAO,CAAC,CAAA,EAGtBI,EAAWD,GAAS,SACpBE,EAAUF,GAAS,SAAW,GAE9B,CAACG,EAAOC,CAAQ,EAAIC,WAAA,EAEpBC,EAAcC,EAAAA,YAAA,EACdC,EAAsBC,EAAAA,OAAOR,CAAQ,EA2B3C,OA1BAO,EAAoB,QAAUP,EAE9BS,EAAAA,UAAU,IAAM,CACd,GAAI,CAACR,GAAY,CAACJ,GAAU,CAACQ,EAAY,MAAQ,OAEjD,MAAMK,EAAUb,EAASc,EAAAA,WAAWd,CAAM,EAAIQ,EAAY,QAC1D,GAAI,CAACK,EAAS,OAEd,MAAME,EAAW,IAAI,qBACnB,CAAC,CAACV,CAAK,IAAM,CACXC,EAASD,CAAK,EACdK,EAAoB,UAAUL,CAAK,CAAA,EAErC,CACE,GAAGH,EACH,KAAMA,GAAS,KAAQY,EAAAA,WAAWZ,EAAQ,IAAI,EAA2B,QAAA,CAC3E,EAGF,OAAAa,EAAS,QAAQF,CAAkB,EAE5B,IAAM,CACXE,EAAS,WAAA,CAAW,CACtB,EACC,CAACf,EAAQQ,EAAY,MAAON,GAAS,WAAYA,GAAS,UAAWA,GAAS,KAAME,CAAO,CAAC,EAE3FJ,EAAe,CAAE,MAAAK,EAAO,OAAQ,CAAC,CAACA,GAAO,cAAA,EACtC,CACL,IAAKG,EACL,MAAAH,EACA,OAAQ,CAAC,CAACA,GAAO,cAAA,CAErB"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLastChanged.cjs","sources":["../../../../src/hooks/useLastChanged/useLastChanged.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\n\n/** The use last changed options type */\nexport interface UseLastChangedOptions {\n initialValue?: number;\n}\n\n/**\n * @name useLastChanged\n * @description - Hook for records the timestamp of the last change\n * @category Time\n *\n * @param {any} source The source of the last change\n * @param {number | null} [options.initialValue=null] The initial value\n * @returns {number | null} Return timestamp of the last change\n *\n * @example\n * const lastChanged = useLastChanged(source);\n */\nexport const useLastChanged = (source: any, options?: UseLastChangedOptions): number | null => {\n const [lastChanged, setLastChanged] = useState(options?.initialValue ?? null);\n\n useDidUpdate(() => setLastChanged(Date.now()), [source]);\n\n return lastChanged;\n};\n"],"names":["useLastChanged","source","options","lastChanged","setLastChanged","useState","useDidUpdate"],"mappings":"uJAqBaA,EAAiB,CAACC,EAAaC,IAAmD,CAC7F,KAAM,CAACC,EAAaC,CAAc,EAAIC,EAAAA,SAASH,GAAS,cAAgB,IAAI,EAE5EI,OAAAA,EAAAA,aAAa,IAAMF,EAAe,KAAK,IAAA,CAAK,EAAG,CAACH,CAAM,CAAC,EAEhDE,CACT"}
1
+ {"version":3,"file":"useLastChanged.cjs","sources":["../../../../src/hooks/useLastChanged/useLastChanged.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\n\n/** The use last changed options type */\nexport interface UseLastChangedOptions {\n initialValue?: number;\n}\n\n/**\n * @name useLastChanged\n * @description - Hook for records the timestamp of the last change\n * @category Utilities\n *\n * @param {any} source The source of the last change\n * @param {number | null} [options.initialValue=null] The initial value\n * @returns {number | null} Return timestamp of the last change\n *\n * @example\n * const lastChanged = useLastChanged(source);\n */\nexport const useLastChanged = (source: any, options?: UseLastChangedOptions): number | null => {\n const [lastChanged, setLastChanged] = useState(options?.initialValue ?? null);\n\n useDidUpdate(() => setLastChanged(Date.now()), [source]);\n\n return lastChanged;\n};\n"],"names":["useLastChanged","source","options","lastChanged","setLastChanged","useState","useDidUpdate"],"mappings":"uJAqBaA,EAAiB,CAACC,EAAaC,IAAmD,CAC7F,KAAM,CAACC,EAAaC,CAAc,EAAIC,EAAAA,SAASH,GAAS,cAAgB,IAAI,EAE5EI,OAAAA,EAAAA,aAAa,IAAMF,EAAe,KAAK,IAAA,CAAK,EAAG,CAACH,CAAM,CAAC,EAEhDE,CACT"}
@@ -1 +1 @@
1
- {"version":3,"file":"useList.cjs","sources":["../../../../src/hooks/useList/useList.ts"],"sourcesContent":["import { useState } from 'react';\n\n/** The use list return type */\nexport interface UseListReturn<Item> {\n /** The current list of items */\n value: Item[];\n /** Clears the list */\n clear: () => void;\n /** Inserts an item at the specified index */\n insertAt: (insertAtIndex: number, item: Item) => void;\n /** Adds an item to the list */\n push: (item: Item) => void;\n /** Removes an item from the list */\n removeAt: (removeAtIndex: number) => void;\n /** Sets the list of items */\n set: (list: Item[]) => void;\n /** Updates an item at the specified index */\n updateAt: (updateAtIndex: number, item: Item) => void;\n}\n\n/**\n * @name useList\n * @description - Hook that provides state and helper methods to manage a list of items\n * @category Utilities\n *\n * @template Item The type of the item\n * @param {Item[] | (() => Item[])} initialList The initial list of items\n * @returns {UseListReturn} An object containing the current list and functions to interact with the list\n *\n * @example\n * const { value, set, push, removeAt, insertAt, updateAt, clear } = useList();\n */\nexport const useList = <Item>(initialList: Item[] = []) => {\n const [list, setList] = useState(initialList);\n\n const push = (item: Item) => setList((prevList) => [...prevList, item]);\n\n const removeAt = (removeAtIndex: number) =>\n setList((prevList) => [\n ...prevList.slice(0, removeAtIndex),\n ...prevList.slice(removeAtIndex + 1)\n ]);\n\n const insertAt = (insertAtIndex: number, item: Item) =>\n setList((l) => [...l.slice(0, insertAtIndex), item, ...l.slice(insertAtIndex)]);\n\n const updateAt = (updateAtIndex: number, item: Item) =>\n setList((prevList) =>\n prevList.map((element, index) => (index === updateAtIndex ? item : element))\n );\n\n const clear = () => setList([]);\n\n const reset = () => setList(initialList);\n\n return { value: list, set: setList, push, removeAt, insertAt, updateAt, clear, reset };\n};\n"],"names":["useList","initialList","list","setList","useState","item","prevList","removeAtIndex","insertAtIndex","l","updateAtIndex","element","index"],"mappings":"yGAgCaA,EAAU,CAAOC,EAAsB,KAAO,CACzD,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAASH,CAAW,EAsB5C,MAAO,CAAE,MAAOC,EAAM,IAAKC,EAAS,KApBtBE,GAAeF,EAASG,GAAa,CAAC,GAAGA,EAAUD,CAAI,CAAC,EAoB5B,SAlBxBE,GAChBJ,EAASG,GAAa,CACpB,GAAGA,EAAS,MAAM,EAAGC,CAAa,EAClC,GAAGD,EAAS,MAAMC,EAAgB,CAAC,CAAA,CACpC,EAciD,SAZnC,CAACC,EAAuBH,IACvCF,EAASM,GAAM,CAAC,GAAGA,EAAE,MAAM,EAAGD,CAAa,EAAGH,EAAM,GAAGI,EAAE,MAAMD,CAAa,CAAC,CAAC,EAWlB,SAT7C,CAACE,EAAuBL,IACvCF,EAASG,GACPA,EAAS,IAAI,CAACK,EAASC,IAAWA,IAAUF,EAAgBL,EAAOM,CAAQ,CAAA,EAOP,MAJ1D,IAAMR,EAAQ,EAAE,EAIiD,MAFjE,IAAMA,EAAQF,CAAW,CAEwC,CACjF"}
1
+ {"version":3,"file":"useList.cjs","sources":["../../../../src/hooks/useList/useList.ts"],"sourcesContent":["import { useState } from 'react';\n\n/** The use list return type */\nexport interface UseListReturn<Item> {\n /** The current list of items */\n value: Item[];\n /** Clears the list */\n clear: () => void;\n /** Inserts an item at the specified index */\n insertAt: (insertAtIndex: number, item: Item) => void;\n /** Adds an item to the list */\n push: (item: Item) => void;\n /** Removes an item from the list */\n removeAt: (removeAtIndex: number) => void;\n /** Sets the list of items */\n set: (list: Item[]) => void;\n /** Updates an item at the specified index */\n updateAt: (updateAtIndex: number, item: Item) => void;\n}\n\n/**\n * @name useList\n * @description - Hook that provides state and helper methods to manage a list of items\n * @category State\n *\n * @template Item The type of the item\n * @param {Item[] | (() => Item[])} initialList The initial list of items\n * @returns {UseListReturn} An object containing the current list and functions to interact with the list\n *\n * @example\n * const { value, set, push, removeAt, insertAt, updateAt, clear } = useList();\n */\nexport const useList = <Item>(initialList: Item[] = []) => {\n const [list, setList] = useState(initialList);\n\n const push = (item: Item) => setList((prevList) => [...prevList, item]);\n\n const removeAt = (removeAtIndex: number) =>\n setList((prevList) => [\n ...prevList.slice(0, removeAtIndex),\n ...prevList.slice(removeAtIndex + 1)\n ]);\n\n const insertAt = (insertAtIndex: number, item: Item) =>\n setList((l) => [...l.slice(0, insertAtIndex), item, ...l.slice(insertAtIndex)]);\n\n const updateAt = (updateAtIndex: number, item: Item) =>\n setList((prevList) =>\n prevList.map((element, index) => (index === updateAtIndex ? item : element))\n );\n\n const clear = () => setList([]);\n\n const reset = () => setList(initialList);\n\n return {\n value: list,\n set: setList,\n push,\n removeAt,\n insertAt,\n updateAt,\n clear,\n reset\n };\n};\n"],"names":["useList","initialList","list","setList","useState","item","prevList","removeAtIndex","insertAtIndex","l","updateAtIndex","element","index"],"mappings":"yGAgCaA,EAAU,CAAOC,EAAsB,KAAO,CACzD,KAAM,CAACC,EAAMC,CAAO,EAAIC,EAAAA,SAASH,CAAW,EAsB5C,MAAO,CACL,MAAOC,EACP,IAAKC,EACL,KAvBYE,GAAeF,EAASG,GAAa,CAAC,GAAGA,EAAUD,CAAI,CAAC,EAwBpE,SAtBgBE,GAChBJ,EAASG,GAAa,CACpB,GAAGA,EAAS,MAAM,EAAGC,CAAa,EAClC,GAAGD,EAAS,MAAMC,EAAgB,CAAC,CAAA,CACpC,EAmBD,SAjBe,CAACC,EAAuBH,IACvCF,EAASM,GAAM,CAAC,GAAGA,EAAE,MAAM,EAAGD,CAAa,EAAGH,EAAM,GAAGI,EAAE,MAAMD,CAAa,CAAC,CAAC,EAiB9E,SAfe,CAACE,EAAuBL,IACvCF,EAASG,GACPA,EAAS,IAAI,CAACK,EAASC,IAAWA,IAAUF,EAAgBL,EAAOM,CAAQ,CAAA,EAc7E,MAXY,IAAMR,EAAQ,EAAE,EAY5B,MAVY,IAAMA,EAAQF,CAAW,CAUrC,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLocalStorage.cjs","sources":["../../../../src/hooks/useLocalStorage/useLocalStorage.ts"],"sourcesContent":["import type { UseStorageInitialValue, UseStorageOptions } from '../useStorage/useStorage';\n\nimport { useStorage } from '../useStorage/useStorage';\n\n/**\n * @name useLocalStorage\n * @description - Hook that manages local storage value\n * @category Browser\n *\n * @browserapi localStorage https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage\n *\n * @template Value The type of the value\n * @param {string} key The key of the storage\n * @param {UseStorageInitialValue<Value>} [initialValue] The initial value of the storage\n * @param {UseStorageOptions<Value>} [options] The options of the storage\n *\n * @example\n * const { value, set, remove } = useLocalStorage('key', 'value');\n */\nexport const useLocalStorage = <Value>(\n key: string,\n initialValue?: UseStorageInitialValue<Value>,\n options?: Omit<UseStorageOptions<Value>, 'initialValue' | 'storage'>\n) =>\n useStorage(key, {\n ...options,\n initialValue,\n storage: typeof window !== 'undefined' ? window.localStorage : undefined\n });\n"],"names":["useLocalStorage","key","initialValue","options","useStorage"],"mappings":"gIAmBaA,EAAkB,CAC7BC,EACAC,EACAC,IAEAC,EAAAA,WAAWH,EAAK,CACd,GAAGE,EACH,aAAAD,EACA,QAAS,OAAO,OAAW,IAAc,OAAO,aAAe,MACjE,CAAC"}
1
+ {"version":3,"file":"useLocalStorage.cjs","sources":["../../../../src/hooks/useLocalStorage/useLocalStorage.ts"],"sourcesContent":["import type { UseStorageInitialValue, UseStorageOptions } from '../useStorage/useStorage';\n\nimport { useStorage } from '../useStorage/useStorage';\n\n/**\n * @name useLocalStorage\n * @description - Hook that manages local storage value\n * @category State\n *\n * @browserapi localStorage https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage\n *\n * @template Value The type of the value\n * @param {string} key The key of the storage\n * @param {UseStorageInitialValue<Value>} [initialValue] The initial value of the storage\n * @param {UseStorageOptions<Value>} [options] The options of the storage\n *\n * @example\n * const { value, set, remove } = useLocalStorage('key', 'value');\n */\nexport const useLocalStorage = <Value>(\n key: string,\n initialValue?: UseStorageInitialValue<Value>,\n options?: Omit<UseStorageOptions<Value>, 'initialValue' | 'storage'>\n) =>\n useStorage(key, {\n ...options,\n initialValue,\n storage: typeof window !== 'undefined' ? window.localStorage : undefined\n });\n"],"names":["useLocalStorage","key","initialValue","options","useStorage"],"mappings":"gIAmBaA,EAAkB,CAC7BC,EACAC,EACAC,IAEAC,EAAAA,WAAWH,EAAK,CACd,GAAGE,EACH,aAAAD,EACA,QAAS,OAAO,OAAW,IAAc,OAAO,aAAe,MACjE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLockCallback.cjs","sources":["../../../../src/hooks/useLockCallback/useLockCallback.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * @name useLockCallback\n * @description - Hook that prevents a callback from being executed multiple times simultaneously\n * @category Utilities\n *\n * @param {Function} callback The callback to be locked\n * @returns {Function} The locked callback\n *\n * @example\n * const lockedCallback = useLockCallback(() => promise());\n */\nexport const useLockCallback = <Callback extends (...args: any[]) => any>(callback: Callback) => {\n const lockRef = useRef(false);\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n return async (...args: Parameters<Callback>) => {\n if (lockRef.current) return;\n lockRef.current = true;\n\n try {\n return await internalCallbackRef.current(...args);\n } finally {\n lockRef.current = false;\n }\n };\n};\n"],"names":["useLockCallback","callback","lockRef","useRef","internalCallbackRef","args"],"mappings":"yGAaaA,EAA6DC,GAAuB,CAC/F,MAAMC,EAAUC,EAAAA,OAAO,EAAK,EACtBC,EAAsBD,EAAAA,OAAOF,CAAQ,EAC3C,OAAAG,EAAoB,QAAUH,EAEvB,SAAUI,IAA+B,CAC9C,GAAI,CAAAH,EAAQ,QACZ,CAAAA,EAAQ,QAAU,GAElB,GAAI,CACF,OAAO,MAAME,EAAoB,QAAQ,GAAGC,CAAI,CAAA,QAClD,CACEH,EAAQ,QAAU,EAAA,EACpB,CAEJ"}
1
+ {"version":3,"file":"useLockCallback.cjs","sources":["../../../../src/hooks/useLockCallback/useLockCallback.ts"],"sourcesContent":["import { useRef } from 'react';\n\n/**\n * @name useLockCallback\n * @description - Hook that prevents a callback from being executed multiple times simultaneously\n * @category Async\n *\n * @param {Function} callback The callback to be locked\n * @returns {Function} The locked callback\n *\n * @example\n * const lockedCallback = useLockCallback(() => promise());\n */\nexport const useLockCallback = <Callback extends (...args: any[]) => any>(callback: Callback) => {\n const lockRef = useRef(false);\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n\n return async (...args: Parameters<Callback>) => {\n if (lockRef.current) return;\n lockRef.current = true;\n\n try {\n return await internalCallbackRef.current(...args);\n } finally {\n lockRef.current = false;\n }\n };\n};\n"],"names":["useLockCallback","callback","lockRef","useRef","internalCallbackRef","args"],"mappings":"yGAaaA,EAA6DC,GAAuB,CAC/F,MAAMC,EAAUC,EAAAA,OAAO,EAAK,EACtBC,EAAsBD,EAAAA,OAAOF,CAAQ,EAC3C,OAAAG,EAAoB,QAAUH,EAEvB,SAAUI,IAA+B,CAC9C,GAAI,CAAAH,EAAQ,QACZ,CAAAA,EAAQ,QAAU,GAElB,GAAI,CACF,OAAO,MAAME,EAAoB,QAAQ,GAAGC,CAAI,CAAA,QAClD,CACEH,EAAQ,QAAU,EAAA,EACpB,CAEJ"}
@@ -0,0 +1,2 @@
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const a=require("react"),d=require("../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.cjs"),v=require("../useRefState/useRefState.cjs"),w=require("../../utils/helpers/isTarget.cjs"),y=require("../../utils/helpers/getElement.cjs"),m=(...n)=>{const o=w.isTarget(n[0])?n[0]:void 0,l=(o?n[1]:n[0])?.enabled??!0,[r,i]=a.useState(l),c=v.useRefState(),e=a.useRef(null);d.useIsomorphicLayoutEffect(()=>{const t=(o?y.getElement(o):c.current)??document.body;if(!(t instanceof HTMLElement)||(e.current=t,!l))return;const g=window.getComputedStyle(t).overflow;return e.current.__originalOverflow=g,t.style.overflow="hidden",()=>{t.style.overflow=g,e.current=null}},[o,c.state,l]);const u=()=>{if(!e.current)return;const t=e.current;e.current.__originalOverflow=window.getComputedStyle(t).overflow,t.style.overflow="hidden",i(!0)},s=()=>{if(console.log("unlock",e.current.__originalOverflow),!e.current)return;const t=e.current;t.style.overflow=e.current.__originalOverflow,i(!1)},f=()=>{if(console.log("toggle",r,r?"unlock":"lock"),r)return s();u()};return o?{value:r,lock:u,unlock:s,toggle:f}:{ref:c,value:r,lock:u,unlock:s,toggle:f}};exports.useLockScroll=m;
2
+ //# sourceMappingURL=useLockScroll.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useLockScroll.cjs","sources":["../../../../src/hooks/useLockScroll/useLockScroll.ts"],"sourcesContent":["import { 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 { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect';\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use lock scroll options type */\nexport interface UseLockScrollOptions {\n /** Enable or disable scroll locking. Default: true */\n enabled?: boolean;\n}\n\n/** The use lock scroll return type */\nexport interface UseLockScrollReturn<Target extends Element> {\n /** The ref to attach to the element */\n ref: StateRef<Target>;\n /** The value of the lock state */\n value: boolean;\n /** Lock the scroll */\n lock: () => void;\n /** Toggle the scroll lock */\n toggle: () => void;\n /** Unlock the scroll */\n unlock: () => void;\n}\n\nexport interface UseLockScroll {\n (target: HookTarget, options?: UseLockScrollOptions): UseLockScrollReturn<Element>;\n\n <Target extends Element>(\n options?: UseLockScrollOptions,\n target?: never\n ): UseLockScrollReturn<Target> & { ref: StateRef<Target> };\n}\n\n/**\n * @name useLockScroll\n * @description - Hook that locks scroll on an element or document body\n * @category Elements\n *\n *\n * @overload\n * @param {HookTarget} [target=document.body] The target element to lock scroll on\n * @param {UseLockScrollOptions} [options] The options for scroll locking\n * @returns {void}\n *\n * @example\n * const { lock, unlock, value, toggle } = useLockScroll(ref);\n *\n * @overload\n * @template Target The target element\n * @param {UseLockScrollOptions} [options] The options for scroll locking\n * @returns {StateRef<Target>} Ref to attach to element, or locks body scroll by default\n *\n * @example\n * const { ref, lock, unlock, value, toggle } = useLockScroll();\n */\nexport const useLockScroll = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const options = (target ? params[1] : params[0]) as UseLockScrollOptions | undefined;\n\n const enabled = options?.enabled ?? true;\n const [locked, setLocked] = useState(enabled);\n\n const internalRef = useRefState<Element>();\n\n const elementRef = useRef<Element>(null);\n\n useIsomorphicLayoutEffect(() => {\n const element =\n ((target ? getElement(target) : internalRef.current) as Element) ?? document.body;\n\n if (!(element instanceof HTMLElement)) return;\n\n elementRef.current = element;\n\n if (!enabled) return;\n\n const originalStyle = window.getComputedStyle(element).overflow;\n (elementRef.current as any).__originalOverflow = originalStyle;\n element.style.overflow = 'hidden';\n\n return () => {\n element.style.overflow = originalStyle;\n elementRef.current = null;\n };\n }, [target, internalRef.state, enabled]);\n\n const lock = () => {\n if (!elementRef.current) return;\n const element = elementRef.current as HTMLElement;\n (elementRef.current as any).__originalOverflow = window.getComputedStyle(element).overflow;\n element.style.overflow = 'hidden';\n setLocked(true);\n };\n\n const unlock = () => {\n console.log('unlock', (elementRef.current as any).__originalOverflow);\n if (!elementRef.current) return;\n const element = elementRef.current as HTMLElement;\n element.style.overflow = (elementRef.current as any).__originalOverflow;\n setLocked(false);\n };\n\n const toggle = () => {\n console.log('toggle', locked, locked ? 'unlock' : 'lock');\n if (locked) return unlock();\n lock();\n };\n\n if (target)\n return {\n value: locked,\n lock,\n unlock,\n toggle\n };\n return {\n ref: internalRef,\n value: locked,\n lock,\n unlock,\n toggle\n };\n}) as UseLockScroll;\n"],"names":["useLockScroll","params","target","isTarget","enabled","locked","setLocked","useState","internalRef","useRefState","elementRef","useRef","useIsomorphicLayoutEffect","element","getElement","originalStyle","lock","unlock","toggle"],"mappings":"2TA8DaA,EAAiB,IAAIC,IAAuB,CACvD,MAAMC,EAAUC,EAAAA,SAASF,EAAO,CAAC,CAAC,EAAIA,EAAO,CAAC,EAAI,OAG5CG,GAFWF,EAASD,EAAO,CAAC,EAAIA,EAAO,CAAC,IAErB,SAAW,GAC9B,CAACI,EAAQC,CAAS,EAAIC,EAAAA,SAASH,CAAO,EAEtCI,EAAcC,EAAAA,YAAA,EAEdC,EAAaC,EAAAA,OAAgB,IAAI,EAEvCC,EAAAA,0BAA0B,IAAM,CAC9B,MAAMC,GACFX,EAASY,EAAAA,WAAWZ,CAAM,EAAIM,EAAY,UAAwB,SAAS,KAM/E,GAJI,EAAEK,aAAmB,eAEzBH,EAAW,QAAUG,EAEjB,CAACT,GAAS,OAEd,MAAMW,EAAgB,OAAO,iBAAiBF,CAAO,EAAE,SACtD,OAAAH,EAAW,QAAgB,mBAAqBK,EACjDF,EAAQ,MAAM,SAAW,SAElB,IAAM,CACXA,EAAQ,MAAM,SAAWE,EACzBL,EAAW,QAAU,IAAA,CACvB,EACC,CAACR,EAAQM,EAAY,MAAOJ,CAAO,CAAC,EAEvC,MAAMY,EAAO,IAAM,CACjB,GAAI,CAACN,EAAW,QAAS,OACzB,MAAMG,EAAUH,EAAW,QAC1BA,EAAW,QAAgB,mBAAqB,OAAO,iBAAiBG,CAAO,EAAE,SAClFA,EAAQ,MAAM,SAAW,SACzBP,EAAU,EAAI,CAAA,EAGVW,EAAS,IAAM,CAEnB,GADA,QAAQ,IAAI,SAAWP,EAAW,QAAgB,kBAAkB,EAChE,CAACA,EAAW,QAAS,OACzB,MAAMG,EAAUH,EAAW,QAC3BG,EAAQ,MAAM,SAAYH,EAAW,QAAgB,mBACrDJ,EAAU,EAAK,CAAA,EAGXY,EAAS,IAAM,CAEnB,GADA,QAAQ,IAAI,SAAUb,EAAQA,EAAS,SAAW,MAAM,EACpDA,SAAeY,EAAA,EACnBD,EAAA,CAAK,EAGP,OAAId,EACK,CACL,MAAOG,EACP,KAAAW,EACA,OAAAC,EACA,OAAAC,CAAA,EAEG,CACL,IAAKV,EACL,MAAOH,EACP,KAAAW,EACA,OAAAC,EACA,OAAAC,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLogger.cjs","sources":["../../../../src/hooks/useLogger/useLogger.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\n\n/**\n * @name useLogger\n * @description - Hook for debugging lifecycle\n * @category Lifecycle\n *\n * @param {string} name The name or identifier for the logger\n * @param {unknown[]} params Additional arguments to be logged\n *\n * @example\n * useLogger('Component', [1, 2, 3]);\n */\nexport const useLogger = (name: string, params: unknown[]) => {\n useEffect(() => {\n console.log(`${name} mounted`, ...params);\n return () => console.log(`${name} unmounted`);\n }, []);\n\n useDidUpdate(() => {\n console.log(`${name} updated`, ...params);\n }, params);\n};\n"],"names":["useLogger","name","params","useEffect","useDidUpdate"],"mappings":"uJAeaA,EAAY,CAACC,EAAcC,IAAsB,CAC5DC,EAAAA,UAAU,KACR,QAAQ,IAAI,GAAGF,CAAI,WAAY,GAAGC,CAAM,EACjC,IAAM,QAAQ,IAAI,GAAGD,CAAI,YAAY,GAC3C,EAAE,EAELG,EAAAA,aAAa,IAAM,CACjB,QAAQ,IAAI,GAAGH,CAAI,WAAY,GAAGC,CAAM,CAAA,EACvCA,CAAM,CACX"}
1
+ {"version":3,"file":"useLogger.cjs","sources":["../../../../src/hooks/useLogger/useLogger.ts"],"sourcesContent":["import { useEffect } from 'react';\n\nimport { useDidUpdate } from '../useDidUpdate/useDidUpdate';\n\n/**\n * @name useLogger\n * @description - Hook for debugging lifecycle\n * @category Debug\n *\n * @param {string} name The name or identifier for the logger\n * @param {unknown[]} params Additional arguments to be logged\n *\n * @example\n * useLogger('Component', [1, 2, 3]);\n */\nexport const useLogger = (name: string, params: unknown[]) => {\n useEffect(() => {\n console.log(`${name} mounted`, ...params);\n return () => console.log(`${name} unmounted`);\n }, []);\n\n useDidUpdate(() => {\n console.log(`${name} updated`, ...params);\n }, params);\n};\n"],"names":["useLogger","name","params","useEffect","useDidUpdate"],"mappings":"uJAeaA,EAAY,CAACC,EAAcC,IAAsB,CAC5DC,EAAAA,UAAU,KACR,QAAQ,IAAI,GAAGF,CAAI,WAAY,GAAGC,CAAM,EACjC,IAAM,QAAQ,IAAI,GAAGD,CAAI,YAAY,GAC3C,EAAE,EAELG,EAAAA,aAAa,IAAM,CACjB,QAAQ,IAAI,GAAGH,CAAI,WAAY,GAAGC,CAAM,CAAA,EACvCA,CAAM,CACX"}
@@ -1 +1 @@
1
- {"version":3,"file":"useLongPress.cjs","sources":["../../../../src/hooks/useLongPress/useLongPress.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type LongPressEvents = MouseEvent | TouchEvent;\n\n// * The use long press options type */\nexport interface UseLongPressOptions {\n // * The threshold time in milliseconds\n threshold?: number;\n // * The callback function to be invoked on long press cancel\n onCancel?: (event: LongPressEvents) => void;\n // * The callback function to be invoked on long press end\n onFinish?: (event: LongPressEvents) => void;\n // * The callback function to be invoked on long press start\n onStart?: (event: LongPressEvents) => void;\n}\n\nexport interface UseLongPress {\n (\n target: HookTarget,\n callback: (event: LongPressEvents) => void,\n options?: UseLongPressOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: LongPressEvents) => void,\n options?: UseLongPressOptions,\n target?: never\n ): {\n ref: StateRef<Target>;\n pressed: boolean;\n };\n}\n\nconst DEFAULT_THRESHOLD_TIME = 400;\n\n/**\n * @name useLongPress\n * @description - Hook that defines the logic when long pressing an element\n * @category Sensors\n *\n * @overload\n * @param {HookTarget} target The target element to be long pressed\n * @param {(event: LongPressEvents) => void} callback The callback function to be invoked on long press\n * @param {UseLongPressOptions} [options] The options for the long press\n * @returns {boolean} The long pressing state\n *\n * @example\n * const pressed = useLongPress(ref, () => console.log('callback'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: LongPressEvents) => void} callback The callback function to be invoked on long press\n * @param {UseLongPressOptions} [options] The options for the long press\n * @returns {boolean} The long pressing state\n *\n * @example\n * const { ref, pressed } = useLongPress(() => console.log('callback'));\n */\nexport const useLongPress = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as (event: LongPressEvents) => void;\n const options = (target ? params[2] : params[1]) as UseLongPressOptions | undefined;\n\n const [pressed, setPressed] = useState(false);\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const isPressedRef = useRef(false);\n const internalRef = useRefState<Element>();\n\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const onStart = (event: LongPressEvents) => {\n internalOptionsRef.current?.onStart?.(event);\n\n isPressedRef.current = true;\n timeoutIdRef.current = setTimeout(() => {\n internalCallbackRef.current(event);\n setPressed(true);\n }, internalOptionsRef.current?.threshold ?? DEFAULT_THRESHOLD_TIME);\n };\n\n const onCancel = (event: LongPressEvents) => {\n setPressed((prevPressed) => {\n if (prevPressed) {\n internalOptionsRef.current?.onFinish?.(event);\n } else if (isPressedRef.current) {\n internalOptionsRef.current?.onCancel?.(event);\n }\n\n return false;\n });\n\n isPressedRef.current = false;\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n\n element.addEventListener('mousedown', onStart as EventListener);\n element.addEventListener('touchstart', onStart as EventListener);\n element.addEventListener('mouseup', onCancel as EventListener);\n element.addEventListener('touchend', onCancel as EventListener);\n window.addEventListener('mouseup', onCancel as EventListener);\n window.addEventListener('touchend', onCancel as EventListener);\n\n return () => {\n element.removeEventListener('mousedown', onStart as EventListener);\n element.removeEventListener('touchstart', onStart as EventListener);\n element.removeEventListener('mouseup', onCancel as EventListener);\n element.removeEventListener('touchend', onCancel as EventListener);\n window.removeEventListener('mouseup', onCancel as EventListener);\n window.removeEventListener('touchend', onCancel as EventListener);\n\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n }, [target, internalRef.state]);\n\n if (target) return pressed;\n return {\n ref: internalRef,\n pressed\n };\n}) as UseLongPress;\n"],"names":["DEFAULT_THRESHOLD_TIME","useLongPress","params","target","isTarget","callback","options","pressed","setPressed","useState","timeoutIdRef","useRef","isPressedRef","internalRef","useRefState","internalCallbackRef","internalOptionsRef","useEffect","element","getElement","onStart","event","onCancel","prevPressed"],"mappings":"mPAyCMA,EAAyB,IAyBlBC,EAAgB,IAAIC,IAAuB,CACtD,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,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtCC,EAAeC,EAAAA,OAAsC,MAAS,EAC9DC,EAAeD,EAAAA,OAAO,EAAK,EAC3BE,EAAcC,EAAAA,YAAA,EAEdC,EAAsBJ,EAAAA,OAAON,CAAQ,EAC3CU,EAAoB,QAAUV,EAC9B,MAAMW,EAAqBL,EAAAA,OAAOL,CAAO,EAqDzC,OApDAU,EAAmB,QAAUV,EAE7BW,EAAAA,UAAU,IAAM,CACd,GAAI,CAACd,GAAU,CAACU,EAAY,MAAO,OAEnC,MAAMK,EAAUf,EAASgB,EAAAA,WAAWhB,CAAM,EAAIU,EAAY,QAC1D,GAAI,CAACK,EAAS,OAEd,MAAME,EAAWC,GAA2B,CAC1CL,EAAmB,SAAS,UAAUK,CAAK,EAE3CT,EAAa,QAAU,GACvBF,EAAa,QAAU,WAAW,IAAM,CACtCK,EAAoB,QAAQM,CAAK,EACjCb,EAAW,EAAI,CAAA,EACdQ,EAAmB,SAAS,WAAahB,CAAsB,CAAA,EAG9DsB,EAAYD,GAA2B,CAC3Cb,EAAYe,IACNA,EACFP,EAAmB,SAAS,WAAWK,CAAK,EACnCT,EAAa,SACtBI,EAAmB,SAAS,WAAWK,CAAK,EAGvC,GACR,EAEDT,EAAa,QAAU,GACnBF,EAAa,SAAS,aAAaA,EAAa,OAAO,CAAA,EAG7D,OAAAQ,EAAQ,iBAAiB,YAAaE,CAAwB,EAC9DF,EAAQ,iBAAiB,aAAcE,CAAwB,EAC/DF,EAAQ,iBAAiB,UAAWI,CAAyB,EAC7DJ,EAAQ,iBAAiB,WAAYI,CAAyB,EAC9D,OAAO,iBAAiB,UAAWA,CAAyB,EAC5D,OAAO,iBAAiB,WAAYA,CAAyB,EAEtD,IAAM,CACXJ,EAAQ,oBAAoB,YAAaE,CAAwB,EACjEF,EAAQ,oBAAoB,aAAcE,CAAwB,EAClEF,EAAQ,oBAAoB,UAAWI,CAAyB,EAChEJ,EAAQ,oBAAoB,WAAYI,CAAyB,EACjE,OAAO,oBAAoB,UAAWA,CAAyB,EAC/D,OAAO,oBAAoB,WAAYA,CAAyB,EAE5DZ,EAAa,SAAS,aAAaA,EAAa,OAAO,CAAA,CAC7D,EACC,CAACP,EAAQU,EAAY,KAAK,CAAC,EAE1BV,EAAeI,EACZ,CACL,IAAKM,EACL,QAAAN,CAAA,CAEJ"}
1
+ {"version":3,"file":"useLongPress.cjs","sources":["../../../../src/hooks/useLongPress/useLongPress.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { getElement, isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type LongPressEvents = MouseEvent | TouchEvent;\n\n// * The use long press options type */\nexport interface UseLongPressOptions {\n // * The threshold time in milliseconds\n threshold?: number;\n // * The callback function to be invoked on long press cancel\n onCancel?: (event: LongPressEvents) => void;\n // * The callback function to be invoked on long press end\n onFinish?: (event: LongPressEvents) => void;\n // * The callback function to be invoked on long press start\n onStart?: (event: LongPressEvents) => void;\n}\n\nexport interface UseLongPress {\n (\n target: HookTarget,\n callback: (event: LongPressEvents) => void,\n options?: UseLongPressOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: LongPressEvents) => void,\n options?: UseLongPressOptions,\n target?: never\n ): {\n ref: StateRef<Target>;\n pressed: boolean;\n };\n}\n\nconst DEFAULT_THRESHOLD_TIME = 400;\n\n/**\n * @name useLongPress\n * @description - Hook that defines the logic when long pressing an element\n * @category Elements\n *\n * @overload\n * @param {HookTarget} target The target element to be long pressed\n * @param {(event: LongPressEvents) => void} callback The callback function to be invoked on long press\n * @param {UseLongPressOptions} [options] The options for the long press\n * @returns {boolean} The long pressing state\n *\n * @example\n * const pressed = useLongPress(ref, () => console.log('callback'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: LongPressEvents) => void} callback The callback function to be invoked on long press\n * @param {UseLongPressOptions} [options] The options for the long press\n * @returns {boolean} The long pressing state\n *\n * @example\n * const { ref, pressed } = useLongPress(() => console.log('callback'));\n */\nexport const useLongPress = ((...params: any[]): any => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const callback = (target ? params[1] : params[0]) as (event: LongPressEvents) => void;\n const options = (target ? params[2] : params[1]) as UseLongPressOptions | undefined;\n\n const [pressed, setPressed] = useState(false);\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const isPressedRef = useRef(false);\n const internalRef = useRefState<Element>();\n\n const internalCallbackRef = useRef(callback);\n internalCallbackRef.current = callback;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = target ? getElement(target) : internalRef.current;\n if (!element) return;\n\n const onStart = (event: LongPressEvents) => {\n internalOptionsRef.current?.onStart?.(event);\n\n isPressedRef.current = true;\n timeoutIdRef.current = setTimeout(() => {\n internalCallbackRef.current(event);\n setPressed(true);\n }, internalOptionsRef.current?.threshold ?? DEFAULT_THRESHOLD_TIME);\n };\n\n const onCancel = (event: LongPressEvents) => {\n setPressed((prevPressed) => {\n if (prevPressed) {\n internalOptionsRef.current?.onFinish?.(event);\n } else if (isPressedRef.current) {\n internalOptionsRef.current?.onCancel?.(event);\n }\n\n return false;\n });\n\n isPressedRef.current = false;\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n\n element.addEventListener('mousedown', onStart as EventListener);\n element.addEventListener('touchstart', onStart as EventListener);\n element.addEventListener('mouseup', onCancel as EventListener);\n element.addEventListener('touchend', onCancel as EventListener);\n window.addEventListener('mouseup', onCancel as EventListener);\n window.addEventListener('touchend', onCancel as EventListener);\n\n return () => {\n element.removeEventListener('mousedown', onStart as EventListener);\n element.removeEventListener('touchstart', onStart as EventListener);\n element.removeEventListener('mouseup', onCancel as EventListener);\n element.removeEventListener('touchend', onCancel as EventListener);\n window.removeEventListener('mouseup', onCancel as EventListener);\n window.removeEventListener('touchend', onCancel as EventListener);\n\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n }, [target, internalRef.state]);\n\n if (target) return pressed;\n return {\n ref: internalRef,\n pressed\n };\n}) as UseLongPress;\n"],"names":["DEFAULT_THRESHOLD_TIME","useLongPress","params","target","isTarget","callback","options","pressed","setPressed","useState","timeoutIdRef","useRef","isPressedRef","internalRef","useRefState","internalCallbackRef","internalOptionsRef","useEffect","element","getElement","onStart","event","onCancel","prevPressed"],"mappings":"mPAyCMA,EAAyB,IAyBlBC,EAAgB,IAAIC,IAAuB,CACtD,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,EAASC,CAAU,EAAIC,EAAAA,SAAS,EAAK,EACtCC,EAAeC,EAAAA,OAAsC,MAAS,EAC9DC,EAAeD,EAAAA,OAAO,EAAK,EAC3BE,EAAcC,EAAAA,YAAA,EAEdC,EAAsBJ,EAAAA,OAAON,CAAQ,EAC3CU,EAAoB,QAAUV,EAC9B,MAAMW,EAAqBL,EAAAA,OAAOL,CAAO,EAqDzC,OApDAU,EAAmB,QAAUV,EAE7BW,EAAAA,UAAU,IAAM,CACd,GAAI,CAACd,GAAU,CAACU,EAAY,MAAO,OAEnC,MAAMK,EAAUf,EAASgB,EAAAA,WAAWhB,CAAM,EAAIU,EAAY,QAC1D,GAAI,CAACK,EAAS,OAEd,MAAME,EAAWC,GAA2B,CAC1CL,EAAmB,SAAS,UAAUK,CAAK,EAE3CT,EAAa,QAAU,GACvBF,EAAa,QAAU,WAAW,IAAM,CACtCK,EAAoB,QAAQM,CAAK,EACjCb,EAAW,EAAI,CAAA,EACdQ,EAAmB,SAAS,WAAahB,CAAsB,CAAA,EAG9DsB,EAAYD,GAA2B,CAC3Cb,EAAYe,IACNA,EACFP,EAAmB,SAAS,WAAWK,CAAK,EACnCT,EAAa,SACtBI,EAAmB,SAAS,WAAWK,CAAK,EAGvC,GACR,EAEDT,EAAa,QAAU,GACnBF,EAAa,SAAS,aAAaA,EAAa,OAAO,CAAA,EAG7D,OAAAQ,EAAQ,iBAAiB,YAAaE,CAAwB,EAC9DF,EAAQ,iBAAiB,aAAcE,CAAwB,EAC/DF,EAAQ,iBAAiB,UAAWI,CAAyB,EAC7DJ,EAAQ,iBAAiB,WAAYI,CAAyB,EAC9D,OAAO,iBAAiB,UAAWA,CAAyB,EAC5D,OAAO,iBAAiB,WAAYA,CAAyB,EAEtD,IAAM,CACXJ,EAAQ,oBAAoB,YAAaE,CAAwB,EACjEF,EAAQ,oBAAoB,aAAcE,CAAwB,EAClEF,EAAQ,oBAAoB,UAAWI,CAAyB,EAChEJ,EAAQ,oBAAoB,WAAYI,CAAyB,EACjE,OAAO,oBAAoB,UAAWA,CAAyB,EAC/D,OAAO,oBAAoB,WAAYA,CAAyB,EAE5DZ,EAAa,SAAS,aAAaA,EAAa,OAAO,CAAA,CAC7D,EACC,CAACP,EAAQU,EAAY,KAAK,CAAC,EAE1BV,EAAeI,EACZ,CACL,IAAKM,EACL,QAAAN,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMap.cjs","sources":["../../../../src/hooks/useMap/useMap.ts"],"sourcesContent":["import { useState } from 'react';\n\n/** The use map return type */\nexport interface UseMapReturn<Key, Value> {\n /** The size of the map */\n size: number;\n /** The current map */\n value: Map<Key, Value>;\n /** Function to clear the map */\n clear: () => void;\n /** Function to check if a value exists in the map */\n has: (key: Key) => boolean;\n /** Function to remove a value from the map */\n remove: (key: Key) => void;\n /** Function to toggle a value in the map */\n reset: () => void;\n /** Function to add a value to the map */\n set: (key: Key, value: Value) => void;\n}\n\n/**\n * @name useMap\n * @description - Hook that manages a map structure\n * @category Utilities\n *\n * @template Value The type of the value\n * @param {Value[]} [values] The initial array of the map\n * @returns {UseMapReturn<Key, Value>} An object containing the current map and functions to interact with the map\n *\n * @example\n * const { value, set, remove, clear, reset, size, has } = useMap([1, 'one'], [2, 'two']);\n */\nexport const useMap = <Key, Value>(values?: [Key, Value][]): UseMapReturn<Key, Value> => {\n const [map, setMap] = useState(new Map(values));\n\n const set = (key: Key, value: Value) => setMap((prevMap) => new Map(prevMap).set(key, value));\n const remove = (key: Key) =>\n setMap((prevMap) => {\n if (!prevMap.has(key)) return prevMap;\n const newMap = new Map(prevMap);\n newMap.delete(key);\n return newMap;\n });\n const clear = () => setMap(new Map());\n const reset = () => setMap(new Map(values));\n const has = (key: Key) => map.has(key);\n\n return {\n value: map,\n size: map.size,\n set,\n has,\n remove,\n clear,\n reset\n };\n};\n"],"names":["useMap","values","map","setMap","useState","set","key","value","prevMap","remove","newMap","clear","reset","has"],"mappings":"yGAgCaA,EAAsBC,GAAsD,CACvF,KAAM,CAACC,EAAKC,CAAM,EAAIC,EAAAA,SAAS,IAAI,IAAIH,CAAM,CAAC,EAExCI,EAAM,CAACC,EAAUC,IAAiBJ,EAAQK,GAAY,IAAI,IAAIA,CAAO,EAAE,IAAIF,EAAKC,CAAK,CAAC,EACtFE,EAAUH,GACdH,EAAQK,GAAY,CAClB,GAAI,CAACA,EAAQ,IAAIF,CAAG,EAAG,OAAOE,EAC9B,MAAME,EAAS,IAAI,IAAIF,CAAO,EAC9B,OAAAE,EAAO,OAAOJ,CAAG,EACVI,CAAA,CACR,EACGC,EAAQ,IAAMR,EAAO,IAAI,GAAK,EAC9BS,EAAQ,IAAMT,EAAO,IAAI,IAAIF,CAAM,CAAC,EACpCY,EAAOP,GAAaJ,EAAI,IAAII,CAAG,EAErC,MAAO,CACL,MAAOJ,EACP,KAAMA,EAAI,KACV,IAAAG,EACA,IAAAQ,EACA,OAAAJ,EACA,MAAAE,EACA,MAAAC,CAAA,CAEJ"}
1
+ {"version":3,"file":"useMap.cjs","sources":["../../../../src/hooks/useMap/useMap.ts"],"sourcesContent":["import { useState } from 'react';\n\n/** The use map return type */\nexport interface UseMapReturn<Key, Value> {\n /** The size of the map */\n size: number;\n /** The current map */\n value: Map<Key, Value>;\n /** Function to clear the map */\n clear: () => void;\n /** Function to check if a value exists in the map */\n has: (key: Key) => boolean;\n /** Function to remove a value from the map */\n remove: (key: Key) => void;\n /** Function to toggle a value in the map */\n reset: () => void;\n /** Function to add a value to the map */\n set: (key: Key, value: Value) => void;\n}\n\n/**\n * @name useMap\n * @description - Hook that manages a map structure\n * @category State\n *\n * @template Value The type of the value\n * @param {Value[]} [values] The initial array of the map\n * @returns {UseMapReturn<Key, Value>} An object containing the current map and functions to interact with the map\n *\n * @example\n * const { value, set, remove, clear, reset, size, has } = useMap([1, 'one'], [2, 'two']);\n */\nexport const useMap = <Key, Value>(values?: [Key, Value][]): UseMapReturn<Key, Value> => {\n const [map, setMap] = useState(new Map(values));\n\n const set = (key: Key, value: Value) => setMap((prevMap) => new Map(prevMap).set(key, value));\n const remove = (key: Key) =>\n setMap((prevMap) => {\n if (!prevMap.has(key)) return prevMap;\n const newMap = new Map(prevMap);\n newMap.delete(key);\n return newMap;\n });\n const clear = () => setMap(new Map());\n const reset = () => setMap(new Map(values));\n const has = (key: Key) => map.has(key);\n\n return {\n value: map,\n size: map.size,\n set,\n has,\n remove,\n clear,\n reset\n };\n};\n"],"names":["useMap","values","map","setMap","useState","set","key","value","prevMap","remove","newMap","clear","reset","has"],"mappings":"yGAgCaA,EAAsBC,GAAsD,CACvF,KAAM,CAACC,EAAKC,CAAM,EAAIC,EAAAA,SAAS,IAAI,IAAIH,CAAM,CAAC,EAExCI,EAAM,CAACC,EAAUC,IAAiBJ,EAAQK,GAAY,IAAI,IAAIA,CAAO,EAAE,IAAIF,EAAKC,CAAK,CAAC,EACtFE,EAAUH,GACdH,EAAQK,GAAY,CAClB,GAAI,CAACA,EAAQ,IAAIF,CAAG,EAAG,OAAOE,EAC9B,MAAME,EAAS,IAAI,IAAIF,CAAO,EAC9B,OAAAE,EAAO,OAAOJ,CAAG,EACVI,CAAA,CACR,EACGC,EAAQ,IAAMR,EAAO,IAAI,GAAK,EAC9BS,EAAQ,IAAMT,EAAO,IAAI,IAAIF,CAAM,CAAC,EACpCY,EAAOP,GAAaJ,EAAI,IAAII,CAAG,EAErC,MAAO,CACL,MAAOJ,EACP,KAAMA,EAAI,KACV,IAAAG,EACA,IAAAQ,EACA,OAAAJ,EACA,MAAAE,EACA,MAAAC,CAAA,CAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"useMutation.cjs","sources":["../../../../src/hooks/useMutation/useMutation.ts"],"sourcesContent":["import { useState } from 'react';\n\n/* The type of the options */\ninterface UseMutationOptions<Data> {\n /* The retry count of requests */\n retry?: ((failureCount: number, error: Error) => boolean) | boolean | number;\n /* The retry delay of requests */\n retryDelay?: ((retry: number, error: Error) => number) | number;\n /* The callback function to be invoked on error */\n onError?: (error: Error) => void;\n /* The callback function to be invoked on success */\n onSuccess?: (data: Data) => void;\n}\n\n/* The use mutation return type */\ninterface UseMutationReturn<Body, Data> {\n /* The data of the mutation */\n data: Data | null;\n /* The error of the mutation */\n error: Error | null;\n /* The error state of the mutation */\n isError: boolean;\n /* The loading state of the mutation */\n isLoading: boolean;\n /* The success state of the mutation */\n isSuccess: boolean;\n /* The mutate function */\n mutate: (body?: Body, options?: UseMutationOptions<Data>) => void;\n /* The mutate async function */\n mutateAsync: (body?: Body, options?: UseMutationOptions<Data>) => Promise<Data>;\n}\n\nexport interface RequestOptions<Data> extends UseMutationOptions<Data> {\n /* The attempt count */\n attempt?: number;\n}\n\n/**\n * @name useMutation\n * @description - Hook that defines the logic when mutate data\n * @category Utilities\n *\n * @template Body The type of the body\n * @template Data The type of the data\n * @param {(body: Body) => Promise<Data>} callback The callback function to be invoked\n * @param {boolean | number} [options.retry] The retry count of requests\n * @param {(data: Data) => void} [options.onSuccess] The callback function to be invoked on success\n * @param {(error: Error) => void} [options.onError] The callback function to be invoked on error\n * @returns {UseMutationReturn<Data>} An object with the state of the mutation\n *\n * @example\n * const { mutate, mutateAsync, isLoading, isError, isSuccess, error, data } = useMutation((name) => Promise.resolve(name));\n */\nexport const useMutation = <Body, Data>(\n callback: (body: Body) => Promise<Data>,\n options?: UseMutationOptions<Data>\n) => {\n const [isLoading, setIsLoading] = useState(false);\n const [isError, setIsError] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n\n const [error, setError] = useState<Error | null>(null);\n const [data, setData] = useState<Data | null>(null);\n\n const request = (\n body: Body,\n requestOptions?: RequestOptions<Data>\n ): Promise<Data | undefined> => {\n setIsLoading(true);\n const attempt = requestOptions?.attempt ?? 0;\n\n return callback(body)\n .then((response) => {\n requestOptions?.onSuccess?.(response);\n\n setData(response);\n setIsSuccess(true);\n setIsLoading(false);\n setError(null);\n setIsError(false);\n return response;\n })\n .catch((error: Error) => {\n const retry =\n typeof requestOptions?.retry === 'function'\n ? requestOptions?.retry(attempt, error)\n : requestOptions?.retry;\n\n const retryDelay =\n typeof requestOptions?.retryDelay === 'function'\n ? requestOptions?.retryDelay(attempt, error)\n : requestOptions?.retryDelay;\n\n if (typeof retry === 'boolean' && retry) {\n if (retryDelay) {\n setTimeout(\n () => request(body, { ...requestOptions, attempt: attempt + 1 }),\n retryDelay\n );\n return;\n }\n return request(body, { ...requestOptions, attempt: attempt + 1 });\n }\n\n if (retry && retry > attempt) {\n if (retryDelay) {\n setTimeout(\n () => request(body, { ...requestOptions, attempt: attempt + 1 }),\n retryDelay\n );\n return;\n }\n return request(body, { ...requestOptions, attempt: attempt + 1 });\n }\n\n requestOptions?.onError?.(error);\n setData(null);\n setIsSuccess(false);\n setIsLoading(false);\n setError(error);\n setIsError(true);\n });\n };\n const mutate = (body: Body, mutateOptions?: UseMutationOptions<Data>) => {\n const requestOptions = {\n retry: mutateOptions?.retry ?? options?.retry,\n retryDelay: mutateOptions?.retryDelay ?? options?.retryDelay,\n onSuccess: mutateOptions?.onSuccess ?? options?.onSuccess,\n onError: mutateOptions?.onError ?? options?.onError\n };\n\n request(body, requestOptions);\n };\n\n const mutateAsync = async (body: Body, mutateOptions?: UseMutationOptions<Data>) => {\n const requestOptions = {\n retry: mutateOptions?.retry ?? options?.retry,\n retryDelay: mutateOptions?.retryDelay ?? options?.retryDelay,\n onSuccess: mutateOptions?.onSuccess ?? options?.onSuccess,\n onError: mutateOptions?.onError ?? options?.onError\n };\n\n return request(body, requestOptions) as Promise<Data>;\n };\n\n return {\n data,\n error,\n mutate,\n mutateAsync,\n isLoading,\n isError,\n isSuccess\n } as UseMutationReturn<Body, Data>;\n};\n"],"names":["useMutation","callback","options","isLoading","setIsLoading","useState","isError","setIsError","isSuccess","setIsSuccess","error","setError","data","setData","request","body","requestOptions","attempt","response","retry","retryDelay","mutateOptions"],"mappings":"yGAqDaA,EAAc,CACzBC,EACAC,IACG,CACH,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAK,EAC1C,CAACC,EAASC,CAAU,EAAIF,EAAAA,SAAS,EAAK,EACtC,CAACG,EAAWC,CAAY,EAAIJ,EAAAA,SAAS,EAAK,EAE1C,CAACK,EAAOC,CAAQ,EAAIN,EAAAA,SAAuB,IAAI,EAC/C,CAACO,EAAMC,CAAO,EAAIR,EAAAA,SAAsB,IAAI,EAE5CS,EAAU,CACdC,EACAC,IAC8B,CAC9BZ,EAAa,EAAI,EACjB,MAAMa,EAAUD,GAAgB,SAAW,EAE3C,OAAOf,EAASc,CAAI,EACjB,KAAMG,IACLF,GAAgB,YAAYE,CAAQ,EAEpCL,EAAQK,CAAQ,EAChBT,EAAa,EAAI,EACjBL,EAAa,EAAK,EAClBO,EAAS,IAAI,EACbJ,EAAW,EAAK,EACTW,EACR,EACA,MAAOR,GAAiB,CACvB,MAAMS,EACJ,OAAOH,GAAgB,OAAU,WAC7BA,GAAgB,MAAMC,EAASP,CAAK,EACpCM,GAAgB,MAEhBI,EACJ,OAAOJ,GAAgB,YAAe,WAClCA,GAAgB,WAAWC,EAASP,CAAK,EACzCM,GAAgB,WAEtB,GAAI,OAAOG,GAAU,WAAaA,EAAO,CACvC,GAAIC,EAAY,CACd,WACE,IAAMN,EAAQC,EAAM,CAAE,GAAGC,EAAgB,QAASC,EAAU,EAAG,EAC/DG,CAAA,EAEF,MAAA,CAEF,OAAON,EAAQC,EAAM,CAAE,GAAGC,EAAgB,QAASC,EAAU,EAAG,CAAA,CAGlE,GAAIE,GAASA,EAAQF,EAAS,CAC5B,GAAIG,EAAY,CACd,WACE,IAAMN,EAAQC,EAAM,CAAE,GAAGC,EAAgB,QAASC,EAAU,EAAG,EAC/DG,CAAA,EAEF,MAAA,CAEF,OAAON,EAAQC,EAAM,CAAE,GAAGC,EAAgB,QAASC,EAAU,EAAG,CAAA,CAGlED,GAAgB,UAAUN,CAAK,EAC/BG,EAAQ,IAAI,EACZJ,EAAa,EAAK,EAClBL,EAAa,EAAK,EAClBO,EAASD,CAAK,EACdH,EAAW,EAAI,CAAA,CAChB,CAAA,EAwBL,MAAO,CACL,KAAAK,EACA,MAAAF,EACA,OAzBa,CAACK,EAAYM,IAA6C,CACvE,MAAML,EAAiB,CACrB,MAAOK,GAAe,OAASnB,GAAS,MACxC,WAAYmB,GAAe,YAAcnB,GAAS,WAClD,UAAWmB,GAAe,WAAanB,GAAS,UAChD,QAASmB,GAAe,SAAWnB,GAAS,OAAA,EAG9CY,EAAQC,EAAMC,CAAc,CAAA,EAkB5B,YAfkB,MAAOD,EAAYM,IAA6C,CAClF,MAAML,EAAiB,CACrB,MAAOK,GAAe,OAASnB,GAAS,MACxC,WAAYmB,GAAe,YAAcnB,GAAS,WAClD,UAAWmB,GAAe,WAAanB,GAAS,UAChD,QAASmB,GAAe,SAAWnB,GAAS,OAAA,EAG9C,OAAOY,EAAQC,EAAMC,CAAc,CAAA,EAQnC,UAAAb,EACA,QAAAG,EACA,UAAAE,CAAA,CAEJ"}
1
+ {"version":3,"file":"useMutation.cjs","sources":["../../../../src/hooks/useMutation/useMutation.ts"],"sourcesContent":["import { useState } from 'react';\n\n/* The type of the options */\ninterface UseMutationOptions<Data> {\n /* The retry count of requests */\n retry?: ((failureCount: number, error: Error) => boolean) | boolean | number;\n /* The retry delay of requests */\n retryDelay?: ((retry: number, error: Error) => number) | number;\n /* The callback function to be invoked on error */\n onError?: (error: Error) => void;\n /* The callback function to be invoked on success */\n onSuccess?: (data: Data) => void;\n}\n\n/* The use mutation return type */\ninterface UseMutationReturn<Body, Data> {\n /* The data of the mutation */\n data: Data | null;\n /* The error of the mutation */\n error: Error | null;\n /* The error state of the mutation */\n isError: boolean;\n /* The loading state of the mutation */\n isLoading: boolean;\n /* The success state of the mutation */\n isSuccess: boolean;\n /* The mutate function */\n mutate: (body?: Body, options?: UseMutationOptions<Data>) => void;\n /* The mutate async function */\n mutateAsync: (body?: Body, options?: UseMutationOptions<Data>) => Promise<Data>;\n}\n\nexport interface RequestOptions<Data> extends UseMutationOptions<Data> {\n /* The attempt count */\n attempt?: number;\n}\n\n/**\n * @name useMutation\n * @description - Hook that defines the logic when mutate data\n * @category Async\n *\n * @template Body The type of the body\n * @template Data The type of the data\n * @param {(body: Body) => Promise<Data>} callback The callback function to be invoked\n * @param {boolean | number} [options.retry] The retry count of requests\n * @param {(data: Data) => void} [options.onSuccess] The callback function to be invoked on success\n * @param {(error: Error) => void} [options.onError] The callback function to be invoked on error\n * @returns {UseMutationReturn<Data>} An object with the state of the mutation\n *\n * @example\n * const { mutate, mutateAsync, isLoading, isError, isSuccess, error, data } = useMutation((name) => Promise.resolve(name));\n */\nexport const useMutation = <Body, Data>(\n callback: (body: Body) => Promise<Data>,\n options?: UseMutationOptions<Data>\n) => {\n const [isLoading, setIsLoading] = useState(false);\n const [isError, setIsError] = useState(false);\n const [isSuccess, setIsSuccess] = useState(false);\n\n const [error, setError] = useState<Error | null>(null);\n const [data, setData] = useState<Data | null>(null);\n\n const request = (\n body: Body,\n requestOptions?: RequestOptions<Data>\n ): Promise<Data | undefined> => {\n setIsLoading(true);\n const attempt = requestOptions?.attempt ?? 0;\n\n return callback(body)\n .then((response) => {\n requestOptions?.onSuccess?.(response);\n\n setData(response);\n setIsSuccess(true);\n setIsLoading(false);\n setError(null);\n setIsError(false);\n return response;\n })\n .catch((error: Error) => {\n const retry =\n typeof requestOptions?.retry === 'function'\n ? requestOptions?.retry(attempt, error)\n : requestOptions?.retry;\n\n const retryDelay =\n typeof requestOptions?.retryDelay === 'function'\n ? requestOptions?.retryDelay(attempt, error)\n : requestOptions?.retryDelay;\n\n if (typeof retry === 'boolean' && retry) {\n if (retryDelay) {\n setTimeout(\n () => request(body, { ...requestOptions, attempt: attempt + 1 }),\n retryDelay\n );\n return;\n }\n return request(body, { ...requestOptions, attempt: attempt + 1 });\n }\n\n if (retry && retry > attempt) {\n if (retryDelay) {\n setTimeout(\n () => request(body, { ...requestOptions, attempt: attempt + 1 }),\n retryDelay\n );\n return;\n }\n return request(body, { ...requestOptions, attempt: attempt + 1 });\n }\n\n requestOptions?.onError?.(error);\n setData(null);\n setIsSuccess(false);\n setIsLoading(false);\n setError(error);\n setIsError(true);\n });\n };\n const mutate = (body: Body, mutateOptions?: UseMutationOptions<Data>) => {\n const requestOptions = {\n retry: mutateOptions?.retry ?? options?.retry,\n retryDelay: mutateOptions?.retryDelay ?? options?.retryDelay,\n onSuccess: mutateOptions?.onSuccess ?? options?.onSuccess,\n onError: mutateOptions?.onError ?? options?.onError\n };\n\n request(body, requestOptions);\n };\n\n const mutateAsync = async (body: Body, mutateOptions?: UseMutationOptions<Data>) => {\n const requestOptions = {\n retry: mutateOptions?.retry ?? options?.retry,\n retryDelay: mutateOptions?.retryDelay ?? options?.retryDelay,\n onSuccess: mutateOptions?.onSuccess ?? options?.onSuccess,\n onError: mutateOptions?.onError ?? options?.onError\n };\n\n return request(body, requestOptions) as Promise<Data>;\n };\n\n return {\n data,\n error,\n mutate,\n mutateAsync,\n isLoading,\n isError,\n isSuccess\n } as UseMutationReturn<Body, Data>;\n};\n"],"names":["useMutation","callback","options","isLoading","setIsLoading","useState","isError","setIsError","isSuccess","setIsSuccess","error","setError","data","setData","request","body","requestOptions","attempt","response","retry","retryDelay","mutateOptions"],"mappings":"yGAqDaA,EAAc,CACzBC,EACAC,IACG,CACH,KAAM,CAACC,EAAWC,CAAY,EAAIC,EAAAA,SAAS,EAAK,EAC1C,CAACC,EAASC,CAAU,EAAIF,EAAAA,SAAS,EAAK,EACtC,CAACG,EAAWC,CAAY,EAAIJ,EAAAA,SAAS,EAAK,EAE1C,CAACK,EAAOC,CAAQ,EAAIN,EAAAA,SAAuB,IAAI,EAC/C,CAACO,EAAMC,CAAO,EAAIR,EAAAA,SAAsB,IAAI,EAE5CS,EAAU,CACdC,EACAC,IAC8B,CAC9BZ,EAAa,EAAI,EACjB,MAAMa,EAAUD,GAAgB,SAAW,EAE3C,OAAOf,EAASc,CAAI,EACjB,KAAMG,IACLF,GAAgB,YAAYE,CAAQ,EAEpCL,EAAQK,CAAQ,EAChBT,EAAa,EAAI,EACjBL,EAAa,EAAK,EAClBO,EAAS,IAAI,EACbJ,EAAW,EAAK,EACTW,EACR,EACA,MAAOR,GAAiB,CACvB,MAAMS,EACJ,OAAOH,GAAgB,OAAU,WAC7BA,GAAgB,MAAMC,EAASP,CAAK,EACpCM,GAAgB,MAEhBI,EACJ,OAAOJ,GAAgB,YAAe,WAClCA,GAAgB,WAAWC,EAASP,CAAK,EACzCM,GAAgB,WAEtB,GAAI,OAAOG,GAAU,WAAaA,EAAO,CACvC,GAAIC,EAAY,CACd,WACE,IAAMN,EAAQC,EAAM,CAAE,GAAGC,EAAgB,QAASC,EAAU,EAAG,EAC/DG,CAAA,EAEF,MAAA,CAEF,OAAON,EAAQC,EAAM,CAAE,GAAGC,EAAgB,QAASC,EAAU,EAAG,CAAA,CAGlE,GAAIE,GAASA,EAAQF,EAAS,CAC5B,GAAIG,EAAY,CACd,WACE,IAAMN,EAAQC,EAAM,CAAE,GAAGC,EAAgB,QAASC,EAAU,EAAG,EAC/DG,CAAA,EAEF,MAAA,CAEF,OAAON,EAAQC,EAAM,CAAE,GAAGC,EAAgB,QAASC,EAAU,EAAG,CAAA,CAGlED,GAAgB,UAAUN,CAAK,EAC/BG,EAAQ,IAAI,EACZJ,EAAa,EAAK,EAClBL,EAAa,EAAK,EAClBO,EAASD,CAAK,EACdH,EAAW,EAAI,CAAA,CAChB,CAAA,EAwBL,MAAO,CACL,KAAAK,EACA,MAAAF,EACA,OAzBa,CAACK,EAAYM,IAA6C,CACvE,MAAML,EAAiB,CACrB,MAAOK,GAAe,OAASnB,GAAS,MACxC,WAAYmB,GAAe,YAAcnB,GAAS,WAClD,UAAWmB,GAAe,WAAanB,GAAS,UAChD,QAASmB,GAAe,SAAWnB,GAAS,OAAA,EAG9CY,EAAQC,EAAMC,CAAc,CAAA,EAkB5B,YAfkB,MAAOD,EAAYM,IAA6C,CAClF,MAAML,EAAiB,CACrB,MAAOK,GAAe,OAASnB,GAAS,MACxC,WAAYmB,GAAe,YAAcnB,GAAS,WAClD,UAAWmB,GAAe,WAAanB,GAAS,UAChD,QAASmB,GAAe,SAAWnB,GAAS,OAAA,EAG9C,OAAOY,EAAQC,EAAMC,CAAc,CAAA,EAQnC,UAAAb,EACA,QAAAG,EACA,UAAAE,CAAA,CAEJ"}
@@ -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,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
+ {"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 Sensors\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 +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,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
+ {"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 Browser\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,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
+ {"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 State\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":"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
+ {"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 Browser\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,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
+ {"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 User\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,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
+ {"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 Async\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,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("react"),i=()=>{const[t,r]=n.useState({angle:0,type:"landscape-primary"});return n.useEffect(()=>{const e=()=>r(window.screen.orientation);return window.screen.orientation.addEventListener("change",e),()=>{window.screen.orientation.removeEventListener("change",e)}},[]),t};exports.useOrientation=i;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const o=require("react"),c=()=>{const e=typeof window<"u"&&"screen"in window&&"orientation"in window.screen,n=e?window.screen.orientation:{},[i,r]=o.useState(()=>({angle:n?.angle??0,orientationType:n?.type}));return o.useEffect(()=>{if(!e)return;const t=()=>r({angle:n.angle,orientationType:n.type});return window.addEventListener("orientationchange",t),()=>{window.removeEventListener("orientationchange",t)}}),{supported:e,value:i,lock:t=>{if(e&&typeof n.lock=="function")return n.lock(t)},unlock:()=>{e&&typeof n.unlock=="function"&&n.unlock()}}};exports.useOrientation=c;
2
2
  //# sourceMappingURL=useOrientation.cjs.map