@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
@@ -1,106 +1,101 @@
1
- 'use client';
2
- import { useRef, useState, useEffect, useCallback } from 'react';
3
- import { clamp } from '../utils/clamp/clamp.mjs';
4
-
1
+ "use client";
2
+ import { clamp } from "../utils/clamp/clamp.mjs";
3
+ import { useCallback, useEffect, useRef, useState } from "react";
4
+ //#region packages/@mantine/hooks/src/use-radial-move/use-radial-move.ts
5
5
  function radiansToDegrees(radians) {
6
- return radians * (180 / Math.PI);
6
+ return radians * (180 / Math.PI);
7
7
  }
8
8
  function getElementCenter(element) {
9
- const rect = element.getBoundingClientRect();
10
- return [rect.left + rect.width / 2, rect.top + rect.height / 2];
9
+ const rect = element.getBoundingClientRect();
10
+ return [rect.left + rect.width / 2, rect.top + rect.height / 2];
11
11
  }
12
12
  function getAngle(coordinates, element) {
13
- const center = getElementCenter(element);
14
- const x = coordinates[0] - center[0];
15
- const y = coordinates[1] - center[1];
16
- const deg = radiansToDegrees(Math.atan2(x, y)) + 180;
17
- return 360 - deg;
13
+ const center = getElementCenter(element);
14
+ const x = coordinates[0] - center[0];
15
+ const y = coordinates[1] - center[1];
16
+ return 360 - (radiansToDegrees(Math.atan2(x, y)) + 180);
18
17
  }
19
18
  function toFixed(value, digits) {
20
- return parseFloat(value.toFixed(digits));
19
+ return parseFloat(value.toFixed(digits));
21
20
  }
22
21
  function getDigitsAfterDot(value) {
23
- return value.toString().split(".")[1]?.length || 0;
22
+ return value.toString().split(".")[1]?.length || 0;
24
23
  }
25
24
  function normalizeRadialValue(degree, step) {
26
- const clamped = clamp(degree, 0, 360);
27
- const high = Math.ceil(clamped / step);
28
- const low = Math.round(clamped / step);
29
- return toFixed(
30
- high >= clamped / step ? high * step === 360 ? 0 : high * step : low * step,
31
- getDigitsAfterDot(step)
32
- );
25
+ const clamped = clamp(degree, 0, 360);
26
+ const high = Math.ceil(clamped / step);
27
+ const low = Math.round(clamped / step);
28
+ return toFixed(high >= clamped / step ? high * step === 360 ? 0 : high * step : low * step, getDigitsAfterDot(step));
33
29
  }
