@mantine/hooks 9.0.0-alpha.4 → 9.0.0-alpha.6

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 (385) hide show
  1. package/cjs/index.cjs +183 -186
  2. package/cjs/use-click-outside/use-click-outside.cjs +22 -26
  3. package/cjs/use-click-outside/use-click-outside.cjs.map +1 -1
  4. package/cjs/use-clipboard/use-clipboard.cjs +29 -28
  5. package/cjs/use-clipboard/use-clipboard.cjs.map +1 -1
  6. package/cjs/use-collapse/use-collapse.cjs +95 -97
  7. package/cjs/use-collapse/use-collapse.cjs.map +1 -1
  8. package/cjs/use-collapse/use-horizontal-collapse.cjs +94 -97
  9. package/cjs/use-collapse/use-horizontal-collapse.cjs.map +1 -1
  10. package/cjs/use-color-scheme/use-color-scheme.cjs +7 -8
  11. package/cjs/use-color-scheme/use-color-scheme.cjs.map +1 -1
  12. package/cjs/use-counter/use-counter.cjs +24 -26
  13. package/cjs/use-counter/use-counter.cjs.map +1 -1
  14. package/cjs/use-debounced-callback/use-debounced-callback.cjs +89 -93
  15. package/cjs/use-debounced-callback/use-debounced-callback.cjs.map +1 -1
  16. package/cjs/use-debounced-state/use-debounced-state.cjs +20 -28
  17. package/cjs/use-debounced-state/use-debounced-state.cjs.map +1 -1
  18. package/cjs/use-debounced-value/use-debounced-value.cjs +32 -31
  19. package/cjs/use-debounced-value/use-debounced-value.cjs.map +1 -1
  20. package/cjs/use-did-update/use-did-update.cjs +14 -21
  21. package/cjs/use-did-update/use-did-update.cjs.map +1 -1
  22. package/cjs/use-disclosure/use-disclosure.cjs +37 -30
  23. package/cjs/use-disclosure/use-disclosure.cjs.map +1 -1
  24. package/cjs/use-document-title/use-document-title.cjs +9 -12
  25. package/cjs/use-document-title/use-document-title.cjs.map +1 -1
  26. package/cjs/use-document-visibility/use-document-visibility.cjs +14 -15
  27. package/cjs/use-document-visibility/use-document-visibility.cjs.map +1 -1
  28. package/cjs/use-drag/use-drag.cjs +266 -0
  29. package/cjs/use-drag/use-drag.cjs.map +1 -0
  30. package/cjs/use-event-listener/use-event-listener.cjs +23 -32
  31. package/cjs/use-event-listener/use-event-listener.cjs.map +1 -1
  32. package/cjs/use-eye-dropper/use-eye-dropper.cjs +19 -24
  33. package/cjs/use-eye-dropper/use-eye-dropper.cjs.map +1 -1
  34. package/cjs/use-favicon/use-favicon.cjs +25 -32
  35. package/cjs/use-favicon/use-favicon.cjs.map +1 -1
  36. package/cjs/use-fetch/use-fetch.cjs +43 -45
  37. package/cjs/use-fetch/use-fetch.cjs.map +1 -1
  38. package/cjs/use-file-dialog/use-file-dialog.cjs +65 -77
  39. package/cjs/use-file-dialog/use-file-dialog.cjs.map +1 -1
  40. package/cjs/use-floating-window/use-floating-window.cjs +244 -255
  41. package/cjs/use-floating-window/use-floating-window.cjs.map +1 -1
  42. package/cjs/use-focus-return/use-focus-return.cjs +26 -37
  43. package/cjs/use-focus-return/use-focus-return.cjs.map +1 -1
  44. package/cjs/use-focus-trap/scope-tab.cjs +20 -31
  45. package/cjs/use-focus-trap/scope-tab.cjs.map +1 -1
  46. package/cjs/use-focus-trap/tabbable.cjs +24 -40
  47. package/cjs/use-focus-trap/tabbable.cjs.map +1 -1
  48. package/cjs/use-focus-trap/use-focus-trap.cjs +41 -68
  49. package/cjs/use-focus-trap/use-focus-trap.cjs.map +1 -1
  50. package/cjs/use-focus-within/use-focus-within.cjs +51 -62
  51. package/cjs/use-focus-within/use-focus-within.cjs.map +1 -1
  52. package/cjs/use-force-update/use-force-update.cjs +8 -9
  53. package/cjs/use-force-update/use-force-update.cjs.map +1 -1
  54. package/cjs/use-fullscreen/use-fullscreen.cjs +80 -89
  55. package/cjs/use-fullscreen/use-fullscreen.cjs.map +1 -1
  56. package/cjs/use-hash/use-hash.cjs +21 -28
  57. package/cjs/use-hash/use-hash.cjs.map +1 -1
  58. package/cjs/use-headroom/use-headroom.cjs +71 -76
  59. package/cjs/use-headroom/use-headroom.cjs.map +1 -1
  60. package/cjs/use-hotkeys/parse-hotkey.cjs +74 -82
  61. package/cjs/use-hotkeys/parse-hotkey.cjs.map +1 -1
  62. package/cjs/use-hotkeys/use-hotkeys.cjs +32 -33
  63. package/cjs/use-hotkeys/use-hotkeys.cjs.map +1 -1
  64. package/cjs/use-hover/use-hover.cjs +31 -33
  65. package/cjs/use-hover/use-hover.cjs.map +1 -1
  66. package/cjs/use-id/use-id.cjs +14 -18
  67. package/cjs/use-id/use-id.cjs.map +1 -1
  68. package/cjs/use-idle/use-idle.cjs +40 -33
  69. package/cjs/use-idle/use-idle.cjs.map +1 -1
  70. package/cjs/use-in-viewport/use-in-viewport.cjs +22 -27
  71. package/cjs/use-in-viewport/use-in-viewport.cjs.map +1 -1
  72. package/cjs/use-input-state/use-input-state.cjs +17 -26
  73. package/cjs/use-input-state/use-input-state.cjs.map +1 -1
  74. package/cjs/use-intersection/use-intersection.cjs +29 -27
  75. package/cjs/use-intersection/use-intersection.cjs.map +1 -1
  76. package/cjs/use-interval/use-interval.cjs +42 -41
  77. package/cjs/use-interval/use-interval.cjs.map +1 -1
  78. package/cjs/use-is-first-render/use-is-first-render.cjs +12 -13
  79. package/cjs/use-is-first-render/use-is-first-render.cjs.map +1 -1
  80. package/cjs/use-isomorphic-effect/use-isomorphic-effect.cjs +6 -7
  81. package/cjs/use-isomorphic-effect/use-isomorphic-effect.cjs.map +1 -1
  82. package/cjs/use-list-state/use-list-state.cjs +74 -73
  83. package/cjs/use-list-state/use-list-state.cjs.map +1 -1
  84. package/cjs/use-local-storage/create-storage.cjs +127 -139
  85. package/cjs/use-local-storage/create-storage.cjs.map +1 -1
  86. package/cjs/use-local-storage/use-local-storage.cjs +8 -9
  87. package/cjs/use-local-storage/use-local-storage.cjs.map +1 -1
  88. package/cjs/use-logger/use-logger.cjs +15 -16
  89. package/cjs/use-logger/use-logger.cjs.map +1 -1
  90. package/cjs/use-long-press/use-long-press.cjs +49 -58
  91. package/cjs/use-long-press/use-long-press.cjs.map +1 -1
  92. package/cjs/use-map/use-map.cjs +24 -25
  93. package/cjs/use-map/use-map.cjs.map +1 -1
  94. package/cjs/use-mask/use-mask.cjs +457 -0
  95. package/cjs/use-mask/use-mask.cjs.map +1 -0
  96. package/cjs/use-media-query/use-media-query.cjs +27 -33
  97. package/cjs/use-media-query/use-media-query.cjs.map +1 -1
  98. package/cjs/use-merged-ref/use-merged-ref.cjs +24 -35
  99. package/cjs/use-merged-ref/use-merged-ref.cjs.map +1 -1
  100. package/cjs/use-mounted/use-mounted.cjs +9 -10
  101. package/cjs/use-mounted/use-mounted.cjs.map +1 -1
  102. package/cjs/use-mouse/use-mouse.cjs +55 -53
  103. package/cjs/use-mouse/use-mouse.cjs.map +1 -1
  104. package/cjs/use-move/use-move.cjs +98 -98
  105. package/cjs/use-move/use-move.cjs.map +1 -1
  106. package/cjs/use-mutation-observer/use-mutation-observer.cjs +45 -46
  107. package/cjs/use-mutation-observer/use-mutation-observer.cjs.map +1 -1
  108. package/cjs/use-network/use-network.cjs +48 -44
  109. package/cjs/use-network/use-network.cjs.map +1 -1
  110. package/cjs/use-orientation/use-orientation.cjs +30 -41
  111. package/cjs/use-orientation/use-orientation.cjs.map +1 -1
  112. package/cjs/use-os/use-os.cjs +27 -52
  113. package/cjs/use-os/use-os.cjs.map +1 -1
  114. package/cjs/use-page-leave/use-page-leave.cjs +11 -11
  115. package/cjs/use-page-leave/use-page-leave.cjs.map +1 -1
  116. package/cjs/use-pagination/use-pagination.cjs +75 -88
  117. package/cjs/use-pagination/use-pagination.cjs.map +1 -1
  118. package/cjs/use-previous/use-previous.cjs +11 -12
  119. package/cjs/use-previous/use-previous.cjs.map +1 -1
  120. package/cjs/use-queue/use-queue.cjs +40 -37
  121. package/cjs/use-queue/use-queue.cjs.map +1 -1
  122. package/cjs/use-radial-move/use-radial-move.cjs +87 -94
  123. package/cjs/use-radial-move/use-radial-move.cjs.map +1 -1
  124. package/cjs/use-reduced-motion/use-reduced-motion.cjs +7 -8
  125. package/cjs/use-reduced-motion/use-reduced-motion.cjs.map +1 -1
  126. package/cjs/use-resize-observer/use-resize-observer.cjs +55 -62
  127. package/cjs/use-resize-observer/use-resize-observer.cjs.map +1 -1
  128. package/cjs/use-roving-index/use-roving-index.cjs +200 -0
  129. package/cjs/use-roving-index/use-roving-index.cjs.map +1 -0
  130. package/cjs/use-scroll-direction/use-scroll-direction.cjs +36 -0
  131. package/cjs/use-scroll-direction/use-scroll-direction.cjs.map +1 -0
  132. package/cjs/use-scroll-into-view/use-scroll-into-view.cjs +128 -160
  133. package/cjs/use-scroll-into-view/use-scroll-into-view.cjs.map +1 -1
  134. package/cjs/use-scroll-spy/use-scroll-spy.cjs +58 -84
  135. package/cjs/use-scroll-spy/use-scroll-spy.cjs.map +1 -1
  136. package/cjs/use-scroller/use-scroller.cjs +128 -151
  137. package/cjs/use-scroller/use-scroller.cjs.map +1 -1
  138. package/cjs/use-selection/use-selection.cjs +61 -72
  139. package/cjs/use-selection/use-selection.cjs.map +1 -1
  140. package/cjs/use-session-storage/use-session-storage.cjs +8 -9
  141. package/cjs/use-session-storage/use-session-storage.cjs.map +1 -1
  142. package/cjs/use-set/use-set.cjs +60 -74
  143. package/cjs/use-set/use-set.cjs.map +1 -1
  144. package/cjs/use-set-state/use-set-state.cjs +11 -16
  145. package/cjs/use-set-state/use-set-state.cjs.map +1 -1
  146. package/cjs/use-shallow-effect/use-shallow-effect.cjs +20 -31
  147. package/cjs/use-shallow-effect/use-shallow-effect.cjs.map +1 -1
  148. package/cjs/use-splitter/use-splitter.cjs +433 -0
  149. package/cjs/use-splitter/use-splitter.cjs.map +1 -0
  150. package/cjs/use-state-history/use-state-history.cjs +47 -40
  151. package/cjs/use-state-history/use-state-history.cjs.map +1 -1
  152. package/cjs/use-text-selection/use-text-selection.cjs +19 -20
  153. package/cjs/use-text-selection/use-text-selection.cjs.map +1 -1
  154. package/cjs/use-throttled-callback/use-throttled-callback.cjs +37 -48
  155. package/cjs/use-throttled-callback/use-throttled-callback.cjs.map +1 -1
  156. package/cjs/use-throttled-state/use-throttled-state.cjs +11 -12
  157. package/cjs/use-throttled-state/use-throttled-state.cjs.map +1 -1
  158. package/cjs/use-throttled-value/use-throttled-value.cjs +18 -22
  159. package/cjs/use-throttled-value/use-throttled-value.cjs.map +1 -1
  160. package/cjs/use-timeout/use-timeout.cjs +27 -32
  161. package/cjs/use-timeout/use-timeout.cjs.map +1 -1
  162. package/cjs/use-toggle/use-toggle.cjs +12 -13
  163. package/cjs/use-toggle/use-toggle.cjs.map +1 -1
  164. package/cjs/use-uncontrolled/use-uncontrolled.cjs +22 -25
  165. package/cjs/use-uncontrolled/use-uncontrolled.cjs.map +1 -1
  166. package/cjs/use-validated-state/use-validated-state.cjs +21 -24
  167. package/cjs/use-validated-state/use-validated-state.cjs.map +1 -1
  168. package/cjs/use-viewport-size/use-viewport-size.cjs +22 -22
  169. package/cjs/use-viewport-size/use-viewport-size.cjs.map +1 -1
  170. package/cjs/use-window-event/use-window-event.cjs +11 -11
  171. package/cjs/use-window-event/use-window-event.cjs.map +1 -1
  172. package/cjs/use-window-scroll/use-window-scroll.cjs +30 -26
  173. package/cjs/use-window-scroll/use-window-scroll.cjs.map +1 -1
  174. package/cjs/utils/clamp/clamp.cjs +9 -15
  175. package/cjs/utils/clamp/clamp.cjs.map +1 -1
  176. package/cjs/utils/lower-first/lower-first.cjs +6 -6
  177. package/cjs/utils/lower-first/lower-first.cjs.map +1 -1
  178. package/cjs/utils/random-id/random-id.cjs +6 -6
  179. package/cjs/utils/random-id/random-id.cjs.map +1 -1
  180. package/cjs/utils/range/range.cjs +8 -11
  181. package/cjs/utils/range/range.cjs.map +1 -1
  182. package/cjs/utils/shallow-equal/shallow-equal.cjs +17 -29
  183. package/cjs/utils/shallow-equal/shallow-equal.cjs.map +1 -1
  184. package/cjs/utils/upper-first/upper-first.cjs +6 -6
  185. package/cjs/utils/upper-first/upper-first.cjs.map +1 -1
  186. package/cjs/utils/use-callback-ref/use-callback-ref.cjs +11 -12
  187. package/cjs/utils/use-callback-ref/use-callback-ref.cjs.map +1 -1
  188. package/esm/index.mjs +87 -86
  189. package/esm/use-click-outside/use-click-outside.mjs +22 -24
  190. package/esm/use-click-outside/use-click-outside.mjs.map +1 -1
  191. package/esm/use-clipboard/use-clipboard.mjs +29 -26
  192. package/esm/use-clipboard/use-clipboard.mjs.map +1 -1
  193. package/esm/use-collapse/use-collapse.mjs +95 -94
  194. package/esm/use-collapse/use-collapse.mjs.map +1 -1
  195. package/esm/use-collapse/use-horizontal-collapse.mjs +94 -94
  196. package/esm/use-collapse/use-horizontal-collapse.mjs.map +1 -1
  197. package/esm/use-color-scheme/use-color-scheme.mjs +7 -6
  198. package/esm/use-color-scheme/use-color-scheme.mjs.map +1 -1
  199. package/esm/use-counter/use-counter.mjs +24 -24
  200. package/esm/use-counter/use-counter.mjs.map +1 -1
  201. package/esm/use-debounced-callback/use-debounced-callback.mjs +89 -91
  202. package/esm/use-debounced-callback/use-debounced-callback.mjs.map +1 -1
  203. package/esm/use-debounced-state/use-debounced-state.mjs +20 -26
  204. package/esm/use-debounced-state/use-debounced-state.mjs.map +1 -1
  205. package/esm/use-debounced-value/use-debounced-value.mjs +32 -29
  206. package/esm/use-debounced-value/use-debounced-value.mjs.map +1 -1
  207. package/esm/use-did-update/use-did-update.mjs +14 -19
  208. package/esm/use-did-update/use-did-update.mjs.map +1 -1
  209. package/esm/use-disclosure/use-disclosure.mjs +37 -28
  210. package/esm/use-disclosure/use-disclosure.mjs.map +1 -1
  211. package/esm/use-document-title/use-document-title.mjs +9 -10
  212. package/esm/use-document-title/use-document-title.mjs.map +1 -1
  213. package/esm/use-document-visibility/use-document-visibility.mjs +14 -13
  214. package/esm/use-document-visibility/use-document-visibility.mjs.map +1 -1
  215. package/esm/use-drag/use-drag.mjs +266 -0
  216. package/esm/use-drag/use-drag.mjs.map +1 -0
  217. package/esm/use-event-listener/use-event-listener.mjs +23 -30
  218. package/esm/use-event-listener/use-event-listener.mjs.map +1 -1
  219. package/esm/use-eye-dropper/use-eye-dropper.mjs +19 -22
  220. package/esm/use-eye-dropper/use-eye-dropper.mjs.map +1 -1
  221. package/esm/use-favicon/use-favicon.mjs +25 -30
  222. package/esm/use-favicon/use-favicon.mjs.map +1 -1
  223. package/esm/use-fetch/use-fetch.mjs +43 -43
  224. package/esm/use-fetch/use-fetch.mjs.map +1 -1
  225. package/esm/use-file-dialog/use-file-dialog.mjs +65 -75
  226. package/esm/use-file-dialog/use-file-dialog.mjs.map +1 -1
  227. package/esm/use-floating-window/use-floating-window.mjs +244 -253
  228. package/esm/use-floating-window/use-floating-window.mjs.map +1 -1
  229. package/esm/use-focus-return/use-focus-return.mjs +26 -35
  230. package/esm/use-focus-return/use-focus-return.mjs.map +1 -1
  231. package/esm/use-focus-trap/scope-tab.mjs +20 -29
  232. package/esm/use-focus-trap/scope-tab.mjs.map +1 -1
  233. package/esm/use-focus-trap/tabbable.mjs +23 -38
  234. package/esm/use-focus-trap/tabbable.mjs.map +1 -1
  235. package/esm/use-focus-trap/use-focus-trap.mjs +39 -66
  236. package/esm/use-focus-trap/use-focus-trap.mjs.map +1 -1
  237. package/esm/use-focus-within/use-focus-within.mjs +51 -60
  238. package/esm/use-focus-within/use-focus-within.mjs.map +1 -1
  239. package/esm/use-force-update/use-force-update.mjs +8 -7
  240. package/esm/use-force-update/use-force-update.mjs.map +1 -1
  241. package/esm/use-fullscreen/use-fullscreen.mjs +80 -87
  242. package/esm/use-fullscreen/use-fullscreen.mjs.map +1 -1
  243. package/esm/use-hash/use-hash.mjs +21 -26
  244. package/esm/use-hash/use-hash.mjs.map +1 -1
  245. package/esm/use-headroom/use-headroom.mjs +71 -71
  246. package/esm/use-headroom/use-headroom.mjs.map +1 -1
  247. package/esm/use-hotkeys/parse-hotkey.mjs +74 -79
  248. package/esm/use-hotkeys/parse-hotkey.mjs.map +1 -1
  249. package/esm/use-hotkeys/use-hotkeys.mjs +32 -31
  250. package/esm/use-hotkeys/use-hotkeys.mjs.map +1 -1
  251. package/esm/use-hover/use-hover.mjs +31 -31
  252. package/esm/use-hover/use-hover.mjs.map +1 -1
  253. package/esm/use-id/use-id.mjs +15 -17
  254. package/esm/use-id/use-id.mjs.map +1 -1
  255. package/esm/use-idle/use-idle.mjs +40 -31
  256. package/esm/use-idle/use-idle.mjs.map +1 -1
  257. package/esm/use-in-viewport/use-in-viewport.mjs +22 -25
  258. package/esm/use-in-viewport/use-in-viewport.mjs.map +1 -1
  259. package/esm/use-input-state/use-input-state.mjs +17 -23
  260. package/esm/use-input-state/use-input-state.mjs.map +1 -1
  261. package/esm/use-intersection/use-intersection.mjs +29 -25
  262. package/esm/use-intersection/use-intersection.mjs.map +1 -1
  263. package/esm/use-interval/use-interval.mjs +42 -39
  264. package/esm/use-interval/use-interval.mjs.map +1 -1
  265. package/esm/use-is-first-render/use-is-first-render.mjs +12 -11
  266. package/esm/use-is-first-render/use-is-first-render.mjs.map +1 -1
  267. package/esm/use-isomorphic-effect/use-isomorphic-effect.mjs +6 -5
  268. package/esm/use-isomorphic-effect/use-isomorphic-effect.mjs.map +1 -1
  269. package/esm/use-list-state/use-list-state.mjs +74 -71
  270. package/esm/use-list-state/use-list-state.mjs.map +1 -1
  271. package/esm/use-local-storage/create-storage.mjs +127 -137
  272. package/esm/use-local-storage/create-storage.mjs.map +1 -1
  273. package/esm/use-local-storage/use-local-storage.mjs +7 -6
  274. package/esm/use-local-storage/use-local-storage.mjs.map +1 -1
  275. package/esm/use-logger/use-logger.mjs +15 -14
  276. package/esm/use-logger/use-logger.mjs.map +1 -1
  277. package/esm/use-long-press/use-long-press.mjs +49 -56
  278. package/esm/use-long-press/use-long-press.mjs.map +1 -1
  279. package/esm/use-map/use-map.mjs +24 -23
  280. package/esm/use-map/use-map.mjs.map +1 -1
  281. package/esm/use-mask/use-mask.mjs +453 -0
  282. package/esm/use-mask/use-mask.mjs.map +1 -0
  283. package/esm/use-media-query/use-media-query.mjs +27 -31
  284. package/esm/use-media-query/use-media-query.mjs.map +1 -1
  285. package/esm/use-merged-ref/use-merged-ref.mjs +24 -33
  286. package/esm/use-merged-ref/use-merged-ref.mjs.map +1 -1
  287. package/esm/use-mounted/use-mounted.mjs +9 -8
  288. package/esm/use-mounted/use-mounted.mjs.map +1 -1
  289. package/esm/use-mouse/use-mouse.mjs +55 -51
  290. package/esm/use-mouse/use-mouse.mjs.map +1 -1
  291. package/esm/use-move/use-move.mjs +98 -96
  292. package/esm/use-move/use-move.mjs.map +1 -1
  293. package/esm/use-mutation-observer/use-mutation-observer.mjs +45 -44
  294. package/esm/use-mutation-observer/use-mutation-observer.mjs.map +1 -1
  295. package/esm/use-network/use-network.mjs +48 -42
  296. package/esm/use-network/use-network.mjs.map +1 -1
  297. package/esm/use-orientation/use-orientation.mjs +30 -39
  298. package/esm/use-orientation/use-orientation.mjs.map +1 -1
  299. package/esm/use-os/use-os.mjs +27 -50
  300. package/esm/use-os/use-os.mjs.map +1 -1
  301. package/esm/use-page-leave/use-page-leave.mjs +11 -9
  302. package/esm/use-page-leave/use-page-leave.mjs.map +1 -1
  303. package/esm/use-pagination/use-pagination.mjs +75 -85
  304. package/esm/use-pagination/use-pagination.mjs.map +1 -1
  305. package/esm/use-previous/use-previous.mjs +11 -10
  306. package/esm/use-previous/use-previous.mjs.map +1 -1
  307. package/esm/use-queue/use-queue.mjs +40 -35
  308. package/esm/use-queue/use-queue.mjs.map +1 -1
  309. package/esm/use-radial-move/use-radial-move.mjs +87 -92
  310. package/esm/use-radial-move/use-radial-move.mjs.map +1 -1
  311. package/esm/use-reduced-motion/use-reduced-motion.mjs +7 -6
  312. package/esm/use-reduced-motion/use-reduced-motion.mjs.map +1 -1
  313. package/esm/use-resize-observer/use-resize-observer.mjs +55 -60
  314. package/esm/use-resize-observer/use-resize-observer.mjs.map +1 -1
  315. package/esm/use-roving-index/use-roving-index.mjs +200 -0
  316. package/esm/use-roving-index/use-roving-index.mjs.map +1 -0
  317. package/esm/use-scroll-direction/use-scroll-direction.mjs +36 -0
  318. package/esm/use-scroll-direction/use-scroll-direction.mjs.map +1 -0
  319. package/esm/use-scroll-into-view/use-scroll-into-view.mjs +128 -158
  320. package/esm/use-scroll-into-view/use-scroll-into-view.mjs.map +1 -1
  321. package/esm/use-scroll-spy/use-scroll-spy.mjs +58 -82
  322. package/esm/use-scroll-spy/use-scroll-spy.mjs.map +1 -1
  323. package/esm/use-scroller/use-scroller.mjs +128 -149
  324. package/esm/use-scroller/use-scroller.mjs.map +1 -1
  325. package/esm/use-selection/use-selection.mjs +61 -70
  326. package/esm/use-selection/use-selection.mjs.map +1 -1
  327. package/esm/use-session-storage/use-session-storage.mjs +7 -6
  328. package/esm/use-session-storage/use-session-storage.mjs.map +1 -1
  329. package/esm/use-set/use-set.mjs +60 -71
  330. package/esm/use-set/use-set.mjs.map +1 -1
  331. package/esm/use-set-state/use-set-state.mjs +11 -14
  332. package/esm/use-set-state/use-set-state.mjs.map +1 -1
  333. package/esm/use-shallow-effect/use-shallow-effect.mjs +20 -29
  334. package/esm/use-shallow-effect/use-shallow-effect.mjs.map +1 -1
  335. package/esm/use-splitter/use-splitter.mjs +433 -0
  336. package/esm/use-splitter/use-splitter.mjs.map +1 -0
  337. package/esm/use-state-history/use-state-history.mjs +47 -38
  338. package/esm/use-state-history/use-state-history.mjs.map +1 -1
  339. package/esm/use-text-selection/use-text-selection.mjs +19 -18
  340. package/esm/use-text-selection/use-text-selection.mjs.map +1 -1
  341. package/esm/use-throttled-callback/use-throttled-callback.mjs +37 -46
  342. package/esm/use-throttled-callback/use-throttled-callback.mjs.map +1 -1
  343. package/esm/use-throttled-state/use-throttled-state.mjs +11 -10
  344. package/esm/use-throttled-state/use-throttled-state.mjs.map +1 -1
  345. package/esm/use-throttled-value/use-throttled-value.mjs +18 -20
  346. package/esm/use-throttled-value/use-throttled-value.mjs.map +1 -1
  347. package/esm/use-timeout/use-timeout.mjs +27 -30
  348. package/esm/use-timeout/use-timeout.mjs.map +1 -1
  349. package/esm/use-toggle/use-toggle.mjs +12 -11
  350. package/esm/use-toggle/use-toggle.mjs.map +1 -1
  351. package/esm/use-uncontrolled/use-uncontrolled.mjs +22 -23
  352. package/esm/use-uncontrolled/use-uncontrolled.mjs.map +1 -1
  353. package/esm/use-validated-state/use-validated-state.mjs +21 -22
  354. package/esm/use-validated-state/use-validated-state.mjs.map +1 -1
  355. package/esm/use-viewport-size/use-viewport-size.mjs +22 -20
  356. package/esm/use-viewport-size/use-viewport-size.mjs.map +1 -1
  357. package/esm/use-window-event/use-window-event.mjs +11 -9
  358. package/esm/use-window-event/use-window-event.mjs.map +1 -1
  359. package/esm/use-window-scroll/use-window-scroll.mjs +30 -24
  360. package/esm/use-window-scroll/use-window-scroll.mjs.map +1 -1
  361. package/esm/utils/clamp/clamp.mjs +9 -13
  362. package/esm/utils/clamp/clamp.mjs.map +1 -1
  363. package/esm/utils/lower-first/lower-first.mjs +6 -4
  364. package/esm/utils/lower-first/lower-first.mjs.map +1 -1
  365. package/esm/utils/random-id/random-id.mjs +6 -4
  366. package/esm/utils/random-id/random-id.mjs.map +1 -1
  367. package/esm/utils/range/range.mjs +8 -9
  368. package/esm/utils/range/range.mjs.map +1 -1
  369. package/esm/utils/shallow-equal/shallow-equal.mjs +17 -27
  370. package/esm/utils/shallow-equal/shallow-equal.mjs.map +1 -1
  371. package/esm/utils/upper-first/upper-first.mjs +6 -4
  372. package/esm/utils/upper-first/upper-first.mjs.map +1 -1
  373. package/esm/utils/use-callback-ref/use-callback-ref.mjs +11 -10
  374. package/esm/utils/use-callback-ref/use-callback-ref.mjs.map +1 -1
  375. package/lib/index.d.mts +2 -0
  376. package/lib/index.d.ts +2 -0
  377. package/lib/use-drag/use-drag.d.ts +60 -0
  378. package/lib/use-headroom/use-headroom.d.ts +11 -2
  379. package/lib/use-mask/use-mask.d.ts +60 -0
  380. package/lib/use-roving-index/use-roving-index.d.ts +49 -0
  381. package/lib/use-scroll-direction/use-scroll-direction.d.ts +2 -0
  382. package/lib/use-splitter/use-splitter.d.ts +94 -0
  383. package/package.json +2 -2
  384. package/cjs/index.cjs.map +0 -1
  385. package/esm/index.mjs.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-roving-index.mjs","names":[],"sources":["../../src/use-roving-index/use-roving-index.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport { useUncontrolled } from '../use-uncontrolled/use-uncontrolled';\n\nexport interface UseRovingIndexInput {\n /** Total number of items in the group */\n total: number;\n\n /** Which arrow keys navigate, `'horizontal'` by default */\n orientation?: 'horizontal' | 'vertical' | 'both';\n\n /** Whether navigation wraps at boundaries, `true` by default */\n loop?: boolean;\n\n /** Text direction, `'ltr'` by default */\n dir?: 'rtl' | 'ltr';\n\n /** Whether to click element when it receives focus via keyboard, `false` by default */\n activateOnFocus?: boolean;\n\n /** Number of columns for grid (2D) navigation. When set, enables grid mode */\n columns?: number;\n\n /** Controlled focused index */\n focusedIndex?: number;\n\n /** Initial focused index for uncontrolled mode, first non-disabled item by default */\n initialIndex?: number;\n\n /** Called when focused index changes */\n onFocusChange?: (index: number) => void;\n\n /** Function to check if item at given index is disabled, `() => false` by default */\n isItemDisabled?: (index: number) => boolean;\n}\n\nexport interface UseRovingIndexGetItemPropsInput {\n /** Index of the item in the group */\n index: number;\n\n /** Called when item is clicked */\n onClick?: React.MouseEventHandler;\n\n /** Called when keydown event fires on item */\n onKeyDown?: React.KeyboardEventHandler;\n}\n\nexport interface UseRovingIndexReturnValue {\n /** Get props to spread on each navigable item */\n getItemProps: (options: UseRovingIndexGetItemPropsInput) => {\n tabIndex: 0 | -1;\n onKeyDown: React.KeyboardEventHandler;\n onClick: React.MouseEventHandler;\n ref: React.RefCallback<HTMLElement>;\n };\n\n /** Currently focused index */\n focusedIndex: number;\n\n /** Programmatically set focused index */\n setFocusedIndex: (index: number) => void;\n}\n\nfunction findNextEnabled(\n current: number,\n total: number,\n isItemDisabled: (index: number) => boolean,\n loop: boolean\n): number {\n for (let i = current + 1; i < total; i += 1) {\n if (!isItemDisabled(i)) {\n return i;\n }\n }\n\n if (loop) {\n for (let i = 0; i < current; i += 1) {\n if (!isItemDisabled(i)) {\n return i;\n }\n }\n }\n\n return current;\n}\n\nfunction findPreviousEnabled(\n current: number,\n total: number,\n isItemDisabled: (index: number) => boolean,\n loop: boolean\n): number {\n for (let i = current - 1; i >= 0; i -= 1) {\n if (!isItemDisabled(i)) {\n return i;\n }\n }\n\n if (loop) {\n for (let i = total - 1; i > current; i -= 1) {\n if (!isItemDisabled(i)) {\n return i;\n }\n }\n }\n\n return current;\n}\n\nfunction findFirstEnabled(total: number, isItemDisabled: (index: number) => boolean): number {\n for (let i = 0; i < total; i += 1) {\n if (!isItemDisabled(i)) {\n return i;\n }\n }\n\n return 0;\n}\n\nfunction findLastEnabled(total: number, isItemDisabled: (index: number) => boolean): number {\n for (let i = total - 1; i >= 0; i -= 1) {\n if (!isItemDisabled(i)) {\n return i;\n }\n }\n\n return 0;\n}\n\nconst defaultIsItemDisabled = () => false;\n\nexport function useRovingIndex(input: UseRovingIndexInput): UseRovingIndexReturnValue {\n const {\n total,\n orientation = 'horizontal',\n loop = true,\n dir = 'ltr',\n activateOnFocus = false,\n columns,\n focusedIndex,\n initialIndex,\n onFocusChange,\n isItemDisabled = defaultIsItemDisabled,\n } = input;\n\n const itemRefs = useRef<Map<number, HTMLElement>>(new Map());\n const isGrid = typeof columns === 'number' && columns > 0;\n\n const resolvedInitialIndex =\n initialIndex !== undefined ? initialIndex : findFirstEnabled(total, isItemDisabled);\n\n const [activeIndex, setActiveIndex] = useUncontrolled({\n value: focusedIndex,\n defaultValue: resolvedInitialIndex,\n finalValue: 0,\n onChange: onFocusChange,\n });\n\n useEffect(() => {\n if (total === 0) {\n return;\n }\n\n if (activeIndex >= total) {\n setActiveIndex(findLastEnabled(total, isItemDisabled));\n } else if (isItemDisabled(activeIndex)) {\n setActiveIndex(findFirstEnabled(total, isItemDisabled));\n }\n }, [total, activeIndex, isItemDisabled]);\n\n const focusItem = useCallback(\n (index: number) => {\n setActiveIndex(index);\n const element = itemRefs.current.get(index);\n if (element) {\n element.focus();\n if (activateOnFocus) {\n element.click();\n }\n }\n },\n [activateOnFocus, setActiveIndex]\n );\n\n const handleGridKeyDown = useCallback(\n (event: React.KeyboardEvent, currentIndex: number) => {\n const row = Math.floor(currentIndex / columns!);\n const col = currentIndex % columns!;\n const totalRows = Math.ceil(total / columns!);\n let nextIndex: number | null = null;\n\n const isRtl = dir === 'rtl';\n\n switch (event.key) {\n case 'ArrowRight': {\n const targetCol = isRtl ? col - 1 : col + 1;\n if (targetCol >= 0 && targetCol < columns! && row * columns! + targetCol < total) {\n const candidate = row * columns! + targetCol;\n if (!isItemDisabled(candidate)) {\n nextIndex = candidate;\n }\n }\n break;\n }\n\n case 'ArrowLeft': {\n const targetCol = isRtl ? col + 1 : col - 1;\n if (targetCol >= 0 && targetCol < columns! && row * columns! + targetCol < total) {\n const candidate = row * columns! + targetCol;\n if (!isItemDisabled(candidate)) {\n nextIndex = candidate;\n }\n }\n break;\n }\n\n case 'ArrowDown': {\n for (let r = row + 1; r < totalRows; r += 1) {\n const candidate = r * columns! + col;\n if (candidate < total && !isItemDisabled(candidate)) {\n nextIndex = candidate;\n break;\n }\n }\n break;\n }\n\n case 'ArrowUp': {\n for (let r = row - 1; r >= 0; r -= 1) {\n const candidate = r * columns! + col;\n if (candidate < total && !isItemDisabled(candidate)) {\n nextIndex = candidate;\n break;\n }\n }\n break;\n }\n\n case 'Home': {\n if (event.ctrlKey) {\n nextIndex = findFirstEnabled(total, isItemDisabled);\n } else {\n const rowStart = row * columns!;\n for (let i = rowStart; i < rowStart + columns! && i < total; i += 1) {\n if (!isItemDisabled(i)) {\n nextIndex = i;\n break;\n }\n }\n }\n break;\n }\n\n case 'End': {\n if (event.ctrlKey) {\n nextIndex = findLastEnabled(total, isItemDisabled);\n } else {\n const rowStart = row * columns!;\n const rowEnd = Math.min(rowStart + columns!, total) - 1;\n for (let i = rowEnd; i >= rowStart; i -= 1) {\n if (!isItemDisabled(i)) {\n nextIndex = i;\n break;\n }\n }\n }\n break;\n }\n }\n\n if (nextIndex !== null && nextIndex !== currentIndex) {\n event.preventDefault();\n event.stopPropagation();\n focusItem(nextIndex);\n }\n },\n [total, columns, dir, isItemDisabled, focusItem]\n );\n\n const handleListKeyDown = useCallback(\n (event: React.KeyboardEvent, currentIndex: number) => {\n const isRtl = dir === 'rtl';\n let nextIndex: number | null = null;\n\n switch (event.key) {\n case 'ArrowRight': {\n if (orientation === 'horizontal' || orientation === 'both') {\n nextIndex = isRtl\n ? findPreviousEnabled(currentIndex, total, isItemDisabled, loop)\n : findNextEnabled(currentIndex, total, isItemDisabled, loop);\n }\n break;\n }\n\n case 'ArrowLeft': {\n if (orientation === 'horizontal' || orientation === 'both') {\n nextIndex = isRtl\n ? findNextEnabled(currentIndex, total, isItemDisabled, loop)\n : findPreviousEnabled(currentIndex, total, isItemDisabled, loop);\n }\n break;\n }\n\n case 'ArrowDown': {\n if (orientation === 'vertical' || orientation === 'both') {\n nextIndex = findNextEnabled(currentIndex, total, isItemDisabled, loop);\n }\n break;\n }\n\n case 'ArrowUp': {\n if (orientation === 'vertical' || orientation === 'both') {\n nextIndex = findPreviousEnabled(currentIndex, total, isItemDisabled, loop);\n }\n break;\n }\n\n case 'Home': {\n nextIndex = findFirstEnabled(total, isItemDisabled);\n break;\n }\n\n case 'End': {\n nextIndex = findLastEnabled(total, isItemDisabled);\n break;\n }\n }\n\n if (nextIndex !== null && nextIndex !== currentIndex) {\n event.preventDefault();\n event.stopPropagation();\n focusItem(nextIndex);\n }\n },\n [total, orientation, loop, dir, isItemDisabled, focusItem]\n );\n\n const getItemProps = useCallback(\n (options: UseRovingIndexGetItemPropsInput) => {\n const { index, onClick, onKeyDown } = options;\n\n return {\n tabIndex: (index === activeIndex ? 0 : -1) as 0 | -1,\n\n ref: (node: HTMLElement | null) => {\n if (node) {\n itemRefs.current.set(index, node);\n } else {\n itemRefs.current.delete(index);\n }\n },\n\n onKeyDown: (event: React.KeyboardEvent) => {\n onKeyDown?.(event);\n\n if (event.defaultPrevented) {\n return;\n }\n\n if (isGrid) {\n handleGridKeyDown(event, index);\n } else {\n handleListKeyDown(event, index);\n }\n },\n\n onClick: (event: React.MouseEvent) => {\n onClick?.(event);\n setActiveIndex(index);\n },\n };\n },\n [activeIndex, isGrid, handleGridKeyDown, handleListKeyDown, setActiveIndex]\n );\n\n return {\n getItemProps,\n focusedIndex: activeIndex,\n setFocusedIndex: setActiveIndex,\n };\n}\n\nexport namespace useRovingIndex {\n export type Input = UseRovingIndexInput;\n export type GetItemPropsInput = UseRovingIndexGetItemPropsInput;\n export type ReturnValue = UseRovingIndexReturnValue;\n}\n"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ "use client";
