@mantine/core 9.6.3 → 9.7.0

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 (373) hide show
  1. package/cjs/components/ActionBar/ActionBar.cjs +0 -3
  2. package/cjs/components/ActionBar/ActionBar.cjs.map +1 -1
  3. package/cjs/components/ActionBar/ActionBar.module.cjs.map +1 -1
  4. package/cjs/components/AppShell/AppShell.cjs +33 -6
  5. package/cjs/components/AppShell/AppShell.cjs.map +1 -1
  6. package/cjs/components/AppShell/AppShell.context.cjs.map +1 -1
  7. package/cjs/components/AppShell/AppShell.module.cjs +2 -1
  8. package/cjs/components/AppShell/AppShell.module.cjs.map +1 -1
  9. package/cjs/components/AppShell/AppShellAside/AppShellAside.cjs +28 -7
  10. package/cjs/components/AppShell/AppShellAside/AppShellAside.cjs.map +1 -1
  11. package/cjs/components/AppShell/AppShellFooter/AppShellFooter.cjs +28 -7
  12. package/cjs/components/AppShell/AppShellFooter/AppShellFooter.cjs.map +1 -1
  13. package/cjs/components/AppShell/AppShellHeader/AppShellHeader.cjs +28 -7
  14. package/cjs/components/AppShell/AppShellHeader/AppShellHeader.cjs.map +1 -1
  15. package/cjs/components/AppShell/AppShellMediaStyles/AppShellMediaStyles.cjs +3 -2
  16. package/cjs/components/AppShell/AppShellMediaStyles/AppShellMediaStyles.cjs.map +1 -1
  17. package/cjs/components/AppShell/AppShellMediaStyles/assign-aside-variables/assign-aside-variables.cjs +27 -16
  18. package/cjs/components/AppShell/AppShellMediaStyles/assign-aside-variables/assign-aside-variables.cjs.map +1 -1
  19. package/cjs/components/AppShell/AppShellMediaStyles/assign-footer-variables/assign-footer-variables.cjs +24 -16
  20. package/cjs/components/AppShell/AppShellMediaStyles/assign-footer-variables/assign-footer-variables.cjs.map +1 -1
  21. package/cjs/components/AppShell/AppShellMediaStyles/assign-header-variables/assign-header-variables.cjs +24 -16
  22. package/cjs/components/AppShell/AppShellMediaStyles/assign-header-variables/assign-header-variables.cjs.map +1 -1
  23. package/cjs/components/AppShell/AppShellMediaStyles/assign-navbar-variables/assign-navbar-variables.cjs +30 -19
  24. package/cjs/components/AppShell/AppShellMediaStyles/assign-navbar-variables/assign-navbar-variables.cjs.map +1 -1
  25. package/cjs/components/AppShell/AppShellMediaStyles/escape-css-id/escape-css-id.cjs +26 -0
  26. package/cjs/components/AppShell/AppShellMediaStyles/escape-css-id/escape-css-id.cjs.map +1 -0
  27. package/cjs/components/AppShell/AppShellMediaStyles/get-resized-value/get-resized-value.cjs +10 -0
  28. package/cjs/components/AppShell/AppShellMediaStyles/get-resized-value/get-resized-value.cjs.map +1 -0
  29. package/cjs/components/AppShell/AppShellMediaStyles/get-variables/get-variables.cjs +13 -5
  30. package/cjs/components/AppShell/AppShellMediaStyles/get-variables/get-variables.cjs.map +1 -1
  31. package/cjs/components/AppShell/AppShellNavbar/AppShellNavbar.cjs +28 -7
  32. package/cjs/components/AppShell/AppShellNavbar/AppShellNavbar.cjs.map +1 -1
  33. package/cjs/components/AppShell/AppShellResizeHandle/AppShellResizeHandle.cjs +270 -0
  34. package/cjs/components/AppShell/AppShellResizeHandle/AppShellResizeHandle.cjs.map +1 -0
  35. package/cjs/components/AppShell/use-app-shell-resize/clamp-resize-size.cjs +15 -0
  36. package/cjs/components/AppShell/use-app-shell-resize/clamp-resize-size.cjs.map +1 -0
  37. package/cjs/components/AppShell/use-app-shell-resize/resize-section-config.cjs +51 -0
  38. package/cjs/components/AppShell/use-app-shell-resize/resize-section-config.cjs.map +1 -0
  39. package/cjs/components/AppShell/use-app-shell-resize/safe-area-inset.cjs +12 -0
  40. package/cjs/components/AppShell/use-app-shell-resize/safe-area-inset.cjs.map +1 -0
  41. package/cjs/components/AppShell/use-app-shell-resize/use-app-shell-resize.cjs +127 -0
  42. package/cjs/components/AppShell/use-app-shell-resize/use-app-shell-resize.cjs.map +1 -0
  43. package/cjs/components/AppShell/use-resizing/use-resizing.cjs +20 -2
  44. package/cjs/components/AppShell/use-resizing/use-resizing.cjs.map +1 -1
  45. package/cjs/components/Checkbox/Checkbox.cjs +10 -2
  46. package/cjs/components/Checkbox/Checkbox.cjs.map +1 -1
  47. package/cjs/components/Checkbox/Checkbox.module.cjs +1 -0
  48. package/cjs/components/Checkbox/Checkbox.module.cjs.map +1 -1
  49. package/cjs/components/Checkbox/CheckboxIndicator/CheckboxIndicator.cjs +10 -2
  50. package/cjs/components/Checkbox/CheckboxIndicator/CheckboxIndicator.cjs.map +1 -1
  51. package/cjs/components/Checkbox/CheckboxIndicator/CheckboxIndicator.module.cjs +1 -0
  52. package/cjs/components/Checkbox/CheckboxIndicator/CheckboxIndicator.module.cjs.map +1 -1
  53. package/cjs/components/Dialog/Dialog.cjs +0 -1
  54. package/cjs/components/Dialog/Dialog.cjs.map +1 -1
  55. package/cjs/components/Dialog/Dialog.module.cjs.map +1 -1
  56. package/cjs/components/HoverCard/HoverCard.cjs +34 -5
  57. package/cjs/components/HoverCard/HoverCard.cjs.map +1 -1
  58. package/cjs/components/HoverCard/HoverCard.context.cjs.map +1 -1
  59. package/cjs/components/HoverCard/HoverCardDropdown/HoverCardDropdown.cjs +13 -18
  60. package/cjs/components/HoverCard/HoverCardDropdown/HoverCardDropdown.cjs.map +1 -1
  61. package/cjs/components/HoverCard/HoverCardTarget/HoverCardTarget.cjs +6 -23
  62. package/cjs/components/HoverCard/HoverCardTarget/HoverCardTarget.cjs.map +1 -1
  63. package/cjs/components/HoverCard/use-hover-card.cjs +26 -12
  64. package/cjs/components/HoverCard/use-hover-card.cjs.map +1 -1
  65. package/cjs/components/Radio/Radio.cjs +10 -2
  66. package/cjs/components/Radio/Radio.cjs.map +1 -1
  67. package/cjs/components/Radio/Radio.module.cjs +1 -0
  68. package/cjs/components/Radio/Radio.module.cjs.map +1 -1
  69. package/cjs/components/Radio/RadioIndicator/RadioIndicator.cjs +10 -2
  70. package/cjs/components/Radio/RadioIndicator/RadioIndicator.cjs.map +1 -1
  71. package/cjs/components/Radio/RadioIndicator/RadioIndicator.module.cjs +1 -0
  72. package/cjs/components/Radio/RadioIndicator/RadioIndicator.module.cjs.map +1 -1
  73. package/cjs/components/Toggle/Toggle.cjs +80 -0
  74. package/cjs/components/Toggle/Toggle.cjs.map +1 -0
  75. package/cjs/components/Toggle/Toggle.module.cjs +7 -0
  76. package/cjs/components/Toggle/Toggle.module.cjs.map +1 -0
  77. package/cjs/components/Toolbar/Toolbar.cjs +107 -0
  78. package/cjs/components/Toolbar/Toolbar.cjs.map +1 -0
  79. package/cjs/components/Toolbar/Toolbar.context.cjs +8 -0
  80. package/cjs/components/Toolbar/Toolbar.context.cjs.map +1 -0
  81. package/cjs/components/Toolbar/Toolbar.module.cjs +12 -0
  82. package/cjs/components/Toolbar/Toolbar.module.cjs.map +1 -0
  83. package/cjs/components/Toolbar/ToolbarDivider/ToolbarDivider.cjs +31 -0
  84. package/cjs/components/Toolbar/ToolbarDivider/ToolbarDivider.cjs.map +1 -0
  85. package/cjs/components/Toolbar/ToolbarGroup/ToolbarGroup.cjs +31 -0
  86. package/cjs/components/Toolbar/ToolbarGroup/ToolbarGroup.cjs.map +1 -0
  87. package/cjs/components/Toolbar/ToolbarToggle/ToolbarToggle.cjs +47 -0
  88. package/cjs/components/Toolbar/ToolbarToggle/ToolbarToggle.cjs.map +1 -0
  89. package/cjs/components/Toolbar/ToolbarToggleGroup/ToolbarToggleGroup.cjs +61 -0
  90. package/cjs/components/Toolbar/ToolbarToggleGroup/ToolbarToggleGroup.cjs.map +1 -0
  91. package/cjs/components/Toolbar/ToolbarToggleGroup/ToolbarToggleGroup.context.cjs +8 -0
  92. package/cjs/components/Toolbar/ToolbarToggleGroup/ToolbarToggleGroup.context.cjs.map +1 -0
  93. package/cjs/components/Toolbar/ToolbarToggleItem/ToolbarToggleItem.cjs +51 -0
  94. package/cjs/components/Toolbar/ToolbarToggleItem/ToolbarToggleItem.cjs.map +1 -0
  95. package/cjs/components/Toolbar/use-toolbar-navigation.cjs +76 -0
  96. package/cjs/components/Toolbar/use-toolbar-navigation.cjs.map +1 -0
  97. package/cjs/components/Tooltip/Tooltip.cjs +9 -5
  98. package/cjs/components/Tooltip/Tooltip.cjs.map +1 -1
  99. package/cjs/components/Tooltip/use-tooltip.cjs +6 -3
  100. package/cjs/components/Tooltip/use-tooltip.cjs.map +1 -1
  101. package/cjs/components/Tour/Tour.cjs +283 -0
  102. package/cjs/components/Tour/Tour.cjs.map +1 -0
  103. package/cjs/components/Tour/Tour.context.cjs +25 -0
  104. package/cjs/components/Tour/Tour.context.cjs.map +1 -0
  105. package/cjs/components/Tour/Tour.module.cjs +19 -0
  106. package/cjs/components/Tour/Tour.module.cjs.map +1 -0
  107. package/cjs/components/Tour/TourBeacon/TourBeacon.cjs +54 -0
  108. package/cjs/components/Tour/TourBeacon/TourBeacon.cjs.map +1 -0
  109. package/cjs/components/Tour/TourBeaconPositioned.cjs +46 -0
  110. package/cjs/components/Tour/TourBeaconPositioned.cjs.map +1 -0
  111. package/cjs/components/Tour/TourBody/TourBody.cjs +37 -0
  112. package/cjs/components/Tour/TourBody/TourBody.cjs.map +1 -0
  113. package/cjs/components/Tour/TourCloseButton/TourCloseButton.cjs +26 -0
  114. package/cjs/components/Tour/TourCloseButton/TourCloseButton.cjs.map +1 -0
  115. package/cjs/components/Tour/TourNavigation/TourNavigation.cjs +63 -0
  116. package/cjs/components/Tour/TourNavigation/TourNavigation.cjs.map +1 -0
  117. package/cjs/components/Tour/TourOverlay/TourOverlay.cjs +70 -0
  118. package/cjs/components/Tour/TourOverlay/TourOverlay.cjs.map +1 -0
  119. package/cjs/components/Tour/TourRoot/TourRoot.cjs +125 -0
  120. package/cjs/components/Tour/TourRoot/TourRoot.cjs.map +1 -0
  121. package/cjs/components/Tour/TourStep/TourStep.cjs +10 -0
  122. package/cjs/components/Tour/TourStep/TourStep.cjs.map +1 -0
  123. package/cjs/components/Tour/TourTitle/TourTitle.cjs +38 -0
  124. package/cjs/components/Tour/TourTitle/TourTitle.cjs.map +1 -0
  125. package/cjs/components/Tour/TourTooltip/TourTooltip.cjs +87 -0
  126. package/cjs/components/Tour/TourTooltip/TourTooltip.cjs.map +1 -0
  127. package/cjs/components/Tour/get-overlay-hit-path.cjs +17 -0
  128. package/cjs/components/Tour/get-overlay-hit-path.cjs.map +1 -0
  129. package/cjs/components/Tour/is-element-in-view.cjs +30 -0
  130. package/cjs/components/Tour/is-element-in-view.cjs.map +1 -0
  131. package/cjs/components/Tour/press-aware-auto-update.cjs +38 -0
  132. package/cjs/components/Tour/press-aware-auto-update.cjs.map +1 -0
  133. package/cjs/components/Tour/use-target-rect.cjs +61 -0
  134. package/cjs/components/Tour/use-target-rect.cjs.map +1 -0
  135. package/cjs/components/Tour/use-tooltip-auto-focus.cjs +34 -0
  136. package/cjs/components/Tour/use-tooltip-auto-focus.cjs.map +1 -0
  137. package/cjs/components/Tour/use-tour-state.cjs +102 -0
  138. package/cjs/components/Tour/use-tour-state.cjs.map +1 -0
  139. package/cjs/components/Tour/use-tour.cjs +155 -0
  140. package/cjs/components/Tour/use-tour.cjs.map +1 -0
  141. package/cjs/components/TreeSelect/TreeSelect.cjs +29 -16
  142. package/cjs/components/TreeSelect/TreeSelect.cjs.map +1 -1
  143. package/cjs/index.cjs +41 -1
  144. package/esm/components/ActionBar/ActionBar.mjs +0 -3
  145. package/esm/components/ActionBar/ActionBar.mjs.map +1 -1
  146. package/esm/components/ActionBar/ActionBar.module.mjs.map +1 -1
  147. package/esm/components/AppShell/AppShell.context.mjs.map +1 -1
  148. package/esm/components/AppShell/AppShell.mjs +35 -8
  149. package/esm/components/AppShell/AppShell.mjs.map +1 -1
  150. package/esm/components/AppShell/AppShell.module.mjs +2 -1
  151. package/esm/components/AppShell/AppShell.module.mjs.map +1 -1
  152. package/esm/components/AppShell/AppShellAside/AppShellAside.mjs +29 -8
  153. package/esm/components/AppShell/AppShellAside/AppShellAside.mjs.map +1 -1
  154. package/esm/components/AppShell/AppShellFooter/AppShellFooter.mjs +29 -8
  155. package/esm/components/AppShell/AppShellFooter/AppShellFooter.mjs.map +1 -1
  156. package/esm/components/AppShell/AppShellHeader/AppShellHeader.mjs +29 -8
  157. package/esm/components/AppShell/AppShellHeader/AppShellHeader.mjs.map +1 -1
  158. package/esm/components/AppShell/AppShellMediaStyles/AppShellMediaStyles.mjs +3 -2
  159. package/esm/components/AppShell/AppShellMediaStyles/AppShellMediaStyles.mjs.map +1 -1
  160. package/esm/components/AppShell/AppShellMediaStyles/assign-aside-variables/assign-aside-variables.mjs +27 -16
  161. package/esm/components/AppShell/AppShellMediaStyles/assign-aside-variables/assign-aside-variables.mjs.map +1 -1
  162. package/esm/components/AppShell/AppShellMediaStyles/assign-footer-variables/assign-footer-variables.mjs +24 -16
  163. package/esm/components/AppShell/AppShellMediaStyles/assign-footer-variables/assign-footer-variables.mjs.map +1 -1
  164. package/esm/components/AppShell/AppShellMediaStyles/assign-header-variables/assign-header-variables.mjs +24 -16
  165. package/esm/components/AppShell/AppShellMediaStyles/assign-header-variables/assign-header-variables.mjs.map +1 -1
  166. package/esm/components/AppShell/AppShellMediaStyles/assign-navbar-variables/assign-navbar-variables.mjs +30 -19
  167. package/esm/components/AppShell/AppShellMediaStyles/assign-navbar-variables/assign-navbar-variables.mjs.map +1 -1
  168. package/esm/components/AppShell/AppShellMediaStyles/escape-css-id/escape-css-id.mjs +26 -0
  169. package/esm/components/AppShell/AppShellMediaStyles/escape-css-id/escape-css-id.mjs.map +1 -0
  170. package/esm/components/AppShell/AppShellMediaStyles/get-resized-value/get-resized-value.mjs +10 -0
  171. package/esm/components/AppShell/AppShellMediaStyles/get-resized-value/get-resized-value.mjs.map +1 -0
  172. package/esm/components/AppShell/AppShellMediaStyles/get-variables/get-variables.mjs +13 -5
  173. package/esm/components/AppShell/AppShellMediaStyles/get-variables/get-variables.mjs.map +1 -1
  174. package/esm/components/AppShell/AppShellNavbar/AppShellNavbar.mjs +29 -8
  175. package/esm/components/AppShell/AppShellNavbar/AppShellNavbar.mjs.map +1 -1
  176. package/esm/components/AppShell/AppShellResizeHandle/AppShellResizeHandle.mjs +270 -0
  177. package/esm/components/AppShell/AppShellResizeHandle/AppShellResizeHandle.mjs.map +1 -0
  178. package/esm/components/AppShell/use-app-shell-resize/clamp-resize-size.mjs +14 -0
  179. package/esm/components/AppShell/use-app-shell-resize/clamp-resize-size.mjs.map +1 -0
  180. package/esm/components/AppShell/use-app-shell-resize/resize-section-config.mjs +49 -0
  181. package/esm/components/AppShell/use-app-shell-resize/resize-section-config.mjs.map +1 -0
  182. package/esm/components/AppShell/use-app-shell-resize/safe-area-inset.mjs +12 -0
  183. package/esm/components/AppShell/use-app-shell-resize/safe-area-inset.mjs.map +1 -0
  184. package/esm/components/AppShell/use-app-shell-resize/use-app-shell-resize.mjs +127 -0
  185. package/esm/components/AppShell/use-app-shell-resize/use-app-shell-resize.mjs.map +1 -0
  186. package/esm/components/AppShell/use-resizing/use-resizing.mjs +21 -3
  187. package/esm/components/AppShell/use-resizing/use-resizing.mjs.map +1 -1
  188. package/esm/components/Checkbox/Checkbox.mjs +10 -2
  189. package/esm/components/Checkbox/Checkbox.mjs.map +1 -1
  190. package/esm/components/Checkbox/Checkbox.module.mjs +1 -0
  191. package/esm/components/Checkbox/Checkbox.module.mjs.map +1 -1
  192. package/esm/components/Checkbox/CheckboxIndicator/CheckboxIndicator.mjs +10 -2
  193. package/esm/components/Checkbox/CheckboxIndicator/CheckboxIndicator.mjs.map +1 -1
  194. package/esm/components/Checkbox/CheckboxIndicator/CheckboxIndicator.module.mjs +1 -0
  195. package/esm/components/Checkbox/CheckboxIndicator/CheckboxIndicator.module.mjs.map +1 -1
  196. package/esm/components/Dialog/Dialog.mjs +0 -1
  197. package/esm/components/Dialog/Dialog.mjs.map +1 -1
  198. package/esm/components/Dialog/Dialog.module.mjs.map +1 -1
  199. package/esm/components/HoverCard/HoverCard.context.mjs.map +1 -1
  200. package/esm/components/HoverCard/HoverCard.mjs +34 -5
  201. package/esm/components/HoverCard/HoverCard.mjs.map +1 -1
  202. package/esm/components/HoverCard/HoverCardDropdown/HoverCardDropdown.mjs +13 -18
  203. package/esm/components/HoverCard/HoverCardDropdown/HoverCardDropdown.mjs.map +1 -1
  204. package/esm/components/HoverCard/HoverCardTarget/HoverCardTarget.mjs +7 -24
  205. package/esm/components/HoverCard/HoverCardTarget/HoverCardTarget.mjs.map +1 -1
  206. package/esm/components/HoverCard/use-hover-card.mjs +27 -13
  207. package/esm/components/HoverCard/use-hover-card.mjs.map +1 -1
  208. package/esm/components/Radio/Radio.mjs +10 -2
  209. package/esm/components/Radio/Radio.mjs.map +1 -1
  210. package/esm/components/Radio/Radio.module.mjs +1 -0
  211. package/esm/components/Radio/Radio.module.mjs.map +1 -1
  212. package/esm/components/Radio/RadioIndicator/RadioIndicator.mjs +10 -2
  213. package/esm/components/Radio/RadioIndicator/RadioIndicator.mjs.map +1 -1
  214. package/esm/components/Radio/RadioIndicator/RadioIndicator.module.mjs +1 -0
  215. package/esm/components/Radio/RadioIndicator/RadioIndicator.module.mjs.map +1 -1
  216. package/esm/components/Toggle/Toggle.mjs +80 -0
  217. package/esm/components/Toggle/Toggle.mjs.map +1 -0
  218. package/esm/components/Toggle/Toggle.module.mjs +7 -0
  219. package/esm/components/Toggle/Toggle.module.mjs.map +1 -0
  220. package/esm/components/Toolbar/Toolbar.context.mjs +8 -0
  221. package/esm/components/Toolbar/Toolbar.context.mjs.map +1 -0
  222. package/esm/components/Toolbar/Toolbar.mjs +107 -0
  223. package/esm/components/Toolbar/Toolbar.mjs.map +1 -0
  224. package/esm/components/Toolbar/Toolbar.module.mjs +12 -0
  225. package/esm/components/Toolbar/Toolbar.module.mjs.map +1 -0
  226. package/esm/components/Toolbar/ToolbarDivider/ToolbarDivider.mjs +31 -0
  227. package/esm/components/Toolbar/ToolbarDivider/ToolbarDivider.mjs.map +1 -0
  228. package/esm/components/Toolbar/ToolbarGroup/ToolbarGroup.mjs +31 -0
  229. package/esm/components/Toolbar/ToolbarGroup/ToolbarGroup.mjs.map +1 -0
  230. package/esm/components/Toolbar/ToolbarToggle/ToolbarToggle.mjs +47 -0
  231. package/esm/components/Toolbar/ToolbarToggle/ToolbarToggle.mjs.map +1 -0
  232. package/esm/components/Toolbar/ToolbarToggleGroup/ToolbarToggleGroup.context.mjs +8 -0
  233. package/esm/components/Toolbar/ToolbarToggleGroup/ToolbarToggleGroup.context.mjs.map +1 -0
  234. package/esm/components/Toolbar/ToolbarToggleGroup/ToolbarToggleGroup.mjs +61 -0
  235. package/esm/components/Toolbar/ToolbarToggleGroup/ToolbarToggleGroup.mjs.map +1 -0
  236. package/esm/components/Toolbar/ToolbarToggleItem/ToolbarToggleItem.mjs +51 -0
  237. package/esm/components/Toolbar/ToolbarToggleItem/ToolbarToggleItem.mjs.map +1 -0
  238. package/esm/components/Toolbar/use-toolbar-navigation.mjs +76 -0
  239. package/esm/components/Toolbar/use-toolbar-navigation.mjs.map +1 -0
  240. package/esm/components/Tooltip/Tooltip.mjs +9 -5
  241. package/esm/components/Tooltip/Tooltip.mjs.map +1 -1
  242. package/esm/components/Tooltip/use-tooltip.mjs +7 -4
  243. package/esm/components/Tooltip/use-tooltip.mjs.map +1 -1
  244. package/esm/components/Tour/Tour.context.mjs +22 -0
  245. package/esm/components/Tour/Tour.context.mjs.map +1 -0
  246. package/esm/components/Tour/Tour.mjs +283 -0
  247. package/esm/components/Tour/Tour.mjs.map +1 -0
  248. package/esm/components/Tour/Tour.module.mjs +19 -0
  249. package/esm/components/Tour/Tour.module.mjs.map +1 -0
  250. package/esm/components/Tour/TourBeacon/TourBeacon.mjs +54 -0
  251. package/esm/components/Tour/TourBeacon/TourBeacon.mjs.map +1 -0
  252. package/esm/components/Tour/TourBeaconPositioned.mjs +46 -0
  253. package/esm/components/Tour/TourBeaconPositioned.mjs.map +1 -0
  254. package/esm/components/Tour/TourBody/TourBody.mjs +37 -0
  255. package/esm/components/Tour/TourBody/TourBody.mjs.map +1 -0
  256. package/esm/components/Tour/TourCloseButton/TourCloseButton.mjs +26 -0
  257. package/esm/components/Tour/TourCloseButton/TourCloseButton.mjs.map +1 -0
  258. package/esm/components/Tour/TourNavigation/TourNavigation.mjs +63 -0
  259. package/esm/components/Tour/TourNavigation/TourNavigation.mjs.map +1 -0
  260. package/esm/components/Tour/TourOverlay/TourOverlay.mjs +70 -0
  261. package/esm/components/Tour/TourOverlay/TourOverlay.mjs.map +1 -0
  262. package/esm/components/Tour/TourRoot/TourRoot.mjs +125 -0
  263. package/esm/components/Tour/TourRoot/TourRoot.mjs.map +1 -0
  264. package/esm/components/Tour/TourStep/TourStep.mjs +10 -0
  265. package/esm/components/Tour/TourStep/TourStep.mjs.map +1 -0
  266. package/esm/components/Tour/TourTitle/TourTitle.mjs +38 -0
  267. package/esm/components/Tour/TourTitle/TourTitle.mjs.map +1 -0
  268. package/esm/components/Tour/TourTooltip/TourTooltip.mjs +87 -0
  269. package/esm/components/Tour/TourTooltip/TourTooltip.mjs.map +1 -0
  270. package/esm/components/Tour/get-overlay-hit-path.mjs +17 -0
  271. package/esm/components/Tour/get-overlay-hit-path.mjs.map +1 -0
  272. package/esm/components/Tour/is-element-in-view.mjs +30 -0
  273. package/esm/components/Tour/is-element-in-view.mjs.map +1 -0
  274. package/esm/components/Tour/press-aware-auto-update.mjs +38 -0
  275. package/esm/components/Tour/press-aware-auto-update.mjs.map +1 -0
  276. package/esm/components/Tour/use-target-rect.mjs +59 -0
  277. package/esm/components/Tour/use-target-rect.mjs.map +1 -0
  278. package/esm/components/Tour/use-tooltip-auto-focus.mjs +34 -0
  279. package/esm/components/Tour/use-tooltip-auto-focus.mjs.map +1 -0
  280. package/esm/components/Tour/use-tour-state.mjs +102 -0
  281. package/esm/components/Tour/use-tour-state.mjs.map +1 -0
  282. package/esm/components/Tour/use-tour.mjs +155 -0
  283. package/esm/components/Tour/use-tour.mjs.map +1 -0
  284. package/esm/components/TreeSelect/TreeSelect.mjs +30 -17
  285. package/esm/components/TreeSelect/TreeSelect.mjs.map +1 -1
  286. package/esm/index.mjs +21 -2
  287. package/lib/components/ActionBar/ActionBar.d.ts +1 -1
  288. package/lib/components/AppShell/AppShell.context.d.ts +4 -0
  289. package/lib/components/AppShell/AppShell.d.ts +5 -3
  290. package/lib/components/AppShell/AppShell.types.d.ts +70 -0
  291. package/lib/components/AppShell/AppShellMediaStyles/AppShellMediaStyles.d.ts +6 -1
  292. package/lib/components/AppShell/AppShellMediaStyles/assign-aside-variables/assign-aside-variables.d.ts +3 -1
  293. package/lib/components/AppShell/AppShellMediaStyles/assign-footer-variables/assign-footer-variables.d.ts +3 -1
  294. package/lib/components/AppShell/AppShellMediaStyles/assign-header-variables/assign-header-variables.d.ts +3 -1
  295. package/lib/components/AppShell/AppShellMediaStyles/assign-navbar-variables/assign-navbar-variables.d.ts +3 -1
  296. package/lib/components/AppShell/AppShellMediaStyles/escape-css-id/escape-css-id.d.ts +2 -0
  297. package/lib/components/AppShell/AppShellMediaStyles/get-resized-value/get-resized-value.d.ts +1 -0
  298. package/lib/components/AppShell/AppShellMediaStyles/get-variables/get-variables.d.ts +6 -1
  299. package/lib/components/AppShell/AppShellResizeHandle/AppShellResizeHandle.d.ts +10 -0
  300. package/lib/components/AppShell/index.d.ts +3 -2
  301. package/lib/components/AppShell/use-app-shell-resize/clamp-resize-size.d.ts +9 -0
  302. package/lib/components/AppShell/use-app-shell-resize/resize-section-config.d.ts +29 -0
  303. package/lib/components/AppShell/use-app-shell-resize/safe-area-inset.d.ts +1 -0
  304. package/lib/components/AppShell/use-app-shell-resize/use-app-shell-resize.d.ts +2 -0
  305. package/lib/components/AppShell/use-resizing/use-resizing.d.ts +2 -1
  306. package/lib/components/Checkbox/Checkbox.d.ts +2 -2
  307. package/lib/components/Checkbox/CheckboxIndicator/CheckboxIndicator.d.ts +2 -2
  308. package/lib/components/HoverCard/HoverCard.context.d.ts +8 -4
  309. package/lib/components/HoverCard/HoverCard.d.ts +41 -0
  310. package/lib/components/HoverCard/index.d.ts +1 -1
  311. package/lib/components/HoverCard/use-hover-card.d.ts +11 -0
  312. package/lib/components/Radio/Radio.d.ts +2 -2
  313. package/lib/components/Radio/RadioIndicator/RadioIndicator.d.ts +2 -2
  314. package/lib/components/Toggle/Toggle.d.ts +73 -0
  315. package/lib/components/Toggle/index.d.ts +7 -0
  316. package/lib/components/Toolbar/Toolbar.context.d.ts +7 -0
  317. package/lib/components/Toolbar/Toolbar.d.ts +58 -0
  318. package/lib/components/Toolbar/ToolbarDivider/ToolbarDivider.d.ts +16 -0
  319. package/lib/components/Toolbar/ToolbarGroup/ToolbarGroup.d.ts +16 -0
  320. package/lib/components/Toolbar/ToolbarToggle/ToolbarToggle.d.ts +44 -0
  321. package/lib/components/Toolbar/ToolbarToggleGroup/ToolbarToggleGroup.context.d.ts +7 -0
  322. package/lib/components/Toolbar/ToolbarToggleGroup/ToolbarToggleGroup.d.ts +42 -0
  323. package/lib/components/Toolbar/ToolbarToggleItem/ToolbarToggleItem.d.ts +22 -0
  324. package/lib/components/Toolbar/index.d.ts +32 -0
  325. package/lib/components/Toolbar/use-toolbar-navigation.d.ts +11 -0
  326. package/lib/components/Tooltip/Tooltip.d.ts +2 -0
  327. package/lib/components/Tooltip/use-tooltip.d.ts +2 -0
  328. package/lib/components/Tour/Tour.context.d.ts +66 -0
  329. package/lib/components/Tour/Tour.d.ts +144 -0
  330. package/lib/components/Tour/TourBeacon/TourBeacon.d.ts +23 -0
  331. package/lib/components/Tour/TourBeaconPositioned.d.ts +13 -0
  332. package/lib/components/Tour/TourBody/TourBody.d.ts +19 -0
  333. package/lib/components/Tour/TourCloseButton/TourCloseButton.d.ts +12 -0
  334. package/lib/components/Tour/TourNavigation/TourNavigation.d.ts +11 -0
  335. package/lib/components/Tour/TourOverlay/TourOverlay.d.ts +22 -0
  336. package/lib/components/Tour/TourRoot/TourRoot.d.ts +72 -0
  337. package/lib/components/Tour/TourStep/TourStep.d.ts +30 -0
  338. package/lib/components/Tour/TourTitle/TourTitle.d.ts +19 -0
  339. package/lib/components/Tour/TourTooltip/TourTooltip.d.ts +29 -0
  340. package/lib/components/Tour/get-overlay-hit-path.d.ts +2 -0
  341. package/lib/components/Tour/index.d.ts +23 -0
  342. package/lib/components/Tour/is-element-in-view.d.ts +1 -0
  343. package/lib/components/Tour/press-aware-auto-update.d.ts +2 -0
  344. package/lib/components/Tour/use-target-rect.d.ts +13 -0
  345. package/lib/components/Tour/use-tooltip-auto-focus.d.ts +7 -0
  346. package/lib/components/Tour/use-tour-state.d.ts +23 -0
  347. package/lib/components/Tour/use-tour.d.ts +40 -0
  348. package/lib/components/TreeSelect/TreeSelect.d.ts +14 -0
  349. package/lib/components/TreeSelect/index.d.ts +2 -2
  350. package/lib/components/index.d.ts +3 -0
  351. package/package.json +5 -5
  352. package/styles/ActionBar.css +1 -0
  353. package/styles/ActionBar.layer.css +1 -0
  354. package/styles/AppShell.css +68 -0
  355. package/styles/AppShell.layer.css +68 -0
  356. package/styles/Checkbox.css +20 -0
  357. package/styles/Checkbox.layer.css +20 -0
  358. package/styles/CheckboxIndicator.css +16 -0
  359. package/styles/CheckboxIndicator.layer.css +16 -0
  360. package/styles/Dialog.css +1 -0
  361. package/styles/Dialog.layer.css +1 -0
  362. package/styles/Radio.css +10 -0
  363. package/styles/Radio.layer.css +10 -0
  364. package/styles/RadioIndicator.css +11 -0
  365. package/styles/RadioIndicator.layer.css +11 -0
  366. package/styles/Toggle.css +98 -0
  367. package/styles/Toggle.layer.css +99 -0
  368. package/styles/Toolbar.css +220 -0
  369. package/styles/Toolbar.layer.css +221 -0
  370. package/styles/Tour.css +127 -0
  371. package/styles/Tour.layer.css +128 -0
  372. package/styles.css +575 -0
  373. package/styles.layer.css +575 -0
