@mantine/hooks 7.0.0-alpha.9 → 7.0.0-beta.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 (298) hide show
  1. package/cjs/use-callback-ref/use-callback-ref.js +8 -5
  2. package/cjs/use-callback-ref/use-callback-ref.js.map +1 -1
  3. package/cjs/use-click-outside/use-click-outside.js +19 -21
  4. package/cjs/use-click-outside/use-click-outside.js.map +1 -1
  5. package/cjs/use-clipboard/use-clipboard.js +22 -26
  6. package/cjs/use-clipboard/use-clipboard.js.map +1 -1
  7. package/cjs/use-color-scheme/use-color-scheme.js +1 -3
  8. package/cjs/use-color-scheme/use-color-scheme.js.map +1 -1
  9. package/cjs/use-counter/use-counter.js +25 -9
  10. package/cjs/use-counter/use-counter.js.map +1 -1
  11. package/cjs/use-debounced-callback/use-debounced-callback.js +7 -7
  12. package/cjs/use-debounced-callback/use-debounced-callback.js.map +1 -1
  13. package/cjs/use-debounced-state/use-debounced-state.js +18 -19
  14. package/cjs/use-debounced-state/use-debounced-state.js.map +1 -1
  15. package/cjs/use-debounced-value/use-debounced-value.js +24 -25
  16. package/cjs/use-debounced-value/use-debounced-value.js.map +1 -1
  17. package/cjs/use-did-update/use-did-update.js +14 -11
  18. package/cjs/use-did-update/use-did-update.js.map +1 -1
  19. package/cjs/use-disclosure/use-disclosure.js +24 -24
  20. package/cjs/use-disclosure/use-disclosure.js.map +1 -1
  21. package/cjs/use-document-title/use-document-title.js +5 -5
  22. package/cjs/use-document-title/use-document-title.js.map +1 -1
  23. package/cjs/use-document-visibility/use-document-visibility.js +7 -7
  24. package/cjs/use-document-visibility/use-document-visibility.js.map +1 -1
  25. package/cjs/use-event-listener/use-event-listener.js +12 -9
  26. package/cjs/use-event-listener/use-event-listener.js.map +1 -1
  27. package/cjs/use-eye-dropper/use-eye-dropper.js +15 -12
  28. package/cjs/use-eye-dropper/use-eye-dropper.js.map +1 -1
  29. package/cjs/use-favicon/use-favicon.js +25 -23
  30. package/cjs/use-favicon/use-favicon.js.map +1 -1
  31. package/cjs/use-focus-return/use-focus-return.js +25 -29
  32. package/cjs/use-focus-return/use-focus-return.js.map +1 -1
  33. package/cjs/use-focus-trap/create-aria-hider.js +36 -36
  34. package/cjs/use-focus-trap/create-aria-hider.js.map +1 -1
  35. package/cjs/use-focus-trap/scope-tab.js +15 -15
  36. package/cjs/use-focus-trap/scope-tab.js.map +1 -1
  37. package/cjs/use-focus-trap/tabbable.js +33 -35
  38. package/cjs/use-focus-trap/tabbable.js.map +1 -1
  39. package/cjs/use-focus-trap/use-focus-trap.js +67 -67
  40. package/cjs/use-focus-trap/use-focus-trap.js.map +1 -1
  41. package/cjs/use-focus-within/use-focus-within.js +40 -37
  42. package/cjs/use-focus-within/use-focus-within.js.map +1 -1
  43. package/cjs/use-force-update/use-force-update.js +3 -3
  44. package/cjs/use-force-update/use-force-update.js.map +1 -1
  45. package/cjs/use-fullscreen/use-fullscreen.js +79 -83
  46. package/cjs/use-fullscreen/use-fullscreen.js.map +1 -1
  47. package/cjs/use-hash/use-hash.js +16 -16
  48. package/cjs/use-hash/use-hash.js.map +1 -1
  49. package/cjs/use-headroom/use-headroom.js +23 -23
  50. package/cjs/use-headroom/use-headroom.js.map +1 -1
  51. package/cjs/use-hotkeys/parse-hotkey.js +64 -49
  52. package/cjs/use-hotkeys/parse-hotkey.js.map +1 -1
  53. package/cjs/use-hotkeys/use-hotkeys.js +21 -22
  54. package/cjs/use-hotkeys/use-hotkeys.js.map +1 -1
  55. package/cjs/use-hover/use-hover.js +17 -17
  56. package/cjs/use-hover/use-hover.js.map +1 -1
  57. package/cjs/use-id/use-id.js +12 -12
  58. package/cjs/use-id/use-id.js.map +1 -1
  59. package/cjs/use-id/use-react-id.js +3 -3
  60. package/cjs/use-id/use-react-id.js.map +1 -1
  61. package/cjs/use-idle/use-idle.js +42 -26
  62. package/cjs/use-idle/use-idle.js.map +1 -1
  63. package/cjs/use-input-state/use-input-state.js +18 -22
  64. package/cjs/use-input-state/use-input-state.js.map +1 -1
  65. package/cjs/use-intersection/use-intersection.js +20 -17
  66. package/cjs/use-intersection/use-intersection.js.map +1 -1
  67. package/cjs/use-interval/use-interval.js +27 -28
  68. package/cjs/use-interval/use-interval.js.map +1 -1
  69. package/cjs/use-isomorphic-effect/use-isomorphic-effect.js +1 -3
  70. package/cjs/use-isomorphic-effect/use-isomorphic-effect.js.map +1 -1
  71. package/cjs/use-list-state/use-list-state.js +76 -55
  72. package/cjs/use-list-state/use-list-state.js.map +1 -1
  73. package/cjs/use-local-storage/create-storage.js +79 -71
  74. package/cjs/use-local-storage/create-storage.js.map +1 -1
  75. package/cjs/use-local-storage/use-local-storage.js +1 -1
  76. package/cjs/use-local-storage/use-local-storage.js.map +1 -1
  77. package/cjs/use-logger/use-logger.js +8 -9
  78. package/cjs/use-logger/use-logger.js.map +1 -1
  79. package/cjs/use-media-query/use-media-query.js +28 -31
  80. package/cjs/use-media-query/use-media-query.js.map +1 -1
  81. package/cjs/use-merged-ref/use-merged-ref.js +9 -11
  82. package/cjs/use-merged-ref/use-merged-ref.js.map +1 -1
  83. package/cjs/use-mouse/use-mouse.js +46 -25
  84. package/cjs/use-mouse/use-mouse.js.map +1 -1
  85. package/cjs/use-move/use-move.js +87 -88
  86. package/cjs/use-move/use-move.js.map +1 -1
  87. package/cjs/use-network/use-network.js +51 -32
  88. package/cjs/use-network/use-network.js.map +1 -1
  89. package/cjs/use-os/use-os.js +30 -30
  90. package/cjs/use-os/use-os.js.map +1 -1
  91. package/cjs/use-page-leave/use-page-leave.js +4 -4
  92. package/cjs/use-page-leave/use-page-leave.js.map +1 -1
  93. package/cjs/use-pagination/use-pagination.js +63 -58
  94. package/cjs/use-pagination/use-pagination.js.map +1 -1
  95. package/cjs/use-previous/use-previous.js +5 -5
  96. package/cjs/use-previous/use-previous.js.map +1 -1
  97. package/cjs/use-queue/use-queue.js +24 -24
  98. package/cjs/use-queue/use-queue.js.map +1 -1
  99. package/cjs/use-reduced-motion/use-reduced-motion.js +1 -1
  100. package/cjs/use-reduced-motion/use-reduced-motion.js.map +1 -1
  101. package/cjs/use-resize-observer/use-resize-observer.js +39 -38
  102. package/cjs/use-resize-observer/use-resize-observer.js.map +1 -1
  103. package/cjs/use-scroll-into-view/use-scroll-into-view.js +78 -75
  104. package/cjs/use-scroll-into-view/use-scroll-into-view.js.map +1 -1
  105. package/cjs/use-scroll-into-view/utils/ease-in-out-quad.js +1 -1
  106. package/cjs/use-scroll-into-view/utils/ease-in-out-quad.js.map +1 -1
  107. package/cjs/use-scroll-into-view/utils/get-relative-position.js +53 -46
  108. package/cjs/use-scroll-into-view/utils/get-relative-position.js.map +1 -1
  109. package/cjs/use-scroll-into-view/utils/get-scroll-start.js +9 -10
  110. package/cjs/use-scroll-into-view/utils/get-scroll-start.js.map +1 -1
  111. package/cjs/use-scroll-into-view/utils/set-scroll-param.js +11 -14
  112. package/cjs/use-scroll-into-view/utils/set-scroll-param.js.map +1 -1
  113. package/cjs/use-session-storage/use-session-storage.js +1 -1
  114. package/cjs/use-session-storage/use-session-storage.js.map +1 -1
  115. package/cjs/use-set-state/use-set-state.js +22 -3
  116. package/cjs/use-set-state/use-set-state.js.map +1 -1
  117. package/cjs/use-shallow-effect/use-shallow-effect.js +22 -22
  118. package/cjs/use-shallow-effect/use-shallow-effect.js.map +1 -1
  119. package/cjs/use-text-selection/use-text-selection.js +12 -12
  120. package/cjs/use-text-selection/use-text-selection.js.map +1 -1
  121. package/cjs/use-timeout/use-timeout.js +22 -22
  122. package/cjs/use-timeout/use-timeout.js.map +1 -1
  123. package/cjs/use-toggle/use-toggle.js +6 -6
  124. package/cjs/use-toggle/use-toggle.js.map +1 -1
  125. package/cjs/use-uncontrolled/use-uncontrolled.js +18 -10
  126. package/cjs/use-uncontrolled/use-uncontrolled.js.map +1 -1
  127. package/cjs/use-validated-state/use-validated-state.js +17 -14
  128. package/cjs/use-validated-state/use-validated-state.js.map +1 -1
  129. package/cjs/use-viewport-size/use-viewport-size.js +12 -12
  130. package/cjs/use-viewport-size/use-viewport-size.js.map +1 -1
  131. package/cjs/use-window-event/use-window-event.js +4 -4
  132. package/cjs/use-window-event/use-window-event.js.map +1 -1
  133. package/cjs/use-window-scroll/use-window-scroll.js +17 -19
  134. package/cjs/use-window-scroll/use-window-scroll.js.map +1 -1
  135. package/cjs/utils/clamp/clamp.js +10 -1
  136. package/cjs/utils/clamp/clamp.js.map +1 -1
  137. package/cjs/utils/lower-first/lower-first.js +1 -1
  138. package/cjs/utils/lower-first/lower-first.js.map +1 -1
  139. package/cjs/utils/random-id/random-id.js +1 -1
  140. package/cjs/utils/random-id/random-id.js.map +1 -1
  141. package/cjs/utils/range/range.js +2 -2
  142. package/cjs/utils/range/range.js.map +1 -1
  143. package/cjs/utils/shallow-equal/shallow-equal.js +19 -19
  144. package/cjs/utils/shallow-equal/shallow-equal.js.map +1 -1
  145. package/cjs/utils/upper-first/upper-first.js +1 -1
  146. package/cjs/utils/upper-first/upper-first.js.map +1 -1
  147. package/esm/use-callback-ref/use-callback-ref.js +8 -5
  148. package/esm/use-callback-ref/use-callback-ref.js.map +1 -1
  149. package/esm/use-click-outside/use-click-outside.js +19 -21
  150. package/esm/use-click-outside/use-click-outside.js.map +1 -1
  151. package/esm/use-clipboard/use-clipboard.js +22 -26
  152. package/esm/use-clipboard/use-clipboard.js.map +1 -1
  153. package/esm/use-color-scheme/use-color-scheme.js +1 -3
  154. package/esm/use-color-scheme/use-color-scheme.js.map +1 -1
  155. package/esm/use-counter/use-counter.js +25 -9
  156. package/esm/use-counter/use-counter.js.map +1 -1
  157. package/esm/use-debounced-callback/use-debounced-callback.js +7 -7
  158. package/esm/use-debounced-callback/use-debounced-callback.js.map +1 -1
  159. package/esm/use-debounced-state/use-debounced-state.js +18 -19
  160. package/esm/use-debounced-state/use-debounced-state.js.map +1 -1
  161. package/esm/use-debounced-value/use-debounced-value.js +24 -25
  162. package/esm/use-debounced-value/use-debounced-value.js.map +1 -1
  163. package/esm/use-did-update/use-did-update.js +14 -11
  164. package/esm/use-did-update/use-did-update.js.map +1 -1
  165. package/esm/use-disclosure/use-disclosure.js +24 -24
  166. package/esm/use-disclosure/use-disclosure.js.map +1 -1
  167. package/esm/use-document-title/use-document-title.js +5 -5
  168. package/esm/use-document-title/use-document-title.js.map +1 -1
  169. package/esm/use-document-visibility/use-document-visibility.js +7 -7
  170. package/esm/use-document-visibility/use-document-visibility.js.map +1 -1
  171. package/esm/use-event-listener/use-event-listener.js +12 -9
  172. package/esm/use-event-listener/use-event-listener.js.map +1 -1
  173. package/esm/use-eye-dropper/use-eye-dropper.js +15 -12
  174. package/esm/use-eye-dropper/use-eye-dropper.js.map +1 -1
  175. package/esm/use-favicon/use-favicon.js +25 -23
  176. package/esm/use-favicon/use-favicon.js.map +1 -1
  177. package/esm/use-focus-return/use-focus-return.js +25 -29
  178. package/esm/use-focus-return/use-focus-return.js.map +1 -1
  179. package/esm/use-focus-trap/create-aria-hider.js +36 -36
  180. package/esm/use-focus-trap/create-aria-hider.js.map +1 -1
  181. package/esm/use-focus-trap/scope-tab.js +15 -15
  182. package/esm/use-focus-trap/scope-tab.js.map +1 -1
  183. package/esm/use-focus-trap/tabbable.js +33 -35
  184. package/esm/use-focus-trap/tabbable.js.map +1 -1
  185. package/esm/use-focus-trap/use-focus-trap.js +67 -67
  186. package/esm/use-focus-trap/use-focus-trap.js.map +1 -1
  187. package/esm/use-focus-within/use-focus-within.js +40 -37
  188. package/esm/use-focus-within/use-focus-within.js.map +1 -1
  189. package/esm/use-force-update/use-force-update.js +3 -3
  190. package/esm/use-force-update/use-force-update.js.map +1 -1
  191. package/esm/use-fullscreen/use-fullscreen.js +79 -83
  192. package/esm/use-fullscreen/use-fullscreen.js.map +1 -1
  193. package/esm/use-hash/use-hash.js +16 -16
  194. package/esm/use-hash/use-hash.js.map +1 -1
  195. package/esm/use-headroom/use-headroom.js +23 -23
  196. package/esm/use-headroom/use-headroom.js.map +1 -1
  197. package/esm/use-hotkeys/parse-hotkey.js +64 -49
  198. package/esm/use-hotkeys/parse-hotkey.js.map +1 -1
  199. package/esm/use-hotkeys/use-hotkeys.js +21 -22
  200. package/esm/use-hotkeys/use-hotkeys.js.map +1 -1
  201. package/esm/use-hover/use-hover.js +17 -17
  202. package/esm/use-hover/use-hover.js.map +1 -1
  203. package/esm/use-id/use-id.js +12 -12
  204. package/esm/use-id/use-id.js.map +1 -1
  205. package/esm/use-id/use-react-id.js +3 -3
  206. package/esm/use-id/use-react-id.js.map +1 -1
  207. package/esm/use-idle/use-idle.js +42 -26
  208. package/esm/use-idle/use-idle.js.map +1 -1
  209. package/esm/use-input-state/use-input-state.js +18 -22
  210. package/esm/use-input-state/use-input-state.js.map +1 -1
  211. package/esm/use-intersection/use-intersection.js +20 -17
  212. package/esm/use-intersection/use-intersection.js.map +1 -1
  213. package/esm/use-interval/use-interval.js +27 -28
  214. package/esm/use-interval/use-interval.js.map +1 -1
  215. package/esm/use-isomorphic-effect/use-isomorphic-effect.js +1 -3
  216. package/esm/use-isomorphic-effect/use-isomorphic-effect.js.map +1 -1
  217. package/esm/use-list-state/use-list-state.js +76 -55
  218. package/esm/use-list-state/use-list-state.js.map +1 -1
  219. package/esm/use-local-storage/create-storage.js +79 -71
  220. package/esm/use-local-storage/create-storage.js.map +1 -1
  221. package/esm/use-local-storage/use-local-storage.js +1 -1
  222. package/esm/use-local-storage/use-local-storage.js.map +1 -1
  223. package/esm/use-logger/use-logger.js +8 -9
  224. package/esm/use-logger/use-logger.js.map +1 -1
  225. package/esm/use-media-query/use-media-query.js +28 -31
  226. package/esm/use-media-query/use-media-query.js.map +1 -1
  227. package/esm/use-merged-ref/use-merged-ref.js +9 -11
  228. package/esm/use-merged-ref/use-merged-ref.js.map +1 -1
  229. package/esm/use-mouse/use-mouse.js +46 -25
  230. package/esm/use-mouse/use-mouse.js.map +1 -1
  231. package/esm/use-move/use-move.js +87 -88
  232. package/esm/use-move/use-move.js.map +1 -1
  233. package/esm/use-network/use-network.js +51 -32
  234. package/esm/use-network/use-network.js.map +1 -1
  235. package/esm/use-os/use-os.js +30 -30
  236. package/esm/use-os/use-os.js.map +1 -1
  237. package/esm/use-page-leave/use-page-leave.js +4 -4
  238. package/esm/use-page-leave/use-page-leave.js.map +1 -1
  239. package/esm/use-pagination/use-pagination.js +63 -58
  240. package/esm/use-pagination/use-pagination.js.map +1 -1
  241. package/esm/use-previous/use-previous.js +5 -5
  242. package/esm/use-previous/use-previous.js.map +1 -1
  243. package/esm/use-queue/use-queue.js +24 -24
  244. package/esm/use-queue/use-queue.js.map +1 -1
  245. package/esm/use-reduced-motion/use-reduced-motion.js +1 -1
  246. package/esm/use-reduced-motion/use-reduced-motion.js.map +1 -1
  247. package/esm/use-resize-observer/use-resize-observer.js +39 -38
  248. package/esm/use-resize-observer/use-resize-observer.js.map +1 -1
  249. package/esm/use-scroll-into-view/use-scroll-into-view.js +78 -75
  250. package/esm/use-scroll-into-view/use-scroll-into-view.js.map +1 -1
  251. package/esm/use-scroll-into-view/utils/ease-in-out-quad.js +1 -1
  252. package/esm/use-scroll-into-view/utils/ease-in-out-quad.js.map +1 -1
  253. package/esm/use-scroll-into-view/utils/get-relative-position.js +53 -46
  254. package/esm/use-scroll-into-view/utils/get-relative-position.js.map +1 -1
  255. package/esm/use-scroll-into-view/utils/get-scroll-start.js +9 -10
  256. package/esm/use-scroll-into-view/utils/get-scroll-start.js.map +1 -1
  257. package/esm/use-scroll-into-view/utils/set-scroll-param.js +11 -14
  258. package/esm/use-scroll-into-view/utils/set-scroll-param.js.map +1 -1
  259. package/esm/use-session-storage/use-session-storage.js +1 -1
  260. package/esm/use-session-storage/use-session-storage.js.map +1 -1
  261. package/esm/use-set-state/use-set-state.js +22 -3
  262. package/esm/use-set-state/use-set-state.js.map +1 -1
  263. package/esm/use-shallow-effect/use-shallow-effect.js +22 -22
  264. package/esm/use-shallow-effect/use-shallow-effect.js.map +1 -1
  265. package/esm/use-text-selection/use-text-selection.js +12 -12
  266. package/esm/use-text-selection/use-text-selection.js.map +1 -1
  267. package/esm/use-timeout/use-timeout.js +22 -22
  268. package/esm/use-timeout/use-timeout.js.map +1 -1
  269. package/esm/use-toggle/use-toggle.js +6 -6
  270. package/esm/use-toggle/use-toggle.js.map +1 -1
  271. package/esm/use-uncontrolled/use-uncontrolled.js +18 -10
  272. package/esm/use-uncontrolled/use-uncontrolled.js.map +1 -1
  273. package/esm/use-validated-state/use-validated-state.js +17 -14
  274. package/esm/use-validated-state/use-validated-state.js.map +1 -1
  275. package/esm/use-viewport-size/use-viewport-size.js +12 -12
  276. package/esm/use-viewport-size/use-viewport-size.js.map +1 -1
  277. package/esm/use-window-event/use-window-event.js +4 -4
  278. package/esm/use-window-event/use-window-event.js.map +1 -1
  279. package/esm/use-window-scroll/use-window-scroll.js +17 -19
  280. package/esm/use-window-scroll/use-window-scroll.js.map +1 -1
  281. package/esm/utils/clamp/clamp.js +10 -1
  282. package/esm/utils/clamp/clamp.js.map +1 -1
  283. package/esm/utils/lower-first/lower-first.js +1 -1
  284. package/esm/utils/lower-first/lower-first.js.map +1 -1
  285. package/esm/utils/random-id/random-id.js +1 -1
  286. package/esm/utils/random-id/random-id.js.map +1 -1
  287. package/esm/utils/range/range.js +2 -2
  288. package/esm/utils/range/range.js.map +1 -1
  289. package/esm/utils/shallow-equal/shallow-equal.js +19 -19
  290. package/esm/utils/shallow-equal/shallow-equal.js.map +1 -1
  291. package/esm/utils/upper-first/upper-first.js +1 -1
  292. package/esm/utils/upper-first/upper-first.js.map +1 -1
  293. package/lib/use-hover/use-hover.d.ts +1 -0
  294. package/lib/use-mouse/use-mouse.d.ts +1 -0
  295. package/lib/use-move/use-move.d.ts +2 -1
  296. package/lib/use-scroll-into-view/use-scroll-into-view.d.ts +1 -0
  297. package/lib/utils/clamp/clamp.d.ts +1 -1
  298. package/package.json +5 -4
