@siberiacancode/reactuse 0.3.3 → 0.3.4

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 (220) hide show
  1. package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs +1 -1
  2. package/dist/cjs/hooks/useActiveElement/useActiveElement.cjs.map +1 -1
  3. package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs +1 -1
  4. package/dist/cjs/hooks/useAutoScroll/useAutoScroll.cjs.map +1 -1
  5. package/dist/cjs/hooks/useBreakpoints/useBreakpoints.cjs +1 -1
  6. package/dist/cjs/hooks/useBreakpoints/useBreakpoints.cjs.map +1 -1
  7. package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs +1 -1
  8. package/dist/cjs/hooks/useClickOutside/useClickOutside.cjs.map +1 -1
  9. package/dist/cjs/hooks/useCookie/useCookie.cjs +1 -1
  10. package/dist/cjs/hooks/useCookie/useCookie.cjs.map +1 -1
  11. package/dist/cjs/hooks/useCounter/useCounter.cjs +1 -1
  12. package/dist/cjs/hooks/useCounter/useCounter.cjs.map +1 -1
  13. package/dist/cjs/hooks/useCssVar/useCssVar.cjs +1 -1
  14. package/dist/cjs/hooks/useCssVar/useCssVar.cjs.map +1 -1
  15. package/dist/cjs/hooks/useDeviceMotion/useDeviceMotion.cjs +1 -1
  16. package/dist/cjs/hooks/useDeviceMotion/useDeviceMotion.cjs.map +1 -1
  17. package/dist/cjs/hooks/useDisplayMedia/useDisplayMedia.cjs +1 -1
  18. package/dist/cjs/hooks/useDisplayMedia/useDisplayMedia.cjs.map +1 -1
  19. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs +1 -1
  20. package/dist/cjs/hooks/useDoubleClick/useDoubleClick.cjs.map +1 -1
  21. package/dist/cjs/hooks/useDropZone/useDropZone.cjs +1 -1
  22. package/dist/cjs/hooks/useDropZone/useDropZone.cjs.map +1 -1
  23. package/dist/cjs/hooks/useElementSize/useElementSize.cjs +1 -1
  24. package/dist/cjs/hooks/useElementSize/useElementSize.cjs.map +1 -1
  25. package/dist/cjs/hooks/useEventListener/useEventListener.cjs +1 -1
  26. package/dist/cjs/hooks/useEventListener/useEventListener.cjs.map +1 -1
  27. package/dist/cjs/hooks/useFileDialog/useFileDialog.cjs +1 -1
  28. package/dist/cjs/hooks/useFileDialog/useFileDialog.cjs.map +1 -1
  29. package/dist/cjs/hooks/useFocus/useFocus.cjs +1 -1
  30. package/dist/cjs/hooks/useFocus/useFocus.cjs.map +1 -1
  31. package/dist/cjs/hooks/useFocusTrap/useFocusTrap.cjs +1 -1
  32. package/dist/cjs/hooks/useFocusTrap/useFocusTrap.cjs.map +1 -1
  33. package/dist/cjs/hooks/useFullscreen/useFullscreen.cjs +1 -1
  34. package/dist/cjs/hooks/useFullscreen/useFullscreen.cjs.map +1 -1
  35. package/dist/cjs/hooks/useHash/useHash.cjs +1 -1
  36. package/dist/cjs/hooks/useHash/useHash.cjs.map +1 -1
  37. package/dist/cjs/hooks/useHotkeys/useHotkeys.cjs +1 -1
  38. package/dist/cjs/hooks/useHotkeys/useHotkeys.cjs.map +1 -1
  39. package/dist/cjs/hooks/useHover/useHover.cjs +1 -1
  40. package/dist/cjs/hooks/useHover/useHover.cjs.map +1 -1
  41. package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs +1 -1
  42. package/dist/cjs/hooks/useInfiniteScroll/useInfiniteScroll.cjs.map +1 -1
  43. package/dist/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs +1 -1
  44. package/dist/cjs/hooks/useIntersectionObserver/useIntersectionObserver.cjs.map +1 -1
  45. package/dist/cjs/hooks/useInterval/useInterval.cjs +1 -1
  46. package/dist/cjs/hooks/useInterval/useInterval.cjs.map +1 -1
  47. package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs +1 -1
  48. package/dist/cjs/hooks/useKeyPress/useKeyPress.cjs.map +1 -1
  49. package/dist/cjs/hooks/useKeyPressEvent/useKeyPressEvent.cjs +1 -1
  50. package/dist/cjs/hooks/useKeyPressEvent/useKeyPressEvent.cjs.map +1 -1
  51. package/dist/cjs/hooks/useKeyboard/useKeyboard.cjs +1 -1
  52. package/dist/cjs/hooks/useKeyboard/useKeyboard.cjs.map +1 -1
  53. package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs +1 -1
  54. package/dist/cjs/hooks/useKeysPressed/useKeysPressed.cjs.map +1 -1
  55. package/dist/cjs/hooks/useLockScroll/useLockScroll.cjs +1 -1
  56. package/dist/cjs/hooks/useLockScroll/useLockScroll.cjs.map +1 -1
  57. package/dist/cjs/hooks/useLongPress/useLongPress.cjs +1 -1
  58. package/dist/cjs/hooks/useLongPress/useLongPress.cjs.map +1 -1
  59. package/dist/cjs/hooks/useMeasure/useMeasure.cjs +1 -1
  60. package/dist/cjs/hooks/useMeasure/useMeasure.cjs.map +1 -1
  61. package/dist/cjs/hooks/useMediaControls/useMediaControls.cjs +1 -1
  62. package/dist/cjs/hooks/useMediaControls/useMediaControls.cjs.map +1 -1
  63. package/dist/cjs/hooks/useMouse/useMouse.cjs +1 -1
  64. package/dist/cjs/hooks/useMouse/useMouse.cjs.map +1 -1
  65. package/dist/cjs/hooks/useMutationObserver/useMutationObserver.cjs +1 -1
  66. package/dist/cjs/hooks/useMutationObserver/useMutationObserver.cjs.map +1 -1
  67. package/dist/cjs/hooks/useOtpCredential/useOtpCredential.cjs +1 -1
  68. package/dist/cjs/hooks/useOtpCredential/useOtpCredential.cjs.map +1 -1
  69. package/dist/cjs/hooks/usePaint/usePaint.cjs +1 -1
  70. package/dist/cjs/hooks/usePaint/usePaint.cjs.map +1 -1
  71. package/dist/cjs/hooks/useParallax/useParallax.cjs +1 -1
  72. package/dist/cjs/hooks/useParallax/useParallax.cjs.map +1 -1
  73. package/dist/cjs/hooks/usePictureInPicture/usePictureInPicture.cjs +1 -1
  74. package/dist/cjs/hooks/usePictureInPicture/usePictureInPicture.cjs.map +1 -1
  75. package/dist/cjs/hooks/useRefState/useRefState.cjs +1 -1
  76. package/dist/cjs/hooks/useRefState/useRefState.cjs.map +1 -1
  77. package/dist/cjs/hooks/useResizeObserver/useResizeObserver.cjs +1 -1
  78. package/dist/cjs/hooks/useResizeObserver/useResizeObserver.cjs.map +1 -1
  79. package/dist/cjs/hooks/useRightClick/useRightClick.cjs +1 -1
  80. package/dist/cjs/hooks/useRightClick/useRightClick.cjs.map +1 -1
  81. package/dist/cjs/hooks/useScroll/useScroll.cjs +1 -1
  82. package/dist/cjs/hooks/useScroll/useScroll.cjs.map +1 -1
  83. package/dist/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs +1 -1
  84. package/dist/cjs/hooks/useScrollIntoView/useScrollIntoView.cjs.map +1 -1
  85. package/dist/cjs/hooks/useScrollTo/useScrollTo.cjs +1 -1
  86. package/dist/cjs/hooks/useScrollTo/useScrollTo.cjs.map +1 -1
  87. package/dist/cjs/hooks/useSticky/useSticky.cjs +1 -1
  88. package/dist/cjs/hooks/useSticky/useSticky.cjs.map +1 -1
  89. package/dist/cjs/hooks/useStopwatch/useStopwatch.cjs +1 -1
  90. package/dist/cjs/hooks/useStopwatch/useStopwatch.cjs.map +1 -1
  91. package/dist/cjs/hooks/useStorage/useStorage.cjs +1 -1
  92. package/dist/cjs/hooks/useStorage/useStorage.cjs.map +1 -1
  93. package/dist/cjs/hooks/useTextDirection/useTextDirection.cjs +1 -1
  94. package/dist/cjs/hooks/useTextDirection/useTextDirection.cjs.map +1 -1
  95. package/dist/cjs/hooks/useTextareaAutosize/useTextareaAutosize.cjs +1 -1
  96. package/dist/cjs/hooks/useTextareaAutosize/useTextareaAutosize.cjs.map +1 -1
  97. package/dist/cjs/hooks/useTimer/useTimer.cjs +1 -1
  98. package/dist/cjs/hooks/useTimer/useTimer.cjs.map +1 -1
  99. package/dist/cjs/hooks/useUrlSearchParam/useUrlSearchParam.cjs +1 -1
  100. package/dist/cjs/hooks/useUrlSearchParam/useUrlSearchParam.cjs.map +1 -1
  101. package/dist/cjs/hooks/useUrlSearchParams/useUrlSearchParams.cjs +1 -1
  102. package/dist/cjs/hooks/useUrlSearchParams/useUrlSearchParams.cjs.map +1 -1
  103. package/dist/cjs/hooks/useVisibility/useVisibility.cjs +1 -1
  104. package/dist/cjs/hooks/useVisibility/useVisibility.cjs.map +1 -1
  105. package/dist/cjs/index.cjs +1 -1
  106. package/dist/cjs/utils/helpers/isTarget.cjs +1 -1
  107. package/dist/cjs/utils/helpers/isTarget.cjs.map +1 -1
  108. package/dist/esm/hooks/useActiveElement/useActiveElement.mjs +13 -13
  109. package/dist/esm/hooks/useActiveElement/useActiveElement.mjs.map +1 -1
  110. package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs +24 -24
  111. package/dist/esm/hooks/useAutoScroll/useAutoScroll.mjs.map +1 -1
  112. package/dist/esm/hooks/useBreakpoints/useBreakpoints.mjs +30 -35
  113. package/dist/esm/hooks/useBreakpoints/useBreakpoints.mjs.map +1 -1
  114. package/dist/esm/hooks/useClickOutside/useClickOutside.mjs +15 -14
  115. package/dist/esm/hooks/useClickOutside/useClickOutside.mjs.map +1 -1
  116. package/dist/esm/hooks/useCookie/useCookie.mjs +2 -2
  117. package/dist/esm/hooks/useCookie/useCookie.mjs.map +1 -1
  118. package/dist/esm/hooks/useCounter/useCounter.mjs +2 -2
  119. package/dist/esm/hooks/useCounter/useCounter.mjs.map +1 -1
  120. package/dist/esm/hooks/useCssVar/useCssVar.mjs +8 -8
  121. package/dist/esm/hooks/useCssVar/useCssVar.mjs.map +1 -1
  122. package/dist/esm/hooks/useDeviceMotion/useDeviceMotion.mjs +2 -2
  123. package/dist/esm/hooks/useDeviceMotion/useDeviceMotion.mjs.map +1 -1
  124. package/dist/esm/hooks/useDisplayMedia/useDisplayMedia.mjs +17 -17
  125. package/dist/esm/hooks/useDisplayMedia/useDisplayMedia.mjs.map +1 -1
  126. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs +14 -14
  127. package/dist/esm/hooks/useDoubleClick/useDoubleClick.mjs.map +1 -1
  128. package/dist/esm/hooks/useDropZone/useDropZone.mjs +23 -23
  129. package/dist/esm/hooks/useDropZone/useDropZone.mjs.map +1 -1
  130. package/dist/esm/hooks/useElementSize/useElementSize.mjs +14 -14
  131. package/dist/esm/hooks/useElementSize/useElementSize.mjs.map +1 -1
  132. package/dist/esm/hooks/useEventListener/useEventListener.mjs +14 -14
  133. package/dist/esm/hooks/useEventListener/useEventListener.mjs.map +1 -1
  134. package/dist/esm/hooks/useFileDialog/useFileDialog.mjs +2 -2
  135. package/dist/esm/hooks/useFileDialog/useFileDialog.mjs.map +1 -1
  136. package/dist/esm/hooks/useFocus/useFocus.mjs +20 -20
  137. package/dist/esm/hooks/useFocus/useFocus.mjs.map +1 -1
  138. package/dist/esm/hooks/useFocusTrap/useFocusTrap.mjs +21 -21
  139. package/dist/esm/hooks/useFocusTrap/useFocusTrap.mjs.map +1 -1
  140. package/dist/esm/hooks/useFullscreen/useFullscreen.mjs +2 -2
  141. package/dist/esm/hooks/useFullscreen/useFullscreen.mjs.map +1 -1
  142. package/dist/esm/hooks/useHash/useHash.mjs +2 -2
  143. package/dist/esm/hooks/useHash/useHash.mjs.map +1 -1
  144. package/dist/esm/hooks/useHotkeys/useHotkeys.mjs +24 -16
  145. package/dist/esm/hooks/useHotkeys/useHotkeys.mjs.map +1 -1
  146. package/dist/esm/hooks/useHover/useHover.mjs +16 -16
  147. package/dist/esm/hooks/useHover/useHover.mjs.map +1 -1
  148. package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs +16 -16
  149. package/dist/esm/hooks/useInfiniteScroll/useInfiniteScroll.mjs.map +1 -1
  150. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.mjs +26 -18
  151. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.mjs.map +1 -1
  152. package/dist/esm/hooks/useInterval/useInterval.mjs +2 -2
  153. package/dist/esm/hooks/useInterval/useInterval.mjs.map +1 -1
  154. package/dist/esm/hooks/useKeyPress/useKeyPress.mjs +15 -15
  155. package/dist/esm/hooks/useKeyPress/useKeyPress.mjs.map +1 -1
  156. package/dist/esm/hooks/useKeyPressEvent/useKeyPressEvent.mjs +22 -15
  157. package/dist/esm/hooks/useKeyPressEvent/useKeyPressEvent.mjs.map +1 -1
  158. package/dist/esm/hooks/useKeyboard/useKeyboard.mjs +10 -10
  159. package/dist/esm/hooks/useKeyboard/useKeyboard.mjs.map +1 -1
  160. package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs +12 -12
  161. package/dist/esm/hooks/useKeysPressed/useKeysPressed.mjs.map +1 -1
  162. package/dist/esm/hooks/useLockScroll/useLockScroll.mjs +23 -23
  163. package/dist/esm/hooks/useLockScroll/useLockScroll.mjs.map +1 -1
  164. package/dist/esm/hooks/useLongPress/useLongPress.mjs +16 -16
  165. package/dist/esm/hooks/useLongPress/useLongPress.mjs.map +1 -1
  166. package/dist/esm/hooks/useMeasure/useMeasure.mjs +15 -15
  167. package/dist/esm/hooks/useMeasure/useMeasure.mjs.map +1 -1
  168. package/dist/esm/hooks/useMediaControls/useMediaControls.mjs +28 -28
  169. package/dist/esm/hooks/useMediaControls/useMediaControls.mjs.map +1 -1
  170. package/dist/esm/hooks/useMouse/useMouse.mjs +17 -17
  171. package/dist/esm/hooks/useMouse/useMouse.mjs.map +1 -1
  172. package/dist/esm/hooks/useMutationObserver/useMutationObserver.mjs +17 -16
  173. package/dist/esm/hooks/useMutationObserver/useMutationObserver.mjs.map +1 -1
  174. package/dist/esm/hooks/useOtpCredential/useOtpCredential.mjs +2 -2
  175. package/dist/esm/hooks/useOtpCredential/useOtpCredential.mjs.map +1 -1
  176. package/dist/esm/hooks/usePaint/usePaint.mjs +31 -31
  177. package/dist/esm/hooks/usePaint/usePaint.mjs.map +1 -1
  178. package/dist/esm/hooks/useParallax/useParallax.mjs +24 -23
  179. package/dist/esm/hooks/useParallax/useParallax.mjs.map +1 -1
  180. package/dist/esm/hooks/usePictureInPicture/usePictureInPicture.mjs +25 -25
  181. package/dist/esm/hooks/usePictureInPicture/usePictureInPicture.mjs.map +1 -1
  182. package/dist/esm/hooks/useRefState/useRefState.mjs +1 -0
  183. package/dist/esm/hooks/useRefState/useRefState.mjs.map +1 -1
  184. package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs +16 -16
  185. package/dist/esm/hooks/useResizeObserver/useResizeObserver.mjs.map +1 -1
  186. package/dist/esm/hooks/useRightClick/useRightClick.mjs +14 -14
  187. package/dist/esm/hooks/useRightClick/useRightClick.mjs.map +1 -1
  188. package/dist/esm/hooks/useScroll/useScroll.mjs +22 -22
  189. package/dist/esm/hooks/useScroll/useScroll.mjs.map +1 -1
  190. package/dist/esm/hooks/useScrollIntoView/useScrollIntoView.mjs +16 -16
  191. package/dist/esm/hooks/useScrollIntoView/useScrollIntoView.mjs.map +1 -1
  192. package/dist/esm/hooks/useScrollTo/useScrollTo.mjs +10 -10
  193. package/dist/esm/hooks/useScrollTo/useScrollTo.mjs.map +1 -1
  194. package/dist/esm/hooks/useSticky/useSticky.mjs +17 -17
  195. package/dist/esm/hooks/useSticky/useSticky.mjs.map +1 -1
  196. package/dist/esm/hooks/useStopwatch/useStopwatch.mjs +4 -4
  197. package/dist/esm/hooks/useStopwatch/useStopwatch.mjs.map +1 -1
  198. package/dist/esm/hooks/useStorage/useStorage.mjs +2 -2
  199. package/dist/esm/hooks/useStorage/useStorage.mjs.map +1 -1
  200. package/dist/esm/hooks/useTextDirection/useTextDirection.mjs +12 -12
  201. package/dist/esm/hooks/useTextDirection/useTextDirection.mjs.map +1 -1
  202. package/dist/esm/hooks/useTextareaAutosize/useTextareaAutosize.mjs +20 -20
  203. package/dist/esm/hooks/useTextareaAutosize/useTextareaAutosize.mjs.map +1 -1
  204. package/dist/esm/hooks/useTimer/useTimer.mjs +3 -3
  205. package/dist/esm/hooks/useTimer/useTimer.mjs.map +1 -1
  206. package/dist/esm/hooks/useUrlSearchParam/useUrlSearchParam.mjs +2 -2
  207. package/dist/esm/hooks/useUrlSearchParam/useUrlSearchParam.mjs.map +1 -1
  208. package/dist/esm/hooks/useUrlSearchParams/useUrlSearchParams.mjs +2 -2
  209. package/dist/esm/hooks/useUrlSearchParams/useUrlSearchParams.mjs.map +1 -1
  210. package/dist/esm/hooks/useVisibility/useVisibility.mjs +25 -17
  211. package/dist/esm/hooks/useVisibility/useVisibility.mjs.map +1 -1
  212. package/dist/esm/index.mjs +98 -96
  213. package/dist/esm/utils/helpers/isTarget.mjs +10 -8
  214. package/dist/esm/utils/helpers/isTarget.mjs.map +1 -1
  215. package/dist/types/hooks/useBreakpoints/useBreakpoints.d.ts +1 -11
  216. package/dist/types/hooks/useClickOutside/useClickOutside.d.ts +1 -1
  217. package/dist/types/hooks/useHover/useHover.d.ts +6 -6
  218. package/dist/types/hooks/useRefState/useRefState.d.ts +1 -0
  219. package/dist/types/utils/helpers/isTarget.d.ts +9 -1
  220. package/package.json +89 -89
