@mantine/hooks 7.0.0 → 7.0.1-alpha.1

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 (235) hide show
  1. package/cjs/use-debounced-state/use-debounced-state.js +14 -11
  2. package/cjs/use-debounced-state/use-debounced-state.js.map +1 -1
  3. package/cjs/use-local-storage/create-storage.js +32 -4
  4. package/cjs/use-local-storage/create-storage.js.map +1 -1
  5. package/cjs/use-local-storage/use-local-storage.js.map +1 -1
  6. package/cjs/use-session-storage/use-session-storage.js.map +1 -1
  7. package/esm/index.mjs +66 -0
  8. package/esm/index.mjs.map +1 -0
  9. package/esm/use-callback-ref/{use-callback-ref.js → use-callback-ref.mjs} +1 -1
  10. package/esm/use-callback-ref/use-callback-ref.mjs.map +1 -0
  11. package/esm/use-click-outside/{use-click-outside.js → use-click-outside.mjs} +1 -1
  12. package/esm/use-click-outside/use-click-outside.mjs.map +1 -0
  13. package/esm/use-clipboard/{use-clipboard.js → use-clipboard.mjs} +1 -1
  14. package/esm/use-clipboard/use-clipboard.mjs.map +1 -0
  15. package/esm/use-color-scheme/{use-color-scheme.js → use-color-scheme.mjs} +2 -2
  16. package/esm/use-color-scheme/use-color-scheme.mjs.map +1 -0
  17. package/esm/use-counter/{use-counter.js → use-counter.mjs} +2 -2
  18. package/esm/use-counter/use-counter.mjs.map +1 -0
  19. package/esm/use-debounced-callback/{use-debounced-callback.js → use-debounced-callback.mjs} +2 -2
  20. package/esm/use-debounced-callback/use-debounced-callback.mjs.map +1 -0
  21. package/esm/use-debounced-state/use-debounced-state.mjs +28 -0
  22. package/esm/use-debounced-state/use-debounced-state.mjs.map +1 -0
  23. package/esm/use-debounced-value/{use-debounced-value.js → use-debounced-value.mjs} +1 -1
  24. package/esm/use-debounced-value/use-debounced-value.mjs.map +1 -0
  25. package/esm/use-did-update/{use-did-update.js → use-did-update.mjs} +1 -1
  26. package/esm/use-did-update/use-did-update.mjs.map +1 -0
  27. package/esm/use-disclosure/{use-disclosure.js → use-disclosure.mjs} +1 -1
  28. package/esm/use-disclosure/use-disclosure.mjs.map +1 -0
  29. package/esm/use-document-title/{use-document-title.js → use-document-title.mjs} +2 -2
  30. package/esm/use-document-title/use-document-title.mjs.map +1 -0
  31. package/esm/use-document-visibility/{use-document-visibility.js → use-document-visibility.mjs} +1 -1
  32. package/esm/use-document-visibility/use-document-visibility.mjs.map +1 -0
  33. package/esm/use-event-listener/{use-event-listener.js → use-event-listener.mjs} +1 -1
  34. package/esm/use-event-listener/use-event-listener.mjs.map +1 -0
  35. package/esm/use-eye-dropper/{use-eye-dropper.js → use-eye-dropper.mjs} +2 -2
  36. package/esm/use-eye-dropper/use-eye-dropper.mjs.map +1 -0
  37. package/esm/use-favicon/{use-favicon.js → use-favicon.mjs} +2 -2
  38. package/esm/use-favicon/use-favicon.mjs.map +1 -0
  39. package/esm/use-focus-return/{use-focus-return.js → use-focus-return.mjs} +2 -2
  40. package/esm/use-focus-return/use-focus-return.mjs.map +1 -0
  41. package/esm/use-focus-trap/{create-aria-hider.js → create-aria-hider.mjs} +2 -2
  42. package/esm/use-focus-trap/create-aria-hider.mjs.map +1 -0
  43. package/esm/use-focus-trap/{scope-tab.js → scope-tab.mjs} +2 -2
  44. package/esm/use-focus-trap/scope-tab.mjs.map +1 -0
  45. package/esm/use-focus-trap/{tabbable.js → tabbable.mjs} +1 -1
  46. package/esm/use-focus-trap/tabbable.mjs.map +1 -0
  47. package/esm/use-focus-trap/{use-focus-trap.js → use-focus-trap.mjs} +4 -4
  48. package/esm/use-focus-trap/use-focus-trap.mjs.map +1 -0
  49. package/esm/use-focus-within/{use-focus-within.js → use-focus-within.mjs} +1 -1
  50. package/esm/use-focus-within/use-focus-within.mjs.map +1 -0
  51. package/esm/use-force-update/{use-force-update.js → use-force-update.mjs} +1 -1
  52. package/esm/use-force-update/use-force-update.mjs.map +1 -0
  53. package/esm/use-fullscreen/{use-fullscreen.js → use-fullscreen.mjs} +1 -1
  54. package/esm/use-fullscreen/use-fullscreen.mjs.map +1 -0
  55. package/esm/use-hash/{use-hash.js → use-hash.mjs} +2 -2
  56. package/esm/use-hash/use-hash.mjs.map +1 -0
  57. package/esm/use-headroom/{use-headroom.js → use-headroom.mjs} +3 -3
  58. package/esm/use-headroom/use-headroom.mjs.map +1 -0
  59. package/esm/use-hotkeys/{parse-hotkey.js → parse-hotkey.mjs} +1 -1
  60. package/esm/use-hotkeys/parse-hotkey.mjs.map +1 -0
  61. package/esm/use-hotkeys/{use-hotkeys.js → use-hotkeys.mjs} +3 -3
  62. package/esm/use-hotkeys/use-hotkeys.mjs.map +1 -0
  63. package/esm/use-hover/{use-hover.js → use-hover.mjs} +1 -1
  64. package/esm/use-hover/use-hover.mjs.map +1 -0
  65. package/esm/use-id/{use-id.js → use-id.mjs} +4 -4
  66. package/esm/use-id/use-id.mjs.map +1 -0
  67. package/esm/use-id/{use-react-id.js → use-react-id.mjs} +1 -1
  68. package/esm/use-id/use-react-id.mjs.map +1 -0
  69. package/esm/use-idle/{use-idle.js → use-idle.mjs} +1 -1
  70. package/esm/use-idle/use-idle.mjs.map +1 -0
  71. package/esm/use-input-state/{use-input-state.js → use-input-state.mjs} +1 -1
  72. package/esm/use-input-state/use-input-state.mjs.map +1 -0
  73. package/esm/use-intersection/{use-intersection.js → use-intersection.mjs} +1 -1
  74. package/esm/use-intersection/use-intersection.mjs.map +1 -0
  75. package/esm/use-interval/{use-interval.js → use-interval.mjs} +1 -1
  76. package/esm/use-interval/use-interval.mjs.map +1 -0
  77. package/esm/use-isomorphic-effect/{use-isomorphic-effect.js → use-isomorphic-effect.mjs} +1 -1
  78. package/esm/use-isomorphic-effect/use-isomorphic-effect.mjs.map +1 -0
  79. package/esm/use-list-state/{use-list-state.js → use-list-state.mjs} +1 -1
  80. package/esm/use-list-state/use-list-state.mjs.map +1 -0
  81. package/esm/use-local-storage/{create-storage.js → create-storage.mjs} +34 -6
  82. package/esm/use-local-storage/create-storage.mjs.map +1 -0
  83. package/esm/use-local-storage/{use-local-storage.js → use-local-storage.mjs} +2 -2
  84. package/esm/use-local-storage/use-local-storage.mjs.map +1 -0
  85. package/esm/use-logger/{use-logger.js → use-logger.mjs} +2 -2
  86. package/esm/use-logger/use-logger.mjs.map +1 -0
  87. package/esm/use-media-query/{use-media-query.js → use-media-query.mjs} +1 -1
  88. package/esm/use-media-query/use-media-query.mjs.map +1 -0
  89. package/esm/use-merged-ref/{use-merged-ref.js → use-merged-ref.mjs} +1 -1
  90. package/esm/use-merged-ref/use-merged-ref.mjs.map +1 -0
  91. package/esm/use-mouse/{use-mouse.js → use-mouse.mjs} +1 -1
  92. package/esm/use-mouse/use-mouse.mjs.map +1 -0
  93. package/esm/use-move/{use-move.js → use-move.mjs} +2 -2
  94. package/esm/use-move/use-move.mjs.map +1 -0
  95. package/esm/use-network/{use-network.js → use-network.mjs} +2 -2
  96. package/esm/use-network/use-network.mjs.map +1 -0
  97. package/esm/use-os/{use-os.js → use-os.mjs} +2 -2
  98. package/esm/use-os/use-os.mjs.map +1 -0
  99. package/esm/use-page-leave/{use-page-leave.js → use-page-leave.mjs} +1 -1
  100. package/esm/use-page-leave/use-page-leave.mjs.map +1 -0
  101. package/esm/use-pagination/{use-pagination.js → use-pagination.mjs} +3 -3
  102. package/esm/use-pagination/use-pagination.mjs.map +1 -0
  103. package/esm/use-previous/{use-previous.js → use-previous.mjs} +1 -1
  104. package/esm/use-previous/use-previous.mjs.map +1 -0
  105. package/esm/use-queue/{use-queue.js → use-queue.mjs} +1 -1
  106. package/esm/use-queue/use-queue.mjs.map +1 -0
  107. package/esm/use-reduced-motion/{use-reduced-motion.js → use-reduced-motion.mjs} +2 -2
  108. package/esm/use-reduced-motion/use-reduced-motion.mjs.map +1 -0
  109. package/esm/use-resize-observer/{use-resize-observer.js → use-resize-observer.mjs} +1 -1
  110. package/esm/use-resize-observer/use-resize-observer.mjs.map +1 -0
  111. package/esm/use-scroll-into-view/{use-scroll-into-view.js → use-scroll-into-view.mjs} +7 -7
  112. package/esm/use-scroll-into-view/use-scroll-into-view.mjs.map +1 -0
  113. package/esm/use-scroll-into-view/utils/{ease-in-out-quad.js → ease-in-out-quad.mjs} +1 -1
  114. package/esm/use-scroll-into-view/utils/ease-in-out-quad.mjs.map +1 -0
  115. package/esm/use-scroll-into-view/utils/{get-relative-position.js → get-relative-position.mjs} +1 -1
  116. package/esm/use-scroll-into-view/utils/get-relative-position.mjs.map +1 -0
  117. package/esm/use-scroll-into-view/utils/{get-scroll-start.js → get-scroll-start.mjs} +1 -1
  118. package/esm/use-scroll-into-view/utils/get-scroll-start.mjs.map +1 -0
  119. package/esm/use-scroll-into-view/utils/{set-scroll-param.js → set-scroll-param.mjs} +1 -1
  120. package/esm/use-scroll-into-view/utils/set-scroll-param.mjs.map +1 -0
  121. package/esm/use-session-storage/{use-session-storage.js → use-session-storage.mjs} +2 -2
  122. package/esm/use-session-storage/use-session-storage.mjs.map +1 -0
  123. package/esm/use-set-state/{use-set-state.js → use-set-state.mjs} +1 -1
  124. package/esm/use-set-state/use-set-state.mjs.map +1 -0
  125. package/esm/use-shallow-effect/{use-shallow-effect.js → use-shallow-effect.mjs} +2 -2
  126. package/esm/use-shallow-effect/use-shallow-effect.mjs.map +1 -0
  127. package/esm/use-text-selection/{use-text-selection.js → use-text-selection.mjs} +2 -2
  128. package/esm/use-text-selection/use-text-selection.mjs.map +1 -0
  129. package/esm/use-timeout/{use-timeout.js → use-timeout.mjs} +1 -1
  130. package/esm/use-timeout/use-timeout.mjs.map +1 -0
  131. package/esm/use-toggle/{use-toggle.js → use-toggle.mjs} +1 -1
  132. package/esm/use-toggle/use-toggle.mjs.map +1 -0
  133. package/esm/use-uncontrolled/{use-uncontrolled.js → use-uncontrolled.mjs} +1 -1
  134. package/esm/use-uncontrolled/use-uncontrolled.mjs.map +1 -0
  135. package/esm/use-validated-state/{use-validated-state.js → use-validated-state.mjs} +1 -1
  136. package/esm/use-validated-state/use-validated-state.mjs.map +1 -0
  137. package/esm/use-viewport-size/{use-viewport-size.js → use-viewport-size.mjs} +2 -2
  138. package/esm/use-viewport-size/use-viewport-size.mjs.map +1 -0
  139. package/esm/use-window-event/{use-window-event.js → use-window-event.mjs} +1 -1
  140. package/esm/use-window-event/use-window-event.mjs.map +1 -0
  141. package/esm/use-window-scroll/{use-window-scroll.js → use-window-scroll.mjs} +2 -2
  142. package/esm/use-window-scroll/use-window-scroll.mjs.map +1 -0
  143. package/esm/utils/clamp/{clamp.js → clamp.mjs} +1 -1
  144. package/esm/utils/clamp/clamp.mjs.map +1 -0
  145. package/esm/utils/lower-first/{lower-first.js → lower-first.mjs} +1 -1
  146. package/esm/utils/lower-first/lower-first.mjs.map +1 -0
  147. package/esm/utils/random-id/{random-id.js → random-id.mjs} +1 -1
  148. package/esm/utils/random-id/random-id.mjs.map +1 -0
  149. package/esm/utils/range/{range.js → range.mjs} +1 -1
  150. package/esm/utils/range/range.mjs.map +1 -0
  151. package/esm/utils/shallow-equal/{shallow-equal.js → shallow-equal.mjs} +1 -1
  152. package/esm/utils/shallow-equal/shallow-equal.mjs.map +1 -0
  153. package/esm/utils/upper-first/{upper-first.js → upper-first.mjs} +1 -1
  154. package/esm/utils/upper-first/upper-first.mjs.map +1 -0
  155. package/lib/index.d.mts +64 -0
  156. package/lib/use-local-storage/create-storage.d.ts +2 -2
  157. package/lib/use-local-storage/use-local-storage.d.ts +2 -2
  158. package/lib/use-session-storage/use-session-storage.d.ts +2 -2
  159. package/package.json +11 -5
  160. package/esm/index.js +0 -66
  161. package/esm/index.js.map +0 -1
  162. package/esm/use-callback-ref/use-callback-ref.js.map +0 -1
  163. package/esm/use-click-outside/use-click-outside.js.map +0 -1
  164. package/esm/use-clipboard/use-clipboard.js.map +0 -1
  165. package/esm/use-color-scheme/use-color-scheme.js.map +0 -1
  166. package/esm/use-counter/use-counter.js.map +0 -1
  167. package/esm/use-debounced-callback/use-debounced-callback.js.map +0 -1
  168. package/esm/use-debounced-state/use-debounced-state.js +0 -25
  169. package/esm/use-debounced-state/use-debounced-state.js.map +0 -1
  170. package/esm/use-debounced-value/use-debounced-value.js.map +0 -1
  171. package/esm/use-did-update/use-did-update.js.map +0 -1
  172. package/esm/use-disclosure/use-disclosure.js.map +0 -1
  173. package/esm/use-document-title/use-document-title.js.map +0 -1
  174. package/esm/use-document-visibility/use-document-visibility.js.map +0 -1
  175. package/esm/use-event-listener/use-event-listener.js.map +0 -1
  176. package/esm/use-eye-dropper/use-eye-dropper.js.map +0 -1
  177. package/esm/use-favicon/use-favicon.js.map +0 -1
  178. package/esm/use-focus-return/use-focus-return.js.map +0 -1
  179. package/esm/use-focus-trap/create-aria-hider.js.map +0 -1
  180. package/esm/use-focus-trap/scope-tab.js.map +0 -1
  181. package/esm/use-focus-trap/tabbable.js.map +0 -1
  182. package/esm/use-focus-trap/use-focus-trap.js.map +0 -1
  183. package/esm/use-focus-within/use-focus-within.js.map +0 -1
  184. package/esm/use-force-update/use-force-update.js.map +0 -1
  185. package/esm/use-fullscreen/use-fullscreen.js.map +0 -1
  186. package/esm/use-hash/use-hash.js.map +0 -1
  187. package/esm/use-headroom/use-headroom.js.map +0 -1
  188. package/esm/use-hotkeys/parse-hotkey.js.map +0 -1
  189. package/esm/use-hotkeys/use-hotkeys.js.map +0 -1
  190. package/esm/use-hover/use-hover.js.map +0 -1
  191. package/esm/use-id/use-id.js.map +0 -1
  192. package/esm/use-id/use-react-id.js.map +0 -1
  193. package/esm/use-idle/use-idle.js.map +0 -1
  194. package/esm/use-input-state/use-input-state.js.map +0 -1
  195. package/esm/use-intersection/use-intersection.js.map +0 -1
  196. package/esm/use-interval/use-interval.js.map +0 -1
  197. package/esm/use-isomorphic-effect/use-isomorphic-effect.js.map +0 -1
  198. package/esm/use-list-state/use-list-state.js.map +0 -1
  199. package/esm/use-local-storage/create-storage.js.map +0 -1
  200. package/esm/use-local-storage/use-local-storage.js.map +0 -1
  201. package/esm/use-logger/use-logger.js.map +0 -1
  202. package/esm/use-media-query/use-media-query.js.map +0 -1
  203. package/esm/use-merged-ref/use-merged-ref.js.map +0 -1
  204. package/esm/use-mouse/use-mouse.js.map +0 -1
  205. package/esm/use-move/use-move.js.map +0 -1
  206. package/esm/use-network/use-network.js.map +0 -1
  207. package/esm/use-os/use-os.js.map +0 -1
  208. package/esm/use-page-leave/use-page-leave.js.map +0 -1
  209. package/esm/use-pagination/use-pagination.js.map +0 -1
  210. package/esm/use-previous/use-previous.js.map +0 -1
  211. package/esm/use-queue/use-queue.js.map +0 -1
  212. package/esm/use-reduced-motion/use-reduced-motion.js.map +0 -1
  213. package/esm/use-resize-observer/use-resize-observer.js.map +0 -1
  214. package/esm/use-scroll-into-view/use-scroll-into-view.js.map +0 -1
  215. package/esm/use-scroll-into-view/utils/ease-in-out-quad.js.map +0 -1
  216. package/esm/use-scroll-into-view/utils/get-relative-position.js.map +0 -1
  217. package/esm/use-scroll-into-view/utils/get-scroll-start.js.map +0 -1
  218. package/esm/use-scroll-into-view/utils/set-scroll-param.js.map +0 -1
  219. package/esm/use-session-storage/use-session-storage.js.map +0 -1
  220. package/esm/use-set-state/use-set-state.js.map +0 -1
  221. package/esm/use-shallow-effect/use-shallow-effect.js.map +0 -1
  222. package/esm/use-text-selection/use-text-selection.js.map +0 -1
  223. package/esm/use-timeout/use-timeout.js.map +0 -1
  224. package/esm/use-toggle/use-toggle.js.map +0 -1
  225. package/esm/use-uncontrolled/use-uncontrolled.js.map +0 -1
  226. package/esm/use-validated-state/use-validated-state.js.map +0 -1
  227. package/esm/use-viewport-size/use-viewport-size.js.map +0 -1
  228. package/esm/use-window-event/use-window-event.js.map +0 -1
  229. package/esm/use-window-scroll/use-window-scroll.js.map +0 -1
  230. package/esm/utils/clamp/clamp.js.map +0 -1
  231. package/esm/utils/lower-first/lower-first.js.map +0 -1
  232. package/esm/utils/random-id/random-id.js.map +0 -1
  233. package/esm/utils/range/range.js.map +0 -1
  234. package/esm/utils/shallow-equal/shallow-equal.js.map +0 -1
  235. package/esm/utils/upper-first/upper-first.js.map +0 -1