@@ -5,34 +5,33 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var React = require('react');
6
6
 
7
7
  function useInterval(fn, interval) {
8
- const [active, setActive] = React.useState(false);
9
- const intervalRef = React.useRef();
10
- const fnRef = React.useRef();
11
- React.useEffect(() => {
12
- fnRef.current = fn;
13
- }, [fn]);
14
- const start = () => {
15
- setActive((old) => {
16
- if (!old && !intervalRef.current) {
17
- intervalRef.current = window.setInterval(fnRef.current, interval);
18
- }
19
- return true;
20
- });
21
- };
22
- const stop = () => {
23
- setActive(false);
24
- window.clearInterval(intervalRef.current);
25
- intervalRef.current = undefined;
26
- };
27
- const toggle = () => {
28
- if (active) {
29
- stop();
30
- }
31
- else {
32
- start();
33
- }
34
- };
35
- return { start, stop, toggle, active };
8
+ const [active, setActive] = React.useState(false);
9
+ const intervalRef = React.useRef();
10
+ const fnRef = React.useRef();
11
+ React.useEffect(() => {
12
+ fnRef.current = fn;
13
+ }, [fn]);
14
+ const start = () => {
15
+ setActive((old) => {
16
+ if (!old && !intervalRef.current) {
17
+ intervalRef.current = window.setInterval(fnRef.current, interval);
18
+ }
19
+ return true;
20
+ });
21
+ };
22
+ const stop = () => {
23
+ setActive(false);
24
+ window.clearInterval(intervalRef.current);
25
+ intervalRef.current = void 0;
26
+ };
27
+ const toggle = () => {
28
+ if (active) {
29
+ stop();
30
+ } else {
31
+ start();
32
+ }
33
+ };
34
+ return { start, stop, toggle, active };
36
35
  }