@@ -1,27 +1,27 @@
1
- import { useRef as s, useEffect as a } from "react";
1
+ import { useRef as s, useEffect as E } from "react";
2
2
  import { useRefState as R } from "../useRefState/useRefState.mjs";
3
- import { isTarget as E } from "../../utils/helpers/isTarget.mjs";
4
- const k = 300, L = (...e) => {
5
- const t = E(e[0]) ? e[0] : void 0, l = t ? e[1] : e[0], f = t ? e[2] : e[1], c = s(void 0), r = s(0), o = R(), m = s(l);
6
- m.current = l;
7
- const u = s(f);
8
- if (u.current = f, a(() => {
3
+ import { isTarget as f } from "../../utils/helpers/isTarget.mjs";
4
+ const k = 300, C = ((...e) => {
5
+ const t = f(e[0]) ? e[0] : void 0, l = t ? e[1] : e[0], m = t ? e[2] : e[1], c = s(void 0), r = s(0), o = R(), d = s(l);
6
+ d.current = l;
7
+ const u = s(m);
8
+ if (u.current = m, E(() => {
9
9
  if (!t && !o.state) return;
10
- const n = t ? E.getElement(t) : o.current;
10
+ const n = t ? f.getElement(t) : o.current;
11
11
  if (!n) return;
12
- const i = (d) => {
12
+ const i = (a) => {
13
13
  r.current += 1, r.current === 1 && (c.current = setTimeout(() => {
14
- u.current?.onSingleClick && u.current.onSingleClick(d), r.current = 0;
15
- }, u.current?.threshold ?? k)), r.current === 2 && (clearTimeout(c.current), m.current(d), r.current = 0);
14
+ u.current?.onSingleClick && u.current.onSingleClick(a), r.current = 0;
15
+ }, u.current?.threshold ?? k)), r.current === 2 && (clearTimeout(c.current), d.current(a), r.current = 0);
16
16
  };
17
17
  return n.addEventListener("mousedown", i), n.addEventListener("touchstart", i), () => {
18
18
  n.removeEventListener("mousedown", i), n.removeEventListener("touchstart", i), c.current && clearTimeout(c.current);
19
19
  };
20
- }, [t, o.state]), !t)
20
+ }, [t, o.state, f.getRefState(t)]), !t)
21
21
  return o;
22
- };
22
+ });
23
23
  export {
24
24
  k as DEFAULT_THRESHOLD_TIME,
25
- L as useDoubleClick
25
+ C as useDoubleClick
26
26
  };
27
27
  //# sourceMappingURL=useDoubleClick.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDoubleClick.mjs","sources":["../../../../src/hooks/useDoubleClick/useDoubleClick.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type DoubleClickEvents = MouseEvent | TouchEvent;\n\n/** The use double click options type */\nexport interface UseDoubleClickOptions {\n /** The threshold time in milliseconds between clicks */\n threshold?: number;\n /** The callback function to be invoked on single click */\n onSingleClick?: (event: DoubleClickEvents) => void;\n}\n\nexport interface UseDoubleClick {\n (\n target: HookTarget,\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions,\n target?: never\n ): StateRef<Target>;\n}\n\nexport const DEFAULT_THRESHOLD_TIME = 300;\n\n/**\n * @name useDoubleClick\n * @description - Hook that defines the logic when double clicking an element\n * @category Elements\n * @usage medium\n\n * @overload\n * @param {HookTarget} target The target element to be double clicked\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * useDoubleClick(ref, () => console.log('double clicked'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * const ref = useDoubleClick(() => console.log('double clicked'));\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useDoubleClick.html}\n */\nexport const useDoubleClick = ((...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: DoubleClickEvents) => void;\n const options = (target ? params[2] : params[1]) as UseDoubleClickOptions | undefined;\n\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const clickCountRef = useRef(0);\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 ? isTarget.getElement(target) : internalRef.current;\n if (!element) return;\n\n const onClick = (event: DoubleClickEvents) => {\n clickCountRef.current += 1;\n\n if (clickCountRef.current === 1) {\n timeoutIdRef.current = setTimeout(() => {\n if (internalOptionsRef.current?.onSingleClick)\n internalOptionsRef.current.onSingleClick(event);\n clickCountRef.current = 0;\n }, internalOptionsRef.current?.threshold ?? DEFAULT_THRESHOLD_TIME);\n }\n\n if (clickCountRef.current === 2) {\n clearTimeout(timeoutIdRef.current);\n internalCallbackRef.current(event);\n clickCountRef.current = 0;\n }\n };\n\n element.addEventListener('mousedown', onClick as EventListener);\n element.addEventListener('touchstart', onClick as EventListener);\n\n return () => {\n element.removeEventListener('mousedown', onClick as EventListener);\n element.removeEventListener('touchstart', onClick as EventListener);\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n }, [target, internalRef.state]);\n\n if (target) return;\n return internalRef;\n}) as UseDoubleClick;\n"],"names":["DEFAULT_THRESHOLD_TIME","useDoubleClick","params","target","isTarget","callback","options","timeoutIdRef","useRef","clickCountRef","internalRef","useRefState","internalCallbackRef","internalOptionsRef","useEffect","element","onClick","event"],"mappings":";;;AAkCO,MAAMA,IAAyB,KA4BzBC,IAAkB,IAAIC,MAAuB;AACxD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAYF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACzCI,IAAWH,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAExCK,IAAeC,EAAsC,MAAS,GAC9DC,IAAgBD,EAAO,CAAC,GACxBE,IAAcC,EAAA,GAEdC,IAAsBJ,EAAOH,CAAQ;AAC3C,EAAAO,EAAoB,UAAUP;AAC9B,QAAMQ,IAAqBL,EAAOF,CAAO;AAqCzC,MApCAO,EAAmB,UAAUP,GAE7BQ,EAAU,MAAM;AACd,QAAI,CAACX,KAAU,CAACO,EAAY,MAAO;AAEnC,UAAMK,IAAUZ,IAASC,EAAS,WAAWD,CAAM,IAAIO,EAAY;AACnE,QAAI,CAACK,EAAS;AAEd,UAAMC,IAAU,CAACC,MAA6B;AAC5C,MAAAR,EAAc,WAAW,GAErBA,EAAc,YAAY,MAC5BF,EAAa,UAAU,WAAW,MAAM;AACtC,QAAIM,EAAmB,SAAS,iBAC9BA,EAAmB,QAAQ,cAAcI,CAAK,GAChDR,EAAc,UAAU;AAAA,MAAA,GACvBI,EAAmB,SAAS,aAAab,CAAsB,IAGhES,EAAc,YAAY,MAC5B,aAAaF,EAAa,OAAO,GACjCK,EAAoB,QAAQK,CAAK,GACjCR,EAAc,UAAU;AAAA,IAC1B;AAGF,WAAAM,EAAQ,iBAAiB,aAAaC,CAAwB,GAC9DD,EAAQ,iBAAiB,cAAcC,CAAwB,GAExD,MAAM;AACX,MAAAD,EAAQ,oBAAoB,aAAaC,CAAwB,GACjED,EAAQ,oBAAoB,cAAcC,CAAwB,GAC9DT,EAAa,WAAS,aAAaA,EAAa,OAAO;AAAA,IAAA;AAAA,EAC7D,GACC,CAACJ,GAAQO,EAAY,KAAK,CAAC,GAE1B,CAAAP;AACJ,WAAOO;AACT;"}
1
+ {"version":3,"file":"useDoubleClick.mjs","sources":["../../../../src/hooks/useDoubleClick/useDoubleClick.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type DoubleClickEvents = MouseEvent | TouchEvent;\n\n/** The use double click options type */\nexport interface UseDoubleClickOptions {\n /** The threshold time in milliseconds between clicks */\n threshold?: number;\n /** The callback function to be invoked on single click */\n onSingleClick?: (event: DoubleClickEvents) => void;\n}\n\nexport interface UseDoubleClick {\n (\n target: HookTarget,\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions\n ): boolean;\n\n <Target extends Element>(\n callback: (event: DoubleClickEvents) => void,\n options?: UseDoubleClickOptions,\n target?: never\n ): StateRef<Target>;\n}\n\nexport const DEFAULT_THRESHOLD_TIME = 300;\n\n/**\n * @name useDoubleClick\n * @description - Hook that defines the logic when double clicking an element\n * @category Elements\n * @usage medium\n\n * @overload\n * @param {HookTarget} target The target element to be double clicked\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * useDoubleClick(ref, () => console.log('double clicked'));\n *\n * @overload\n * @template Target The target element\n * @param {(event: DoubleClickEvents) => void} callback The callback function to be invoked on double click\n * @param {UseDoubleClickOptions} [options] The options for the double click\n * @returns {boolean} The double clicking state\n *\n * @example\n * const ref = useDoubleClick(() => console.log('double clicked'));\n *\n * @see {@link https://siberiacancode.github.io/reactuse/functions/hooks/useDoubleClick.html}\n */\nexport const useDoubleClick = ((...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: DoubleClickEvents) => void;\n const options = (target ? params[2] : params[1]) as UseDoubleClickOptions | undefined;\n\n const timeoutIdRef = useRef<ReturnType<typeof setTimeout>>(undefined);\n const clickCountRef = useRef(0);\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 ? isTarget.getElement(target) : internalRef.current;\n if (!element) return;\n\n const onClick = (event: DoubleClickEvents) => {\n clickCountRef.current += 1;\n\n if (clickCountRef.current === 1) {\n timeoutIdRef.current = setTimeout(() => {\n if (internalOptionsRef.current?.onSingleClick)\n internalOptionsRef.current.onSingleClick(event);\n clickCountRef.current = 0;\n }, internalOptionsRef.current?.threshold ?? DEFAULT_THRESHOLD_TIME);\n }\n\n if (clickCountRef.current === 2) {\n clearTimeout(timeoutIdRef.current);\n internalCallbackRef.current(event);\n clickCountRef.current = 0;\n }\n };\n\n element.addEventListener('mousedown', onClick as EventListener);\n element.addEventListener('touchstart', onClick as EventListener);\n\n return () => {\n element.removeEventListener('mousedown', onClick as EventListener);\n element.removeEventListener('touchstart', onClick as EventListener);\n if (timeoutIdRef.current) clearTimeout(timeoutIdRef.current);\n };\n }, [target, internalRef.state, isTarget.getRefState(target)]);\n\n if (target) return;\n return internalRef;\n}) as UseDoubleClick;\n"],"names":["DEFAULT_THRESHOLD_TIME","useDoubleClick","params","target","isTarget","callback","options","timeoutIdRef","useRef","clickCountRef","internalRef","useRefState","internalCallbackRef","internalOptionsRef","useEffect","element","onClick","event"],"mappings":";;;AAkCO,MAAMA,IAAyB,KA4BzBC,KAAkB,IAAIC,MAAuB;AACxD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAYF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACzCI,IAAWH,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAExCK,IAAeC,EAAsC,MAAS,GAC9DC,IAAgBD,EAAO,CAAC,GACxBE,IAAcC,EAAA,GAEdC,IAAsBJ,EAAOH,CAAQ;AAC3C,EAAAO,EAAoB,UAAUP;AAC9B,QAAMQ,IAAqBL,EAAOF,CAAO;AAqCzC,MApCAO,EAAmB,UAAUP,GAE7BQ,EAAU,MAAM;AACd,QAAI,CAACX,KAAU,CAACO,EAAY,MAAO;AAEnC,UAAMK,IAAUZ,IAASC,EAAS,WAAWD,CAAM,IAAIO,EAAY;AACnE,QAAI,CAACK,EAAS;AAEd,UAAMC,IAAU,CAACC,MAA6B;AAC5C,MAAAR,EAAc,WAAW,GAErBA,EAAc,YAAY,MAC5BF,EAAa,UAAU,WAAW,MAAM;AACtC,QAAIM,EAAmB,SAAS,iBAC9BA,EAAmB,QAAQ,cAAcI,CAAK,GAChDR,EAAc,UAAU;AAAA,MAAA,GACvBI,EAAmB,SAAS,aAAab,CAAsB,IAGhES,EAAc,YAAY,MAC5B,aAAaF,EAAa,OAAO,GACjCK,EAAoB,QAAQK,CAAK,GACjCR,EAAc,UAAU;AAAA,IAC1B;AAGF,WAAAM,EAAQ,iBAAiB,aAAaC,CAAwB,GAC9DD,EAAQ,iBAAiB,cAAcC,CAAwB,GAExD,MAAM;AACX,MAAAD,EAAQ,oBAAoB,aAAaC,CAAwB,GACjED,EAAQ,oBAAoB,cAAcC,CAAwB,GAC9DT,EAAa,WAAS,aAAaA,EAAa,OAAO;AAAA,IAAA;AAAA,EAC7D,GACC,CAACJ,GAAQO,EAAY,OAAON,EAAS,YAAYD,CAAM,CAAC,CAAC,GAExD,CAAAA;AACJ,WAAOO;AACT;"}
@@ -1,48 +1,48 @@
1
- import { useRef as F, useState as T, useEffect as R } from "react";
1
+ import { useRef as V, useState as D, useEffect as F } from "react";
2
2
  import { useRefState as O } from "../useRefState/useRefState.mjs";
