@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,433 @@
1
+ "use client";
2
+ const require_use_uncontrolled = require("../use-uncontrolled/use-uncontrolled.cjs");
3
+ let react = require("react");
4
+ //#region packages/@mantine/hooks/src/use-splitter/use-splitter.ts
5
+ function clamp(value, min, max) {
6
+ return Math.min(Math.max(value, min), max);
7
+ }
8
+ function getMin(panel) {
9
+ return panel.min ?? 0;
10
+ }
11
+ function getMax(panel) {
12
+ return panel.max ?? 100;
13
+ }
14
+ function getCollapseThreshold(panel) {
15
+ return panel.collapseThreshold ?? getMin(panel);
16
+ }
17
+ function createInitialInternalState() {
18
+ return {
19
+ isDragging: false,
20
+ handleIndex: -1,
21
+ startPointer: 0,
22
+ containerSize: 0,
23
+ startSizes: [],
24
+ preCollapseSizes: []
25
+ };
26
+ }
27
+ function checkCollapse(sizes, panels, handleIndex, delta) {
28
+ const beforeIdx = handleIndex;
29
+ const afterIdx = handleIndex + 1;
30
+ const beforePanel = panels[beforeIdx];
31
+ const afterPanel = panels[afterIdx];
32
+ const rawBefore = sizes[beforeIdx] + delta;
33
+ const rawAfter = sizes[afterIdx] - delta;
34
+ if (beforePanel.collapsible && rawBefore < getCollapseThreshold(beforePanel) && rawBefore < sizes[beforeIdx]) {
35
+ const result = [...sizes];
36
+ result[afterIdx] += result[beforeIdx];
37
+ result[beforeIdx] = 0;
38
+ return result;
39
+ }
40
+ if (afterPanel.collapsible && rawAfter < getCollapseThreshold(afterPanel) && rawAfter < sizes[afterIdx]) {
41
+ const result = [...sizes];
42
+ result[beforeIdx] += result[afterIdx];
43
+ result[afterIdx] = 0;
44
+ return result;
45
+ }
46
+ return null;
47
+ }
48
+ function applyAdjacentOnly(sizes, panels, handleIndex, delta) {
49
+ const result = [...sizes];
50
+ const beforeIdx = handleIndex;
51
+ const afterIdx = handleIndex + 1;
52
+ const total = result[beforeIdx] + result[afterIdx];
53
+ const effectiveBeforeMax = Math.min(getMax(panels[beforeIdx]), total - getMin(panels[afterIdx]));
54
+ const effectiveBeforeMin = Math.max(getMin(panels[beforeIdx]), total - getMax(panels[afterIdx]));
55
+ const newBefore = clamp(result[beforeIdx] + delta, effectiveBeforeMin, effectiveBeforeMax);
56
+ result[beforeIdx] = newBefore;
57
+ result[afterIdx] = total - newBefore;
58
+ return result;
59
+ }
60
+ function redistributeNearest(sizes, panels, handleIndex, delta) {
61
+ const result = [...sizes];
62
+ if (delta > 0) {
63
+ const growIdx = handleIndex;
64
+ const maxGrow = getMax(panels[growIdx]) - result[growIdx];
65
+ const wantedGrow = Math.min(delta, maxGrow);
66
+ let taken = 0;
67
+ for (let i = handleIndex + 1; i < result.length && taken < wantedGrow; i += 1) {
68
+ const canGive = result[i] - getMin(panels[i]);
69
+ const take = Math.min(canGive, wantedGrow - taken);
70
+ result[i] -= take;
71
+ taken += take;
72
+ }
73
+ result[growIdx] += taken;
74
+ } else if (delta < 0) {
75
+ const growIdx = handleIndex + 1;
76
+ const maxGrow = getMax(panels[growIdx]) - result[growIdx];
77
+ const wantedGrow = Math.min(Math.abs(delta), maxGrow);
78
+ let taken = 0;
79
+ for (let i = handleIndex; i >= 0 && taken < wantedGrow; i -= 1) {
80
+ const canGive = result[i] - getMin(panels[i]);
81
+ const take = Math.min(canGive, wantedGrow - taken);
82
+ result[i] -= take;
83
+ taken += take;
84
+ }
85
+ result[growIdx] += taken;
86
+ }
87
+ return result;
88
+ }
89
+ function redistributeEqual(sizes, panels, handleIndex, delta) {
90
+ const result = [...sizes];
91
+ if (delta > 0) {
92
+ const growIdx = handleIndex;
93
+ const maxGrow = getMax(panels[growIdx]) - result[growIdx];
94
+ const wantedGrow = Math.min(delta, maxGrow);
95
+ const donors = [];
96
+ for (let i = handleIndex + 1; i < result.length; i += 1) if (result[i] > getMin(panels[i])) donors.push(i);
97
+ let remaining = wantedGrow;
98
+ while (remaining > .001 && donors.length > 0) {
99
+ const perDonor = remaining / donors.length;
100
+ const exhausted = [];
101
+ for (let d = 0; d < donors.length; d += 1) {
102
+ const idx = donors[d];
103
+ const canGive = result[idx] - getMin(panels[idx]);
104
+ const take = Math.min(canGive, perDonor);
105
+ result[idx] -= take;
106
+ remaining -= take;
107
+ if (canGive <= perDonor + .001) exhausted.push(d);
108
+ }
109
+ for (let i = exhausted.length - 1; i >= 0; i -= 1) donors.splice(exhausted[i], 1);
110
+ if (exhausted.length === 0) break;
111
+ }
112
+ result[growIdx] += wantedGrow - remaining;
113
+ } else if (delta < 0) {
114
+ const growIdx = handleIndex + 1;
115
+ const maxGrow = getMax(panels[growIdx]) - result[growIdx];
116
+ const wantedGrow = Math.min(Math.abs(delta), maxGrow);
117
+ const donors = [];
118
+ for (let i = handleIndex; i >= 0; i -= 1) if (result[i] > getMin(panels[i])) donors.push(i);
119
+ let remaining = wantedGrow;
120
+ while (remaining > .001 && donors.length > 0) {
121
+ const perDonor = remaining / donors.length;
122
+ const exhausted = [];
123
+ for (let d = 0; d < donors.length; d += 1) {
124
+ const idx = donors[d];
125
+ const canGive = result[idx] - getMin(panels[idx]);
126
+ const take = Math.min(canGive, perDonor);
127
+ result[idx] -= take;
128
+ remaining -= take;
129
+ if (canGive <= perDonor + .001) exhausted.push(d);
130
+ }
131
+ for (let i = exhausted.length - 1; i >= 0; i -= 1) donors.splice(exhausted[i], 1);
132
+ if (exhausted.length === 0) break;
133
+ }
134
+ result[growIdx] += wantedGrow - remaining;
135
+ }
136
+ return result;
137
+ }
138
+ function applyConstraints(sizes, panels, handleIndex, delta, redistribute) {
139
+ if (typeof redistribute === "function") return redistribute({
140
+ sizes: [...sizes],
141
+ panels,
142
+ handleIndex,
143
+ delta
144
+ });
145
+ if (redistribute === "nearest" || redistribute === "equal") {
146
+ const result = (redistribute === "nearest" ? redistributeNearest : redistributeEqual)(sizes, panels, handleIndex, delta);
147
+ const beforeIdx = handleIndex;
148
+ const afterIdx = handleIndex + 1;
149
+ const beforePanel = panels[beforeIdx];
150
+ const afterPanel = panels[afterIdx];
151
+ if (beforePanel.collapsible && result[beforeIdx] < getCollapseThreshold(beforePanel) && result[beforeIdx] < sizes[beforeIdx]) {
152
+ const freed = result[beforeIdx];
153
+ result[afterIdx] += freed;
154
+ result[beforeIdx] = 0;
155
+ } else if (afterPanel.collapsible && result[afterIdx] < getCollapseThreshold(afterPanel) && result[afterIdx] < sizes[afterIdx]) {
156
+ const freed = result[afterIdx];
157
+ result[beforeIdx] += freed;
158
+ result[afterIdx] = 0;
159
+ }
160
+ return result;
161
+ }
162
+ const collapsed = checkCollapse(sizes, panels, handleIndex, delta);
163
+ if (collapsed) return collapsed;
164
+ return applyAdjacentOnly(sizes, panels, handleIndex, delta);
165
+ }
166
+ function useSplitter(options) {
167
+ const { panels, orientation = "horizontal", sizes: controlledSizes, onSizeChange, onCollapseChange, redistribute, step = 1, shiftStep = 10, dir = "ltr", enabled = true } = options;
168
+ const defaultSizes = panels.map((p) => p.defaultSize);
169
+ const [currentSizes, setCurrentSizes] = require_use_uncontrolled.useUncontrolled({
170
+ value: controlledSizes,
171
+ defaultValue: defaultSizes,
172
+ finalValue: defaultSizes,
173
+ onChange: onSizeChange
174
+ });
175
+ const [activeHandle, setActiveHandle] = (0, react.useState)(-1);
176
+ const optionsRef = (0, react.useRef)(options);
177
+ optionsRef.current = options;
178
+ const internalStateRef = (0, react.useRef)(createInitialInternalState());
179
+ const containerRef = (0, react.useRef)(null);
180
+ const documentControllerRef = (0, react.useRef)(null);
181
+ const frameRef = (0, react.useRef)(0);
182
+ const currentSizesRef = (0, react.useRef)(currentSizes);
183
+ currentSizesRef.current = currentSizes;
184
+ const preCollapseSizesRef = (0, react.useRef)(defaultSizes);
185
+ const collapsed = currentSizes.map((size) => size === 0);
186
+ const updateSizes = (0, react.useCallback)((newSizes) => {
187
+ currentSizesRef.current = newSizes;
188
+ setCurrentSizes(newSizes);
189
+ }, [setCurrentSizes]);
190
+ const collapsePanel = (0, react.useCallback)((panelIndex) => {
191
+ if (!panels[panelIndex]?.collapsible) return;
192
+ const sizes = currentSizesRef.current;
193
+ if (sizes[panelIndex] === 0) return;
194
+ preCollapseSizesRef.current = [...sizes];
195
+ const newSizes = [...sizes];
196
+ const freedSize = newSizes[panelIndex];
197
+ newSizes[panelIndex] = 0;
198
+ const neighbor = panelIndex === 0 ? 1 : panelIndex - 1;
199
+ newSizes[neighbor] += freedSize;
200
+ updateSizes(newSizes);
201
+ onCollapseChange?.(panelIndex, true);
202
+ }, [
203
+ panels,
204
+ updateSizes,
205
+ onCollapseChange
206
+ ]);
207
+ const expandPanel = (0, react.useCallback)((panelIndex) => {
208
+ if (!panels[panelIndex]?.collapsible) return;
209
+ const sizes = currentSizesRef.current;
210
+ if (sizes[panelIndex] !== 0) return;
211
+ const restoreSize = preCollapseSizesRef.current[panelIndex] || panels[panelIndex].defaultSize;
212
+ const newSizes = [...sizes];
213
+ const neighbor = panelIndex === 0 ? 1 : panelIndex - 1;
214
+ const available = newSizes[neighbor] - getMin(panels[neighbor]);
215
+ const actualRestore = Math.min(restoreSize, available);
216
+ newSizes[panelIndex] = actualRestore;
217
+ newSizes[neighbor] -= actualRestore;
218
+ updateSizes(newSizes);
219
+ onCollapseChange?.(panelIndex, false);
220
+ }, [
221
+ panels,
222
+ updateSizes,
223
+ onCollapseChange
224
+ ]);
225
+ const toggleCollapsePanel = (0, react.useCallback)((panelIndex) => {
226
+ if (currentSizesRef.current[panelIndex] === 0) expandPanel(panelIndex);
227
+ else collapsePanel(panelIndex);
228
+ }, [collapsePanel, expandPanel]);
229
+ const containerRefCallback = (0, react.useCallback)((node) => {
230
+ containerRef.current = node;
231
+ }, []);
232
+ const handleRefCallbacks = (0, react.useRef)(/* @__PURE__ */ new Map());
233
+ const handleElementControllers = (0, react.useRef)(/* @__PURE__ */ new Map());
234
+ const getHandleRefCallback = (0, react.useCallback)((handleIndex) => {
235
+ if (handleRefCallbacks.current.has(handleIndex)) return handleRefCallbacks.current.get(handleIndex);
236
+ const callback = (node) => {
237
+ const existingController = handleElementControllers.current.get(handleIndex);
238
+ if (existingController) {
239
+ existingController.abort();
240
+ handleElementControllers.current.delete(handleIndex);
241
+ }
242
+ if (!node) return;
243
+ const elementController = new AbortController();
244
+ handleElementControllers.current.set(handleIndex, elementController);
245
+ const onPointerDown = (event) => {
246
+ if (optionsRef.current.enabled === false) return;
247
+ if (event.button !== 0) return;
248
+ const container = containerRef.current;
249
+ if (!container) return;
250
+ const rect = container.getBoundingClientRect();
251
+ const isHorizontal = (optionsRef.current.orientation ?? "horizontal") === "horizontal";
252
+ const containerSize = isHorizontal ? rect.width : rect.height;
253
+ const pointerPos = isHorizontal ? event.clientX : event.clientY;
254
+ const s = internalStateRef.current;
255
+ s.isDragging = true;
256
+ s.handleIndex = handleIndex;
257
+ s.startPointer = pointerPos;
258
+ s.containerSize = containerSize;
259
+ s.startSizes = [...currentSizesRef.current];
260
+ s.preCollapseSizes = [...preCollapseSizesRef.current];
261
+ setActiveHandle(handleIndex);
262
+ document.body.style.userSelect = "none";
263
+ document.body.style.webkitUserSelect = "none";
264
+ document.body.style.cursor = isHorizontal ? "col-resize" : "row-resize";
265
+ optionsRef.current.onResizeStart?.(handleIndex);
266
+ documentControllerRef.current?.abort();
267
+ documentControllerRef.current = new AbortController();
268
+ const sig = documentControllerRef.current.signal;
269
+ document.addEventListener("pointermove", onPointerMove, { signal: sig });
270
+ document.addEventListener("pointerup", onPointerUp, { signal: sig });
271
+ document.addEventListener("pointercancel", onPointerUp, { signal: sig });
272
+ };
273
+ const flushResize = (pointerEvent) => {
274
+ const s = internalStateRef.current;
275
+ const percentDelta = (((optionsRef.current.orientation ?? "horizontal") === "horizontal" ? pointerEvent.clientX : pointerEvent.clientY) - s.startPointer) / s.containerSize * 100;
276
+ const opts = optionsRef.current;
277
+ const newSizes = applyConstraints(s.startSizes, opts.panels, s.handleIndex, percentDelta, opts.redistribute);
278
+ const prevSizes = currentSizesRef.current;
279
+ const beforeWasCollapsed = prevSizes[s.handleIndex] === 0;
280
+ const afterWasCollapsed = prevSizes[s.handleIndex + 1] === 0;
281
+ const beforeNowCollapsed = newSizes[s.handleIndex] === 0;
282
+ const afterNowCollapsed = newSizes[s.handleIndex + 1] === 0;
283
+ if (!beforeWasCollapsed && beforeNowCollapsed) {
284
+ preCollapseSizesRef.current = [...s.startSizes];
285
+ opts.onCollapseChange?.(s.handleIndex, true);
286
+ } else if (beforeWasCollapsed && !beforeNowCollapsed) opts.onCollapseChange?.(s.handleIndex, false);
287
+ if (!afterWasCollapsed && afterNowCollapsed) {
288
+ preCollapseSizesRef.current = [...s.startSizes];
289
+ opts.onCollapseChange?.(s.handleIndex + 1, true);
290
+ } else if (afterWasCollapsed && !afterNowCollapsed) opts.onCollapseChange?.(s.handleIndex + 1, false);
291
+ currentSizesRef.current = newSizes;
292
+ setCurrentSizes(newSizes);
293
+ };
294
+ const onPointerMove = (event) => {
295
+ if (!internalStateRef.current.isDragging) return;
296
+ cancelAnimationFrame(frameRef.current);
297
+ frameRef.current = requestAnimationFrame(() => {
298
+ flushResize(event);
299
+ });
300
+ };
301
+ const onPointerUp = (event) => {
302
+ const s = internalStateRef.current;
303
+ if (!s.isDragging) return;
304
+ cancelAnimationFrame(frameRef.current);
305
+ flushResize(event);
306
+ s.isDragging = false;
307
+ const finishedHandle = s.handleIndex;
308
+ s.handleIndex = -1;
309
+ setActiveHandle(-1);
310
+ document.body.style.userSelect = "";
311
+ document.body.style.webkitUserSelect = "";
312
+ document.body.style.cursor = "";
313
+ documentControllerRef.current?.abort();
314
+ documentControllerRef.current = null;
315
+ optionsRef.current.onResizeEnd?.(finishedHandle, [...currentSizesRef.current]);
316
+ };
317
+ node.addEventListener("pointerdown", onPointerDown, { signal: elementController.signal });
318
+ };
319
+ handleRefCallbacks.current.set(handleIndex, callback);
320
+ return callback;
321
+ }, [setCurrentSizes]);
322
+ return {
323
+ ref: containerRefCallback,
324
+ sizes: currentSizes,
325
+ collapsed,
326
+ activeHandle,
327
+ getHandleProps: (0, react.useCallback)((input) => {
328
+ const { index } = input;
329
+ const orient = orientation;
330
+ const beforeSize = currentSizes[index] ?? 0;
331
+ const beforePanel = panels[index];
332
+ const afterPanel = panels[index + 1];
333
+ return {
334
+ ref: getHandleRefCallback(index),
335
+ role: "separator",
336
+ "aria-orientation": orient,
337
+ "aria-valuenow": Math.round(beforeSize),
338
+ "aria-valuemin": Math.round(getMin(beforePanel)),
339
+ "aria-valuemax": Math.round(getMax(beforePanel)),
340
+ tabIndex: 0,
341
+ onKeyDown: (event) => {
342
+ if (!enabled) return;
343
+ const isHorizontal = orient === "horizontal";
344
+ const isRtl = dir === "rtl";
345
+ let delta = 0;
346
+ const currentStep = event.shiftKey ? shiftStep : step;
347
+ switch (event.key) {
348
+ case "ArrowLeft":
349
+ if (isHorizontal) delta = isRtl ? currentStep : -currentStep;
350
+ break;
351
+ case "ArrowRight":
352
+ if (isHorizontal) delta = isRtl ? -currentStep : currentStep;
353
+ break;
354
+ case "ArrowUp":
355
+ if (!isHorizontal) delta = -currentStep;
356
+ break;
357
+ case "ArrowDown":
358
+ if (!isHorizontal) delta = currentStep;
359
+ break;
360
+ case "Home":
361
+ delta = -(currentSizes[index] - getMin(beforePanel));
362
+ break;
363
+ case "End":
364
+ delta = getMax(beforePanel) - currentSizes[index];
365
+ break;
366
+ case "Enter": {
367
+ const beforeCollapsible = beforePanel?.collapsible;
368
+ const afterCollapsible = afterPanel?.collapsible;
369
+ if (beforeCollapsible && currentSizes[index] <= currentSizes[index + 1]) {
370
+ toggleCollapsePanel(index);
371
+ event.preventDefault();
372
+ return;
373
+ }
374
+ if (afterCollapsible) {
375
+ toggleCollapsePanel(index + 1);
376
+ event.preventDefault();
377
+ return;
378
+ }
379
+ if (beforeCollapsible) {
380
+ toggleCollapsePanel(index);
381
+ event.preventDefault();
382
+ return;
383
+ }
384
+ return;
385
+ }
386
+ default: return;
387
+ }
388
+ event.preventDefault();
389
+ if (delta !== 0) {
390
+ const newSizes = applyConstraints(currentSizes, panels, index, delta, redistribute);
391
+ const beforeWas = currentSizes[index] === 0;
392
+ const afterWas = currentSizes[index + 1] === 0;
393
+ const beforeNow = newSizes[index] === 0;
394
+ const afterNow = newSizes[index + 1] === 0;
395
+ if (!beforeWas && beforeNow) {
396
+ preCollapseSizesRef.current = [...currentSizes];
397
+ onCollapseChange?.(index, true);
398
+ } else if (beforeWas && !beforeNow) onCollapseChange?.(index, false);
399
+ if (!afterWas && afterNow) {
400
+ preCollapseSizesRef.current = [...currentSizes];
401
+ onCollapseChange?.(index + 1, true);
402
+ } else if (afterWas && !afterNow) onCollapseChange?.(index + 1, false);
403
+ updateSizes(newSizes);
404
+ }
405
+ },
406
+ "data-active": activeHandle === index || void 0,
407
+ "data-orientation": orient
408
+ };
409
+ }, [
410
+ orientation,
411
+ currentSizes,
412
+ panels,
413
+ enabled,
414
+ dir,
415
+ step,
416
+ shiftStep,
417
+ activeHandle,
418
+ redistribute,
419
+ getHandleRefCallback,
420
+ toggleCollapsePanel,
421
+ updateSizes,
422
+ onCollapseChange
423
+ ]),
424
+ setSizes: updateSizes,
425
+ collapse: collapsePanel,
426
+ expand: expandPanel,
427
+ toggleCollapse: toggleCollapsePanel
428
+ };
429
+ }
430
+ //#endregion
431
+ exports.useSplitter = useSplitter;
432
+
433
+ //# sourceMappingURL=use-splitter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-splitter.cjs","names":["useUncontrolled"],"sources":["../../src/use-splitter/use-splitter.ts"],"sourcesContent":["/* eslint-disable @typescript-eslint/no-deprecated */\nimport { useCallback, useRef, useState } from 'react';\nimport { useUncontrolled } from '../use-uncontrolled/use-uncontrolled';\n\nexport interface UseSplitterPanel {\n /** Initial size as percentage (0-100). All panels must sum to 100. */\n defaultSize: number;\n /** Minimum size percentage, `0` by default */\n min?: number;\n /** Maximum size percentage, `100` by default */\n max?: number;\n /** Whether this panel can be collapsed, `false` by default */\n collapsible?: boolean;\n /** Size below which the panel snaps to collapsed (percentage), defaults to `min` */\n collapseThreshold?: number;\n}\n\nexport interface UseSplitterRedistributeInput {\n /** Current sizes before applying delta */\n sizes: number[];\n /** Panel configurations */\n panels: UseSplitterPanel[];\n /** Index of the handle being dragged */\n handleIndex: number;\n /** Requested size change in percentage (positive = grow before-panel) */\n delta: number;\n}\n\nexport type UseSplitterRedistributeFn = (input: UseSplitterRedistributeInput) => number[];\n\nexport interface UseSplitterOptions {\n /** Panel configuration array (minimum 2 panels) */\n panels: UseSplitterPanel[];\n /** Layout direction, `'horizontal'` by default */\n orientation?: 'horizontal' | 'vertical';\n /** Controlled sizes (percentages summing to 100) */\n sizes?: number[];\n /** Called during resize with updated sizes */\n onSizeChange?: (sizes: number[]) => void;\n /** Called when drag starts */\n onResizeStart?: (handleIndex: number) => void;\n /** Called when drag ends */\n onResizeEnd?: (handleIndex: number, sizes: number[]) => void;\n /** Called when a panel collapses or expands */\n onCollapseChange?: (panelIndex: number, collapsed: boolean) => void;\n /** How to borrow space from non-adjacent panels when the immediate neighbor is at its min/max.\n * `'nearest'` takes from the nearest panel in the drag direction first.\n * `'equal'` distributes equally among all panels in the drag direction.\n * A function receives sizes, panels, handleIndex and delta, and returns new sizes.\n * When not set, only the two adjacent panels are affected. */\n redistribute?: 'nearest' | 'equal' | UseSplitterRedistributeFn;\n /** Keyboard step size in percentage, `1` by default */\n step?: number;\n /** Shift+arrow step size in percentage, `10` by default */\n shiftStep?: number;\n /** Text direction for keyboard nav, `'ltr'` by default */\n dir?: 'ltr' | 'rtl';\n /** Enable/disable the hook, `true` by default */\n enabled?: boolean;\n}\n\nexport interface UseSplitterReturnValue<T extends HTMLElement = any> {\n /** Ref callback for the container element */\n ref: React.RefCallback<T | null>;\n /** Current panel sizes as percentages */\n sizes: number[];\n /** Which panels are currently collapsed */\n collapsed: boolean[];\n /** Index of handle being dragged, or -1 */\n activeHandle: number;\n /** Get props to spread on each resize handle */\n getHandleProps: (input: { index: number }) => {\n ref: React.RefCallback<HTMLElement>;\n role: 'separator';\n 'aria-orientation': 'horizontal' | 'vertical';\n 'aria-valuenow': number;\n 'aria-valuemin': number;\n 'aria-valuemax': number;\n tabIndex: number;\n onKeyDown: React.KeyboardEventHandler;\n 'data-active': boolean | undefined;\n 'data-orientation': 'horizontal' | 'vertical';\n };\n /** Programmatically set sizes */\n setSizes: (sizes: number[]) => void;\n /** Collapse a panel */\n collapse: (panelIndex: number) => void;\n /** Expand a collapsed panel */\n expand: (panelIndex: number) => void;\n /** Toggle collapse of a panel */\n toggleCollapse: (panelIndex: number) => void;\n}\n\nfunction clamp(value: number, min: number, max: number): number {\n return Math.min(Math.max(value, min), max);\n}\n\nfunction getMin(panel: UseSplitterPanel): number {\n return panel.min ?? 0;\n}\n\nfunction getMax(panel: UseSplitterPanel): number {\n return panel.max ?? 100;\n}\n\nfunction getCollapseThreshold(panel: UseSplitterPanel): number {\n return panel.collapseThreshold ?? getMin(panel);\n}\n\ninterface SplitterInternalState {\n isDragging: boolean;\n handleIndex: number;\n startPointer: number;\n containerSize: number;\n startSizes: number[];\n preCollapseSizes: number[];\n}\n\nfunction createInitialInternalState(): SplitterInternalState {\n return {\n isDragging: false,\n handleIndex: -1,\n startPointer: 0,\n containerSize: 0,\n startSizes: [],\n preCollapseSizes: [],\n };\n}\n\nfunction checkCollapse(\n sizes: number[],\n panels: UseSplitterPanel[],\n handleIndex: number,\n delta: number\n): number[] | null {\n const beforeIdx = handleIndex;\n const afterIdx = handleIndex + 1;\n const beforePanel = panels[beforeIdx];\n const afterPanel = panels[afterIdx];\n\n const rawBefore = sizes[beforeIdx] + delta;\n const rawAfter = sizes[afterIdx] - delta;\n\n if (\n beforePanel.collapsible &&\n rawBefore < getCollapseThreshold(beforePanel) &&\n rawBefore < sizes[beforeIdx]\n ) {\n const result = [...sizes];\n result[afterIdx] += result[beforeIdx];\n result[beforeIdx] = 0;\n return result;\n }\n\n if (\n afterPanel.collapsible &&\n rawAfter < getCollapseThreshold(afterPanel) &&\n rawAfter < sizes[afterIdx]\n ) {\n const result = [...sizes];\n result[beforeIdx] += result[afterIdx];\n result[afterIdx] = 0;\n return result;\n }\n\n return null;\n}\n\nfunction applyAdjacentOnly(\n sizes: number[],\n panels: UseSplitterPanel[],\n handleIndex: number,\n delta: number\n): number[] {\n const result = [...sizes];\n const beforeIdx = handleIndex;\n const afterIdx = handleIndex + 1;\n\n const total = result[beforeIdx] + result[afterIdx];\n const effectiveBeforeMax = Math.min(getMax(panels[beforeIdx]), total - getMin(panels[afterIdx]));\n const effectiveBeforeMin = Math.max(getMin(panels[beforeIdx]), total - getMax(panels[afterIdx]));\n const newBefore = clamp(result[beforeIdx] + delta, effectiveBeforeMin, effectiveBeforeMax);\n result[beforeIdx] = newBefore;\n result[afterIdx] = total - newBefore;\n return result;\n}\n\nfunction redistributeNearest(\n sizes: number[],\n panels: UseSplitterPanel[],\n handleIndex: number,\n delta: number\n): number[] {\n const result = [...sizes];\n\n if (delta > 0) {\n const growIdx = handleIndex;\n const maxGrow = getMax(panels[growIdx]) - result[growIdx];\n const wantedGrow = Math.min(delta, maxGrow);\n\n let taken = 0;\n for (let i = handleIndex + 1; i < result.length && taken < wantedGrow; i += 1) {\n const canGive = result[i] - getMin(panels[i]);\n const take = Math.min(canGive, wantedGrow - taken);\n result[i] -= take;\n taken += take;\n }\n\n result[growIdx] += taken;\n } else if (delta < 0) {\n const growIdx = handleIndex + 1;\n const maxGrow = getMax(panels[growIdx]) - result[growIdx];\n const wantedGrow = Math.min(Math.abs(delta), maxGrow);\n\n let taken = 0;\n for (let i = handleIndex; i >= 0 && taken < wantedGrow; i -= 1) {\n const canGive = result[i] - getMin(panels[i]);\n const take = Math.min(canGive, wantedGrow - taken);\n result[i] -= take;\n taken += take;\n }\n\n result[growIdx] += taken;\n }\n\n return result;\n}\n\nfunction redistributeEqual(\n sizes: number[],\n panels: UseSplitterPanel[],\n handleIndex: number,\n delta: number\n): number[] {\n const result = [...sizes];\n\n if (delta > 0) {\n const growIdx = handleIndex;\n const maxGrow = getMax(panels[growIdx]) - result[growIdx];\n const wantedGrow = Math.min(delta, maxGrow);\n\n const donors: number[] = [];\n for (let i = handleIndex + 1; i < result.length; i += 1) {\n if (result[i] > getMin(panels[i])) {\n donors.push(i);\n }\n }\n\n let remaining = wantedGrow;\n while (remaining > 0.001 && donors.length > 0) {\n const perDonor = remaining / donors.length;\n const exhausted: number[] = [];\n\n for (let d = 0; d < donors.length; d += 1) {\n const idx = donors[d];\n const canGive = result[idx] - getMin(panels[idx]);\n const take = Math.min(canGive, perDonor);\n result[idx] -= take;\n remaining -= take;\n if (canGive <= perDonor + 0.001) {\n exhausted.push(d);\n }\n }\n\n for (let i = exhausted.length - 1; i >= 0; i -= 1) {\n donors.splice(exhausted[i], 1);\n }\n\n if (exhausted.length === 0) {\n break;\n }\n }\n\n result[growIdx] += wantedGrow - remaining;\n } else if (delta < 0) {\n const growIdx = handleIndex + 1;\n const maxGrow = getMax(panels[growIdx]) - result[growIdx];\n const wantedGrow = Math.min(Math.abs(delta), maxGrow);\n\n const donors: number[] = [];\n for (let i = handleIndex; i >= 0; i -= 1) {\n if (result[i] > getMin(panels[i])) {\n donors.push(i);\n }\n }\n\n let remaining = wantedGrow;\n while (remaining > 0.001 && donors.length > 0) {\n const perDonor = remaining / donors.length;\n const exhausted: number[] = [];\n\n for (let d = 0; d < donors.length; d += 1) {\n const idx = donors[d];\n const canGive = result[idx] - getMin(panels[idx]);\n const take = Math.min(canGive, perDonor);\n result[idx] -= take;\n remaining -= take;\n if (canGive <= perDonor + 0.001) {\n exhausted.push(d);\n }\n }\n\n for (let i = exhausted.length - 1; i >= 0; i -= 1) {\n donors.splice(exhausted[i], 1);\n }\n\n if (exhausted.length === 0) {\n break;\n }\n }\n\n result[growIdx] += wantedGrow - remaining;\n }\n\n return result;\n}\n\nfunction applyConstraints(\n sizes: number[],\n panels: UseSplitterPanel[],\n handleIndex: number,\n delta: number,\n redistribute?: 'nearest' | 'equal' | UseSplitterRedistributeFn\n): number[] {\n if (typeof redistribute === 'function') {\n return redistribute({ sizes: [...sizes], panels, handleIndex, delta });\n }\n\n if (redistribute === 'nearest' || redistribute === 'equal') {\n const strategy = redistribute === 'nearest' ? redistributeNearest : redistributeEqual;\n const result = strategy(sizes, panels, handleIndex, delta);\n\n const beforeIdx = handleIndex;\n const afterIdx = handleIndex + 1;\n const beforePanel = panels[beforeIdx];\n const afterPanel = panels[afterIdx];\n\n if (\n beforePanel.collapsible &&\n result[beforeIdx] < getCollapseThreshold(beforePanel) &&\n result[beforeIdx] < sizes[beforeIdx]\n ) {\n const freed = result[beforeIdx];\n result[afterIdx] += freed;\n result[beforeIdx] = 0;\n } else if (\n afterPanel.collapsible &&\n result[afterIdx] < getCollapseThreshold(afterPanel) &&\n result[afterIdx] < sizes[afterIdx]\n ) {\n const freed = result[afterIdx];\n result[beforeIdx] += freed;\n result[afterIdx] = 0;\n }\n\n return result;\n }\n\n const collapsed = checkCollapse(sizes, panels, handleIndex, delta);\n if (collapsed) {\n return collapsed;\n }\n\n return applyAdjacentOnly(sizes, panels, handleIndex, delta);\n}\n\nexport function useSplitter<T extends HTMLElement = any>(\n options: UseSplitterOptions\n): UseSplitterReturnValue<T> {\n const {\n panels,\n orientation = 'horizontal',\n sizes: controlledSizes,\n onSizeChange,\n onCollapseChange,\n redistribute,\n step = 1,\n shiftStep = 10,\n dir = 'ltr',\n enabled = true,\n } = options;\n\n const defaultSizes = panels.map((p) => p.defaultSize);\n\n const [currentSizes, setCurrentSizes] = useUncontrolled({\n value: controlledSizes,\n defaultValue: defaultSizes,\n finalValue: defaultSizes,\n onChange: onSizeChange,\n });\n\n const [activeHandle, setActiveHandle] = useState(-1);\n\n const optionsRef = useRef(options);\n optionsRef.current = options;\n\n const internalStateRef = useRef<SplitterInternalState>(createInitialInternalState());\n const containerRef = useRef<T | null>(null);\n const documentControllerRef = useRef<AbortController | null>(null);\n const frameRef = useRef(0);\n const currentSizesRef = useRef(currentSizes);\n currentSizesRef.current = currentSizes;\n\n const preCollapseSizesRef = useRef<number[]>(defaultSizes);\n\n const collapsed = currentSizes.map((size) => size === 0);\n\n const updateSizes = useCallback(\n (newSizes: number[]) => {\n currentSizesRef.current = newSizes;\n setCurrentSizes(newSizes);\n },\n [setCurrentSizes]\n );\n\n const collapsePanel = useCallback(\n (panelIndex: number) => {\n if (!panels[panelIndex]?.collapsible) {\n return;\n }\n const sizes = currentSizesRef.current;\n if (sizes[panelIndex] === 0) {\n return;\n }\n\n preCollapseSizesRef.current = [...sizes];\n const newSizes = [...sizes];\n const freedSize = newSizes[panelIndex];\n newSizes[panelIndex] = 0;\n\n const neighbor = panelIndex === 0 ? 1 : panelIndex - 1;\n newSizes[neighbor] += freedSize;\n\n updateSizes(newSizes);\n onCollapseChange?.(panelIndex, true);\n },\n [panels, updateSizes, onCollapseChange]\n );\n\n const expandPanel = useCallback(\n (panelIndex: number) => {\n if (!panels[panelIndex]?.collapsible) {\n return;\n }\n const sizes = currentSizesRef.current;\n if (sizes[panelIndex] !== 0) {\n return;\n }\n\n const preCollapse = preCollapseSizesRef.current;\n const restoreSize = preCollapse[panelIndex] || panels[panelIndex].defaultSize;\n const newSizes = [...sizes];\n\n const neighbor = panelIndex === 0 ? 1 : panelIndex - 1;\n const available = newSizes[neighbor] - getMin(panels[neighbor]);\n const actualRestore = Math.min(restoreSize, available);\n\n newSizes[panelIndex] = actualRestore;\n newSizes[neighbor] -= actualRestore;\n\n updateSizes(newSizes);\n onCollapseChange?.(panelIndex, false);\n },\n [panels, updateSizes, onCollapseChange]\n );\n\n const toggleCollapsePanel = useCallback(\n (panelIndex: number) => {\n if (currentSizesRef.current[panelIndex] === 0) {\n expandPanel(panelIndex);\n } else {\n collapsePanel(panelIndex);\n }\n },\n [collapsePanel, expandPanel]\n );\n\n const containerRefCallback: React.RefCallback<T | null> = useCallback((node) => {\n containerRef.current = node;\n }, []);\n\n const handleRefCallbacks = useRef<Map<number, (node: HTMLElement | null) => void>>(new Map());\n const handleElementControllers = useRef<Map<number, AbortController>>(new Map());\n\n const getHandleRefCallback = useCallback(\n (handleIndex: number): React.RefCallback<HTMLElement> => {\n if (handleRefCallbacks.current.has(handleIndex)) {\n return handleRefCallbacks.current.get(handleIndex)!;\n }\n\n const callback = (node: HTMLElement | null) => {\n const existingController = handleElementControllers.current.get(handleIndex);\n if (existingController) {\n existingController.abort();\n handleElementControllers.current.delete(handleIndex);\n }\n\n if (!node) {\n return;\n }\n\n const elementController = new AbortController();\n handleElementControllers.current.set(handleIndex, elementController);\n\n const onPointerDown = (event: PointerEvent) => {\n if (optionsRef.current.enabled === false) {\n return;\n }\n if (event.button !== 0) {\n return;\n }\n\n const container = containerRef.current;\n if (!container) {\n return;\n }\n\n const rect = container.getBoundingClientRect();\n const isHorizontal = (optionsRef.current.orientation ?? 'horizontal') === 'horizontal';\n const containerSize = isHorizontal ? rect.width : rect.height;\n const pointerPos = isHorizontal ? event.clientX : event.clientY;\n\n const s = internalStateRef.current;\n s.isDragging = true;\n s.handleIndex = handleIndex;\n s.startPointer = pointerPos;\n s.containerSize = containerSize;\n s.startSizes = [...currentSizesRef.current];\n s.preCollapseSizes = [...preCollapseSizesRef.current];\n\n setActiveHandle(handleIndex);\n document.body.style.userSelect = 'none';\n document.body.style.webkitUserSelect = 'none';\n document.body.style.cursor = isHorizontal ? 'col-resize' : 'row-resize';\n\n optionsRef.current.onResizeStart?.(handleIndex);\n\n documentControllerRef.current?.abort();\n documentControllerRef.current = new AbortController();\n const sig = documentControllerRef.current.signal;\n\n document.addEventListener('pointermove', onPointerMove, { signal: sig });\n document.addEventListener('pointerup', onPointerUp, { signal: sig });\n document.addEventListener('pointercancel', onPointerUp, { signal: sig });\n };\n\n const flushResize = (pointerEvent: PointerEvent) => {\n const s = internalStateRef.current;\n const isHorizontal = (optionsRef.current.orientation ?? 'horizontal') === 'horizontal';\n const pointerPos = isHorizontal ? pointerEvent.clientX : pointerEvent.clientY;\n const pixelDelta = pointerPos - s.startPointer;\n const percentDelta = (pixelDelta / s.containerSize) * 100;\n\n const opts = optionsRef.current;\n const newSizes = applyConstraints(\n s.startSizes,\n opts.panels,\n s.handleIndex,\n percentDelta,\n opts.redistribute\n );\n\n const prevSizes = currentSizesRef.current;\n const beforeWasCollapsed = prevSizes[s.handleIndex] === 0;\n const afterWasCollapsed = prevSizes[s.handleIndex + 1] === 0;\n const beforeNowCollapsed = newSizes[s.handleIndex] === 0;\n const afterNowCollapsed = newSizes[s.handleIndex + 1] === 0;\n\n if (!beforeWasCollapsed && beforeNowCollapsed) {\n preCollapseSizesRef.current = [...s.startSizes];\n opts.onCollapseChange?.(s.handleIndex, true);\n } else if (beforeWasCollapsed && !beforeNowCollapsed) {\n opts.onCollapseChange?.(s.handleIndex, false);\n }\n\n if (!afterWasCollapsed && afterNowCollapsed) {\n preCollapseSizesRef.current = [...s.startSizes];\n opts.onCollapseChange?.(s.handleIndex + 1, true);\n } else if (afterWasCollapsed && !afterNowCollapsed) {\n opts.onCollapseChange?.(s.handleIndex + 1, false);\n }\n\n currentSizesRef.current = newSizes;\n setCurrentSizes(newSizes);\n };\n\n const onPointerMove = (event: PointerEvent) => {\n const s = internalStateRef.current;\n if (!s.isDragging) {\n return;\n }\n\n cancelAnimationFrame(frameRef.current);\n frameRef.current = requestAnimationFrame(() => {\n flushResize(event);\n });\n };\n\n const onPointerUp = (event: PointerEvent) => {\n const s = internalStateRef.current;\n if (!s.isDragging) {\n return;\n }\n\n cancelAnimationFrame(frameRef.current);\n flushResize(event);\n\n s.isDragging = false;\n const finishedHandle = s.handleIndex;\n s.handleIndex = -1;\n\n setActiveHandle(-1);\n document.body.style.userSelect = '';\n document.body.style.webkitUserSelect = '';\n document.body.style.cursor = '';\n\n documentControllerRef.current?.abort();\n documentControllerRef.current = null;\n\n optionsRef.current.onResizeEnd?.(finishedHandle, [...currentSizesRef.current]);\n };\n\n node.addEventListener('pointerdown', onPointerDown, {\n signal: elementController.signal,\n });\n };\n\n handleRefCallbacks.current.set(handleIndex, callback);\n return callback;\n },\n [setCurrentSizes]\n );\n\n const getHandleProps = useCallback(\n (input: { index: number }) => {\n const { index } = input;\n const orient = orientation;\n const beforeSize = currentSizes[index] ?? 0;\n const beforePanel = panels[index];\n const afterPanel = panels[index + 1];\n\n return {\n ref: getHandleRefCallback(index),\n role: 'separator' as const,\n 'aria-orientation': orient,\n 'aria-valuenow': Math.round(beforeSize),\n 'aria-valuemin': Math.round(getMin(beforePanel)),\n 'aria-valuemax': Math.round(getMax(beforePanel)),\n tabIndex: 0,\n onKeyDown: (event: React.KeyboardEvent) => {\n if (!enabled) {\n return;\n }\n\n const isHorizontal = orient === 'horizontal';\n const isRtl = dir === 'rtl';\n\n let delta = 0;\n const currentStep = event.shiftKey ? shiftStep : step;\n\n switch (event.key) {\n case 'ArrowLeft': {\n if (isHorizontal) {\n delta = isRtl ? currentStep : -currentStep;\n }\n break;\n }\n case 'ArrowRight': {\n if (isHorizontal) {\n delta = isRtl ? -currentStep : currentStep;\n }\n break;\n }\n case 'ArrowUp': {\n if (!isHorizontal) {\n delta = -currentStep;\n }\n break;\n }\n case 'ArrowDown': {\n if (!isHorizontal) {\n delta = currentStep;\n }\n break;\n }\n case 'Home': {\n delta = -(currentSizes[index] - getMin(beforePanel));\n break;\n }\n case 'End': {\n delta = getMax(beforePanel) - currentSizes[index];\n break;\n }\n case 'Enter': {\n const beforeCollapsible = beforePanel?.collapsible;\n const afterCollapsible = afterPanel?.collapsible;\n\n if (beforeCollapsible && currentSizes[index] <= currentSizes[index + 1]) {\n toggleCollapsePanel(index);\n event.preventDefault();\n return;\n }\n if (afterCollapsible) {\n toggleCollapsePanel(index + 1);\n event.preventDefault();\n return;\n }\n if (beforeCollapsible) {\n toggleCollapsePanel(index);\n event.preventDefault();\n return;\n }\n return;\n }\n default:\n return;\n }\n\n event.preventDefault();\n\n if (delta !== 0) {\n const newSizes = applyConstraints(currentSizes, panels, index, delta, redistribute);\n const beforeWas = currentSizes[index] === 0;\n const afterWas = currentSizes[index + 1] === 0;\n const beforeNow = newSizes[index] === 0;\n const afterNow = newSizes[index + 1] === 0;\n\n if (!beforeWas && beforeNow) {\n preCollapseSizesRef.current = [...currentSizes];\n onCollapseChange?.(index, true);\n } else if (beforeWas && !beforeNow) {\n onCollapseChange?.(index, false);\n }\n\n if (!afterWas && afterNow) {\n preCollapseSizesRef.current = [...currentSizes];\n onCollapseChange?.(index + 1, true);\n } else if (afterWas && !afterNow) {\n onCollapseChange?.(index + 1, false);\n }\n\n updateSizes(newSizes);\n }\n },\n 'data-active': activeHandle === index || undefined,\n 'data-orientation': orient,\n };\n },\n [\n orientation,\n currentSizes,\n panels,\n enabled,\n dir,\n step,\n shiftStep,\n activeHandle,\n redistribute,\n getHandleRefCallback,\n toggleCollapsePanel,\n updateSizes,\n onCollapseChange,\n ]\n );\n\n return {\n ref: containerRefCallback,\n sizes: currentSizes,\n collapsed,\n activeHandle,\n getHandleProps,\n setSizes: updateSizes,\n collapse: collapsePanel,\n expand: expandPanel,\n toggleCollapse: toggleCollapsePanel,\n };\n}\n\nexport namespace useSplitter {\n export type Panel = UseSplitterPanel;\n export type Options = UseSplitterOptions;\n export type RedistributeInput = UseSplitterRedistributeInput;\n export type RedistributeFn = UseSplitterRedistributeFn;\n export type ReturnValue<T extends HTMLElement = any> = UseSplitterReturnValue<T>;\n}\n"],"mappings":"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"}
@@ -1,43 +1,50 @@
1
- 'use client';
2
- 'use strict';
3
-
4
- var react = require('react');
5
-
1
+ "use client";
2
+ let react = require("react");
3
+ //#region packages/@mantine/hooks/src/use-state-history/use-state-history.ts
6
4
  function useStateHistory(initialValue) {
7
- const [state, setState] = react.useState({
8
- history: [initialValue],
9
- current: 0
10
- });
11
- const set = react.useCallback(
12
- (val) => setState((currentState) => {
13
- const nextState = [...currentState.history.slice(0, currentState.current + 1), val];
14
- return {
15
- history: nextState,
16
- current: nextState.length - 1
17
- };
18
- }),
19
- []
20
- );
21
- const back = react.useCallback(
22
- (steps = 1) => setState((currentState) => ({
23
- history: currentState.history,
24
- current: Math.max(0, currentState.current - steps)
25
- })),
26
- []
27
- );
28
- const forward = react.useCallback(
29
- (steps = 1) => setState((currentState) => ({
30
- history: currentState.history,
31
- current: Math.min(currentState.history.length - 1, currentState.current + steps)
32
- })),
33
- []
34
- );
35
- const reset = react.useCallback(() => {
36
- setState({ history: [initialValue], current: 0 });
37
- }, [initialValue]);
38
- const handlers = react.useMemo(() => ({ back, forward, reset, set }), [back, forward, reset, set]);
39
- return [state.history[state.current], handlers, state];
5
+ const [state, setState] = (0, react.useState)({
6
+ history: [initialValue],
7
+ current: 0
8
+ });
9
+ const set = (0, react.useCallback)((val) => setState((currentState) => {
10
+ const nextState = [...currentState.history.slice(0, currentState.current + 1), val];
11
+ return {
12
+ history: nextState,
13
+ current: nextState.length - 1
14
+ };
15
+ }), []);
16
+ const back = (0, react.useCallback)((steps = 1) => setState((currentState) => ({
17
+ history: currentState.history,
18
+ current: Math.max(0, currentState.current - steps)
19
+ })), []);
20
+ const forward = (0, react.useCallback)((steps = 1) => setState((currentState) => ({
21
+ history: currentState.history,
22
+ current: Math.min(currentState.history.length - 1, currentState.current + steps)
23
+ })), []);
24
+ const reset = (0, react.useCallback)(() => {
25
+ setState({
26
+ history: [initialValue],
27
+ current: 0
28
+ });
29
+ }, [initialValue]);
30
+ const handlers = (0, react.useMemo)(() => ({
31
+ back,
32
+ forward,
33
+ reset,
34
+ set
35
+ }), [
36
+ back,
37
+ forward,
38
+ reset,
39
+ set
40
+ ]);
41
+ return [
42
+ state.history[state.current],
43
+ handlers,
44
+ state
45
+ ];
40
46
  }