37
36
 
38
37
  exports.useInterval = useInterval;
@@ -1 +1 @@
1
- {"version":3,"file":"use-interval.js","sources":["../../src/use-interval/use-interval.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport function useInterval(fn: () => void, interval: number) {\n const [active, setActive] = useState(false);\n const intervalRef = useRef<number>();\n const fnRef = useRef<() => void>();\n\n useEffect(() => {\n fnRef.current = fn;\n }, [fn]);\n\n const start = () => {\n setActive((old) => {\n if (!old && !intervalRef.current) {\n intervalRef.current = window.setInterval(fnRef.current!, interval);\n }\n return true;\n });\n };\n\n const stop = () => {\n setActive(false);\n window.clearInterval(intervalRef.current);\n intervalRef.current = undefined;\n };\n\n const toggle = () => {\n if (active) {\n stop();\n } else {\n start();\n }\n };\n\n return { start, stop, toggle, active };\n}\n"],"names":["useState","useRef","useEffect"],"mappings":";;;;;;SAEgB,WAAW,CAAC,EAAc,EAAE,QAAgB;IAC1D,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,WAAW,GAAGC,YAAM,EAAU,CAAC;IACrC,MAAM,KAAK,GAAGA,YAAM,EAAc,CAAC;IAEnCC,eAAS,CAAC;QACR,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;KACpB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAET,MAAM,KAAK,GAAG;QACZ,SAAS,CAAC,CAAC,GAAG;YACZ,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;gBAChC,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAQ,EAAE,QAAQ,CAAC,CAAC;aACpE;YACD,OAAO,IAAI,CAAC;SACb,CAAC,CAAC;KACJ,CAAC;IAEF,MAAM,IAAI,GAAG;QACX,SAAS,CAAC,KAAK,CAAC,CAAC;QACjB,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QAC1C,WAAW,CAAC,OAAO,GAAG,SAAS,CAAC;KACjC,CAAC;IAEF,MAAM,MAAM,GAAG;QACb,IAAI,MAAM,EAAE;YACV,IAAI,EAAE,CAAC;SACR;aAAM;YACL,KAAK,EAAE,CAAC;SACT;KACF,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACzC;;;;"}
1
+ {"version":3,"file":"use-interval.js","sources":["../../src/use-interval/use-interval.ts"],"sourcesContent":["import { useEffect, useRef, useState } from 'react';\n\nexport function useInterval(fn: () => void, interval: number) {\n const [active, setActive] = useState(false);\n const intervalRef = useRef<number>();\n const fnRef = useRef<() => void>();\n\n useEffect(() => {\n fnRef.current = fn;\n }, [fn]);\n\n const start = () => {\n setActive((old) => {\n if (!old && !intervalRef.current) {\n intervalRef.current = window.setInterval(fnRef.current!, interval);\n }\n return true;\n });\n };\n\n const stop = () => {\n setActive(false);\n window.clearInterval(intervalRef.current);\n intervalRef.current = undefined;\n };\n\n const toggle = () => {\n if (active) {\n stop();\n } else {\n start();\n }\n };\n\n return { start, stop, toggle, active };\n}\n"],"names":["useState","useRef","useEffect"],"mappings":";;;;;;AACO,SAAS,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE;AAC1C,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,GAAGA,cAAQ,CAAC,KAAK,CAAC,CAAC;AAC9C,EAAE,MAAM,WAAW,GAAGC,YAAM,EAAE,CAAC;AAC/B,EAAE,MAAM,KAAK,GAAGA,YAAM,EAAE,CAAC;AACzB,EAAEC,eAAS,CAAC,MAAM;AAClB,IAAI,KAAK,CAAC,OAAO,GAAG,EAAE,CAAC;AACvB,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AACX,EAAE,MAAM,KAAK,GAAG,MAAM;AACtB,IAAI,SAAS,CAAC,CAAC,GAAG,KAAK;AACvB,MAAM,IAAI,CAAC,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE;AACxC,QAAQ,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC1E,OAAO;AACP,MAAM,OAAO,IAAI,CAAC;AAClB,KAAK,CAAC,CAAC;AACP,GAAG,CAAC;AACJ,EAAE,MAAM,IAAI,GAAG,MAAM;AACrB,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,IAAI,MAAM,CAAC,aAAa,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9C,IAAI,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC,CAAC;AACjC,GAAG,CAAC;AACJ,EAAE,MAAM,MAAM,GAAG,MAAM;AACvB,IAAI,IAAI,MAAM,EAAE;AAChB,MAAM,IAAI,EAAE,CAAC;AACb,KAAK,MAAM;AACX,MAAM,KAAK,EAAE,CAAC;AACd,KAAK;AACL,GAAG,CAAC;AACJ,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AACzC;;;;"}
@@ -4,9 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
6
 