@@ -0,0 +1,30 @@
1
+ "use client";
2
+ //#region packages/@mantine/core/src/components/Tour/is-element-in-view.ts
3
+ function isScrollable(element) {
4
+ const { overflow, overflowX, overflowY } = getComputedStyle(element);
5
+ return /(auto|scroll|hidden)/.test(`${overflow} ${overflowX} ${overflowY}`);
6
+ }
7
+ function isElementInView(element) {
8
+ const rect = element.getBoundingClientRect();
9
+ if (rect.width === 0 && rect.height === 0) return false;
10
+ const top = rect.top;
11
+ const left = rect.left;
12
+ const bottom = rect.top + rect.height;
13
+ const right = rect.left + rect.width;
14
+ if (top < 0 || left < 0 || bottom > window.innerHeight || right > window.innerWidth) return false;
15
+ let parent = element.parentElement;
16
+ while (parent && parent !== document.body) {
17
+ if (isScrollable(parent)) {
18
+ const parentRect = parent.getBoundingClientRect();
19
+ const clientTop = parentRect.top + parent.clientTop;
20
+ const clientLeft = parentRect.left + parent.clientLeft;
21
+ if (top < clientTop || left < clientLeft || bottom > clientTop + parent.clientHeight || right > clientLeft + parent.clientWidth) return false;
22
+ }
23
+ parent = parent.parentElement;
24
+ }
25
+ return true;
26
+ }
27
+ //#endregion
28
+ export { isElementInView };
29
+
30
+ //# sourceMappingURL=is-element-in-view.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-element-in-view.mjs","names":[],"sources":["../../../src/components/Tour/is-element-in-view.ts"],"sourcesContent":["function isScrollable(element: HTMLElement) {\n const { overflow, overflowX, overflowY } = getComputedStyle(element);\n return /(auto|scroll|hidden)/.test(`${overflow} ${overflowX} ${overflowY}`);\n}\n\nexport function isElementInView(element: HTMLElement) {\n const rect = element.getBoundingClientRect();\n\n if (rect.width === 0 && rect.height === 0) {\n return false;\n }\n\n const top = rect.top;\n const left = rect.left;\n const bottom = rect.top + rect.height;\n const right = rect.left + rect.width;\n\n if (top < 0 || left < 0 || bottom > window.innerHeight || right > window.innerWidth) {\n return false;\n }\n\n let parent = element.parentElement;\n\n while (parent && parent !== document.body) {\n if (isScrollable(parent)) {\n const parentRect = parent.getBoundingClientRect();\n const clientTop = parentRect.top + parent.clientTop;\n const clientLeft = parentRect.left + parent.clientLeft;\n\n if (\n top < clientTop ||\n left < clientLeft ||\n bottom > clientTop + parent.clientHeight ||\n right > clientLeft + parent.clientWidth\n ) {\n return false;\n }\n }\n\n parent = parent.parentElement;\n }\n\n return true;\n}\n"],"mappings":";;AAAA,SAAS,aAAa,SAAsB;CAC1C,MAAM,EAAE,UAAU,WAAW,cAAc,iBAAiB,OAAO;CACnE,OAAO,uBAAuB,KAAK,GAAG,SAAS,GAAG,UAAU,GAAG,WAAW;AAC5E;AAEA,SAAgB,gBAAgB,SAAsB;CACpD,MAAM,OAAO,QAAQ,sBAAsB;CAE3C,IAAI,KAAK,UAAU,KAAK,KAAK,WAAW,GACtC,OAAO;CAGT,MAAM,MAAM,KAAK;CACjB,MAAM,OAAO,KAAK;CAClB,MAAM,SAAS,KAAK,MAAM,KAAK;CAC/B,MAAM,QAAQ,KAAK,OAAO,KAAK;CAE/B,IAAI,MAAM,KAAK,OAAO,KAAK,SAAS,OAAO,eAAe,QAAQ,OAAO,YACvE,OAAO;CAGT,IAAI,SAAS,QAAQ;CAErB,OAAO,UAAU,WAAW,SAAS,MAAM;EACzC,IAAI,aAAa,MAAM,GAAG;GACxB,MAAM,aAAa,OAAO,sBAAsB;GAChD,MAAM,YAAY,WAAW,MAAM,OAAO;GAC1C,MAAM,aAAa,WAAW,OAAO,OAAO;GAE5C,IACE,MAAM,aACN,OAAO,cACP,SAAS,YAAY,OAAO,gBAC5B,QAAQ,aAAa,OAAO,aAE5B,OAAO;EAEX;EAEA,SAAS,OAAO;CAClB;CAEA,OAAO;AACT"}
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import { autoUpdate } from "@floating-ui/react";
3
+ //#region packages/@mantine/core/src/components/Tour/press-aware-auto-update.ts
4
+ function pressAwareAutoUpdate(reference, floating, update) {
5
+ const target = reference instanceof Element ? reference : null;
6
+ let pressed = false;
7
+ let pending = false;
8
+ let frame = -1;
9
+ const handlePointerDown = () => {
10
+ pressed = true;
11
+ };
12
+ const handlePointerUp = () => {
13
+ if (!pressed) return;
14
+ pressed = false;
15
+ if (pending) {
16
+ pending = false;
17
+ frame = requestAnimationFrame(update);
18
+ }
19
+ };
20
+ target?.addEventListener("pointerdown", handlePointerDown);
21
+ window.addEventListener("pointerup", handlePointerUp, true);
22
+ window.addEventListener("pointercancel", handlePointerUp, true);
23
+ const cleanup = autoUpdate(reference, floating, () => {
24
+ if (pressed) pending = true;
25
+ else update();
26
+ });
27
+ return () => {
28
+ cleanup();
29
+ cancelAnimationFrame(frame);
30
+ target?.removeEventListener("pointerdown", handlePointerDown);
31
+ window.removeEventListener("pointerup", handlePointerUp, true);
32
+ window.removeEventListener("pointercancel", handlePointerUp, true);
33
+ };
34
+ }
35
+ //#endregion
36
+ export { pressAwareAutoUpdate };
37
+
38
+ //# sourceMappingURL=press-aware-auto-update.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"press-aware-auto-update.mjs","names":[],"sources":["../../../src/components/Tour/press-aware-auto-update.ts"],"sourcesContent":["import { autoUpdate, type ReferenceType } from '@floating-ui/react';\n\nexport function pressAwareAutoUpdate(\n reference: ReferenceType,\n floating: HTMLElement,\n update: () => void\n) {\n const target = reference instanceof Element ? reference : null;\n let pressed = false;\n let pending = false;\n let frame = -1;\n\n const handlePointerDown = () => {\n pressed = true;\n };\n\n const handlePointerUp = () => {\n if (!pressed) {\n return;\n }\n\n pressed = false;\n\n if (pending) {\n pending = false;\n frame = requestAnimationFrame(update);\n }\n };\n\n target?.addEventListener('pointerdown', handlePointerDown);\n window.addEventListener('pointerup', handlePointerUp, true);\n window.addEventListener('pointercancel', handlePointerUp, true);\n\n const cleanup = autoUpdate(reference, floating, () => {\n if (pressed) {\n pending = true;\n } else {\n update();\n }\n });\n\n return () => {\n cleanup();\n cancelAnimationFrame(frame);\n target?.removeEventListener('pointerdown', handlePointerDown);\n window.removeEventListener('pointerup', handlePointerUp, true);\n window.removeEventListener('pointercancel', handlePointerUp, true);\n };\n}\n"],"mappings":";;;AAEA,SAAgB,qBACd,WACA,UACA,QACA;CACA,MAAM,SAAS,qBAAqB,UAAU,YAAY;CAC1D,IAAI,UAAU;CACd,IAAI,UAAU;CACd,IAAI,QAAQ;CAEZ,MAAM,0BAA0B;EAC9B,UAAU;CACZ;CAEA,MAAM,wBAAwB;EAC5B,IAAI,CAAC,SACH;EAGF,UAAU;EAEV,IAAI,SAAS;GACX,UAAU;GACV,QAAQ,sBAAsB,MAAM;EACtC;CACF;CAEA,QAAQ,iBAAiB,eAAe,iBAAiB;CACzD,OAAO,iBAAiB,aAAa,iBAAiB,IAAI;CAC1D,OAAO,iBAAiB,iBAAiB,iBAAiB,IAAI;CAE9D,MAAM,UAAU,WAAW,WAAW,gBAAgB;EACpD,IAAI,SACF,UAAU;OAEV,OAAO;CAEX,CAAC;CAED,aAAa;EACX,QAAQ;EACR,qBAAqB,KAAK;EAC1B,QAAQ,oBAAoB,eAAe,iBAAiB;EAC5D,OAAO,oBAAoB,aAAa,iBAAiB,IAAI;EAC7D,OAAO,oBAAoB,iBAAiB,iBAAiB,IAAI;CACnE;AACF"}
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useState } from "react";
3
+ import { useIsomorphicEffect } from "@mantine/hooks";
4
+ //#region packages/@mantine/core/src/components/Tour/use-target-rect.ts
5
+ function resolveTarget(target) {
6
+ if (!target) return null;
7
+ return typeof target === "string" ? document.querySelector(target) : target.current || null;
8
+ }
9
+ function useTargetElement(target) {
10
+ const [element, setElement] = useState(null);
11
+ useIsomorphicEffect(() => {
12
+ const el = resolveTarget(target);
13
+ setElement(el);
14
+ if (el || typeof target !== "string") return;
15
+ const mutationObserver = new MutationObserver(() => {
16
+ const found = resolveTarget(target);
17
+ if (found) {
18
+ mutationObserver.disconnect();
19
+ setElement(found);
20
+ }
21
+ });
22
+ mutationObserver.observe(document.body, {
23
+ childList: true,
24
+ subtree: true
25
+ });
26
+ return () => {
27
+ mutationObserver.disconnect();
28
+ };
29
+ }, [target]);
30
+ return element;
31
+ }
32
+ function useTargetRect(element) {
33
+ const [rect, setRect] = useState(null);
34
+ const updateRect = useCallback(() => {
35
+ if (!element) return;
36
+ const r = element.getBoundingClientRect();
37
+ setRect((previous) => previous && previous.top === r.top && previous.left === r.left && previous.width === r.width && previous.height === r.height ? previous : {
38
+ top: r.top,
39
+ left: r.left,
40
+ width: r.width,
41
+ height: r.height
42
+ });
43
+ }, [element]);
44
+ useEffect(() => {
45
+ if (!element) {
46
+ setRect(null);
47
+ return;
48
+ }
49
+ updateRect();
50
+ }, [element, updateRect]);
51
+ return {
52
+ rect,
53
+ updateRect
54
+ };
55
+ }
56
+ //#endregion
57
+ export { resolveTarget, useTargetElement, useTargetRect };
58
+
59
+ //# sourceMappingURL=use-target-rect.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-target-rect.mjs","names":[],"sources":["../../../src/components/Tour/use-target-rect.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react';\nimport { useIsomorphicEffect } from '@mantine/hooks';\n\nexport type TourTarget = string | React.RefObject<HTMLElement | null> | undefined;\n\nexport interface TargetRect {\n top: number;\n left: number;\n width: number;\n height: number;\n}\n\nexport function resolveTarget(target: TourTarget): HTMLElement | null {\n if (!target) {\n return null;\n }\n\n return typeof target === 'string'\n ? document.querySelector<HTMLElement>(target)\n : target.current || null;\n}\n\nexport function useTargetElement(target: TourTarget) {\n const [element, setElement] = useState<HTMLElement | null>(null);\n\n useIsomorphicEffect(() => {\n const el = resolveTarget(target);\n setElement(el);\n\n if (el || typeof target !== 'string') {\n return undefined;\n }\n\n const mutationObserver = new MutationObserver(() => {\n const found = resolveTarget(target);\n if (found) {\n mutationObserver.disconnect();\n setElement(found);\n }\n });\n\n mutationObserver.observe(document.body, { childList: true, subtree: true });\n\n return () => {\n mutationObserver.disconnect();\n };\n }, [target]);\n\n return element;\n}\n\nexport function useTargetRect(element: HTMLElement | null) {\n const [rect, setRect] = useState<TargetRect | null>(null);\n\n const updateRect = useCallback(() => {\n if (!element) {\n return;\n }\n\n const r = element.getBoundingClientRect();\n setRect((previous) =>\n previous &&\n previous.top === r.top &&\n previous.left === r.left &&\n previous.width === r.width &&\n previous.height === r.height\n ? previous\n : { top: r.top, left: r.left, width: r.width, height: r.height }\n );\n }, [element]);\n\n useEffect(() => {\n if (!element) {\n setRect(null);\n return;\n }\n\n updateRect();\n }, [element, updateRect]);\n\n return { rect, updateRect };\n}\n"],"mappings":";;;;AAYA,SAAgB,cAAc,QAAwC;CACpE,IAAI,CAAC,QACH,OAAO;CAGT,OAAO,OAAO,WAAW,WACrB,SAAS,cAA2B,MAAM,IAC1C,OAAO,WAAW;AACxB;AAEA,SAAgB,iBAAiB,QAAoB;CACnD,MAAM,CAAC,SAAS,cAAc,SAA6B,IAAI;CAE/D,0BAA0B;EACxB,MAAM,KAAK,cAAc,MAAM;EAC/B,WAAW,EAAE;EAEb,IAAI,MAAM,OAAO,WAAW,UAC1B;EAGF,MAAM,mBAAmB,IAAI,uBAAuB;GAClD,MAAM,QAAQ,cAAc,MAAM;GAClC,IAAI,OAAO;IACT,iBAAiB,WAAW;IAC5B,WAAW,KAAK;GAClB;EACF,CAAC;EAED,iBAAiB,QAAQ,SAAS,MAAM;GAAE,WAAW;GAAM,SAAS;EAAK,CAAC;EAE1E,aAAa;GACX,iBAAiB,WAAW;EAC9B;CACF,GAAG,CAAC,MAAM,CAAC;CAEX,OAAO;AACT;AAEA,SAAgB,cAAc,SAA6B;CACzD,MAAM,CAAC,MAAM,WAAW,SAA4B,IAAI;CAExD,MAAM,aAAa,kBAAkB;EACnC,IAAI,CAAC,SACH;EAGF,MAAM,IAAI,QAAQ,sBAAsB;EACxC,SAAS,aACP,YACA,SAAS,QAAQ,EAAE,OACnB,SAAS,SAAS,EAAE,QACpB,SAAS,UAAU,EAAE,SACrB,SAAS,WAAW,EAAE,SAClB,WACA;GAAE,KAAK,EAAE;GAAK,MAAM,EAAE;GAAM,OAAO,EAAE;GAAO,QAAQ,EAAE;EAAO,CACnE;CACF,GAAG,CAAC,OAAO,CAAC;CAEZ,gBAAgB;EACd,IAAI,CAAC,SAAS;GACZ,QAAQ,IAAI;GACZ;EACF;EAEA,WAAW;CACb,GAAG,CAAC,SAAS,UAAU,CAAC;CAExB,OAAO;EAAE;EAAM;CAAW;AAC5B"}
@@ -0,0 +1,34 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useRef } from "react";
3
+ import { useIsomorphicEffect } from "@mantine/hooks";
4
+ //#region packages/@mantine/core/src/components/Tour/use-tooltip-auto-focus.ts
5
+ function isFocusLost() {
6
+ return document.activeElement === null || document.activeElement === document.body;
7
+ }
8
+ function useTooltipAutoFocus({ autoFocus, opened, step }) {
9
+ const autoFocusRef = useRef(autoFocus);
10
+ const nodeRef = useRef(null);
11
+ useIsomorphicEffect(() => {
12
+ autoFocusRef.current = autoFocus;
13
+ });
14
+ useEffect(() => {
15
+ const node = nodeRef.current;
16
+ if (opened && node?.isConnected && isFocusLost()) node.focus({ preventScroll: true });
17
+ }, [step]);
18
+ return useCallback((node) => {
19
+ nodeRef.current = node;
20
+ if (!node) return;
21
+ const timeout = window.setTimeout(() => {
22
+ if (!autoFocusRef.current || !node.isConnected || node.contains(document.activeElement)) return;
23
+ node.focus({ preventScroll: true });
24
+ });
25
+ return () => {
26
+ window.clearTimeout(timeout);
27
+ if (nodeRef.current === node) nodeRef.current = null;
28
+ };
29
+ }, []);
30
+ }
31
+ //#endregion
32
+ export { useTooltipAutoFocus };
33
+
34
+ //# sourceMappingURL=use-tooltip-auto-focus.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tooltip-auto-focus.mjs","names":[],"sources":["../../../src/components/Tour/use-tooltip-auto-focus.ts"],"sourcesContent":["import { useCallback, useEffect, useRef } from 'react';\nimport { useIsomorphicEffect } from '@mantine/hooks';\n\ninterface UseTooltipAutoFocusInput {\n autoFocus: boolean;\n opened: boolean;\n step: number;\n}\n\nfunction isFocusLost() {\n return document.activeElement === null || document.activeElement === document.body;\n}\n\nexport function useTooltipAutoFocus({ autoFocus, opened, step }: UseTooltipAutoFocusInput) {\n const autoFocusRef = useRef(autoFocus);\n const nodeRef = useRef<HTMLElement | null>(null);\n\n useIsomorphicEffect(() => {\n autoFocusRef.current = autoFocus;\n });\n\n useEffect(() => {\n const node = nodeRef.current;\n if (opened && node?.isConnected && isFocusLost()) {\n node.focus({ preventScroll: true });\n }\n }, [step]);\n\n return useCallback((node: HTMLElement | null) => {\n nodeRef.current = node;\n\n if (!node) {\n return undefined;\n }\n\n const timeout = window.setTimeout(() => {\n if (!autoFocusRef.current || !node.isConnected || node.contains(document.activeElement)) {\n return;\n }\n\n node.focus({ preventScroll: true });\n });\n\n return () => {\n window.clearTimeout(timeout);\n if (nodeRef.current === node) {\n nodeRef.current = null;\n }\n };\n }, []);\n}\n"],"mappings":";;;;AASA,SAAS,cAAc;CACrB,OAAO,SAAS,kBAAkB,QAAQ,SAAS,kBAAkB,SAAS;AAChF;AAEA,SAAgB,oBAAoB,EAAE,WAAW,QAAQ,QAAkC;CACzF,MAAM,eAAe,OAAO,SAAS;CACrC,MAAM,UAAU,OAA2B,IAAI;CAE/C,0BAA0B;EACxB,aAAa,UAAU;CACzB,CAAC;CAED,gBAAgB;EACd,MAAM,OAAO,QAAQ;EACrB,IAAI,UAAU,MAAM,eAAe,YAAY,GAC7C,KAAK,MAAM,EAAE,eAAe,KAAK,CAAC;CAEtC,GAAG,CAAC,IAAI,CAAC;CAET,OAAO,aAAa,SAA6B;EAC/C,QAAQ,UAAU;EAElB,IAAI,CAAC,MACH;EAGF,MAAM,UAAU,OAAO,iBAAiB;GACtC,IAAI,CAAC,aAAa,WAAW,CAAC,KAAK,eAAe,KAAK,SAAS,SAAS,aAAa,GACpF;GAGF,KAAK,MAAM,EAAE,eAAe,KAAK,CAAC;EACpC,CAAC;EAED,aAAa;GACX,OAAO,aAAa,OAAO;GAC3B,IAAI,QAAQ,YAAY,MACtB,QAAQ,UAAU;EAEtB;CACF,GAAG,CAAC,CAAC;AACP"}
@@ -0,0 +1,102 @@
1
+ "use client";
2
+ import { useDirection } from "../../core/DirectionProvider/DirectionProvider.mjs";
3
+ import { useEffect, useEffectEvent, useRef, useState } from "react";
4
+ import { useFocusReturn, useHotkeys, useUncontrolled, useWindowEvent } from "@mantine/hooks";
5
+ //#region packages/@mantine/core/src/components/Tour/use-tour-state.ts
6
+ function useTourState({ active, onClose, step, defaultStep, onStepChange, onStepOpen, onStepClose, mode, stepsCount, closeOnEscape, withKeyboardNavigation }) {
7
+ const { dir } = useDirection();
8
+ const targetRef = useRef(null);
9
+ const [currentStep, setCurrentStep, controlled] = useUncontrolled({
10
+ value: step,
11
+ defaultValue: defaultStep,
12
+ finalValue: 0,
13
+ onChange: onStepChange
14
+ });
15
+ const [beaconOpenStep, setBeaconOpenStep] = useState(null);
16
+ const resetUncontrolledStep = useEffectEvent(() => {
17
+ const initialStep = defaultStep ?? 0;
18
+ if (!controlled && currentStep !== initialStep) setCurrentStep(initialStep);
19
+ });
20
+ const wasActiveRef = useRef(!!active);
21
+ useEffect(() => {
22
+ if (wasActiveRef.current && !active) resetUncontrolledStep();
23
+ wasActiveRef.current = !!active;
24
+ }, [active]);
25
+ const showTooltip = !!active && (mode === "guided" || beaconOpenStep !== null);
26
+ const displayStepIndex = mode === "beacon" && beaconOpenStep !== null ? beaconOpenStep : currentStep;
27
+ const openStep = showTooltip && displayStepIndex >= 0 ? displayStepIndex : null;
28
+ const reportedStepRef = useRef(null);
29
+ const emitStepClose = useEffectEvent((index) => onStepClose(index));
30
+ const emitStepOpen = useEffectEvent((index) => onStepOpen(index));
31
+ useEffect(() => {
32
+ const previousStep = reportedStepRef.current;
33
+ if (previousStep === openStep) return;
34
+ reportedStepRef.current = openStep;
35
+ if (previousStep !== null) emitStepClose(previousStep);
36
+ if (openStep !== null) emitStepOpen(openStep);
37
+ }, [openStep]);
38
+ const close = () => {
39
+ const openedStep = reportedStepRef.current;
40
+ if (openedStep !== null) {
41
+ reportedStepRef.current = null;
42
+ onStepClose(openedStep);
43
+ }
44
+ setBeaconOpenStep(null);
45
+ onClose?.();
46
+ };
47
+ const setStep = (index) => {
48
+ if (mode === "beacon" && beaconOpenStep !== null) setBeaconOpenStep(index);
49
+ setCurrentStep(index);
50
+ };
51
+ const openBeaconStep = (index) => {
52
+ setBeaconOpenStep(index);
53
+ setCurrentStep(index);
54
+ };
55
+ useFocusReturn({
56
+ opened: !!active,
57
+ shouldReturnFocus: true
58
+ });
59
+ const isInsideTarget = (event) => !!targetRef.current && event.target instanceof Node && targetRef.current.contains(event.target);
60
+ const goToNextStep = (event) => {
61
+ if (isInsideTarget(event)) return;
62
+ event.preventDefault();
63
+ if (currentStep < stepsCount - 1) setCurrentStep(currentStep + 1);
64
+ else close();
65
+ };
66
+ const goToPreviousStep = (event) => {
67
+ if (isInsideTarget(event)) return;
68
+ event.preventDefault();
69
+ if (currentStep > 0) setCurrentStep(currentStep - 1);
70
+ };
71
+ const arrowHotkeys = [];
72
+ if (active && mode === "guided" && withKeyboardNavigation) {
73
+ arrowHotkeys.push([
74
+ dir === "rtl" ? "ArrowLeft" : "ArrowRight",
75
+ goToNextStep,
76
+ { preventDefault: false }
77
+ ]);
78
+ arrowHotkeys.push([
79
+ dir === "rtl" ? "ArrowRight" : "ArrowLeft",
80
+ goToPreviousStep,
81
+ { preventDefault: false }
82
+ ]);
83
+ }
84
+ useHotkeys(arrowHotkeys);
85
+ useWindowEvent("keydown", (event) => {
86
+ if (event.key === "Escape" && showTooltip && closeOnEscape && !event.isComposing && event.target?.getAttribute?.("data-mantine-stop-propagation") !== "true") close();
87
+ }, { capture: true });
88
+ return {
89
+ currentStep,
90
+ setStep,
91
+ beaconOpenStep,
92
+ openBeaconStep,
93
+ showTooltip,
94
+ displayStepIndex,
95
+ close,
96
+ targetRef
97
+ };
98
+ }
99
+ //#endregion
100
+ export { useTourState };
101
+
102
+ //# sourceMappingURL=use-tour-state.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tour-state.mjs","names":[],"sources":["../../../src/components/Tour/use-tour-state.ts"],"sourcesContent":["import { useEffect, useEffectEvent, useRef, useState } from 'react';\nimport {\n useFocusReturn,\n useHotkeys,\n useUncontrolled,\n useWindowEvent,\n type HotkeyItem,\n} from '@mantine/hooks';\nimport { useDirection } from '../../core';\n\nexport interface UseTourStateInput {\n active: boolean | undefined;\n onClose: (() => void) | undefined;\n step: number | undefined;\n defaultStep: number | undefined;\n onStepChange: ((step: number) => void) | undefined;\n onStepOpen: (step: number) => void;\n onStepClose: (step: number) => void;\n mode: 'guided' | 'beacon';\n stepsCount: number;\n closeOnEscape: boolean | undefined;\n withKeyboardNavigation: boolean | undefined;\n}\n\nexport function useTourState({\n active,\n onClose,\n step,\n defaultStep,\n onStepChange,\n onStepOpen,\n onStepClose,\n mode,\n stepsCount,\n closeOnEscape,\n withKeyboardNavigation,\n}: UseTourStateInput) {\n const { dir } = useDirection();\n const targetRef = useRef<HTMLElement | null>(null);\n\n const [currentStep, setCurrentStep, controlled] = useUncontrolled({\n value: step,\n defaultValue: defaultStep,\n finalValue: 0,\n onChange: onStepChange,\n });\n\n const [beaconOpenStep, setBeaconOpenStep] = useState<number | null>(null);\n\n const resetUncontrolledStep = useEffectEvent(() => {\n const initialStep = defaultStep ?? 0;\n if (!controlled && currentStep !== initialStep) {\n setCurrentStep(initialStep);\n }\n });\n\n const wasActiveRef = useRef(!!active);\n\n useEffect(() => {\n if (wasActiveRef.current && !active) {\n resetUncontrolledStep();\n }\n wasActiveRef.current = !!active;\n }, [active]);\n\n const showTooltip = !!active && (mode === 'guided' || beaconOpenStep !== null);\n const displayStepIndex =\n mode === 'beacon' && beaconOpenStep !== null ? beaconOpenStep : currentStep;\n const openStep = showTooltip && displayStepIndex >= 0 ? displayStepIndex : null;\n\n const reportedStepRef = useRef<number | null>(null);\n const emitStepClose = useEffectEvent((index: number) => onStepClose(index));\n const emitStepOpen = useEffectEvent((index: number) => onStepOpen(index));\n\n useEffect(() => {\n const previousStep = reportedStepRef.current;\n\n if (previousStep === openStep) {\n return;\n }\n\n reportedStepRef.current = openStep;\n\n if (previousStep !== null) {\n emitStepClose(previousStep);\n }\n\n if (openStep !== null) {\n emitStepOpen(openStep);\n }\n }, [openStep]);\n\n const close = () => {\n const openedStep = reportedStepRef.current;\n\n if (openedStep !== null) {\n reportedStepRef.current = null;\n onStepClose(openedStep);\n }\n\n setBeaconOpenStep(null);\n onClose?.();\n };\n\n const setStep = (index: number) => {\n if (mode === 'beacon' && beaconOpenStep !== null) {\n setBeaconOpenStep(index);\n }\n setCurrentStep(index);\n };\n\n const openBeaconStep = (index: number) => {\n setBeaconOpenStep(index);\n setCurrentStep(index);\n };\n\n useFocusReturn({ opened: !!active, shouldReturnFocus: true });\n\n const isInsideTarget = (event: KeyboardEvent) =>\n !!targetRef.current && event.target instanceof Node && targetRef.current.contains(event.target);\n\n const goToNextStep = (event: KeyboardEvent) => {\n if (isInsideTarget(event)) {\n return;\n }\n\n event.preventDefault();\n\n if (currentStep < stepsCount - 1) {\n setCurrentStep(currentStep + 1);\n } else {\n close();\n }\n };\n\n const goToPreviousStep = (event: KeyboardEvent) => {\n if (isInsideTarget(event)) {\n return;\n }\n\n event.preventDefault();\n\n if (currentStep > 0) {\n setCurrentStep(currentStep - 1);\n }\n };\n\n const arrowHotkeys: HotkeyItem[] = [];\n\n if (active && mode === 'guided' && withKeyboardNavigation) {\n arrowHotkeys.push([\n dir === 'rtl' ? 'ArrowLeft' : 'ArrowRight',\n goToNextStep,\n { preventDefault: false },\n ]);\n arrowHotkeys.push([\n dir === 'rtl' ? 'ArrowRight' : 'ArrowLeft',\n goToPreviousStep,\n { preventDefault: false },\n ]);\n }\n\n useHotkeys(arrowHotkeys);\n useWindowEvent(\n 'keydown',\n (event) => {\n if (\n event.key === 'Escape' &&\n showTooltip &&\n closeOnEscape &&\n !event.isComposing &&\n (event.target as HTMLElement | null)?.getAttribute?.('data-mantine-stop-propagation') !==\n 'true'\n ) {\n close();\n }\n },\n { capture: true }\n );\n\n return {\n currentStep,\n setStep,\n beaconOpenStep,\n openBeaconStep,\n showTooltip,\n displayStepIndex,\n close,\n targetRef,\n };\n}\n"],"mappings":"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"}
@@ -0,0 +1,155 @@
1
+ "use client";
2
+ import { useDirection } from "../../core/DirectionProvider/DirectionProvider.mjs";
3
+ import { getFloatingPosition } from "../../utils/Floating/get-floating-position/get-floating-position.mjs";
4
+ import { pressAwareAutoUpdate } from "./press-aware-auto-update.mjs";
5
+ import { resolveTarget, useTargetElement, useTargetRect } from "./use-target-rect.mjs";
6
+ import { useTourState } from "./use-tour-state.mjs";
7
+ import { isElementInView } from "./is-element-in-view.mjs";
8
+ import { Children, useEffect, useEffectEvent, useRef, useState } from "react";
9
+ import { flip, offset, shift, size, useFloating } from "@floating-ui/react";
10
+ import { flushSync } from "react-dom";
11
+ //#region packages/@mantine/core/src/components/Tour/use-tour.ts
12
+ function useTour({ active, onClose, step: stepProp, defaultStep, onStepChange, onStepOpen, onStepClose, mode, withKeyboardNavigation, withScrollIntoView, scrollToHandler, closeOnEscape, maxWidth, stepTransitionDuration, children, stepComponent }) {
13
+ const steps = [];
14
+ Children.forEach(children, (child) => {
15
+ if (child && typeof child === "object" && "type" in child && child.type === stepComponent) steps.push(child.props);
16
+ });
17
+ const { dir } = useDirection();
18
+ const { setStep, beaconOpenStep, openBeaconStep, showTooltip, displayStepIndex, close, targetRef } = useTourState({
19
+ active,
20
+ onClose,
21
+ step: stepProp,
22
+ defaultStep,
23
+ onStepChange,
24
+ onStepOpen: (index) => {
25
+ onStepOpen?.(index);
26
+ steps[index]?.onStepOpen?.();
27
+ },
28
+ onStepClose: (index) => {
29
+ onStepClose?.(index);
30
+ steps[index]?.onStepClose?.();
31
+ },
32
+ mode,
33
+ stepsCount: steps.length,
34
+ closeOnEscape,
35
+ withKeyboardNavigation
36
+ });
37
+ const displayStep = steps[displayStepIndex] || null;
38
+ const activeTarget = showTooltip ? displayStep?.target : void 0;
39
+ const lastActiveTargetRef = useRef(void 0);
40
+ if (showTooltip) lastActiveTargetRef.current = activeTarget;
41
+ const [, setExitedCount] = useState(0);
42
+ const clearExitedTarget = () => {
43
+ lastActiveTargetRef.current = void 0;
44
+ setExitedCount((count) => count + 1);
45
+ };
46
+ const resolvedTarget = showTooltip ? activeTarget : lastActiveTargetRef.current;
47
+ const targetElement = useTargetElement(resolvedTarget);
48
+ const { rect: targetRect, updateRect } = useTargetRect(targetElement);
49
+ useEffect(() => {
50
+ targetRef.current = targetElement;
51
+ }, [targetElement]);
52
+ const scrollTargetIntoView = useEffectEvent((element) => {
53
+ if (scrollToHandler) scrollToHandler(element);
54
+ else if (!isElementInView(element)) element.scrollIntoView({
55
+ behavior: "smooth",
56
+ block: "center"
57
+ });
58
+ });
59
+ useEffect(() => {
60
+ if (active && withScrollIntoView && targetElement) scrollTargetIntoView(targetElement);
61
+ }, [
62
+ active,
63
+ targetElement,
64
+ withScrollIntoView
65
+ ]);
66
+ const nextTargetNeedsScroll = useEffectEvent(() => {
67
+ if (!withScrollIntoView || scrollToHandler) return false;
68
+ const element = resolveTarget(displayStep?.target);
69
+ return !!element && !isElementInView(element);
70
+ });
71
+ const stepPosition = getFloatingPosition(dir, displayStep?.position || "bottom");
72
+ const isSidePlacement = stepPosition.startsWith("left") || stepPosition.startsWith("right");
73
+ const [constrainedWidth, setConstrainedWidth] = useState(maxWidth);
74
+ const { refs: floatingRefs, floatingStyles } = useFloating({
75
+ elements: { reference: targetElement },
76
+ placement: stepPosition,
77
+ transform: false,
78
+ whileElementsMounted: (reference, floating, update) => {
79
+ let mounted = false;
80
+ const cleanup = pressAwareAutoUpdate(reference, floating, () => {
81
+ update();
82
+ if (mounted) flushSync(updateRect);
83
+ else updateRect();
84
+ });
85
+ mounted = true;
86
+ return cleanup;
87
+ },
88
+ middleware: [
89
+ offset(12),
90
+ flip(isSidePlacement ? { fallbackAxisSideDirection: "end" } : void 0),
91
+ shift({ padding: 8 }),
92
+ size({
93
+ padding: 8,
94
+ apply({ availableWidth, placement }) {
95
+ const side = placement.split("-")[0];
96
+ setConstrainedWidth(side === "left" || side === "right" ? maxWidth : Math.min(maxWidth, availableWidth));
97
+ }
98
+ })
99
+ ]
100
+ });
101
+ const isCentered = !targetElement;
102
+ const [hasPositioned, setHasPositioned] = useState(false);
103
+ const [stepMoving, setStepMoving] = useState(false);
104
+ useEffect(() => {
105
+ if (!active) {
106
+ setHasPositioned(false);
107
+ return;
108
+ }
109
+ const timer = requestAnimationFrame(() => {
110
+ setHasPositioned(true);
111
+ });
112
+ return () => cancelAnimationFrame(timer);
113
+ }, [active]);
114
+ const previousStepRef = useRef({
115
+ index: displayStepIndex,
116
+ shown: showTooltip
117
+ });
118
+ useEffect(() => {
119
+ const previous = previousStepRef.current;
120
+ previousStepRef.current = {
121
+ index: displayStepIndex,
122
+ shown: showTooltip
123
+ };
124
+ if (!showTooltip) {
125
+ setStepMoving(false);
126
+ return;
127
+ }
128
+ if (!hasPositioned || !previous.shown || previous.index === displayStepIndex || nextTargetNeedsScroll()) return;
129
+ setStepMoving(true);
130
+ const timer = window.setTimeout(() => setStepMoving(false), stepTransitionDuration);
131
+ return () => window.clearTimeout(timer);
132
+ }, [displayStepIndex, showTooltip]);
133
+ return {
134
+ steps,
135
+ setStep,
136
+ beaconOpenStep,
137
+ openBeaconStep,
138
+ close,
139
+ displayStep,
140
+ displayStepIndex,
141
+ targetRect,
142
+ targetElement,
143
+ floatingStyles,
144
+ floatingRefs,
145
+ isCentered,
146
+ constrainedWidth,
147
+ stepMoving: hasPositioned && stepMoving,
148
+ showTooltip,
149
+ clearExitedTarget
150
+ };
151
+ }
152
+ //#endregion
153
+ export { useTour };
154
+
155
+ //# sourceMappingURL=use-tour.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-tour.mjs","names":[],"sources":["../../../src/components/Tour/use-tour.ts"],"sourcesContent":["import { Children, useEffect, useEffectEvent, useRef, useState } from 'react';\nimport { flip, offset, shift, size, useFloating } from '@floating-ui/react';\nimport { flushSync } from 'react-dom';\nimport { useDirection } from '../../core';\nimport { getFloatingPosition } from '../../utils/Floating';\nimport { isElementInView } from './is-element-in-view';\nimport { pressAwareAutoUpdate } from './press-aware-auto-update';\nimport type { TourStepProps } from './TourStep/TourStep';\nimport {\n resolveTarget,\n useTargetElement,\n useTargetRect,\n type TargetRect,\n type TourTarget,\n} from './use-target-rect';\nimport { useTourState } from './use-tour-state';\n\nexport interface UseTourInput {\n active?: boolean;\n onClose?: () => void;\n step?: number;\n defaultStep?: number;\n onStepChange?: (step: number) => void;\n onStepOpen?: (step: number) => void;\n onStepClose?: (step: number) => void;\n mode?: 'guided' | 'beacon';\n withKeyboardNavigation?: boolean;\n withScrollIntoView?: boolean;\n scrollToHandler?: (element: HTMLElement) => void;\n closeOnEscape?: boolean;\n maxWidth?: number;\n stepTransitionDuration?: number;\n children?: React.ReactNode;\n stepComponent: React.ComponentType<any>;\n}\n\nexport interface UseTourReturn {\n steps: TourStepProps[];\n setStep: (step: number) => void;\n beaconOpenStep: number | null;\n openBeaconStep: (step: number) => void;\n close: () => void;\n displayStep: TourStepProps | null;\n displayStepIndex: number;\n targetRect: TargetRect | null;\n targetElement: HTMLElement | null;\n floatingStyles: React.CSSProperties;\n floatingRefs: ReturnType<typeof useFloating>['refs'];\n isCentered: boolean;\n constrainedWidth: number;\n stepMoving: boolean;\n showTooltip: boolean;\n clearExitedTarget: () => void;\n}\n\nexport function useTour({\n active,\n onClose,\n step: stepProp,\n defaultStep,\n onStepChange,\n onStepOpen,\n onStepClose,\n mode,\n withKeyboardNavigation,\n withScrollIntoView,\n scrollToHandler,\n closeOnEscape,\n maxWidth,\n stepTransitionDuration,\n children,\n stepComponent,\n}: UseTourInput): UseTourReturn {\n const steps: TourStepProps[] = [];\n Children.forEach(children, (child) => {\n if (child && typeof child === 'object' && 'type' in child && child.type === stepComponent) {\n steps.push(child.props as TourStepProps);\n }\n });\n\n const { dir } = useDirection();\n\n const {\n setStep,\n beaconOpenStep,\n openBeaconStep,\n showTooltip,\n displayStepIndex,\n close,\n targetRef,\n } = useTourState({\n active,\n onClose,\n step: stepProp,\n defaultStep,\n onStepChange,\n onStepOpen: (index) => {\n onStepOpen?.(index);\n steps[index]?.onStepOpen?.();\n },\n onStepClose: (index) => {\n onStepClose?.(index);\n steps[index]?.onStepClose?.();\n },\n mode: mode!,\n stepsCount: steps.length,\n closeOnEscape,\n withKeyboardNavigation,\n });\n\n const displayStep = steps[displayStepIndex] || null;\n const activeTarget = showTooltip ? displayStep?.target : undefined;\n\n const lastActiveTargetRef = useRef<TourTarget>(undefined);\n if (showTooltip) {\n lastActiveTargetRef.current = activeTarget;\n }\n\n const [, setExitedCount] = useState(0);\n const clearExitedTarget = () => {\n lastActiveTargetRef.current = undefined;\n setExitedCount((count) => count + 1);\n };\n\n const resolvedTarget = showTooltip ? activeTarget : lastActiveTargetRef.current;\n const targetElement = useTargetElement(resolvedTarget);\n const { rect: targetRect, updateRect } = useTargetRect(targetElement);\n\n useEffect(() => {\n targetRef.current = targetElement;\n }, [targetElement]);\n\n const scrollTargetIntoView = useEffectEvent((element: HTMLElement) => {\n if (scrollToHandler) {\n scrollToHandler(element);\n } else if (!isElementInView(element)) {\n element.scrollIntoView({ behavior: 'smooth', block: 'center' });\n }\n });\n\n useEffect(() => {\n if (active && withScrollIntoView && targetElement) {\n scrollTargetIntoView(targetElement);\n }\n }, [active, targetElement, withScrollIntoView]);\n\n const nextTargetNeedsScroll = useEffectEvent(() => {\n if (!withScrollIntoView || scrollToHandler) {\n return false;\n }\n\n const element = resolveTarget(displayStep?.target);\n return !!element && !isElementInView(element);\n });\n\n const stepPosition = getFloatingPosition(dir, displayStep?.position || 'bottom');\n const isSidePlacement = stepPosition.startsWith('left') || stepPosition.startsWith('right');\n\n const [constrainedWidth, setConstrainedWidth] = useState(maxWidth!);\n\n const { refs: floatingRefs, floatingStyles } = useFloating({\n elements: { reference: targetElement },\n placement: stepPosition,\n transform: false,\n whileElementsMounted: (reference, floating, update) => {\n let mounted = false;\n const cleanup = pressAwareAutoUpdate(reference, floating, () => {\n update();\n if (mounted) {\n flushSync(updateRect);\n } else {\n updateRect();\n }\n });\n mounted = true;\n return cleanup;\n },\n middleware: [\n offset(12),\n flip(isSidePlacement ? { fallbackAxisSideDirection: 'end' } : undefined),\n shift({ padding: 8 }),\n size({\n padding: 8,\n apply({ availableWidth, placement }) {\n const side = placement.split('-')[0];\n setConstrainedWidth(\n side === 'left' || side === 'right' ? maxWidth! : Math.min(maxWidth!, availableWidth)\n );\n },\n }),\n ],\n });\n\n const isCentered = !targetElement;\n const [hasPositioned, setHasPositioned] = useState(false);\n const [stepMoving, setStepMoving] = useState(false);\n\n useEffect(() => {\n if (!active) {\n setHasPositioned(false);\n return;\n }\n\n const timer = requestAnimationFrame(() => {\n setHasPositioned(true);\n });\n\n return () => cancelAnimationFrame(timer);\n }, [active]);\n\n const previousStepRef = useRef({ index: displayStepIndex, shown: showTooltip });\n\n useEffect(() => {\n const previous = previousStepRef.current;\n previousStepRef.current = { index: displayStepIndex, shown: showTooltip };\n\n if (!showTooltip) {\n setStepMoving(false);\n return undefined;\n }\n\n if (\n !hasPositioned ||\n !previous.shown ||\n previous.index === displayStepIndex ||\n nextTargetNeedsScroll()\n ) {\n return undefined;\n }\n\n setStepMoving(true);\n const timer = window.setTimeout(() => setStepMoving(false), stepTransitionDuration);\n return () => window.clearTimeout(timer);\n }, [displayStepIndex, showTooltip]);\n\n return {\n steps,\n setStep,\n beaconOpenStep,\n openBeaconStep,\n close,\n displayStep,\n displayStepIndex,\n targetRect,\n targetElement,\n floatingStyles,\n floatingRefs,\n isCentered,\n constrainedWidth,\n stepMoving: hasPositioned && stepMoving,\n showTooltip,\n clearExitedTarget,\n };\n}\n"],"mappings":"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"}
@@ -20,7 +20,7 @@ import { flattenTreeSelectData } from "./flatten-tree-select-data.mjs";
20
20
  import { checkedToValue, expandToLeafChecked } from "./get-checked-values-by-strategy.mjs";