34
- function useRadialMove(onChange, { step = 0.01, onChangeEnd, onScrubStart, onScrubEnd } = {}) {
35
- const mounted = useRef(false);
36
- const [active, setActive] = useState(false);
37
- useEffect(() => {
38
- mounted.current = true;
39
- }, []);
40
- const refCallback = useCallback(
41
- (node) => {
42
- const update = (event, done = false) => {
43
- if (node) {
44
- node.style.userSelect = "none";
45
- const deg = getAngle([event.clientX, event.clientY], node);
46
- const newValue = normalizeRadialValue(deg, step || 1);
47
- onChange(newValue);
48
- done && onChangeEnd?.(newValue);
49
- }
50
- };
51
- const beginTracking = () => {
52
- onScrubStart?.();
53
- setActive(true);
54
- document.addEventListener("mousemove", handleMouseMove, false);
55
- document.addEventListener("mouseup", handleMouseUp, false);
56
- document.addEventListener("touchmove", handleTouchMove, { passive: false });
57
- document.addEventListener("touchend", handleTouchEnd, false);
58
- };
59
- const endTracking = () => {
60
- onScrubEnd?.();
61
- setActive(false);
62
- document.removeEventListener("mousemove", handleMouseMove, false);
63
- document.removeEventListener("mouseup", handleMouseUp, false);
64
- document.removeEventListener("touchmove", handleTouchMove, false);
65
- document.removeEventListener("touchend", handleTouchEnd, false);
66
- };
67
- const onMouseDown = (event) => {
68
- beginTracking();
69
- update(event);
70
- };
71
- const handleMouseMove = (event) => {
72
- update(event);
73
- };
74
- const handleMouseUp = (event) => {
75
- update(event, true);
76
- endTracking();
77
- };
78
- const handleTouchMove = (event) => {
79
- event.preventDefault();
80
- update(event.touches[0]);
81
- };
82
- const handleTouchEnd = (event) => {
83
- update(event.changedTouches[0], true);
84
- endTracking();
85
- };
86
- const handleTouchStart = (event) => {
87
- event.preventDefault();
88
- beginTracking();
89
- update(event.touches[0]);
90
- };
91
- node?.addEventListener("mousedown", onMouseDown);
92
- node?.addEventListener("touchstart", handleTouchStart, { passive: false });
93
- return () => {
94
- if (node) {
95
- node.removeEventListener("mousedown", onMouseDown);
96
- node.removeEventListener("touchstart", handleTouchStart);
97
- }
98
- };
99
- },
100
- [onChange]
101
- );
102
- return { ref: refCallback, active };
30
+ function useRadialMove(onChange, { step = .01, onChangeEnd, onScrubStart, onScrubEnd } = {}) {
31
+ const mounted = useRef(false);
32
+ const [active, setActive] = useState(false);
33
+ useEffect(() => {
34
+ mounted.current = true;
35
+ }, []);
36
+ return {
37
+ ref: useCallback((node) => {
38
+ const update = (event, done = false) => {
39
+ if (node) {
40
+ node.style.userSelect = "none";
41
+ const newValue = normalizeRadialValue(getAngle([event.clientX, event.clientY], node), step || 1);
42
+ onChange(newValue);
43
+ done && onChangeEnd?.(newValue);
44
+ }
45
+ };
46
+ const beginTracking = () => {
47
+ onScrubStart?.();
48
+ setActive(true);
49
+ document.addEventListener("mousemove", handleMouseMove, false);
50
+ document.addEventListener("mouseup", handleMouseUp, false);
51
+ document.addEventListener("touchmove", handleTouchMove, { passive: false });
52
+ document.addEventListener("touchend", handleTouchEnd, false);
53
+ };
54
+ const endTracking = () => {
55
+ onScrubEnd?.();
56
+ setActive(false);
57
+ document.removeEventListener("mousemove", handleMouseMove, false);
58
+ document.removeEventListener("mouseup", handleMouseUp, false);
59
+ document.removeEventListener("touchmove", handleTouchMove, false);
60
+ document.removeEventListener("touchend", handleTouchEnd, false);
61
+ };
62
+ const onMouseDown = (event) => {
63
+ beginTracking();
64
+ update(event);
65
+ };
66
+ const handleMouseMove = (event) => {
67
+ update(event);
68
+ };
69
+ const handleMouseUp = (event) => {
70
+ update(event, true);
71
+ endTracking();
72
+ };
73
+ const handleTouchMove = (event) => {
74
+ event.preventDefault();
75
+ update(event.touches[0]);
76
+ };
77
+ const handleTouchEnd = (event) => {
78
+ update(event.changedTouches[0], true);
79
+ endTracking();
80
+ };
81
+ const handleTouchStart = (event) => {
82
+ event.preventDefault();
83
+ beginTracking();
84
+ update(event.touches[0]);
85
+ };
86
+ node?.addEventListener("mousedown", onMouseDown);
87
+ node?.addEventListener("touchstart", handleTouchStart, { passive: false });
88
+ return () => {
89
+ if (node) {
90
+ node.removeEventListener("mousedown", onMouseDown);
91
+ node.removeEventListener("touchstart", handleTouchStart);
92
+ }
93
+ };
94
+ }, [onChange]),
95
+ active
96
+ };
103
97
  }
104
-
98
+ //#endregion
105
99
  export { normalizeRadialValue, useRadialMove };
106
- //# sourceMappingURL=use-radial-move.mjs.map
100
+
101
+ //# sourceMappingURL=use-radial-move.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-radial-move.mjs","sources":["../../src/use-radial-move/use-radial-move.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { clamp } from '../utils';\n\nfunction radiansToDegrees(radians: number) {\n return radians * (180 / Math.PI);\n}\n\nfunction getElementCenter(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n return [rect.left + rect.width / 2, rect.top + rect.height / 2];\n}\n\nfunction getAngle(coordinates: [number, number], element: HTMLElement) {\n const center = getElementCenter(element);\n const x = coordinates[0] - center[0];\n const y = coordinates[1] - center[1];\n const deg = radiansToDegrees(Math.atan2(x, y)) + 180;\n return 360 - deg;\n}\n\nfunction toFixed(value: number, digits: number) {\n return parseFloat(value.toFixed(digits));\n}\n\nfunction getDigitsAfterDot(value: number) {\n return value.toString().split('.')[1]?.length || 0;\n}\n\nexport function normalizeRadialValue(degree: number, step: number) {\n const clamped = clamp(degree, 0, 360);\n const high = Math.ceil(clamped / step);\n const low = Math.round(clamped / step);\n return toFixed(\n high >= clamped / step ? (high * step === 360 ? 0 : high * step) : low * step,\n getDigitsAfterDot(step)\n );\n}\n\nexport interface UseRadialMoveOptions {\n /** Number by which value is incremented/decremented with mouse and touch events, `0.01` by default */\n step?: number;\n\n /** Called in `onMouseUp` and `onTouchEnd` events with the current value */\n onChangeEnd?: (value: number) => void;\n\n /** Called in `onMouseDown` and `onTouchStart` events */\n onScrubStart?: () => void;\n\n /** Called in `onMouseUp` and `onTouchEnd` events */\n onScrubEnd?: () => void;\n}\n\nexport interface UseRadialMoveReturnValue<T extends HTMLElement = any> {\n /** Ref to be passed to the element that should be used for radial move */\n ref: React.RefCallback<T | null>;\n\n /** Indicates whether the radial move is active */\n active: boolean;\n}\n\nexport function useRadialMove<T extends HTMLElement = any>(\n onChange: (value: number) => void,\n { step = 0.01, onChangeEnd, onScrubStart, onScrubEnd }: UseRadialMoveOptions = {}\n): UseRadialMoveReturnValue<T> {\n const mounted = useRef<boolean>(false);\n const [active, setActive] = useState(false);\n\n useEffect(() => {\n mounted.current = true;\n }, []);\n\n const refCallback: React.RefCallback<T | null> = useCallback(\n (node) => {\n const update = (event: MouseEvent, done = false) => {\n if (node) {\n node.style.userSelect = 'none';\n const deg = getAngle([event.clientX, event.clientY], node);\n const newValue = normalizeRadialValue(deg, step || 1);\n\n onChange(newValue);\n done && onChangeEnd?.(newValue);\n }\n };\n\n const beginTracking = () => {\n onScrubStart?.();\n setActive(true);\n document.addEventListener('mousemove', handleMouseMove, false);\n document.addEventListener('mouseup', handleMouseUp, false);\n document.addEventListener('touchmove', handleTouchMove, { passive: false });\n document.addEventListener('touchend', handleTouchEnd, false);\n };\n\n const endTracking = () => {\n onScrubEnd?.();\n setActive(false);\n document.removeEventListener('mousemove', handleMouseMove, false);\n document.removeEventListener('mouseup', handleMouseUp, false);\n document.removeEventListener('touchmove', handleTouchMove, false);\n document.removeEventListener('touchend', handleTouchEnd, false);\n };\n\n const onMouseDown = (event: MouseEvent) => {\n beginTracking();\n update(event);\n };\n\n const handleMouseMove = (event: MouseEvent) => {\n update(event);\n };\n\n const handleMouseUp = (event: MouseEvent) => {\n update(event, true);\n endTracking();\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n update(event.touches[0] as any);\n };\n\n const handleTouchEnd = (event: TouchEvent) => {\n update(event.changedTouches[0] as any, true);\n endTracking();\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n event.preventDefault();\n beginTracking();\n update(event.touches[0] as any);\n };\n\n node?.addEventListener('mousedown', onMouseDown);\n node?.addEventListener('touchstart', handleTouchStart, { passive: false });\n\n return () => {\n if (node) {\n node.removeEventListener('mousedown', onMouseDown);\n node.removeEventListener('touchstart', handleTouchStart);\n }\n };\n },\n [onChange]\n );\n\n return { ref: refCallback, active };\n}\n\nexport namespace useRadialMove {\n export type Options = UseRadialMoveOptions;\n export type ReturnValue<T extends HTMLElement> = UseRadialMoveReturnValue<T>;\n}\n"],"names":[],"mappings":";;;;AAGA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,OAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,IAAM,CAAA,CAAA,CAAA,CAAA,CAAK,EAAA,CAAA,CAAA;AAC/B,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA;AAC9C,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAQ,qBAAA,CAAA,CAAsB,CAAA;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAC,CAAA,CAAA,CAAA,CAAA,CAAK,IAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,GAAG,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,IAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAC,CAAA,CAAA;AAChE,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAA+B,OAAA,CAAA,CAAsB,CAAA;AACrE,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAiB,OAAO,CAAA,CAAA;AACvC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAC,CAAA,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAY,CAAC,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,EAAO,CAAC,CAAA,CAAA;AACnC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,IAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAG,CAAC,CAAC,CAAA,GAAI,CAAA,CAAA,CAAA,CAAA;AACjD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA;AACf,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,GAAe,MAAA,CAAA,CAAgB,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,UAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA;AACzC,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAkB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA;AACxC,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAS,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAG,CAAA,CAAE,CAAC,GAAG,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAU,CAAA,CAAA;AACnD,CAAA;AAEO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,CAAA,CAAA,CAAA,CAAA,CAAA,GAAgB,IAAA,CAAA,CAAc,CAAA;AACjE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,MAAA,CAAA,CAAQ,CAAA,CAAA,CAAG,CAAA,CAAA,CAAG,CAAA,CAAA;AACpC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,IAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAK,KAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA;AACrC,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACL,CAAA,CAAA,CAAA,CAAA,IAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAU,IAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,GAAO,CAAA,CAAA,CAAA,MAAS,GAAA,CAAA,CAAA,CAAM,CAAA,GAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,IAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,GAAM,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACzE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAkB,CAAA,CAAA,CAAA,CAAI,CAAA;AAAA,CAAA,CAAA,CACxB,CAAA;AACF,CAAA;AAwBO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,aAAA,CACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACA,CAAA,CAAE,IAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,UAAA,CAAA,CAAW,CAAA,CAAA,CAA0B,EAAC,CAAA,CACnD,CAAA;AAC7B,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,EAAgB,KAAK,CAAA,CAAA;AACrC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA;AAE1C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CACpB,CAAA,CAAA,CAAG,CAAA,CAAE,CAAA,CAAA;AAEL,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAA2C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAC/C,CAAC,IAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA;AACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,MAAA,CAAA,CAAA,CAAS,CAAC,KAAA,CAAA,CAAmB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA;AAClD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAA,CAAA,CAAM,CAAA;AACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,CAAA,CAAA,CAAA,CAAA,EAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,MAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAS,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAS,KAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,GAAG,IAAI,CAAA,CAAA;AACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAqB,GAAA,CAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAC,CAAA,CAAA;AAEpD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA;AACjB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAc,QAAQ,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAChC,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAgB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AAC1B,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,YAAA,CAAA,CAAA,CAAA,CAAe,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,WAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA;AAC7D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,SAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA;AACzD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,GAAO,CAAA,CAAA;AAC1E,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,UAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAC7D,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACxB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,UAAA,CAAA,CAAA,CAAA,CAAa,CAAA;AACb,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA;AACf,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,WAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA;AAChE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,SAAA,CAAA,CAAW,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA;AAC5D,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,WAAA,CAAA,CAAa,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA;AAChE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,UAAA,CAAA,CAAY,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAChE,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA;AACzC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,aAAA,CAAA,CAAc,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACd,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAK,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACd,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAgB,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,GAAO,IAAI,CAAA,CAAA;AAClB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAY,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACd,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA;AAC7C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAA,CAAQ,CAAC,CAAQ,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAChC,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA;AAC5C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAC,CAAA,CAAA,CAAU,CAAA,CAAA,CAAA,CAAI,CAAA,CAAA;AAC3C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,WAAA,CAAA,CAAY,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACd,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAmB,CAAC,KAAA,CAAA,CAAA,CAAA,CAAA,CAAsB,CAAA;AAC9C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAe,CAAA;AACrB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,aAAA,CAAA,CAAc,CAAA;AACd,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,OAAA,CAAQ,CAAC,CAAQ,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAChC,CAAA,CAAA;AAEA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAa,WAAW,CAAA,CAAA;AAC/C,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAkB,CAAA,CAAE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,GAAO,CAAA,CAAA;AAEzE,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,OAAO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAM,CAAA;AACX,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAI,IAAA,CAAA,CAAM,CAAA;AACR,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAa,WAAW,CAAA,CAAA;AACjD,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,CAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAoB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAc,gBAAgB,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACzD,CAAA;AAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CACF,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACF,CAAA,CAAA;AAAA,CAAA,CAAA,CAAA,CACA,CAAC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAQ,CAAA;AAAA,CAAA,CAAA,CACX,CAAA;AAEA,CAAA,CAAA,OAAO,CAAA,CAAE,CAAA,CAAA,CAAA,EAAK,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAa,MAAA,CAAA,CAAO,CAAA;AACpC,CAAA;;"}
1
+ {"version":3,"file":"use-radial-move.mjs","names":[],"sources":["../../src/use-radial-move/use-radial-move.ts"],"sourcesContent":["import { useCallback, useEffect, useRef, useState } from 'react';\nimport { clamp } from '../utils';\n\nfunction radiansToDegrees(radians: number) {\n return radians * (180 / Math.PI);\n}\n\nfunction getElementCenter(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n return [rect.left + rect.width / 2, rect.top + rect.height / 2];\n}\n\nfunction getAngle(coordinates: [number, number], element: HTMLElement) {\n const center = getElementCenter(element);\n const x = coordinates[0] - center[0];\n const y = coordinates[1] - center[1];\n const deg = radiansToDegrees(Math.atan2(x, y)) + 180;\n return 360 - deg;\n}\n\nfunction toFixed(value: number, digits: number) {\n return parseFloat(value.toFixed(digits));\n}\n\nfunction getDigitsAfterDot(value: number) {\n return value.toString().split('.')[1]?.length || 0;\n}\n\nexport function normalizeRadialValue(degree: number, step: number) {\n const clamped = clamp(degree, 0, 360);\n const high = Math.ceil(clamped / step);\n const low = Math.round(clamped / step);\n return toFixed(\n high >= clamped / step ? (high * step === 360 ? 0 : high * step) : low * step,\n getDigitsAfterDot(step)\n );\n}\n\nexport interface UseRadialMoveOptions {\n /** Number by which value is incremented/decremented with mouse and touch events, `0.01` by default */\n step?: number;\n\n /** Called in `onMouseUp` and `onTouchEnd` events with the current value */\n onChangeEnd?: (value: number) => void;\n\n /** Called in `onMouseDown` and `onTouchStart` events */\n onScrubStart?: () => void;\n\n /** Called in `onMouseUp` and `onTouchEnd` events */\n onScrubEnd?: () => void;\n}\n\nexport interface UseRadialMoveReturnValue<T extends HTMLElement = any> {\n /** Ref to be passed to the element that should be used for radial move */\n ref: React.RefCallback<T | null>;\n\n /** Indicates whether the radial move is active */\n active: boolean;\n}\n\nexport function useRadialMove<T extends HTMLElement = any>(\n onChange: (value: number) => void,\n { step = 0.01, onChangeEnd, onScrubStart, onScrubEnd }: UseRadialMoveOptions = {}\n): UseRadialMoveReturnValue<T> {\n const mounted = useRef<boolean>(false);\n const [active, setActive] = useState(false);\n\n useEffect(() => {\n mounted.current = true;\n }, []);\n\n const refCallback: React.RefCallback<T | null> = useCallback(\n (node) => {\n const update = (event: MouseEvent, done = false) => {\n if (node) {\n node.style.userSelect = 'none';\n const deg = getAngle([event.clientX, event.clientY], node);\n const newValue = normalizeRadialValue(deg, step || 1);\n\n onChange(newValue);\n done && onChangeEnd?.(newValue);\n }\n };\n\n const beginTracking = () => {\n onScrubStart?.();\n setActive(true);\n document.addEventListener('mousemove', handleMouseMove, false);\n document.addEventListener('mouseup', handleMouseUp, false);\n document.addEventListener('touchmove', handleTouchMove, { passive: false });\n document.addEventListener('touchend', handleTouchEnd, false);\n };\n\n const endTracking = () => {\n onScrubEnd?.();\n setActive(false);\n document.removeEventListener('mousemove', handleMouseMove, false);\n document.removeEventListener('mouseup', handleMouseUp, false);\n document.removeEventListener('touchmove', handleTouchMove, false);\n document.removeEventListener('touchend', handleTouchEnd, false);\n };\n\n const onMouseDown = (event: MouseEvent) => {\n beginTracking();\n update(event);\n };\n\n const handleMouseMove = (event: MouseEvent) => {\n update(event);\n };\n\n const handleMouseUp = (event: MouseEvent) => {\n update(event, true);\n endTracking();\n };\n\n const handleTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n update(event.touches[0] as any);\n };\n\n const handleTouchEnd = (event: TouchEvent) => {\n update(event.changedTouches[0] as any, true);\n endTracking();\n };\n\n const handleTouchStart = (event: TouchEvent) => {\n event.preventDefault();\n beginTracking();\n update(event.touches[0] as any);\n };\n\n node?.addEventListener('mousedown', onMouseDown);\n node?.addEventListener('touchstart', handleTouchStart, { passive: false });\n\n return () => {\n if (node) {\n node.removeEventListener('mousedown', onMouseDown);\n node.removeEventListener('touchstart', handleTouchStart);\n }\n };\n },\n [onChange]\n );\n\n return { ref: refCallback, active };\n}\n\nexport namespace useRadialMove {\n export type Options = UseRadialMoveOptions;\n export type ReturnValue<T extends HTMLElement> = UseRadialMoveReturnValue<T>;\n}\n"],"mappings":";;;;AAGA,SAAS,iBAAiB,SAAiB;AACzC,QAAO,WAAW,MAAM,KAAK;;AAG/B,SAAS,iBAAiB,SAAsB;CAC9C,MAAM,OAAO,QAAQ,uBAAuB;AAC5C,QAAO,CAAC,KAAK,OAAO,KAAK,QAAQ,GAAG,KAAK,MAAM,KAAK,SAAS,EAAE;;AAGjE,SAAS,SAAS,aAA+B,SAAsB;CACrE,MAAM,SAAS,iBAAiB,QAAQ;CACxC,MAAM,IAAI,YAAY,KAAK,OAAO;CAClC,MAAM,IAAI,YAAY,KAAK,OAAO;AAElC,QAAO,OADK,iBAAiB,KAAK,MAAM,GAAG,EAAE,CAAC,GAAG;;AAInD,SAAS,QAAQ,OAAe,QAAgB;AAC9C,QAAO,WAAW,MAAM,QAAQ,OAAO,CAAC;;AAG1C,SAAS,kBAAkB,OAAe;AACxC,QAAO,MAAM,UAAU,CAAC,MAAM,IAAI,CAAC,IAAI,UAAU;;AAGnD,SAAgB,qBAAqB,QAAgB,MAAc;CACjE,MAAM,UAAU,MAAM,QAAQ,GAAG,IAAI;CACrC,MAAM,OAAO,KAAK,KAAK,UAAU,KAAK;CACtC,MAAM,MAAM,KAAK,MAAM,UAAU,KAAK;AACtC,QAAO,QACL,QAAQ,UAAU,OAAQ,OAAO,SAAS,MAAM,IAAI,OAAO,OAAQ,MAAM,MACzE,kBAAkB,KAAK,CACxB;;AAyBH,SAAgB,cACd,UACA,EAAE,OAAO,KAAM,aAAa,cAAc,eAAqC,EAAE,EACpD;CAC7B,MAAM,UAAU,OAAgB,MAAM;CACtC,MAAM,CAAC,QAAQ,aAAa,SAAS,MAAM;AAE3C,iBAAgB;AACd,UAAQ,UAAU;IACjB,EAAE,CAAC;AA4EN,QAAO;EAAE,KA1EwC,aAC9C,SAAS;GACR,MAAM,UAAU,OAAmB,OAAO,UAAU;AAClD,QAAI,MAAM;AACR,UAAK,MAAM,aAAa;KAExB,MAAM,WAAW,qBADL,SAAS,CAAC,MAAM,SAAS,MAAM,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE;AAErD,cAAS,SAAS;AAClB,aAAQ,cAAc,SAAS;;;GAInC,MAAM,sBAAsB;AAC1B,oBAAgB;AAChB,cAAU,KAAK;AACf,aAAS,iBAAiB,aAAa,iBAAiB,MAAM;AAC9D,aAAS,iBAAiB,WAAW,eAAe,MAAM;AAC1D,aAAS,iBAAiB,aAAa,iBAAiB,EAAE,SAAS,OAAO,CAAC;AAC3E,aAAS,iBAAiB,YAAY,gBAAgB,MAAM;;GAG9D,MAAM,oBAAoB;AACxB,kBAAc;AACd,cAAU,MAAM;AAChB,aAAS,oBAAoB,aAAa,iBAAiB,MAAM;AACjE,aAAS,oBAAoB,WAAW,eAAe,MAAM;AAC7D,aAAS,oBAAoB,aAAa,iBAAiB,MAAM;AACjE,aAAS,oBAAoB,YAAY,gBAAgB,MAAM;;GAGjE,MAAM,eAAe,UAAsB;AACzC,mBAAe;AACf,WAAO,MAAM;;GAGf,MAAM,mBAAmB,UAAsB;AAC7C,WAAO,MAAM;;GAGf,MAAM,iBAAiB,UAAsB;AAC3C,WAAO,OAAO,KAAK;AACnB,iBAAa;;GAGf,MAAM,mBAAmB,UAAsB;AAC7C,UAAM,gBAAgB;AACtB,WAAO,MAAM,QAAQ,GAAU;;GAGjC,MAAM,kBAAkB,UAAsB;AAC5C,WAAO,MAAM,eAAe,IAAW,KAAK;AAC5C,iBAAa;;GAGf,MAAM,oBAAoB,UAAsB;AAC9C,UAAM,gBAAgB;AACtB,mBAAe;AACf,WAAO,MAAM,QAAQ,GAAU;;AAGjC,SAAM,iBAAiB,aAAa,YAAY;AAChD,SAAM,iBAAiB,cAAc,kBAAkB,EAAE,SAAS,OAAO,CAAC;AAE1E,gBAAa;AACX,QAAI,MAAM;AACR,UAAK,oBAAoB,aAAa,YAAY;AAClD,UAAK,oBAAoB,cAAc,iBAAiB;;;KAI9D,CAAC,SAAS,CACX;EAE0B;EAAQ"}
@@ -1,9 +1,10 @@
1
- 'use client';
2
- import { useMediaQuery } from '../use-media-query/use-media-query.mjs';
3
-
1
+ "use client";
2
+ import { useMediaQuery } from "../use-media-query/use-media-query.mjs";
3
+ //#region packages/@mantine/hooks/src/use-reduced-motion/use-reduced-motion.ts
4
4
  function useReducedMotion(initialValue, options) {
5
- return useMediaQuery("(prefers-reduced-motion: reduce)", initialValue, options);
5
+ return useMediaQuery("(prefers-reduced-motion: reduce)", initialValue, options);
6
6
  }
7
-
7
+ //#endregion
8
8
  export { useReducedMotion };
9
- //# sourceMappingURL=use-reduced-motion.mjs.map
9
+
10
+ //# sourceMappingURL=use-reduced-motion.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-reduced-motion.mjs","sources":["../../src/use-reduced-motion/use-reduced-motion.ts"],"sourcesContent":["import { useMediaQuery, UseMediaQueryOptions } from '../use-media-query/use-media-query';\n\nexport function useReducedMotion(initialValue?: boolean, options?: UseMediaQueryOptions) {\n return useMediaQuery('(prefers-reduced-motion: reduce)', initialValue, options);\n}\n"],"names":[],"mappings":";;;AAEO,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAS,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAiB,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,GAAwB,OAAA,CAAA,CAAgC,CAAA;AACvF,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAO,aAAA,CAAc,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAAoC,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAc,OAAO,CAAA,CAAA;AAChF,CAAA;;"}
1
+ {"version":3,"file":"use-reduced-motion.mjs","names":[],"sources":["../../src/use-reduced-motion/use-reduced-motion.ts"],"sourcesContent":["import { useMediaQuery, UseMediaQueryOptions } from '../use-media-query/use-media-query';\n\nexport function useReducedMotion(initialValue?: boolean, options?: UseMediaQueryOptions) {\n return useMediaQuery('(prefers-reduced-motion: reduce)', initialValue, options);\n}\n"],"mappings":";;;AAEA,SAAgB,iBAAiB,cAAwB,SAAgC;AACvF,QAAO,cAAc,oCAAoC,cAAc,QAAQ"}
@@ -1,67 +1,62 @@
1
- 'use client';
2
- import { useRef, useState, useCallback } from 'react';
3
-
1
+ "use client";
2
+ import { useCallback, useRef, useState } from "react";
3
+ //#region packages/@mantine/hooks/src/use-resize-observer/use-resize-observer.ts
4
4
  const defaultState = {
5
- x: 0,
6
- y: 0,
7
- width: 0,
8
- height: 0,
9
- top: 0,
10
- left: 0,
11
- bottom: 0,
12
- right: 0
5
+ x: 0,
6
+ y: 0,
7
+ width: 0,
8
+ height: 0,
9
+ top: 0,
10
+ left: 0,
11
+ bottom: 0,
12
+ right: 0
13
13
  };
14
14
  function useResizeObserver(options) {
15
- const frameID = useRef(0);
16
- const [rect, setRect] = useState(defaultState);
17
- const observerRef = useRef(null);
18
- const refCallback = useCallback(
19
- (node) => {
20
- if (observerRef.current) {
21
- observerRef.current.disconnect();
22
- observerRef.current = null;
23
- }
24
- if (frameID.current) {
25
- cancelAnimationFrame(frameID.current);
26
- }
27
- if (!node) {
28
- return;
29
- }
30
- observerRef.current = new ResizeObserver((entries) => {
31
- const entry = entries[0];
32
- if (entry) {
33
- cancelAnimationFrame(frameID.current);
34
- frameID.current = requestAnimationFrame(() => {
35
- const boxSize = entry.borderBoxSize?.[0] || entry.contentBoxSize?.[0];
36
- if (boxSize) {
37
- const width = boxSize.inlineSize;
38
- const height = boxSize.blockSize;
39
- setRect({
40
- width,
41
- height,
42
- x: entry.contentRect.x,
43
- y: entry.contentRect.y,
44
- top: entry.contentRect.top,
45
- left: entry.contentRect.left,
46
- bottom: entry.contentRect.bottom,
47
- right: entry.contentRect.right
48
- });
49
- } else {
50
- setRect(entry.contentRect);
51
- }
52
- });
53
- }
54
- });
55
- observerRef.current.observe(node, options);
56
- },
57
- [options]
58
- );
59
- return [refCallback, rect];
15
+ const frameID = useRef(0);
16
+ const [rect, setRect] = useState(defaultState);
17
+ const observerRef = useRef(null);
18
+ return [useCallback((node) => {
19
+ if (observerRef.current) {
20
+ observerRef.current.disconnect();
21
+ observerRef.current = null;
22
+ }
23
+ if (frameID.current) cancelAnimationFrame(frameID.current);
24
+ if (!node) return;
25
+ observerRef.current = new ResizeObserver((entries) => {
26
+ const entry = entries[0];
27
+ if (entry) {
28
+ cancelAnimationFrame(frameID.current);
29
+ frameID.current = requestAnimationFrame(() => {
30
+ const boxSize = entry.borderBoxSize?.[0] || entry.contentBoxSize?.[0];
31
+ if (boxSize) {
32
+ const width = boxSize.inlineSize;
33
+ const height = boxSize.blockSize;
34
+ setRect({
35
+ width,
36
+ height,
37
+ x: entry.contentRect.x,
38
+ y: entry.contentRect.y,
39
+ top: entry.contentRect.top,
40
+ left: entry.contentRect.left,
41
+ bottom: entry.contentRect.bottom,
42
+ right: entry.contentRect.right
43
+ });
44
+ } else setRect(entry.contentRect);
45
+ });
46
+ }
47
+ });
48
+ observerRef.current.observe(node, options);
49
+ }, [options]), rect];
60
50
  }
61
51
  function useElementSize(options) {
62
- const [ref, { width, height }] = useResizeObserver(options);
63
- return { ref, width, height };
52
+ const [ref, { width, height }] = useResizeObserver(options);
53
+ return {
54
+ ref,
55
+ width,
56
+ height
57
+ };
64
58
  }
65
-
59
+ //#endregion
66
60
  export { useElementSize, useResizeObserver };
67
- //# sourceMappingURL=use-resize-observer.mjs.map
61
+
62
+ //# sourceMappingURL=use-resize-observer.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"use-resize-observer.mjs","sources":["../../src/use-resize-observer/use-resize-observer.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\nexport type ObserverRect = Omit<DOMRectReadOnly, 'toJSON'>;\n\nconst defaultState: ObserverRect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n};\n\nexport type UseResizeObserverReturnValue<T extends HTMLElement = any> = [\n React.RefCallback<T | null>,\n ObserverRect,\n];\n\nexport function useResizeObserver<T extends HTMLElement = any>(\n options?: ResizeObserverOptions\n): UseResizeObserverReturnValue<T> {\n const frameID = useRef(0);\n const [rect, setRect] = useState<ObserverRect>(defaultState);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const refCallback: React.RefCallback<T | null> = useCallback(\n (node) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n\n if (frameID.current) {\n cancelAnimationFrame(frameID.current);\n }\n\n if (!node) {\n return;\n }\n\n observerRef.current = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n cancelAnimationFrame(frameID.current);\n frameID.current = requestAnimationFrame(() => {\n const boxSize = entry.borderBoxSize?.[0] || entry.contentBoxSize?.[0];\n if (boxSize) {\n const width = boxSize.inlineSize;\n const height = boxSize.blockSize;\n setRect({\n width,\n height,\n x: entry.contentRect.x,\n y: entry.contentRect.y,\n top: entry.contentRect.top,\n left: entry.contentRect.left,\n bottom: entry.contentRect.bottom,\n right: entry.contentRect.right,\n });\n } else {\n setRect(entry.contentRect);\n }\n });\n }\n });\n observerRef.current.observe(node, options);\n },\n [options]\n );\n\n return [refCallback, rect] as const;\n}\n\nexport interface UseElementSizeReturnValue<T extends HTMLElement = any> {\n ref: React.RefCallback<T | null>;\n width: number;\n height: number;\n}\n\nexport function useElementSize<T extends HTMLElement = any>(\n options?: ResizeObserverOptions\n): { ref: React.RefCallback<T | null>; width: number; height: number } {\n const [ref, { width, height }] = useResizeObserver<T>(options);\n return { ref, width, height };\n}\n\nexport namespace useResizeObserver {\n export type ReturnValue<T extends HTMLElement> = UseResizeObserverReturnValue<T>;\n}\n\nexport namespace useElementSize {\n export type ReturnValue<T extends HTMLElement> = UseElementSizeReturnValue<T>;\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"use-resize-observer.mjs","names":[],"sources":["../../src/use-resize-observer/use-resize-observer.ts"],"sourcesContent":["import { useCallback, useRef, useState } from 'react';\n\nexport type ObserverRect = Omit<DOMRectReadOnly, 'toJSON'>;\n\nconst defaultState: ObserverRect = {\n x: 0,\n y: 0,\n width: 0,\n height: 0,\n top: 0,\n left: 0,\n bottom: 0,\n right: 0,\n};\n\nexport type UseResizeObserverReturnValue<T extends HTMLElement = any> = [\n React.RefCallback<T | null>,\n ObserverRect,\n];\n\nexport function useResizeObserver<T extends HTMLElement = any>(\n options?: ResizeObserverOptions\n): UseResizeObserverReturnValue<T> {\n const frameID = useRef(0);\n const [rect, setRect] = useState<ObserverRect>(defaultState);\n const observerRef = useRef<ResizeObserver | null>(null);\n\n const refCallback: React.RefCallback<T | null> = useCallback(\n (node) => {\n if (observerRef.current) {\n observerRef.current.disconnect();\n observerRef.current = null;\n }\n\n if (frameID.current) {\n cancelAnimationFrame(frameID.current);\n }\n\n if (!node) {\n return;\n }\n\n observerRef.current = new ResizeObserver((entries) => {\n const entry = entries[0];\n if (entry) {\n cancelAnimationFrame(frameID.current);\n frameID.current = requestAnimationFrame(() => {\n const boxSize = entry.borderBoxSize?.[0] || entry.contentBoxSize?.[0];\n if (boxSize) {\n const width = boxSize.inlineSize;\n const height = boxSize.blockSize;\n setRect({\n width,\n height,\n x: entry.contentRect.x,\n y: entry.contentRect.y,\n top: entry.contentRect.top,\n left: entry.contentRect.left,\n bottom: entry.contentRect.bottom,\n right: entry.contentRect.right,\n });\n } else {\n setRect(entry.contentRect);\n }\n });\n }\n });\n observerRef.current.observe(node, options);\n },\n [options]\n );\n\n return [refCallback, rect] as const;\n}\n\nexport interface UseElementSizeReturnValue<T extends HTMLElement = any> {\n ref: React.RefCallback<T | null>;\n width: number;\n height: number;\n}\n\nexport function useElementSize<T extends HTMLElement = any>(\n options?: ResizeObserverOptions\n): { ref: React.RefCallback<T | null>; width: number; height: number } {\n const [ref, { width, height }] = useResizeObserver<T>(options);\n return { ref, width, height };\n}\n\nexport namespace useResizeObserver {\n export type ReturnValue<T extends HTMLElement> = UseResizeObserverReturnValue<T>;\n}\n\nexport namespace useElementSize {\n export type ReturnValue<T extends HTMLElement> = UseElementSizeReturnValue<T>;\n}\n"],"mappings":";;;AAIA,MAAM,eAA6B;CACjC,GAAG;CACH,GAAG;CACH,OAAO;CACP,QAAQ;CACR,KAAK;CACL,MAAM;CACN,QAAQ;CACR,OAAO;CACR;AAOD,SAAgB,kBACd,SACiC;CACjC,MAAM,UAAU,OAAO,EAAE;CACzB,MAAM,CAAC,MAAM,WAAW,SAAuB,aAAa;CAC5D,MAAM,cAAc,OAA8B,KAAK;AA+CvD,QAAO,CA7C0C,aAC9C,SAAS;AACR,MAAI,YAAY,SAAS;AACvB,eAAY,QAAQ,YAAY;AAChC,eAAY,UAAU;;AAGxB,MAAI,QAAQ,QACV,sBAAqB,QAAQ,QAAQ;AAGvC,MAAI,CAAC,KACH;AAGF,cAAY,UAAU,IAAI,gBAAgB,YAAY;GACpD,MAAM,QAAQ,QAAQ;AACtB,OAAI,OAAO;AACT,yBAAqB,QAAQ,QAAQ;AACrC,YAAQ,UAAU,4BAA4B;KAC5C,MAAM,UAAU,MAAM,gBAAgB,MAAM,MAAM,iBAAiB;AACnE,SAAI,SAAS;MACX,MAAM,QAAQ,QAAQ;MACtB,MAAM,SAAS,QAAQ;AACvB,cAAQ;OACN;OACA;OACA,GAAG,MAAM,YAAY;OACrB,GAAG,MAAM,YAAY;OACrB,KAAK,MAAM,YAAY;OACvB,MAAM,MAAM,YAAY;OACxB,QAAQ,MAAM,YAAY;OAC1B,OAAO,MAAM,YAAY;OAC1B,CAAC;WAEF,SAAQ,MAAM,YAAY;MAE5B;;IAEJ;AACF,cAAY,QAAQ,QAAQ,MAAM,QAAQ;IAE5C,CAAC,QAAQ,CACV,EAEoB,KAAK;;AAS5B,SAAgB,eACd,SACqE;CACrE,MAAM,CAAC,KAAK,EAAE,OAAO,YAAY,kBAAqB,QAAQ;AAC9D,QAAO;EAAE;EAAK;EAAO;EAAQ"}
@@ -0,0 +1,200 @@
1
+ "use client";
2
+ import { useUncontrolled } from "../use-uncontrolled/use-uncontrolled.mjs";
3
+ import { useCallback, useEffect, useRef } from "react";
4
+ //#region packages/@mantine/hooks/src/use-roving-index/use-roving-index.ts
5
+ function findNextEnabled(current, total, isItemDisabled, loop) {
6
+ for (let i = current + 1; i < total; i += 1) if (!isItemDisabled(i)) return i;
7
+ if (loop) {
8
+ for (let i = 0; i < current; i += 1) if (!isItemDisabled(i)) return i;
9
+ }
10
+ return current;
11
+ }
12
+ function findPreviousEnabled(current, total, isItemDisabled, loop) {
13
+ for (let i = current - 1; i >= 0; i -= 1) if (!isItemDisabled(i)) return i;
14
+ if (loop) {
15
+ for (let i = total - 1; i > current; i -= 1) if (!isItemDisabled(i)) return i;
16
+ }
17
+ return current;
18
+ }
19
+ function findFirstEnabled(total, isItemDisabled) {
20
+ for (let i = 0; i < total; i += 1) if (!isItemDisabled(i)) return i;
21
+ return 0;
22
+ }
23
+ function findLastEnabled(total, isItemDisabled) {
24
+ for (let i = total - 1; i >= 0; i -= 1) if (!isItemDisabled(i)) return i;
25
+ return 0;
26
+ }
27
+ const defaultIsItemDisabled = () => false;
28
+ function useRovingIndex(input) {
29
+ const { total, orientation = "horizontal", loop = true, dir = "ltr", activateOnFocus = false, columns, focusedIndex, initialIndex, onFocusChange, isItemDisabled = defaultIsItemDisabled } = input;
30
+ const itemRefs = useRef(/* @__PURE__ */ new Map());
31
+ const isGrid = typeof columns === "number" && columns > 0;
32
+ const [activeIndex, setActiveIndex] = useUncontrolled({
33
+ value: focusedIndex,
34
+ defaultValue: initialIndex !== void 0 ? initialIndex : findFirstEnabled(total, isItemDisabled),
35
+ finalValue: 0,
36
+ onChange: onFocusChange
37
+ });
38
+ useEffect(() => {
39
+ if (total === 0) return;
40
+ if (activeIndex >= total) setActiveIndex(findLastEnabled(total, isItemDisabled));
41
+ else if (isItemDisabled(activeIndex)) setActiveIndex(findFirstEnabled(total, isItemDisabled));
42
+ }, [
43
+ total,
44
+ activeIndex,
45
+ isItemDisabled
46
+ ]);
47
+ const focusItem = useCallback((index) => {
48
+ setActiveIndex(index);
49
+ const element = itemRefs.current.get(index);
50
+ if (element) {
51
+ element.focus();
52
+ if (activateOnFocus) element.click();
53
+ }
54
+ }, [activateOnFocus, setActiveIndex]);
55
+ const handleGridKeyDown = useCallback((event, currentIndex) => {
56
+ const row = Math.floor(currentIndex / columns);
57
+ const col = currentIndex % columns;
58
+ const totalRows = Math.ceil(total / columns);
59
+ let nextIndex = null;
60
+ const isRtl = dir === "rtl";
61
+ switch (event.key) {
62
+ case "ArrowRight": {
63
+ const targetCol = isRtl ? col - 1 : col + 1;
64
+ if (targetCol >= 0 && targetCol < columns && row * columns + targetCol < total) {
65
+ const candidate = row * columns + targetCol;
66
+ if (!isItemDisabled(candidate)) nextIndex = candidate;
67
+ }
68
+ break;
69
+ }
70
+ case "ArrowLeft": {
71
+ const targetCol = isRtl ? col + 1 : col - 1;
72
+ if (targetCol >= 0 && targetCol < columns && row * columns + targetCol < total) {
73
+ const candidate = row * columns + targetCol;
74
+ if (!isItemDisabled(candidate)) nextIndex = candidate;
75
+ }
76
+ break;
77
+ }
78
+ case "ArrowDown":
79
+ for (let r = row + 1; r < totalRows; r += 1) {
80
+ const candidate = r * columns + col;
81
+ if (candidate < total && !isItemDisabled(candidate)) {
82
+ nextIndex = candidate;
83
+ break;
84
+ }
85
+ }
86
+ break;
87
+ case "ArrowUp":
88
+ for (let r = row - 1; r >= 0; r -= 1) {
89
+ const candidate = r * columns + col;
90
+ if (candidate < total && !isItemDisabled(candidate)) {
91
+ nextIndex = candidate;
92
+ break;
93
+ }
94
+ }
95
+ break;
96
+ case "Home":
97
+ if (event.ctrlKey) nextIndex = findFirstEnabled(total, isItemDisabled);
98
+ else {
99
+ const rowStart = row * columns;
100
+ for (let i = rowStart; i < rowStart + columns && i < total; i += 1) if (!isItemDisabled(i)) {
101
+ nextIndex = i;
102
+ break;
103
+ }
104
+ }
105
+ break;
106
+ case "End":
107
+ if (event.ctrlKey) nextIndex = findLastEnabled(total, isItemDisabled);
108
+ else {
109
+ const rowStart = row * columns;
110
+ const rowEnd = Math.min(rowStart + columns, total) - 1;
111
+ for (let i = rowEnd; i >= rowStart; i -= 1) if (!isItemDisabled(i)) {
112
+ nextIndex = i;
113
+ break;
114
+ }
115
+ }
116
+ break;
117
+ }
118
+ if (nextIndex !== null && nextIndex !== currentIndex) {
119
+ event.preventDefault();
120
+ event.stopPropagation();
121
+ focusItem(nextIndex);
122
+ }
123
+ }, [
124
+ total,
125
+ columns,
126
+ dir,
127
+ isItemDisabled,
128
+ focusItem
129
+ ]);
130
+ const handleListKeyDown = useCallback((event, currentIndex) => {
131
+ const isRtl = dir === "rtl";
132
+ let nextIndex = null;
133
+ switch (event.key) {
134
+ case "ArrowRight":
135
+ if (orientation === "horizontal" || orientation === "both") nextIndex = isRtl ? findPreviousEnabled(currentIndex, total, isItemDisabled, loop) : findNextEnabled(currentIndex, total, isItemDisabled, loop);
136
+ break;
137
+ case "ArrowLeft":
138
+ if (orientation === "horizontal" || orientation === "both") nextIndex = isRtl ? findNextEnabled(currentIndex, total, isItemDisabled, loop) : findPreviousEnabled(currentIndex, total, isItemDisabled, loop);
139
+ break;
140
+ case "ArrowDown":
141
+ if (orientation === "vertical" || orientation === "both") nextIndex = findNextEnabled(currentIndex, total, isItemDisabled, loop);
142
+ break;
143
+ case "ArrowUp":
144
+ if (orientation === "vertical" || orientation === "both") nextIndex = findPreviousEnabled(currentIndex, total, isItemDisabled, loop);
145
+ break;
146
+ case "Home":
147
+ nextIndex = findFirstEnabled(total, isItemDisabled);
148
+ break;
149
+ case "End":
150
+ nextIndex = findLastEnabled(total, isItemDisabled);
151
+ break;
152
+ }
153
+ if (nextIndex !== null && nextIndex !== currentIndex) {
154
+ event.preventDefault();
155
+ event.stopPropagation();
156
+ focusItem(nextIndex);
157
+ }
158
+ }, [
159
+ total,
160
+ orientation,
161
+ loop,
162
+ dir,
163
+ isItemDisabled,
164
+ focusItem
165
+ ]);
166
+ return {
167
+ getItemProps: useCallback((options) => {
168
+ const { index, onClick, onKeyDown } = options;
169
+ return {
170
+ tabIndex: index === activeIndex ? 0 : -1,
171
+ ref: (node) => {
172
+ if (node) itemRefs.current.set(index, node);
173
+ else itemRefs.current.delete(index);
174
+ },
175
+ onKeyDown: (event) => {
176
+ onKeyDown?.(event);
177
+ if (event.defaultPrevented) return;
178
+ if (isGrid) handleGridKeyDown(event, index);
179
+ else handleListKeyDown(event, index);
180
+ },
181
+ onClick: (event) => {
182
+ onClick?.(event);
183
+ setActiveIndex(index);
184
+ }
185
+ };
186
+ }, [
187
+ activeIndex,
188
+ isGrid,
189
+ handleGridKeyDown,
190
+ handleListKeyDown,
191
+ setActiveIndex
192
+ ]),
193
+ focusedIndex: activeIndex,
194
+ setFocusedIndex: setActiveIndex
195
+ };
196
+ }
197
+ //#endregion
198
+ export { useRovingIndex };
199
+
200
+ //# sourceMappingURL=use-roving-index.mjs.map