7
- // useLayoutEffect will show warning if used during ssr, e.g. with Next.js
8
- // useIsomorphicEffect removes it by replacing useLayoutEffect with useEffect during ssr
9
- const useIsomorphicEffect = typeof document !== 'undefined' ? React.useLayoutEffect : React.useEffect;
7
+ const useIsomorphicEffect = typeof document !== "undefined" ? React.useLayoutEffect : React.useEffect;
10
8
 
11
9
  exports.useIsomorphicEffect = useIsomorphicEffect;
12
10
  //# sourceMappingURL=use-isomorphic-effect.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-isomorphic-effect.js","sources":["../../src/use-isomorphic-effect/use-isomorphic-effect.ts"],"sourcesContent":["import { useEffect, useLayoutEffect } from 'react';\n\n// useLayoutEffect will show warning if used during ssr, e.g. with Next.js\n// useIsomorphicEffect removes it by replacing useLayoutEffect with useEffect during ssr\nexport const useIsomorphicEffect = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n"],"names":["useLayoutEffect","useEffect"],"mappings":";;;;;;AAEA;AACA;MACa,mBAAmB,GAAG,OAAO,QAAQ,KAAK,WAAW,GAAGA,qBAAe,GAAGC;;;;"}
1
+ {"version":3,"file":"use-isomorphic-effect.js","sources":["../../src/use-isomorphic-effect/use-isomorphic-effect.ts"],"sourcesContent":["import { useEffect, useLayoutEffect } from 'react';\n\n// useLayoutEffect will show warning if used during ssr, e.g. with Next.js\n// useIsomorphicEffect removes it by replacing useLayoutEffect with useEffect during ssr\nexport const useIsomorphicEffect = typeof document !== 'undefined' ? useLayoutEffect : useEffect;\n"],"names":["useLayoutEffect","useEffect"],"mappings":";;;;;;AACY,MAAC,mBAAmB,GAAG,OAAO,QAAQ,KAAK,WAAW,GAAGA,qBAAe,GAAGC;;;;"}
@@ -4,62 +4,83 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
6
 