21
21
  import TreeSelect_module_default from "./TreeSelect.module.mjs";
22
22
  import { TreeSelectOption } from "./TreeSelectOption.mjs";
23
- import { useCallback, useEffect, useMemo, useRef } from "react";
23
+ import { Fragment, useCallback, useEffect, useMemo, useRef } from "react";
24
24
  import { useId as useId$1, useUncontrolled } from "@mantine/hooks";
25
25
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
26
26
  //#region packages/@mantine/core/src/components/TreeSelect/TreeSelect.tsx
@@ -58,7 +58,7 @@ const TreeSelect = genericFactory((_props) => {
58
58
  "InputWrapper",
59
59
  "TreeSelect"
60
60
  ], defaultProps, _props);
61
- const { classNames, className, style, styles, unstyled, vars, size, data, mode, value, defaultValue, onChange, checkStrictly, checkedStrategy, defaultExpandedValues, defaultExpandAll, expandedValues, onExpandedChange, expandOnClick, searchable, searchValue, defaultSearchValue, onSearchChange, filter, nothingFoundMessage, allowDeselect, clearable, clearSectionMode, clearButtonProps, maxValues, maxDisplayedValues, maxDisplayedValuesContent, onRemove, onClear, renderNode, withLines, hiddenInputProps, hiddenInputValuesDivider, scrollAreaProps, chevronColor, maxDropdownHeight, dropdownOpened, defaultDropdownOpened, onDropdownOpen, onDropdownClose, comboboxProps, clearSearchOnChange, openOnFocus, chevronAriaLabels, variant, onKeyDown, onFocus, onBlur, onClick, readOnly, disabled, radius, rightSection, rightSectionWidth, rightSectionPointerEvents, rightSectionProps, leftSection, leftSectionWidth, leftSectionPointerEvents, leftSectionProps, inputContainer, inputWrapperOrder, withAsterisk, labelProps, descriptionProps, errorProps, successProps, wrapperProps, description, label, error, success, withErrorStyles, withSuccessStyles, name, form, id, placeholder, required, mod, attributes, ...others } = props;
61
+ const { classNames, className, style, styles, unstyled, vars, size, data, mode, value, defaultValue, onChange, checkStrictly, checkedStrategy, defaultExpandedValues, defaultExpandAll, expandedValues, onExpandedChange, expandOnClick, searchable, searchValue, defaultSearchValue, onSearchChange, filter, nothingFoundMessage, allowDeselect, clearable, clearSectionMode, clearButtonProps, maxValues, maxDisplayedValues, maxDisplayedValuesContent, onRemove, onClear, renderNode, renderPill, withLines, hiddenInputProps, hiddenInputValuesDivider, scrollAreaProps, chevronColor, maxDropdownHeight, dropdownOpened, defaultDropdownOpened, onDropdownOpen, onDropdownClose, comboboxProps, clearSearchOnChange, openOnFocus, chevronAriaLabels, variant, onKeyDown, onFocus, onBlur, onClick, readOnly, disabled, radius, rightSection, rightSectionWidth, rightSectionPointerEvents, rightSectionProps, leftSection, leftSectionWidth, leftSectionPointerEvents, leftSectionProps, inputContainer, inputWrapperOrder, withAsterisk, labelProps, descriptionProps, errorProps, successProps, wrapperProps, description, label, error, success, withErrorStyles, withSuccessStyles, name, form, id, placeholder, required, mod, attributes, ...others } = props;
62
62
  const isMulti = mode === "multiple" || mode === "checkbox";