@@ -10,18 +10,21 @@ function useDebouncedState(defaultValue, wait, options = { leading: false }) {
10
10
  const leadingRef = React.useRef(true);
11
11
  const clearTimeout = () => window.clearTimeout(timeoutRef.current);
12
12
  React.useEffect(() => clearTimeout, []);
13
- const debouncedSetValue = (newValue) => {
14
- clearTimeout();
15
- if (leadingRef.current && options.leading) {
16
- setValue(newValue);
17
- } else {
18
- timeoutRef.current = window.setTimeout(() => {
19
- leadingRef.current = true;
13
+ const debouncedSetValue = React.useCallback(
14
+ (newValue) => {
15
+ clearTimeout();
16
+ if (leadingRef.current && options.leading) {
20
17
  setValue(newValue);
21
- }, wait);
22
- }
23
- leadingRef.current = false;
24
- };
18
+ } else {
19
+ timeoutRef.current = window.setTimeout(() => {
20
+ leadingRef.current = true;
21
+ setValue(newValue);
22
+ }, wait);
23
+ }
24
+ leadingRef.current = false;
25
+ },
26
+ [options.leading]
27
+ );
25
28
  return [value, debouncedSetValue];
26
29
  }
27
30
 
@@ -1 +1 @@
1
- {"version":3,"file":"use-debounced-state.js","sources":["../../src/use-debounced-state/use-debounced-state.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport function useDebouncedState<T = any>(\n defaultValue: T,\n wait: number,\n options = { leading: false }\n) {\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<number | null>(null);\n const leadingRef = useRef(true);\n\n const clearTimeout = () => window.clearTimeout(timeoutRef.current!);\n useEffect(() => clearTimeout, []);\n\n const debouncedSetValue = (newValue: T) => {\n clearTimeout();\n if (leadingRef.current && options.leading) {\n setValue(newValue);\n } else {\n timeoutRef.current = window.setTimeout(() => {\n leadingRef.current = true;\n setValue(newValue);\n }, wait);\n }\n leadingRef.current = false;\n };\n\n return [value, debouncedSetValue] as const;\n}\n"],"names":["useState","useRef","useEffect"],"mappings":";;;;;;AACO,SAAS,iBAAiB,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;AACpF,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAC,YAAY,CAAC,CAAC;AACnD,EAAE,MAAM,UAAU,GAAGC,YAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,UAAU,GAAGA,YAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACrE,EAAEC,eAAS,CAAC,MAAM,YAAY,EAAE,EAAE,CAAC,CAAC;AACpC,EAAE,MAAM,iBAAiB,GAAG,CAAC,QAAQ,KAAK;AAC1C,IAAI,YAAY,EAAE,CAAC;AACnB,IAAI,IAAI,UAAU,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;AAC/C,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACzB,KAAK,MAAM;AACX,MAAM,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AACnD,QAAQ,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;AAClC,QAAQ,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3B,OAAO,EAAE,IAAI,CAAC,CAAC;AACf,KAAK;AACL,IAAI,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;AAC/B,GAAG,CAAC;AACJ,EAAE,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACpC;;;;"}
1
+ {"version":3,"file":"use-debounced-state.js","sources":["../../src/use-debounced-state/use-debounced-state.ts"],"sourcesContent":["import { useEffect, useRef, useState, useCallback } from 'react';\n\nexport function useDebouncedState<T = any>(\n defaultValue: T,\n wait: number,\n options = { leading: false }\n) {\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<number | null>(null);\n const leadingRef = useRef(true);\n\n const clearTimeout = () => window.clearTimeout(timeoutRef.current!);\n useEffect(() => clearTimeout, []);\n\n const debouncedSetValue = useCallback(\n (newValue: T) => {\n clearTimeout();\n if (leadingRef.current && options.leading) {\n setValue(newValue);\n } else {\n timeoutRef.current = window.setTimeout(() => {\n leadingRef.current = true;\n setValue(newValue);\n }, wait);\n }\n leadingRef.current = false;\n },\n [options.leading]\n );\n\n return [value, debouncedSetValue] as const;\n}\n"],"names":["useState","useRef","useEffect","useCallback"],"mappings":";;;;;;AACO,SAAS,iBAAiB,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;AACpF,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAC,YAAY,CAAC,CAAC;AACnD,EAAE,MAAM,UAAU,GAAGC,YAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,UAAU,GAAGA,YAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACrE,EAAEC,eAAS,CAAC,MAAM,YAAY,EAAE,EAAE,CAAC,CAAC;AACpC,EAAE,MAAM,iBAAiB,GAAGC,iBAAW;AACvC,IAAI,CAAC,QAAQ,KAAK;AAClB,MAAM,YAAY,EAAE,CAAC;AACrB,MAAM,IAAI,UAAU,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;AACjD,QAAQ,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3B,OAAO,MAAM;AACb,QAAQ,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AACrD,UAAU,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;AACpC,UAAU,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7B,SAAS,EAAE,IAAI,CAAC,CAAC;AACjB,OAAO;AACP,MAAM,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;AACjC,KAAK;AACL,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACrB,GAAG,CAAC;AACJ,EAAE,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACpC;;;;"}
@@ -19,8 +19,36 @@ function deserializeJSON(value) {
19
19
  return value;
20
20
  }