7
+ var __defProp = Object.defineProperty;
8
+ var __defProps = Object.defineProperties;
9
+ var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
10
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
11
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
12
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
13
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
14
+ var __spreadValues = (a, b) => {
15
+ for (var prop in b || (b = {}))
16
+ if (__hasOwnProp.call(b, prop))
17
+ __defNormalProp(a, prop, b[prop]);
18
+ if (__getOwnPropSymbols)
19
+ for (var prop of __getOwnPropSymbols(b)) {
20
+ if (__propIsEnum.call(b, prop))
21
+ __defNormalProp(a, prop, b[prop]);
22
+ }
23
+ return a;
24
+ };
25
+ var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
7
26
  function useListState(initialValue = []) {
8
- const [state, setState] = React.useState(initialValue);
9
- const append = (...items) => setState((current) => [...current, ...items]);
10
- const prepend = (...items) => setState((current) => [...items, ...current]);
11
- const insert = (index, ...items) => setState((current) => [...current.slice(0, index), ...items, ...current.slice(index)]);
12
- const apply = (fn) => setState((current) => current.map((item, index) => fn(item, index)));
13
- const remove = (...indices) => setState((current) => current.filter((_, index) => !indices.includes(index)));
14
- const pop = () => setState((current) => {
15
- const cloned = [...current];
16
- cloned.pop();
17
- return cloned;
18
- });
19
- const shift = () => setState((current) => {
20
- const cloned = [...current];
21
- cloned.shift();
22
- return cloned;
23
- });
24
- const reorder = ({ from, to }) => setState((current) => {
25
- const cloned = [...current];
26
- const item = current[from];
27
- cloned.splice(from, 1);
28
- cloned.splice(to, 0, item);
29
- return cloned;
30
- });
31
- const setItem = (index, item) => setState((current) => {
32
- const cloned = [...current];
33
- cloned[index] = item;
34
- return cloned;
35
- });
36
- const setItemProp = (index, prop, value) => setState((current) => {
37
- const cloned = [...current];
38
- cloned[index] = Object.assign(Object.assign({}, cloned[index]), { [prop]: value });
39
- return cloned;
40
- });
41
- const applyWhere = (condition, fn) => setState((current) => current.map((item, index) => (condition(item, index) ? fn(item, index) : item)));
42
- const filter = (fn) => {
43
- setState((current) => current.filter(fn));
44
- };
45
- return [
46
- state,
47
- {
48
- setState,
49
- append,
50
- prepend,
51
- insert,
52
- pop,
53
- shift,
54
- apply,
55
- applyWhere,
56
- remove,
57
- reorder,
58
- setItem,
59
- setItemProp,
60
- filter,
61
- },
62
- ];
27
+ const [state, setState] = React.useState(initialValue);
28
+ const append = (...items) => setState((current) => [...current, ...items]);
29
+ const prepend = (...items) => setState((current) => [...items, ...current]);
30
+ const insert = (index, ...items) => setState((current) => [...current.slice(0, index), ...items, ...current.slice(index)]);
31
+ const apply = (fn) => setState((current) => current.map((item, index) => fn(item, index)));
32
+ const remove = (...indices) => setState((current) => current.filter((_, index) => !indices.includes(index)));
33
+ const pop = () => setState((current) => {
34
+ const cloned = [...current];
35
+ cloned.pop();
36
+ return cloned;
37
+ });
38
+ const shift = () => setState((current) => {
39
+ const cloned = [...current];
40
+ cloned.shift();
41
+ return cloned;
42
+ });
43
+ const reorder = ({ from, to }) => setState((current) => {
44
+ const cloned = [...current];
45
+ const item = current[from];
46
+ cloned.splice(from, 1);
47
+ cloned.splice(to, 0, item);
48
+ return cloned;
49
+ });
50
+ const setItem = (index, item) => setState((current) => {
51
+ const cloned = [...current];
52
+ cloned[index] = item;
53
+ return cloned;
54
+ });
55
+ const setItemProp = (index, prop, value) => setState((current) => {
56
+ const cloned = [...current];
57
+ cloned[index] = __spreadProps(__spreadValues({}, cloned[index]), { [prop]: value });
58
+ return cloned;
59
+ });
60
+ const applyWhere = (condition, fn) => setState(
61
+ (current) => current.map((item, index) => condition(item, index) ? fn(item, index) : item)
62
+ );
63
+ const filter = (fn) => {
64
+ setState((current) => current.filter(fn));
65
+ };
66
+ return [
67
+ state,
68
+ {
69
+ setState,
70
+ append,
71
+ prepend,
72
+ insert,
73
+ pop,
74
+ shift,
75
+ apply,
76
+ applyWhere,
77
+ remove,
78
+ reorder,
79
+ setItem,
80
+ setItemProp,
81
+ filter
82
+ }
83
+ ];
63
84
  }
64
85
 
65
86
  exports.useListState = useListState;