3
- import { isTarget as D } from "../../utils/helpers/isTarget.mjs";
4
- const S = (...n) => {
5
- const s = D(n[0]) ? n[0] : void 0, o = s ? typeof n[1] == "object" ? n[1] : { onDrop: n[1] } : typeof n[0] == "object" ? n[0] : { onDrop: n[0] }, f = O(), u = F(0), [p, L] = T(null), [g, v] = T(!1), a = o.dataTypes, y = (e) => {
3
+ import { isTarget as p } from "../../utils/helpers/isTarget.mjs";
4
+ const A = ((...n) => {
5
+ const o = p(n[0]) ? n[0] : void 0, s = o ? typeof n[1] == "object" ? n[1] : { onDrop: n[1] } : typeof n[0] == "object" ? n[0] : { onDrop: n[0] }, f = O(), u = V(0), [g, L] = D(null), [E, v] = D(!1), i = s.dataTypes, y = (e) => {
6
6
  if (!e.dataTransfer) return null;
7
7
  const t = Array.from(e.dataTransfer.files);
8
- return o.multiple ? t : t.length ? [t[0]] : null;
9
- }, h = (e) => a ? typeof a == "function" ? a(e) : a.length ? e.length ? e.every((t) => a.some((i) => t.includes(i))) : !1 : !0 : !0, V = (e) => {
10
- const t = Array.from(e).map((l) => l.type), i = h(t), c = o.multiple || e.length <= 1;
11
- return i && c;
8
+ return s.multiple ? t : t.length ? [t[0]] : null;
9
+ }, h = (e) => i ? typeof i == "function" ? i(e) : i.length ? e.length ? e.every((t) => i.some((a) => t.includes(a))) : !1 : !0 : !0, R = (e) => {
10
+ const t = Array.from(e).map((l) => l.type), a = h(t), c = s.multiple || e.length <= 1;
11
+ return a && c;
12
12
  };
13
- return R(() => {
14
- if (!s && !f.state) return;
15
- const e = s ? D.getElement(s) : f.current;
13
+ return F(() => {
14
+ if (!o && !f.state) return;
15
+ const e = o ? p.getElement(o) : f.current;
16
16
  if (!e) return;
17
17
  const t = (r, d) => {
18
18
  if (!r.dataTransfer) return;
19
- if (!V(r.dataTransfer.items)) {
19
+ if (!R(r.dataTransfer.items)) {
20
20
  r.dataTransfer.dropEffect = "none";
21
21
  return;
22
22
  }
23
23
  r.preventDefault(), r.dataTransfer.dropEffect = "copy";
24
- const m = y(r);
24
+ const T = y(r);
25
25
  if (d === "drop") {
26
- u.current = 0, v(!1), L(m), o.onDrop?.(m, r);
26
+ u.current = 0, v(!1), L(T), s.onDrop?.(T, r);
27
27
  return;
28
28
  }
29
29
  if (d === "enter") {
30
- u.current += 1, v(!0), o.onEnter?.(r);
30
+ u.current += 1, v(!0), s.onEnter?.(r);
31
31
  return;
32
32
  }
33
33
  if (d === "leave") {
34
34
  if (u.current -= 1, u.current !== 0) return;
35
- v(!1), o.onLeave?.(r);
35
+ v(!1), s.onLeave?.(r);
36
36
  return;
37
37
  }
38
- d === "over" && o.onOver?.(r);
39
- }, i = (r) => t(r, "drop"), c = (r) => t(r, "over"), l = (r) => t(r, "enter"), E = (r) => t(r, "leave");
40
- return e.addEventListener("dragenter", l), e.addEventListener("dragover", c), e.addEventListener("dragleave", E), e.addEventListener("drop", i), () => {
41
- e.removeEventListener("dragenter", l), e.removeEventListener("dragover", c), e.removeEventListener("dragleave", E), e.removeEventListener("drop", i);
38
+ d === "over" && s.onOver?.(r);
39
+ }, a = ((r) => t(r, "drop")), c = ((r) => t(r, "over")), l = ((r) => t(r, "enter")), m = ((r) => t(r, "leave"));
40
+ return e.addEventListener("dragenter", l), e.addEventListener("dragover", c), e.addEventListener("dragleave", m), e.addEventListener("drop", a), () => {
41
+ e.removeEventListener("dragenter", l), e.removeEventListener("dragover", c), e.removeEventListener("dragleave", m), e.removeEventListener("drop", a);
42
42
  };
43
- }, [s, f.current]), s ? { overed: g, files: p } : { ref: f, overed: g, files: p };
44
- };
43
+ }, [o, f.state, p.getRefState(o)]), o ? { overed: E, files: g } : { ref: f, overed: E, files: g };
44
+ });
45
45
  export {
46
- S as useDropZone
46
+ A as useDropZone
47
47
  };
48
48
  //# sourceMappingURL=useDropZone.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useDropZone.mjs","sources":["../../../../src/hooks/useDropZone/useDropZone.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type DropZoneDataTypes = ((types: string[]) => boolean) | string[];\n\nexport interface UseDropZoneOptions {\n /** The data types for drop zone */\n dataTypes?: DropZoneDataTypes;\n /** The multiple mode for drop zone */\n multiple?: boolean;\n /** The on drop callback */\n onDrop?: (files: File[] | null, event: DragEvent) => void;\n /** The on enter callback */\n onEnter?: (event: DragEvent) => void;\n /** The on leave callback */\n onLeave?: (event: DragEvent) => void;\n /** The on over callback */\n onOver?: (event: DragEvent) => void;\n}\n\nexport interface UseDropZoneReturn {\n /** The files that was dropped in drop zone */\n files: File[] | null;\n /** The over drop zone status */\n overed: boolean;\n}\n\nexport interface UseDropZone {\n (\n target: HookTarget,\n callback?: (files: File[] | null, event: DragEvent) => void\n ): UseDropZoneReturn;\n\n <Target extends Element>(\n callback?: (files: File[] | null, event: DragEvent) => void,\n target?: never\n ): UseDropZoneReturn & {\n ref: StateRef<Target>;\n };\n\n (target: HookTarget, options?: UseDropZoneOptions): UseDropZoneReturn;\n\n <Target extends Element>(\n options?: UseDropZoneOptions,\n target?: never\n ): UseDropZoneReturn & {\n ref: StateRef<Target>;\n };\n}\n\n/**\n * @name useDropZone\n * @description - Hook that provides drop zone functionality\n * @category Elements\n * @usage medium\n\n * @overload\n * @template Target The target element\n * @param {Target} target The target element drop zone's\n * @param {DataTypes} [options.dataTypes] The data types\n * @param {boolean} [options.multiple] The multiple mode\n * @param {(files: File[] | null, event: DragEvent) => void} [options.onDrop] The on drop callback function\n * @param {(event: DragEvent) => void} [options.onEnter] The on enter callback function\n * @param {(event: DragEvent) => void} [options.onLeave] The on leave callback function\n * @param {(event: DragEvent) => void} [options.onOver] The on over callback function\n * @returns {UseDropZoneReturn} The object with drop zone states\n *\n * @example\n * const { overed, files } = useDropZone(ref, options);\n *\n * @overload\n * @param {Target} target The target element drop zone's\n * @param {(files: File[] | null, event: DragEvent) => void} [callback] The callback function to be invoked on drop\n * @returns {UseDropZoneReturn} The object with drop zone states\n *\n * @example\n * const { overed, files } = useDropZone(ref, () => console.log('callback'));\n *\n * @overload\n * @param {DataTypes} [options.dataTypes] The data types\n * @param {boolean} [options.multiple] The multiple mode\n * @param {(files: File[] | null, event: DragEvent) => void} [options.onDrop] The on drop callback function\n * @param {(event: DragEvent) => void} [options.onEnter] The on enter callback function\n * @param {(event: DragEvent) => void} [options.onLeave] The on leave callback function\n * @param {(event: DragEvent) => void} [options.onOver] The on over callback function\n * @returns {UseDropZoneReturn & { ref: StateRef<Target> }} The object with drop zone states and ref\n *\n * @example\n * const { ref, overed, files } = useDropZone(options);\n *\n * @overload\n * @param {(files: File[] | null, event: DragEvent) => void} [callback] The callback function to be invoked on drop\n * @returns {UseDropZoneReturn & { ref: StateRef<Target> }} The object with drop zone states and ref\n *\n * @example\n * const { ref, overed, files } = useDropZone(() => console.log('callback'));\n */\n\nexport const useDropZone = ((...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 : { onDrop: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onDrop: params[0] }\n ) as UseDropZoneOptions;\n\n const internalRef = useRefState<Element>();\n\n const counterRef = useRef(0);\n const [files, setFiles] = useState<File[] | null>(null);\n const [overed, setOvered] = useState(false);\n\n const dataTypes = options.dataTypes;\n\n const getFiles = (event: DragEvent) => {\n if (!event.dataTransfer) return null;\n const list = Array.from(event.dataTransfer.files);\n if (options.multiple) return list;\n if (!list.length) return null;\n return [list[0]];\n };\n\n const checkDataTypes = (types: string[]) => {\n if (!dataTypes) return true;\n if (typeof dataTypes === 'function') return dataTypes(types);\n if (!dataTypes.length) return true;\n if (!types.length) return false;\n\n return types.every((type) => dataTypes.some((dataType) => type.includes(dataType)));\n };\n\n const checkValidity = (items: DataTransferItemList) => {\n const types = Array.from(items).map((item) => item.type);\n const dataTypesValid = checkDataTypes(types);\n const multipleFilesValid = options.multiple || items.length <= 1;\n\n return dataTypesValid && multipleFilesValid;\n };\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = target ? isTarget.getElement(target) : internalRef.current;\n\n if (!element) return;\n\n const onEvent = (event: DragEvent, type: 'drop' | 'enter' | 'leave' | 'over') => {\n if (!event.dataTransfer) return;\n\n const isValid = checkValidity(event.dataTransfer.items);\n if (!isValid) {\n event.dataTransfer.dropEffect = 'none';\n return;\n }\n\n event.preventDefault();\n event.dataTransfer.dropEffect = 'copy';\n\n const currentFiles = getFiles(event);\n\n if (type === 'drop') {\n counterRef.current = 0;\n setOvered(false);\n setFiles(currentFiles);\n options.onDrop?.(currentFiles, event);\n return;\n }\n\n if (type === 'enter') {\n counterRef.current += 1;\n setOvered(true);\n options.onEnter?.(event);\n return;\n }\n\n if (type === 'leave') {\n counterRef.current -= 1;\n if (counterRef.current !== 0) return;\n setOvered(false);\n options.onLeave?.(event);\n return;\n }\n\n if (type === 'over') options.onOver?.(event);\n };\n\n const onDrop = ((event: DragEvent) => onEvent(event, 'drop')) as EventListener;\n const onDragOver = ((event: DragEvent) => onEvent(event, 'over')) as EventListener;\n const onDragEnter = ((event: DragEvent) => onEvent(event, 'enter')) as EventListener;\n const onDragLeave = ((event: DragEvent) => onEvent(event, 'leave')) as EventListener;\n\n element.addEventListener('dragenter', onDragEnter);\n element.addEventListener('dragover', onDragOver);\n element.addEventListener('dragleave', onDragLeave);\n element.addEventListener('drop', onDrop);\n\n return () => {\n element.removeEventListener('dragenter', onDragEnter);\n element.removeEventListener('dragover', onDragOver);\n element.removeEventListener('dragleave', onDragLeave);\n element.removeEventListener('drop', onDrop);\n };\n }, [target, internalRef.current]);\n\n if (target) return { overed, files };\n return { ref: internalRef, overed, files };\n}) as UseDropZone;\n"],"names":["useDropZone","params","target","isTarget","options","internalRef","useRefState","counterRef","useRef","files","setFiles","useState","overed","setOvered","dataTypes","getFiles","event","list","checkDataTypes","types","type","dataType","checkValidity","items","item","dataTypesValid","multipleFilesValid","useEffect","element","onEvent","currentFiles","onDrop","onDragOver","onDragEnter","onDragLeave"],"mappings":";;;AAyGO,MAAMA,IAAe,IAAIC,MAAkB;AAChD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAE5CG,IACJF,IACI,OAAOD,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,QAAQA,EAAO,CAAC,EAAA,IACpB,OAAOA,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,QAAQA,EAAO,CAAC,EAAA,GAGpBI,IAAcC,EAAA,GAEdC,IAAaC,EAAO,CAAC,GACrB,CAACC,GAAOC,CAAQ,IAAIC,EAAwB,IAAI,GAChD,CAACC,GAAQC,CAAS,IAAIF,EAAS,EAAK,GAEpCG,IAAYV,EAAQ,WAEpBW,IAAW,CAACC,MAAqB;AACrC,QAAI,CAACA,EAAM,aAAc,QAAO;AAChC,UAAMC,IAAO,MAAM,KAAKD,EAAM,aAAa,KAAK;AAChD,WAAIZ,EAAQ,WAAiBa,IACxBA,EAAK,SACH,CAACA,EAAK,CAAC,CAAC,IADU;AAAA,EACV,GAGXC,IAAiB,CAACC,MACjBL,IACD,OAAOA,KAAc,aAAmBA,EAAUK,CAAK,IACtDL,EAAU,SACVK,EAAM,SAEJA,EAAM,MAAM,CAACC,MAASN,EAAU,KAAK,CAACO,MAAaD,EAAK,SAASC,CAAQ,CAAC,CAAC,IAFxD,KADI,KAFP,IAQnBC,IAAgB,CAACC,MAAgC;AACrD,UAAMJ,IAAQ,MAAM,KAAKI,CAAK,EAAE,IAAI,CAACC,MAASA,EAAK,IAAI,GACjDC,IAAiBP,EAAeC,CAAK,GACrCO,IAAqBtB,EAAQ,YAAYmB,EAAM,UAAU;AAE/D,WAAOE,KAAkBC;AAAA,EAAA;AAoE3B,SAjEAC,EAAU,MAAM;AACd,QAAI,CAACzB,KAAU,CAACG,EAAY,MAAO;AAEnC,UAAMuB,IAAU1B,IAASC,EAAS,WAAWD,CAAM,IAAIG,EAAY;AAEnE,QAAI,CAACuB,EAAS;AAEd,UAAMC,IAAU,CAACb,GAAkBI,MAA8C;AAC/E,UAAI,CAACJ,EAAM,aAAc;AAGzB,UAAI,CADYM,EAAcN,EAAM,aAAa,KAAK,GACxC;AACZ,QAAAA,EAAM,aAAa,aAAa;AAChC;AAAA,MAAA;AAGF,MAAAA,EAAM,eAAA,GACNA,EAAM,aAAa,aAAa;AAEhC,YAAMc,IAAef,EAASC,CAAK;AAEnC,UAAII,MAAS,QAAQ;AACnB,QAAAb,EAAW,UAAU,GACrBM,EAAU,EAAK,GACfH,EAASoB,CAAY,GACrB1B,EAAQ,SAAS0B,GAAcd,CAAK;AACpC;AAAA,MAAA;AAGF,UAAII,MAAS,SAAS;AACpB,QAAAb,EAAW,WAAW,GACtBM,EAAU,EAAI,GACdT,EAAQ,UAAUY,CAAK;AACvB;AAAA,MAAA;AAGF,UAAII,MAAS,SAAS;AAEpB,YADAb,EAAW,WAAW,GAClBA,EAAW,YAAY,EAAG;AAC9B,QAAAM,EAAU,EAAK,GACfT,EAAQ,UAAUY,CAAK;AACvB;AAAA,MAAA;AAGF,MAAII,MAAS,UAAQhB,EAAQ,SAASY,CAAK;AAAA,IAAA,GAGvCe,IAAU,CAACf,MAAqBa,EAAQb,GAAO,MAAM,GACrDgB,IAAc,CAAChB,MAAqBa,EAAQb,GAAO,MAAM,GACzDiB,IAAe,CAACjB,MAAqBa,EAAQb,GAAO,OAAO,GAC3DkB,IAAe,CAAClB,MAAqBa,EAAQb,GAAO,OAAO;AAEjE,WAAAY,EAAQ,iBAAiB,aAAaK,CAAW,GACjDL,EAAQ,iBAAiB,YAAYI,CAAU,GAC/CJ,EAAQ,iBAAiB,aAAaM,CAAW,GACjDN,EAAQ,iBAAiB,QAAQG,CAAM,GAEhC,MAAM;AACX,MAAAH,EAAQ,oBAAoB,aAAaK,CAAW,GACpDL,EAAQ,oBAAoB,YAAYI,CAAU,GAClDJ,EAAQ,oBAAoB,aAAaM,CAAW,GACpDN,EAAQ,oBAAoB,QAAQG,CAAM;AAAA,IAAA;AAAA,EAC5C,GACC,CAAC7B,GAAQG,EAAY,OAAO,CAAC,GAE5BH,IAAe,EAAE,QAAAU,GAAQ,OAAAH,EAAA,IACtB,EAAE,KAAKJ,GAAa,QAAAO,GAAQ,OAAAH,EAAA;AACrC;"}
1
+ {"version":3,"file":"useDropZone.mjs","sources":["../../../../src/hooks/useDropZone/useDropZone.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\nexport type DropZoneDataTypes = ((types: string[]) => boolean) | string[];\n\nexport interface UseDropZoneOptions {\n /** The data types for drop zone */\n dataTypes?: DropZoneDataTypes;\n /** The multiple mode for drop zone */\n multiple?: boolean;\n /** The on drop callback */\n onDrop?: (files: File[] | null, event: DragEvent) => void;\n /** The on enter callback */\n onEnter?: (event: DragEvent) => void;\n /** The on leave callback */\n onLeave?: (event: DragEvent) => void;\n /** The on over callback */\n onOver?: (event: DragEvent) => void;\n}\n\nexport interface UseDropZoneReturn {\n /** The files that was dropped in drop zone */\n files: File[] | null;\n /** The over drop zone status */\n overed: boolean;\n}\n\nexport interface UseDropZone {\n (\n target: HookTarget,\n callback?: (files: File[] | null, event: DragEvent) => void\n ): UseDropZoneReturn;\n\n <Target extends Element>(\n callback?: (files: File[] | null, event: DragEvent) => void,\n target?: never\n ): UseDropZoneReturn & {\n ref: StateRef<Target>;\n };\n\n (target: HookTarget, options?: UseDropZoneOptions): UseDropZoneReturn;\n\n <Target extends Element>(\n options?: UseDropZoneOptions,\n target?: never\n ): UseDropZoneReturn & {\n ref: StateRef<Target>;\n };\n}\n\n/**\n * @name useDropZone\n * @description - Hook that provides drop zone functionality\n * @category Elements\n * @usage medium\n\n * @overload\n * @template Target The target element\n * @param {Target} target The target element drop zone's\n * @param {DataTypes} [options.dataTypes] The data types\n * @param {boolean} [options.multiple] The multiple mode\n * @param {(files: File[] | null, event: DragEvent) => void} [options.onDrop] The on drop callback function\n * @param {(event: DragEvent) => void} [options.onEnter] The on enter callback function\n * @param {(event: DragEvent) => void} [options.onLeave] The on leave callback function\n * @param {(event: DragEvent) => void} [options.onOver] The on over callback function\n * @returns {UseDropZoneReturn} The object with drop zone states\n *\n * @example\n * const { overed, files } = useDropZone(ref, options);\n *\n * @overload\n * @param {Target} target The target element drop zone's\n * @param {(files: File[] | null, event: DragEvent) => void} [callback] The callback function to be invoked on drop\n * @returns {UseDropZoneReturn} The object with drop zone states\n *\n * @example\n * const { overed, files } = useDropZone(ref, () => console.log('callback'));\n *\n * @overload\n * @param {DataTypes} [options.dataTypes] The data types\n * @param {boolean} [options.multiple] The multiple mode\n * @param {(files: File[] | null, event: DragEvent) => void} [options.onDrop] The on drop callback function\n * @param {(event: DragEvent) => void} [options.onEnter] The on enter callback function\n * @param {(event: DragEvent) => void} [options.onLeave] The on leave callback function\n * @param {(event: DragEvent) => void} [options.onOver] The on over callback function\n * @returns {UseDropZoneReturn & { ref: StateRef<Target> }} The object with drop zone states and ref\n *\n * @example\n * const { ref, overed, files } = useDropZone(options);\n *\n * @overload\n * @param {(files: File[] | null, event: DragEvent) => void} [callback] The callback function to be invoked on drop\n * @returns {UseDropZoneReturn & { ref: StateRef<Target> }} The object with drop zone states and ref\n *\n * @example\n * const { ref, overed, files } = useDropZone(() => console.log('callback'));\n */\n\nexport const useDropZone = ((...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 : { onDrop: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onDrop: params[0] }\n ) as UseDropZoneOptions;\n\n const internalRef = useRefState<Element>();\n\n const counterRef = useRef(0);\n const [files, setFiles] = useState<File[] | null>(null);\n const [overed, setOvered] = useState(false);\n\n const dataTypes = options.dataTypes;\n\n const getFiles = (event: DragEvent) => {\n if (!event.dataTransfer) return null;\n const list = Array.from(event.dataTransfer.files);\n if (options.multiple) return list;\n if (!list.length) return null;\n return [list[0]];\n };\n\n const checkDataTypes = (types: string[]) => {\n if (!dataTypes) return true;\n if (typeof dataTypes === 'function') return dataTypes(types);\n if (!dataTypes.length) return true;\n if (!types.length) return false;\n\n return types.every((type) => dataTypes.some((dataType) => type.includes(dataType)));\n };\n\n const checkValidity = (items: DataTransferItemList) => {\n const types = Array.from(items).map((item) => item.type);\n const dataTypesValid = checkDataTypes(types);\n const multipleFilesValid = options.multiple || items.length <= 1;\n\n return dataTypesValid && multipleFilesValid;\n };\n\n useEffect(() => {\n if (!target && !internalRef.state) return;\n\n const element = target ? isTarget.getElement(target) : internalRef.current;\n\n if (!element) return;\n\n const onEvent = (event: DragEvent, type: 'drop' | 'enter' | 'leave' | 'over') => {\n if (!event.dataTransfer) return;\n\n const isValid = checkValidity(event.dataTransfer.items);\n if (!isValid) {\n event.dataTransfer.dropEffect = 'none';\n return;\n }\n\n event.preventDefault();\n event.dataTransfer.dropEffect = 'copy';\n\n const currentFiles = getFiles(event);\n\n if (type === 'drop') {\n counterRef.current = 0;\n setOvered(false);\n setFiles(currentFiles);\n options.onDrop?.(currentFiles, event);\n return;\n }\n\n if (type === 'enter') {\n counterRef.current += 1;\n setOvered(true);\n options.onEnter?.(event);\n return;\n }\n\n if (type === 'leave') {\n counterRef.current -= 1;\n if (counterRef.current !== 0) return;\n setOvered(false);\n options.onLeave?.(event);\n return;\n }\n\n if (type === 'over') options.onOver?.(event);\n };\n\n const onDrop = ((event: DragEvent) => onEvent(event, 'drop')) as EventListener;\n const onDragOver = ((event: DragEvent) => onEvent(event, 'over')) as EventListener;\n const onDragEnter = ((event: DragEvent) => onEvent(event, 'enter')) as EventListener;\n const onDragLeave = ((event: DragEvent) => onEvent(event, 'leave')) as EventListener;\n\n element.addEventListener('dragenter', onDragEnter);\n element.addEventListener('dragover', onDragOver);\n element.addEventListener('dragleave', onDragLeave);\n element.addEventListener('drop', onDrop);\n\n return () => {\n element.removeEventListener('dragenter', onDragEnter);\n element.removeEventListener('dragover', onDragOver);\n element.removeEventListener('dragleave', onDragLeave);\n element.removeEventListener('drop', onDrop);\n };\n }, [target, internalRef.state, isTarget.getRefState(target)]);\n\n if (target) return { overed, files };\n return { ref: internalRef, overed, files };\n}) as UseDropZone;\n"],"names":["useDropZone","params","target","isTarget","options","internalRef","useRefState","counterRef","useRef","files","setFiles","useState","overed","setOvered","dataTypes","getFiles","event","list","checkDataTypes","types","type","dataType","checkValidity","items","item","dataTypesValid","multipleFilesValid","useEffect","element","onEvent","currentFiles","onDrop","onDragOver","onDragEnter","onDragLeave"],"mappings":";;;AAyGO,MAAMA,KAAe,IAAIC,MAAkB;AAChD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAE5CG,IACJF,IACI,OAAOD,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,QAAQA,EAAO,CAAC,EAAA,IACpB,OAAOA,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,QAAQA,EAAO,CAAC,EAAA,GAGpBI,IAAcC,EAAA,GAEdC,IAAaC,EAAO,CAAC,GACrB,CAACC,GAAOC,CAAQ,IAAIC,EAAwB,IAAI,GAChD,CAACC,GAAQC,CAAS,IAAIF,EAAS,EAAK,GAEpCG,IAAYV,EAAQ,WAEpBW,IAAW,CAACC,MAAqB;AACrC,QAAI,CAACA,EAAM,aAAc,QAAO;AAChC,UAAMC,IAAO,MAAM,KAAKD,EAAM,aAAa,KAAK;AAChD,WAAIZ,EAAQ,WAAiBa,IACxBA,EAAK,SACH,CAACA,EAAK,CAAC,CAAC,IADU;AAAA,EACV,GAGXC,IAAiB,CAACC,MACjBL,IACD,OAAOA,KAAc,aAAmBA,EAAUK,CAAK,IACtDL,EAAU,SACVK,EAAM,SAEJA,EAAM,MAAM,CAACC,MAASN,EAAU,KAAK,CAACO,MAAaD,EAAK,SAASC,CAAQ,CAAC,CAAC,IAFxD,KADI,KAFP,IAQnBC,IAAgB,CAACC,MAAgC;AACrD,UAAMJ,IAAQ,MAAM,KAAKI,CAAK,EAAE,IAAI,CAACC,MAASA,EAAK,IAAI,GACjDC,IAAiBP,EAAeC,CAAK,GACrCO,IAAqBtB,EAAQ,YAAYmB,EAAM,UAAU;AAE/D,WAAOE,KAAkBC;AAAA,EAAA;AAoE3B,SAjEAC,EAAU,MAAM;AACd,QAAI,CAACzB,KAAU,CAACG,EAAY,MAAO;AAEnC,UAAMuB,IAAU1B,IAASC,EAAS,WAAWD,CAAM,IAAIG,EAAY;AAEnE,QAAI,CAACuB,EAAS;AAEd,UAAMC,IAAU,CAACb,GAAkBI,MAA8C;AAC/E,UAAI,CAACJ,EAAM,aAAc;AAGzB,UAAI,CADYM,EAAcN,EAAM,aAAa,KAAK,GACxC;AACZ,QAAAA,EAAM,aAAa,aAAa;AAChC;AAAA,MAAA;AAGF,MAAAA,EAAM,eAAA,GACNA,EAAM,aAAa,aAAa;AAEhC,YAAMc,IAAef,EAASC,CAAK;AAEnC,UAAII,MAAS,QAAQ;AACnB,QAAAb,EAAW,UAAU,GACrBM,EAAU,EAAK,GACfH,EAASoB,CAAY,GACrB1B,EAAQ,SAAS0B,GAAcd,CAAK;AACpC;AAAA,MAAA;AAGF,UAAII,MAAS,SAAS;AACpB,QAAAb,EAAW,WAAW,GACtBM,EAAU,EAAI,GACdT,EAAQ,UAAUY,CAAK;AACvB;AAAA,MAAA;AAGF,UAAII,MAAS,SAAS;AAEpB,YADAb,EAAW,WAAW,GAClBA,EAAW,YAAY,EAAG;AAC9B,QAAAM,EAAU,EAAK,GACfT,EAAQ,UAAUY,CAAK;AACvB;AAAA,MAAA;AAGF,MAAII,MAAS,UAAQhB,EAAQ,SAASY,CAAK;AAAA,IAAA,GAGvCe,KAAU,CAACf,MAAqBa,EAAQb,GAAO,MAAM,IACrDgB,KAAc,CAAChB,MAAqBa,EAAQb,GAAO,MAAM,IACzDiB,KAAe,CAACjB,MAAqBa,EAAQb,GAAO,OAAO,IAC3DkB,KAAe,CAAClB,MAAqBa,EAAQb,GAAO,OAAO;AAEjE,WAAAY,EAAQ,iBAAiB,aAAaK,CAAW,GACjDL,EAAQ,iBAAiB,YAAYI,CAAU,GAC/CJ,EAAQ,iBAAiB,aAAaM,CAAW,GACjDN,EAAQ,iBAAiB,QAAQG,CAAM,GAEhC,MAAM;AACX,MAAAH,EAAQ,oBAAoB,aAAaK,CAAW,GACpDL,EAAQ,oBAAoB,YAAYI,CAAU,GAClDJ,EAAQ,oBAAoB,aAAaM,CAAW,GACpDN,EAAQ,oBAAoB,QAAQG,CAAM;AAAA,IAAA;AAAA,EAC5C,GACC,CAAC7B,GAAQG,EAAY,OAAOF,EAAS,YAAYD,CAAM,CAAC,CAAC,GAExDA,IAAe,EAAE,QAAAU,GAAQ,OAAAH,EAAA,IACtB,EAAE,KAAKJ,GAAa,QAAAO,GAAQ,OAAAH,EAAA;AACrC;"}
@@ -1,30 +1,30 @@
1
1
  import { useState as m } from "react";
2
- import { useIsomorphicLayoutEffect as f } from "../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs";
3
- import { useRefState as a } from "../useRefState/useRefState.mjs";
4
- import { isTarget as d } from "../../utils/helpers/isTarget.mjs";
5
- const R = (...s) => {
6
- const e = s[0], [i, n] = m({ width: 0, height: 0 }), r = a();
7
- return f(() => {
8
- const t = e ? d.getElement(e) : r.current;
2
+ import { useIsomorphicLayoutEffect as a } from "../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs";
3
+ import { useRefState as d } from "../useRefState/useRefState.mjs";
4
+ import { isTarget as s } from "../../utils/helpers/isTarget.mjs";
5
+ const v = ((...h) => {
6
+ const e = h[0], [i, n] = m({ width: 0, height: 0 }), r = d();
7
+ return a(() => {
8
+ const t = e ? s.getElement(e) : r.current;
9
9
  if (!t) return;
10
- const { width: c, height: h } = t.getBoundingClientRect();
10
+ const { width: c, height: u } = t.getBoundingClientRect();
11
11
  n({
12
12
  width: c,
13
- height: h
13
+ height: u
14
14
  });
15
15
  const o = new ResizeObserver(() => {
16
- const { width: u, height: g } = t.getBoundingClientRect();
17
- n({ width: u, height: g });
16
+ const { width: g, height: f } = t.getBoundingClientRect();
17
+ n({ width: g, height: f });
18
18
  });
19
19
  return o.observe(t), () => {
20
20
  o.disconnect();
21
21
  };
22
- }, [r.current, e]), e ? { value: i } : {
22
+ }, [r.state, e, s.getRefState(e)]), e ? { value: i } : {
23
23
  ref: r,
24
24
  value: i
25
25
  };
26
- };
26
+ });
27
27
  export {
28
- R as useElementSize
28
+ v as useElementSize
29
29
  };
30
30
  //# sourceMappingURL=useElementSize.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useElementSize.mjs","sources":["../../../../src/hooks/useElementSize/useElementSize.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect';\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The element size value type */\nexport interface UseElementSizeValue {\n /** The element's height */\n height: number;\n /** The element's width */\n width: number;\n}\n\n/** The use element size return type */\nexport interface UseElementSizeReturn {\n value: UseElementSizeValue;\n}\n\nexport interface UseElementSize {\n (target: HookTarget): UseElementSizeReturn;\n\n <Target extends Element>(\n target?: never\n ): {\n ref: StateRef<Target>;\n } & UseElementSizeReturn;\n}\n\n/**\n * @name useElementSize\n * @description - Hook that observes and returns the width and height of element\n * @category Elements\n * @usage low\n\n * @overload\n * @param {HookTarget} target The target element to observe\n * @returns {UseElementSizeReturn} An object containing the current width and height of the element\n *\n * @example\n * const { value } = useElementSize(ref);\n *\n * @overload\n * @returns { { ref: StateRef<Target> } & UseElementSizeReturn } An object containing the current width and height of the element\n *\n * @example\n * const { ref, value } = useElementSize();\n */\nexport const useElementSize = ((...params: any[]) => {\n const target = params[0] as HookTarget | undefined;\n const [size, setSize] = useState({ width: 0, height: 0 });\n const internalRef = useRefState<Element>();\n\n useIsomorphicLayoutEffect(() => {\n const element = (target ? isTarget.getElement(target) : internalRef.current) as Element;\n\n if (!element) return;\n\n const { width, height } = element.getBoundingClientRect();\n setSize({\n width,\n height\n });\n\n const observer = new ResizeObserver(() => {\n const { width, height } = element.getBoundingClientRect();\n setSize({ width, height });\n });\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [internalRef.current, target]);\n\n if (target) return { value: size };\n return {\n ref: internalRef,\n value: size\n };\n}) as UseElementSize;\n"],"names":["useElementSize","params","target","size","setSize","useState","internalRef","useRefState","useIsomorphicLayoutEffect","element","isTarget","width","height","observer"],"mappings":";;;;AAqDO,MAAMA,IAAkB,IAAIC,MAAkB;AACnD,QAAMC,IAASD,EAAO,CAAC,GACjB,CAACE,GAAMC,CAAO,IAAIC,EAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,GAClDC,IAAcC,EAAA;AAyBpB,SAvBAC,EAA0B,MAAM;AAC9B,UAAMC,IAAWP,IAASQ,EAAS,WAAWR,CAAM,IAAII,EAAY;AAEpE,QAAI,CAACG,EAAS;AAEd,UAAM,EAAE,OAAAE,GAAO,QAAAC,MAAWH,EAAQ,sBAAA;AAClC,IAAAL,EAAQ;AAAA,MACN,OAAAO;AAAA,MACA,QAAAC;AAAA,IAAA,CACD;AAED,UAAMC,IAAW,IAAI,eAAe,MAAM;AACxC,YAAM,EAAE,OAAAF,GAAO,QAAAC,EAAAA,IAAWH,EAAQ,sBAAA;AAClC,MAAAL,EAAQ,EAAE,OAAAO,GAAO,QAAAC,GAAQ;AAAA,IAAA,CAC1B;AAED,WAAAC,EAAS,QAAQJ,CAAO,GAEjB,MAAM;AACX,MAAAI,EAAS,WAAA;AAAA,IAAW;AAAA,EACtB,GACC,CAACP,EAAY,SAASJ,CAAM,CAAC,GAE5BA,IAAe,EAAE,OAAOC,EAAA,IACrB;AAAA,IACL,KAAKG;AAAA,IACL,OAAOH;AAAA,EAAA;AAEX;"}
1
+ {"version":3,"file":"useElementSize.mjs","sources":["../../../../src/hooks/useElementSize/useElementSize.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect';\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The element size value type */\nexport interface UseElementSizeValue {\n /** The element's height */\n height: number;\n /** The element's width */\n width: number;\n}\n\n/** The use element size return type */\nexport interface UseElementSizeReturn {\n value: UseElementSizeValue;\n}\n\nexport interface UseElementSize {\n (target: HookTarget): UseElementSizeReturn;\n\n <Target extends Element>(\n target?: never\n ): {\n ref: StateRef<Target>;\n } & UseElementSizeReturn;\n}\n\n/**\n * @name useElementSize\n * @description - Hook that observes and returns the width and height of element\n * @category Elements\n * @usage low\n\n * @overload\n * @param {HookTarget} target The target element to observe\n * @returns {UseElementSizeReturn} An object containing the current width and height of the element\n *\n * @example\n * const { value } = useElementSize(ref);\n *\n * @overload\n * @returns { { ref: StateRef<Target> } & UseElementSizeReturn } An object containing the current width and height of the element\n *\n * @example\n * const { ref, value } = useElementSize();\n */\nexport const useElementSize = ((...params: any[]) => {\n const target = params[0] as HookTarget | undefined;\n const [size, setSize] = useState({ width: 0, height: 0 });\n const internalRef = useRefState<Element>();\n\n useIsomorphicLayoutEffect(() => {\n const element = (target ? isTarget.getElement(target) : internalRef.current) as Element;\n\n if (!element) return;\n\n const { width, height } = element.getBoundingClientRect();\n setSize({\n width,\n height\n });\n\n const observer = new ResizeObserver(() => {\n const { width, height } = element.getBoundingClientRect();\n setSize({ width, height });\n });\n\n observer.observe(element);\n\n return () => {\n observer.disconnect();\n };\n }, [internalRef.state, target, isTarget.getRefState(target)]);\n\n if (target) return { value: size };\n return {\n ref: internalRef,\n value: size\n };\n}) as UseElementSize;\n"],"names":["useElementSize","params","target","size","setSize","useState","internalRef","useRefState","useIsomorphicLayoutEffect","element","isTarget","width","height","observer"],"mappings":";;;;AAqDO,MAAMA,KAAkB,IAAIC,MAAkB;AACnD,QAAMC,IAASD,EAAO,CAAC,GACjB,CAACE,GAAMC,CAAO,IAAIC,EAAS,EAAE,OAAO,GAAG,QAAQ,GAAG,GAClDC,IAAcC,EAAA;AAyBpB,SAvBAC,EAA0B,MAAM;AAC9B,UAAMC,IAAWP,IAASQ,EAAS,WAAWR,CAAM,IAAII,EAAY;AAEpE,QAAI,CAACG,EAAS;AAEd,UAAM,EAAE,OAAAE,GAAO,QAAAC,MAAWH,EAAQ,sBAAA;AAClC,IAAAL,EAAQ;AAAA,MACN,OAAAO;AAAA,MACA,QAAAC;AAAA,IAAA,CACD;AAED,UAAMC,IAAW,IAAI,eAAe,MAAM;AACxC,YAAM,EAAE,OAAAF,GAAO,QAAAC,EAAAA,IAAWH,EAAQ,sBAAA;AAClC,MAAAL,EAAQ,EAAE,OAAAO,GAAO,QAAAC,GAAQ;AAAA,IAAA,CAC1B;AAED,WAAAC,EAAS,QAAQJ,CAAO,GAEjB,MAAM;AACX,MAAAI,EAAS,WAAA;AAAA,IAAW;AAAA,EACtB,GACC,CAACP,EAAY,OAAOJ,GAAQQ,EAAS,YAAYR,CAAM,CAAC,CAAC,GAExDA,IAAe,EAAE,OAAOC,EAAA,IACrB;AAAA,IACL,KAAKG;AAAA,IACL,OAAOH;AAAA,EAAA;AAEX;"}
@@ -1,19 +1,19 @@
1
- import { useRef as l, useEffect as R } from "react";
2
- import { useRefState as L } from "../useRefState/useRefState.mjs";
3
- import { isTarget as d } from "../../utils/helpers/isTarget.mjs";
4
- const w = (...e) => {
5
- const t = d(e[0]) ? e[0] : void 0, o = t ? e[1] : e[0], i = t ? e[2] : e[1], n = t ? e[3] : e[2], s = n?.enabled ?? !0, r = L(), c = l(i);
6
- c.current = i;
7
- const v = l(n);
8
- if (v.current = n, R(() => {
9
- if (!s || !t && !r.state) return;
10
- const u = (t ? d.getElement(t) : r.current) ?? window, f = (E) => c.current(E);
11
- return u.addEventListener(o, f, n), () => {
12
- u.removeEventListener(o, f, n);
1
+ import { useRef as d, useEffect as E } from "react";
2
+ import { useRefState as g } from "../useRefState/useRefState.mjs";
3
+ import { isTarget as i } from "../../utils/helpers/isTarget.mjs";
4
+ const w = ((...t) => {
5
+ const e = i(t[0]) ? t[0] : void 0, o = e ? t[1] : t[0], s = e ? t[2] : t[1], n = e ? t[3] : t[2], c = n?.enabled ?? !0, r = g(), f = d(s);
6
+ f.current = s;
7
+ const v = d(n);
8
+ if (v.current = n, E(() => {
9
+ if (!c || !e && !r.state) return;
10
+ const u = (e ? i.getElement(e) : r.current) ?? window, l = (R) => f.current(R);
11
+ return u.addEventListener(o, l, n), () => {
12
+ u.removeEventListener(o, l, n);
13
13
  };
14
- }, [t, r.state, o, s]), !t)
14
+ }, [e, r.state, i.getRefState(e), o, c]), !e)
15
15
  return r;
16
- };
16
+ });
17
17
  export {
18
18
  w as useEventListener
19
19
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useEventListener.mjs","sources":["../../../../src/hooks/useEventListener/useEventListener.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use event listener options */\nexport type UseEventListenerOptions = {\n enabled?: boolean;\n} & AddEventListenerOptions;\n\n/** The use event listener return type */\nexport type UseEventListenerReturn<Target extends Element> = StateRef<Target>;\n\nexport interface UseEventListener {\n <Event extends keyof WindowEventMap = keyof WindowEventMap>(\n target: HookTarget,\n event: Event,\n listener: (this: Window, event: WindowEventMap[Event]) => void,\n options?: UseEventListenerOptions\n ): void;\n\n <Event extends keyof DocumentEventMap = keyof DocumentEventMap>(\n target: HookTarget,\n event: Event,\n listener: (this: Document, event: DocumentEventMap[Event]) => void,\n options?: UseEventListenerOptions\n ): void;\n\n <Event extends keyof HTMLElementEventMap = keyof HTMLElementEventMap>(\n target: HookTarget,\n event: Event,\n listener: (this: Element, event: HTMLElementEventMap[Event]) => void,\n options?: UseEventListenerOptions\n ): void;\n\n <Target extends Element, Event extends keyof HTMLElementEventMap = keyof HTMLElementEventMap>(\n event: Event,\n listener: (this: Target, event: HTMLElementEventMap[Event]) => void,\n options?: UseEventListenerOptions,\n target?: never\n ): UseEventListenerReturn<Target>;\n\n <\n Target extends Element,\n Event extends keyof MediaQueryListEventMap = keyof MediaQueryListEventMap\n >(\n event: Event,\n listener: (this: Target, event: MediaQueryListEventMap[Event]) => void,\n options?: UseEventListenerOptions,\n target?: never\n ): UseEventListenerReturn<Target>;\n}\n\n/**\n * @name useEventListener\n * @description - Hook that attaches an event listener to the specified target\n * @category Browser\n * @usage necessary\n\n * @overload\n * @template Event Key of window event map\n * @param {Window} target The window object to attach the event listener to\n * @param {Event | Event[]} event An array of event types to listen for\n * @param {(this: Window, event: WindowEventMap[Event]) => void} handler The event handler function\n * @param {UseEventListenerOptions} [options] Options for the event listener\n * @returns {void}\n *\n * @example\n * useEventListener(window, 'click', () => console.log('click'));\n *\n * @overload\n * @template Event Key of window event map\n * @param {Document} target The window object to attach the event listener to\n * @param {Event | Event[]} event An array of event types to listen for\n * @param {(this: Document, event: DocumentEventMap[Event]) => void} handler The event handler function\n * @param {UseEventListenerOptions} [options] Options for the event listener\n * @returns {void}\n *\n * @example\n * useEventListener(document, 'click', () => console.log('click'));\n *\n * @overload\n * @template Event Key of window event map\n * @template Target The target element\n * @param {HookTarget} target The target element to attach the event listener to\n * @param {Event | Event[]} event An array of event types to listen for\n * @param {(this: Target, event: HTMLElementEventMap[Event]) => void} handler The event handler function\n * @param {UseEventListenerOptions} [options] Options for the event listener\n * @returns {void}\n *\n * @example\n * useEventListener(ref, 'click', () => console.log('click'));\n *\n * @overload\n * @template Event Key of window event map\n * @template Target The target element\n * @param {Event | Event[]} event An array of event types to listen for\n * @param {(this: Target, event: HTMLElementEventMap[Event] | MediaQueryListEventMap[Event]) => void} handler The event handler function\n * @param {UseEventListenerOptions} [options] Options for the event listener\n * @returns {UseEventListenerReturn<Target>} A reference to the target element\n *\n * @example\n * const ref = useEventListener('click', () => console.log('click'));\n */\nexport const useEventListener = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const event = (target ? params[1] : params[0]) as string;\n const listener = (target ? params[2] : params[1]) as (...arg: any[]) => undefined | void;\n const options = (target ? params[3] : params[2]) as UseEventListenerOptions | undefined;\n\n const enabled = options?.enabled ?? true;\n\n const internalRef = useRefState();\n const internalListenerRef = useRef(listener);\n internalListenerRef.current = listener;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n\n const element =\n ((target ? isTarget.getElement(target) : internalRef.current) as Element) ?? window;\n\n const listener = (event: Event) => internalListenerRef.current(event);\n\n element.addEventListener(event, listener, options);\n return () => {\n element.removeEventListener(event, listener, options);\n };\n }, [target, internalRef.state, event, enabled]);\n\n if (target) return;\n return internalRef;\n}) as UseEventListener;\n"],"names":["useEventListener","params","target","isTarget","event","listener","options","enabled","internalRef","useRefState","internalListenerRef","useRef","internalOptionsRef","useEffect","element"],"mappings":";;;AA6GO,MAAMA,IAAoB,IAAIC,MAAkB;AACrD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAASF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACtCI,IAAYH,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACzCK,IAAWJ,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAExCM,IAAUD,GAAS,WAAW,IAE9BE,IAAcC,EAAA,GACdC,IAAsBC,EAAON,CAAQ;AAC3C,EAAAK,EAAoB,UAAUL;AAC9B,QAAMO,IAAqBD,EAAOL,CAAO;AAiBzC,MAhBAM,EAAmB,UAAUN,GAE7BO,EAAU,MAAM;AACd,QAAI,CAACN,KAAY,CAACL,KAAU,CAACM,EAAY,MAAQ;AAEjD,UAAMM,KACFZ,IAASC,EAAS,WAAWD,CAAM,IAAIM,EAAY,YAAwB,QAEzEH,IAAW,CAACD,MAAiBM,EAAoB,QAAQN,CAAK;AAEpE,WAAAU,EAAQ,iBAAiBV,GAAOC,GAAUC,CAAO,GAC1C,MAAM;AACX,MAAAQ,EAAQ,oBAAoBV,GAAOC,GAAUC,CAAO;AAAA,IAAA;AAAA,EACtD,GACC,CAACJ,GAAQM,EAAY,OAAOJ,GAAOG,CAAO,CAAC,GAE1C,CAAAL;AACJ,WAAOM;AACT;"}
1
+ {"version":3,"file":"useEventListener.mjs","sources":["../../../../src/hooks/useEventListener/useEventListener.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use event listener options */\nexport type UseEventListenerOptions = {\n enabled?: boolean;\n} & AddEventListenerOptions;\n\n/** The use event listener return type */\nexport type UseEventListenerReturn<Target extends Element> = StateRef<Target>;\n\nexport interface UseEventListener {\n <Event extends keyof WindowEventMap = keyof WindowEventMap>(\n target: HookTarget,\n event: Event,\n listener: (this: Window, event: WindowEventMap[Event]) => void,\n options?: UseEventListenerOptions\n ): void;\n\n <Event extends keyof DocumentEventMap = keyof DocumentEventMap>(\n target: HookTarget,\n event: Event,\n listener: (this: Document, event: DocumentEventMap[Event]) => void,\n options?: UseEventListenerOptions\n ): void;\n\n <Event extends keyof HTMLElementEventMap = keyof HTMLElementEventMap>(\n target: HookTarget,\n event: Event,\n listener: (this: Element, event: HTMLElementEventMap[Event]) => void,\n options?: UseEventListenerOptions\n ): void;\n\n <Target extends Element, Event extends keyof HTMLElementEventMap = keyof HTMLElementEventMap>(\n event: Event,\n listener: (this: Target, event: HTMLElementEventMap[Event]) => void,\n options?: UseEventListenerOptions,\n target?: never\n ): UseEventListenerReturn<Target>;\n\n <\n Target extends Element,\n Event extends keyof MediaQueryListEventMap = keyof MediaQueryListEventMap\n >(\n event: Event,\n listener: (this: Target, event: MediaQueryListEventMap[Event]) => void,\n options?: UseEventListenerOptions,\n target?: never\n ): UseEventListenerReturn<Target>;\n}\n\n/**\n * @name useEventListener\n * @description - Hook that attaches an event listener to the specified target\n * @category Browser\n * @usage necessary\n\n * @overload\n * @template Event Key of window event map\n * @param {Window} target The window object to attach the event listener to\n * @param {Event | Event[]} event An array of event types to listen for\n * @param {(this: Window, event: WindowEventMap[Event]) => void} handler The event handler function\n * @param {UseEventListenerOptions} [options] Options for the event listener\n * @returns {void}\n *\n * @example\n * useEventListener(window, 'click', () => console.log('click'));\n *\n * @overload\n * @template Event Key of window event map\n * @param {Document} target The window object to attach the event listener to\n * @param {Event | Event[]} event An array of event types to listen for\n * @param {(this: Document, event: DocumentEventMap[Event]) => void} handler The event handler function\n * @param {UseEventListenerOptions} [options] Options for the event listener\n * @returns {void}\n *\n * @example\n * useEventListener(document, 'click', () => console.log('click'));\n *\n * @overload\n * @template Event Key of window event map\n * @template Target The target element\n * @param {HookTarget} target The target element to attach the event listener to\n * @param {Event | Event[]} event An array of event types to listen for\n * @param {(this: Target, event: HTMLElementEventMap[Event]) => void} handler The event handler function\n * @param {UseEventListenerOptions} [options] Options for the event listener\n * @returns {void}\n *\n * @example\n * useEventListener(ref, 'click', () => console.log('click'));\n *\n * @overload\n * @template Event Key of window event map\n * @template Target The target element\n * @param {Event | Event[]} event An array of event types to listen for\n * @param {(this: Target, event: HTMLElementEventMap[Event] | MediaQueryListEventMap[Event]) => void} handler The event handler function\n * @param {UseEventListenerOptions} [options] Options for the event listener\n * @returns {UseEventListenerReturn<Target>} A reference to the target element\n *\n * @example\n * const ref = useEventListener('click', () => console.log('click'));\n */\nexport const useEventListener = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const event = (target ? params[1] : params[0]) as string;\n const listener = (target ? params[2] : params[1]) as (...arg: any[]) => undefined | void;\n const options = (target ? params[3] : params[2]) as UseEventListenerOptions | undefined;\n\n const enabled = options?.enabled ?? true;\n\n const internalRef = useRefState();\n const internalListenerRef = useRef(listener);\n internalListenerRef.current = listener;\n const internalOptionsRef = useRef(options);\n internalOptionsRef.current = options;\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n\n const element =\n ((target ? isTarget.getElement(target) : internalRef.current) as Element) ?? window;\n\n const listener = (event: Event) => internalListenerRef.current(event);\n\n element.addEventListener(event, listener, options);\n return () => {\n element.removeEventListener(event, listener, options);\n };\n }, [target, internalRef.state, isTarget.getRefState(target), event, enabled]);\n\n if (target) return;\n return internalRef;\n}) as UseEventListener;\n"],"names":["useEventListener","params","target","isTarget","event","listener","options","enabled","internalRef","useRefState","internalListenerRef","useRef","internalOptionsRef","useEffect","element"],"mappings":";;;AA6GO,MAAMA,KAAoB,IAAIC,MAAkB;AACrD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAASF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACtCI,IAAYH,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GACzCK,IAAWJ,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAExCM,IAAUD,GAAS,WAAW,IAE9BE,IAAcC,EAAA,GACdC,IAAsBC,EAAON,CAAQ;AAC3C,EAAAK,EAAoB,UAAUL;AAC9B,QAAMO,IAAqBD,EAAOL,CAAO;AAiBzC,MAhBAM,EAAmB,UAAUN,GAE7BO,EAAU,MAAM;AACd,QAAI,CAACN,KAAY,CAACL,KAAU,CAACM,EAAY,MAAQ;AAEjD,UAAMM,KACFZ,IAASC,EAAS,WAAWD,CAAM,IAAIM,EAAY,YAAwB,QAEzEH,IAAW,CAACD,MAAiBM,EAAoB,QAAQN,CAAK;AAEpE,WAAAU,EAAQ,iBAAiBV,GAAOC,GAAUC,CAAO,GAC1C,MAAM;AACX,MAAAQ,EAAQ,oBAAoBV,GAAOC,GAAUC,CAAO;AAAA,IAAA;AAAA,EACtD,GACC,CAACJ,GAAQM,EAAY,OAAOL,EAAS,YAAYD,CAAM,GAAGE,GAAOG,CAAO,CAAC,GAExE,CAAAL;AACJ,WAAOM;AACT;"}
@@ -3,7 +3,7 @@ const i = {
3
3
  multiple: !0,
4
4
  accept: "*",
5
5
  reset: !1
6
- }, R = (...r) => {
6
+ }, R = ((...r) => {
7
7
  const u = typeof r[0] == "function" ? r[0] : void 0, n = u ? r[0] : r[1], [a, o] = g(null), e = f(null), l = f(u);
8
8
  l.current = u;
9
9
  const s = () => {
@@ -26,7 +26,7 @@ const i = {
26
26
  e.current && e.current.remove();
27
27
  };
28
28
  }, []), { value: a, open: m, reset: s };
29
- };
29
+ });
30
30
  export {
31
31
  R as useFileDialog
32
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"useFileDialog.mjs","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 * @usage low\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 if (!inputRef.current) return;\n inputRef.current.remove();\n };\n }, []);\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":";AAYA,MAAMA,IAAkB;AAAA,EACtB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AACT,GAgDaC,IAAiB,IAAIC,MAAkB;AAClD,QAAMC,IAAY,OAAOD,EAAO,CAAC,KAAM,aAAaA,EAAO,CAAC,IAAI,QAG1DE,IAAWD,IAAWD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAE1C,CAACG,GAAOC,CAAQ,IAAIC,EAA0B,IAAI,GAClDC,IAAWC,EAAgC,IAAI,GAC/CC,IAAsBD,EAAON,CAAQ;AAC3C,EAAAO,EAAoB,UAAUP;AAE9B,QAAMQ,IAAQ,MAAM;AAClB,IAAAL,EAAS,IAAI,GACbI,EAAoB,UAAU,IAAI,GAC9BF,EAAS,YAASA,EAAS,QAAQ,QAAQ;AAAA,EAAA,GAG3CI,IAAO,CAACC,MAAsC;AAClD,QAAI,CAACL,EAAS,QAAS;AAEvB,IAAAA,EAAS,QAAQ,WACfK,GAAY,YAAYT,GAAS,YAAYJ,EAAgB,UAC/DQ,EAAS,QAAQ,SAASK,GAAY,UAAUT,GAAS,UAAUJ,EAAgB;AAEnF,UAAMc,IAAUD,GAAY,WAAWT,GAAS;AAChD,IAAIU,MAASN,EAAS,QAAQ,UAAUM,KAEpCD,GAAY,SAAST,GAAS,SAASJ,EAAgB,UAAOW,EAAA,GAElEH,EAAS,QAAQ,MAAA;AAAA,EAAM;AAGzB,SAAAO,EAAU,MAAM;AACd,UAAMC,IAAO,MAAM;AACjB,YAAMC,IAAQ,SAAS,cAAc,OAAO;AAC5C,aAAAA,EAAM,OAAO,QAEbA,EAAM,WAAW,CAACC,MAAiB;AACjC,cAAM,EAAE,OAAAC,MAAUD,EAAM;AACxB,QAAAZ,EAASa,CAAK,GACdT,EAAoB,UAAUS,CAAK;AAAA,MAAA,GAE9BF;AAAA,IAAA;AAGT,WAAAT,EAAS,UAAUQ,EAAA,GACZ,MAAM;AACX,MAAKR,EAAS,WACdA,EAAS,QAAQ,OAAA;AAAA,IAAO;AAAA,EAC1B,GACC,EAAE,GAEE,EAAE,OAAAH,GAAO,MAAAO,GAAM,OAAAD,EAAA;AACxB;"}
1
+ {"version":3,"file":"useFileDialog.mjs","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 * @usage low\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 if (!inputRef.current) return;\n inputRef.current.remove();\n };\n }, []);\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":";AAYA,MAAMA,IAAkB;AAAA,EACtB,UAAU;AAAA,EACV,QAAQ;AAAA,EACR,OAAO;AACT,GAgDaC,KAAiB,IAAIC,MAAkB;AAClD,QAAMC,IAAY,OAAOD,EAAO,CAAC,KAAM,aAAaA,EAAO,CAAC,IAAI,QAG1DE,IAAWD,IAAWD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAE1C,CAACG,GAAOC,CAAQ,IAAIC,EAA0B,IAAI,GAClDC,IAAWC,EAAgC,IAAI,GAC/CC,IAAsBD,EAAON,CAAQ;AAC3C,EAAAO,EAAoB,UAAUP;AAE9B,QAAMQ,IAAQ,MAAM;AAClB,IAAAL,EAAS,IAAI,GACbI,EAAoB,UAAU,IAAI,GAC9BF,EAAS,YAASA,EAAS,QAAQ,QAAQ;AAAA,EAAA,GAG3CI,IAAO,CAACC,MAAsC;AAClD,QAAI,CAACL,EAAS,QAAS;AAEvB,IAAAA,EAAS,QAAQ,WACfK,GAAY,YAAYT,GAAS,YAAYJ,EAAgB,UAC/DQ,EAAS,QAAQ,SAASK,GAAY,UAAUT,GAAS,UAAUJ,EAAgB;AAEnF,UAAMc,IAAUD,GAAY,WAAWT,GAAS;AAChD,IAAIU,MAASN,EAAS,QAAQ,UAAUM,KAEpCD,GAAY,SAAST,GAAS,SAASJ,EAAgB,UAAOW,EAAA,GAElEH,EAAS,QAAQ,MAAA;AAAA,EAAM;AAGzB,SAAAO,EAAU,MAAM;AACd,UAAMC,IAAO,MAAM;AACjB,YAAMC,IAAQ,SAAS,cAAc,OAAO;AAC5C,aAAAA,EAAM,OAAO,QAEbA,EAAM,WAAW,CAACC,MAAiB;AACjC,cAAM,EAAE,OAAAC,MAAUD,EAAM;AACxB,QAAAZ,EAASa,CAAK,GACdT,EAAoB,UAAUS,CAAK;AAAA,MAAA,GAE9BF;AAAA,IAAA;AAGT,WAAAT,EAAS,UAAUQ,EAAA,GACZ,MAAM;AACX,MAAKR,EAAS,WACdA,EAAS,QAAQ,OAAA;AAAA,IAAO;AAAA,EAC1B,GACC,EAAE,GAEE,EAAE,OAAAH,GAAO,MAAAO,GAAM,OAAAD,EAAA;AACxB;"}
@@ -1,35 +1,35 @@
1
- import { useState as R, useRef as F, useEffect as g } from "react";
1
+ import { useState as g, useRef as R, useEffect as m } from "react";
2
2
  import { useRefState as L } from "../useRefState/useRefState.mjs";