63
63
  const isCheckbox = mode === "checkbox";
64
64
  const _id = useId$1(id);
@@ -335,21 +335,34 @@ const TreeSelect = genericFactory((_props) => {
335
335
  const pillsListStyle = _clearable && isMulti ? { paddingInlineEnd: clearSectionOffset[size] ?? clearSectionOffset.sm } : void 0;
336
336
  const visiblePills = maxDisplayedValues != null ? displayValues.slice(0, maxDisplayedValues) : displayValues;
337
337
  const overflowCount = maxDisplayedValues != null ? Math.max(0, displayValues.length - maxDisplayedValues) : 0;
338
- const pills = visiblePills.map((item, index) => /* @__PURE__ */ jsx(Pill, {
339
- withRemoveButton: !readOnly,
340
- onRemove: () => {
341
- if (isCheckbox) {
342
- const childLeaves = checkStrictly ? [item] : getChildrenNodesValues(item, data);
343
- const newInternal = internalChecked.filter((v) => !childLeaves.includes(v));
344
- setValue(checkedToValue(newInternal, data, checkedStrategy));
345
- } else setValue(_value.filter((v) => v !== item));
346
- onRemove?.(item);
347
- },
348
- unstyled,
349
- disabled,
350
- ...getStyles("pill"),
351
- children: getNodeLabel(item)
352
- }, `${item}-${index}`));
338
+ const removePillValue = (item) => {
339
+ if (isCheckbox) {
340
+ const childLeaves = checkStrictly ? [item] : getChildrenNodesValues(item, data);
341
+ const newInternal = internalChecked.filter((v) => !childLeaves.includes(v));
342
+ setValue(checkedToValue(newInternal, data, checkedStrategy));
343
+ } else setValue(_value.filter((v) => v !== item));
344
+ onRemove?.(item);
345
+ };
346
+ const pills = visiblePills.map((item, index) => {
347
+ if (renderPill) return /* @__PURE__ */ jsx(Fragment, { children: renderPill({
348
+ node: nodeLookup[item] ?? {
349
+ value: item,
350
+ label: item
351
+ },
352
+ value: item,
353
+ onRemove: () => removePillValue(item),
354
+ disabled,
355
+ readOnly
356
+ }) }, `${item}-${index}`);
357
+ return /* @__PURE__ */ jsx(Pill, {
358
+ withRemoveButton: !readOnly,
359
+ onRemove: () => removePillValue(item),
360
+ unstyled,
361
+ disabled,
362
+ ...getStyles("pill"),
363
+ children: getNodeLabel(item)
364
+ }, `${item}-${index}`);
365
+ });
353
366
  if (overflowCount > 0) {
354
367
  const overflowContent = typeof maxDisplayedValuesContent === "function" ? maxDisplayedValuesContent(overflowCount) : maxDisplayedValuesContent || `+${overflowCount} more`;
355
368
  pills.push(/* @__PURE__ */ jsx(Pill, {