2
+ import { useEffect, useEffectEvent, useRef, useState } from "react";
3
+ //#region packages/@mantine/hooks/src/use-scroll-direction/use-scroll-direction.ts
4
+ function useScrollDirection() {
5
+ const [lastScrollTop, setLastScrollTop] = useState(0);
6
+ const [scrollDirection, setScrollDirection] = useState("unknown");
7
+ const [isResizing, setIsResizing] = useState(false);
8
+ const resizeTimerRef = useRef(void 0);
9
+ const handleScroll = useEffectEvent(() => {
10
+ if (isResizing) return;
11
+ const currentScrollTop = window.scrollY || document.documentElement.scrollTop;
12
+ setScrollDirection(currentScrollTop < lastScrollTop ? "up" : "down");
13
+ setLastScrollTop(currentScrollTop);
14
+ });
15
+ useEffect(() => {
16
+ const handleResize = () => {
17
+ setIsResizing(true);
18
+ window.clearTimeout(resizeTimerRef.current);
19
+ resizeTimerRef.current = window.setTimeout(() => {
20
+ setIsResizing(false);
21
+ }, 300);
22
+ };
23
+ window.addEventListener("scroll", handleScroll);
24
+ window.addEventListener("resize", handleResize);
25
+ return () => {
26
+ window.removeEventListener("scroll", handleScroll);
27
+ window.removeEventListener("resize", handleResize);
28
+ clearTimeout(resizeTimerRef.current);
29
+ };
30
+ }, []);
31
+ return scrollDirection;
32
+ }
33
+ //#endregion
34
+ export { useScrollDirection };
35
+
36
+ //# sourceMappingURL=use-scroll-direction.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-scroll-direction.mjs","names":[],"sources":["../../src/use-scroll-direction/use-scroll-direction.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useRef, useState } from 'react';\n\nexport type ScrollDirection = 'up' | 'down' | 'unknown';\n\nexport function useScrollDirection(): ScrollDirection {\n const [lastScrollTop, setLastScrollTop] = useState(0);\n const [scrollDirection, setScrollDirection] = useState<ScrollDirection>('unknown');\n const [isResizing, setIsResizing] = useState(false);\n const resizeTimerRef = useRef<number | undefined>(undefined);\n\n const handleScroll = useEffectEvent(() => {\n if (isResizing) {\n return;\n }\n\n const currentScrollTop = window.scrollY || document.documentElement.scrollTop;\n setScrollDirection(currentScrollTop < lastScrollTop ? 'up' : 'down');\n setLastScrollTop(currentScrollTop);\n });\n\n useEffect(() => {\n const handleResize = () => {\n setIsResizing(true);\n window.clearTimeout(resizeTimerRef.current);\n resizeTimerRef.current = window.setTimeout(() => {\n setIsResizing(false);\n }, 300);\n };\n\n window.addEventListener('scroll', handleScroll);\n window.addEventListener('resize', handleResize);\n\n return () => {\n window.removeEventListener('scroll', handleScroll);\n window.removeEventListener('resize', handleResize);\n clearTimeout(resizeTimerRef.current);\n };\n }, []);\n\n return scrollDirection;\n}\n"],"mappings":";;;AAIA,SAAgB,qBAAsC;CACpD,MAAM,CAAC,eAAe,oBAAoB,SAAS,EAAE;CACrD,MAAM,CAAC,iBAAiB,sBAAsB,SAA0B,UAAU;CAClF,MAAM,CAAC,YAAY,iBAAiB,SAAS,MAAM;CACnD,MAAM,iBAAiB,OAA2B,KAAA,EAAU;CAE5D,MAAM,eAAe,qBAAqB;AACxC,MAAI,WACF;EAGF,MAAM,mBAAmB,OAAO,WAAW,SAAS,gBAAgB;AACpE,qBAAmB,mBAAmB,gBAAgB,OAAO,OAAO;AACpE,mBAAiB,iBAAiB;GAClC;AAEF,iBAAgB;EACd,MAAM,qBAAqB;AACzB,iBAAc,KAAK;AACnB,UAAO,aAAa,eAAe,QAAQ;AAC3C,kBAAe,UAAU,OAAO,iBAAiB;AAC/C,kBAAc,MAAM;MACnB,IAAI;;AAGT,SAAO,iBAAiB,UAAU,aAAa;AAC/C,SAAO,iBAAiB,UAAU,aAAa;AAE/C,eAAa;AACX,UAAO,oBAAoB,UAAU,aAAa;AAClD,UAAO,oBAAoB,UAAU,aAAa;AAClD,gBAAa,eAAe,QAAQ;;IAErC,EAAE,CAAC;AAEN,QAAO"}
@@ -1,168 +1,138 @@
1
- 'use client';
2
- import { useRef, useCallback, useEffect } from 'react';
3
- import { useReducedMotion } from '../use-reduced-motion/use-reduced-motion.mjs';
4
- import { useWindowEvent } from '../use-window-event/use-window-event.mjs';
5
-
6
- function useScrollIntoView({
7
- duration = 1250,
8
- axis = "y",
9
- onScrollFinish,
10
- easing = easeInOutQuad,
11
- offset = 0,
12
- cancelable = true,
13
- isList = false
14
- } = {}) {
15
- const frameID = useRef(0);
16
- const startTime = useRef(0);
17
- const shouldStop = useRef(false);
18
- const scrollableRef = useRef(null);
19
- const targetRef = useRef(null);
20
- const reducedMotion = useReducedMotion();
21
- const cancel = () => {
22
- if (frameID.current) {
23
- cancelAnimationFrame(frameID.current);
24
- }
25
- };
26
- const scrollIntoView = useCallback(
27
- ({ alignment = "start" } = {}) => {
28
- shouldStop.current = false;
29
- if (frameID.current) {
30
- cancel();
31
- }
32
- const start = getScrollStart({ parent: scrollableRef.current, axis }) ?? 0;
33
- const change = getRelativePosition({
34
- parent: scrollableRef.current,
35
- target: targetRef.current,
36
- axis,
37
- alignment,
38
- offset,
39
- isList
40
- }) - (scrollableRef.current ? 0 : start);
41
- function animateScroll() {
42
- if (startTime.current === 0) {
43
- startTime.current = performance.now();
44
- }
45
- const now = performance.now();
46
- const elapsed = now - startTime.current;
47
- const t = reducedMotion || duration === 0 ? 1 : elapsed / duration;
48
- const distance = start + change * easing(t);
49
- setScrollParam({
50
- parent: scrollableRef.current,
51
- axis,
52
- distance
53
- });
54
- if (!shouldStop.current && t < 1) {
55
- frameID.current = requestAnimationFrame(animateScroll);
56
- } else {
57
- typeof onScrollFinish === "function" && onScrollFinish();
58
- startTime.current = 0;
59
- frameID.current = 0;
60
- cancel();
61
- }
62
- }
63
- animateScroll();
64
- },
65
- [axis, duration, easing, isList, offset, onScrollFinish, reducedMotion]
66
- );
67
- const handleStop = () => {
68
- if (cancelable) {
69
- shouldStop.current = true;
70
- }
71
- };
72
- useWindowEvent("wheel", handleStop, {
73
- passive: true
74
- });
75
- useWindowEvent("touchmove", handleStop, {
76
- passive: true
77
- });
78
- useEffect(() => cancel, []);
79
- return {
80
- scrollableRef,
81
- targetRef,
82
- scrollIntoView,
83
- cancel
84
- };
1
+ "use client";
2
+ import { useWindowEvent } from "../use-window-event/use-window-event.mjs";
3
+ import { useReducedMotion } from "../use-reduced-motion/use-reduced-motion.mjs";
4
+ import { useCallback, useEffect, useRef } from "react";
5
+ //#region packages/@mantine/hooks/src/use-scroll-into-view/use-scroll-into-view.ts
6
+ function useScrollIntoView({ duration = 1250, axis = "y", onScrollFinish, easing = easeInOutQuad, offset = 0, cancelable = true, isList = false } = {}) {
7
+ const frameID = useRef(0);
8
+ const startTime = useRef(0);
9
+ const shouldStop = useRef(false);
10
+ const scrollableRef = useRef(null);
11
+ const targetRef = useRef(null);
12
+ const reducedMotion = useReducedMotion();
13
+ const cancel = () => {
14
+ if (frameID.current) cancelAnimationFrame(frameID.current);
15
+ };
16
+ const scrollIntoView = useCallback(({ alignment = "start" } = {}) => {
17
+ shouldStop.current = false;
18
+ if (frameID.current) cancel();
19
+ const start = getScrollStart({
20
+ parent: scrollableRef.current,
21
+ axis
22
+ }) ?? 0;
23
+ const change = getRelativePosition({
24
+ parent: scrollableRef.current,
25
+ target: targetRef.current,
26
+ axis,
27
+ alignment,
28
+ offset,
29
+ isList
30
+ }) - (scrollableRef.current ? 0 : start);
31
+ function animateScroll() {
32
+ if (startTime.current === 0) startTime.current = performance.now();
33
+ const elapsed = performance.now() - startTime.current;
34
+ const t = reducedMotion || duration === 0 ? 1 : elapsed / duration;
35
+ const distance = start + change * easing(t);
36
+ setScrollParam({
37
+ parent: scrollableRef.current,
38
+ axis,
39
+ distance
40
+ });
41
+ if (!shouldStop.current && t < 1) frameID.current = requestAnimationFrame(animateScroll);
42
+ else {
43
+ typeof onScrollFinish === "function" && onScrollFinish();
44
+ startTime.current = 0;
45
+ frameID.current = 0;
46
+ cancel();
47
+ }
48
+ }
49
+ animateScroll();
50
+ }, [
51
+ axis,
52
+ duration,
53
+ easing,
54
+ isList,
55
+ offset,
56
+ onScrollFinish,
57
+ reducedMotion
58
+ ]);
59
+ const handleStop = () => {
60
+ if (cancelable) shouldStop.current = true;
61
+ };
62
+ /**
63
+ * Detection of one of these events stops scroll animation
64
+ * wheel - mouse wheel / touch pad
65
+ * touchmove - any touchable device
66
+ */
67
+ useWindowEvent("wheel", handleStop, { passive: true });
68
+ useWindowEvent("touchmove", handleStop, { passive: true });
69
+ useEffect(() => cancel, []);
70
+ return {
71
+ scrollableRef,
72
+ targetRef,
73
+ scrollIntoView,
74
+ cancel
75
+ };
85
76
  }
86
77
  function easeInOutQuad(t) {
87
- return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
78
+ return t < .5 ? 2 * t * t : -1 + (4 - 2 * t) * t;
88
79
  }
89
80
  function getRelativePosition({ axis, target, parent, alignment, offset, isList }) {
90
- if (!target || !parent && typeof document === "undefined") {
91
- return 0;
92
- }
93
- const isCustomParent = !!parent;
94
- const parentElement = parent || document.body;
95
- const parentPosition = parentElement.getBoundingClientRect();
96
- const targetPosition = target.getBoundingClientRect();
97
- const getDiff = (property) => targetPosition[property] - parentPosition[property];
98
- if (axis === "y") {
99
- const diff = getDiff("top");
100
- if (diff === 0) {
101
- return 0;
102
- }
103
- if (alignment === "start") {
104
- const distance = diff - offset;
105
- const shouldScroll = distance <= targetPosition.height * (isList ? 0 : 1) || !isList;
106
- return shouldScroll ? distance : 0;
107
- }
108
- const parentHeight = isCustomParent ? parentPosition.height : window.innerHeight;
109
- if (alignment === "end") {
110
- const distance = diff + offset - parentHeight + targetPosition.height;
111
- const shouldScroll = distance >= -targetPosition.height * (isList ? 0 : 1) || !isList;
112
- return shouldScroll ? distance : 0;
113
- }
114
- if (alignment === "center") {
115
- return diff - parentHeight / 2 + targetPosition.height / 2;
116
- }
117
- return 0;
118
- }
119
- if (axis === "x") {
120
- const diff = getDiff("left");
121
- if (diff === 0) {
122
- return 0;
123
- }
124
- if (alignment === "start") {
125
- const distance = diff - offset;
126
- const shouldScroll = distance <= targetPosition.width || !isList;
127
- return shouldScroll ? distance : 0;
128
- }
129
- const parentWidth = isCustomParent ? parentPosition.width : window.innerWidth;
130
- if (alignment === "end") {
131
- const distance = diff + offset - parentWidth + targetPosition.width;
132
- const shouldScroll = distance >= -targetPosition.width || !isList;
133
- return shouldScroll ? distance : 0;
134
- }
135
- if (alignment === "center") {
136
- return diff - parentWidth / 2 + targetPosition.width / 2;
137
- }
138
- return 0;
139
- }
140
- return 0;
81
+ if (!target || !parent && typeof document === "undefined") return 0;
82
+ const isCustomParent = !!parent;
83
+ const parentPosition = (parent || document.body).getBoundingClientRect();
84
+ const targetPosition = target.getBoundingClientRect();
85
+ const getDiff = (property) => targetPosition[property] - parentPosition[property];
86
+ if (axis === "y") {
87
+ const diff = getDiff("top");
88
+ if (diff === 0) return 0;
89
+ if (alignment === "start") {
90
+ const distance = diff - offset;
91
+ return distance <= targetPosition.height * (isList ? 0 : 1) || !isList ? distance : 0;
92
+ }
93
+ const parentHeight = isCustomParent ? parentPosition.height : window.innerHeight;
94
+ if (alignment === "end") {
95
+ const distance = diff + offset - parentHeight + targetPosition.height;
96
+ return distance >= -targetPosition.height * (isList ? 0 : 1) || !isList ? distance : 0;
97
+ }
98
+ if (alignment === "center") return diff - parentHeight / 2 + targetPosition.height / 2;
99
+ return 0;
100
+ }
101
+ if (axis === "x") {
102
+ const diff = getDiff("left");
103
+ if (diff === 0) return 0;
104
+ if (alignment === "start") {
105
+ const distance = diff - offset;
106
+ return distance <= targetPosition.width || !isList ? distance : 0;
107
+ }
108
+ const parentWidth = isCustomParent ? parentPosition.width : window.innerWidth;
109
+ if (alignment === "end") {
110
+ const distance = diff + offset - parentWidth + targetPosition.width;
111
+ return distance >= -targetPosition.width || !isList ? distance : 0;
112
+ }
113
+ if (alignment === "center") return diff - parentWidth / 2 + targetPosition.width / 2;
114
+ return 0;
115
+ }
116
+ return 0;
141
117
  }
142
118
  function getScrollStart({ axis, parent }) {
143
- if (!parent && typeof document === "undefined") {
144
- return 0;
145
- }
146
- const method = axis === "y" ? "scrollTop" : "scrollLeft";
147
- if (parent) {
148
- return parent[method];
149
- }
150
- const { body, documentElement } = document;
151
- return body[method] + documentElement[method];
119
+ if (!parent && typeof document === "undefined") return 0;
120
+ const method = axis === "y" ? "scrollTop" : "scrollLeft";
121
+ if (parent) return parent[method];
122
+ const { body, documentElement } = document;
123
+ return body[method] + documentElement[method];
152
124
  }
153
125
  function setScrollParam({ axis, parent, distance }) {
154
- if (!parent && typeof document === "undefined") {
155
- return;
156
- }
157
- const method = axis === "y" ? "scrollTop" : "scrollLeft";
158
- if (parent) {
159
- parent[method] = distance;
160
- } else {
161
- const { body, documentElement } = document;
162
- body[method] = distance;
163
- documentElement[method] = distance;
164
- }
126
+ if (!parent && typeof document === "undefined") return;
127
+ const method = axis === "y" ? "scrollTop" : "scrollLeft";
128
+ if (parent) parent[method] = distance;
129
+ else {
130
+ const { body, documentElement } = document;
131
+ body[method] = distance;
132
+ documentElement[method] = distance;
133
+ }
165
134
  }
166
-
135
+ //#endregion
167
136
  export { useScrollIntoView };
168
- //# sourceMappingURL=use-scroll-into-view.mjs.map
137
+
138
+ //# sourceMappingURL=use-scroll-into-view.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-scroll-into-view.mjs","sources":["../../src/use-scroll-into-view/use-scroll-into-view.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport { useReducedMotion } from '../use-reduced-motion/use-reduced-motion';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\ninterface UseScrollIntoViewAnimation {\n /** Target element alignment relatively to parent based on current axis */\n alignment?: 'start' | 'end' | 'center';\n}\n\nexport interface UseScrollIntoViewOptions {\n /** Callback fired after scroll */\n onScrollFinish?: () => void;\n\n /** Duration of scroll in milliseconds */\n duration?: number;\n\n /** Axis of scroll */\n axis?: 'x' | 'y';\n\n /** Custom mathematical easing function */\n easing?: (t: number) => number;\n\n /** Additional distance between nearest edge and element */\n offset?: number;\n\n /** Indicator if animation may be interrupted by user scrolling */\n cancelable?: boolean;\n\n /** Prevents content jumping in scrolling lists with multiple targets */\n isList?: boolean;\n}\n\nexport interface UseScrollIntoViewReturnValue<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n> {\n scrollableRef: React.RefObject<Parent | null>;\n targetRef: React.RefObject<Target | null>;\n scrollIntoView: (params?: UseScrollIntoViewAnimation) => void;\n cancel: () => void;\n}\n\nexport function useScrollIntoView<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n>({\n duration = 1250,\n axis = 'y',\n onScrollFinish,\n easing = easeInOutQuad,\n offset = 0,\n cancelable = true,\n isList = false,\n}: UseScrollIntoViewOptions = {}): UseScrollIntoViewReturnValue<Target, Parent> {\n const frameID = useRef(0);\n const startTime = useRef(0);\n const shouldStop = useRef(false);\n\n const scrollableRef = useRef<Parent | null>(null);\n const targetRef = useRef<Target | null>(null);\n\n const reducedMotion = useReducedMotion();\n\n const cancel = (): void => {\n if (frameID.current) {\n cancelAnimationFrame(frameID.current);\n }\n };\n\n const scrollIntoView = useCallback(\n ({ alignment = 'start' }: UseScrollIntoViewAnimation = {}) => {\n shouldStop.current = false;\n\n if (frameID.current) {\n cancel();\n }\n\n const start = getScrollStart({ parent: scrollableRef.current, axis }) ?? 0;\n\n const change =\n getRelativePosition({\n parent: scrollableRef.current,\n target: targetRef.current,\n axis,\n alignment,\n offset,\n isList,\n }) - (scrollableRef.current ? 0 : start);\n\n function animateScroll() {\n if (startTime.current === 0) {\n startTime.current = performance.now();\n }\n\n const now = performance.now();\n const elapsed = now - startTime.current;\n\n // Easing timing progress\n const t = reducedMotion || duration === 0 ? 1 : elapsed / duration;\n\n const distance = start + change * easing(t);\n\n setScrollParam({\n parent: scrollableRef.current,\n axis,\n distance,\n });\n\n if (!shouldStop.current && t < 1) {\n frameID.current = requestAnimationFrame(animateScroll);\n } else {\n typeof onScrollFinish === 'function' && onScrollFinish();\n startTime.current = 0;\n frameID.current = 0;\n cancel();\n }\n }\n animateScroll();\n },\n [axis, duration, easing, isList, offset, onScrollFinish, reducedMotion]\n );\n\n const handleStop = () => {\n if (cancelable) {\n shouldStop.current = true;\n }\n };\n\n /**\n * Detection of one of these events stops scroll animation\n * wheel - mouse wheel / touch pad\n * touchmove - any touchable device\n */\n\n useWindowEvent('wheel', handleStop, {\n passive: true,\n });\n\n useWindowEvent('touchmove', handleStop, {\n passive: true,\n });\n\n // Cleanup requestAnimationFrame\n useEffect(() => cancel, []);\n\n return {\n scrollableRef,\n targetRef,\n scrollIntoView,\n cancel,\n };\n}\n\n// ---------------------------------------------------\n// Helpers\n// ---------------------------------------------------\n\nfunction easeInOutQuad(t: number) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n\nfunction getRelativePosition({ axis, target, parent, alignment, offset, isList }: any): number {\n if (!target || (!parent && typeof document === 'undefined')) {\n return 0;\n }\n const isCustomParent = !!parent;\n const parentElement = parent || document.body;\n const parentPosition = parentElement.getBoundingClientRect();\n const targetPosition = target.getBoundingClientRect();\n\n const getDiff = (property: 'top' | 'left'): number =>\n targetPosition[property] - parentPosition[property];\n\n if (axis === 'y') {\n const diff = getDiff('top');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentHeight = isCustomParent ? parentPosition.height : window.innerHeight;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentHeight + targetPosition.height;\n const shouldScroll = distance >= -targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentHeight / 2 + targetPosition.height / 2;\n }\n\n return 0;\n }\n\n if (axis === 'x') {\n const diff = getDiff('left');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentWidth = isCustomParent ? parentPosition.width : window.innerWidth;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentWidth + targetPosition.width;\n const shouldScroll = distance >= -targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentWidth / 2 + targetPosition.width / 2;\n }\n\n return 0;\n }\n\n return 0;\n}\n\nfunction getScrollStart({ axis, parent }: any) {\n if (!parent && typeof document === 'undefined') {\n return 0;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n return parent[method];\n }\n\n const { body, documentElement } = document;\n\n // While one of it has a value the second is equal 0\n return body[method] + documentElement[method];\n}\n\nfunction setScrollParam({ axis, parent, distance }: any) {\n if (!parent && typeof document === 'undefined') {\n return;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n parent[method] = distance;\n } else {\n const { body, documentElement } = document;\n body[method] = distance;\n documentElement[method] = distance;\n }\n}\n\nexport namespace useScrollIntoView {\n export type Options = UseScrollIntoViewOptions;\n export type ReturnValue<\n Target extends HTMLElement,\n Parent extends HTMLElement | null,\n > = UseScrollIntoViewReturnValue<Target, Parent>;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-scroll-into-view.mjs","names":[],"sources":["../../src/use-scroll-into-view/use-scroll-into-view.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport { useReducedMotion } from '../use-reduced-motion/use-reduced-motion';\nimport { useWindowEvent } from '../use-window-event/use-window-event';\n\ninterface UseScrollIntoViewAnimation {\n /** Target element alignment relatively to parent based on current axis */\n alignment?: 'start' | 'end' | 'center';\n}\n\nexport interface UseScrollIntoViewOptions {\n /** Callback fired after scroll */\n onScrollFinish?: () => void;\n\n /** Duration of scroll in milliseconds */\n duration?: number;\n\n /** Axis of scroll */\n axis?: 'x' | 'y';\n\n /** Custom mathematical easing function */\n easing?: (t: number) => number;\n\n /** Additional distance between nearest edge and element */\n offset?: number;\n\n /** Indicator if animation may be interrupted by user scrolling */\n cancelable?: boolean;\n\n /** Prevents content jumping in scrolling lists with multiple targets */\n isList?: boolean;\n}\n\nexport interface UseScrollIntoViewReturnValue<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n> {\n scrollableRef: React.RefObject<Parent | null>;\n targetRef: React.RefObject<Target | null>;\n scrollIntoView: (params?: UseScrollIntoViewAnimation) => void;\n cancel: () => void;\n}\n\nexport function useScrollIntoView<\n Target extends HTMLElement = any,\n Parent extends HTMLElement | null = null,\n>({\n duration = 1250,\n axis = 'y',\n onScrollFinish,\n easing = easeInOutQuad,\n offset = 0,\n cancelable = true,\n isList = false,\n}: UseScrollIntoViewOptions = {}): UseScrollIntoViewReturnValue<Target, Parent> {\n const frameID = useRef(0);\n const startTime = useRef(0);\n const shouldStop = useRef(false);\n\n const scrollableRef = useRef<Parent | null>(null);\n const targetRef = useRef<Target | null>(null);\n\n const reducedMotion = useReducedMotion();\n\n const cancel = (): void => {\n if (frameID.current) {\n cancelAnimationFrame(frameID.current);\n }\n };\n\n const scrollIntoView = useCallback(\n ({ alignment = 'start' }: UseScrollIntoViewAnimation = {}) => {\n shouldStop.current = false;\n\n if (frameID.current) {\n cancel();\n }\n\n const start = getScrollStart({ parent: scrollableRef.current, axis }) ?? 0;\n\n const change =\n getRelativePosition({\n parent: scrollableRef.current,\n target: targetRef.current,\n axis,\n alignment,\n offset,\n isList,\n }) - (scrollableRef.current ? 0 : start);\n\n function animateScroll() {\n if (startTime.current === 0) {\n startTime.current = performance.now();\n }\n\n const now = performance.now();\n const elapsed = now - startTime.current;\n\n // Easing timing progress\n const t = reducedMotion || duration === 0 ? 1 : elapsed / duration;\n\n const distance = start + change * easing(t);\n\n setScrollParam({\n parent: scrollableRef.current,\n axis,\n distance,\n });\n\n if (!shouldStop.current && t < 1) {\n frameID.current = requestAnimationFrame(animateScroll);\n } else {\n typeof onScrollFinish === 'function' && onScrollFinish();\n startTime.current = 0;\n frameID.current = 0;\n cancel();\n }\n }\n animateScroll();\n },\n [axis, duration, easing, isList, offset, onScrollFinish, reducedMotion]\n );\n\n const handleStop = () => {\n if (cancelable) {\n shouldStop.current = true;\n }\n };\n\n /**\n * Detection of one of these events stops scroll animation\n * wheel - mouse wheel / touch pad\n * touchmove - any touchable device\n */\n\n useWindowEvent('wheel', handleStop, {\n passive: true,\n });\n\n useWindowEvent('touchmove', handleStop, {\n passive: true,\n });\n\n // Cleanup requestAnimationFrame\n useEffect(() => cancel, []);\n\n return {\n scrollableRef,\n targetRef,\n scrollIntoView,\n cancel,\n };\n}\n\n// ---------------------------------------------------\n// Helpers\n// ---------------------------------------------------\n\nfunction easeInOutQuad(t: number) {\n return t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t;\n}\n\nfunction getRelativePosition({ axis, target, parent, alignment, offset, isList }: any): number {\n if (!target || (!parent && typeof document === 'undefined')) {\n return 0;\n }\n const isCustomParent = !!parent;\n const parentElement = parent || document.body;\n const parentPosition = parentElement.getBoundingClientRect();\n const targetPosition = target.getBoundingClientRect();\n\n const getDiff = (property: 'top' | 'left'): number =>\n targetPosition[property] - parentPosition[property];\n\n if (axis === 'y') {\n const diff = getDiff('top');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentHeight = isCustomParent ? parentPosition.height : window.innerHeight;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentHeight + targetPosition.height;\n const shouldScroll = distance >= -targetPosition.height * (isList ? 0 : 1) || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentHeight / 2 + targetPosition.height / 2;\n }\n\n return 0;\n }\n\n if (axis === 'x') {\n const diff = getDiff('left');\n\n if (diff === 0) {\n return 0;\n }\n\n if (alignment === 'start') {\n const distance = diff - offset;\n const shouldScroll = distance <= targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n const parentWidth = isCustomParent ? parentPosition.width : window.innerWidth;\n\n if (alignment === 'end') {\n const distance = diff + offset - parentWidth + targetPosition.width;\n const shouldScroll = distance >= -targetPosition.width || !isList;\n\n return shouldScroll ? distance : 0;\n }\n\n if (alignment === 'center') {\n return diff - parentWidth / 2 + targetPosition.width / 2;\n }\n\n return 0;\n }\n\n return 0;\n}\n\nfunction getScrollStart({ axis, parent }: any) {\n if (!parent && typeof document === 'undefined') {\n return 0;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n return parent[method];\n }\n\n const { body, documentElement } = document;\n\n // While one of it has a value the second is equal 0\n return body[method] + documentElement[method];\n}\n\nfunction setScrollParam({ axis, parent, distance }: any) {\n if (!parent && typeof document === 'undefined') {\n return;\n }\n\n const method = axis === 'y' ? 'scrollTop' : 'scrollLeft';\n\n if (parent) {\n parent[method] = distance;\n } else {\n const { body, documentElement } = document;\n body[method] = distance;\n documentElement[method] = distance;\n }\n}\n\nexport namespace useScrollIntoView {\n export type Options = UseScrollIntoViewOptions;\n export type ReturnValue<\n Target extends HTMLElement,\n Parent extends HTMLElement | null,\n > = UseScrollIntoViewReturnValue<Target, Parent>;\n}\n"],"mappings":"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"}
@@ -1,92 +1,68 @@
1
- 'use client';
2
- import { useState, useRef, useEffect } from 'react';
3
- import { randomId } from '../utils/random-id/random-id.mjs';
4
-
1
+ "use client";
2
+ import { randomId } from "../utils/random-id/random-id.mjs";
3
+ import { useEffect, useRef, useState } from "react";
4
+ //#region packages/@mantine/hooks/src/use-scroll-spy/use-scroll-spy.ts
5
5
  function getHeadingsData(headings, getDepth, getValue) {
6
- const result = [];
7
- for (let i = 0; i < headings.length; i += 1) {
8
- const heading = headings[i];
9
- result.push({
10
- depth: getDepth(heading),
11
- value: getValue(heading),
12
- id: heading.id || randomId(),
13
- getNode: () => heading.id ? document.getElementById(heading.id) : heading
14
- });
15
- }
16
- return result;
6
+ const result = [];
7
+ for (let i = 0; i < headings.length; i += 1) {
8
+ const heading = headings[i];
9
+ result.push({
10
+ depth: getDepth(heading),
11
+ value: getValue(heading),
12
+ id: heading.id || randomId(),
13
+ getNode: () => heading.id ? document.getElementById(heading.id) : heading
14
+ });
15
+ }
16
+ return result;
17
17
  }
18
18
  function getActiveElement(rects, offset = 0) {
19
- if (rects.length === 0) {
20
- return -1;
21
- }
22
- const closest = rects.reduce(
23
- (acc, item, index) => {
24
- if (Math.abs(acc.position - offset) < Math.abs(item.y - offset)) {
25
- return acc;
26
- }
27
- return {
28
- index,
29
- position: item.y
30
- };
31
- },
32
- { index: 0, position: rects[0].y }
33
- );
34
- return closest.index;
19
+ if (rects.length === 0) return -1;
20
+ return rects.reduce((acc, item, index) => {
21
+ if (Math.abs(acc.position - offset) < Math.abs(item.y - offset)) return acc;
22
+ return {
23
+ index,
24
+ position: item.y
25
+ };
26
+ }, {
27
+ index: 0,
28
+ position: rects[0].y
29
+ }).index;
35
30
  }
36
31
  function getDefaultDepth(element) {
37
- return Number(element.tagName[1]);
32
+ return Number(element.tagName[1]);
38
33
  }
39
34
  function getDefaultValue(element) {
40
- return element.textContent || "";
35
+ return element.textContent || "";
41
36
  }
42
- function useScrollSpy({
43
- selector = "h1, h2, h3, h4, h5, h6",
44
- getDepth = getDefaultDepth,
45
- getValue = getDefaultValue,
46
- offset = 0,
47
- scrollHost
48
- } = {}) {
49
- const [active, setActive] = useState(-1);
50
- const [initialized, setInitialized] = useState(false);
51
- const [data, setData] = useState([]);
52
- const headingsRef = useRef([]);
53
- const handleScroll = () => {
54
- setActive(
55
- getActiveElement(
56
- headingsRef.current.map((d) => d.getNode().getBoundingClientRect()),
57
- offset
58
- )
59
- );
60
- };
61
- const initialize = () => {
62
- const headings = getHeadingsData(
63
- Array.from(document.querySelectorAll(selector)),
64
- getDepth,
65
- getValue
66
- );
67
- headingsRef.current = headings;
68
- setInitialized(true);
69
- setData(headings);
70
- setActive(
71
- getActiveElement(
72
- headings.map((d) => d.getNode().getBoundingClientRect()),
73
- offset
74
- )
75
- );
76
- };
77
- useEffect(() => {
78
- initialize();
79
- const _scrollHost = scrollHost || window;
80
- _scrollHost.addEventListener("scroll", handleScroll);
81
- return () => _scrollHost.removeEventListener("scroll", handleScroll);
82
- }, [scrollHost]);
83
- return {
84
- reinitialize: initialize,
85
- active,
86
- initialized,
87
- data
88
- };
37
+ function useScrollSpy({ selector = "h1, h2, h3, h4, h5, h6", getDepth = getDefaultDepth, getValue = getDefaultValue, offset = 0, scrollHost } = {}) {
38
+ const [active, setActive] = useState(-1);
39
+ const [initialized, setInitialized] = useState(false);
40
+ const [data, setData] = useState([]);
41
+ const headingsRef = useRef([]);
42
+ const handleScroll = () => {
43
+ setActive(getActiveElement(headingsRef.current.map((d) => d.getNode().getBoundingClientRect()), offset));
44
+ };
45
+ const initialize = () => {
46
+ const headings = getHeadingsData(Array.from(document.querySelectorAll(selector)), getDepth, getValue);
47
+ headingsRef.current = headings;
48
+ setInitialized(true);
49
+ setData(headings);
50
+ setActive(getActiveElement(headings.map((d) => d.getNode().getBoundingClientRect()), offset));
51
+ };
52
+ useEffect(() => {
53
+ initialize();
54
+ const _scrollHost = scrollHost || window;
55
+ _scrollHost.addEventListener("scroll", handleScroll);
56
+ return () => _scrollHost.removeEventListener("scroll", handleScroll);
57
+ }, [scrollHost]);
58
+ return {
59
+ reinitialize: initialize,
60
+ active,
61
+ initialized,
62
+ data
63
+ };
89
64
  }
90
-
65
+ //#endregion
91
66
  export { useScrollSpy };
92
- //# sourceMappingURL=use-scroll-spy.mjs.map
67
+
68
+ //# sourceMappingURL=use-scroll-spy.mjs.map