3
- import { isTarget as m } from "../../utils/helpers/isTarget.mjs";
4
- const S = (...e) => {
5
- const n = m(e[0]) ? e[0] : void 0, o = n ? typeof e[1] == "object" ? e[1] : { onFocus: e[1] } : typeof e[0] == "object" ? e[0] : { onFocus: e[0] }, l = o?.enabled ?? !0, b = o?.initialValue ?? !1, [d, u] = R(b), c = L(), f = F(o);
3
+ import { isTarget as l } from "../../utils/helpers/isTarget.mjs";
4
+ const B = ((...e) => {
5
+ const t = l(e[0]) ? e[0] : void 0, o = t ? typeof e[1] == "object" ? e[1] : { onFocus: e[1] } : typeof e[0] == "object" ? e[0] : { onFocus: e[0] }, b = o?.enabled ?? !0, d = o?.initialValue ?? !1, [a, u] = g(d), c = L(), f = R(o);
6
6
  f.current = o;
7
- const r = F(null), i = () => {
7
+ const r = R(null), i = () => {
8
8
  r.current && (r.current.focus(), u(!0));
9
- }, a = () => {
9
+ }, v = () => {
10
10
  r.current && (r.current.blur(), u(!1));
11
11
  };
12
- return g(() => {
13
- if (!l || !n && !c.state) return;
14
- const t = n ? m.getElement(n) : c.current;
15
- if (!t) return;
16
- r.current = t;
17
- const v = (s) => {
12
+ return m(() => {
13
+ if (!b || !t && !c.state) return;
14
+ const n = t ? l.getElement(t) : c.current;
15
+ if (!n) return;
16
+ r.current = n;
17
+ const E = (s) => {
18
18
  f.current?.onFocus?.(s), (!i || s.target.matches?.(":focus-visible")) && u(!0);
19
- }, E = (s) => {
19
+ }, F = (s) => {
20
20
  f.current?.onBlur?.(s), u(!1);
21
21
  };
22
- return b && t.focus(), t.addEventListener("focus", v), t.addEventListener("blur", E), () => {
23
- t.removeEventListener("focus", v), t.removeEventListener("blur", E);
22
+ return d && n.focus(), n.addEventListener("focus", E), n.addEventListener("blur", F), () => {
23
+ n.removeEventListener("focus", E), n.removeEventListener("blur", F);
24
24
  };
25
- }, [n, c.state, l]), n ? { focus: i, blur: a, focused: d } : {
25
+ }, [t, c.state, b, l.getRefState(t)]), t ? { focus: i, blur: v, focused: a } : {
26
26
  ref: c,
27
27
  focus: i,
28
- blur: a,
29
- focused: d
28
+ blur: v,
29
+ focused: a
30
30
  };
31
- };
31
+ });
32
32
  export {
33
- S as useFocus
33
+ B as useFocus
34
34
  };
35
35
  //# sourceMappingURL=useFocus.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFocus.mjs","sources":["../../../../src/hooks/useFocus/useFocus.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use focus options type */\nexport interface UseFocusOptions {\n /** The enabled state of the focus hook */\n enabled?: boolean;\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, callback?: (event: FocusEvent) => void): UseFocusReturn;\n\n (target: HookTarget, options?: UseFocusOptions): UseFocusReturn;\n\n <Target extends Element>(\n callback?: (event: FocusEvent) => void,\n target?: never\n ): UseFocusReturn & { ref: StateRef<Target> };\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 * @usage medium\n *\n * @overload\n * @param {HookTarget} target The target element to focus\n * @param {(event: FocusEvent) => void} [callback] The callback function to be invoked on focus\n * @returns {UseFocusReturn} An object with focus state and methods\n *\n * @example\n * const { focus, blur, focused } = useFocus(ref, () => console.log('focused'));\n *\n * @overload\n * @param {HookTarget} target The target element to focus\n * @param {boolean} [options.enabled=true] The enabled state of the focus hook\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 {(event: FocusEvent) => void} [callback] The callback function to be invoked on focus\n * @returns {UseFocusReturn & { ref: StateRef<Target> }} An object with focus state, methods and ref\n *\n * @example\n * const { ref, focus, blur, focused } = useFocus(() => console.log('focused'));\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.enabled=true] The enabled state of the focus hook\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\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onFocus: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onFocus: params[0] }\n ) as UseFocusOptions | undefined;\n const enabled = options?.enabled ?? true;\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 = () => {\n if (!elementRef.current) return;\n elementRef.current.focus();\n setFocused(true);\n };\n\n const blur = () => {\n if (!elementRef.current) return;\n elementRef.current.blur();\n setFocused(false);\n };\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n const element = (target ? isTarget.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, enabled]);\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","enabled","initialValue","focused","setFocused","useState","internalRef","useRefState","internalOptionsRef","useRef","elementRef","focus","blur","useEffect","element","onFocus","event","onBlur"],"mappings":";;;AA4FO,MAAMA,IAAY,IAAIC,MAAkB;AAC7C,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAE5CG,IACJF,IACI,OAAOD,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,SAASA,EAAO,CAAC,EAAA,IACrB,OAAOA,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,SAASA,EAAO,CAAC,EAAA,GAErBI,IAAUD,GAAS,WAAW,IAC9BE,IAAeF,GAAS,gBAAgB,IAExC,CAACG,GAASC,CAAU,IAAIC,EAASH,CAAY,GAC7CI,IAAcC,EAAA,GACdC,IAAqBC,EAAOT,CAAO;AACzC,EAAAQ,EAAmB,UAAUR;AAE7B,QAAMU,IAAaD,EAA2B,IAAI,GAE5CE,IAAQ,MAAM;AAClB,IAAKD,EAAW,YAChBA,EAAW,QAAQ,MAAA,GACnBN,EAAW,EAAI;AAAA,EAAA,GAGXQ,IAAO,MAAM;AACjB,IAAKF,EAAW,YAChBA,EAAW,QAAQ,KAAA,GACnBN,EAAW,EAAK;AAAA,EAAA;AA+BlB,SA5BAS,EAAU,MAAM;AACd,QAAI,CAACZ,KAAY,CAACH,KAAU,CAACQ,EAAY,MAAQ;AACjD,UAAMQ,IAAWhB,IAASC,EAAS,WAAWD,CAAM,IAAIQ,EAAY;AACpE,QAAI,CAACQ,EAAS;AAEd,IAAAJ,EAAW,UAAUI;AAErB,UAAMC,IAAU,CAACC,MAAsB;AACrC,MAAAR,EAAmB,SAAS,UAAUQ,CAAK,IACvC,CAACL,KAAUK,EAAM,OAAuB,UAAU,gBAAgB,QAAc,EAAI;AAAA,IAAA,GAGpFC,IAAS,CAACD,MAAsB;AACpC,MAAAR,EAAmB,SAAS,SAASQ,CAAK,GAC1CZ,EAAW,EAAK;AAAA,IAAA;AAGlB,WAAIF,OAAsB,MAAA,GAE1BY,EAAQ,iBAAiB,SAASC,CAAO,GACzCD,EAAQ,iBAAiB,QAAQG,CAAM,GAEhC,MAAM;AACX,MAAAH,EAAQ,oBAAoB,SAASC,CAAO,GAC5CD,EAAQ,oBAAoB,QAAQG,CAAM;AAAA,IAAA;AAAA,EAC5C,GACC,CAACnB,GAAQQ,EAAY,OAAOL,CAAO,CAAC,GAEnCH,IAAe,EAAE,OAAAa,GAAO,MAAAC,GAAM,SAAAT,EAAA,IAC3B;AAAA,IACL,KAAKG;AAAA,IACL,OAAAK;AAAA,IACA,MAAAC;AAAA,IACA,SAAAT;AAAA,EAAA;AAEJ;"}
1
+ {"version":3,"file":"useFocus.mjs","sources":["../../../../src/hooks/useFocus/useFocus.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useRefState } from '../useRefState/useRefState';\n\n/** The use focus options type */\nexport interface UseFocusOptions {\n /** The enabled state of the focus hook */\n enabled?: boolean;\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, callback?: (event: FocusEvent) => void): UseFocusReturn;\n\n (target: HookTarget, options?: UseFocusOptions): UseFocusReturn;\n\n <Target extends Element>(\n callback?: (event: FocusEvent) => void,\n target?: never\n ): UseFocusReturn & { ref: StateRef<Target> };\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 * @usage medium\n *\n * @overload\n * @param {HookTarget} target The target element to focus\n * @param {(event: FocusEvent) => void} [callback] The callback function to be invoked on focus\n * @returns {UseFocusReturn} An object with focus state and methods\n *\n * @example\n * const { focus, blur, focused } = useFocus(ref, () => console.log('focused'));\n *\n * @overload\n * @param {HookTarget} target The target element to focus\n * @param {boolean} [options.enabled=true] The enabled state of the focus hook\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 {(event: FocusEvent) => void} [callback] The callback function to be invoked on focus\n * @returns {UseFocusReturn & { ref: StateRef<Target> }} An object with focus state, methods and ref\n *\n * @example\n * const { ref, focus, blur, focused } = useFocus(() => console.log('focused'));\n *\n * @overload\n * @template Target The target element\n * @param {boolean} [options.enabled=true] The enabled state of the focus hook\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\n const options = (\n target\n ? typeof params[1] === 'object'\n ? params[1]\n : { onFocus: params[1] }\n : typeof params[0] === 'object'\n ? params[0]\n : { onFocus: params[0] }\n ) as UseFocusOptions | undefined;\n const enabled = options?.enabled ?? true;\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 = () => {\n if (!elementRef.current) return;\n elementRef.current.focus();\n setFocused(true);\n };\n\n const blur = () => {\n if (!elementRef.current) return;\n elementRef.current.blur();\n setFocused(false);\n };\n\n useEffect(() => {\n if (!enabled || (!target && !internalRef.state)) return;\n const element = (target ? isTarget.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, enabled, isTarget.getRefState(target)]);\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","enabled","initialValue","focused","setFocused","useState","internalRef","useRefState","internalOptionsRef","useRef","elementRef","focus","blur","useEffect","element","onFocus","event","onBlur"],"mappings":";;;AA4FO,MAAMA,KAAY,IAAIC,MAAkB;AAC7C,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAE5CG,IACJF,IACI,OAAOD,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,SAASA,EAAO,CAAC,EAAA,IACrB,OAAOA,EAAO,CAAC,KAAM,WACnBA,EAAO,CAAC,IACR,EAAE,SAASA,EAAO,CAAC,EAAA,GAErBI,IAAUD,GAAS,WAAW,IAC9BE,IAAeF,GAAS,gBAAgB,IAExC,CAACG,GAASC,CAAU,IAAIC,EAASH,CAAY,GAC7CI,IAAcC,EAAA,GACdC,IAAqBC,EAAOT,CAAO;AACzC,EAAAQ,EAAmB,UAAUR;AAE7B,QAAMU,IAAaD,EAA2B,IAAI,GAE5CE,IAAQ,MAAM;AAClB,IAAKD,EAAW,YAChBA,EAAW,QAAQ,MAAA,GACnBN,EAAW,EAAI;AAAA,EAAA,GAGXQ,IAAO,MAAM;AACjB,IAAKF,EAAW,YAChBA,EAAW,QAAQ,KAAA,GACnBN,EAAW,EAAK;AAAA,EAAA;AA+BlB,SA5BAS,EAAU,MAAM;AACd,QAAI,CAACZ,KAAY,CAACH,KAAU,CAACQ,EAAY,MAAQ;AACjD,UAAMQ,IAAWhB,IAASC,EAAS,WAAWD,CAAM,IAAIQ,EAAY;AACpE,QAAI,CAACQ,EAAS;AAEd,IAAAJ,EAAW,UAAUI;AAErB,UAAMC,IAAU,CAACC,MAAsB;AACrC,MAAAR,EAAmB,SAAS,UAAUQ,CAAK,IACvC,CAACL,KAAUK,EAAM,OAAuB,UAAU,gBAAgB,QAAc,EAAI;AAAA,IAAA,GAGpFC,IAAS,CAACD,MAAsB;AACpC,MAAAR,EAAmB,SAAS,SAASQ,CAAK,GAC1CZ,EAAW,EAAK;AAAA,IAAA;AAGlB,WAAIF,OAAsB,MAAA,GAE1BY,EAAQ,iBAAiB,SAASC,CAAO,GACzCD,EAAQ,iBAAiB,QAAQG,CAAM,GAEhC,MAAM;AACX,MAAAH,EAAQ,oBAAoB,SAASC,CAAO,GAC5CD,EAAQ,oBAAoB,QAAQG,CAAM;AAAA,IAAA;AAAA,EAC5C,GACC,CAACnB,GAAQQ,EAAY,OAAOL,GAASF,EAAS,YAAYD,CAAM,CAAC,CAAC,GAEjEA,IAAe,EAAE,OAAAa,GAAO,MAAAC,GAAM,SAAAT,EAAA,IAC3B;AAAA,IACL,KAAKG;AAAA,IACL,OAAAK;AAAA,IACA,MAAAC;AAAA,IACA,SAAAT;AAAA,EAAA;AAEJ;"}
@@ -1,37 +1,37 @@
1
1
  import { useState as p } from "react";
2
2
  import { useIsomorphicLayoutEffect as v } from "../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect.mjs";
3
3
  import { useRefState as h } from "../useRefState/useRefState.mjs";
4
- import { isTarget as b } from "../../utils/helpers/isTarget.mjs";
5
- const S = "a, input, select, textarea, button, object, [tabindex]", g = (e) => Array.from(e.querySelectorAll(S)).filter((o) => {
4
+ import { isTarget as l } from "../../utils/helpers/isTarget.mjs";
5
+ const S = "a, input, select, textarea, button, object, [tabindex]", g = (t) => Array.from(t.querySelectorAll(S)).filter((o) => {
6
6
  const n = o;
7
7
  return n.tabIndex !== -1 && !n.hidden && n.style.display !== "none";
8
- }), x = (e) => {
9
- const t = e.querySelector("[data-autofocus]");
10
- if (t) return t.focus();
11
- const o = g(e);
8
+ }), x = (t) => {
9
+ const e = t.querySelector("[data-autofocus]");
10
+ if (e) return e.focus();
11
+ const o = g(t);
12
12
  o.length && o[0].focus();
13
- }, w = (...e) => {
14
- const t = b(e[0]) ? e[0] : void 0, o = t ? e[1] : e[0], [n, c] = p(o), u = h(), l = () => c(!0), i = () => c(!1), f = () => c((r) => !r);
13
+ }, k = ((...t) => {
14
+ const e = l(t[0]) ? t[0] : void 0, o = e ? t[1] : t[0], [n, c] = p(o), u = h(), i = () => c(!0), f = () => c(!1), a = () => c((r) => !r);
15
15
  return v(() => {
16
16
  if (!n) return;
17
- const r = t ? b.getElement(t) : u.current;
17
+ const r = e ? l.getElement(e) : u.current;
18
18
  if (!r) return;
19
- const a = r;
20
- x(a);
21
- const m = (s) => {
19
+ const m = r;
20
+ x(m);
21
+ const E = (s) => {
22
22
  if (s.key !== "Tab") return;
23
- const [E, ...d] = g(a);
24
- if (!d.length) return;
25
- const y = d.at(-1);
26
- s.shiftKey && document.activeElement === E && (s.preventDefault(), y.focus()), document.activeElement === y && (s.preventDefault(), E.focus());
23
+ const [d, ...y] = g(m);
24
+ if (!y.length) return;
25
+ const b = y.at(-1);
26
+ s.shiftKey && document.activeElement === d && (s.preventDefault(), b.focus()), document.activeElement === b && (s.preventDefault(), d.focus());
27
27
  };
28
- return document.addEventListener("keydown", m), () => {
29
- document.removeEventListener("keydown", m);
28
+ return document.addEventListener("keydown", E), () => {
29
+ document.removeEventListener("keydown", E);
30
30
  };
31
- }, [n, t, u.state]), t ? { active: n, enable: l, disable: i, toggle: f } : { active: n, enable: l, disable: i, toggle: f, ref: u };
32
- };
31
+ }, [n, e, u.state, l.getRefState(e)]), e ? { active: n, enable: i, disable: f, toggle: a } : { active: n, enable: i, disable: f, toggle: a, ref: u };
32
+ });
33
33
  export {
34
34
  S as FOCUS_SELECTOR,
35
- w as useFocusTrap
35
+ k as useFocusTrap
36
36
  };
37
37
  //# sourceMappingURL=useFocusTrap.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useFocusTrap.mjs","sources":["../../../../src/hooks/useFocusTrap/useFocusTrap.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect';\nimport { useRefState } from '../useRefState/useRefState';\n\nexport const FOCUS_SELECTOR = 'a, input, select, textarea, button, object, [tabindex]';\n\nconst getFocusableElements = (element: HTMLElement) => {\n const elements = Array.from(element.querySelectorAll(FOCUS_SELECTOR));\n return elements.filter((element) => {\n const htmlEl = element as HTMLElement;\n return htmlEl.tabIndex !== -1 && !htmlEl.hidden && htmlEl.style.display !== 'none';\n }) as HTMLElement[];\n};\n\nconst focusElement = (element: HTMLElement) => {\n const autofocusElement = element.querySelector('[data-autofocus]') as HTMLElement;\n if (autofocusElement) return autofocusElement.focus();\n const focusableElements = getFocusableElements(element);\n if (focusableElements.length) focusableElements[0].focus();\n};\n\n/** The use focus trap return type */\nexport interface UseFocusTrapReturn {\n /** Whether focus trap is active */\n active: boolean;\n /** Disable focus trap */\n disable: () => void;\n /** Enable focus trap */\n enable: () => void;\n /** Toggle focus trap */\n toggle: () => void;\n}\n\nexport interface UseFocusTrap {\n (target: HookTarget, active?: boolean): UseFocusTrapReturn;\n\n <Target extends HTMLElement>(\n active?: boolean,\n target?: never\n ): UseFocusTrapReturn & {\n ref: StateRef<Target>;\n };\n}\n\n/**\n * @name useFocusTrap\n * @description - Hook that traps focus within a given element\n * @category Elements\n * @usage medium\n *\n * @overload\n * @param {HookTarget} target The target element for focus trap\n * @param {boolean} [active=true] Whether focus trap is active\n * @returns {UseFocusTrapReturn} Object with control methods and state\n *\n * @example\n * const { active, disable, toggle, enable } = useFocusTrap(ref, true);\n *\n * @overload\n * @template Target The target element type\n * @param {boolean} [active=true] Whether focus trap is active\n * @returns {UseFocusTrapReturn & { ref: StateRef<Target> }} Object with ref and controls\n *\n * @example\n * const { ref, active, disable, toggle, enable } = useFocusTrap(true);\n */\nexport const useFocusTrap = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const initialActive = target ? params[1] : params[0];\n\n const [active, setActive] = useState(initialActive);\n const internalRef = useRefState<HTMLElement>();\n\n const enable = () => setActive(true);\n const disable = () => setActive(false);\n const toggle = () => setActive((prevActive: boolean) => !prevActive);\n\n useIsomorphicLayoutEffect(() => {\n if (!active) return;\n\n const element = target ? isTarget.getElement(target) : internalRef.current;\n if (!element) return;\n\n const htmlElement = element as HTMLElement;\n focusElement(htmlElement);\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n const [firstElement, ...restElements] = getFocusableElements(htmlElement);\n if (!restElements.length) return;\n\n const lastElement = restElements.at(-1)!;\n\n if (event.shiftKey && document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [active, target, internalRef.state]);\n\n if (target) return { active, enable, disable, toggle };\n return { active, enable, disable, toggle, ref: internalRef };\n}) as UseFocusTrap;\n"],"names":["FOCUS_SELECTOR","getFocusableElements","element","htmlEl","focusElement","autofocusElement","focusableElements","useFocusTrap","params","target","isTarget","initialActive","active","setActive","useState","internalRef","useRefState","enable","disable","toggle","prevActive","useIsomorphicLayoutEffect","htmlElement","onKeyDown","event","firstElement","restElements","lastElement"],"mappings":";;;;AAWO,MAAMA,IAAiB,0DAExBC,IAAuB,CAACC,MACX,MAAM,KAAKA,EAAQ,iBAAiBF,CAAc,CAAC,EACpD,OAAO,CAACE,MAAY;AAClC,QAAMC,IAASD;AACf,SAAOC,EAAO,aAAa,MAAM,CAACA,EAAO,UAAUA,EAAO,MAAM,YAAY;AAAA,CAC7E,GAGGC,IAAe,CAACF,MAAyB;AAC7C,QAAMG,IAAmBH,EAAQ,cAAc,kBAAkB;AACjE,MAAIG,EAAkB,QAAOA,EAAiB,MAAA;AAC9C,QAAMC,IAAoBL,EAAqBC,CAAO;AACtD,EAAII,EAAkB,UAAQA,EAAkB,CAAC,EAAE,MAAA;AACrD,GA+CaC,IAAgB,IAAIC,MAAkB;AACjD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAgBF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAE7C,CAACI,GAAQC,CAAS,IAAIC,EAASH,CAAa,GAC5CI,IAAcC,EAAA,GAEdC,IAAS,MAAMJ,EAAU,EAAI,GAC7BK,IAAU,MAAML,EAAU,EAAK,GAC/BM,IAAS,MAAMN,EAAU,CAACO,MAAwB,CAACA,CAAU;AAqCnE,SAnCAC,EAA0B,MAAM;AAC9B,QAAI,CAACT,EAAQ;AAEb,UAAMV,IAAUO,IAASC,EAAS,WAAWD,CAAM,IAAIM,EAAY;AACnE,QAAI,CAACb,EAAS;AAEd,UAAMoB,IAAcpB;AACpB,IAAAE,EAAakB,CAAW;AAExB,UAAMC,IAAY,CAACC,MAAyB;AAC1C,UAAIA,EAAM,QAAQ,MAAO;AAEzB,YAAM,CAACC,GAAc,GAAGC,CAAY,IAAIzB,EAAqBqB,CAAW;AACxE,UAAI,CAACI,EAAa,OAAQ;AAE1B,YAAMC,IAAcD,EAAa,GAAG,EAAE;AAEtC,MAAIF,EAAM,YAAY,SAAS,kBAAkBC,MAC/CD,EAAM,eAAA,GACNG,EAAY,MAAA,IAGV,SAAS,kBAAkBA,MAC7BH,EAAM,eAAA,GACNC,EAAa,MAAA;AAAA,IACf;AAGF,oBAAS,iBAAiB,WAAWF,CAAS,GAEvC,MAAM;AACX,eAAS,oBAAoB,WAAWA,CAAS;AAAA,IAAA;AAAA,EACnD,GACC,CAACX,GAAQH,GAAQM,EAAY,KAAK,CAAC,GAElCN,IAAe,EAAE,QAAAG,GAAQ,QAAAK,GAAQ,SAAAC,GAAS,QAAAC,EAAA,IACvC,EAAE,QAAAP,GAAQ,QAAAK,GAAQ,SAAAC,GAAS,QAAAC,GAAQ,KAAKJ,EAAA;AACjD;"}
1
+ {"version":3,"file":"useFocusTrap.mjs","sources":["../../../../src/hooks/useFocusTrap/useFocusTrap.ts"],"sourcesContent":["import { useState } from 'react';\n\nimport type { HookTarget } from '@/utils/helpers';\n\nimport { isTarget } from '@/utils/helpers';\n\nimport type { StateRef } from '../useRefState/useRefState';\n\nimport { useIsomorphicLayoutEffect } from '../useIsomorphicLayoutEffect/useIsomorphicLayoutEffect';\nimport { useRefState } from '../useRefState/useRefState';\n\nexport const FOCUS_SELECTOR = 'a, input, select, textarea, button, object, [tabindex]';\n\nconst getFocusableElements = (element: HTMLElement) => {\n const elements = Array.from(element.querySelectorAll(FOCUS_SELECTOR));\n return elements.filter((element) => {\n const htmlEl = element as HTMLElement;\n return htmlEl.tabIndex !== -1 && !htmlEl.hidden && htmlEl.style.display !== 'none';\n }) as HTMLElement[];\n};\n\nconst focusElement = (element: HTMLElement) => {\n const autofocusElement = element.querySelector('[data-autofocus]') as HTMLElement;\n if (autofocusElement) return autofocusElement.focus();\n const focusableElements = getFocusableElements(element);\n if (focusableElements.length) focusableElements[0].focus();\n};\n\n/** The use focus trap return type */\nexport interface UseFocusTrapReturn {\n /** Whether focus trap is active */\n active: boolean;\n /** Disable focus trap */\n disable: () => void;\n /** Enable focus trap */\n enable: () => void;\n /** Toggle focus trap */\n toggle: () => void;\n}\n\nexport interface UseFocusTrap {\n (target: HookTarget, active?: boolean): UseFocusTrapReturn;\n\n <Target extends HTMLElement>(\n active?: boolean,\n target?: never\n ): UseFocusTrapReturn & {\n ref: StateRef<Target>;\n };\n}\n\n/**\n * @name useFocusTrap\n * @description - Hook that traps focus within a given element\n * @category Elements\n * @usage medium\n *\n * @overload\n * @param {HookTarget} target The target element for focus trap\n * @param {boolean} [active=true] Whether focus trap is active\n * @returns {UseFocusTrapReturn} Object with control methods and state\n *\n * @example\n * const { active, disable, toggle, enable } = useFocusTrap(ref, true);\n *\n * @overload\n * @template Target The target element type\n * @param {boolean} [active=true] Whether focus trap is active\n * @returns {UseFocusTrapReturn & { ref: StateRef<Target> }} Object with ref and controls\n *\n * @example\n * const { ref, active, disable, toggle, enable } = useFocusTrap(true);\n */\nexport const useFocusTrap = ((...params: any[]) => {\n const target = (isTarget(params[0]) ? params[0] : undefined) as HookTarget | undefined;\n const initialActive = target ? params[1] : params[0];\n\n const [active, setActive] = useState(initialActive);\n const internalRef = useRefState<HTMLElement>();\n\n const enable = () => setActive(true);\n const disable = () => setActive(false);\n const toggle = () => setActive((prevActive: boolean) => !prevActive);\n\n useIsomorphicLayoutEffect(() => {\n if (!active) return;\n\n const element = target ? isTarget.getElement(target) : internalRef.current;\n if (!element) return;\n\n const htmlElement = element as HTMLElement;\n focusElement(htmlElement);\n\n const onKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab') return;\n\n const [firstElement, ...restElements] = getFocusableElements(htmlElement);\n if (!restElements.length) return;\n\n const lastElement = restElements.at(-1)!;\n\n if (event.shiftKey && document.activeElement === firstElement) {\n event.preventDefault();\n lastElement.focus();\n }\n\n if (document.activeElement === lastElement) {\n event.preventDefault();\n firstElement.focus();\n }\n };\n\n document.addEventListener('keydown', onKeyDown);\n\n return () => {\n document.removeEventListener('keydown', onKeyDown);\n };\n }, [active, target, internalRef.state, isTarget.getRefState(target)]);\n\n if (target) return { active, enable, disable, toggle };\n return { active, enable, disable, toggle, ref: internalRef };\n}) as UseFocusTrap;\n"],"names":["FOCUS_SELECTOR","getFocusableElements","element","htmlEl","focusElement","autofocusElement","focusableElements","useFocusTrap","params","target","isTarget","initialActive","active","setActive","useState","internalRef","useRefState","enable","disable","toggle","prevActive","useIsomorphicLayoutEffect","htmlElement","onKeyDown","event","firstElement","restElements","lastElement"],"mappings":";;;;AAWO,MAAMA,IAAiB,0DAExBC,IAAuB,CAACC,MACX,MAAM,KAAKA,EAAQ,iBAAiBF,CAAc,CAAC,EACpD,OAAO,CAACE,MAAY;AAClC,QAAMC,IAASD;AACf,SAAOC,EAAO,aAAa,MAAM,CAACA,EAAO,UAAUA,EAAO,MAAM,YAAY;AAAA,CAC7E,GAGGC,IAAe,CAACF,MAAyB;AAC7C,QAAMG,IAAmBH,EAAQ,cAAc,kBAAkB;AACjE,MAAIG,EAAkB,QAAOA,EAAiB,MAAA;AAC9C,QAAMC,IAAoBL,EAAqBC,CAAO;AACtD,EAAII,EAAkB,UAAQA,EAAkB,CAAC,EAAE,MAAA;AACrD,GA+CaC,KAAgB,IAAIC,MAAkB;AACjD,QAAMC,IAAUC,EAASF,EAAO,CAAC,CAAC,IAAIA,EAAO,CAAC,IAAI,QAC5CG,IAAgBF,IAASD,EAAO,CAAC,IAAIA,EAAO,CAAC,GAE7C,CAACI,GAAQC,CAAS,IAAIC,EAASH,CAAa,GAC5CI,IAAcC,EAAA,GAEdC,IAAS,MAAMJ,EAAU,EAAI,GAC7BK,IAAU,MAAML,EAAU,EAAK,GAC/BM,IAAS,MAAMN,EAAU,CAACO,MAAwB,CAACA,CAAU;AAqCnE,SAnCAC,EAA0B,MAAM;AAC9B,QAAI,CAACT,EAAQ;AAEb,UAAMV,IAAUO,IAASC,EAAS,WAAWD,CAAM,IAAIM,EAAY;AACnE,QAAI,CAACb,EAAS;AAEd,UAAMoB,IAAcpB;AACpB,IAAAE,EAAakB,CAAW;AAExB,UAAMC,IAAY,CAACC,MAAyB;AAC1C,UAAIA,EAAM,QAAQ,MAAO;AAEzB,YAAM,CAACC,GAAc,GAAGC,CAAY,IAAIzB,EAAqBqB,CAAW;AACxE,UAAI,CAACI,EAAa,OAAQ;AAE1B,YAAMC,IAAcD,EAAa,GAAG,EAAE;AAEtC,MAAIF,EAAM,YAAY,SAAS,kBAAkBC,MAC/CD,EAAM,eAAA,GACNG,EAAY,MAAA,IAGV,SAAS,kBAAkBA,MAC7BH,EAAM,eAAA,GACNC,EAAa,MAAA;AAAA,IACf;AAGF,oBAAS,iBAAiB,WAAWF,CAAS,GAEvC,MAAM;AACX,eAAS,oBAAoB,WAAWA,CAAS;AAAA,IAAA;AAAA,EACnD,GACC,CAACX,GAAQH,GAAQM,EAAY,OAAOL,EAAS,YAAYD,CAAM,CAAC,CAAC,GAEhEA,IAAe,EAAE,QAAAG,GAAQ,QAAAK,GAAQ,SAAAC,GAAS,QAAAC,EAAA,IACvC,EAAE,QAAAP,GAAQ,QAAAK,GAAQ,SAAAC,GAAS,QAAAC,GAAQ,KAAKJ,EAAA;AACjD;"}
@@ -2,7 +2,7 @@ import { useState as m, useEffect as d } from "react";
2
2
  import e from "screenfull";
3
3
  import { useRefState as h } from "../useRefState/useRefState.mjs";
4
4
  import { isTarget as a } from "../../utils/helpers/isTarget.mjs";
5
- const v = (...t) => {
5
+ const v = ((...t) => {
6
6
  const n = a(t[0]) ? t[0] : void 0, r = n ? t[1] : t[0], [o, g] = m(r?.initialValue ?? !1), l = h(), i = () => {
7
7
  e.isEnabled && (e.isFullscreen ? r?.onEnter?.() : (e.off("change", i), r?.onExit?.()), g(e.isFullscreen));
8
8
  }, s = () => {
@@ -36,7 +36,7 @@ const v = (...t) => {
36
36
  toggle: c,
37
37
  value: o
38
38
  };
39
- };
39
+ });
40
40
  export {
41
41
  v as useFullscreen
42
42
  };