21
21
  }
22
+ function createStorageHandler(type) {
23
+ const getItem = (key) => {
24
+ try {
25
+ return window[type].getItem(key);
26
+ } catch (error) {
27
+ console.warn("use-local-storage: Failed to get value from storage, localStorage is blocked");
28
+ return null;
29
+ }
30
+ };
31
+ const setItem = (key, value) => {
32
+ try {
33
+ window[type].setItem(key, value);
34
+ } catch (error) {
35
+ console.warn("use-local-storage: Failed to set value to storage, localStorage is blocked");
36
+ }
37
+ };
38
+ const removeItem = (key) => {
39
+ try {
40
+ window[type].removeItem(key);
41
+ } catch (error) {
42
+ console.warn(
43
+ "use-local-storage: Failed to remove value from storage, localStorage is blocked"
44
+ );
45
+ }
46
+ };
47
+ return { getItem, setItem, removeItem };
48
+ }
22
49
  function createStorage(type, hookName) {
23
50
  const eventName = type === "localStorage" ? "mantine-local-storage" : "mantine-session-storage";
51
+ const { getItem, setItem, removeItem } = createStorageHandler(type);
24
52
  return function useStorage({
25
53
  key,
26
54
  defaultValue = void 0,
@@ -33,7 +61,7 @@ function createStorage(type, hookName) {
33
61
  if (typeof window === "undefined" || !(type in window) || window[type] === null || skipStorage) {
34
62
  return defaultValue;
35
63
  }
36
- const storageValue = window[type].getItem(key);
64
+ const storageValue = getItem(key);
37
65
  return storageValue !== null ? deserialize(storageValue) : defaultValue;
38
66
  },
39
67
  [key, defaultValue]
@@ -44,14 +72,14 @@ function createStorage(type, hookName) {
44
72
  if (val instanceof Function) {
45
73
  setValue((current) => {
46
74
  const result = val(current);
47
- window[type].setItem(key, serialize(result));
75
+ setItem(key, serialize(result));
48
76
  window.dispatchEvent(
49
77
  new CustomEvent(eventName, { detail: { key, value: val(current) } })
50
78
  );
51
79
  return result;
52
80
  });
53
81
  } else {
54
- window[type].setItem(key, serialize(val));
82
+ setItem(key, serialize(val));
55
83
  window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: val } }));
56
84
  setValue(val);
57
85
  }
@@ -59,7 +87,7 @@ function createStorage(type, hookName) {
59
87
  [key]
60
88
  );
61
89
  const removeStorageValue = React.useCallback(() => {
62
- window[type].removeItem(key);
90
+ removeItem(key);
63
91
  window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: defaultValue } }));
64
92
  }, []);