@@ -1 +1 @@
1
- {"version":3,"file":"use-list-state.js","sources":["../../src/use-list-state/use-list-state.ts"],"sourcesContent":["import React, { useState } from 'react';\n\nexport interface UseListStateHandlers<T> {\n setState: React.Dispatch<React.SetStateAction<T[]>>;\n append: (...items: T[]) => void;\n prepend: (...items: T[]) => void;\n insert: (index: number, ...items: T[]) => void;\n pop: () => void;\n shift: () => void;\n apply: (fn: (item: T, index?: number) => T) => void;\n applyWhere: (\n condition: (item: T, index: number) => boolean,\n fn: (item: T, index?: number) => T\n ) => void;\n remove: (...indices: number[]) => void;\n reorder: ({ from, to }: { from: number; to: number }) => void;\n setItem: (index: number, item: T) => void;\n setItemProp: <K extends keyof T, U extends T[K]>(index: number, prop: K, value: U) => void;\n filter: (fn: (item: T, i: number) => boolean) => void;\n}\n\nexport type UseListState<T> = [T[], UseListStateHandlers<T>];\n\nexport function useListState<T>(initialValue: T[] = []): UseListState<T> {\n const [state, setState] = useState(initialValue);\n\n const append = (...items: T[]) => setState((current) => [...current, ...items]);\n const prepend = (...items: T[]) => setState((current) => [...items, ...current]);\n\n const insert = (index: number, ...items: T[]) =>\n setState((current) => [...current.slice(0, index), ...items, ...current.slice(index)]);\n\n const apply = (fn: (item: T, index?: number) => T) =>\n setState((current) => current.map((item, index) => fn(item, index)));\n\n const remove = (...indices: number[]) =>\n setState((current) => current.filter((_, index) => !indices.includes(index)));\n\n const pop = () =>\n setState((current) => {\n const cloned = [...current];\n cloned.pop();\n return cloned;\n });\n\n const shift = () =>\n setState((current) => {\n const cloned = [...current];\n cloned.shift();\n return cloned;\n });\n\n const reorder = ({ from, to }: { from: number; to: number }) =>\n setState((current) => {\n const cloned = [...current];\n const item = current[from];\n\n cloned.splice(from, 1);\n cloned.splice(to, 0, item);\n\n return cloned;\n });\n\n const setItem = (index: number, item: T) =>\n setState((current) => {\n const cloned = [...current];\n cloned[index] = item;\n return cloned;\n });\n\n const setItemProp = <K extends keyof T, U extends T[K]>(index: number, prop: K, value: U) =>\n setState((current) => {\n const cloned = [...current];\n cloned[index] = { ...cloned[index], [prop]: value };\n return cloned;\n });\n\n const applyWhere = (\n condition: (item: T, index: number) => boolean,\n fn: (item: T, index?: number) => T\n ) =>\n setState((current) =>\n current.map((item, index) => (condition(item, index) ? fn(item, index) : item))\n );\n\n const filter = (fn: (item: T, i: number) => boolean) => {\n setState((current) => current.filter(fn));\n };\n\n return [\n state,\n {\n setState,\n append,\n prepend,\n insert,\n pop,\n shift,\n apply,\n applyWhere,\n remove,\n reorder,\n setItem,\n setItemProp,\n filter,\n },\n ];\n}\n"],"names":["useState"],"mappings":"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"}
1
+ {"version":3,"file":"use-list-state.js","sources":["../../src/use-list-state/use-list-state.ts"],"sourcesContent":["import React, { useState } from 'react';\n\nexport interface UseListStateHandlers<T> {\n setState: React.Dispatch<React.SetStateAction<T[]>>;\n append: (...items: T[]) => void;\n prepend: (...items: T[]) => void;\n insert: (index: number, ...items: T[]) => void;\n pop: () => void;\n shift: () => void;\n apply: (fn: (item: T, index?: number) => T) => void;\n applyWhere: (\n condition: (item: T, index: number) => boolean,\n fn: (item: T, index?: number) => T\n ) => void;\n remove: (...indices: number[]) => void;\n reorder: ({ from, to }: { from: number; to: number }) => void;\n setItem: (index: number, item: T) => void;\n setItemProp: <K extends keyof T, U extends T[K]>(index: number, prop: K, value: U) => void;\n filter: (fn: (item: T, i: number) => boolean) => void;\n}\n\nexport type UseListState<T> = [T[], UseListStateHandlers<T>];\n\nexport function useListState<T>(initialValue: T[] = []): UseListState<T> {\n const [state, setState] = useState(initialValue);\n\n const append = (...items: T[]) => setState((current) => [...current, ...items]);\n const prepend = (...items: T[]) => setState((current) => [...items, ...current]);\n\n const insert = (index: number, ...items: T[]) =>\n setState((current) => [...current.slice(0, index), ...items, ...current.slice(index)]);\n\n const apply = (fn: (item: T, index?: number) => T) =>\n setState((current) => current.map((item, index) => fn(item, index)));\n\n const remove = (...indices: number[]) =>\n setState((current) => current.filter((_, index) => !indices.includes(index)));\n\n const pop = () =>\n setState((current) => {\n const cloned = [...current];\n cloned.pop();\n return cloned;\n });\n\n const shift = () =>\n setState((current) => {\n const cloned = [...current];\n cloned.shift();\n return cloned;\n });\n\n const reorder = ({ from, to }: { from: number; to: number }) =>\n setState((current) => {\n const cloned = [...current];\n const item = current[from];\n\n cloned.splice(from, 1);\n cloned.splice(to, 0, item);\n\n return cloned;\n });\n\n const setItem = (index: number, item: T) =>\n setState((current) => {\n const cloned = [...current];\n cloned[index] = item;\n return cloned;\n });\n\n const setItemProp = <K extends keyof T, U extends T[K]>(index: number, prop: K, value: U) =>\n setState((current) => {\n const cloned = [...current];\n cloned[index] = { ...cloned[index], [prop]: value };\n return cloned;\n });\n\n const applyWhere = (\n condition: (item: T, index: number) => boolean,\n fn: (item: T, index?: number) => T\n ) =>\n setState((current) =>\n current.map((item, index) => (condition(item, index) ? fn(item, index) : item))\n );\n\n const filter = (fn: (item: T, i: number) => boolean) => {\n setState((current) => current.filter(fn));\n };\n\n return [\n state,\n {\n setState,\n append,\n prepend,\n insert,\n pop,\n shift,\n apply,\n applyWhere,\n remove,\n reorder,\n setItem,\n setItemProp,\n filter,\n },\n ];\n}\n"],"names":["useState"],"mappings":";;;;;;AAAA,IAAI,SAAS,GAAG,MAAM,CAAC,cAAc,CAAC;AACtC,IAAI,UAAU,GAAG,MAAM,CAAC,gBAAgB,CAAC;AACzC,IAAI,iBAAiB,GAAG,MAAM,CAAC,yBAAyB,CAAC;AACzD,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;AACF,IAAI,aAAa,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3D,SAAS,YAAY,CAAC,YAAY,GAAG,EAAE,EAAE;AAChD,EAAE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAGA,cAAQ,CAAC,YAAY,CAAC,CAAC;AACnD,EAAE,MAAM,MAAM,GAAG,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,OAAO,EAAE,GAAG,KAAK,CAAC,CAAC,CAAC;AAC7E,EAAE,MAAM,OAAO,GAAG,CAAC,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC;AAC9E,EAAE,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,GAAG,KAAK,KAAK,QAAQ,CAAC,CAAC,OAAO,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7H,EAAE,MAAM,KAAK,GAAG,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AAC7F,EAAE,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,KAAK,QAAQ,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/G,EAAE,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,CAAC,OAAO,KAAK;AAC1C,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;AAChC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;AACjB,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,CAAC,OAAO,KAAK;AAC5C,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;AAChC,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;AACnB,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,OAAO,GAAG,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,QAAQ,CAAC,CAAC,OAAO,KAAK;AAC1D,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;AAChC,IAAI,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAC/B,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAC3B,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;AAC/B,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,IAAI,KAAK,QAAQ,CAAC,CAAC,OAAO,KAAK;AACzD,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;AAChC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC;AACzB,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,WAAW,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,KAAK,QAAQ,CAAC,CAAC,OAAO,KAAK;AACpE,IAAI,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;AAChC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,aAAa,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC;AACxF,IAAI,OAAO,MAAM,CAAC;AAClB,GAAG,CAAC,CAAC;AACL,EAAE,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,EAAE,KAAK,QAAQ;AAChD,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAK,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;AAC9F,GAAG,CAAC;AACJ,EAAE,MAAM,MAAM,GAAG,CAAC,EAAE,KAAK;AACzB,IAAI,QAAQ,CAAC,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;AAC9C,GAAG,CAAC;AACJ,EAAE,OAAO;AACT,IAAI,KAAK;AACT,IAAI;AACJ,MAAM,QAAQ;AACd,MAAM,MAAM;AACZ,MAAM,OAAO;AACb,MAAM,MAAM;AACZ,MAAM,GAAG;AACT,MAAM,KAAK;AACX,MAAM,KAAK;AACX,MAAM,UAAU;AAChB,MAAM,MAAM;AACZ,MAAM,OAAO;AACb,MAAM,OAAO;AACb,MAAM,WAAW;AACjB,MAAM,MAAM;AACZ,KAAK;AACL,GAAG,CAAC;AACJ;;;;"}
@@ -6,81 +6,89 @@ var React = require('react');
6
6
  var useWindowEvent = require('../use-window-event/use-window-event.js');