41
-
47
+ //#endregion
42
48
  exports.useStateHistory = useStateHistory;
43
- //# sourceMappingURL=use-state-history.cjs.map
49
+
50
+ //# sourceMappingURL=use-state-history.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-state-history.cjs","sources":["../../src/use-state-history/use-state-history.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\n\nexport interface UseStateHistoryHandlers<T> {\n set: (value: T) => void;\n back: (steps?: number) => void;\n forward: (steps?: number) => void;\n reset: () => void;\n}\n\nexport interface UseStateHistoryValue<T> {\n history: T[];\n current: number;\n}\n\nexport type UseStateHistoryReturnValue<T> = [\n T,\n UseStateHistoryHandlers<T>,\n UseStateHistoryValue<T>,\n];\n\nexport function useStateHistory<T>(initialValue: T): UseStateHistoryReturnValue<T> {\n const [state, setState] = useState<UseStateHistoryValue<T>>({\n history: [initialValue],\n current: 0,\n });\n\n const set = useCallback(\n (val: T) =>\n setState((currentState) => {\n const nextState = [...currentState.history.slice(0, currentState.current + 1), val];\n return {\n history: nextState,\n current: nextState.length - 1,\n };\n }),\n []\n );\n\n const back = useCallback(\n (steps = 1) =>\n setState((currentState) => ({\n history: currentState.history,\n current: Math.max(0, currentState.current - steps),\n })),\n []\n );\n\n const forward = useCallback(\n (steps = 1) =>\n setState((currentState) => ({\n history: currentState.history,\n current: Math.min(currentState.history.length - 1, currentState.current + steps),\n })),\n []\n );\n\n const reset = useCallback(() => {\n setState({ history: [initialValue], current: 0 });\n }, [initialValue]);\n\n const handlers = useMemo(() => ({ back, forward, reset, set }), [back, forward, reset, set]);\n\n return [state.history[state.current], handlers, state];\n}\n\nexport namespace useStateHistory {\n export type Handlers<T> = UseStateHistoryHandlers<T>;\n export type Value<T> = UseStateHistoryValue<T>;\n export type ReturnValue<T> = UseStateHistoryReturnValue<T>;\n}\n"],"names":["useState","useCallback","useMemo"],"mappings":";;;;;AAoBO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgD,CAAA;AACjF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,QAAQ,CAAA,CAAA,CAAA,CAAIA,cAAA,CAAkC,CAAA;AAAA,CAAA,CAAA,CAAA,CAC1D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACtB,OAAA,CAAA,CAAS,CAAA;AAAA,CAAA,CAAA,CACV,CAAA,CAAA;AAED,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAMC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACV,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACC,QAAA,CAAS,CAAC,YAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA;AACzB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,SAAA,CAAA,CAAA,CAAY,CAAC,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,OAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAG,YAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAU,CAAC,CAAA,CAAA,CAAG,CAAA,CAAA,CAAG,CAAA,CAAA;AAClF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACT,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAU,MAAA,CAAA,CAAA,CAAS,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC9B,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAC,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACH,CAAA,CAAA;AAAC,CAAA,CAAA,CACH,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAOA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACX,CAAC,KAAA,CAAA,CAAA,CAAQ,CAAA,KACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACtB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAS,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAU,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACnD,CAAE,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACJ,CAAA,CAAA;AAAC,CAAA,CAAA,CACH,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAUA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACd,CAAC,KAAA,CAAA,CAAA,CAAQ,CAAA,KACP,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACtB,OAAA,CAAA,CAAS,CAAA,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAI,YAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAS,CAAA,CAAA,CAAG,YAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAU,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CACjF,CAAE,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACJ,CAAA,CAAA;AAAC,CAAA,CAAA,CACH,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,EAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAC9B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,GAAG,CAAA,CAAA;AAAA,CAAA,CAClD,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA;AAEjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAWC,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAE,CAAA,CAAA,CAAA,GAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAA,CAAA,CAAI,CAAA,CAAA,CAAI,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAG,CAAC,CAAA,CAAA;AAE3F,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAU,KAAK,CAAA,CAAA;AACvD,CAAA;;"}
1
+ {"version":3,"file":"use-state-history.cjs","names":[],"sources":["../../src/use-state-history/use-state-history.ts"],"sourcesContent":["import { useCallback, useMemo, useState } from 'react';\n\nexport interface UseStateHistoryHandlers<T> {\n set: (value: T) => void;\n back: (steps?: number) => void;\n forward: (steps?: number) => void;\n reset: () => void;\n}\n\nexport interface UseStateHistoryValue<T> {\n history: T[];\n current: number;\n}\n\nexport type UseStateHistoryReturnValue<T> = [\n T,\n UseStateHistoryHandlers<T>,\n UseStateHistoryValue<T>,\n];\n\nexport function useStateHistory<T>(initialValue: T): UseStateHistoryReturnValue<T> {\n const [state, setState] = useState<UseStateHistoryValue<T>>({\n history: [initialValue],\n current: 0,\n });\n\n const set = useCallback(\n (val: T) =>\n setState((currentState) => {\n const nextState = [...currentState.history.slice(0, currentState.current + 1), val];\n return {\n history: nextState,\n current: nextState.length - 1,\n };\n }),\n []\n );\n\n const back = useCallback(\n (steps = 1) =>\n setState((currentState) => ({\n history: currentState.history,\n current: Math.max(0, currentState.current - steps),\n })),\n []\n );\n\n const forward = useCallback(\n (steps = 1) =>\n setState((currentState) => ({\n history: currentState.history,\n current: Math.min(currentState.history.length - 1, currentState.current + steps),\n })),\n []\n );\n\n const reset = useCallback(() => {\n setState({ history: [initialValue], current: 0 });\n }, [initialValue]);\n\n const handlers = useMemo(() => ({ back, forward, reset, set }), [back, forward, reset, set]);\n\n return [state.history[state.current], handlers, state];\n}\n\nexport namespace useStateHistory {\n export type Handlers<T> = UseStateHistoryHandlers<T>;\n export type Value<T> = UseStateHistoryValue<T>;\n export type ReturnValue<T> = UseStateHistoryReturnValue<T>;\n}\n"],"mappings":";;;AAoBA,SAAgB,gBAAmB,cAAgD;CACjF,MAAM,CAAC,OAAO,aAAA,GAAA,MAAA,UAA8C;EAC1D,SAAS,CAAC,aAAa;EACvB,SAAS;EACV,CAAC;CAEF,MAAM,OAAA,GAAA,MAAA,cACH,QACC,UAAU,iBAAiB;EACzB,MAAM,YAAY,CAAC,GAAG,aAAa,QAAQ,MAAM,GAAG,aAAa,UAAU,EAAE,EAAE,IAAI;AACnF,SAAO;GACL,SAAS;GACT,SAAS,UAAU,SAAS;GAC7B;GACD,EACJ,EAAE,CACH;CAED,MAAM,QAAA,GAAA,MAAA,cACH,QAAQ,MACP,UAAU,kBAAkB;EAC1B,SAAS,aAAa;EACtB,SAAS,KAAK,IAAI,GAAG,aAAa,UAAU,MAAM;EACnD,EAAE,EACL,EAAE,CACH;CAED,MAAM,WAAA,GAAA,MAAA,cACH,QAAQ,MACP,UAAU,kBAAkB;EAC1B,SAAS,aAAa;EACtB,SAAS,KAAK,IAAI,aAAa,QAAQ,SAAS,GAAG,aAAa,UAAU,MAAM;EACjF,EAAE,EACL,EAAE,CACH;CAED,MAAM,SAAA,GAAA,MAAA,mBAA0B;AAC9B,WAAS;GAAE,SAAS,CAAC,aAAa;GAAE,SAAS;GAAG,CAAC;IAChD,CAAC,aAAa,CAAC;CAElB,MAAM,YAAA,GAAA,MAAA,gBAA0B;EAAE;EAAM;EAAS;EAAO;EAAK,GAAG;EAAC;EAAM;EAAS;EAAO;EAAI,CAAC;AAE5F,QAAO;EAAC,MAAM,QAAQ,MAAM;EAAU;EAAU;EAAM"}