65
93
  useWindowEvent.useWindowEvent("storage", (event) => {
@@ -1 +1 @@
1
- {"version":3,"file":"create-storage.js","sources":["../../src/use-local-storage/create-storage.ts"],"sourcesContent":["import { useState, useCallback, useEffect } from 'react';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\nexport type StorageType = 'localStorage' | 'sessionStorage';\n\nexport interface IStorageProperties<T> {\n /** Storage key */\n key: string;\n\n /** Default value that will be set if value is not found in storage */\n defaultValue?: T;\n\n /** If set to true, value will be update is useEffect after mount */\n getInitialValueInEffect?: boolean;\n\n /** Function to serialize value into string to be save in storage */\n serialize?(value: T): string;\n\n /** Function to deserialize string value from storage to value */\n deserialize?(value: string | undefined): T;\n}\n\nfunction serializeJSON<T>(value: T, hookName: string) {\n try {\n return JSON.stringify(value);\n } catch (error) {\n throw new Error(`@mantine/hooks ${hookName}: Failed to serialize the value`);\n }\n}\n\nfunction deserializeJSON(value: string) {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\nexport function createStorage<T>(type: StorageType, hookName: string) {\n const eventName = type === 'localStorage' ? 'mantine-local-storage' : 'mantine-session-storage';\n\n return function useStorage({\n key,\n defaultValue = undefined,\n getInitialValueInEffect = true,\n deserialize = deserializeJSON,\n serialize = (value: T) => serializeJSON(value, hookName),\n }: IStorageProperties<T>) {\n const readStorageValue = useCallback(\n (skipStorage?: boolean): T => {\n if (\n typeof window === 'undefined' ||\n !(type in window) ||\n window[type] === null ||\n skipStorage\n ) {\n return defaultValue as T;\n }\n\n const storageValue = window[type].getItem(key);\n\n return storageValue !== null ? deserialize(storageValue) : (defaultValue as T);\n },\n [key, defaultValue]\n );\n\n const [value, setValue] = useState<T>(readStorageValue(getInitialValueInEffect));\n\n const setStorageValue = useCallback(\n (val: T | ((prevState: T) => T)) => {\n if (val instanceof Function) {\n setValue((current) => {\n const result = val(current);\n window[type].setItem(key, serialize(result));\n window.dispatchEvent(\n new CustomEvent(eventName, { detail: { key, value: val(current) } })\n );\n return result;\n });\n } else {\n window[type].setItem(key, serialize(val));\n window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: val } }));\n setValue(val);\n }\n },\n [key]\n );\n\n const removeStorageValue = useCallback(() => {\n window[type].removeItem(key);\n window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: defaultValue } }));\n }, []);\n\n useWindowEvent('storage', (event) => {\n if (event.storageArea === window[type] && event.key === key) {\n setValue(deserialize(event.newValue ?? undefined));\n }\n });\n\n useWindowEvent(eventName, (event) => {\n if (event.detail.key === key) {\n setValue(event.detail.value);\n }\n });\n\n useEffect(() => {\n if (defaultValue !== undefined && value === undefined) {\n setStorageValue(defaultValue);\n }\n }, [defaultValue, value, setStorageValue]);\n\n useEffect(() => {\n if (getInitialValueInEffect) {\n setValue(readStorageValue());\n }\n }, []);\n\n return [\n value === undefined ? defaultValue : value,\n setStorageValue,\n removeStorageValue,\n ] as const;\n };\n}\n"],"names":["useCallback","useState","useWindowEvent","useEffect"],"mappings":";;;;;;;AAEA,SAAS,aAAa,CAAC,KAAK,EAAE,QAAQ,EAAE;AACxC,EAAE,IAAI;AACN,IAAI,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AACjC,GAAG,CAAC,OAAO,KAAK,EAAE;AAClB,IAAI,MAAM,IAAI,KAAK,CAAC,CAAC,eAAe,EAAE,QAAQ,CAAC,+BAA+B,CAAC,CAAC,CAAC;AACjF,GAAG;AACH,CAAC;AACD,SAAS,eAAe,CAAC,KAAK,EAAE;AAChC,EAAE,IAAI;AACN,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,GAAG,CAAC,OAAO,CAAC,EAAE;AACd,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH,CAAC;AACM,SAAS,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE;AAC9C,EAAE,MAAM,SAAS,GAAG,IAAI,KAAK,cAAc,GAAG,uBAAuB,GAAG,yBAAyB,CAAC;AAClG,EAAE,OAAO,SAAS,UAAU,CAAC;AAC7B,IAAI,GAAG;AACP,IAAI,YAAY,GAAG,KAAK,CAAC;AACzB,IAAI,uBAAuB,GAAG,IAAI;AAClC,IAAI,WAAW,GAAG,eAAe;AACjC,IAAI,SAAS,GAAG,CAAC,KAAK,KAAK,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC;AACzD,GAAG,EAAE;AACL,IAAI,MAAM,gBAAgB,GAAGA,iBAAW;AACxC,MAAM,CAAC,WAAW,KAAK;AACvB,QAAQ,IAAI,OAAO,MAAM,KAAK,WAAW,IAAI,EAAE,IAAI,IAAI,MAAM,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,WAAW,EAAE;AACxG,UAAU,OAAO,YAAY,CAAC;AAC9B,SAAS;AACT,QAAQ,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AACvD,QAAQ,OAAO,YAAY,KAAK,IAAI,GAAG,WAAW,CAAC,YAAY,CAAC,GAAG,YAAY,CAAC;AAChF,OAAO;AACP,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC;AACzB,KAAK,CAAC;AACN,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGC,cAAQ,CAAC,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,CAAC;AAClF,IAAI,MAAM,eAAe,GAAGD,iBAAW;AACvC,MAAM,CAAC,GAAG,KAAK;AACf,QAAQ,IAAI,GAAG,YAAY,QAAQ,EAAE;AACrC,UAAU,QAAQ,CAAC,CAAC,OAAO,KAAK;AAChC,YAAY,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;AACxC,YAAY,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;AACzD,YAAY,MAAM,CAAC,aAAa;AAChC,cAAc,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC;AAClF,aAAa,CAAC;AACd,YAAY,OAAO,MAAM,CAAC;AAC1B,WAAW,CAAC,CAAC;AACb,SAAS,MAAM;AACf,UAAU,MAAM,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;AACpD,UAAU,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AAC5F,UAAU,QAAQ,CAAC,GAAG,CAAC,CAAC;AACxB,SAAS;AACT,OAAO;AACP,MAAM,CAAC,GAAG,CAAC;AACX,KAAK,CAAC;AACN,IAAI,MAAM,kBAAkB,GAAGA,iBAAW,CAAC,MAAM;AACjD,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;AACnC,MAAM,MAAM,CAAC,aAAa,CAAC,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,EAAE,CAAC,CAAC,CAAC;AACjG,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAIE,6BAAc,CAAC,SAAS,EAAE,CAAC,KAAK,KAAK;AACzC,MAAM,IAAI,EAAE,CAAC;AACb,MAAM,IAAI,KAAK,CAAC,WAAW,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,EAAE;AACnE,QAAQ,QAAQ,CAAC,WAAW,CAAC,CAAC,EAAE,GAAG,KAAK,CAAC,QAAQ,KAAK,IAAI,GAAG,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC3E,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAIA,6BAAc,CAAC,SAAS,EAAE,CAAC,KAAK,KAAK;AACzC,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,GAAG,KAAK,GAAG,EAAE;AACpC,QAAQ,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrC,OAAO;AACP,KAAK,CAAC,CAAC;AACP,IAAIC,eAAS,CAAC,MAAM;AACpB,MAAM,IAAI,YAAY,KAAK,KAAK,CAAC,IAAI,KAAK,KAAK,KAAK,CAAC,EAAE;AACvD,QAAQ,eAAe,CAAC,YAAY,CAAC,CAAC;AACtC,OAAO;AACP,KAAK,EAAE,CAAC,YAAY,EAAE,KAAK,EAAE,eAAe,CAAC,CAAC,CAAC;AAC/C,IAAIA,eAAS,CAAC,MAAM;AACpB,MAAM,IAAI,uBAAuB,EAAE;AACnC,QAAQ,QAAQ,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACrC,OAAO;AACP,KAAK,EAAE,EAAE,CAAC,CAAC;AACX,IAAI,OAAO;AACX,MAAM,KAAK,KAAK,KAAK,CAAC,GAAG,YAAY,GAAG,KAAK;AAC7C,MAAM,eAAe;AACrB,MAAM,kBAAkB;AACxB,KAAK,CAAC;AACN,GAAG,CAAC;AACJ;;;;"}
1
+ {"version":3,"file":"create-storage.js","sources":["../../src/use-local-storage/create-storage.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { useState, useCallback, useEffect } from 'react';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\nexport type StorageType = 'localStorage' | 'sessionStorage';\n\nexport interface StorageProperties<T> {\n /** Storage key */\n key: string;\n\n /** Default value that will be set if value is not found in storage */\n defaultValue?: T;\n\n /** If set to true, value will be update is useEffect after mount */\n getInitialValueInEffect?: boolean;\n\n /** Function to serialize value into string to be save in storage */\n serialize?(value: T): string;\n\n /** Function to deserialize string value from storage to value */\n deserialize?(value: string | undefined): T;\n}\n\nfunction serializeJSON<T>(value: T, hookName: string) {\n try {\n return JSON.stringify(value);\n } catch (error) {\n throw new Error(`@mantine/hooks ${hookName}: Failed to serialize the value`);\n }\n}\n\nfunction deserializeJSON(value: string) {\n try {\n return JSON.parse(value);\n } catch {\n return value;\n }\n}\n\nfunction createStorageHandler(type: StorageType) {\n const getItem = (key: string) => {\n try {\n return window[type].getItem(key);\n } catch (error) {\n console.warn('use-local-storage: Failed to get value from storage, localStorage is blocked');\n return null;\n }\n };\n\n const setItem = (key: string, value: string) => {\n try {\n window[type].setItem(key, value);\n } catch (error) {\n console.warn('use-local-storage: Failed to set value to storage, localStorage is blocked');\n }\n };\n\n const removeItem = (key: string) => {\n try {\n window[type].removeItem(key);\n } catch (error) {\n console.warn(\n 'use-local-storage: Failed to remove value from storage, localStorage is blocked'\n );\n }\n };\n\n return { getItem, setItem, removeItem };\n}\n\nexport function createStorage<T>(type: StorageType, hookName: string) {\n const eventName = type === 'localStorage' ? 'mantine-local-storage' : 'mantine-session-storage';\n const { getItem, setItem, removeItem } = createStorageHandler(type);\n\n return function useStorage({\n key,\n defaultValue = undefined,\n getInitialValueInEffect = true,\n deserialize = deserializeJSON,\n serialize = (value: T) => serializeJSON(value, hookName),\n }: StorageProperties<T>) {\n const readStorageValue = useCallback(\n (skipStorage?: boolean): T => {\n if (\n typeof window === 'undefined' ||\n !(type in window) ||\n window[type] === null ||\n skipStorage\n ) {\n return defaultValue as T;\n }\n\n const storageValue = getItem(key);\n return storageValue !== null ? deserialize(storageValue) : (defaultValue as T);\n },\n [key, defaultValue]\n );\n\n const [value, setValue] = useState<T>(readStorageValue(getInitialValueInEffect));\n\n const setStorageValue = useCallback(\n (val: T | ((prevState: T) => T)) => {\n if (val instanceof Function) {\n setValue((current) => {\n const result = val(current);\n setItem(key, serialize(result));\n window.dispatchEvent(\n new CustomEvent(eventName, { detail: { key, value: val(current) } })\n );\n return result;\n });\n } else {\n setItem(key, serialize(val));\n window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: val } }));\n setValue(val);\n }\n },\n [key]\n );\n\n const removeStorageValue = useCallback(() => {\n removeItem(key);\n window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: defaultValue } }));\n }, []);\n\n useWindowEvent('storage', (event) => {\n if (event.storageArea === window[type] && event.key === key) {\n setValue(deserialize(event.newValue ?? undefined));\n }\n });\n\n useWindowEvent(eventName, (event) => {\n if (event.detail.key === key) {\n setValue(event.detail.value);\n }\n });\n\n useEffect(() => {\n if (defaultValue !== undefined && value === undefined) {\n setStorageValue(defaultValue);\n }\n }, [defaultValue, value, setStorageValue]);\n\n useEffect(() => {\n if (getInitialValueInEffect) {\n setValue(readStorageValue());\n }\n }, []);\n\n return [\n value === undefined ? defaultValue : value,\n setStorageValue,\n removeStorageValue,\n ] as const;\n };\n}\n"],"names":["useCallback","useState","useWindowEvent","useEffect"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-local-storage.js","sources":["../../src/use-local-storage/use-local-storage.ts"],"sourcesContent":["import { createStorage, IStorageProperties } from './create-storage';\n\nexport function useLocalStorage<T = string>(props: IStorageProperties<T>) {\n return createStorage<T>('localStorage', 'use-local-storage')(props);\n}\n"],"names":["createStorage"],"mappings":";;;;;;AACO,SAAS,eAAe,CAAC,KAAK,EAAE;AACvC,EAAE,OAAOA,2BAAa,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC;AACnE;;;;"}
1
+ {"version":3,"file":"use-local-storage.js","sources":["../../src/use-local-storage/use-local-storage.ts"],"sourcesContent":["import { createStorage, StorageProperties } from './create-storage';\n\nexport function useLocalStorage<T = string>(props: StorageProperties<T>) {\n return createStorage<T>('localStorage', 'use-local-storage')(props);\n}\n"],"names":["createStorage"],"mappings":";;;;;;AACO,SAAS,eAAe,CAAC,KAAK,EAAE;AACvC,EAAE,OAAOA,2BAAa,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC;AACnE;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"use-session-storage.js","sources":["../../src/use-session-storage/use-session-storage.ts"],"sourcesContent":["import { createStorage, IStorageProperties } from '../use-local-storage/create-storage';\n\nexport function useSessionStorage<T = string>(props: IStorageProperties<T>) {\n return createStorage<T>('sessionStorage', 'use-session-storage')(props);\n}\n"],"names":["createStorage"],"mappings":";;;;;;AACO,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACzC,EAAE,OAAOA,2BAAa,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,KAAK,CAAC,CAAC;AACvE;;;;"}
1
+ {"version":3,"file":"use-session-storage.js","sources":["../../src/use-session-storage/use-session-storage.ts"],"sourcesContent":["import { createStorage, StorageProperties } from '../use-local-storage/create-storage';\n\nexport function useSessionStorage<T = string>(props: StorageProperties<T>) {\n return createStorage<T>('sessionStorage', 'use-session-storage')(props);\n}\n"],"names":["createStorage"],"mappings":";;;;;;AACO,SAAS,iBAAiB,CAAC,KAAK,EAAE;AACzC,EAAE,OAAOA,2BAAa,CAAC,gBAAgB,EAAE,qBAAqB,CAAC,CAAC,KAAK,CAAC,CAAC;AACvE;;;;"}
package/esm/index.mjs ADDED
@@ -0,0 +1,66 @@
1
+ 'use client';
2
+ export { useCallbackRef } from './use-callback-ref/use-callback-ref.mjs';
3
+ export { useDebounceCallback } from './use-debounced-callback/use-debounced-callback.mjs';
4
+ export { useClickOutside } from './use-click-outside/use-click-outside.mjs';
5
+ export { useClipboard } from './use-clipboard/use-clipboard.mjs';
6
+ export { useColorScheme } from './use-color-scheme/use-color-scheme.mjs';
7
+ export { useCounter } from './use-counter/use-counter.mjs';
8
+ export { useDebouncedState } from './use-debounced-state/use-debounced-state.mjs';
9
+ export { useDebouncedValue } from './use-debounced-value/use-debounced-value.mjs';
10
+ export { useDocumentTitle } from './use-document-title/use-document-title.mjs';
11
+ export { useDocumentVisibility } from './use-document-visibility/use-document-visibility.mjs';
12
+ export { useFocusReturn } from './use-focus-return/use-focus-return.mjs';
13
+ export { useDidUpdate } from './use-did-update/use-did-update.mjs';
14
+ export { useFocusTrap } from './use-focus-trap/use-focus-trap.mjs';
15
+ export { useForceUpdate } from './use-force-update/use-force-update.mjs';
16
+ export { useId } from './use-id/use-id.mjs';
17
+ export { useIdle } from './use-idle/use-idle.mjs';
18
+ export { useInterval } from './use-interval/use-interval.mjs';
19
+ export { useIsomorphicEffect } from './use-isomorphic-effect/use-isomorphic-effect.mjs';
20
+ export { useListState } from './use-list-state/use-list-state.mjs';
21
+ export { useLocalStorage } from './use-local-storage/use-local-storage.mjs';
22
+ export { useSessionStorage } from './use-session-storage/use-session-storage.mjs';
23
+ export { useMediaQuery } from './use-media-query/use-media-query.mjs';
24
+ export { assignRef, mergeRefs, useMergedRef } from './use-merged-ref/use-merged-ref.mjs';
25
+ export { useMouse } from './use-mouse/use-mouse.mjs';
26
+ export { clampUseMovePosition, useMove } from './use-move/use-move.mjs';
27
+ export { usePagination } from './use-pagination/use-pagination.mjs';
28
+ export { useQueue } from './use-queue/use-queue.mjs';
29
+ export { usePageLeave } from './use-page-leave/use-page-leave.mjs';
30
+ export { useReducedMotion } from './use-reduced-motion/use-reduced-motion.mjs';
31
+ export { useScrollIntoView } from './use-scroll-into-view/use-scroll-into-view.mjs';
32
+ export { useElementSize, useResizeObserver } from './use-resize-observer/use-resize-observer.mjs';
33
+ export { useShallowEffect } from './use-shallow-effect/use-shallow-effect.mjs';
34
+ export { useToggle } from './use-toggle/use-toggle.mjs';
35
+ export { useUncontrolled } from './use-uncontrolled/use-uncontrolled.mjs';
36
+ export { useViewportSize } from './use-viewport-size/use-viewport-size.mjs';
37
+ export { useWindowEvent } from './use-window-event/use-window-event.mjs';
38
+ export { useWindowScroll } from './use-window-scroll/use-window-scroll.mjs';
39
+ export { useIntersection } from './use-intersection/use-intersection.mjs';
40
+ export { useHash } from './use-hash/use-hash.mjs';
41
+ export { useHotkeys } from './use-hotkeys/use-hotkeys.mjs';
42
+ export { useFullscreen } from './use-fullscreen/use-fullscreen.mjs';
43
+ export { useLogger } from './use-logger/use-logger.mjs';
44
+ export { useHover } from './use-hover/use-hover.mjs';
45
+ export { useValidatedState } from './use-validated-state/use-validated-state.mjs';
46
+ export { useOs } from './use-os/use-os.mjs';
47
+ export { useSetState } from './use-set-state/use-set-state.mjs';
48
+ export { useInputState } from './use-input-state/use-input-state.mjs';
49
+ export { useEventListener } from './use-event-listener/use-event-listener.mjs';
50
+ export { useDisclosure } from './use-disclosure/use-disclosure.mjs';
51
+ export { useFocusWithin } from './use-focus-within/use-focus-within.mjs';
52
+ export { useNetwork } from './use-network/use-network.mjs';
53
+ export { useTimeout } from './use-timeout/use-timeout.mjs';
54
+ export { useTextSelection } from './use-text-selection/use-text-selection.mjs';
55
+ export { usePrevious } from './use-previous/use-previous.mjs';
56
+ export { useFavicon } from './use-favicon/use-favicon.mjs';
57
+ export { useHeadroom } from './use-headroom/use-headroom.mjs';
58
+ export { useEyeDropper } from './use-eye-dropper/use-eye-dropper.mjs';
59
+ export { getHotkeyHandler } from './use-hotkeys/parse-hotkey.mjs';
60
+ export { clamp } from './utils/clamp/clamp.mjs';
61
+ export { lowerFirst } from './utils/lower-first/lower-first.mjs';
62
+ export { randomId } from './utils/random-id/random-id.mjs';
63
+ export { range } from './utils/range/range.mjs';
64
+ export { shallowEqual } from './utils/shallow-equal/shallow-equal.mjs';
65
+ export { upperFirst } from './utils/upper-first/upper-first.mjs';
66
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -12,4 +12,4 @@ function useCallbackRef(callback) {
12
12
  }
13
13
 
14
14
  export { useCallbackRef };
15
- //# sourceMappingURL=use-callback-ref.js.map
15
+ //# sourceMappingURL=use-callback-ref.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-callback-ref.mjs","sources":["../../src/use-callback-ref/use-callback-ref.ts"],"sourcesContent":["import { useRef, useEffect, useMemo } from 'react';\n\nexport function useCallbackRef<T extends (...args: any[]) => any>(callback: T | undefined): T {\n const callbackRef = useRef(callback);\n\n useEffect(() => {\n callbackRef.current = callback;\n });\n\n return useMemo(() => ((...args) => callbackRef.current?.(...args)) as T, []);\n}\n"],"names":[],"mappings":";;AACO,SAAS,cAAc,CAAC,QAAQ,EAAE;AACzC,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC;AACvC,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,WAAW,CAAC,OAAO,GAAG,QAAQ,CAAC;AACnC,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,KAAK;AACpC,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,OAAO,CAAC,EAAE,GAAG,WAAW,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,CAAC;AACvF,GAAG,EAAE,EAAE,CAAC,CAAC;AACT;;;;"}
@@ -23,4 +23,4 @@ function useClickOutside(handler, events, nodes) {
23
23
  }
24
24
 
25
25
  export { useClickOutside };
26
- //# sourceMappingURL=use-click-outside.js.map
26
+ //# sourceMappingURL=use-click-outside.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-click-outside.mjs","sources":["../../src/use-click-outside/use-click-outside.ts"],"sourcesContent":["import { useEffect, useRef } from 'react';\n\nconst DEFAULT_EVENTS = ['mousedown', 'touchstart'];\n\nexport function useClickOutside<T extends HTMLElement = any>(\n handler: () => void,\n events?: string[] | null,\n nodes?: (HTMLElement | null)[]\n) {\n const ref = useRef<T>();\n\n useEffect(() => {\n const listener = (event: any) => {\n const { target } = event ?? {};\n if (Array.isArray(nodes)) {\n const shouldIgnore =\n target?.hasAttribute('data-ignore-outside-clicks') ||\n (!document.body.contains(target) && target.tagName !== 'HTML');\n const shouldTrigger = nodes.every((node) => !!node && !event.composedPath().includes(node));\n shouldTrigger && !shouldIgnore && handler();\n } else if (ref.current && !ref.current.contains(target)) {\n handler();\n }\n };\n\n (events || DEFAULT_EVENTS).forEach((fn) => document.addEventListener(fn, listener));\n\n return () => {\n (events || DEFAULT_EVENTS).forEach((fn) => document.removeEventListener(fn, listener));\n };\n }, [ref, handler, nodes]);\n\n return ref;\n}\n"],"names":[],"mappings":";;AACA,MAAM,cAAc,GAAG,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC;AAC5C,SAAS,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;AACxD,EAAE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;AACvB,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,MAAM,QAAQ,GAAG,CAAC,KAAK,KAAK;AAChC,MAAM,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;AACpD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAChC,QAAQ,MAAM,YAAY,GAAG,CAAC,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,MAAM,CAAC,YAAY,CAAC,4BAA4B,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC;AAC3K,QAAQ,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AACpG,QAAQ,aAAa,IAAI,CAAC,YAAY,IAAI,OAAO,EAAE,CAAC;AACpD,OAAO,MAAM,IAAI,GAAG,CAAC,OAAO,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;AAC/D,QAAQ,OAAO,EAAE,CAAC;AAClB,OAAO;AACP,KAAK,CAAC;AACN,IAAI,CAAC,MAAM,IAAI,cAAc,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AACxF,IAAI,OAAO,MAAM;AACjB,MAAM,CAAC,MAAM,IAAI,cAAc,EAAE,OAAO,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC,mBAAmB,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC;AAC7F,KAAK,CAAC;AACN,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC;AAC5B,EAAE,OAAO,GAAG,CAAC;AACb;;;;"}
@@ -25,4 +25,4 @@ function useClipboard({ timeout = 2e3 } = {}) {
25
25
  }
26
26
 
27
27
  export { useClipboard };
28
- //# sourceMappingURL=use-clipboard.js.map
28
+ //# sourceMappingURL=use-clipboard.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-clipboard.mjs","sources":["../../src/use-clipboard/use-clipboard.ts"],"sourcesContent":["import { useState } from 'react';\n\nexport function useClipboard({ timeout = 2000 } = {}) {\n const [error, setError] = useState<Error | null>(null);\n const [copied, setCopied] = useState(false);\n const [copyTimeout, setCopyTimeout] = useState<number | null>(null);\n\n const handleCopyResult = (value: boolean) => {\n window.clearTimeout(copyTimeout!);\n setCopyTimeout(window.setTimeout(() => setCopied(false), timeout));\n setCopied(value);\n };\n\n const copy = (valueToCopy: any) => {\n if ('clipboard' in navigator) {\n navigator.clipboard\n .writeText(valueToCopy)\n .then(() => handleCopyResult(true))\n .catch((err) => setError(err));\n } else {\n setError(new Error('useClipboard: navigator.clipboard is not supported'));\n }\n };\n\n const reset = () => {\n setCopied(false);\n setError(null);\n window.clearTimeout(copyTimeout!);\n };\n\n return { copy, reset, error, copied };\n}\n"],"names":[],"mappings":";;AACO,SAAS,YAAY,CAAC,EAAE,OAAO,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE;AACrD,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC3C,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC9C,EAAE,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAC;AACvD,EAAE,MAAM,gBAAgB,GAAG,CAAC,KAAK,KAAK;AACtC,IAAI,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AACrC,IAAI,cAAc,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;AACvE,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,GAAG,CAAC;AACJ,EAAE,MAAM,IAAI,GAAG,CAAC,WAAW,KAAK;AAChC,IAAI,IAAI,WAAW,IAAI,SAAS,EAAE;AAClC,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,MAAM,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;AAClH,KAAK,MAAM;AACX,MAAM,QAAQ,CAAC,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC,CAAC;AAChF,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,MAAM,KAAK,GAAG,MAAM;AACtB,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnB,IAAI,MAAM,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;AACrC,GAAG,CAAC;AACJ,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;AACxC;;;;"}
@@ -1,8 +1,8 @@
1
- import { useMediaQuery } from '../use-media-query/use-media-query.js';
1
+ import { useMediaQuery } from '../use-media-query/use-media-query.mjs';
2
2
 
3
3
  function useColorScheme(initialValue, options) {
4
4
  return useMediaQuery("(prefers-color-scheme: dark)", initialValue === "dark", options) ? "dark" : "light";
5
5
  }
6
6
 
7
7
  export { useColorScheme };
8
- //# sourceMappingURL=use-color-scheme.js.map
8
+ //# sourceMappingURL=use-color-scheme.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-color-scheme.mjs","sources":["../../src/use-color-scheme/use-color-scheme.ts"],"sourcesContent":["import { useMediaQuery, UseMediaQueryOptions } from '../use-media-query/use-media-query';\n\nexport function useColorScheme(initialValue?: 'dark' | 'light', options?: UseMediaQueryOptions) {\n return useMediaQuery('(prefers-color-scheme: dark)', initialValue === 'dark', options)\n ? 'dark'\n : 'light';\n}\n"],"names":[],"mappings":";;AACO,SAAS,cAAc,CAAC,YAAY,EAAE,OAAO,EAAE;AACtD,EAAE,OAAO,aAAa,CAAC,8BAA8B,EAAE,YAAY,KAAK,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC;AAC5G;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { useState } from 'react';
2
- import { clamp } from '../utils/clamp/clamp.js';
2
+ import { clamp } from '../utils/clamp/clamp.mjs';
3
3
 
4
4
  var __defProp = Object.defineProperty;
5
5
  var __getOwnPropSymbols = Object.getOwnPropertySymbols;
@@ -32,4 +32,4 @@ function useCounter(initialValue = 0, options) {
32
32
  }
33
33
 
34
34
  export { useCounter };
35
- //# sourceMappingURL=use-counter.js.map
35
+ //# sourceMappingURL=use-counter.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-counter.mjs","sources":["../../src/use-counter/use-counter.ts"],"sourcesContent":["import { useState } from 'react';\nimport { clamp } from '../utils';\n\nconst DEFAULT_OPTIONS = {\n min: -Infinity,\n max: Infinity,\n};\n\nexport function useCounter(initialValue = 0, options?: Partial<{ min: number; max: number }>) {\n const { min, max } = { ...DEFAULT_OPTIONS, ...options };\n const [count, setCount] = useState<number>(clamp(initialValue, min, max));\n\n const increment = () => setCount((current) => clamp(current + 1, min, max));\n const decrement = () => setCount((current) => clamp(current - 1, min, max));\n const set = (value: number) => setCount(clamp(value, min, max));\n const reset = () => setCount(clamp(initialValue, min, max));\n\n return [count, { increment, decrement, set, reset }] as const;\n}\n"],"names":[],"mappings":";;;AAAA,IAAI,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;AACtC,IAAI,mBAAmB,GAAG,MAAM,CAAC,qBAAqB,CAAC;AACvD,IAAI,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;AACnD,IAAI,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,oBAAoB,CAAC;AACzD,IAAI,eAAe,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,KAAK,GAAG,IAAI,GAAG,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;AAChK,IAAI,cAAc,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK;AAC/B,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AAChC,IAAI,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AAClC,MAAM,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACxC,EAAE,IAAI,mBAAmB;AACzB,IAAI,KAAK,IAAI,IAAI,IAAI,mBAAmB,CAAC,CAAC,CAAC,EAAE;AAC7C,MAAM,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC;AACpC,QAAQ,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1C,KAAK;AACL,EAAE,OAAO,CAAC,CAAC;AACX,CAAC,CAAC;AAGF,MAAM,eAAe,GAAG;AACxB,EAAE,GAAG,EAAE,CAAC,QAAQ;AAChB,EAAE,GAAG,EAAE,QAAQ;AACf,CAAC,CAAC;AACK,SAAS,UAAU,CAAC,YAAY,GAAG,CAAC,EAAE,OAAO,EAAE;AACtD,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,cAAc,CAAC,cAAc,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,CAAC;AACpF,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACpE,EAAE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9E,EAAE,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9E,EAAE,MAAM,GAAG,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC1D,EAAE,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC9D,EAAE,OAAO,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;AACvD;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { useRef, useEffect, useCallback } from 'react';
2
- import { useCallbackRef } from '../use-callback-ref/use-callback-ref.js';
2
+ import { useCallbackRef } from '../use-callback-ref/use-callback-ref.mjs';
3
3
 
4
4
  function useDebounceCallback(callback, delay) {
5
5
  const handleCallback = useCallbackRef(callback);
@@ -12,4 +12,4 @@ function useDebounceCallback(callback, delay) {
12
12
  }
13
13
 
14
14
  export { useDebounceCallback };
15
- //# sourceMappingURL=use-debounced-callback.js.map
15
+ //# sourceMappingURL=use-debounced-callback.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-debounced-callback.mjs","sources":["../../src/use-debounced-callback/use-debounced-callback.ts"],"sourcesContent":["import { useRef, useEffect, useCallback } from 'react';\nimport { useCallbackRef } from '../use-callback-ref/use-callback-ref';\n\nexport function useDebounceCallback(callback: () => void, delay: number) {\n const handleCallback = useCallbackRef(callback);\n const debounceTimerRef = useRef(0);\n useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);\n return useCallback(() => {\n window.clearTimeout(debounceTimerRef.current);\n debounceTimerRef.current = window.setTimeout(handleCallback, delay);\n }, [handleCallback, delay]);\n}\n"],"names":[],"mappings":";;;AAEO,SAAS,mBAAmB,CAAC,QAAQ,EAAE,KAAK,EAAE;AACrD,EAAE,MAAM,cAAc,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAC;AAClD,EAAE,MAAM,gBAAgB,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACrC,EAAE,SAAS,CAAC,MAAM,MAAM,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;AAC3E,EAAE,OAAO,WAAW,CAAC,MAAM;AAC3B,IAAI,MAAM,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;AAClD,IAAI,gBAAgB,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;AACxE,GAAG,EAAE,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9B;;;;"}
@@ -0,0 +1,28 @@
1
+ import { useState, useRef, useEffect, useCallback } from 'react';
2
+
3
+ function useDebouncedState(defaultValue, wait, options = { leading: false }) {
4
+ const [value, setValue] = useState(defaultValue);
5
+ const timeoutRef = useRef(null);
6
+ const leadingRef = useRef(true);
7
+ const clearTimeout = () => window.clearTimeout(timeoutRef.current);
8
+ useEffect(() => clearTimeout, []);
9
+ const debouncedSetValue = useCallback(
10
+ (newValue) => {
11
+ clearTimeout();
12
+ if (leadingRef.current && options.leading) {
13
+ setValue(newValue);
14
+ } else {
15
+ timeoutRef.current = window.setTimeout(() => {
16
+ leadingRef.current = true;
17
+ setValue(newValue);
18
+ }, wait);
19
+ }
20
+ leadingRef.current = false;
21
+ },
22
+ [options.leading]
23
+ );
24
+ return [value, debouncedSetValue];
25
+ }
26
+
27
+ export { useDebouncedState };
28
+ //# sourceMappingURL=use-debounced-state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-debounced-state.mjs","sources":["../../src/use-debounced-state/use-debounced-state.ts"],"sourcesContent":["import { useEffect, useRef, useState, useCallback } from 'react';\n\nexport function useDebouncedState<T = any>(\n defaultValue: T,\n wait: number,\n options = { leading: false }\n) {\n const [value, setValue] = useState(defaultValue);\n const timeoutRef = useRef<number | null>(null);\n const leadingRef = useRef(true);\n\n const clearTimeout = () => window.clearTimeout(timeoutRef.current!);\n useEffect(() => clearTimeout, []);\n\n const debouncedSetValue = useCallback(\n (newValue: T) => {\n clearTimeout();\n if (leadingRef.current && options.leading) {\n setValue(newValue);\n } else {\n timeoutRef.current = window.setTimeout(() => {\n leadingRef.current = true;\n setValue(newValue);\n }, wait);\n }\n leadingRef.current = false;\n },\n [options.leading]\n );\n\n return [value, debouncedSetValue] as const;\n}\n"],"names":[],"mappings":";;AACO,SAAS,iBAAiB,CAAC,YAAY,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;AACpF,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;AACnD,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AACrE,EAAE,SAAS,CAAC,MAAM,YAAY,EAAE,EAAE,CAAC,CAAC;AACpC,EAAE,MAAM,iBAAiB,GAAG,WAAW;AACvC,IAAI,CAAC,QAAQ,KAAK;AAClB,MAAM,YAAY,EAAE,CAAC;AACrB,MAAM,IAAI,UAAU,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;AACjD,QAAQ,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC3B,OAAO,MAAM;AACb,QAAQ,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AACrD,UAAU,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;AACpC,UAAU,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7B,SAAS,EAAE,IAAI,CAAC,CAAC;AACjB,OAAO;AACP,MAAM,UAAU,CAAC,OAAO,GAAG,KAAK,CAAC;AACjC,KAAK;AACL,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;AACrB,GAAG,CAAC;AACJ,EAAE,OAAO,CAAC,KAAK,EAAE,iBAAiB,CAAC,CAAC;AACpC;;;;"}
@@ -28,4 +28,4 @@ function useDebouncedValue(value, wait, options = { leading: false }) {
28
28
  }
29
29
 
30
30
  export { useDebouncedValue };
31
- //# sourceMappingURL=use-debounced-value.js.map
31
+ //# sourceMappingURL=use-debounced-value.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-debounced-value.mjs","sources":["../../src/use-debounced-value/use-debounced-value.ts"],"sourcesContent":["import { useEffect, useState, useRef } from 'react';\n\nexport function useDebouncedValue<T = any>(value: T, wait: number, options = { leading: false }) {\n const [_value, setValue] = useState(value);\n const mountedRef = useRef(false);\n const timeoutRef = useRef<number | null>(null);\n const cooldownRef = useRef(false);\n\n const cancel = () => window.clearTimeout(timeoutRef.current!);\n\n useEffect(() => {\n if (mountedRef.current) {\n if (!cooldownRef.current && options.leading) {\n cooldownRef.current = true;\n setValue(value);\n } else {\n cancel();\n timeoutRef.current = window.setTimeout(() => {\n cooldownRef.current = false;\n setValue(value);\n }, wait);\n }\n }\n }, [value, options.leading, wait]);\n\n useEffect(() => {\n mountedRef.current = true;\n return cancel;\n }, []);\n\n return [_value, cancel] as const;\n}\n"],"names":[],"mappings":";;AACO,SAAS,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;AAC7E,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC7C,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACnC,EAAE,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;AAClC,EAAE,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AACpC,EAAE,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC/D,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,IAAI,UAAU,CAAC,OAAO,EAAE;AAC5B,MAAM,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,EAAE;AACnD,QAAQ,WAAW,CAAC,OAAO,GAAG,IAAI,CAAC;AACnC,QAAQ,QAAQ,CAAC,KAAK,CAAC,CAAC;AACxB,OAAO,MAAM;AACb,QAAQ,MAAM,EAAE,CAAC;AACjB,QAAQ,UAAU,CAAC,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,MAAM;AACrD,UAAU,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;AACtC,UAAU,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAS,EAAE,IAAI,CAAC,CAAC;AACjB,OAAO;AACP,KAAK;AACL,GAAG,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;AACrC,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,UAAU,CAAC,OAAO,GAAG,IAAI,CAAC;AAC9B,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAC1B;;;;"}
@@ -18,4 +18,4 @@ function useDidUpdate(fn, dependencies) {
18
18
  }
19
19
 
20
20
  export { useDidUpdate };
21
- //# sourceMappingURL=use-did-update.js.map
21
+ //# sourceMappingURL=use-did-update.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-did-update.mjs","sources":["../../src/use-did-update/use-did-update.ts"],"sourcesContent":["import { useEffect, useRef, EffectCallback, DependencyList } from 'react';\n\nexport function useDidUpdate(fn: EffectCallback, dependencies?: DependencyList) {\n const mounted = useRef(false);\n\n useEffect(\n () => () => {\n mounted.current = false;\n },\n []\n );\n\n useEffect(() => {\n if (mounted.current) {\n return fn();\n }\n\n mounted.current = true;\n return undefined;\n }, dependencies);\n}\n"],"names":[],"mappings":";;AACO,SAAS,YAAY,CAAC,EAAE,EAAE,YAAY,EAAE;AAC/C,EAAE,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAChC,EAAE,SAAS;AACX,IAAI,MAAM,MAAM;AAChB,MAAM,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC;AAC9B,KAAK;AACL,IAAI,EAAE;AACN,GAAG,CAAC;AACJ,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,IAAI,OAAO,CAAC,OAAO,EAAE;AACzB,MAAM,OAAO,EAAE,EAAE,CAAC;AAClB,KAAK;AACL,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;AAC3B,IAAI,OAAO,KAAK,CAAC,CAAC;AAClB,GAAG,EAAE,YAAY,CAAC,CAAC;AACnB;;;;"}
@@ -28,4 +28,4 @@ function useDisclosure(initialState = false, callbacks) {
28
28
  }
29
29
 
30
30
  export { useDisclosure };
31
- //# sourceMappingURL=use-disclosure.js.map
31
+ //# sourceMappingURL=use-disclosure.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-disclosure.mjs","sources":["../../src/use-disclosure/use-disclosure.ts"],"sourcesContent":["import { useState, useCallback } from 'react';\n\nexport function useDisclosure(\n initialState = false,\n callbacks?: { onOpen?(): void; onClose?(): void }\n) {\n const { onOpen, onClose } = callbacks || {};\n const [opened, setOpened] = useState(initialState);\n\n const open = useCallback(() => {\n setOpened((isOpened) => {\n if (!isOpened) {\n onOpen?.();\n return true;\n }\n return isOpened;\n });\n }, [onOpen]);\n\n const close = useCallback(() => {\n setOpened((isOpened) => {\n if (isOpened) {\n onClose?.();\n return false;\n }\n return isOpened;\n });\n }, [onClose]);\n\n const toggle = useCallback(() => {\n opened ? close() : open();\n }, [close, open, opened]);\n\n return [opened, { open, close, toggle }] as const;\n}\n"],"names":[],"mappings":";;AACO,SAAS,aAAa,CAAC,YAAY,GAAG,KAAK,EAAE,SAAS,EAAE;AAC/D,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,SAAS,IAAI,EAAE,CAAC;AAC9C,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAAC;AACrD,EAAE,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM;AACjC,IAAI,SAAS,CAAC,CAAC,QAAQ,KAAK;AAC5B,MAAM,IAAI,CAAC,QAAQ,EAAE;AACrB,QAAQ,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC;AAC3C,QAAQ,OAAO,IAAI,CAAC;AACpB,OAAO;AACP,MAAM,OAAO,QAAQ,CAAC;AACtB,KAAK,CAAC,CAAC;AACP,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AACf,EAAE,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM;AAClC,IAAI,SAAS,CAAC,CAAC,QAAQ,KAAK;AAC5B,MAAM,IAAI,QAAQ,EAAE;AACpB,QAAQ,OAAO,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,OAAO,EAAE,CAAC;AAC7C,QAAQ,OAAO,KAAK,CAAC;AACrB,OAAO;AACP,MAAM,OAAO,QAAQ,CAAC;AACtB,KAAK,CAAC,CAAC;AACP,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;AAChB,EAAE,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM;AACnC,IAAI,MAAM,GAAG,KAAK,EAAE,GAAG,IAAI,EAAE,CAAC;AAC9B,GAAG,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;AAC5B,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;AAC3C;;;;"}
@@ -1,4 +1,4 @@
1
- import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.js';
1
+ import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.mjs';
2
2
 
3
3
  function useDocumentTitle(title) {
4
4
  useIsomorphicEffect(() => {
@@ -9,4 +9,4 @@ function useDocumentTitle(title) {
9
9
  }
10
10
 
11
11
  export { useDocumentTitle };
12
- //# sourceMappingURL=use-document-title.js.map
12
+ //# sourceMappingURL=use-document-title.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-document-title.mjs","sources":["../../src/use-document-title/use-document-title.ts"],"sourcesContent":["import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nexport function useDocumentTitle(title: string) {\n useIsomorphicEffect(() => {\n if (typeof title === 'string' && title.trim().length > 0) {\n document.title = title.trim();\n }\n }, [title]);\n}\n"],"names":[],"mappings":";;AACO,SAAS,gBAAgB,CAAC,KAAK,EAAE;AACxC,EAAE,mBAAmB,CAAC,MAAM;AAC5B,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE;AAC9D,MAAM,QAAQ,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC;AACpC,KAAK;AACL,GAAG,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACd;;;;"}
@@ -11,4 +11,4 @@ function useDocumentVisibility() {
11
11
  }
12
12
 
13
13
  export { useDocumentVisibility };
14
- //# sourceMappingURL=use-document-visibility.js.map
14
+ //# sourceMappingURL=use-document-visibility.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-document-visibility.mjs","sources":["../../src/use-document-visibility/use-document-visibility.ts"],"sourcesContent":["import { useEffect, useState } from 'react';\n\nexport function useDocumentVisibility(): DocumentVisibilityState {\n const [documentVisibility, setDocumentVisibility] = useState<DocumentVisibilityState>('visible');\n\n useEffect(() => {\n const listener = () => setDocumentVisibility(document.visibilityState);\n document.addEventListener('visibilitychange', listener);\n return () => document.removeEventListener('visibilitychange', listener);\n }, []);\n\n return documentVisibility;\n}\n"],"names":[],"mappings":";;AACO,SAAS,qBAAqB,GAAG;AACxC,EAAE,MAAM,CAAC,kBAAkB,EAAE,qBAAqB,CAAC,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;AAC1E,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,MAAM,QAAQ,GAAG,MAAM,qBAAqB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;AAC3E,IAAI,QAAQ,CAAC,gBAAgB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAC5D,IAAI,OAAO,MAAM,QAAQ,CAAC,mBAAmB,CAAC,kBAAkB,EAAE,QAAQ,CAAC,CAAC;AAC5E,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAE,OAAO,kBAAkB,CAAC;AAC5B;;;;"}
@@ -16,4 +16,4 @@ function useEventListener(type, listener, options) {
16
16
  }
17
17
 
18
18
  export { useEventListener };
19
- //# sourceMappingURL=use-event-listener.js.map
19
+ //# sourceMappingURL=use-event-listener.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-event-listener.mjs","sources":["../../src/use-event-listener/use-event-listener.ts"],"sourcesContent":["import { useRef, useEffect } from 'react';\n\nexport function useEventListener<K extends keyof HTMLElementEventMap, T extends HTMLElement = any>(\n type: K,\n listener: (this: HTMLDivElement, ev: HTMLElementEventMap[K]) => any,\n options?: boolean | AddEventListenerOptions\n) {\n const ref = useRef<T>();\n\n useEffect(() => {\n if (ref.current) {\n ref.current.addEventListener(type, listener as any, options);\n return () => ref.current?.removeEventListener(type, listener as any, options);\n }\n return undefined;\n }, [listener, options]);\n\n return ref;\n}\n"],"names":[],"mappings":";;AACO,SAAS,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE;AAC1D,EAAE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;AACvB,EAAE,SAAS,CAAC,MAAM;AAClB,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE;AACrB,MAAM,GAAG,CAAC,OAAO,CAAC,gBAAgB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC5D,MAAM,OAAO,MAAM;AACnB,QAAQ,IAAI,EAAE,CAAC;AACf,QAAQ,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACrG,OAAO,CAAC;AACR,KAAK;AACL,IAAI,OAAO,KAAK,CAAC,CAAC;AAClB,GAAG,EAAE,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC1B,EAAE,OAAO,GAAG,CAAC;AACb;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { useState, useCallback } from 'react';
2
- import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.js';
2
+ import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.mjs';
3
3
 
4
4
  function useEyeDropper() {
5
5
  const [supported, setSupported] = useState(false);
@@ -20,4 +20,4 @@ function useEyeDropper() {
20
20
  }
21
21
 
22
22
  export { useEyeDropper };
23
- //# sourceMappingURL=use-eye-dropper.js.map
23
+ //# sourceMappingURL=use-eye-dropper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-eye-dropper.mjs","sources":["../../src/use-eye-dropper/use-eye-dropper.ts"],"sourcesContent":["import { useCallback, useState } from 'react';\nimport { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\ninterface EyeDropperOpenOptions {\n signal?: AbortSignal;\n}\n\nexport interface EyeDropperOpenReturnType {\n sRGBHex: string;\n}\n\nexport function useEyeDropper() {\n const [supported, setSupported] = useState(false);\n\n useIsomorphicEffect(() => {\n setSupported(typeof window !== 'undefined' && 'EyeDropper' in window);\n }, []);\n\n const open = useCallback(\n (options: EyeDropperOpenOptions = {}): Promise<EyeDropperOpenReturnType | undefined> => {\n if (supported) {\n const eyeDropper = new (window as any).EyeDropper();\n return eyeDropper.open(options);\n }\n\n return Promise.resolve(undefined);\n },\n [supported]\n );\n\n return { supported, open };\n}\n"],"names":[],"mappings":";;;AAEO,SAAS,aAAa,GAAG;AAChC,EAAE,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpD,EAAE,mBAAmB,CAAC,MAAM;AAC5B,IAAI,YAAY,CAAC,OAAO,MAAM,KAAK,WAAW,IAAI,YAAY,IAAI,MAAM,CAAC,CAAC;AAC1E,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAE,MAAM,IAAI,GAAG,WAAW;AAC1B,IAAI,CAAC,OAAO,GAAG,EAAE,KAAK;AACtB,MAAM,IAAI,SAAS,EAAE;AACrB,QAAQ,MAAM,UAAU,GAAG,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;AACnD,QAAQ,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACxC,OAAO;AACP,MAAM,OAAO,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;AACrC,KAAK;AACL,IAAI,CAAC,SAAS,CAAC;AACf,GAAG,CAAC;AACJ,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC7B;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { useRef } from 'react';
2
- import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.js';
2
+ import { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect.mjs';
3
3
 
4
4
  const MIME_TYPES = {
5
5
  ico: "image/x-icon",
@@ -32,4 +32,4 @@ function useFavicon(url) {
32
32
  }
33
33
 
34
34
  export { useFavicon };
35
- //# sourceMappingURL=use-favicon.js.map
35
+ //# sourceMappingURL=use-favicon.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-favicon.mjs","sources":["../../src/use-favicon/use-favicon.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { useIsomorphicEffect } from '../use-isomorphic-effect/use-isomorphic-effect';\n\nconst MIME_TYPES = {\n ico: 'image/x-icon',\n png: 'image/png',\n svg: 'image/svg+xml',\n gif: 'image/gif',\n};\n\nexport function useFavicon(url: string) {\n const link = useRef<HTMLLinkElement>();\n\n useIsomorphicEffect(() => {\n if (!url) {\n return;\n }\n\n if (!link.current) {\n const existingElements = document.querySelectorAll<HTMLLinkElement>('link[rel*=\"icon\"]');\n existingElements.forEach((element) => document.head.removeChild(element));\n\n const element = document.createElement('link');\n element.rel = 'shortcut icon';\n link.current = element;\n document.querySelector('head')!.appendChild(element);\n }\n\n const splittedUrl = url.split('.');\n link.current.setAttribute(\n 'type',\n // @ts-ignore\n MIME_TYPES[splittedUrl[splittedUrl.length - 1].toLowerCase()]\n );\n link.current.setAttribute('href', url);\n }, [url]);\n}\n"],"names":[],"mappings":";;;AAEA,MAAM,UAAU,GAAG;AACnB,EAAE,GAAG,EAAE,cAAc;AACrB,EAAE,GAAG,EAAE,WAAW;AAClB,EAAE,GAAG,EAAE,eAAe;AACtB,EAAE,GAAG,EAAE,WAAW;AAClB,CAAC,CAAC;AACK,SAAS,UAAU,CAAC,GAAG,EAAE;AAChC,EAAE,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC;AACxB,EAAE,mBAAmB,CAAC,MAAM;AAC5B,IAAI,IAAI,CAAC,GAAG,EAAE;AACd,MAAM,OAAO;AACb,KAAK;AACL,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACvB,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CAAC,gBAAgB,CAAC,mBAAmB,CAAC,CAAC;AAC9E,MAAM,gBAAgB,CAAC,OAAO,CAAC,CAAC,QAAQ,KAAK,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC;AAClF,MAAM,MAAM,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACrD,MAAM,OAAO,CAAC,GAAG,GAAG,eAAe,CAAC;AACpC,MAAM,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;AAC7B,MAAM,QAAQ,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC1D,KAAK;AACL,IAAI,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACvC,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY;AAC7B,MAAM,MAAM;AACZ;AACA,MAAM,UAAU,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AACnE,KAAK,CAAC;AACN,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC3C,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;AACZ;;;;"}
@@ -1,5 +1,5 @@
1
1
  import { useRef } from 'react';
2
- import { useDidUpdate } from '../use-did-update/use-did-update.js';
2
+ import { useDidUpdate } from '../use-did-update/use-did-update.mjs';
3
3
 
4
4
  function useFocusReturn({ opened, shouldReturnFocus = true }) {
5
5
  const lastActiveElement = useRef();
@@ -31,4 +31,4 @@ function useFocusReturn({ opened, shouldReturnFocus = true }) {
31
31
  }
32
32
 
33
33
  export { useFocusReturn };
34
- //# sourceMappingURL=use-focus-return.js.map
34
+ //# sourceMappingURL=use-focus-return.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-focus-return.mjs","sources":["../../src/use-focus-return/use-focus-return.ts"],"sourcesContent":["import { useRef } from 'react';\nimport { useDidUpdate } from '../use-did-update/use-did-update';\n\ninterface UseFocusReturn {\n opened: boolean;\n shouldReturnFocus?: boolean;\n}\n\n/** Returns focus to last active element, used in Modal and Drawer */\nexport function useFocusReturn({ opened, shouldReturnFocus = true }: UseFocusReturn) {\n const lastActiveElement = useRef<HTMLElement>();\n const returnFocus = () => {\n if (\n lastActiveElement.current &&\n 'focus' in lastActiveElement.current &&\n typeof lastActiveElement.current.focus === 'function'\n ) {\n lastActiveElement.current?.focus({ preventScroll: true });\n }\n };\n\n useDidUpdate(() => {\n let timeout = -1;\n\n const clearFocusTimeout = (event: KeyboardEvent) => {\n if (event.key === 'Tab') {\n window.clearTimeout(timeout);\n }\n };\n\n document.addEventListener('keydown', clearFocusTimeout);\n\n if (opened) {\n lastActiveElement.current = document.activeElement as HTMLElement;\n } else if (shouldReturnFocus) {\n timeout = window.setTimeout(returnFocus, 10);\n }\n\n return () => {\n window.clearTimeout(timeout);\n document.removeEventListener('keydown', clearFocusTimeout);\n };\n }, [opened, shouldReturnFocus]);\n\n return returnFocus;\n}\n"],"names":[],"mappings":";;;AAEO,SAAS,cAAc,CAAC,EAAE,MAAM,EAAE,iBAAiB,GAAG,IAAI,EAAE,EAAE;AACrE,EAAE,MAAM,iBAAiB,GAAG,MAAM,EAAE,CAAC;AACrC,EAAE,MAAM,WAAW,GAAG,MAAM;AAC5B,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,IAAI,iBAAiB,CAAC,OAAO,IAAI,OAAO,IAAI,iBAAiB,CAAC,OAAO,IAAI,OAAO,iBAAiB,CAAC,OAAO,CAAC,KAAK,KAAK,UAAU,EAAE;AACpI,MAAM,CAAC,EAAE,GAAG,iBAAiB,CAAC,OAAO,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5F,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,YAAY,CAAC,MAAM;AACrB,IAAI,IAAI,OAAO,GAAG,CAAC,CAAC,CAAC;AACrB,IAAI,MAAM,iBAAiB,GAAG,CAAC,KAAK,KAAK;AACzC,MAAM,IAAI,KAAK,CAAC,GAAG,KAAK,KAAK,EAAE;AAC/B,QAAQ,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACrC,OAAO;AACP,KAAK,CAAC;AACN,IAAI,QAAQ,CAAC,gBAAgB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAC5D,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,iBAAiB,CAAC,OAAO,GAAG,QAAQ,CAAC,aAAa,CAAC;AACzD,KAAK,MAAM,IAAI,iBAAiB,EAAE;AAClC,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AACnD,KAAK;AACL,IAAI,OAAO,MAAM;AACjB,MAAM,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AACnC,MAAM,QAAQ,CAAC,mBAAmB,CAAC,SAAS,EAAE,iBAAiB,CAAC,CAAC;AACjE,KAAK,CAAC;AACN,GAAG,EAAE,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC,CAAC;AAClC,EAAE,OAAO,WAAW,CAAC;AACrB;;;;"}
@@ -1,4 +1,4 @@
1
- import { randomId } from '../utils/random-id/random-id.js';
1
+ import { randomId } from '../utils/random-id/random-id.mjs';
2
2
 
3
3
  function createAriaHider(containerNode, selector = "body > :not(script)") {
4
4
  const id = randomId();
@@ -40,4 +40,4 @@ function createAriaHider(containerNode, selector = "body > :not(script)") {
40
40
  }
41
41
 
42
42
  export { createAriaHider };
43
- //# sourceMappingURL=create-aria-hider.js.map
43
+ //# sourceMappingURL=create-aria-hider.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-aria-hider.mjs","sources":["../../src/use-focus-trap/create-aria-hider.ts"],"sourcesContent":["import { randomId } from '../utils';\n\ninterface Value {\n node: HTMLElement;\n ariaHidden: string | null;\n}\n\nexport function createAriaHider(\n containerNode: HTMLElement,\n selector: string = 'body > :not(script)'\n) {\n const id = randomId();\n\n const rootNodes: (Value | undefined)[] = Array.from<HTMLElement>(\n document.querySelectorAll(selector)\n ).map((node) => {\n if (node?.shadowRoot?.contains(containerNode) || node.contains(containerNode)) {\n return undefined;\n }\n\n const ariaHidden = node.getAttribute('aria-hidden');\n const prevAriaHidden = node.getAttribute('data-hidden');\n const prevFocusId = node.getAttribute('data-focus-id');\n\n node.setAttribute('data-focus-id', id);\n\n if (ariaHidden === null || ariaHidden === 'false') {\n node.setAttribute('aria-hidden', 'true');\n } else if (!prevAriaHidden && !prevFocusId) {\n node.setAttribute('data-hidden', ariaHidden);\n }\n\n return {\n node,\n ariaHidden: prevAriaHidden || null,\n };\n });\n\n return () => {\n rootNodes.forEach((item) => {\n if (!item || id !== item.node.getAttribute('data-focus-id')) {\n return;\n }\n\n if (item.ariaHidden === null) {\n item.node.removeAttribute('aria-hidden');\n } else {\n item.node.setAttribute('aria-hidden', item.ariaHidden);\n }\n\n item.node.removeAttribute('data-focus-id');\n item.node.removeAttribute('data-hidden');\n });\n };\n}\n"],"names":[],"mappings":";;AACO,SAAS,eAAe,CAAC,aAAa,EAAE,QAAQ,GAAG,qBAAqB,EAAE;AACjF,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;AACxB,EAAE,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI;AAC9B,IAAI,QAAQ,CAAC,gBAAgB,CAAC,QAAQ,CAAC;AACvC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK;AAClB,IAAI,IAAI,EAAE,CAAC;AACX,IAAI,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI,IAAI,IAAI,GAAG,KAAK,CAAC,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE;AACxI,MAAM,OAAO,KAAK,CAAC,CAAC;AACpB,KAAK;AACL,IAAI,MAAM,UAAU,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AACxD,IAAI,MAAM,cAAc,GAAG,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC;AAC5D,IAAI,MAAM,WAAW,GAAG,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,CAAC;AAC3D,IAAI,IAAI,CAAC,YAAY,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC;AAC3C,IAAI,IAAI,UAAU,KAAK,IAAI,IAAI,UAAU,KAAK,OAAO,EAAE;AACvD,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,MAAM,CAAC,CAAC;AAC/C,KAAK,MAAM,IAAI,CAAC,cAAc,IAAI,CAAC,WAAW,EAAE;AAChD,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,UAAU,CAAC,CAAC;AACnD,KAAK;AACL,IAAI,OAAO;AACX,MAAM,IAAI;AACV,MAAM,UAAU,EAAE,cAAc,IAAI,IAAI;AACxC,KAAK,CAAC;AACN,GAAG,CAAC,CAAC;AACL,EAAE,OAAO,MAAM;AACf,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK;AAChC,MAAM,IAAI,CAAC,IAAI,IAAI,EAAE,KAAK,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,eAAe,CAAC,EAAE;AACnE,QAAQ,OAAO;AACf,OAAO;AACP,MAAM,IAAI,IAAI,CAAC,UAAU,KAAK,IAAI,EAAE;AACpC,QAAQ,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACjD,OAAO,MAAM;AACb,QAAQ,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;AAC/D,OAAO;AACP,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;AACjD,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AAC/C,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ;;;;"}
@@ -1,4 +1,4 @@
1
- import { findTabbableDescendants } from './tabbable.js';
1
+ import { findTabbableDescendants } from './tabbable.mjs';
2
2
 
3
3
  function scopeTab(node, event) {
4
4
  const tabbable = findTabbableDescendants(node);
@@ -20,4 +20,4 @@ function scopeTab(node, event) {
20
20
  }
21
21
 
22
22
  export { scopeTab };
23
- //# sourceMappingURL=scope-tab.js.map
23
+ //# sourceMappingURL=scope-tab.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-tab.mjs","sources":["../../src/use-focus-trap/scope-tab.ts"],"sourcesContent":["import { findTabbableDescendants } from './tabbable';\n\nexport function scopeTab(node: HTMLElement, event: KeyboardEvent) {\n const tabbable = findTabbableDescendants(node);\n if (!tabbable.length) {\n event.preventDefault();\n return;\n }\n const finalTabbable = tabbable[event.shiftKey ? 0 : tabbable.length - 1];\n const root = node.getRootNode() as unknown as DocumentOrShadowRoot;\n const leavingFinalTabbable = finalTabbable === root.activeElement || node === root.activeElement;\n\n if (!leavingFinalTabbable) {\n return;\n }\n\n event.preventDefault();\n\n const target = tabbable[event.shiftKey ? tabbable.length - 1 : 0];\n\n if (target) {\n target.focus();\n }\n}\n"],"names":[],"mappings":";;AACO,SAAS,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE;AACtC,EAAE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,IAAI,CAAC,CAAC;AACjD,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;AACxB,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;AAC3B,IAAI,OAAO;AACX,GAAG;AACH,EAAE,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC3E,EAAE,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;AAClC,EAAE,MAAM,oBAAoB,GAAG,aAAa,KAAK,IAAI,CAAC,aAAa,IAAI,IAAI,KAAK,IAAI,CAAC,aAAa,CAAC;AACnG,EAAE,IAAI,CAAC,oBAAoB,EAAE;AAC7B,IAAI,OAAO;AACX,GAAG;AACH,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC;AACzB,EAAE,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACpE,EAAE,IAAI,MAAM,EAAE;AACd,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;AACnB,GAAG;AACH;;;;"}
@@ -49,4 +49,4 @@ function findTabbableDescendants(element) {
49
49
  }
50
50
 
51
51
  export { FOCUS_SELECTOR, findTabbableDescendants, focusable, tabbable };
52
- //# sourceMappingURL=tabbable.js.map
52
+ //# sourceMappingURL=tabbable.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tabbable.mjs","sources":["../../src/use-focus-trap/tabbable.ts"],"sourcesContent":["const TABBABLE_NODES = /input|select|textarea|button|object/;\nexport const FOCUS_SELECTOR = 'a, input, select, textarea, button, object, [tabindex]';\n\nfunction hidden(element: HTMLElement) {\n if (process.env.NODE_ENV === 'test') {\n return false;\n }\n\n return element.style.display === 'none';\n}\n\nfunction visible(element: HTMLElement) {\n const isHidden =\n element.getAttribute('aria-hidden') ||\n element.getAttribute('hidden') ||\n element.getAttribute('type') === 'hidden';\n\n if (isHidden) {\n return false;\n }\n\n let parentElement: HTMLElement = element;\n while (parentElement) {\n if (parentElement === document.body || parentElement.nodeType === 11) {\n break;\n }\n\n if (hidden(parentElement)) {\n return false;\n }\n\n parentElement = parentElement.parentNode as HTMLElement;\n }\n\n return true;\n}\n\nfunction getElementTabIndex(element: HTMLElement) {\n let tabIndex: string | null | undefined = element.getAttribute('tabindex');\n if (tabIndex === null) {\n tabIndex = undefined;\n }\n return parseInt(tabIndex as string, 10);\n}\n\nexport function focusable(element: HTMLElement) {\n const nodeName = element.nodeName.toLowerCase();\n const isTabIndexNotNaN = !Number.isNaN(getElementTabIndex(element));\n const res =\n // @ts-ignore\n (TABBABLE_NODES.test(nodeName) && !element.disabled) ||\n (element instanceof HTMLAnchorElement ? element.href || isTabIndexNotNaN : isTabIndexNotNaN);\n\n return res && visible(element);\n}\n\nexport function tabbable(element: HTMLElement) {\n const tabIndex = getElementTabIndex(element);\n const isTabIndexNaN = Number.isNaN(tabIndex);\n return (isTabIndexNaN || tabIndex >= 0) && focusable(element);\n}\n\nexport function findTabbableDescendants(element: HTMLElement): HTMLElement[] {\n return Array.from(element.querySelectorAll<HTMLElement>(FOCUS_SELECTOR)).filter(tabbable);\n}\n"],"names":[],"mappings":"AAAA,MAAM,cAAc,GAAG,qCAAqC,CAAC;AACjD,MAAC,cAAc,GAAG,yDAAyD;AACvF,SAAS,MAAM,CAAC,OAAO,EAAE;AACzB,EAAE,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM,EAAE;AACvC,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH,EAAE,OAAO,OAAO,CAAC,KAAK,CAAC,OAAO,KAAK,MAAM,CAAC;AAC1C,CAAC;AACD,SAAS,OAAO,CAAC,OAAO,EAAE;AAC1B,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,QAAQ,CAAC;AACtI,EAAE,IAAI,QAAQ,EAAE;AAChB,IAAI,OAAO,KAAK,CAAC;AACjB,GAAG;AACH,EAAE,IAAI,aAAa,GAAG,OAAO,CAAC;AAC9B,EAAE,OAAO,aAAa,EAAE;AACxB,IAAI,IAAI,aAAa,KAAK,QAAQ,CAAC,IAAI,IAAI,aAAa,CAAC,QAAQ,KAAK,EAAE,EAAE;AAC1E,MAAM,MAAM;AACZ,KAAK;AACL,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,EAAE;AAC/B,MAAM,OAAO,KAAK,CAAC;AACnB,KAAK;AACL,IAAI,aAAa,GAAG,aAAa,CAAC,UAAU,CAAC;AAC7C,GAAG;AACH,EAAE,OAAO,IAAI,CAAC;AACd,CAAC;AACD,SAAS,kBAAkB,CAAC,OAAO,EAAE;AACrC,EAAE,IAAI,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;AAClD,EAAE,IAAI,QAAQ,KAAK,IAAI,EAAE;AACzB,IAAI,QAAQ,GAAG,KAAK,CAAC,CAAC;AACtB,GAAG;AACH,EAAE,OAAO,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AACM,SAAS,SAAS,CAAC,OAAO,EAAE;AACnC,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;AAClD,EAAE,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC,CAAC;AACtE,EAAE,MAAM,GAAG;AACX;AACA,IAAI,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO,YAAY,iBAAiB,GAAG,OAAO,CAAC,IAAI,IAAI,gBAAgB,GAAG,gBAAgB,CAAC;AACtJ,GAAG,CAAC;AACJ,EAAE,OAAO,GAAG,IAAI,OAAO,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC;AACM,SAAS,QAAQ,CAAC,OAAO,EAAE;AAClC,EAAE,MAAM,QAAQ,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC/C,EAAE,MAAM,aAAa,GAAG,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC/C,EAAE,OAAO,CAAC,aAAa,IAAI,QAAQ,IAAI,CAAC,KAAK,SAAS,CAAC,OAAO,CAAC,CAAC;AAChE,CAAC;AACM,SAAS,uBAAuB,CAAC,OAAO,EAAE;AACjD,EAAE,OAAO,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,cAAc,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;AAC/E;;;;"}