7
7
 
8
8
  function serializeJSON(value, hookName) {
9
- try {
10
- return JSON.stringify(value);
11
- }
12
- catch (error) {
13
- throw new Error(`@mantine/hooks ${hookName}: Failed to serialize the value`);
14
- }
9
+ try {
10
+ return JSON.stringify(value);
11
+ } catch (error) {
12
+ throw new Error(`@mantine/hooks ${hookName}: Failed to serialize the value`);
13
+ }
15
14
  }
16
15
  function deserializeJSON(value) {
17
- try {
18
- return JSON.parse(value);
19
- }
20
- catch (_a) {
21
- return value;
22
- }
16
+ try {
17
+ return JSON.parse(value);
18
+ } catch (e) {
19
+ return value;
20
+ }
23
21
  }
24
22
  function createStorage(type, hookName) {
25
- const eventName = type === 'localStorage' ? 'mantine-local-storage' : 'mantine-session-storage';
26
- return function useStorage({ key, defaultValue = undefined, getInitialValueInEffect = true, deserialize = deserializeJSON, serialize = (value) => serializeJSON(value, hookName), }) {
27
- const readStorageValue = React.useCallback((skipStorage) => {
28
- if (typeof window === 'undefined' ||
29
- !(type in window) ||
30
- window[type] === null ||
31
- skipStorage) {
32
- return defaultValue;
33
- }
34
- const storageValue = window[type].getItem(key);
35
- return storageValue !== null ? deserialize(storageValue) : defaultValue;
36
- }, [key, defaultValue]);
37
- const [value, setValue] = React.useState(readStorageValue(getInitialValueInEffect));
38
- const setStorageValue = React.useCallback((val) => {
39
- if (val instanceof Function) {
40
- setValue((current) => {
41
- const result = val(current);
42
- window[type].setItem(key, serialize(result));
43
- window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: val(current) } }));
44
- return result;
45
- });
46
- }
47
- else {
48
- window[type].setItem(key, serialize(val));
49
- window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: val } }));
50
- setValue(val);
51
- }
52
- }, [key]);
53
- const removeStorageValue = React.useCallback(() => {
54
- window[type].removeItem(key);
55
- window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: defaultValue } }));
56
- }, []);
57
- useWindowEvent.useWindowEvent('storage', (event) => {
58
- var _a;
59
- if (event.storageArea === window[type] && event.key === key) {
60
- setValue(deserialize((_a = event.newValue) !== null && _a !== void 0 ? _a : undefined));
61
- }
62
- });
63
- useWindowEvent.useWindowEvent(eventName, (event) => {
64
- if (event.detail.key === key) {
65
- setValue(event.detail.value);
66
- }
67
- });
68
- React.useEffect(() => {
69
- if (defaultValue !== undefined && value === undefined) {
70
- setStorageValue(defaultValue);
71
- }
72
- }, [defaultValue, value, setStorageValue]);
73
- React.useEffect(() => {
74
- if (getInitialValueInEffect) {
75
- setValue(readStorageValue());
76
- }
77
- }, []);
78
- return [
79
- value === undefined ? defaultValue : value,
80
- setStorageValue,
81
- removeStorageValue,
82
- ];
83
- };
23
+ const eventName = type === "localStorage" ? "mantine-local-storage" : "mantine-session-storage";
24
+ return function useStorage({
25
+ key,
26
+ defaultValue = void 0,
27
+ getInitialValueInEffect = true,
28
+ deserialize = deserializeJSON,
29
+ serialize = (value) => serializeJSON(value, hookName)
30
+ }) {
31
+ const readStorageValue = React.useCallback(
32
+ (skipStorage) => {
33
+ if (typeof window === "undefined" || !(type in window) || window[type] === null || skipStorage) {
34
+ return defaultValue;
35
+ }
36
+ const storageValue = window[type].getItem(key);
37
+ return storageValue !== null ? deserialize(storageValue) : defaultValue;
38
+ },
39
+ [key, defaultValue]
40
+ );
41
+ const [value, setValue] = React.useState(readStorageValue(getInitialValueInEffect));
42
+ const setStorageValue = React.useCallback(
43
+ (val) => {
44
+ if (val instanceof Function) {
45
+ setValue((current) => {
46
+ const result = val(current);
47
+ window[type].setItem(key, serialize(result));
48
+ window.dispatchEvent(
49
+ new CustomEvent(eventName, { detail: { key, value: val(current) } })
50
+ );
51
+ return result;
52
+ });
53
+ } else {
54
+ window[type].setItem(key, serialize(val));
55
+ window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: val } }));
56
+ setValue(val);
57
+ }
58
+ },
59
+ [key]
60
+ );
61
+ const removeStorageValue = React.useCallback(() => {
62
+ window[type].removeItem(key);
63
+ window.dispatchEvent(new CustomEvent(eventName, { detail: { key, value: defaultValue } }));
64
+ }, []);
65
+ useWindowEvent.useWindowEvent("storage", (event) => {
66
+ var _a;
67
+ if (event.storageArea === window[type] && event.key === key) {
68
+ setValue(deserialize((_a = event.newValue) != null ? _a : void 0));
69
+ }
70
+ });
71
+ useWindowEvent.useWindowEvent(eventName, (event) => {
72
+ if (event.detail.key === key) {
73
+ setValue(event.detail.value);
74
+ }
75
+ });
76
+ React.useEffect(() => {
77
+ if (defaultValue !== void 0 && value === void 0) {
78
+ setStorageValue(defaultValue);
79
+ }
80
+ }, [defaultValue, value, setStorageValue]);
81
+ React.useEffect(() => {
82
+ if (getInitialValueInEffect) {
83
+ setValue(readStorageValue());
84
+ }
85
+ }, []);
86
+ return [
87
+ value === void 0 ? defaultValue : value,
88
+ setStorageValue,
89
+ removeStorageValue
90
+ ];
91
+ };
84
92
  }
85
93
 
86
94
  exports.createStorage = createStorage;
@@ -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":"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"}
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":"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"}
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var createStorage = require('./create-storage.js');
6
6
 
7
7
  function useLocalStorage(props) {
8
- return createStorage.createStorage('localStorage', 'use-local-storage')(props);
8
+ return createStorage.createStorage("localStorage", "use-local-storage")(props);
9
9
  }
10
10
 
11
11
  exports.useLocalStorage = useLocalStorage;
@@ -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":";;;;;;SAEgB,eAAe,CAAa,KAA4B;IACtE,OAAOA,2BAAa,CAAI,cAAc,EAAE,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC;AACtE;;;;"}
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;;;;"}
@@ -5,16 +5,15 @@ Object.defineProperty(exports, '__esModule', { value: true });
5
5
  var React = require('react');
6
6
  var useDidUpdate = require('../use-did-update/use-did-update.js');
7
7
 
8
- /* eslint-disable no-console */
9
8
  function useLogger(componentName, props) {
10
- React.useEffect(() => {
11
- console.log(`${componentName} mounted`, ...props);
12
- return () => console.log(`${componentName} unmounted`);
13
- }, []);
14
- useDidUpdate.useDidUpdate(() => {
15
- console.log(`${componentName} updated`, ...props);
16
- }, props);
17
- return null;
9
+ React.useEffect(() => {
10
+ console.log(`${componentName} mounted`, ...props);
11
+ return () => console.log(`${componentName} unmounted`);
12
+ }, []);
13
+ useDidUpdate.useDidUpdate(() => {
14
+ console.log(`${componentName} updated`, ...props);
15
+ }, props);
16
+ return null;
18
17
  }
19
18
 
20
19
  exports.useLogger = useLogger;
@@ -1 +1 @@
1
- {"version":3,"file":"use-logger.js","sources":["../../src/use-logger/use-logger.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { useEffect } from 'react';\nimport { useDidUpdate } from '../use-did-update/use-did-update';\n\nexport function useLogger(componentName: string, props: any[]) {\n useEffect(() => {\n console.log(`${componentName} mounted`, ...props);\n return () => console.log(`${componentName} unmounted`);\n }, []);\n\n useDidUpdate(() => {\n console.log(`${componentName} updated`, ...props);\n }, props);\n\n return null;\n}\n"],"names":["useEffect","useDidUpdate"],"mappings":";;;;;;;AAAA;SAIgB,SAAS,CAAC,aAAqB,EAAE,KAAY;IAC3DA,eAAS,CAAC;QACR,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC;QAClD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,YAAY,CAAC,CAAC;KACxD,EAAE,EAAE,CAAC,CAAC;IAEPC,yBAAY,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,GAAG,aAAa,UAAU,EAAE,GAAG,KAAK,CAAC,CAAC;KACnD,EAAE,KAAK,CAAC,CAAC;IAEV,OAAO,IAAI,CAAC;AACd;;;;"}
1
+ {"version":3,"file":"use-logger.js","sources":["../../src/use-logger/use-logger.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { useEffect } from 'react';\nimport { useDidUpdate } from '../use-did-update/use-did-update';\n\nexport function useLogger(componentName: string, props: any[]) {\n useEffect(() => {\n console.log(`${componentName} mounted`, ...props);\n return () => console.log(`${componentName} unmounted`);\n }, []);\n\n useDidUpdate(() => {\n console.log(`${componentName} updated`, ...props);\n }, props);\n\n return null;\n}\n"],"names":["useEffect","useDidUpdate"],"mappings":";;;;;;;AAEO,SAAS,SAAS,CAAC,aAAa,EAAE,KAAK,EAAE;AAChD,EAAEA,eAAS,CAAC,MAAM;AAClB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;AACtD,IAAI,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC,CAAC;AAC3D,GAAG,EAAE,EAAE,CAAC,CAAC;AACT,EAAEC,yBAAY,CAAC,MAAM;AACrB,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,QAAQ,CAAC,EAAE,GAAG,KAAK,CAAC,CAAC;AACtD,GAAG,EAAE,KAAK,CAAC,CAAC;AACZ,EAAE,OAAO,IAAI,CAAC;AACd;;;;"}
@@ -4,43 +4,40 @@ Object.defineProperty(exports, '__esModule', { value: true });
4
4
 
5
5
  var React = require('react');
6
6
 
7
- /**
8
- * Older versions of Safari (shipped withCatalina and before) do not support addEventListener on matchMedia
9
- * https://stackoverflow.com/questions/56466261/matchmedia-addlistener-marked-as-deprecated-addeventlistener-equivalent
10
- * */
11
7
  function attachMediaListener(query, callback) {
12
- try {
13
- query.addEventListener('change', callback);
14
- return () => query.removeEventListener('change', callback);
15
- }
16
- catch (e) {
17
- query.addListener(callback);
18
- return () => query.removeListener(callback);
19
- }
8
+ try {
9
+ query.addEventListener("change", callback);
10
+ return () => query.removeEventListener("change", callback);
11
+ } catch (e) {
12
+ query.addListener(callback);
13
+ return () => query.removeListener(callback);
14
+ }
20
15
  }
21
16
  function getInitialValue(query, initialValue) {
22
- if (typeof initialValue === 'boolean') {
23
- return initialValue;
24
- }
25
- if (typeof window !== 'undefined' && 'matchMedia' in window) {
26
- return window.matchMedia(query).matches;
27
- }
28
- return false;
17
+ if (typeof initialValue === "boolean") {
18
+ return initialValue;
19
+ }
20
+ if (typeof window !== "undefined" && "matchMedia" in window) {
21
+ return window.matchMedia(query).matches;
22
+ }
23
+ return false;
29
24
  }
30
25
  function useMediaQuery(query, initialValue, { getInitialValueInEffect } = {
31
- getInitialValueInEffect: true,
26
+ getInitialValueInEffect: true
32
27
  }) {
33
- const [matches, setMatches] = React.useState(getInitialValueInEffect ? initialValue : getInitialValue(query, initialValue));
34
- const queryRef = React.useRef();
35
- React.useEffect(() => {
36
- if ('matchMedia' in window) {
37
- queryRef.current = window.matchMedia(query);
38
- setMatches(queryRef.current.matches);
39
- return attachMediaListener(queryRef.current, (event) => setMatches(event.matches));
40
- }
41
- return undefined;
42
- }, [query]);
43
- return matches;
28
+ const [matches, setMatches] = React.useState(
29
+ getInitialValueInEffect ? initialValue : getInitialValue(query, initialValue)
30
+ );
31
+ const queryRef = React.useRef();
32
+ React.useEffect(() => {
33
+ if ("matchMedia" in window) {
34
+ queryRef.current = window.matchMedia(query);
35
+ setMatches(queryRef.current.matches);
36
+ return attachMediaListener(queryRef.current, (event) => setMatches(event.matches));
37
+ }
38
+ return void 0;
39
+ }, [query]);
40
+ return matches;
44
41
  }
45
42
 
46
43
  exports.useMediaQuery = useMediaQuery;