@ifhover/leaf-ui 0.6.0 → 0.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 (659) hide show
  1. package/README.md +1 -1
  2. package/dist/cjs/autocomplete/autocomplete.cjs +7 -3
  3. package/dist/cjs/autocomplete/autocomplete.cjs.map +1 -1
  4. package/dist/cjs/autocomplete/autocomplete.d.cts +2 -0
  5. package/dist/cjs/autocomplete/autocomplete.d.cts.map +1 -1
  6. package/dist/cjs/browser/modules/autocomplete/autocomplete.cjs +7 -3
  7. package/dist/cjs/browser/modules/autocomplete/autocomplete.cjs.map +1 -1
  8. package/dist/cjs/browser/modules/button/button.cjs.map +1 -1
  9. package/dist/cjs/browser/modules/cascader/cascader.cjs +9 -2
  10. package/dist/cjs/browser/modules/cascader/cascader.cjs.map +1 -1
  11. package/dist/cjs/browser/modules/colors.cjs +73 -7
  12. package/dist/cjs/browser/modules/colors.cjs.map +1 -1
  13. package/dist/cjs/browser/modules/commandpalette/commandpalette.cjs +10 -3
  14. package/dist/cjs/browser/modules/commandpalette/commandpalette.cjs.map +1 -1
  15. package/dist/cjs/browser/modules/config-provider/component-defaults.cjs.map +1 -1
  16. package/dist/cjs/browser/modules/config-provider/use-color-variables.cjs +18 -2
  17. package/dist/cjs/browser/modules/config-provider/use-color-variables.cjs.map +1 -1
  18. package/dist/cjs/browser/modules/drawer/drawer.cjs +7 -1
  19. package/dist/cjs/browser/modules/drawer/drawer.cjs.map +1 -1
  20. package/dist/cjs/browser/modules/dropdown/dropdown.cjs +25 -4
  21. package/dist/cjs/browser/modules/dropdown/dropdown.cjs.map +1 -1
  22. package/dist/cjs/browser/modules/form/form.cjs +38 -21
  23. package/dist/cjs/browser/modules/form/form.cjs.map +1 -1
  24. package/dist/cjs/browser/modules/image/viewer.cjs +8 -2
  25. package/dist/cjs/browser/modules/image/viewer.cjs.map +1 -1
  26. package/dist/cjs/browser/modules/index.cjs +3 -4
  27. package/dist/cjs/browser/modules/layout/layout.cjs +4 -1
  28. package/dist/cjs/browser/modules/layout/layout.cjs.map +1 -1
  29. package/dist/cjs/browser/modules/mentions/mentions.cjs +4 -2
  30. package/dist/cjs/browser/modules/mentions/mentions.cjs.map +1 -1
  31. package/dist/cjs/browser/modules/menu/index.cjs +5 -2
  32. package/dist/cjs/browser/modules/menu/menu.cjs +60 -18
  33. package/dist/cjs/browser/modules/menu/menu.cjs.map +1 -1
  34. package/dist/cjs/browser/modules/scrollbar/scrollbar.cjs +69 -19
  35. package/dist/cjs/browser/modules/scrollbar/scrollbar.cjs.map +1 -1
  36. package/dist/cjs/browser/modules/select/select.cjs +3 -3
  37. package/dist/cjs/browser/modules/select/select.cjs.map +1 -1
  38. package/dist/cjs/browser/modules/shared/floating.cjs +49 -20
  39. package/dist/cjs/browser/modules/shared/floating.cjs.map +1 -1
  40. package/dist/cjs/browser/modules/shared/scoped-portal.cjs +2 -23
  41. package/dist/cjs/browser/modules/shared/scoped-portal.cjs.map +1 -1
  42. package/dist/cjs/browser/modules/{segmented/index.cjs → shared/theme-variables.cjs} +27 -5
  43. package/dist/cjs/browser/modules/shared/theme-variables.cjs.map +1 -0
  44. package/dist/cjs/browser/modules/splitter/splitter.cjs +4 -1
  45. package/dist/cjs/browser/modules/splitter/splitter.cjs.map +1 -1
  46. package/dist/cjs/browser/modules/tabs/tabs.cjs +14 -8
  47. package/dist/cjs/browser/modules/tabs/tabs.cjs.map +1 -1
  48. package/dist/cjs/browser/modules/tailwind-tokens.cjs +1 -1
  49. package/dist/cjs/browser/modules/tailwind-tokens.cjs.map +1 -1
  50. package/dist/cjs/browser/modules/textarea/textarea.cjs +49 -21
  51. package/dist/cjs/browser/modules/textarea/textarea.cjs.map +1 -1
  52. package/dist/cjs/browser/modules/theme.cjs +53 -29
  53. package/dist/cjs/browser/modules/theme.cjs.map +1 -1
  54. package/dist/cjs/browser/modules/timeline/timeline.cjs +1 -1
  55. package/dist/cjs/browser/modules/timeline/timeline.cjs.map +1 -1
  56. package/dist/cjs/browser/modules/timepicker/time-panel.cjs +8 -2
  57. package/dist/cjs/browser/modules/timepicker/time-panel.cjs.map +1 -1
  58. package/dist/cjs/browser/modules/transfer/transfer.cjs +5 -5
  59. package/dist/cjs/browser/modules/transfer/transfer.cjs.map +1 -1
  60. package/dist/cjs/browser/modules/tree/tree.cjs +13 -6
  61. package/dist/cjs/browser/modules/tree/tree.cjs.map +1 -1
  62. package/dist/cjs/browser/modules/treeselect/treeselect.cjs +5 -4
  63. package/dist/cjs/browser/modules/treeselect/treeselect.cjs.map +1 -1
  64. package/dist/cjs/browser/modules/virtuallist/virtuallist.cjs +9 -3
  65. package/dist/cjs/browser/modules/virtuallist/virtuallist.cjs.map +1 -1
  66. package/dist/cjs/button/button.cjs.map +1 -1
  67. package/dist/cjs/button/button.d.cts +7 -2
  68. package/dist/cjs/button/button.d.cts.map +1 -1
  69. package/dist/cjs/cascader/cascader.cjs +9 -2
  70. package/dist/cjs/cascader/cascader.cjs.map +1 -1
  71. package/dist/cjs/cascader/cascader.d.cts +2 -0
  72. package/dist/cjs/cascader/cascader.d.cts.map +1 -1
  73. package/dist/cjs/colors.cjs +73 -7
  74. package/dist/cjs/colors.cjs.map +1 -1
  75. package/dist/cjs/colors.d.cts +3 -1
  76. package/dist/cjs/colors.d.cts.map +1 -1
  77. package/dist/cjs/commandpalette/commandpalette.cjs +10 -3
  78. package/dist/cjs/commandpalette/commandpalette.cjs.map +1 -1
  79. package/dist/cjs/commandpalette/commandpalette.d.cts.map +1 -1
  80. package/dist/cjs/config-provider/component-defaults.cjs.map +1 -1
  81. package/dist/cjs/config-provider/component-defaults.d.cts +3 -4
  82. package/dist/cjs/config-provider/component-defaults.d.cts.map +1 -1
  83. package/dist/cjs/config-provider/index.d.cts +1 -1
  84. package/dist/cjs/config-provider/index.d.cts.map +1 -1
  85. package/dist/cjs/config-provider/use-color-variables.cjs +18 -2
  86. package/dist/cjs/config-provider/use-color-variables.cjs.map +1 -1
  87. package/dist/cjs/config-provider/use-color-variables.d.cts.map +1 -1
  88. package/dist/cjs/drawer/drawer.cjs +7 -1
  89. package/dist/cjs/drawer/drawer.cjs.map +1 -1
  90. package/dist/cjs/drawer/drawer.d.cts.map +1 -1
  91. package/dist/cjs/dropdown/dropdown.cjs +25 -4
  92. package/dist/cjs/dropdown/dropdown.cjs.map +1 -1
  93. package/dist/cjs/dropdown/dropdown.d.cts +9 -1
  94. package/dist/cjs/dropdown/dropdown.d.cts.map +1 -1
  95. package/dist/cjs/form/form.cjs +38 -21
  96. package/dist/cjs/form/form.cjs.map +1 -1
  97. package/dist/cjs/form/form.d.cts +3 -1
  98. package/dist/cjs/form/form.d.cts.map +1 -1
  99. package/dist/cjs/image/viewer.cjs +8 -2
  100. package/dist/cjs/image/viewer.cjs.map +1 -1
  101. package/dist/cjs/image/viewer.d.cts.map +1 -1
  102. package/dist/cjs/index.cjs +3 -4
  103. package/dist/cjs/index.d.cts +3 -5
  104. package/dist/cjs/index.d.cts.map +1 -1
  105. package/dist/cjs/layout/layout.cjs +4 -1
  106. package/dist/cjs/layout/layout.cjs.map +1 -1
  107. package/dist/cjs/layout/layout.d.cts.map +1 -1
  108. package/dist/cjs/mentions/mentions.cjs +4 -2
  109. package/dist/cjs/mentions/mentions.cjs.map +1 -1
  110. package/dist/cjs/mentions/mentions.d.cts +2 -0
  111. package/dist/cjs/mentions/mentions.d.cts.map +1 -1
  112. package/dist/cjs/menu/index.cjs +5 -2
  113. package/dist/cjs/menu/index.d.cts +2 -2
  114. package/dist/cjs/menu/index.d.cts.map +1 -1
  115. package/dist/cjs/menu/menu.cjs +60 -18
  116. package/dist/cjs/menu/menu.cjs.map +1 -1
  117. package/dist/cjs/menu/menu.d.cts +4 -0
  118. package/dist/cjs/menu/menu.d.cts.map +1 -1
  119. package/dist/cjs/scrollbar/scrollbar.cjs +69 -19
  120. package/dist/cjs/scrollbar/scrollbar.cjs.map +1 -1
  121. package/dist/cjs/scrollbar/scrollbar.d.cts +12 -2
  122. package/dist/cjs/scrollbar/scrollbar.d.cts.map +1 -1
  123. package/dist/cjs/select/select.cjs +3 -3
  124. package/dist/cjs/select/select.cjs.map +1 -1
  125. package/dist/cjs/shared/floating.cjs +49 -20
  126. package/dist/cjs/shared/floating.cjs.map +1 -1
  127. package/dist/cjs/shared/floating.d.cts +3 -1
  128. package/dist/cjs/shared/floating.d.cts.map +1 -1
  129. package/dist/cjs/shared/scoped-portal.cjs +2 -23
  130. package/dist/cjs/shared/scoped-portal.cjs.map +1 -1
  131. package/dist/cjs/shared/scoped-portal.d.cts.map +1 -1
  132. package/dist/cjs/{segmented/index.cjs → shared/theme-variables.cjs} +27 -5
  133. package/dist/cjs/shared/theme-variables.cjs.map +1 -0
  134. package/dist/cjs/shared/theme-variables.d.cts +4 -0
  135. package/dist/cjs/shared/theme-variables.d.cts.map +1 -0
  136. package/dist/cjs/splitter/splitter.cjs +4 -1
  137. package/dist/cjs/splitter/splitter.cjs.map +1 -1
  138. package/dist/cjs/splitter/splitter.d.cts.map +1 -1
  139. package/dist/cjs/styles/alert.css +1 -1
  140. package/dist/cjs/styles/anchor.css +1 -1
  141. package/dist/cjs/styles/appbar.css +1 -1
  142. package/dist/cjs/styles/autocomplete.css +1 -1
  143. package/dist/cjs/styles/avatar.css +1 -1
  144. package/dist/cjs/styles/backtop.css +1 -1
  145. package/dist/cjs/styles/badge.css +1 -1
  146. package/dist/cjs/styles/breadcrumb.css +1 -1
  147. package/dist/cjs/styles/button.css +1 -1
  148. package/dist/cjs/styles/calendar.css +1 -1
  149. package/dist/cjs/styles/card.css +1 -1
  150. package/dist/cjs/styles/carousel.css +1 -1
  151. package/dist/cjs/styles/cascader.css +1 -1
  152. package/dist/cjs/styles/checkbox.css +1 -1
  153. package/dist/cjs/styles/collapse.css +1 -1
  154. package/dist/cjs/styles/colorpicker.css +1 -1
  155. package/dist/cjs/styles/commandpalette.css +1 -1
  156. package/dist/cjs/styles/components/alert.css +1 -1
  157. package/dist/cjs/styles/components/anchor.css +1 -1
  158. package/dist/cjs/styles/components/appbar.css +1 -1
  159. package/dist/cjs/styles/components/autocomplete.css +1 -1
  160. package/dist/cjs/styles/components/avatar.css +1 -1
  161. package/dist/cjs/styles/components/breadcrumb.css +1 -1
  162. package/dist/cjs/styles/components/button.css +1 -1
  163. package/dist/cjs/styles/components/calendar.css +1 -1
  164. package/dist/cjs/styles/components/card.css +1 -1
  165. package/dist/cjs/styles/components/carousel.css +1 -1
  166. package/dist/cjs/styles/components/cascader.css +1 -1
  167. package/dist/cjs/styles/components/checkbox.css +1 -1
  168. package/dist/cjs/styles/components/collapse.css +1 -1
  169. package/dist/cjs/styles/components/colorpicker.css +1 -1
  170. package/dist/cjs/styles/components/commandpalette.css +1 -1
  171. package/dist/cjs/styles/components/datepicker.css +1 -1
  172. package/dist/cjs/styles/components/descriptions.css +1 -1
  173. package/dist/cjs/styles/components/drawer.css +1 -1
  174. package/dist/cjs/styles/components/dropdown.css +1 -1
  175. package/dist/cjs/styles/components/errorboundary.css +1 -1
  176. package/dist/cjs/styles/components/filelist.css +1 -1
  177. package/dist/cjs/styles/components/form.css +1 -1
  178. package/dist/cjs/styles/components/image.css +1 -1
  179. package/dist/cjs/styles/components/input.css +1 -1
  180. package/dist/cjs/styles/components/inputnumber.css +1 -1
  181. package/dist/cjs/styles/components/inputotp.css +1 -1
  182. package/dist/cjs/styles/components/layout.css +1 -1
  183. package/dist/cjs/styles/components/loading.css +1 -1
  184. package/dist/cjs/styles/components/loadingbar.css +1 -1
  185. package/dist/cjs/styles/components/mentions.css +1 -1
  186. package/dist/cjs/styles/components/menu.css +1 -1
  187. package/dist/cjs/styles/components/message.css +1 -1
  188. package/dist/cjs/styles/components/modal.css +1 -1
  189. package/dist/cjs/styles/components/notification.css +1 -1
  190. package/dist/cjs/styles/components/pagination.css +1 -1
  191. package/dist/cjs/styles/components/popover.css +1 -1
  192. package/dist/cjs/styles/components/progress.css +1 -1
  193. package/dist/cjs/styles/components/radio.css +1 -1
  194. package/dist/cjs/styles/components/rate.css +1 -1
  195. package/dist/cjs/styles/components/scrollarea.css +1 -1
  196. package/dist/cjs/styles/components/scrollbar.css +1 -1
  197. package/dist/cjs/styles/components/select.css +1 -1
  198. package/dist/cjs/styles/components/shared-calendar.css +1 -1
  199. package/dist/cjs/styles/components/slider.css +1 -1
  200. package/dist/cjs/styles/components/splitter.css +1 -1
  201. package/dist/cjs/styles/components/steps.css +1 -1
  202. package/dist/cjs/styles/components/switch.css +1 -1
  203. package/dist/cjs/styles/components/table.css +1 -1
  204. package/dist/cjs/styles/components/tabletanstack.css +1 -1
  205. package/dist/cjs/styles/components/tabs.css +1 -1
  206. package/dist/cjs/styles/components/tag.css +1 -1
  207. package/dist/cjs/styles/components/textarea.css +1 -1
  208. package/dist/cjs/styles/components/timepicker.css +1 -1
  209. package/dist/cjs/styles/components/tooltip.css +1 -1
  210. package/dist/cjs/styles/components/tour.css +1 -1
  211. package/dist/cjs/styles/components/transfer.css +1 -1
  212. package/dist/cjs/styles/components/tree.css +1 -1
  213. package/dist/cjs/styles/components/treeselect.css +1 -1
  214. package/dist/cjs/styles/components/typography.css +1 -1
  215. package/dist/cjs/styles/components/upload.css +1 -1
  216. package/dist/cjs/styles/components/virtuallist.css +1 -1
  217. package/dist/cjs/styles/config-provider.css +1 -1
  218. package/dist/cjs/styles/confirm.css +1 -1
  219. package/dist/cjs/styles/datepicker.css +1 -1
  220. package/dist/cjs/styles/daterangepicker.css +1 -1
  221. package/dist/cjs/styles/datetimepicker.css +1 -1
  222. package/dist/cjs/styles/descriptions.css +1 -1
  223. package/dist/cjs/styles/divider.css +1 -1
  224. package/dist/cjs/styles/drawer.css +1 -1
  225. package/dist/cjs/styles/dropdown.css +1 -1
  226. package/dist/cjs/styles/empty.css +1 -1
  227. package/dist/cjs/styles/errorboundary.css +1 -1
  228. package/dist/cjs/styles/filelist.css +1 -1
  229. package/dist/cjs/styles/flex.css +1 -1
  230. package/dist/cjs/styles/floatbutton.css +1 -1
  231. package/dist/cjs/styles/form.css +1 -1
  232. package/dist/cjs/styles/foundation.css +1 -1
  233. package/dist/cjs/styles/grid.css +1 -1
  234. package/dist/cjs/styles/image.css +1 -1
  235. package/dist/cjs/styles/index.css +1380 -716
  236. package/dist/cjs/styles/index.css.map +1 -1
  237. package/dist/cjs/styles/infinitescroll.css +1 -1
  238. package/dist/cjs/styles/input.css +1 -1
  239. package/dist/cjs/styles/inputmask.css +1 -1
  240. package/dist/cjs/styles/inputnumber.css +1 -1
  241. package/dist/cjs/styles/inputotp.css +1 -1
  242. package/dist/cjs/styles/layout.css +1 -1
  243. package/dist/cjs/styles/loading.css +1 -1
  244. package/dist/cjs/styles/loadingbar.css +1 -1
  245. package/dist/cjs/styles/masonry.css +1 -1
  246. package/dist/cjs/styles/mentions.css +1 -1
  247. package/dist/cjs/styles/menu.css +1 -1
  248. package/dist/cjs/styles/message.css +1 -1
  249. package/dist/cjs/styles/modal.css +1 -1
  250. package/dist/cjs/styles/notification.css +1 -1
  251. package/dist/cjs/styles/pagination.css +1 -1
  252. package/dist/cjs/styles/popconfirm.css +1 -1
  253. package/dist/cjs/styles/popover.css +1 -1
  254. package/dist/cjs/styles/progress.css +1 -1
  255. package/dist/cjs/styles/qrcode.css +1 -1
  256. package/dist/cjs/styles/radio.css +1 -1
  257. package/dist/cjs/styles/rate.css +1 -1
  258. package/dist/cjs/styles/result.css +1 -1
  259. package/dist/cjs/styles/scrollarea.css +1 -1
  260. package/dist/cjs/styles/scrollbar.css +1 -1
  261. package/dist/cjs/styles/select.css +1 -1
  262. package/dist/cjs/styles/skeleton.css +1 -1
  263. package/dist/cjs/styles/slider.css +1 -1
  264. package/dist/cjs/styles/space.css +1 -1
  265. package/dist/cjs/styles/splitter.css +1 -1
  266. package/dist/cjs/styles/statistic.css +1 -1
  267. package/dist/cjs/styles/steps.css +1 -1
  268. package/dist/cjs/styles/switch.css +1 -1
  269. package/dist/cjs/styles/table.css +1 -1
  270. package/dist/cjs/styles/tabletanstack.css +1 -1
  271. package/dist/cjs/styles/tabs.css +1 -1
  272. package/dist/cjs/styles/tag.css +1 -1
  273. package/dist/cjs/styles/textarea.css +1 -1
  274. package/dist/cjs/styles/timeline.css +1 -1
  275. package/dist/cjs/styles/timepicker.css +1 -1
  276. package/dist/cjs/styles/timerangepicker.css +1 -1
  277. package/dist/cjs/styles/tooltip.css +1 -1
  278. package/dist/cjs/styles/tour.css +1 -1
  279. package/dist/cjs/styles/transfer.css +1 -1
  280. package/dist/cjs/styles/tree.css +1 -1
  281. package/dist/cjs/styles/treeselect.css +1 -1
  282. package/dist/cjs/styles/typography.css +1 -1
  283. package/dist/cjs/styles/upload.css +1 -1
  284. package/dist/cjs/styles/virtuallist.css +1 -1
  285. package/dist/cjs/tabs/tabs.cjs +14 -8
  286. package/dist/cjs/tabs/tabs.cjs.map +1 -1
  287. package/dist/cjs/tabs/tabs.d.cts +4 -2
  288. package/dist/cjs/tabs/tabs.d.cts.map +1 -1
  289. package/dist/cjs/tailwind-tokens.cjs +1 -1
  290. package/dist/cjs/tailwind-tokens.cjs.map +1 -1
  291. package/dist/cjs/tailwind-tokens.d.cts.map +1 -1
  292. package/dist/cjs/textarea/textarea.cjs +49 -21
  293. package/dist/cjs/textarea/textarea.cjs.map +1 -1
  294. package/dist/cjs/textarea/textarea.d.cts.map +1 -1
  295. package/dist/cjs/theme.cjs +53 -29
  296. package/dist/cjs/theme.cjs.map +1 -1
  297. package/dist/cjs/theme.d.cts +15 -0
  298. package/dist/cjs/theme.d.cts.map +1 -1
  299. package/dist/cjs/timeline/timeline.cjs +1 -1
  300. package/dist/cjs/timeline/timeline.cjs.map +1 -1
  301. package/dist/cjs/timeline/timeline.d.cts.map +1 -1
  302. package/dist/cjs/timepicker/time-panel.cjs +8 -2
  303. package/dist/cjs/timepicker/time-panel.cjs.map +1 -1
  304. package/dist/cjs/timepicker/time-panel.d.cts.map +1 -1
  305. package/dist/cjs/transfer/transfer.cjs +5 -5
  306. package/dist/cjs/transfer/transfer.cjs.map +1 -1
  307. package/dist/cjs/transfer/transfer.d.cts.map +1 -1
  308. package/dist/cjs/tree/tree.cjs +13 -6
  309. package/dist/cjs/tree/tree.cjs.map +1 -1
  310. package/dist/cjs/tree/tree.d.cts.map +1 -1
  311. package/dist/cjs/treeselect/treeselect.cjs +5 -4
  312. package/dist/cjs/treeselect/treeselect.cjs.map +1 -1
  313. package/dist/cjs/treeselect/treeselect.d.cts.map +1 -1
  314. package/dist/cjs/virtuallist/virtuallist.cjs +9 -3
  315. package/dist/cjs/virtuallist/virtuallist.cjs.map +1 -1
  316. package/dist/cjs/virtuallist/virtuallist.d.cts.map +1 -1
  317. package/dist/esm/autocomplete/autocomplete.d.ts +2 -0
  318. package/dist/esm/autocomplete/autocomplete.d.ts.map +1 -1
  319. package/dist/esm/autocomplete/autocomplete.js +7 -3
  320. package/dist/esm/autocomplete/autocomplete.js.map +1 -1
  321. package/dist/esm/browser/modules/autocomplete/autocomplete.js +7 -3
  322. package/dist/esm/browser/modules/autocomplete/autocomplete.js.map +1 -1
  323. package/dist/esm/browser/modules/button/button.js.map +1 -1
  324. package/dist/esm/browser/modules/cascader/cascader.js +9 -2
  325. package/dist/esm/browser/modules/cascader/cascader.js.map +1 -1
  326. package/dist/esm/browser/modules/colors.js +69 -6
  327. package/dist/esm/browser/modules/colors.js.map +1 -1
  328. package/dist/esm/browser/modules/commandpalette/commandpalette.js +10 -3
  329. package/dist/esm/browser/modules/commandpalette/commandpalette.js.map +1 -1
  330. package/dist/esm/browser/modules/config-provider/component-defaults.js.map +1 -1
  331. package/dist/esm/browser/modules/config-provider/use-color-variables.js +18 -2
  332. package/dist/esm/browser/modules/config-provider/use-color-variables.js.map +1 -1
  333. package/dist/esm/browser/modules/drawer/drawer.js +7 -1
  334. package/dist/esm/browser/modules/drawer/drawer.js.map +1 -1
  335. package/dist/esm/browser/modules/dropdown/dropdown.js +25 -4
  336. package/dist/esm/browser/modules/dropdown/dropdown.js.map +1 -1
  337. package/dist/esm/browser/modules/form/form.js +38 -21
  338. package/dist/esm/browser/modules/form/form.js.map +1 -1
  339. package/dist/esm/browser/modules/image/viewer.js +8 -2
  340. package/dist/esm/browser/modules/image/viewer.js.map +1 -1
  341. package/dist/esm/browser/modules/index.js +1 -2
  342. package/dist/esm/browser/modules/layout/layout.js +4 -1
  343. package/dist/esm/browser/modules/layout/layout.js.map +1 -1
  344. package/dist/esm/browser/modules/mentions/mentions.js +4 -2
  345. package/dist/esm/browser/modules/mentions/mentions.js.map +1 -1
  346. package/dist/esm/browser/modules/menu/index.js +1 -1
  347. package/dist/esm/browser/modules/menu/menu.js +57 -18
  348. package/dist/esm/browser/modules/menu/menu.js.map +1 -1
  349. package/dist/esm/browser/modules/scrollbar/scrollbar.js +69 -19
  350. package/dist/esm/browser/modules/scrollbar/scrollbar.js.map +1 -1
  351. package/dist/esm/browser/modules/select/select.js +3 -3
  352. package/dist/esm/browser/modules/select/select.js.map +1 -1
  353. package/dist/esm/browser/modules/shared/floating.js +49 -20
  354. package/dist/esm/browser/modules/shared/floating.js.map +1 -1
  355. package/dist/esm/browser/modules/shared/scoped-portal.js +2 -23
  356. package/dist/esm/browser/modules/shared/scoped-portal.js.map +1 -1
  357. package/dist/esm/browser/modules/shared/theme-variables.js +27 -0
  358. package/dist/esm/browser/modules/shared/theme-variables.js.map +1 -0
  359. package/dist/esm/browser/modules/splitter/splitter.js +4 -1
  360. package/dist/esm/browser/modules/splitter/splitter.js.map +1 -1
  361. package/dist/esm/browser/modules/tabs/tabs.js +14 -8
  362. package/dist/esm/browser/modules/tabs/tabs.js.map +1 -1
  363. package/dist/esm/browser/modules/tailwind-tokens.js +1 -1
  364. package/dist/esm/browser/modules/tailwind-tokens.js.map +1 -1
  365. package/dist/esm/browser/modules/textarea/textarea.js +50 -22
  366. package/dist/esm/browser/modules/textarea/textarea.js.map +1 -1
  367. package/dist/esm/browser/modules/theme.js +53 -29
  368. package/dist/esm/browser/modules/theme.js.map +1 -1
  369. package/dist/esm/browser/modules/timeline/timeline.js +1 -1
  370. package/dist/esm/browser/modules/timeline/timeline.js.map +1 -1
  371. package/dist/esm/browser/modules/timepicker/time-panel.js +8 -2
  372. package/dist/esm/browser/modules/timepicker/time-panel.js.map +1 -1
  373. package/dist/esm/browser/modules/transfer/transfer.js +5 -5
  374. package/dist/esm/browser/modules/transfer/transfer.js.map +1 -1
  375. package/dist/esm/browser/modules/tree/tree.js +13 -6
  376. package/dist/esm/browser/modules/tree/tree.js.map +1 -1
  377. package/dist/esm/browser/modules/treeselect/treeselect.js +5 -4
  378. package/dist/esm/browser/modules/treeselect/treeselect.js.map +1 -1
  379. package/dist/esm/browser/modules/virtuallist/virtuallist.js +9 -3
  380. package/dist/esm/browser/modules/virtuallist/virtuallist.js.map +1 -1
  381. package/dist/esm/button/button.d.ts +7 -2
  382. package/dist/esm/button/button.d.ts.map +1 -1
  383. package/dist/esm/button/button.js.map +1 -1
  384. package/dist/esm/cascader/cascader.d.ts +2 -0
  385. package/dist/esm/cascader/cascader.d.ts.map +1 -1
  386. package/dist/esm/cascader/cascader.js +9 -2
  387. package/dist/esm/cascader/cascader.js.map +1 -1
  388. package/dist/esm/colors.d.ts +3 -1
  389. package/dist/esm/colors.d.ts.map +1 -1
  390. package/dist/esm/colors.js +69 -6
  391. package/dist/esm/colors.js.map +1 -1
  392. package/dist/esm/commandpalette/commandpalette.d.ts.map +1 -1
  393. package/dist/esm/commandpalette/commandpalette.js +10 -3
  394. package/dist/esm/commandpalette/commandpalette.js.map +1 -1
  395. package/dist/esm/config-provider/component-defaults.d.ts +3 -4
  396. package/dist/esm/config-provider/component-defaults.d.ts.map +1 -1
  397. package/dist/esm/config-provider/component-defaults.js.map +1 -1
  398. package/dist/esm/config-provider/index.d.ts +1 -1
  399. package/dist/esm/config-provider/index.d.ts.map +1 -1
  400. package/dist/esm/config-provider/use-color-variables.d.ts.map +1 -1
  401. package/dist/esm/config-provider/use-color-variables.js +18 -2
  402. package/dist/esm/config-provider/use-color-variables.js.map +1 -1
  403. package/dist/esm/drawer/drawer.d.ts.map +1 -1
  404. package/dist/esm/drawer/drawer.js +7 -1
  405. package/dist/esm/drawer/drawer.js.map +1 -1
  406. package/dist/esm/dropdown/dropdown.d.ts +9 -1
  407. package/dist/esm/dropdown/dropdown.d.ts.map +1 -1
  408. package/dist/esm/dropdown/dropdown.js +25 -4
  409. package/dist/esm/dropdown/dropdown.js.map +1 -1
  410. package/dist/esm/form/form.d.ts +3 -1
  411. package/dist/esm/form/form.d.ts.map +1 -1
  412. package/dist/esm/form/form.js +38 -21
  413. package/dist/esm/form/form.js.map +1 -1
  414. package/dist/esm/image/viewer.d.ts.map +1 -1
  415. package/dist/esm/image/viewer.js +8 -2
  416. package/dist/esm/image/viewer.js.map +1 -1
  417. package/dist/esm/index.d.ts +3 -5
  418. package/dist/esm/index.d.ts.map +1 -1
  419. package/dist/esm/index.js +1 -2
  420. package/dist/esm/layout/layout.d.ts.map +1 -1
  421. package/dist/esm/layout/layout.js +4 -1
  422. package/dist/esm/layout/layout.js.map +1 -1
  423. package/dist/esm/mentions/mentions.d.ts +2 -0
  424. package/dist/esm/mentions/mentions.d.ts.map +1 -1
  425. package/dist/esm/mentions/mentions.js +4 -2
  426. package/dist/esm/mentions/mentions.js.map +1 -1
  427. package/dist/esm/menu/index.d.ts +2 -2
  428. package/dist/esm/menu/index.d.ts.map +1 -1
  429. package/dist/esm/menu/index.js +1 -1
  430. package/dist/esm/menu/menu.d.ts +4 -0
  431. package/dist/esm/menu/menu.d.ts.map +1 -1
  432. package/dist/esm/menu/menu.js +57 -18
  433. package/dist/esm/menu/menu.js.map +1 -1
  434. package/dist/esm/scrollbar/scrollbar.d.ts +12 -2
  435. package/dist/esm/scrollbar/scrollbar.d.ts.map +1 -1
  436. package/dist/esm/scrollbar/scrollbar.js +69 -19
  437. package/dist/esm/scrollbar/scrollbar.js.map +1 -1
  438. package/dist/esm/select/select.js +3 -3
  439. package/dist/esm/select/select.js.map +1 -1
  440. package/dist/esm/shared/floating.d.ts +3 -1
  441. package/dist/esm/shared/floating.d.ts.map +1 -1
  442. package/dist/esm/shared/floating.js +49 -20
  443. package/dist/esm/shared/floating.js.map +1 -1
  444. package/dist/esm/shared/scoped-portal.d.ts.map +1 -1
  445. package/dist/esm/shared/scoped-portal.js +2 -23
  446. package/dist/esm/shared/scoped-portal.js.map +1 -1
  447. package/dist/esm/shared/theme-variables.d.ts +4 -0
  448. package/dist/esm/shared/theme-variables.d.ts.map +1 -0
  449. package/dist/esm/shared/theme-variables.js +27 -0
  450. package/dist/esm/shared/theme-variables.js.map +1 -0
  451. package/dist/esm/splitter/splitter.d.ts.map +1 -1
  452. package/dist/esm/splitter/splitter.js +4 -1
  453. package/dist/esm/splitter/splitter.js.map +1 -1
  454. package/dist/esm/styles/alert.css +1 -1
  455. package/dist/esm/styles/anchor.css +1 -1
  456. package/dist/esm/styles/appbar.css +1 -1
  457. package/dist/esm/styles/autocomplete.css +1 -1
  458. package/dist/esm/styles/avatar.css +1 -1
  459. package/dist/esm/styles/backtop.css +1 -1
  460. package/dist/esm/styles/badge.css +1 -1
  461. package/dist/esm/styles/breadcrumb.css +1 -1
  462. package/dist/esm/styles/button.css +1 -1
  463. package/dist/esm/styles/calendar.css +1 -1
  464. package/dist/esm/styles/card.css +1 -1
  465. package/dist/esm/styles/carousel.css +1 -1
  466. package/dist/esm/styles/cascader.css +1 -1
  467. package/dist/esm/styles/checkbox.css +1 -1
  468. package/dist/esm/styles/collapse.css +1 -1
  469. package/dist/esm/styles/colorpicker.css +1 -1
  470. package/dist/esm/styles/commandpalette.css +1 -1
  471. package/dist/esm/styles/components/alert.css +1 -1
  472. package/dist/esm/styles/components/anchor.css +1 -1
  473. package/dist/esm/styles/components/appbar.css +1 -1
  474. package/dist/esm/styles/components/autocomplete.css +1 -1
  475. package/dist/esm/styles/components/avatar.css +1 -1
  476. package/dist/esm/styles/components/breadcrumb.css +1 -1
  477. package/dist/esm/styles/components/button.css +1 -1
  478. package/dist/esm/styles/components/calendar.css +1 -1
  479. package/dist/esm/styles/components/card.css +1 -1
  480. package/dist/esm/styles/components/carousel.css +1 -1
  481. package/dist/esm/styles/components/cascader.css +1 -1
  482. package/dist/esm/styles/components/checkbox.css +1 -1
  483. package/dist/esm/styles/components/collapse.css +1 -1
  484. package/dist/esm/styles/components/colorpicker.css +1 -1
  485. package/dist/esm/styles/components/commandpalette.css +1 -1
  486. package/dist/esm/styles/components/datepicker.css +1 -1
  487. package/dist/esm/styles/components/descriptions.css +1 -1
  488. package/dist/esm/styles/components/drawer.css +1 -1
  489. package/dist/esm/styles/components/dropdown.css +1 -1
  490. package/dist/esm/styles/components/errorboundary.css +1 -1
  491. package/dist/esm/styles/components/filelist.css +1 -1
  492. package/dist/esm/styles/components/form.css +1 -1
  493. package/dist/esm/styles/components/image.css +1 -1
  494. package/dist/esm/styles/components/input.css +1 -1
  495. package/dist/esm/styles/components/inputnumber.css +1 -1
  496. package/dist/esm/styles/components/inputotp.css +1 -1
  497. package/dist/esm/styles/components/layout.css +1 -1
  498. package/dist/esm/styles/components/loading.css +1 -1
  499. package/dist/esm/styles/components/loadingbar.css +1 -1
  500. package/dist/esm/styles/components/mentions.css +1 -1
  501. package/dist/esm/styles/components/menu.css +1 -1
  502. package/dist/esm/styles/components/message.css +1 -1
  503. package/dist/esm/styles/components/modal.css +1 -1
  504. package/dist/esm/styles/components/notification.css +1 -1
  505. package/dist/esm/styles/components/pagination.css +1 -1
  506. package/dist/esm/styles/components/popover.css +1 -1
  507. package/dist/esm/styles/components/progress.css +1 -1
  508. package/dist/esm/styles/components/radio.css +1 -1
  509. package/dist/esm/styles/components/rate.css +1 -1
  510. package/dist/esm/styles/components/scrollarea.css +1 -1
  511. package/dist/esm/styles/components/scrollbar.css +1 -1
  512. package/dist/esm/styles/components/select.css +1 -1
  513. package/dist/esm/styles/components/shared-calendar.css +1 -1
  514. package/dist/esm/styles/components/slider.css +1 -1
  515. package/dist/esm/styles/components/splitter.css +1 -1
  516. package/dist/esm/styles/components/steps.css +1 -1
  517. package/dist/esm/styles/components/switch.css +1 -1
  518. package/dist/esm/styles/components/table.css +1 -1
  519. package/dist/esm/styles/components/tabletanstack.css +1 -1
  520. package/dist/esm/styles/components/tabs.css +1 -1
  521. package/dist/esm/styles/components/tag.css +1 -1
  522. package/dist/esm/styles/components/textarea.css +1 -1
  523. package/dist/esm/styles/components/timepicker.css +1 -1
  524. package/dist/esm/styles/components/tooltip.css +1 -1
  525. package/dist/esm/styles/components/tour.css +1 -1
  526. package/dist/esm/styles/components/transfer.css +1 -1
  527. package/dist/esm/styles/components/tree.css +1 -1
  528. package/dist/esm/styles/components/treeselect.css +1 -1
  529. package/dist/esm/styles/components/typography.css +1 -1
  530. package/dist/esm/styles/components/upload.css +1 -1
  531. package/dist/esm/styles/components/virtuallist.css +1 -1
  532. package/dist/esm/styles/config-provider.css +1 -1
  533. package/dist/esm/styles/confirm.css +1 -1
  534. package/dist/esm/styles/datepicker.css +1 -1
  535. package/dist/esm/styles/daterangepicker.css +1 -1
  536. package/dist/esm/styles/datetimepicker.css +1 -1
  537. package/dist/esm/styles/descriptions.css +1 -1
  538. package/dist/esm/styles/divider.css +1 -1
  539. package/dist/esm/styles/drawer.css +1 -1
  540. package/dist/esm/styles/dropdown.css +1 -1
  541. package/dist/esm/styles/empty.css +1 -1
  542. package/dist/esm/styles/errorboundary.css +1 -1
  543. package/dist/esm/styles/filelist.css +1 -1
  544. package/dist/esm/styles/flex.css +1 -1
  545. package/dist/esm/styles/floatbutton.css +1 -1
  546. package/dist/esm/styles/form.css +1 -1
  547. package/dist/esm/styles/foundation.css +1 -1
  548. package/dist/esm/styles/grid.css +1 -1
  549. package/dist/esm/styles/image.css +1 -1
  550. package/dist/esm/styles/index.css +1380 -716
  551. package/dist/esm/styles/index.css.map +1 -1
  552. package/dist/esm/styles/infinitescroll.css +1 -1
  553. package/dist/esm/styles/input.css +1 -1
  554. package/dist/esm/styles/inputmask.css +1 -1
  555. package/dist/esm/styles/inputnumber.css +1 -1
  556. package/dist/esm/styles/inputotp.css +1 -1
  557. package/dist/esm/styles/layout.css +1 -1
  558. package/dist/esm/styles/loading.css +1 -1
  559. package/dist/esm/styles/loadingbar.css +1 -1
  560. package/dist/esm/styles/masonry.css +1 -1
  561. package/dist/esm/styles/mentions.css +1 -1
  562. package/dist/esm/styles/menu.css +1 -1
  563. package/dist/esm/styles/message.css +1 -1
  564. package/dist/esm/styles/modal.css +1 -1
  565. package/dist/esm/styles/notification.css +1 -1
  566. package/dist/esm/styles/pagination.css +1 -1
  567. package/dist/esm/styles/popconfirm.css +1 -1
  568. package/dist/esm/styles/popover.css +1 -1
  569. package/dist/esm/styles/progress.css +1 -1
  570. package/dist/esm/styles/qrcode.css +1 -1
  571. package/dist/esm/styles/radio.css +1 -1
  572. package/dist/esm/styles/rate.css +1 -1
  573. package/dist/esm/styles/result.css +1 -1
  574. package/dist/esm/styles/scrollarea.css +1 -1
  575. package/dist/esm/styles/scrollbar.css +1 -1
  576. package/dist/esm/styles/select.css +1 -1
  577. package/dist/esm/styles/skeleton.css +1 -1
  578. package/dist/esm/styles/slider.css +1 -1
  579. package/dist/esm/styles/space.css +1 -1
  580. package/dist/esm/styles/splitter.css +1 -1
  581. package/dist/esm/styles/statistic.css +1 -1
  582. package/dist/esm/styles/steps.css +1 -1
  583. package/dist/esm/styles/switch.css +1 -1
  584. package/dist/esm/styles/table.css +1 -1
  585. package/dist/esm/styles/tabletanstack.css +1 -1
  586. package/dist/esm/styles/tabs.css +1 -1
  587. package/dist/esm/styles/tag.css +1 -1
  588. package/dist/esm/styles/textarea.css +1 -1
  589. package/dist/esm/styles/timeline.css +1 -1
  590. package/dist/esm/styles/timepicker.css +1 -1
  591. package/dist/esm/styles/timerangepicker.css +1 -1
  592. package/dist/esm/styles/tooltip.css +1 -1
  593. package/dist/esm/styles/tour.css +1 -1
  594. package/dist/esm/styles/transfer.css +1 -1
  595. package/dist/esm/styles/tree.css +1 -1
  596. package/dist/esm/styles/treeselect.css +1 -1
  597. package/dist/esm/styles/typography.css +1 -1
  598. package/dist/esm/styles/upload.css +1 -1
  599. package/dist/esm/styles/virtuallist.css +1 -1
  600. package/dist/esm/tabs/tabs.d.ts +4 -2
  601. package/dist/esm/tabs/tabs.d.ts.map +1 -1
  602. package/dist/esm/tabs/tabs.js +14 -8
  603. package/dist/esm/tabs/tabs.js.map +1 -1
  604. package/dist/esm/tailwind-tokens.d.ts.map +1 -1
  605. package/dist/esm/tailwind-tokens.js +1 -1
  606. package/dist/esm/tailwind-tokens.js.map +1 -1
  607. package/dist/esm/textarea/textarea.d.ts.map +1 -1
  608. package/dist/esm/textarea/textarea.js +50 -22
  609. package/dist/esm/textarea/textarea.js.map +1 -1
  610. package/dist/esm/theme.d.ts +15 -0
  611. package/dist/esm/theme.d.ts.map +1 -1
  612. package/dist/esm/theme.js +53 -29
  613. package/dist/esm/theme.js.map +1 -1
  614. package/dist/esm/timeline/timeline.d.ts.map +1 -1
  615. package/dist/esm/timeline/timeline.js +1 -1
  616. package/dist/esm/timeline/timeline.js.map +1 -1
  617. package/dist/esm/timepicker/time-panel.d.ts.map +1 -1
  618. package/dist/esm/timepicker/time-panel.js +8 -2
  619. package/dist/esm/timepicker/time-panel.js.map +1 -1
  620. package/dist/esm/transfer/transfer.d.ts.map +1 -1
  621. package/dist/esm/transfer/transfer.js +5 -5
  622. package/dist/esm/transfer/transfer.js.map +1 -1
  623. package/dist/esm/tree/tree.d.ts.map +1 -1
  624. package/dist/esm/tree/tree.js +13 -6
  625. package/dist/esm/tree/tree.js.map +1 -1
  626. package/dist/esm/treeselect/treeselect.d.ts.map +1 -1
  627. package/dist/esm/treeselect/treeselect.js +5 -4
  628. package/dist/esm/treeselect/treeselect.js.map +1 -1
  629. package/dist/esm/virtuallist/virtuallist.d.ts.map +1 -1
  630. package/dist/esm/virtuallist/virtuallist.js +9 -3
  631. package/dist/esm/virtuallist/virtuallist.js.map +1 -1
  632. package/dist/tailwind.css +1 -1
  633. package/package.json +1 -22
  634. package/dist/cjs/browser/modules/segmented/index.cjs.map +0 -1
  635. package/dist/cjs/browser/modules/segmented/segmented.cjs +0 -127
  636. package/dist/cjs/browser/modules/segmented/segmented.cjs.map +0 -1
  637. package/dist/cjs/browser/segmented.cjs +0 -2
  638. package/dist/cjs/segmented/index.cjs.map +0 -1
  639. package/dist/cjs/segmented/index.d.cts +0 -3
  640. package/dist/cjs/segmented/index.d.cts.map +0 -1
  641. package/dist/cjs/segmented/segmented.cjs +0 -125
  642. package/dist/cjs/segmented/segmented.cjs.map +0 -1
  643. package/dist/cjs/segmented/segmented.d.cts +0 -21
  644. package/dist/cjs/segmented/segmented.d.cts.map +0 -1
  645. package/dist/cjs/styles/components/segmented.css +0 -1
  646. package/dist/cjs/styles/segmented.css +0 -1
  647. package/dist/esm/browser/modules/segmented/index.js +0 -2
  648. package/dist/esm/browser/modules/segmented/segmented.js +0 -89
  649. package/dist/esm/browser/modules/segmented/segmented.js.map +0 -1
  650. package/dist/esm/browser/segmented.js +0 -2
  651. package/dist/esm/segmented/index.d.ts +0 -3
  652. package/dist/esm/segmented/index.d.ts.map +0 -1
  653. package/dist/esm/segmented/index.js +0 -2
  654. package/dist/esm/segmented/segmented.d.ts +0 -21
  655. package/dist/esm/segmented/segmented.d.ts.map +0 -1
  656. package/dist/esm/segmented/segmented.js +0 -87
  657. package/dist/esm/segmented/segmented.js.map +0 -1
  658. package/dist/esm/styles/components/segmented.css +0 -1
  659. package/dist/esm/styles/segmented.css +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"timeline/timeline.js","sources":["../../../../../src/timeline/timeline.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, useRef } from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { classes } from '../shared/classes';\nimport { useListMotion } from '../shared/motion';\nimport type { LeafThemeStyle } from '../theme';\nexport interface TimelineItem {\n key: string;\n label?: ReactNode;\n children: ReactNode;\n dot?: ReactNode;\n color?: 'primary' | 'success' | 'warning' | 'error' | 'info' | (string & {});\n}\nexport interface TimelineProps extends Omit<HTMLAttributes<HTMLOListElement>, 'onChange'> {\n items: readonly TimelineItem[];\n mode?: 'left' | 'right' | 'alternate';\n reverse?: boolean;\n pending?: ReactNode;\n}\nexport function Timeline(rawProps: TimelineProps) {\n const {\n items,\n mode = 'left',\n reverse = false,\n pending,\n className,\n ...props\n } = useComponentProps('Timeline', rawProps);\n const root = useRef<HTMLOListElement>(null);\n const entries = [...items];\n if (reverse) entries.reverse();\n if (pending != null) entries.push({ key: '__leaf-pending', children: pending });\n useListMotion(\n root,\n JSON.stringify([mode, entries.map((item) => item.key)]),\n '.leaf-timeline__item',\n );\n const colors = {\n primary: 'primary',\n success: 'success',\n warning: 'warning',\n error: 'danger',\n info: 'info',\n };\n return (\n <ol\n {...props}\n ref={root}\n className={classes('leaf-timeline', `leaf-timeline--${mode}`, className)}\n >\n {entries.map((item, index) => (\n <li\n key={item.key}\n data-motion-key={item.key}\n className=\"leaf-timeline__item\"\n data-pending={item.key === '__leaf-pending' || undefined}\n data-side={mode === 'right' || (mode === 'alternate' && index % 2) ? 'right' : 'left'}\n style={\n {\n '--leaf-timeline-color':\n item.color && item.color in colors\n ? `var(--leaf-color-${colors[item.color as keyof typeof colors]})`\n : (item.color ?? 'var(--leaf-color-primary)'),\n } as LeafThemeStyle\n }\n >\n <div className=\"leaf-timeline__dot\" aria-hidden=\"true\">\n {item.dot}\n </div>\n <div className=\"leaf-timeline__content\">\n {item.label != null && <div className=\"leaf-timeline__label\">{item.label}</div>}\n {item.children}\n </div>\n </li>\n ))}\n </ol>\n );\n}\n"],"names":["Timeline","rawProps","items","mode","reverse","pending","className","props","useComponentProps","root","useRef","entries","useListMotion","JSON","item","colors","classes","index","undefined"],"mappings":";;;;;;;;AAkBO,SAASA,SAASC,QAAuB;IAC9C,MAAM,EACJC,KAAK,EACLC,OAAO,MAAM,EACbC,UAAU,KAAK,EACfC,OAAO,EACPC,SAAS,EACT,GAAGC,OACJ,GAAGC,kBAAkB,YAAYP;IAClC,MAAMQ,OAAOC,OAAyB;IACtC,MAAMC,UAAU;WAAIT;KAAM;IAC1B,IAAIE,SAASO,QAAQ,OAAO;IAC5B,IAAIN,AAAW,QAAXA,SAAiBM,QAAQ,IAAI,CAAC;QAAE,KAAK;QAAkB,UAAUN;IAAQ;IAC7EO,cACEH,MACAI,KAAK,SAAS,CAAC;QAACV;QAAMQ,QAAQ,GAAG,CAAC,CAACG,OAASA,KAAK,GAAG;KAAE,GACtD;IAEF,MAAMC,SAAS;QACb,SAAS;QACT,SAAS;QACT,SAAS;QACT,OAAO;QACP,MAAM;IACR;IACA,OAAO,WAAP,GACE,IAAC;QACE,GAAGR,KAAK;QACT,KAAKE;QACL,WAAWO,QAAQ,iBAAiB,CAAC,eAAe,EAAEb,MAAM,EAAEG;kBAE7DK,QAAQ,GAAG,CAAC,CAACG,MAAMG,QAAAA,WAAAA,GAClB,KAAC;gBAEC,mBAAiBH,KAAK,GAAG;gBACzB,WAAU;gBACV,gBAAcA,AAAa,qBAAbA,KAAK,GAAG,IAAyBI;gBAC/C,aAAWf,AAAS,YAATA,QAAqBA,AAAS,gBAATA,QAAwBc,QAAQ,IAAK,UAAU;gBAC/E,OACE;oBACE,yBACEH,KAAK,KAAK,IAAIA,KAAK,KAAK,IAAIC,SACxB,CAAC,iBAAiB,EAAEA,MAAM,CAACD,KAAK,KAAK,CAAwB,CAAC,CAAC,CAAC,GAC/DA,KAAK,KAAK,IAAI;gBACvB;;kCAGF,IAAC;wBAAI,WAAU;wBAAqB,eAAY;kCAC7CA,KAAK,GAAG;;kCAEX,KAAC;wBAAI,WAAU;;4BACE,QAAdA,KAAK,KAAK,IAAY,WAAR,GAAQ,IAAC;gCAAI,WAAU;0CAAwBA,KAAK,KAAK;;4BACvEA,KAAK,QAAQ;;;;eAnBXA,KAAK,GAAG;;AAyBvB"}
1
+ {"version":3,"file":"timeline/timeline.js","sources":["../../../../../src/timeline/timeline.tsx"],"sourcesContent":["import { type HTMLAttributes, type ReactNode, useRef } from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { classes } from '../shared/classes';\nimport { useListMotion } from '../shared/motion';\nimport type { LeafThemeStyle } from '../theme';\nexport interface TimelineItem {\n key: string;\n label?: ReactNode;\n children: ReactNode;\n dot?: ReactNode;\n color?: 'primary' | 'success' | 'warning' | 'error' | 'info' | (string & {});\n}\nexport interface TimelineProps extends Omit<HTMLAttributes<HTMLOListElement>, 'onChange'> {\n items: readonly TimelineItem[];\n mode?: 'left' | 'right' | 'alternate';\n reverse?: boolean;\n pending?: ReactNode;\n}\nexport function Timeline(rawProps: TimelineProps) {\n const {\n items,\n mode = 'left',\n reverse = false,\n pending,\n className,\n ...props\n } = useComponentProps('Timeline', rawProps);\n const root = useRef<HTMLOListElement>(null);\n const entries = [...items];\n if (reverse) entries.reverse();\n if (pending != null) entries.push({ key: '__leaf-pending', children: pending });\n useListMotion(\n root,\n JSON.stringify([mode, entries.map((item) => item.key)]),\n '.leaf-timeline__item',\n );\n const colors = {\n primary: 'primary',\n success: 'success',\n warning: 'warning',\n error: 'danger',\n info: 'info',\n };\n return (\n <ol\n {...props}\n ref={root}\n className={classes('leaf-timeline', `leaf-timeline--${mode}`, className)}\n >\n {entries.map((item, index) => (\n <li\n key={item.key}\n data-motion-key={item.key}\n className=\"leaf-timeline__item\"\n data-pending={item.key === '__leaf-pending' || undefined}\n data-side={mode === 'right' || (mode === 'alternate' && index % 2) ? 'right' : 'left'}\n style={\n {\n '--leaf-timeline-color':\n item.color && item.color in colors\n ? `var(--leaf-color-${colors[item.color as keyof typeof colors]})`\n : (item.color ??\n 'var(--leaf-color-primary-indicator, var(--leaf-color-primary))'),\n } as LeafThemeStyle\n }\n >\n <div className=\"leaf-timeline__dot\" aria-hidden=\"true\">\n {item.dot}\n </div>\n <div className=\"leaf-timeline__content\">\n {item.label != null && <div className=\"leaf-timeline__label\">{item.label}</div>}\n {item.children}\n </div>\n </li>\n ))}\n </ol>\n );\n}\n"],"names":["Timeline","rawProps","items","mode","reverse","pending","className","props","useComponentProps","root","useRef","entries","useListMotion","JSON","item","colors","classes","index","undefined"],"mappings":";;;;;;;;AAkBO,SAASA,SAASC,QAAuB;IAC9C,MAAM,EACJC,KAAK,EACLC,OAAO,MAAM,EACbC,UAAU,KAAK,EACfC,OAAO,EACPC,SAAS,EACT,GAAGC,OACJ,GAAGC,kBAAkB,YAAYP;IAClC,MAAMQ,OAAOC,OAAyB;IACtC,MAAMC,UAAU;WAAIT;KAAM;IAC1B,IAAIE,SAASO,QAAQ,OAAO;IAC5B,IAAIN,AAAW,QAAXA,SAAiBM,QAAQ,IAAI,CAAC;QAAE,KAAK;QAAkB,UAAUN;IAAQ;IAC7EO,cACEH,MACAI,KAAK,SAAS,CAAC;QAACV;QAAMQ,QAAQ,GAAG,CAAC,CAACG,OAASA,KAAK,GAAG;KAAE,GACtD;IAEF,MAAMC,SAAS;QACb,SAAS;QACT,SAAS;QACT,SAAS;QACT,OAAO;QACP,MAAM;IACR;IACA,OAAO,WAAP,GACE,IAAC;QACE,GAAGR,KAAK;QACT,KAAKE;QACL,WAAWO,QAAQ,iBAAiB,CAAC,eAAe,EAAEb,MAAM,EAAEG;kBAE7DK,QAAQ,GAAG,CAAC,CAACG,MAAMG,QAAAA,WAAAA,GAClB,KAAC;gBAEC,mBAAiBH,KAAK,GAAG;gBACzB,WAAU;gBACV,gBAAcA,AAAa,qBAAbA,KAAK,GAAG,IAAyBI;gBAC/C,aAAWf,AAAS,YAATA,QAAqBA,AAAS,gBAATA,QAAwBc,QAAQ,IAAK,UAAU;gBAC/E,OACE;oBACE,yBACEH,KAAK,KAAK,IAAIA,KAAK,KAAK,IAAIC,SACxB,CAAC,iBAAiB,EAAEA,MAAM,CAACD,KAAK,KAAK,CAAwB,CAAC,CAAC,CAAC,GAC/DA,KAAK,KAAK,IACX;gBACR;;kCAGF,IAAC;wBAAI,WAAU;wBAAqB,eAAY;kCAC7CA,KAAK,GAAG;;kCAEX,KAAC;wBAAI,WAAU;;4BACE,QAAdA,KAAK,KAAK,IAAY,WAAR,GAAQ,IAAC;gCAAI,WAAU;0CAAwBA,KAAK,KAAK;;4BACvEA,KAAK,QAAQ;;;;eApBXA,KAAK,GAAG;;AA0BvB"}
@@ -5,6 +5,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
5
5
  import { Check } from "lucide-react";
6
6
  import { useEffect, useLayoutEffect, useRef, useState } from "react";
7
7
  import { useLeafConfig } from "../config-provider/context.js";
8
+ import { ScrollbarControl } from "../scrollbar/scrollbar.js";
8
9
  import { padTime } from "../shared/time.js";
9
10
  const useBrowserLayoutEffect = "u" < typeof window ? useEffect : useLayoutEffect;
10
11
  function keepTimeOptionVisible(column, row) {
@@ -66,11 +67,16 @@ function TimeColumn({ label, choices, selected, change, labels, disabled }) {
66
67
  "aria-hidden": "true",
67
68
  children: label
68
69
  }),
69
- /*#__PURE__*/ jsxs("div", {
70
+ /*#__PURE__*/ jsxs(ScrollbarControl, {
70
71
  ref: ref,
71
- className: "leaf-time-picker__column",
72
+ viewportClassName: "leaf-time-picker__column",
73
+ contentClassName: "leaf-time-picker__options",
72
74
  role: "listbox",
73
75
  "aria-label": label,
76
+ maxHeight: 210,
77
+ orientation: "vertical",
78
+ tabIndex: -1,
79
+ scrollbarTabIndex: -1,
74
80
  children: [
75
81
  /*#__PURE__*/ jsx("div", {
76
82
  className: "leaf-time-picker__selection",
@@ -1 +1 @@
1
- {"version":3,"file":"timepicker/time-panel.js","sources":["../../../../../src/timepicker/time-panel.tsx"],"sourcesContent":["import { Check } from 'lucide-react';\nimport {\n type CSSProperties,\n type KeyboardEvent,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useLeafConfig } from '../config-provider/context';\nimport { padTime, type TimeParts } from '../shared/time';\n\ninterface TimePanelProps {\n value: TimeParts;\n onChange: (value: TimeParts) => void;\n showSeconds?: boolean;\n use12Hours?: boolean;\n minuteStep?: number;\n secondStep?: number;\n autoFocus?: boolean;\n disabledTime?: (parts: TimeParts) => boolean;\n}\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ninterface TimeColumnProps {\n label: string;\n choices: number[];\n selected: number;\n change: (next: number) => void;\n labels?: string[];\n disabled?: (choice: number) => boolean;\n}\nfunction keepTimeOptionVisible(column: HTMLElement, row: HTMLElement) {\n const top = row.offsetTop;\n const bottom = top + row.offsetHeight;\n if (top < column.scrollTop) column.scrollTop = top;\n else if (bottom > column.scrollTop + column.clientHeight)\n column.scrollTop = bottom - column.clientHeight;\n}\n\nfunction TimeColumn({ label, choices, selected, change, labels, disabled }: TimeColumnProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [selection, setSelection] = useState<CSSProperties>();\n useBrowserLayoutEffect(() => {\n const column = ref.current;\n if (!column) return;\n const row = column.querySelector<HTMLButtonElement>('[aria-selected=\"true\"]:not(:disabled)');\n const update = () => {\n setSelection(\n row\n ? ({\n '--leaf-time-selection-y': `${row.offsetTop}px`,\n '--leaf-time-selection-height': `${row.offsetHeight}px`,\n } as CSSProperties)\n : undefined,\n );\n // Scrolling a row into every ancestor moves the whole range popup and can\n // hide its endpoint labels when both time panels are present.\n if (row) keepTimeOptionVisible(column, row);\n };\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(update);\n observer.observe(column);\n if (row) observer.observe(row);\n return () => observer.disconnect();\n }, [selected, choices, disabled]);\n const key = (event: KeyboardEvent<HTMLButtonElement>, current: number) => {\n const available = choices.filter((choice) => !disabled?.(choice));\n if (!available.length) return;\n const index = available.indexOf(current);\n let next = index;\n if (event.key === 'ArrowDown') next = (index + 1) % available.length;\n else if (event.key === 'ArrowUp') next = (index - 1 + available.length) % available.length;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = available.length - 1;\n else return;\n event.preventDefault();\n change(available[next] ?? current);\n const node =\n event.currentTarget.parentElement?.querySelectorAll<HTMLButtonElement>(\n 'button:not(:disabled)',\n )[next];\n node?.focus({ preventScroll: true });\n if (node && ref.current) keepTimeOptionVisible(ref.current, node);\n };\n return (\n <div className=\"leaf-time-picker__column-wrap\">\n <div className=\"leaf-time-picker__column-label\" aria-hidden=\"true\">\n {label}\n </div>\n <div ref={ref} className=\"leaf-time-picker__column\" role=\"listbox\" aria-label={label}>\n <div\n className=\"leaf-time-picker__selection\"\n data-ready={Boolean(selection)}\n aria-hidden=\"true\"\n style={selection}\n />\n {choices.map((option) => (\n <button\n type=\"button\"\n key={option}\n role=\"option\"\n disabled={disabled?.(option)}\n tabIndex={\n option ===\n (disabled?.(selected) ? choices.find((choice) => !disabled?.(choice)) : selected)\n ? 0\n : -1\n }\n aria-selected={option === selected}\n className=\"leaf-floating__option\"\n onClick={() => change(option)}\n onKeyDown={(event) => key(event, option)}\n >\n <span>{labels?.[option] ?? padTime(option)}</span>\n <Check\n size={14}\n aria-hidden=\"true\"\n className=\"leaf-time-picker__check\"\n style={{ opacity: option === selected ? 1 : 0 }}\n />\n </button>\n ))}\n </div>\n </div>\n );\n}\nexport function TimePanel({\n value,\n onChange,\n showSeconds,\n use12Hours,\n minuteStep = 5,\n secondStep = 1,\n autoFocus,\n disabledTime,\n}: TimePanelProps) {\n const { messages } = useLeafConfig();\n const ref = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (autoFocus)\n ref.current\n ?.querySelector<HTMLButtonElement>('[aria-selected=\"true\"]')\n ?.focus({ preventScroll: true });\n }, [autoFocus]);\n const options = (step: number, selected: number) => {\n const safe = Number.isFinite(step) ? Math.max(1, Math.min(60, Math.floor(step))) : 1;\n return [\n ...new Set([...Array.from({ length: Math.ceil(60 / safe) }, (_, i) => i * safe), selected]),\n ].sort((a, b) => a - b);\n };\n const column = (\n label: string,\n choices: number[],\n selected: number,\n change: (next: number) => void,\n labels?: string[],\n disabled?: (choice: number) => boolean,\n ) => {\n return (\n <TimeColumn\n key={label}\n label={label}\n choices={choices}\n selected={selected}\n change={change}\n labels={labels}\n disabled={disabled}\n />\n );\n };\n const hours = use12Hours\n ? Array.from({ length: 12 }, (_, i) => i + 1)\n : Array.from({ length: 24 }, (_, i) => i);\n return (\n <div ref={ref} className=\"leaf-time-picker__columns\">\n {column(\n messages.timePicker.hours,\n hours,\n use12Hours ? value.hour % 12 || 12 : value.hour,\n (hour) =>\n onChange({\n ...value,\n hour: use12Hours ? (hour % 12) + (value.hour < 12 ? 0 : 12) : hour,\n }),\n undefined,\n (hour) =>\n !!disabledTime?.({\n ...value,\n hour: use12Hours ? (hour % 12) + (value.hour < 12 ? 0 : 12) : hour,\n }),\n )}\n {column(\n messages.timePicker.minutes,\n options(minuteStep, value.minute),\n value.minute,\n (minute) => onChange({ ...value, minute }),\n undefined,\n (minute) => !!disabledTime?.({ ...value, minute }),\n )}\n {showSeconds &&\n column(\n messages.timePicker.seconds,\n options(secondStep, value.second),\n value.second,\n (second) => onChange({ ...value, second }),\n undefined,\n (second) => !!disabledTime?.({ ...value, second }),\n )}\n {use12Hours &&\n column(\n messages.timePicker.period,\n [0, 1],\n value.hour < 12 ? 0 : 1,\n (period) => onChange({ ...value, hour: (value.hour % 12) + period * 12 }),\n [messages.timePicker.am, messages.timePicker.pm],\n (period) => !!disabledTime?.({ ...value, hour: (value.hour % 12) + period * 12 }),\n )}\n </div>\n );\n}\n"],"names":["useBrowserLayoutEffect","window","useEffect","useLayoutEffect","keepTimeOptionVisible","column","row","top","bottom","TimeColumn","label","choices","selected","change","labels","disabled","ref","useRef","selection","setSelection","useState","update","undefined","ResizeObserver","observer","key","event","current","available","choice","index","next","node","Boolean","option","padTime","Check","TimePanel","value","onChange","showSeconds","use12Hours","minuteStep","secondStep","autoFocus","disabledTime","messages","useLeafConfig","options","step","safe","Number","Math","Set","Array","_","i","a","b","hours","hour","minute","second","period"],"mappings":"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"}
1
+ {"version":3,"file":"timepicker/time-panel.js","sources":["../../../../../src/timepicker/time-panel.tsx"],"sourcesContent":["import { Check } from 'lucide-react';\nimport {\n type CSSProperties,\n type KeyboardEvent,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { useLeafConfig } from '../config-provider/context';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { padTime, type TimeParts } from '../shared/time';\n\ninterface TimePanelProps {\n value: TimeParts;\n onChange: (value: TimeParts) => void;\n showSeconds?: boolean;\n use12Hours?: boolean;\n minuteStep?: number;\n secondStep?: number;\n autoFocus?: boolean;\n disabledTime?: (parts: TimeParts) => boolean;\n}\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ninterface TimeColumnProps {\n label: string;\n choices: number[];\n selected: number;\n change: (next: number) => void;\n labels?: string[];\n disabled?: (choice: number) => boolean;\n}\nfunction keepTimeOptionVisible(column: HTMLElement, row: HTMLElement) {\n const top = row.offsetTop;\n const bottom = top + row.offsetHeight;\n if (top < column.scrollTop) column.scrollTop = top;\n else if (bottom > column.scrollTop + column.clientHeight)\n column.scrollTop = bottom - column.clientHeight;\n}\n\nfunction TimeColumn({ label, choices, selected, change, labels, disabled }: TimeColumnProps) {\n const ref = useRef<HTMLDivElement>(null);\n const [selection, setSelection] = useState<CSSProperties>();\n useBrowserLayoutEffect(() => {\n const column = ref.current;\n if (!column) return;\n const row = column.querySelector<HTMLButtonElement>('[aria-selected=\"true\"]:not(:disabled)');\n const update = () => {\n setSelection(\n row\n ? ({\n '--leaf-time-selection-y': `${row.offsetTop}px`,\n '--leaf-time-selection-height': `${row.offsetHeight}px`,\n } as CSSProperties)\n : undefined,\n );\n // Scrolling a row into every ancestor moves the whole range popup and can\n // hide its endpoint labels when both time panels are present.\n if (row) keepTimeOptionVisible(column, row);\n };\n update();\n if (typeof ResizeObserver === 'undefined') return;\n const observer = new ResizeObserver(update);\n observer.observe(column);\n if (row) observer.observe(row);\n return () => observer.disconnect();\n }, [selected, choices, disabled]);\n const key = (event: KeyboardEvent<HTMLButtonElement>, current: number) => {\n const available = choices.filter((choice) => !disabled?.(choice));\n if (!available.length) return;\n const index = available.indexOf(current);\n let next = index;\n if (event.key === 'ArrowDown') next = (index + 1) % available.length;\n else if (event.key === 'ArrowUp') next = (index - 1 + available.length) % available.length;\n else if (event.key === 'Home') next = 0;\n else if (event.key === 'End') next = available.length - 1;\n else return;\n event.preventDefault();\n change(available[next] ?? current);\n const node =\n event.currentTarget.parentElement?.querySelectorAll<HTMLButtonElement>(\n 'button:not(:disabled)',\n )[next];\n node?.focus({ preventScroll: true });\n if (node && ref.current) keepTimeOptionVisible(ref.current, node);\n };\n return (\n <div className=\"leaf-time-picker__column-wrap\">\n <div className=\"leaf-time-picker__column-label\" aria-hidden=\"true\">\n {label}\n </div>\n <ScrollbarControl\n ref={ref}\n viewportClassName=\"leaf-time-picker__column\"\n contentClassName=\"leaf-time-picker__options\"\n role=\"listbox\"\n aria-label={label}\n maxHeight={210}\n orientation=\"vertical\"\n tabIndex={-1}\n scrollbarTabIndex={-1}\n >\n <div\n className=\"leaf-time-picker__selection\"\n data-ready={Boolean(selection)}\n aria-hidden=\"true\"\n style={selection}\n />\n {choices.map((option) => (\n <button\n type=\"button\"\n key={option}\n role=\"option\"\n disabled={disabled?.(option)}\n tabIndex={\n option ===\n (disabled?.(selected) ? choices.find((choice) => !disabled?.(choice)) : selected)\n ? 0\n : -1\n }\n aria-selected={option === selected}\n className=\"leaf-floating__option\"\n onClick={() => change(option)}\n onKeyDown={(event) => key(event, option)}\n >\n <span>{labels?.[option] ?? padTime(option)}</span>\n <Check\n size={14}\n aria-hidden=\"true\"\n className=\"leaf-time-picker__check\"\n style={{ opacity: option === selected ? 1 : 0 }}\n />\n </button>\n ))}\n </ScrollbarControl>\n </div>\n );\n}\nexport function TimePanel({\n value,\n onChange,\n showSeconds,\n use12Hours,\n minuteStep = 5,\n secondStep = 1,\n autoFocus,\n disabledTime,\n}: TimePanelProps) {\n const { messages } = useLeafConfig();\n const ref = useRef<HTMLDivElement>(null);\n useEffect(() => {\n if (autoFocus)\n ref.current\n ?.querySelector<HTMLButtonElement>('[aria-selected=\"true\"]')\n ?.focus({ preventScroll: true });\n }, [autoFocus]);\n const options = (step: number, selected: number) => {\n const safe = Number.isFinite(step) ? Math.max(1, Math.min(60, Math.floor(step))) : 1;\n return [\n ...new Set([...Array.from({ length: Math.ceil(60 / safe) }, (_, i) => i * safe), selected]),\n ].sort((a, b) => a - b);\n };\n const column = (\n label: string,\n choices: number[],\n selected: number,\n change: (next: number) => void,\n labels?: string[],\n disabled?: (choice: number) => boolean,\n ) => {\n return (\n <TimeColumn\n key={label}\n label={label}\n choices={choices}\n selected={selected}\n change={change}\n labels={labels}\n disabled={disabled}\n />\n );\n };\n const hours = use12Hours\n ? Array.from({ length: 12 }, (_, i) => i + 1)\n : Array.from({ length: 24 }, (_, i) => i);\n return (\n <div ref={ref} className=\"leaf-time-picker__columns\">\n {column(\n messages.timePicker.hours,\n hours,\n use12Hours ? value.hour % 12 || 12 : value.hour,\n (hour) =>\n onChange({\n ...value,\n hour: use12Hours ? (hour % 12) + (value.hour < 12 ? 0 : 12) : hour,\n }),\n undefined,\n (hour) =>\n !!disabledTime?.({\n ...value,\n hour: use12Hours ? (hour % 12) + (value.hour < 12 ? 0 : 12) : hour,\n }),\n )}\n {column(\n messages.timePicker.minutes,\n options(minuteStep, value.minute),\n value.minute,\n (minute) => onChange({ ...value, minute }),\n undefined,\n (minute) => !!disabledTime?.({ ...value, minute }),\n )}\n {showSeconds &&\n column(\n messages.timePicker.seconds,\n options(secondStep, value.second),\n value.second,\n (second) => onChange({ ...value, second }),\n undefined,\n (second) => !!disabledTime?.({ ...value, second }),\n )}\n {use12Hours &&\n column(\n messages.timePicker.period,\n [0, 1],\n value.hour < 12 ? 0 : 1,\n (period) => onChange({ ...value, hour: (value.hour % 12) + period * 12 }),\n [messages.timePicker.am, messages.timePicker.pm],\n (period) => !!disabledTime?.({ ...value, hour: (value.hour % 12) + period * 12 }),\n )}\n </div>\n );\n}\n"],"names":["useBrowserLayoutEffect","window","useEffect","useLayoutEffect","keepTimeOptionVisible","column","row","top","bottom","TimeColumn","label","choices","selected","change","labels","disabled","ref","useRef","selection","setSelection","useState","update","undefined","ResizeObserver","observer","key","event","current","available","choice","index","next","node","ScrollbarControl","Boolean","option","padTime","Check","TimePanel","value","onChange","showSeconds","use12Hours","minuteStep","secondStep","autoFocus","disabledTime","messages","useLeafConfig","options","step","safe","Number","Math","Set","Array","_","i","a","b","hours","hour","minute","second","period"],"mappings":";;;;;;;;;AAuBA,MAAMA,yBAAyB,AAAkB,MAAlB,OAAOC,SAAyBC,YAAYC;AAU3E,SAASC,sBAAsBC,MAAmB,EAAEC,GAAgB;IAClE,MAAMC,MAAMD,IAAI,SAAS;IACzB,MAAME,SAASD,MAAMD,IAAI,YAAY;IACrC,IAAIC,MAAMF,OAAO,SAAS,EAAEA,OAAO,SAAS,GAAGE;SAC1C,IAAIC,SAASH,OAAO,SAAS,GAAGA,OAAO,YAAY,EACtDA,OAAO,SAAS,GAAGG,SAASH,OAAO,YAAY;AACnD;AAEA,SAASI,WAAW,EAAEC,KAAK,EAAEC,OAAO,EAAEC,QAAQ,EAAEC,MAAM,EAAEC,MAAM,EAAEC,QAAQ,EAAmB;IACzF,MAAMC,MAAMC,OAAuB;IACnC,MAAM,CAACC,WAAWC,aAAa,GAAGC;IAClCpB,uBAAuB;QACrB,MAAMK,SAASW,IAAI,OAAO;QAC1B,IAAI,CAACX,QAAQ;QACb,MAAMC,MAAMD,OAAO,aAAa,CAAoB;QACpD,MAAMgB,SAAS;YACbF,aACEb,MACK;gBACC,2BAA2B,GAAGA,IAAI,SAAS,CAAC,EAAE,CAAC;gBAC/C,gCAAgC,GAAGA,IAAI,YAAY,CAAC,EAAE,CAAC;YACzD,IACAgB;YAIN,IAAIhB,KAAKF,sBAAsBC,QAAQC;QACzC;QACAe;QACA,IAAI,AAA0B,MAA1B,OAAOE,gBAAgC;QAC3C,MAAMC,WAAW,IAAID,eAAeF;QACpCG,SAAS,OAAO,CAACnB;QACjB,IAAIC,KAAKkB,SAAS,OAAO,CAAClB;QAC1B,OAAO,IAAMkB,SAAS,UAAU;IAClC,GAAG;QAACZ;QAAUD;QAASI;KAAS;IAChC,MAAMU,MAAM,CAACC,OAAyCC;QACpD,MAAMC,YAAYjB,QAAQ,MAAM,CAAC,CAACkB,SAAW,CAACd,WAAWc;QACzD,IAAI,CAACD,UAAU,MAAM,EAAE;QACvB,MAAME,QAAQF,UAAU,OAAO,CAACD;QAChC,IAAII,OAAOD;QACX,IAAIJ,AAAc,gBAAdA,MAAM,GAAG,EAAkBK,OAAQD,AAAAA,CAAAA,QAAQ,KAAKF,UAAU,MAAM;aAC/D,IAAIF,AAAc,cAAdA,MAAM,GAAG,EAAgBK,OAAQD,AAAAA,CAAAA,QAAQ,IAAIF,UAAU,MAAK,IAAKA,UAAU,MAAM;aACrF,IAAIF,AAAc,WAAdA,MAAM,GAAG,EAAaK,OAAO;;YACjC,IAAIL,AAAc,UAAdA,MAAM,GAAG,EACb;YADyBK,OAAOH,UAAU,MAAM,GAAG;;QAExDF,MAAM,cAAc;QACpBb,OAAOe,SAAS,CAACG,KAAK,IAAIJ;QAC1B,MAAMK,OACJN,MAAM,aAAa,CAAC,aAAa,EAAE,iBACjC,wBACD,CAACK,KAAK;QACTC,MAAM,MAAM;YAAE,eAAe;QAAK;QAClC,IAAIA,QAAQhB,IAAI,OAAO,EAAEZ,sBAAsBY,IAAI,OAAO,EAAEgB;IAC9D;IACA,OAAO,WAAP,GACE,KAAC;QAAI,WAAU;;0BACb,IAAC;gBAAI,WAAU;gBAAiC,eAAY;0BACzDtB;;0BAEH,KAACuB,kBAAgBA;gBACf,KAAKjB;gBACL,mBAAkB;gBAClB,kBAAiB;gBACjB,MAAK;gBACL,cAAYN;gBACZ,WAAW;gBACX,aAAY;gBACZ,UAAU;gBACV,mBAAmB;;kCAEnB,IAAC;wBACC,WAAU;wBACV,cAAYwB,QAAQhB;wBACpB,eAAY;wBACZ,OAAOA;;oBAERP,QAAQ,GAAG,CAAC,CAACwB,SAAAA,WAAAA,GACZ,KAAC;4BACC,MAAK;4BAEL,MAAK;4BACL,UAAUpB,WAAWoB;4BACrB,UACEA,WACCpB,CAAAA,WAAWH,YAAYD,QAAQ,IAAI,CAAC,CAACkB,SAAW,CAACd,WAAWc,WAAWjB,QAAO,IAC3E,IACA;4BAEN,iBAAeuB,WAAWvB;4BAC1B,WAAU;4BACV,SAAS,IAAMC,OAAOsB;4BACtB,WAAW,CAACT,QAAUD,IAAIC,OAAOS;;8CAEjC,IAAC;8CAAMrB,QAAQ,CAACqB,OAAO,IAAIC,QAAQD;;8CACnC,IAACE,OAAKA;oCACJ,MAAM;oCACN,eAAY;oCACZ,WAAU;oCACV,OAAO;wCAAE,SAASF,WAAWvB,WAAW,IAAI;oCAAE;;;2BAnB3CuB;;;;;AA0BjB;AACO,SAASG,UAAU,EACxBC,KAAK,EACLC,QAAQ,EACRC,WAAW,EACXC,UAAU,EACVC,aAAa,CAAC,EACdC,aAAa,CAAC,EACdC,SAAS,EACTC,YAAY,EACG;IACf,MAAM,EAAEC,QAAQ,EAAE,GAAGC;IACrB,MAAMhC,MAAMC,OAAuB;IACnCf,UAAU;QACR,IAAI2C,WACF7B,IAAI,OAAO,EACP,cAAiC,2BACjC,MAAM;YAAE,eAAe;QAAK;IACpC,GAAG;QAAC6B;KAAU;IACd,MAAMI,UAAU,CAACC,MAActC;QAC7B,MAAMuC,OAAOC,OAAO,QAAQ,CAACF,QAAQG,KAAK,GAAG,CAAC,GAAGA,KAAK,GAAG,CAAC,IAAIA,KAAK,KAAK,CAACH,UAAU;QACnF,OAAO;eACF,IAAII,IAAI;mBAAIC,MAAM,IAAI,CAAC;oBAAE,QAAQF,KAAK,IAAI,CAAC,KAAKF;gBAAM,GAAG,CAACK,GAAGC,IAAMA,IAAIN;gBAAOvC;aAAS;SAC3F,CAAC,IAAI,CAAC,CAAC8C,GAAGC,IAAMD,IAAIC;IACvB;IACA,MAAMtD,SAAS,CACbK,OACAC,SACAC,UACAC,QACAC,QACAC,WAEO,WAAP,GACE,IAACN,YAAUA;YAET,OAAOC;YACP,SAASC;YACT,UAAUC;YACV,QAAQC;YACR,QAAQC;YACR,UAAUC;WANLL;IAUX,MAAMkD,QAAQlB,aACVa,MAAM,IAAI,CAAC;QAAE,QAAQ;IAAG,GAAG,CAACC,GAAGC,IAAMA,IAAI,KACzCF,MAAM,IAAI,CAAC;QAAE,QAAQ;IAAG,GAAG,CAACC,GAAGC,IAAMA;IACzC,OAAO,WAAP,GACE,KAAC;QAAI,KAAKzC;QAAK,WAAU;;YACtBX,OACC0C,SAAS,UAAU,CAAC,KAAK,EACzBa,OACAlB,aAAaH,MAAM,IAAI,GAAG,MAAM,KAAKA,MAAM,IAAI,EAC/C,CAACsB,OACCrB,SAAS;oBACP,GAAGD,KAAK;oBACR,MAAMG,aAAcmB,OAAO,KAAOtB,CAAAA,MAAM,IAAI,GAAG,KAAK,IAAI,EAAC,IAAKsB;gBAChE,IACFvC,QACA,CAACuC,OACC,CAAC,CAACf,eAAe;oBACf,GAAGP,KAAK;oBACR,MAAMG,aAAcmB,OAAO,KAAOtB,CAAAA,MAAM,IAAI,GAAG,KAAK,IAAI,EAAC,IAAKsB;gBAChE;YAEHxD,OACC0C,SAAS,UAAU,CAAC,OAAO,EAC3BE,QAAQN,YAAYJ,MAAM,MAAM,GAChCA,MAAM,MAAM,EACZ,CAACuB,SAAWtB,SAAS;oBAAE,GAAGD,KAAK;oBAAEuB;gBAAO,IACxCxC,QACA,CAACwC,SAAW,CAAC,CAAChB,eAAe;oBAAE,GAAGP,KAAK;oBAAEuB;gBAAO;YAEjDrB,eACCpC,OACE0C,SAAS,UAAU,CAAC,OAAO,EAC3BE,QAAQL,YAAYL,MAAM,MAAM,GAChCA,MAAM,MAAM,EACZ,CAACwB,SAAWvB,SAAS;oBAAE,GAAGD,KAAK;oBAAEwB;gBAAO,IACxCzC,QACA,CAACyC,SAAW,CAAC,CAACjB,eAAe;oBAAE,GAAGP,KAAK;oBAAEwB;gBAAO;YAEnDrB,cACCrC,OACE0C,SAAS,UAAU,CAAC,MAAM,EAC1B;gBAAC;gBAAG;aAAE,EACNR,MAAM,IAAI,GAAG,KAAK,IAAI,GACtB,CAACyB,SAAWxB,SAAS;oBAAE,GAAGD,KAAK;oBAAE,MAAOA,MAAM,IAAI,GAAG,KAAMyB,AAAS,KAATA;gBAAY,IACvE;gBAACjB,SAAS,UAAU,CAAC,EAAE;gBAAEA,SAAS,UAAU,CAAC,EAAE;aAAC,EAChD,CAACiB,SAAW,CAAC,CAAClB,eAAe;oBAAE,GAAGP,KAAK;oBAAE,MAAOA,MAAM,IAAI,GAAG,KAAMyB,AAAS,KAATA;gBAAY;;;AAIzF"}
@@ -12,6 +12,7 @@ import { estimateControlHeight } from "../density.js";
12
12
  import { FieldScope, useFormField } from "../form/form.js";
13
13
  import { InputControl } from "../input/input.js";
14
14
  import { ResultControl } from "../result/result.js";
15
+ import { ScrollbarControl } from "../scrollbar/scrollbar.js";
15
16
  import { classes } from "../shared/classes.js";
16
17
  import { FormValue, useFieldValue } from "../shared/field.js";
17
18
  import { useListMotion } from "../shared/motion.js";
@@ -141,11 +142,10 @@ function Transfer(rawProps) {
141
142
  icon: null,
142
143
  title: t('transfer.noItems')
143
144
  })
144
- }) : /*#__PURE__*/ jsx("div", {
145
- className: "leaf-transfer__list",
146
- style: {
147
- height
148
- },
145
+ }) : /*#__PURE__*/ jsx(ScrollbarControl, {
146
+ viewportClassName: "leaf-transfer__list",
147
+ height: height,
148
+ role: "presentation",
149
149
  children: list.length ? list.map((item)=>/*#__PURE__*/ jsx("div", {
150
150
  children: row(item)
151
151
  }, item.key)) : /*#__PURE__*/ jsx(ResultControl, {
@@ -1 +1 @@
1
- {"version":3,"file":"transfer/transfer.js","sources":["../../../../../src/transfer/transfer.tsx"],"sourcesContent":["import { ArrowLeft, ArrowRight, Search } from 'lucide-react';\nimport { type HTMLAttributes, type ReactNode, useId, useRef, useState } from 'react';\nimport { ButtonControl } from '../button/button';\nimport { CheckboxControl as Checkbox } from '../checkbox/checkbox';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { estimateControlHeight } from '../density';\nimport { FieldScope, useFormField } from '../form/form';\nimport { InputControl } from '../input/input';\nimport { ResultControl as Result } from '../result/result';\nimport { classes } from '../shared/classes';\nimport { FormValue, useFieldValue } from '../shared/field';\nimport { useListMotion } from '../shared/motion';\nimport { useText } from '../shared/use-text';\nimport { VirtualListControl as VirtualList } from '../virtuallist/virtuallist';\nexport interface TransferItem {\n key: string;\n label: ReactNode;\n description?: string;\n disabled?: boolean;\n searchLabel?: string;\n}\nexport interface TransferChangeInfo {\n direction: 'left' | 'right';\n movedKeys: string[];\n}\nexport interface TransferProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n items: readonly TransferItem[];\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (keys: string[], info: TransferChangeInfo) => void;\n selectedKeys?: readonly string[];\n onSelectionChange?: (keys: string[]) => void;\n titles?: readonly [ReactNode, ReactNode];\n searchable?: boolean;\n filterOption?: (query: string, item: TransferItem) => boolean;\n renderItem?: (item: TransferItem) => ReactNode;\n disabled?: boolean;\n height?: number;\n virtual?: boolean;\n name?: string;\n form?: string;\n required?: boolean;\n oneWay?: boolean;\n}\nexport function Transfer(rawProps: TransferProps) {\n const {\n items,\n value,\n defaultValue = [],\n onChange,\n selectedKeys,\n onSelectionChange,\n titles,\n searchable = true,\n filterOption,\n renderItem,\n disabled: disabledProp,\n height = 180,\n virtual = false,\n name,\n form,\n required,\n oneWay = false,\n className,\n ...props\n } = useComponentProps('Transfer', rawProps);\n const { theme, density } = useLeafConfig();\n const field = useFormField();\n const disabled = disabledProp || field?.disabled;\n const t = useText();\n const id = useId();\n const trigger = useRef<HTMLButtonElement>(null);\n const root = useRef<HTMLDivElement>(null);\n const [current, setCurrent] = useFieldValue(value, defaultValue, trigger, form);\n const [internal, setInternal] = useState<readonly string[]>([]);\n const selected = selectedKeys ?? internal;\n const [queries, setQueries] = useState(['', '']);\n useListMotion(\n root,\n JSON.stringify([current, queries, items.map((item) => item.key)]),\n virtual ? '[data-no-transfer-motion]' : '.leaf-transfer__item[data-motion-key]',\n );\n const select = (keys: string[]) => {\n if (selectedKeys === undefined) setInternal(keys);\n onSelectionChange?.(keys);\n };\n const move = (direction: 'left' | 'right') => {\n const moved = items\n .filter(\n (item) =>\n !item.disabled &&\n selected.includes(item.key) &&\n current.includes(item.key) === (direction === 'left'),\n )\n .map((item) => item.key);\n if (!moved.length || disabled) return;\n const next =\n direction === 'right'\n ? [...current, ...moved]\n : current.filter((key) => !moved.includes(key));\n setCurrent(next);\n select(selected.filter((key) => !moved.includes(key)));\n onChange?.([...next], { direction, movedKeys: moved });\n };\n const panel = (side: 0 | 1) => {\n const query = queries[side] ?? '';\n const list = items.filter(\n (item) =>\n current.includes(item.key) === (side === 1) &&\n (filterOption\n ? filterOption(query, item)\n : `${item.searchLabel ?? (typeof item.label === 'string' ? item.label : item.key)} ${item.description ?? ''}`\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase())),\n );\n const enabled = list.filter((item) => !item.disabled);\n const checked = enabled.filter((item) => selected.includes(item.key));\n const row = (item: TransferItem) => (\n <div\n className=\"leaf-transfer__item\"\n data-motion-key={item.key}\n data-selected={selected.includes(item.key) ? '' : undefined}\n >\n <Checkbox\n disabled={disabled || item.disabled}\n checked={selected.includes(item.key)}\n onChange={(event) =>\n select(\n event.target.checked\n ? [...new Set([...selected, item.key])]\n : selected.filter((key) => key !== item.key),\n )\n }\n >\n <span>\n {renderItem?.(item) ?? item.label}\n {item.description && <small>{item.description}</small>}\n </span>\n </Checkbox>\n </div>\n );\n return (\n <section className=\"leaf-transfer__panel\" aria-labelledby={`${id}-${side}`}>\n <header className=\"leaf-transfer__header\">\n <Checkbox\n aria-label={t('transfer.selectAllVisibleItems')}\n disabled={disabled || !enabled.length}\n checked={enabled.length > 0 && checked.length === enabled.length}\n indeterminate={checked.length > 0 && checked.length < enabled.length}\n onChange={(event) =>\n select(\n event.target.checked\n ? [...new Set([...selected, ...enabled.map((item) => item.key)])]\n : selected.filter((key) => !enabled.some((item) => item.key === key)),\n )\n }\n />\n <span id={`${id}-${side}`}>\n {titles?.[side] ?? (side === 0 ? t('transfer.available') : t('transfer.selected'))}\n </span>\n <small>\n {checked.length ? `${checked.length} / ` : ''}\n {list.length}\n </small>\n </header>\n {searchable && (\n <div className=\"leaf-transfer__search\">\n <InputControl\n size=\"sm\"\n allowClear\n prefix={<Search size={14} />}\n aria-label={\n side === 0 ? t('transfer.searchAvailableItems') : t('transfer.searchSelectedItems')\n }\n value={query}\n onChange={(event) =>\n setQueries((previous) =>\n previous.map((text, index) => (index === side ? event.target.value : text)),\n )\n }\n />\n </div>\n )}\n {virtual ? (\n <VirtualList\n items={list}\n itemKey={(item) => item.key}\n renderItem={row}\n height={height}\n estimateSize={(item) =>\n Math.max(estimateControlHeight(theme, density), item.description ? 42 : 0) + 6\n }\n emptyContent={<Result size=\"sm\" icon={null} title={t('transfer.noItems')} />}\n />\n ) : (\n <div className=\"leaf-transfer__list\" style={{ height }}>\n {list.length ? (\n list.map((item) => <div key={item.key}>{row(item)}</div>)\n ) : (\n <Result size=\"sm\" icon={null} title={t('transfer.noItems')} />\n )}\n </div>\n )}\n </section>\n );\n };\n return (\n <div\n {...props}\n ref={root}\n className={classes('leaf-transfer', className)}\n data-disabled={disabled ? '' : undefined}\n >\n <FieldScope>{panel(0)}</FieldScope>\n <div className=\"leaf-transfer__actions\">\n <ButtonControl\n ref={trigger}\n id={props.id ?? field?.id}\n size=\"sm\"\n startIcon={<ArrowRight size={16} />}\n aria-label={t('transfer.moveToSelected')}\n disabled={\n disabled ||\n !items.some(\n (item) =>\n !item.disabled && selected.includes(item.key) && !current.includes(item.key),\n )\n }\n onClick={() => move('right')}\n />\n {!oneWay && (\n <ButtonControl\n size=\"sm\"\n variant=\"outline\"\n startIcon={<ArrowLeft size={16} />}\n aria-label={t('transfer.moveToAvailable')}\n disabled={\n disabled ||\n !items.some(\n (item) =>\n !item.disabled && selected.includes(item.key) && current.includes(item.key),\n )\n }\n onClick={() => move('left')}\n />\n )}\n </div>\n <FieldScope>{panel(1)}</FieldScope>\n <FormValue\n name={name}\n form={form}\n value={current.length ? JSON.stringify(current) : ''}\n required={required ?? field?.required}\n disabled={disabled}\n triggerRef={trigger}\n />\n </div>\n );\n}\n"],"names":["Transfer","rawProps","items","value","defaultValue","onChange","selectedKeys","onSelectionChange","titles","searchable","filterOption","renderItem","disabledProp","height","virtual","name","form","required","oneWay","className","props","useComponentProps","theme","density","useLeafConfig","field","useFormField","disabled","t","useText","id","useId","trigger","useRef","root","current","setCurrent","useFieldValue","internal","setInternal","useState","selected","queries","setQueries","useListMotion","JSON","item","select","keys","undefined","move","direction","moved","next","key","panel","side","query","list","enabled","checked","row","Checkbox","event","Set","InputControl","Search","previous","text","index","VirtualList","Math","estimateControlHeight","Result","classes","FieldScope","ButtonControl","ArrowRight","ArrowLeft","FormValue"],"mappings":"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"}
1
+ {"version":3,"file":"transfer/transfer.js","sources":["../../../../../src/transfer/transfer.tsx"],"sourcesContent":["import { ArrowLeft, ArrowRight, Search } from 'lucide-react';\nimport { type HTMLAttributes, type ReactNode, useId, useRef, useState } from 'react';\nimport { ButtonControl } from '../button/button';\nimport { CheckboxControl as Checkbox } from '../checkbox/checkbox';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { estimateControlHeight } from '../density';\nimport { FieldScope, useFormField } from '../form/form';\nimport { InputControl } from '../input/input';\nimport { ResultControl as Result } from '../result/result';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { classes } from '../shared/classes';\nimport { FormValue, useFieldValue } from '../shared/field';\nimport { useListMotion } from '../shared/motion';\nimport { useText } from '../shared/use-text';\nimport { VirtualListControl as VirtualList } from '../virtuallist/virtuallist';\nexport interface TransferItem {\n key: string;\n label: ReactNode;\n description?: string;\n disabled?: boolean;\n searchLabel?: string;\n}\nexport interface TransferChangeInfo {\n direction: 'left' | 'right';\n movedKeys: string[];\n}\nexport interface TransferProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n items: readonly TransferItem[];\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (keys: string[], info: TransferChangeInfo) => void;\n selectedKeys?: readonly string[];\n onSelectionChange?: (keys: string[]) => void;\n titles?: readonly [ReactNode, ReactNode];\n searchable?: boolean;\n filterOption?: (query: string, item: TransferItem) => boolean;\n renderItem?: (item: TransferItem) => ReactNode;\n disabled?: boolean;\n height?: number;\n virtual?: boolean;\n name?: string;\n form?: string;\n required?: boolean;\n oneWay?: boolean;\n}\nexport function Transfer(rawProps: TransferProps) {\n const {\n items,\n value,\n defaultValue = [],\n onChange,\n selectedKeys,\n onSelectionChange,\n titles,\n searchable = true,\n filterOption,\n renderItem,\n disabled: disabledProp,\n height = 180,\n virtual = false,\n name,\n form,\n required,\n oneWay = false,\n className,\n ...props\n } = useComponentProps('Transfer', rawProps);\n const { theme, density } = useLeafConfig();\n const field = useFormField();\n const disabled = disabledProp || field?.disabled;\n const t = useText();\n const id = useId();\n const trigger = useRef<HTMLButtonElement>(null);\n const root = useRef<HTMLDivElement>(null);\n const [current, setCurrent] = useFieldValue(value, defaultValue, trigger, form);\n const [internal, setInternal] = useState<readonly string[]>([]);\n const selected = selectedKeys ?? internal;\n const [queries, setQueries] = useState(['', '']);\n useListMotion(\n root,\n JSON.stringify([current, queries, items.map((item) => item.key)]),\n virtual ? '[data-no-transfer-motion]' : '.leaf-transfer__item[data-motion-key]',\n );\n const select = (keys: string[]) => {\n if (selectedKeys === undefined) setInternal(keys);\n onSelectionChange?.(keys);\n };\n const move = (direction: 'left' | 'right') => {\n const moved = items\n .filter(\n (item) =>\n !item.disabled &&\n selected.includes(item.key) &&\n current.includes(item.key) === (direction === 'left'),\n )\n .map((item) => item.key);\n if (!moved.length || disabled) return;\n const next =\n direction === 'right'\n ? [...current, ...moved]\n : current.filter((key) => !moved.includes(key));\n setCurrent(next);\n select(selected.filter((key) => !moved.includes(key)));\n onChange?.([...next], { direction, movedKeys: moved });\n };\n const panel = (side: 0 | 1) => {\n const query = queries[side] ?? '';\n const list = items.filter(\n (item) =>\n current.includes(item.key) === (side === 1) &&\n (filterOption\n ? filterOption(query, item)\n : `${item.searchLabel ?? (typeof item.label === 'string' ? item.label : item.key)} ${item.description ?? ''}`\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase())),\n );\n const enabled = list.filter((item) => !item.disabled);\n const checked = enabled.filter((item) => selected.includes(item.key));\n const row = (item: TransferItem) => (\n <div\n className=\"leaf-transfer__item\"\n data-motion-key={item.key}\n data-selected={selected.includes(item.key) ? '' : undefined}\n >\n <Checkbox\n disabled={disabled || item.disabled}\n checked={selected.includes(item.key)}\n onChange={(event) =>\n select(\n event.target.checked\n ? [...new Set([...selected, item.key])]\n : selected.filter((key) => key !== item.key),\n )\n }\n >\n <span>\n {renderItem?.(item) ?? item.label}\n {item.description && <small>{item.description}</small>}\n </span>\n </Checkbox>\n </div>\n );\n return (\n <section className=\"leaf-transfer__panel\" aria-labelledby={`${id}-${side}`}>\n <header className=\"leaf-transfer__header\">\n <Checkbox\n aria-label={t('transfer.selectAllVisibleItems')}\n disabled={disabled || !enabled.length}\n checked={enabled.length > 0 && checked.length === enabled.length}\n indeterminate={checked.length > 0 && checked.length < enabled.length}\n onChange={(event) =>\n select(\n event.target.checked\n ? [...new Set([...selected, ...enabled.map((item) => item.key)])]\n : selected.filter((key) => !enabled.some((item) => item.key === key)),\n )\n }\n />\n <span id={`${id}-${side}`}>\n {titles?.[side] ?? (side === 0 ? t('transfer.available') : t('transfer.selected'))}\n </span>\n <small>\n {checked.length ? `${checked.length} / ` : ''}\n {list.length}\n </small>\n </header>\n {searchable && (\n <div className=\"leaf-transfer__search\">\n <InputControl\n size=\"sm\"\n allowClear\n prefix={<Search size={14} />}\n aria-label={\n side === 0 ? t('transfer.searchAvailableItems') : t('transfer.searchSelectedItems')\n }\n value={query}\n onChange={(event) =>\n setQueries((previous) =>\n previous.map((text, index) => (index === side ? event.target.value : text)),\n )\n }\n />\n </div>\n )}\n {virtual ? (\n <VirtualList\n items={list}\n itemKey={(item) => item.key}\n renderItem={row}\n height={height}\n estimateSize={(item) =>\n Math.max(estimateControlHeight(theme, density), item.description ? 42 : 0) + 6\n }\n emptyContent={<Result size=\"sm\" icon={null} title={t('transfer.noItems')} />}\n />\n ) : (\n <ScrollbarControl\n viewportClassName=\"leaf-transfer__list\"\n height={height}\n role=\"presentation\"\n >\n {list.length ? (\n list.map((item) => <div key={item.key}>{row(item)}</div>)\n ) : (\n <Result size=\"sm\" icon={null} title={t('transfer.noItems')} />\n )}\n </ScrollbarControl>\n )}\n </section>\n );\n };\n return (\n <div\n {...props}\n ref={root}\n className={classes('leaf-transfer', className)}\n data-disabled={disabled ? '' : undefined}\n >\n <FieldScope>{panel(0)}</FieldScope>\n <div className=\"leaf-transfer__actions\">\n <ButtonControl\n ref={trigger}\n id={props.id ?? field?.id}\n size=\"sm\"\n startIcon={<ArrowRight size={16} />}\n aria-label={t('transfer.moveToSelected')}\n disabled={\n disabled ||\n !items.some(\n (item) =>\n !item.disabled && selected.includes(item.key) && !current.includes(item.key),\n )\n }\n onClick={() => move('right')}\n />\n {!oneWay && (\n <ButtonControl\n size=\"sm\"\n variant=\"outline\"\n startIcon={<ArrowLeft size={16} />}\n aria-label={t('transfer.moveToAvailable')}\n disabled={\n disabled ||\n !items.some(\n (item) =>\n !item.disabled && selected.includes(item.key) && current.includes(item.key),\n )\n }\n onClick={() => move('left')}\n />\n )}\n </div>\n <FieldScope>{panel(1)}</FieldScope>\n <FormValue\n name={name}\n form={form}\n value={current.length ? JSON.stringify(current) : ''}\n required={required ?? field?.required}\n disabled={disabled}\n triggerRef={trigger}\n />\n </div>\n );\n}\n"],"names":["Transfer","rawProps","items","value","defaultValue","onChange","selectedKeys","onSelectionChange","titles","searchable","filterOption","renderItem","disabledProp","height","virtual","name","form","required","oneWay","className","props","useComponentProps","theme","density","useLeafConfig","field","useFormField","disabled","t","useText","id","useId","trigger","useRef","root","current","setCurrent","useFieldValue","internal","setInternal","useState","selected","queries","setQueries","useListMotion","JSON","item","select","keys","undefined","move","direction","moved","next","key","panel","side","query","list","enabled","checked","row","Checkbox","event","Set","InputControl","Search","previous","text","index","VirtualList","Math","estimateControlHeight","Result","ScrollbarControl","classes","FieldScope","ButtonControl","ArrowRight","ArrowLeft","FormValue"],"mappings":"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"}
@@ -10,6 +10,7 @@ import { useComponentProps } from "../config-provider/component-defaults.js";
10
10
  import { useLeafConfig } from "../config-provider/context.js";
11
11
  import { estimateControlHeight } from "../density.js";
12
12
  import { ResultControl } from "../result/result.js";
13
+ import { ScrollbarControl } from "../scrollbar/scrollbar.js";
13
14
  import { classes } from "../shared/classes.js";
14
15
  import { inertProps } from "../shared/inert.js";
15
16
  import { useFormattedText } from "../shared/use-formatted-text.js";
@@ -365,20 +366,26 @@ function TreeControl({ data: suppliedData, selectedKeys, defaultSelectedKeys = [
365
366
  const siblings = nodes.filter((node)=>!matches || matches.visible.has(node.key));
366
367
  return siblings.map((node, index)=>renderNode(node, level, index, siblings.length));
367
368
  };
368
- const content = /*#__PURE__*/ jsx("div", {
369
- ...props,
369
+ const content = /*#__PURE__*/ jsx(ScrollbarControl, {
370
370
  ref: root,
371
+ viewportProps: {
372
+ ...props,
373
+ 'aria-multiselectable': multiple || checkable || void 0,
374
+ 'aria-disabled': disabled || void 0
375
+ },
371
376
  style: {
372
377
  ...virtual ? {
373
- height,
374
- overflow: 'auto'
378
+ height
375
379
  } : {},
376
380
  ...props.style
377
381
  },
382
+ viewportStyle: {
383
+ position: 'relative'
384
+ },
378
385
  role: "tree",
379
386
  "aria-label": label ?? messages.tree.label,
380
- "aria-multiselectable": multiple || checkable || void 0,
381
- "aria-disabled": disabled || void 0,
387
+ tabIndex: -1,
388
+ scrollbarTabIndex: -1,
382
389
  className: classes('leaf-tree', showLine && 'leaf-tree--lines', className),
383
390
  children: visible.length ? virtual ? /*#__PURE__*/ jsx("div", {
384
391
  style: {
@@ -1 +1 @@
1
- {"version":3,"file":"tree/tree.js","sources":["../../../../../src/tree/tree.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { ChevronRight, File, Folder, FolderOpen, LoaderCircle } from 'lucide-react';\nimport {\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { CheckboxControl as Checkbox } from '../checkbox/checkbox';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { estimateControlHeight } from '../density';\nimport { ResultControl as Result } from '../result/result';\nimport { classes } from '../shared/classes';\nimport { inertProps } from '../shared/inert';\nimport { useFormattedText } from '../shared/use-formatted-text';\nimport { TreeDragRow, TreeDragScope } from './drag';\nimport { treeChecks, treeMatches, treeModel } from './model';\n\nexport interface TreeNode {\n key: string;\n title: ReactNode;\n children?: readonly TreeNode[];\n icon?: ReactNode;\n disabled?: boolean;\n selectable?: boolean;\n checkable?: boolean;\n disableCheckbox?: boolean;\n searchLabel?: string;\n isLeaf?: boolean;\n}\nexport interface TreeSelectInfo {\n node: TreeNode;\n selected: boolean;\n selectedNodes: readonly TreeNode[];\n}\nexport interface TreeCheckInfo {\n node: TreeNode;\n checked: boolean;\n checkedNodes: readonly TreeNode[];\n halfCheckedKeys: readonly string[];\n}\nexport interface TreeExpandInfo {\n node: TreeNode;\n expanded: boolean;\n}\nexport interface TreeDropInfo {\n node: TreeNode;\n target: TreeNode;\n position: 'before' | 'inside' | 'after';\n data: TreeNode[];\n}\nexport interface TreeProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect' | 'onDrop' | 'onLoad' | 'draggable'> {\n data: readonly TreeNode[];\n selectedKeys?: readonly string[];\n defaultSelectedKeys?: readonly string[];\n onSelect?: (keys: string[], info: TreeSelectInfo) => void;\n multiple?: boolean;\n selectable?: boolean;\n checkable?: boolean;\n checkStrictly?: boolean;\n checkedKeys?: readonly string[];\n defaultCheckedKeys?: readonly string[];\n onCheck?: (keys: string[], info: TreeCheckInfo) => void;\n expandedKeys?: readonly string[];\n defaultExpandedKeys?: readonly string[];\n defaultExpandAll?: boolean;\n onExpand?: (keys: string[], info: TreeExpandInfo) => void;\n disabled?: boolean;\n showLine?: boolean;\n showIcon?: boolean;\n searchValue?: string;\n filterTreeNode?: (node: TreeNode, query: string) => boolean;\n notFoundContent?: ReactNode;\n loadData?: (node: TreeNode, signal: AbortSignal) => Promise<readonly TreeNode[]>;\n cacheKey?: string | number;\n nodeRender?: (node: TreeNode) => ReactNode;\n onLoad?: (node: TreeNode, children: readonly TreeNode[]) => void;\n onLoadError?: (error: unknown, node: TreeNode) => void;\n virtual?: boolean;\n height?: number;\n itemHeight?: number;\n draggable?: boolean | ((node: TreeNode) => boolean);\n allowDrop?: (info: Omit<TreeDropInfo, 'data'>) => boolean;\n onDrop?: (info: TreeDropInfo) => void;\n}\nexport function TreeControl({\n data: suppliedData,\n selectedKeys,\n defaultSelectedKeys = [],\n onSelect,\n multiple = false,\n selectable = true,\n checkable = false,\n checkOnClick = false,\n expandOnClick = false,\n checkStrictly = false,\n checkedKeys,\n defaultCheckedKeys = [],\n onCheck,\n expandedKeys,\n defaultExpandedKeys = [],\n defaultExpandAll = false,\n onExpand,\n disabled = false,\n showLine = false,\n showIcon = false,\n searchValue = '',\n filterTreeNode,\n notFoundContent,\n loadData,\n cacheKey,\n nodeRender,\n onLoad,\n onLoadError,\n virtual = false,\n height = 320,\n itemHeight: itemHeightProp,\n draggable = false,\n allowDrop,\n onDrop,\n className,\n 'aria-label': label,\n ...props\n}: TreeProps & { checkOnClick?: boolean; expandOnClick?: boolean }) {\n const { messages, direction, theme, density } = useLeafConfig();\n const format = useFormattedText();\n const itemHeight = itemHeightProp ?? estimateControlHeight(theme, density) + 6;\n const [loaded, setLoaded] = useState<Map<string, readonly TreeNode[]>>(new Map());\n const [loading, setLoading] = useState<readonly string[]>([]);\n const requests = useRef(new Map<string, AbortController>());\n const latestLoad = useRef({ loadData, onLoad, onLoadError });\n latestLoad.current = { loadData, onLoad, onLoadError };\n // biome-ignore lint/correctness/useExhaustiveDependencies: Invalidate node caches whenever the supplied data, loader or cache version changes.\n useEffect(() => {\n for (const request of requests.current.values()) request.abort();\n requests.current.clear();\n setLoaded(new Map());\n setLoading([]);\n }, [suppliedData, loadData, cacheKey]);\n const data = useMemo(() => {\n const merge = (nodes: readonly TreeNode[]): TreeNode[] =>\n nodes.map((node) => {\n const children = node.children ?? loaded.get(node.key);\n return children\n ? { ...node, children: merge(children), isLeaf: children.length === 0 }\n : node;\n });\n return merge(suppliedData);\n }, [suppliedData, loaded]);\n useEffect(\n () => () => {\n for (const request of requests.current.values()) request.abort();\n requests.current.clear();\n },\n [],\n );\n const load = useCallback(\n (node: TreeNode) => {\n const callback = latestLoad.current.loadData;\n if (\n !callback ||\n node.isLeaf ||\n node.children !== undefined ||\n loaded.has(node.key) ||\n requests.current.has(node.key)\n )\n return;\n const request = new AbortController();\n requests.current.set(node.key, request);\n setLoading((previous) => [...previous, node.key]);\n Promise.resolve()\n .then(() => (request.signal.aborted ? [] : callback(node, request.signal)))\n .then((children) => {\n if (request.signal.aborted) return;\n setLoaded((previous) => new Map(previous).set(node.key, children ?? []));\n latestLoad.current.onLoad?.(node, children ?? []);\n })\n .catch((reason) => {\n if (!request.signal.aborted) latestLoad.current.onLoadError?.(reason, node);\n })\n .finally(() => {\n // A replayed effect may have started a newer request for the same node.\n if (requests.current.get(node.key) !== request) return;\n requests.current.delete(node.key);\n if (!request.signal.aborted)\n setLoading((previous) => previous.filter((key) => key !== node.key));\n });\n },\n [loaded],\n );\n const records = useMemo(() => treeModel(data), [data]);\n const [selection, setSelection] = useState<readonly string[]>(defaultSelectedKeys);\n const [checks, setChecks] = useState<readonly string[]>(defaultCheckedKeys);\n const [expansion, setExpansion] = useState<readonly string[]>(() =>\n defaultExpandAll ? [...records.keys()] : defaultExpandedKeys,\n );\n const selected = selectedKeys ?? selection;\n const expanded = new Set(expandedKeys ?? expansion);\n useEffect(() => {\n if (disabled) return;\n for (const key of expandedKeys ?? expansion) {\n const record = records.get(key);\n if (record) load(record.node);\n }\n }, [records, expandedKeys, expansion, disabled, load]);\n const state = useMemo(\n () => treeChecks(records, checkedKeys ?? checks, checkStrictly),\n [records, checkedKeys, checks, checkStrictly],\n );\n const checked = new Set(state.checked);\n const half = new Set(state.half);\n const matches = useMemo(\n () => treeMatches(records, searchValue, filterTreeNode),\n [records, searchValue, filterTreeNode],\n );\n const [active, setActive] = useState<string>();\n const elements = useRef(new Map<string, HTMLDivElement>());\n const anchor = useRef<string | undefined>(undefined);\n const typeAhead = useRef({ text: '', time: 0 });\n const visible: TreeNode[] = [];\n const isExpanded = (key: string) => (matches ? matches.visible.has(key) : expanded.has(key));\n const collect = (nodes: readonly TreeNode[]) => {\n for (const node of nodes) {\n if (matches && !matches.visible.has(node.key)) continue;\n visible.push(node);\n if (isExpanded(node.key) && node.children) collect(node.children);\n }\n };\n collect(data);\n const root = useRef<HTMLDivElement>(null);\n const virtualizer = useVirtualizer({\n count: visible.length,\n getScrollElement: () => root.current,\n estimateSize: () => Math.max(24, itemHeight),\n overscan: 5,\n enabled: virtual,\n initialRect: { height, width: 400 },\n getItemKey: (index) => visible[index]?.key ?? index,\n });\n const focusKey = visible.some((node) => node.key === active)\n ? active\n : (visible.find((node) => selected.includes(node.key))?.key ?? visible[0]?.key);\n const focus = (key?: string) => {\n if (key) {\n setActive(key);\n if (virtual) {\n const index = visible.findIndex((node) => node.key === key);\n if (index >= 0) virtualizer.scrollToIndex(index, { align: 'auto' });\n requestAnimationFrame(() => elements.current.get(key)?.focus());\n }\n elements.current.get(key)?.focus();\n }\n };\n const expand = (node: TreeNode, next: boolean) => {\n if (disabled) return;\n if (next) load(node);\n const keys = next\n ? [...new Set([...expanded, node.key])]\n : [...expanded].filter((key) => key !== node.key);\n if (expandedKeys === undefined) setExpansion(keys);\n onExpand?.(keys, { node, expanded: next });\n };\n const select = (\n node: TreeNode,\n modifiers?: { shiftKey: boolean; ctrlKey: boolean; metaKey: boolean },\n ) => {\n if (disabled || node.disabled || !selectable || node.selectable === false) return;\n let next = selected.includes(node.key) ? [] : [node.key];\n if (multiple) {\n if (modifiers?.shiftKey && anchor.current) {\n const first = visible.findIndex((item) => item.key === anchor.current);\n const last = visible.indexOf(node);\n next = visible\n .slice(Math.max(0, Math.min(first, last)), Math.max(first, last) + 1)\n .filter((item) => !item.disabled && item.selectable !== false)\n .map((item) => item.key);\n } else\n next = selected.includes(node.key)\n ? selected.filter((key) => key !== node.key)\n : [...selected, node.key];\n }\n if (!modifiers?.shiftKey) anchor.current = node.key;\n if (selectedKeys === undefined) setSelection(next);\n onSelect?.(next, {\n node,\n selected: next.includes(node.key),\n selectedNodes: next.flatMap((key) => records.get(key)?.node ?? []),\n });\n };\n const check = (node: TreeNode) => {\n if (disabled || node.disabled || node.disableCheckbox || node.checkable === false) return;\n const next = treeChecks(records, state.checked, checkStrictly, {\n key: node.key,\n checked: !checked.has(node.key),\n });\n if (checkedKeys === undefined) setChecks(next.checked);\n onCheck?.(next.checked, {\n node,\n checked: !checked.has(node.key),\n checkedNodes: next.checked.flatMap((key) => records.get(key)?.node ?? []),\n halfCheckedKeys: next.half,\n });\n };\n const keyDown = (event: KeyboardEvent<HTMLDivElement>, node: TreeNode) => {\n if (\n event.target !== event.currentTarget &&\n (event.target as HTMLElement).closest(\n 'input,textarea,select,button,a[href],[contenteditable=\"true\"]',\n )\n )\n return;\n if (event.defaultPrevented || (event.target as HTMLElement).closest('.leaf-tree__drag-handle'))\n return;\n event.stopPropagation();\n const index = visible.indexOf(node);\n const hasChildren = Boolean(\n node.children?.length || (loadData && !node.isLeaf && node.children === undefined),\n );\n if (event.key === 'ArrowDown') focus(visible[Math.min(index + 1, visible.length - 1)]?.key);\n else if (event.key === 'ArrowUp') focus(visible[Math.max(0, index - 1)]?.key);\n else if (event.key === 'Home') focus(visible[0]?.key);\n else if (event.key === 'End') focus(visible.at(-1)?.key);\n else if (event.key === (direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight')) {\n if (hasChildren && !isExpanded(node.key)) expand(node, true);\n else if (hasChildren)\n focus(node.children?.find((child) => !matches || matches.visible.has(child.key))?.key);\n } else if (event.key === (direction === 'rtl' ? 'ArrowRight' : 'ArrowLeft')) {\n if (hasChildren && isExpanded(node.key)) expand(node, false);\n else focus(records.get(node.key)?.parent);\n } else if (event.key === ' ' || event.key === 'Enter') {\n if (checkable && (event.key === ' ' || checkOnClick)) check(node);\n else if (expandOnClick && hasChildren && (!selectable || node.selectable === false))\n expand(node, !isExpanded(node.key));\n else select(node, event);\n } else if (event.key.length === 1 && !event.altKey && !event.ctrlKey && !event.metaKey) {\n const now = Date.now();\n typeAhead.current = {\n text:\n (now - typeAhead.current.time < 600 ? typeAhead.current.text : '') +\n event.key.toLocaleLowerCase(),\n time: now,\n };\n const ordered = [...visible.slice(index + 1), ...visible.slice(0, index + 1)];\n focus(\n ordered.find((item) =>\n (item.searchLabel ?? (typeof item.title === 'string' ? item.title : item.key))\n .toLocaleLowerCase()\n .startsWith(typeAhead.current.text),\n )?.key,\n );\n } else return;\n event.preventDefault();\n };\n const renderNode = (\n node: TreeNode,\n level: number,\n index: number,\n setSize: number,\n flat = false,\n ): ReactNode => {\n const hasChildren = Boolean(\n node.children?.length || (loadData && !node.isLeaf && node.children === undefined),\n );\n const opened = hasChildren && isExpanded(node.key);\n const inactive = disabled || node.disabled;\n const Icon = hasChildren ? (opened ? FolderOpen : Folder) : File;\n return (\n <div\n role=\"treeitem\"\n key={node.key}\n aria-level={level}\n aria-label={node.searchLabel ?? (typeof node.title === 'string' ? node.title : undefined)}\n aria-posinset={index + 1}\n aria-setsize={setSize}\n aria-expanded={hasChildren ? opened : undefined}\n aria-selected={\n selectable && node.selectable !== false ? selected.includes(node.key) : undefined\n }\n aria-checked={\n checkable && node.checkable !== false\n ? half.has(node.key)\n ? 'mixed'\n : checked.has(node.key)\n : undefined\n }\n aria-disabled={inactive || undefined}\n tabIndex={focusKey === node.key ? 0 : -1}\n className=\"leaf-tree__item\"\n data-node-key={node.key}\n ref={(element) => {\n if (element) elements.current.set(node.key, element);\n else elements.current.delete(node.key);\n }}\n onFocus={(event) => {\n if (event.target === event.currentTarget) setActive(node.key);\n }}\n onKeyDown={(event) => keyDown(event, node)}\n onClick={(event) => {\n event.stopPropagation();\n if (\n !event.currentTarget.firstElementChild?.contains(event.target as Node) ||\n (event.target as HTMLElement).closest(\n '.leaf-tree__check, .leaf-tree__drag-handle, input, textarea, select, button, a[href], [contenteditable=\"true\"]',\n )\n )\n return;\n focus(node.key);\n if (checkable && checkOnClick) check(node);\n else if (expandOnClick && hasChildren && (!selectable || node.selectable === false))\n expand(node, !opened);\n else select(node, event);\n }}\n >\n <TreeRow\n enabled={Boolean(draggable)}\n node={node}\n draggable={\n !disabled && Boolean(typeof draggable === 'function' ? draggable(node) : draggable)\n }\n >\n {' '}\n <div\n className=\"leaf-tree__row\"\n data-selected={selected.includes(node.key) || undefined}\n data-disabled={inactive || undefined}\n style={{ paddingInlineStart: `${(level - 1) * 20 + 4}px` }}\n >\n <button\n type=\"button\"\n className=\"leaf-tree__toggle\"\n tabIndex={-1}\n aria-label={format(opened ? 'tree.collapseNode' : 'tree.expandNode', {\n label: node.searchLabel ?? (typeof node.title === 'string' ? node.title : node.key),\n })}\n disabled={disabled}\n data-hidden={!hasChildren || undefined}\n data-open={opened || undefined}\n aria-hidden={!hasChildren || undefined}\n onClick={(event) => {\n event.stopPropagation();\n focus(node.key);\n expand(node, !opened);\n }}\n >\n {loading.includes(node.key) ? (\n <LoaderCircle size={14} className=\"leaf-tree__spinner\" aria-hidden=\"true\" />\n ) : (\n hasChildren && <ChevronRight size={14} aria-hidden=\"true\" />\n )}\n </button>\n {checkable && node.checkable !== false && (\n <span className=\"leaf-tree__check\">\n <Checkbox\n checked={checked.has(node.key)}\n indeterminate={half.has(node.key)}\n disabled={inactive || node.disableCheckbox}\n tabIndex={-1}\n aria-label={\n node.searchLabel ?? (typeof node.title === 'string' ? node.title : node.key)\n }\n onChange={() => {\n focus(node.key);\n check(node);\n }}\n />\n </span>\n )}\n {(showIcon || node.icon) && (\n <span className=\"leaf-tree__icon\" aria-hidden=\"true\">\n {node.icon ?? <Icon size={16} />}\n </span>\n )}\n <span\n className=\"leaf-tree__title\"\n data-match={matches?.matched.has(node.key) || undefined}\n >\n {nodeRender?.(node) ?? node.title}\n </span>\n </div>\n </TreeRow>\n {hasChildren && !flat && (\n <TreeGroup\n open={opened}\n style={{ '--leaf-tree-line-left': `${(level - 1) * 20 + 14}px` } as CSSProperties}\n >\n {() => renderNodes(node.children ?? [], level + 1)}\n </TreeGroup>\n )}\n </div>\n );\n };\n\n const renderNodes = (nodes: readonly TreeNode[], level: number): ReactNode => {\n const siblings = nodes.filter((node) => !matches || matches.visible.has(node.key));\n return siblings.map((node, index) => renderNode(node, level, index, siblings.length));\n };\n const content = (\n <div\n {...props}\n ref={root}\n style={{ ...(virtual ? { height, overflow: 'auto' } : {}), ...props.style }}\n role=\"tree\"\n aria-label={label ?? messages.tree.label}\n aria-multiselectable={multiple || checkable || undefined}\n aria-disabled={disabled || undefined}\n className={classes('leaf-tree', showLine && 'leaf-tree--lines', className)}\n >\n {visible.length ? (\n virtual ? (\n <div style={{ position: 'relative', height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((row) => {\n const node = visible[row.index];\n if (!node) return null;\n const record = records.get(node.key);\n const siblings = (\n record?.parent ? (records.get(record.parent)?.node.children ?? []) : data\n ).filter((item) => !matches || matches.visible.has(item.key));\n return (\n <div\n key={node.key}\n ref={virtualizer.measureElement}\n data-index={row.index}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n transform: `translateY(${row.start}px)`,\n }}\n >\n {renderNode(\n node,\n record?.level ?? 1,\n siblings.findIndex((item) => item.key === node.key),\n siblings.length,\n true,\n )}\n </div>\n );\n })}\n </div>\n ) : (\n renderNodes(data, 1)\n )\n ) : (\n (notFoundContent ?? <Result size=\"sm\" title={messages.select.empty} icon={null} />)\n )}\n </div>\n );\n return draggable ? (\n <TreeDragScope data={data} nodes={records} allowDrop={allowDrop} onDrop={onDrop}>\n {content}\n </TreeDragScope>\n ) : (\n content\n );\n}\n\nfunction TreeGroup({\n open,\n style,\n children,\n}: {\n open: boolean;\n style: CSSProperties;\n children: () => ReactNode;\n}) {\n const [visited, setVisited] = useState(open);\n if (open && !visited) setVisited(true);\n return (\n <fieldset\n className=\"leaf-tree__group\"\n style={style}\n aria-hidden={!open || undefined}\n {...inertProps(!open)}\n data-open={open || undefined}\n >\n <div className=\"leaf-tree__group-inner\">\n <div className=\"leaf-tree__group-content\">{visited && children()}</div>\n </div>\n </fieldset>\n );\n}\n\nfunction TreeRow({\n enabled,\n node,\n draggable,\n children,\n}: {\n enabled: boolean;\n node: TreeNode;\n draggable: boolean;\n children: ReactNode;\n}) {\n return enabled ? (\n <TreeDragRow node={node} draggable={draggable}>\n {children}\n </TreeDragRow>\n ) : (\n children\n );\n}\n\nexport function Tree(rawProps: TreeProps) {\n const props = useComponentProps('Tree', rawProps);\n return <TreeControl {...props} />;\n}\n"],"names":["TreeControl","suppliedData","selectedKeys","defaultSelectedKeys","onSelect","multiple","selectable","checkable","checkOnClick","expandOnClick","checkStrictly","checkedKeys","defaultCheckedKeys","onCheck","expandedKeys","defaultExpandedKeys","defaultExpandAll","onExpand","disabled","showLine","showIcon","searchValue","filterTreeNode","notFoundContent","loadData","cacheKey","nodeRender","onLoad","onLoadError","virtual","height","itemHeightProp","draggable","allowDrop","onDrop","className","label","props","messages","direction","theme","density","useLeafConfig","format","useFormattedText","itemHeight","estimateControlHeight","loaded","setLoaded","useState","Map","loading","setLoading","requests","useRef","latestLoad","useEffect","request","data","useMemo","merge","nodes","node","children","load","useCallback","callback","undefined","AbortController","previous","Promise","reason","key","records","treeModel","selection","setSelection","checks","setChecks","expansion","setExpansion","selected","expanded","Set","record","state","treeChecks","checked","half","matches","treeMatches","active","setActive","elements","anchor","typeAhead","visible","isExpanded","collect","root","virtualizer","useVirtualizer","Math","index","focusKey","focus","requestAnimationFrame","expand","next","keys","select","modifiers","first","item","last","check","keyDown","event","hasChildren","Boolean","child","now","Date","ordered","renderNode","level","setSize","flat","opened","inactive","Icon","FolderOpen","Folder","File","element","TreeRow","LoaderCircle","ChevronRight","Checkbox","TreeGroup","renderNodes","siblings","content","classes","row","Result","TreeDragScope","open","style","visited","setVisited","inertProps","enabled","TreeDragRow","Tree","rawProps","useComponentProps"],"mappings":";;;;;;;;;;;;;;;;;AA4FO,SAASA,YAAY,EAC1B,MAAMC,YAAY,EAClBC,YAAY,EACZC,sBAAsB,EAAE,EACxBC,QAAQ,EACRC,WAAW,KAAK,EAChBC,aAAa,IAAI,EACjBC,YAAY,KAAK,EACjBC,eAAe,KAAK,EACpBC,gBAAgB,KAAK,EACrBC,gBAAgB,KAAK,EACrBC,WAAW,EACXC,qBAAqB,EAAE,EACvBC,OAAO,EACPC,YAAY,EACZC,sBAAsB,EAAE,EACxBC,mBAAmB,KAAK,EACxBC,QAAQ,EACRC,WAAW,KAAK,EAChBC,WAAW,KAAK,EAChBC,WAAW,KAAK,EAChBC,cAAc,EAAE,EAChBC,cAAc,EACdC,eAAe,EACfC,QAAQ,EACRC,QAAQ,EACRC,UAAU,EACVC,MAAM,EACNC,WAAW,EACXC,UAAU,KAAK,EACfC,SAAS,GAAG,EACZ,YAAYC,cAAc,EAC1BC,YAAY,KAAK,EACjBC,SAAS,EACTC,MAAM,EACNC,SAAS,EACT,cAAcC,KAAK,EACnB,GAAGC,OAC6D;IAChE,MAAM,EAAEC,QAAQ,EAAEC,SAAS,EAAEC,KAAK,EAAEC,OAAO,EAAE,GAAGC;IAChD,MAAMC,SAASC;IACf,MAAMC,aAAad,kBAAkBe,sBAAsBN,OAAOC,WAAW;IAC7E,MAAM,CAACM,QAAQC,UAAU,GAAGC,SAA2C,IAAIC;IAC3E,MAAM,CAACC,SAASC,WAAW,GAAGH,SAA4B,EAAE;IAC5D,MAAMI,WAAWC,OAAO,IAAIJ;IAC5B,MAAMK,aAAaD,OAAO;QAAE9B;QAAUG;QAAQC;IAAY;IAC1D2B,WAAW,OAAO,GAAG;QAAE/B;QAAUG;QAAQC;IAAY;IAErD4B,UAAU;QACR,KAAK,MAAMC,WAAWJ,SAAS,OAAO,CAAC,MAAM,GAAII,QAAQ,KAAK;QAC9DJ,SAAS,OAAO,CAAC,KAAK;QACtBL,UAAU,IAAIE;QACdE,WAAW,EAAE;IACf,GAAG;QAACnD;QAAcuB;QAAUC;KAAS;IACrC,MAAMiC,OAAOC,QAAQ;QACnB,MAAMC,QAAQ,CAACC,QACbA,MAAM,GAAG,CAAC,CAACC;gBACT,MAAMC,WAAWD,KAAK,QAAQ,IAAIf,OAAO,GAAG,CAACe,KAAK,GAAG;gBACrD,OAAOC,WACH;oBAAE,GAAGD,IAAI;oBAAE,UAAUF,MAAMG;oBAAW,QAAQA,AAAoB,MAApBA,SAAS,MAAM;gBAAO,IACpED;YACN;QACF,OAAOF,MAAM3D;IACf,GAAG;QAACA;QAAc8C;KAAO;IACzBS,UACE,IAAM;YACJ,KAAK,MAAMC,WAAWJ,SAAS,OAAO,CAAC,MAAM,GAAII,QAAQ,KAAK;YAC9DJ,SAAS,OAAO,CAAC,KAAK;QACxB,GACA,EAAE;IAEJ,MAAMW,OAAOC,YACX,CAACH;QACC,MAAMI,WAAWX,WAAW,OAAO,CAAC,QAAQ;QAC5C,IACE,CAACW,YACDJ,KAAK,MAAM,IACXA,AAAkBK,WAAlBL,KAAK,QAAQ,IACbf,OAAO,GAAG,CAACe,KAAK,GAAG,KACnBT,SAAS,OAAO,CAAC,GAAG,CAACS,KAAK,GAAG,GAE7B;QACF,MAAML,UAAU,IAAIW;QACpBf,SAAS,OAAO,CAAC,GAAG,CAACS,KAAK,GAAG,EAAEL;QAC/BL,WAAW,CAACiB,WAAa;mBAAIA;gBAAUP,KAAK,GAAG;aAAC;QAChDQ,QAAQ,OAAO,GACZ,IAAI,CAAC,IAAOb,QAAQ,MAAM,CAAC,OAAO,GAAG,EAAE,GAAGS,SAASJ,MAAML,QAAQ,MAAM,GACvE,IAAI,CAAC,CAACM;YACL,IAAIN,QAAQ,MAAM,CAAC,OAAO,EAAE;YAC5BT,UAAU,CAACqB,WAAa,IAAInB,IAAImB,UAAU,GAAG,CAACP,KAAK,GAAG,EAAEC,YAAY,EAAE;YACtER,WAAW,OAAO,CAAC,MAAM,GAAGO,MAAMC,YAAY,EAAE;QAClD,GACC,KAAK,CAAC,CAACQ;YACN,IAAI,CAACd,QAAQ,MAAM,CAAC,OAAO,EAAEF,WAAW,OAAO,CAAC,WAAW,GAAGgB,QAAQT;QACxE,GACC,OAAO,CAAC;YAEP,IAAIT,SAAS,OAAO,CAAC,GAAG,CAACS,KAAK,GAAG,MAAML,SAAS;YAChDJ,SAAS,OAAO,CAAC,MAAM,CAACS,KAAK,GAAG;YAChC,IAAI,CAACL,QAAQ,MAAM,CAAC,OAAO,EACzBL,WAAW,CAACiB,WAAaA,SAAS,MAAM,CAAC,CAACG,MAAQA,QAAQV,KAAK,GAAG;QACtE;IACJ,GACA;QAACf;KAAO;IAEV,MAAM0B,UAAUd,QAAQ,IAAMe,UAAUhB,OAAO;QAACA;KAAK;IACrD,MAAM,CAACiB,WAAWC,aAAa,GAAG3B,SAA4B9C;IAC9D,MAAM,CAAC0E,QAAQC,UAAU,GAAG7B,SAA4BrC;IACxD,MAAM,CAACmE,WAAWC,aAAa,GAAG/B,SAA4B,IAC5DjC,mBAAmB;eAAIyD,QAAQ,IAAI;SAAG,GAAG1D;IAE3C,MAAMkE,WAAW/E,gBAAgByE;IACjC,MAAMO,WAAW,IAAIC,IAAIrE,gBAAgBiE;IACzCvB,UAAU;QACR,IAAItC,UAAU;QACd,KAAK,MAAMsD,OAAO1D,gBAAgBiE,UAAW;YAC3C,MAAMK,SAASX,QAAQ,GAAG,CAACD;YAC3B,IAAIY,QAAQpB,KAAKoB,OAAO,IAAI;QAC9B;IACF,GAAG;QAACX;QAAS3D;QAAciE;QAAW7D;QAAU8C;KAAK;IACrD,MAAMqB,QAAQ1B,QACZ,IAAM2B,WAAWb,SAAS9D,eAAekE,QAAQnE,gBACjD;QAAC+D;QAAS9D;QAAakE;QAAQnE;KAAc;IAE/C,MAAM6E,UAAU,IAAIJ,IAAIE,MAAM,OAAO;IACrC,MAAMG,OAAO,IAAIL,IAAIE,MAAM,IAAI;IAC/B,MAAMI,UAAU9B,QACd,IAAM+B,YAAYjB,SAASpD,aAAaC,iBACxC;QAACmD;QAASpD;QAAaC;KAAe;IAExC,MAAM,CAACqE,QAAQC,UAAU,GAAG3C;IAC5B,MAAM4C,WAAWvC,OAAO,IAAIJ;IAC5B,MAAM4C,SAASxC,OAA2Ba;IAC1C,MAAM4B,YAAYzC,OAAO;QAAE,MAAM;QAAI,MAAM;IAAE;IAC7C,MAAM0C,UAAsB,EAAE;IAC9B,MAAMC,aAAa,CAACzB,MAAiBiB,UAAUA,QAAQ,OAAO,CAAC,GAAG,CAACjB,OAAOU,SAAS,GAAG,CAACV;IACvF,MAAM0B,UAAU,CAACrC;QACf,KAAK,MAAMC,QAAQD,MACjB,IAAI4B,CAAAA,WAAYA,QAAQ,OAAO,CAAC,GAAG,CAAC3B,KAAK,GAAG;YAC5CkC,QAAQ,IAAI,CAAClC;YACb,IAAImC,WAAWnC,KAAK,GAAG,KAAKA,KAAK,QAAQ,EAAEoC,QAAQpC,KAAK,QAAQ;;IAEpE;IACAoC,QAAQxC;IACR,MAAMyC,OAAO7C,OAAuB;IACpC,MAAM8C,cAAcC,eAAe;QACjC,OAAOL,QAAQ,MAAM;QACrB,kBAAkB,IAAMG,KAAK,OAAO;QACpC,cAAc,IAAMG,KAAK,GAAG,CAAC,IAAIzD;QACjC,UAAU;QACV,SAAShB;QACT,aAAa;YAAEC;YAAQ,OAAO;QAAI;QAClC,YAAY,CAACyE,QAAUP,OAAO,CAACO,MAAM,EAAE,OAAOA;IAChD;IACA,MAAMC,WAAWR,QAAQ,IAAI,CAAC,CAAClC,OAASA,KAAK,GAAG,KAAK6B,UACjDA,SACCK,QAAQ,IAAI,CAAC,CAAClC,OAASmB,SAAS,QAAQ,CAACnB,KAAK,GAAG,IAAI,OAAOkC,OAAO,CAAC,EAAE,EAAE;IAC7E,MAAMS,QAAQ,CAACjC;QACb,IAAIA,KAAK;YACPoB,UAAUpB;YACV,IAAI3C,SAAS;gBACX,MAAM0E,QAAQP,QAAQ,SAAS,CAAC,CAAClC,OAASA,KAAK,GAAG,KAAKU;gBACvD,IAAI+B,SAAS,GAAGH,YAAY,aAAa,CAACG,OAAO;oBAAE,OAAO;gBAAO;gBACjEG,sBAAsB,IAAMb,SAAS,OAAO,CAAC,GAAG,CAACrB,MAAM;YACzD;YACAqB,SAAS,OAAO,CAAC,GAAG,CAACrB,MAAM;QAC7B;IACF;IACA,MAAMmC,SAAS,CAAC7C,MAAgB8C;QAC9B,IAAI1F,UAAU;QACd,IAAI0F,MAAM5C,KAAKF;QACf,MAAM+C,OAAOD,OACT;eAAI,IAAIzB,IAAI;mBAAID;gBAAUpB,KAAK,GAAG;aAAC;SAAE,GACrC;eAAIoB;SAAS,CAAC,MAAM,CAAC,CAACV,MAAQA,QAAQV,KAAK,GAAG;QAClD,IAAIhD,AAAiBqD,WAAjBrD,cAA4BkE,aAAa6B;QAC7C5F,WAAW4F,MAAM;YAAE/C;YAAM,UAAU8C;QAAK;IAC1C;IACA,MAAME,SAAS,CACbhD,MACAiD;QAEA,IAAI7F,YAAY4C,KAAK,QAAQ,IAAI,CAACxD,cAAcwD,AAAoB,UAApBA,KAAK,UAAU,EAAY;QAC3E,IAAI8C,OAAO3B,SAAS,QAAQ,CAACnB,KAAK,GAAG,IAAI,EAAE,GAAG;YAACA,KAAK,GAAG;SAAC;QACxD,IAAIzD,UACF,IAAI0G,WAAW,YAAYjB,OAAO,OAAO,EAAE;YACzC,MAAMkB,QAAQhB,QAAQ,SAAS,CAAC,CAACiB,OAASA,KAAK,GAAG,KAAKnB,OAAO,OAAO;YACrE,MAAMoB,OAAOlB,QAAQ,OAAO,CAAClC;YAC7B8C,OAAOZ,QACJ,KAAK,CAACM,KAAK,GAAG,CAAC,GAAGA,KAAK,GAAG,CAACU,OAAOE,QAAQZ,KAAK,GAAG,CAACU,OAAOE,QAAQ,GAClE,MAAM,CAAC,CAACD,OAAS,CAACA,KAAK,QAAQ,IAAIA,AAAoB,UAApBA,KAAK,UAAU,EAClD,GAAG,CAAC,CAACA,OAASA,KAAK,GAAG;QAC3B,OACEL,OAAO3B,SAAS,QAAQ,CAACnB,KAAK,GAAG,IAC7BmB,SAAS,MAAM,CAAC,CAACT,MAAQA,QAAQV,KAAK,GAAG,IACzC;eAAImB;YAAUnB,KAAK,GAAG;SAAC;QAE/B,IAAI,CAACiD,WAAW,UAAUjB,OAAO,OAAO,GAAGhC,KAAK,GAAG;QACnD,IAAI5D,AAAiBiE,WAAjBjE,cAA4B0E,aAAagC;QAC7CxG,WAAWwG,MAAM;YACf9C;YACA,UAAU8C,KAAK,QAAQ,CAAC9C,KAAK,GAAG;YAChC,eAAe8C,KAAK,OAAO,CAAC,CAACpC,MAAQC,QAAQ,GAAG,CAACD,MAAM,QAAQ,EAAE;QACnE;IACF;IACA,MAAM2C,QAAQ,CAACrD;QACb,IAAI5C,YAAY4C,KAAK,QAAQ,IAAIA,KAAK,eAAe,IAAIA,AAAmB,UAAnBA,KAAK,SAAS,EAAY;QACnF,MAAM8C,OAAOtB,WAAWb,SAASY,MAAM,OAAO,EAAE3E,eAAe;YAC7D,KAAKoD,KAAK,GAAG;YACb,SAAS,CAACyB,QAAQ,GAAG,CAACzB,KAAK,GAAG;QAChC;QACA,IAAInD,AAAgBwD,WAAhBxD,aAA2BmE,UAAU8B,KAAK,OAAO;QACrD/F,UAAU+F,KAAK,OAAO,EAAE;YACtB9C;YACA,SAAS,CAACyB,QAAQ,GAAG,CAACzB,KAAK,GAAG;YAC9B,cAAc8C,KAAK,OAAO,CAAC,OAAO,CAAC,CAACpC,MAAQC,QAAQ,GAAG,CAACD,MAAM,QAAQ,EAAE;YACxE,iBAAiBoC,KAAK,IAAI;QAC5B;IACF;IACA,MAAMQ,UAAU,CAACC,OAAsCvD;QACrD,IACEuD,MAAM,MAAM,KAAKA,MAAM,aAAa,IACnCA,MAAM,MAAM,CAAiB,OAAO,CACnC,kEAGF;QACF,IAAIA,MAAM,gBAAgB,IAAKA,MAAM,MAAM,CAAiB,OAAO,CAAC,4BAClE;QACFA,MAAM,eAAe;QACrB,MAAMd,QAAQP,QAAQ,OAAO,CAAClC;QAC9B,MAAMwD,cAAcC,QAClBzD,KAAK,QAAQ,EAAE,UAAWtC,YAAY,CAACsC,KAAK,MAAM,IAAIA,AAAkBK,WAAlBL,KAAK,QAAQ;QAErE,IAAIuD,AAAc,gBAAdA,MAAM,GAAG,EAAkBZ,MAAMT,OAAO,CAACM,KAAK,GAAG,CAACC,QAAQ,GAAGP,QAAQ,MAAM,GAAG,GAAG,EAAE;aAClF,IAAIqB,AAAc,cAAdA,MAAM,GAAG,EAAgBZ,MAAMT,OAAO,CAACM,KAAK,GAAG,CAAC,GAAGC,QAAQ,GAAG,EAAE;aACpE,IAAIc,AAAc,WAAdA,MAAM,GAAG,EAAaZ,MAAMT,OAAO,CAAC,EAAE,EAAE;aAC5C,IAAIqB,AAAc,UAAdA,MAAM,GAAG,EAAYZ,MAAMT,QAAQ,EAAE,CAAC,KAAK;aAC/C,IAAIqB,MAAM,GAAG,KAAM9E,CAAAA,AAAc,UAAdA,YAAsB,cAAc,YAAW,GACrE;YAAA,IAAI+E,eAAe,CAACrB,WAAWnC,KAAK,GAAG,GAAG6C,OAAO7C,MAAM;iBAClD,IAAIwD,aACPb,MAAM3C,KAAK,QAAQ,EAAE,KAAK,CAAC0D,QAAU,CAAC/B,WAAWA,QAAQ,OAAO,CAAC,GAAG,CAAC+B,MAAM,GAAG,IAAI;QAAI,OACnF,IAAIH,MAAM,GAAG,KAAM9E,CAAAA,AAAc,UAAdA,YAAsB,eAAe,WAAU,GACvE,IAAI+E,eAAerB,WAAWnC,KAAK,GAAG,GAAG6C,OAAO7C,MAAM;aACjD2C,MAAMhC,QAAQ,GAAG,CAACX,KAAK,GAAG,GAAG;aAC7B,IAAIuD,AAAc,QAAdA,MAAM,GAAG,IAAYA,AAAc,YAAdA,MAAM,GAAG,EACvC,IAAI9G,aAAc8G,CAAAA,AAAc,QAAdA,MAAM,GAAG,IAAY7G,YAAW,GAAI2G,MAAMrD;aACvD,IAAIrD,iBAAiB6G,eAAgB,EAAChH,cAAcwD,AAAoB,UAApBA,KAAK,UAAU,AAAS,GAC/E6C,OAAO7C,MAAM,CAACmC,WAAWnC,KAAK,GAAG;aAC9BgD,OAAOhD,MAAMuD;aACoE;YAAjF,IAAIA,AAAqB,MAArBA,MAAM,GAAG,CAAC,MAAM,IAAWA,MAAM,MAAM,IAAKA,MAAM,OAAO,IAAKA,MAAM,OAAO,EAgB/E;YAfL,MAAMI,MAAMC,KAAK,GAAG;YACpB3B,UAAU,OAAO,GAAG;gBAClB,MACG0B,AAAAA,CAAAA,MAAM1B,UAAU,OAAO,CAAC,IAAI,GAAG,MAAMA,UAAU,OAAO,CAAC,IAAI,GAAG,EAAC,IAChEsB,MAAM,GAAG,CAAC,iBAAiB;gBAC7B,MAAMI;YACR;YACA,MAAME,UAAU;mBAAI3B,QAAQ,KAAK,CAACO,QAAQ;mBAAOP,QAAQ,KAAK,CAAC,GAAGO,QAAQ;aAAG;YAC7EE,MACEkB,QAAQ,IAAI,CAAC,CAACV,OACXA,AAAAA,CAAAA,KAAK,WAAW,IAAK,CAAsB,YAAtB,OAAOA,KAAK,KAAK,GAAgBA,KAAK,KAAK,GAAGA,KAAK,GAAE,GACxE,iBAAiB,GACjB,UAAU,CAAClB,UAAU,OAAO,CAAC,IAAI,IACnC;QAEP;QACAsB,MAAM,cAAc;IACtB;IACA,MAAMO,aAAa,CACjB9D,MACA+D,OACAtB,OACAuB,SACAC,OAAO,KAAK;QAEZ,MAAMT,cAAcC,QAClBzD,KAAK,QAAQ,EAAE,UAAWtC,YAAY,CAACsC,KAAK,MAAM,IAAIA,AAAkBK,WAAlBL,KAAK,QAAQ;QAErE,MAAMkE,SAASV,eAAerB,WAAWnC,KAAK,GAAG;QACjD,MAAMmE,WAAW/G,YAAY4C,KAAK,QAAQ;QAC1C,MAAMoE,OAAOZ,cAAeU,SAASG,aAAaC,SAAUC;QAC5D,OAAO,WAAP,GACE,KAAC;YACC,MAAK;YAEL,cAAYR;YACZ,cAAY/D,KAAK,WAAW,IAAK,CAAsB,YAAtB,OAAOA,KAAK,KAAK,GAAgBA,KAAK,KAAK,GAAGK,MAAQ;YACvF,iBAAeoC,QAAQ;YACvB,gBAAcuB;YACd,iBAAeR,cAAcU,SAAS7D;YACtC,iBACE7D,cAAcwD,AAAoB,UAApBA,KAAK,UAAU,GAAamB,SAAS,QAAQ,CAACnB,KAAK,GAAG,IAAIK;YAE1E,gBACE5D,aAAauD,AAAmB,UAAnBA,KAAK,SAAS,GACvB0B,KAAK,GAAG,CAAC1B,KAAK,GAAG,IACf,UACAyB,QAAQ,GAAG,CAACzB,KAAK,GAAG,IACtBK;YAEN,iBAAe8D,YAAY9D;YAC3B,UAAUqC,aAAa1C,KAAK,GAAG,GAAG,IAAI;YACtC,WAAU;YACV,iBAAeA,KAAK,GAAG;YACvB,KAAK,CAACwE;gBACJ,IAAIA,SAASzC,SAAS,OAAO,CAAC,GAAG,CAAC/B,KAAK,GAAG,EAAEwE;qBACvCzC,SAAS,OAAO,CAAC,MAAM,CAAC/B,KAAK,GAAG;YACvC;YACA,SAAS,CAACuD;gBACR,IAAIA,MAAM,MAAM,KAAKA,MAAM,aAAa,EAAEzB,UAAU9B,KAAK,GAAG;YAC9D;YACA,WAAW,CAACuD,QAAUD,QAAQC,OAAOvD;YACrC,SAAS,CAACuD;gBACRA,MAAM,eAAe;gBACrB,IACE,CAACA,MAAM,aAAa,CAAC,iBAAiB,EAAE,SAASA,MAAM,MAAM,KAC5DA,MAAM,MAAM,CAAiB,OAAO,CACnC,mHAGF;gBACFZ,MAAM3C,KAAK,GAAG;gBACd,IAAIvD,aAAaC,cAAc2G,MAAMrD;qBAChC,IAAIrD,iBAAiB6G,eAAgB,EAAChH,cAAcwD,AAAoB,UAApBA,KAAK,UAAU,AAAS,GAC/E6C,OAAO7C,MAAM,CAACkE;qBACXlB,OAAOhD,MAAMuD;YACpB;;8BAEA,KAACkB,SAAOA;oBACN,SAAShB,QAAQvF;oBACjB,MAAM8B;oBACN,WACE,CAAC5C,YAAYqG,QAAQ,AAAqB,cAArB,OAAOvF,YAA2BA,UAAU8B,QAAQ9B;;wBAG1E;sCACD,KAAC;4BACC,WAAU;4BACV,iBAAeiD,SAAS,QAAQ,CAACnB,KAAK,GAAG,KAAKK;4BAC9C,iBAAe8D,YAAY9D;4BAC3B,OAAO;gCAAE,oBAAoB,GAAI0D,AAAAA,CAAAA,QAAQ,KAAK,KAAK,EAAE,EAAE,CAAC;4BAAC;;8CAEzD,IAAC;oCACC,MAAK;oCACL,WAAU;oCACV,UAAU;oCACV,cAAYlF,OAAOqF,SAAS,sBAAsB,mBAAmB;wCACnE,OAAOlE,KAAK,WAAW,IAAK,CAAsB,YAAtB,OAAOA,KAAK,KAAK,GAAgBA,KAAK,KAAK,GAAGA,KAAK,GAAE;oCACnF;oCACA,UAAU5C;oCACV,eAAa,CAACoG,eAAenD;oCAC7B,aAAW6D,UAAU7D;oCACrB,eAAa,CAACmD,eAAenD;oCAC7B,SAAS,CAACkD;wCACRA,MAAM,eAAe;wCACrBZ,MAAM3C,KAAK,GAAG;wCACd6C,OAAO7C,MAAM,CAACkE;oCAChB;8CAEC7E,QAAQ,QAAQ,CAACW,KAAK,GAAG,IAAI,WAAJ,GACxB,IAAC0E,cAAYA;wCAAC,MAAM;wCAAI,WAAU;wCAAqB,eAAY;yCAEnElB,eAAe,WAAfA,GAAe,IAACmB,cAAYA;wCAAC,MAAM;wCAAI,eAAY;;;gCAGtDlI,aAAauD,AAAmB,UAAnBA,KAAK,SAAS,IAAc,WAAT,GAC/B,IAAC;oCAAK,WAAU;8CACd,kBAAC4E,iBAAQA;wCACP,SAASnD,QAAQ,GAAG,CAACzB,KAAK,GAAG;wCAC7B,eAAe0B,KAAK,GAAG,CAAC1B,KAAK,GAAG;wCAChC,UAAUmE,YAAYnE,KAAK,eAAe;wCAC1C,UAAU;wCACV,cACEA,KAAK,WAAW,IAAK,CAAsB,YAAtB,OAAOA,KAAK,KAAK,GAAgBA,KAAK,KAAK,GAAGA,KAAK,GAAE;wCAE5E,UAAU;4CACR2C,MAAM3C,KAAK,GAAG;4CACdqD,MAAMrD;wCACR;;;gCAIJ1C,CAAAA,YAAY0C,KAAK,IAAG,mBACpB,IAAC;oCAAK,WAAU;oCAAkB,eAAY;8CAC3CA,KAAK,IAAI,IAAI,WAAJ,GAAI,IAACoE,MAAAA;wCAAK,MAAM;;;8CAG9B,IAAC;oCACC,WAAU;oCACV,cAAYzC,SAAS,QAAQ,IAAI3B,KAAK,GAAG,KAAKK;8CAE7CzC,aAAaoC,SAASA,KAAK,KAAK;;;;;;gBAItCwD,eAAe,CAACS,QAAQ,WAARA,GACf,IAACY,WAASA;oBACR,MAAMX;oBACN,OAAO;wBAAE,yBAAyB,GAAIH,AAAAA,CAAAA,QAAQ,KAAK,KAAK,GAAG,EAAE,CAAC;oBAAC;8BAE9D,IAAMe,YAAY9E,KAAK,QAAQ,IAAI,EAAE,EAAE+D,QAAQ;;;WApH/C/D,KAAK,GAAG;IAyHnB;IAEA,MAAM8E,cAAc,CAAC/E,OAA4BgE;QAC/C,MAAMgB,WAAWhF,MAAM,MAAM,CAAC,CAACC,OAAS,CAAC2B,WAAWA,QAAQ,OAAO,CAAC,GAAG,CAAC3B,KAAK,GAAG;QAChF,OAAO+E,SAAS,GAAG,CAAC,CAAC/E,MAAMyC,QAAUqB,WAAW9D,MAAM+D,OAAOtB,OAAOsC,SAAS,MAAM;IACrF;IACA,MAAMC,UAAU,WAAVA,GACJ,IAAC;QACE,GAAGzG,KAAK;QACT,KAAK8D;QACL,OAAO;YAAE,GAAItE,UAAU;gBAAEC;gBAAQ,UAAU;YAAO,IAAI,CAAC,CAAC;YAAG,GAAGO,MAAM,KAAK;QAAC;QAC1E,MAAK;QACL,cAAYD,SAASE,SAAS,IAAI,CAAC,KAAK;QACxC,wBAAsBjC,YAAYE,aAAa4D;QAC/C,iBAAejD,YAAYiD;QAC3B,WAAW4E,QAAQ,aAAa5H,YAAY,oBAAoBgB;kBAE/D6D,QAAQ,MAAM,GACbnE,UAAU,WAAVA,GACE,IAAC;YAAI,OAAO;gBAAE,UAAU;gBAAY,QAAQuE,YAAY,YAAY;YAAG;sBACpEA,YAAY,eAAe,GAAG,GAAG,CAAC,CAAC4C;gBAClC,MAAMlF,OAAOkC,OAAO,CAACgD,IAAI,KAAK,CAAC;gBAC/B,IAAI,CAAClF,MAAM,OAAO;gBAClB,MAAMsB,SAASX,QAAQ,GAAG,CAACX,KAAK,GAAG;gBACnC,MAAM+E,WACJzD,AAAAA,CAAAA,QAAQ,SAAUX,QAAQ,GAAG,CAACW,OAAO,MAAM,GAAG,KAAK,YAAY,EAAE,GAAI1B,IAAG,EACxE,MAAM,CAAC,CAACuD,OAAS,CAACxB,WAAWA,QAAQ,OAAO,CAAC,GAAG,CAACwB,KAAK,GAAG;gBAC3D,OAAO,WAAP,GACE,IAAC;oBAEC,KAAKb,YAAY,cAAc;oBAC/B,cAAY4C,IAAI,KAAK;oBACrB,OAAO;wBACL,UAAU;wBACV,KAAK;wBACL,MAAM;wBACN,OAAO;wBACP,WAAW,CAAC,WAAW,EAAEA,IAAI,KAAK,CAAC,GAAG,CAAC;oBACzC;8BAECpB,WACC9D,MACAsB,QAAQ,SAAS,GACjByD,SAAS,SAAS,CAAC,CAAC5B,OAASA,KAAK,GAAG,KAAKnD,KAAK,GAAG,GAClD+E,SAAS,MAAM,EACf;mBAhBG/E,KAAK,GAAG;YAoBnB;aAGF8E,YAAYlF,MAAM,KAGnBnC,mBAAmB,WAAnBA,GAAmB,IAAC0H,eAAMA;YAAC,MAAK;YAAK,OAAO3G,SAAS,MAAM,CAAC,KAAK;YAAE,MAAM;;;IAIhF,OAAON,YAAY,WAAZA,GACL,IAACkH,eAAaA;QAAC,MAAMxF;QAAM,OAAOe;QAAS,WAAWxC;QAAW,QAAQC;kBACtE4G;SAGHA;AAEJ;AAEA,SAASH,UAAU,EACjBQ,IAAI,EACJC,KAAK,EACLrF,QAAQ,EAKT;IACC,MAAM,CAACsF,SAASC,WAAW,GAAGrG,SAASkG;IACvC,IAAIA,QAAQ,CAACE,SAASC,WAAW;IACjC,OAAO,WAAP,GACE,IAAC;QACC,WAAU;QACV,OAAOF;QACP,eAAa,CAACD,QAAQhF;QACrB,GAAGoF,WAAW,CAACJ,KAAK;QACrB,aAAWA,QAAQhF;kBAEnB,kBAAC;YAAI,WAAU;sBACb,kBAAC;gBAAI,WAAU;0BAA4BkF,WAAWtF;;;;AAI9D;AAEA,SAASwE,QAAQ,EACfiB,OAAO,EACP1F,IAAI,EACJ9B,SAAS,EACT+B,QAAQ,EAMT;IACC,OAAOyF,UAAU,WAAVA,GACL,IAACC,aAAWA;QAAC,MAAM3F;QAAM,WAAW9B;kBACjC+B;SAGHA;AAEJ;AAEO,SAAS2F,KAAKC,QAAmB;IACtC,MAAMtH,QAAQuH,kBAAkB,QAAQD;IACxC,OAAO,WAAP,GAAO,IAAC3J,aAAWA;QAAE,GAAGqC,KAAK;;AAC/B"}
1
+ {"version":3,"file":"tree/tree.js","sources":["../../../../../src/tree/tree.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport { ChevronRight, File, Folder, FolderOpen, LoaderCircle } from 'lucide-react';\nimport {\n type CSSProperties,\n type HTMLAttributes,\n type KeyboardEvent,\n type ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { CheckboxControl as Checkbox } from '../checkbox/checkbox';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { estimateControlHeight } from '../density';\nimport { ResultControl as Result } from '../result/result';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { classes } from '../shared/classes';\nimport { inertProps } from '../shared/inert';\nimport { useFormattedText } from '../shared/use-formatted-text';\nimport { TreeDragRow, TreeDragScope } from './drag';\nimport { treeChecks, treeMatches, treeModel } from './model';\n\nexport interface TreeNode {\n key: string;\n title: ReactNode;\n children?: readonly TreeNode[];\n icon?: ReactNode;\n disabled?: boolean;\n selectable?: boolean;\n checkable?: boolean;\n disableCheckbox?: boolean;\n searchLabel?: string;\n isLeaf?: boolean;\n}\nexport interface TreeSelectInfo {\n node: TreeNode;\n selected: boolean;\n selectedNodes: readonly TreeNode[];\n}\nexport interface TreeCheckInfo {\n node: TreeNode;\n checked: boolean;\n checkedNodes: readonly TreeNode[];\n halfCheckedKeys: readonly string[];\n}\nexport interface TreeExpandInfo {\n node: TreeNode;\n expanded: boolean;\n}\nexport interface TreeDropInfo {\n node: TreeNode;\n target: TreeNode;\n position: 'before' | 'inside' | 'after';\n data: TreeNode[];\n}\nexport interface TreeProps\n extends Omit<HTMLAttributes<HTMLDivElement>, 'onSelect' | 'onDrop' | 'onLoad' | 'draggable'> {\n data: readonly TreeNode[];\n selectedKeys?: readonly string[];\n defaultSelectedKeys?: readonly string[];\n onSelect?: (keys: string[], info: TreeSelectInfo) => void;\n multiple?: boolean;\n selectable?: boolean;\n checkable?: boolean;\n checkStrictly?: boolean;\n checkedKeys?: readonly string[];\n defaultCheckedKeys?: readonly string[];\n onCheck?: (keys: string[], info: TreeCheckInfo) => void;\n expandedKeys?: readonly string[];\n defaultExpandedKeys?: readonly string[];\n defaultExpandAll?: boolean;\n onExpand?: (keys: string[], info: TreeExpandInfo) => void;\n disabled?: boolean;\n showLine?: boolean;\n showIcon?: boolean;\n searchValue?: string;\n filterTreeNode?: (node: TreeNode, query: string) => boolean;\n notFoundContent?: ReactNode;\n loadData?: (node: TreeNode, signal: AbortSignal) => Promise<readonly TreeNode[]>;\n cacheKey?: string | number;\n nodeRender?: (node: TreeNode) => ReactNode;\n onLoad?: (node: TreeNode, children: readonly TreeNode[]) => void;\n onLoadError?: (error: unknown, node: TreeNode) => void;\n virtual?: boolean;\n height?: number;\n itemHeight?: number;\n draggable?: boolean | ((node: TreeNode) => boolean);\n allowDrop?: (info: Omit<TreeDropInfo, 'data'>) => boolean;\n onDrop?: (info: TreeDropInfo) => void;\n}\nexport function TreeControl({\n data: suppliedData,\n selectedKeys,\n defaultSelectedKeys = [],\n onSelect,\n multiple = false,\n selectable = true,\n checkable = false,\n checkOnClick = false,\n expandOnClick = false,\n checkStrictly = false,\n checkedKeys,\n defaultCheckedKeys = [],\n onCheck,\n expandedKeys,\n defaultExpandedKeys = [],\n defaultExpandAll = false,\n onExpand,\n disabled = false,\n showLine = false,\n showIcon = false,\n searchValue = '',\n filterTreeNode,\n notFoundContent,\n loadData,\n cacheKey,\n nodeRender,\n onLoad,\n onLoadError,\n virtual = false,\n height = 320,\n itemHeight: itemHeightProp,\n draggable = false,\n allowDrop,\n onDrop,\n className,\n 'aria-label': label,\n ...props\n}: TreeProps & { checkOnClick?: boolean; expandOnClick?: boolean }) {\n const { messages, direction, theme, density } = useLeafConfig();\n const format = useFormattedText();\n const itemHeight = itemHeightProp ?? estimateControlHeight(theme, density) + 6;\n const [loaded, setLoaded] = useState<Map<string, readonly TreeNode[]>>(new Map());\n const [loading, setLoading] = useState<readonly string[]>([]);\n const requests = useRef(new Map<string, AbortController>());\n const latestLoad = useRef({ loadData, onLoad, onLoadError });\n latestLoad.current = { loadData, onLoad, onLoadError };\n // biome-ignore lint/correctness/useExhaustiveDependencies: Invalidate node caches whenever the supplied data, loader or cache version changes.\n useEffect(() => {\n for (const request of requests.current.values()) request.abort();\n requests.current.clear();\n setLoaded(new Map());\n setLoading([]);\n }, [suppliedData, loadData, cacheKey]);\n const data = useMemo(() => {\n const merge = (nodes: readonly TreeNode[]): TreeNode[] =>\n nodes.map((node) => {\n const children = node.children ?? loaded.get(node.key);\n return children\n ? { ...node, children: merge(children), isLeaf: children.length === 0 }\n : node;\n });\n return merge(suppliedData);\n }, [suppliedData, loaded]);\n useEffect(\n () => () => {\n for (const request of requests.current.values()) request.abort();\n requests.current.clear();\n },\n [],\n );\n const load = useCallback(\n (node: TreeNode) => {\n const callback = latestLoad.current.loadData;\n if (\n !callback ||\n node.isLeaf ||\n node.children !== undefined ||\n loaded.has(node.key) ||\n requests.current.has(node.key)\n )\n return;\n const request = new AbortController();\n requests.current.set(node.key, request);\n setLoading((previous) => [...previous, node.key]);\n Promise.resolve()\n .then(() => (request.signal.aborted ? [] : callback(node, request.signal)))\n .then((children) => {\n if (request.signal.aborted) return;\n setLoaded((previous) => new Map(previous).set(node.key, children ?? []));\n latestLoad.current.onLoad?.(node, children ?? []);\n })\n .catch((reason) => {\n if (!request.signal.aborted) latestLoad.current.onLoadError?.(reason, node);\n })\n .finally(() => {\n // A replayed effect may have started a newer request for the same node.\n if (requests.current.get(node.key) !== request) return;\n requests.current.delete(node.key);\n if (!request.signal.aborted)\n setLoading((previous) => previous.filter((key) => key !== node.key));\n });\n },\n [loaded],\n );\n const records = useMemo(() => treeModel(data), [data]);\n const [selection, setSelection] = useState<readonly string[]>(defaultSelectedKeys);\n const [checks, setChecks] = useState<readonly string[]>(defaultCheckedKeys);\n const [expansion, setExpansion] = useState<readonly string[]>(() =>\n defaultExpandAll ? [...records.keys()] : defaultExpandedKeys,\n );\n const selected = selectedKeys ?? selection;\n const expanded = new Set(expandedKeys ?? expansion);\n useEffect(() => {\n if (disabled) return;\n for (const key of expandedKeys ?? expansion) {\n const record = records.get(key);\n if (record) load(record.node);\n }\n }, [records, expandedKeys, expansion, disabled, load]);\n const state = useMemo(\n () => treeChecks(records, checkedKeys ?? checks, checkStrictly),\n [records, checkedKeys, checks, checkStrictly],\n );\n const checked = new Set(state.checked);\n const half = new Set(state.half);\n const matches = useMemo(\n () => treeMatches(records, searchValue, filterTreeNode),\n [records, searchValue, filterTreeNode],\n );\n const [active, setActive] = useState<string>();\n const elements = useRef(new Map<string, HTMLDivElement>());\n const anchor = useRef<string | undefined>(undefined);\n const typeAhead = useRef({ text: '', time: 0 });\n const visible: TreeNode[] = [];\n const isExpanded = (key: string) => (matches ? matches.visible.has(key) : expanded.has(key));\n const collect = (nodes: readonly TreeNode[]) => {\n for (const node of nodes) {\n if (matches && !matches.visible.has(node.key)) continue;\n visible.push(node);\n if (isExpanded(node.key) && node.children) collect(node.children);\n }\n };\n collect(data);\n const root = useRef<HTMLDivElement>(null);\n const virtualizer = useVirtualizer({\n count: visible.length,\n getScrollElement: () => root.current,\n estimateSize: () => Math.max(24, itemHeight),\n overscan: 5,\n enabled: virtual,\n initialRect: { height, width: 400 },\n getItemKey: (index) => visible[index]?.key ?? index,\n });\n const focusKey = visible.some((node) => node.key === active)\n ? active\n : (visible.find((node) => selected.includes(node.key))?.key ?? visible[0]?.key);\n const focus = (key?: string) => {\n if (key) {\n setActive(key);\n if (virtual) {\n const index = visible.findIndex((node) => node.key === key);\n if (index >= 0) virtualizer.scrollToIndex(index, { align: 'auto' });\n requestAnimationFrame(() => elements.current.get(key)?.focus());\n }\n elements.current.get(key)?.focus();\n }\n };\n const expand = (node: TreeNode, next: boolean) => {\n if (disabled) return;\n if (next) load(node);\n const keys = next\n ? [...new Set([...expanded, node.key])]\n : [...expanded].filter((key) => key !== node.key);\n if (expandedKeys === undefined) setExpansion(keys);\n onExpand?.(keys, { node, expanded: next });\n };\n const select = (\n node: TreeNode,\n modifiers?: { shiftKey: boolean; ctrlKey: boolean; metaKey: boolean },\n ) => {\n if (disabled || node.disabled || !selectable || node.selectable === false) return;\n let next = selected.includes(node.key) ? [] : [node.key];\n if (multiple) {\n if (modifiers?.shiftKey && anchor.current) {\n const first = visible.findIndex((item) => item.key === anchor.current);\n const last = visible.indexOf(node);\n next = visible\n .slice(Math.max(0, Math.min(first, last)), Math.max(first, last) + 1)\n .filter((item) => !item.disabled && item.selectable !== false)\n .map((item) => item.key);\n } else\n next = selected.includes(node.key)\n ? selected.filter((key) => key !== node.key)\n : [...selected, node.key];\n }\n if (!modifiers?.shiftKey) anchor.current = node.key;\n if (selectedKeys === undefined) setSelection(next);\n onSelect?.(next, {\n node,\n selected: next.includes(node.key),\n selectedNodes: next.flatMap((key) => records.get(key)?.node ?? []),\n });\n };\n const check = (node: TreeNode) => {\n if (disabled || node.disabled || node.disableCheckbox || node.checkable === false) return;\n const next = treeChecks(records, state.checked, checkStrictly, {\n key: node.key,\n checked: !checked.has(node.key),\n });\n if (checkedKeys === undefined) setChecks(next.checked);\n onCheck?.(next.checked, {\n node,\n checked: !checked.has(node.key),\n checkedNodes: next.checked.flatMap((key) => records.get(key)?.node ?? []),\n halfCheckedKeys: next.half,\n });\n };\n const keyDown = (event: KeyboardEvent<HTMLDivElement>, node: TreeNode) => {\n if (\n event.target !== event.currentTarget &&\n (event.target as HTMLElement).closest(\n 'input,textarea,select,button,a[href],[contenteditable=\"true\"]',\n )\n )\n return;\n if (event.defaultPrevented || (event.target as HTMLElement).closest('.leaf-tree__drag-handle'))\n return;\n event.stopPropagation();\n const index = visible.indexOf(node);\n const hasChildren = Boolean(\n node.children?.length || (loadData && !node.isLeaf && node.children === undefined),\n );\n if (event.key === 'ArrowDown') focus(visible[Math.min(index + 1, visible.length - 1)]?.key);\n else if (event.key === 'ArrowUp') focus(visible[Math.max(0, index - 1)]?.key);\n else if (event.key === 'Home') focus(visible[0]?.key);\n else if (event.key === 'End') focus(visible.at(-1)?.key);\n else if (event.key === (direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight')) {\n if (hasChildren && !isExpanded(node.key)) expand(node, true);\n else if (hasChildren)\n focus(node.children?.find((child) => !matches || matches.visible.has(child.key))?.key);\n } else if (event.key === (direction === 'rtl' ? 'ArrowRight' : 'ArrowLeft')) {\n if (hasChildren && isExpanded(node.key)) expand(node, false);\n else focus(records.get(node.key)?.parent);\n } else if (event.key === ' ' || event.key === 'Enter') {\n if (checkable && (event.key === ' ' || checkOnClick)) check(node);\n else if (expandOnClick && hasChildren && (!selectable || node.selectable === false))\n expand(node, !isExpanded(node.key));\n else select(node, event);\n } else if (event.key.length === 1 && !event.altKey && !event.ctrlKey && !event.metaKey) {\n const now = Date.now();\n typeAhead.current = {\n text:\n (now - typeAhead.current.time < 600 ? typeAhead.current.text : '') +\n event.key.toLocaleLowerCase(),\n time: now,\n };\n const ordered = [...visible.slice(index + 1), ...visible.slice(0, index + 1)];\n focus(\n ordered.find((item) =>\n (item.searchLabel ?? (typeof item.title === 'string' ? item.title : item.key))\n .toLocaleLowerCase()\n .startsWith(typeAhead.current.text),\n )?.key,\n );\n } else return;\n event.preventDefault();\n };\n const renderNode = (\n node: TreeNode,\n level: number,\n index: number,\n setSize: number,\n flat = false,\n ): ReactNode => {\n const hasChildren = Boolean(\n node.children?.length || (loadData && !node.isLeaf && node.children === undefined),\n );\n const opened = hasChildren && isExpanded(node.key);\n const inactive = disabled || node.disabled;\n const Icon = hasChildren ? (opened ? FolderOpen : Folder) : File;\n return (\n <div\n role=\"treeitem\"\n key={node.key}\n aria-level={level}\n aria-label={node.searchLabel ?? (typeof node.title === 'string' ? node.title : undefined)}\n aria-posinset={index + 1}\n aria-setsize={setSize}\n aria-expanded={hasChildren ? opened : undefined}\n aria-selected={\n selectable && node.selectable !== false ? selected.includes(node.key) : undefined\n }\n aria-checked={\n checkable && node.checkable !== false\n ? half.has(node.key)\n ? 'mixed'\n : checked.has(node.key)\n : undefined\n }\n aria-disabled={inactive || undefined}\n tabIndex={focusKey === node.key ? 0 : -1}\n className=\"leaf-tree__item\"\n data-node-key={node.key}\n ref={(element) => {\n if (element) elements.current.set(node.key, element);\n else elements.current.delete(node.key);\n }}\n onFocus={(event) => {\n if (event.target === event.currentTarget) setActive(node.key);\n }}\n onKeyDown={(event) => keyDown(event, node)}\n onClick={(event) => {\n event.stopPropagation();\n if (\n !event.currentTarget.firstElementChild?.contains(event.target as Node) ||\n (event.target as HTMLElement).closest(\n '.leaf-tree__check, .leaf-tree__drag-handle, input, textarea, select, button, a[href], [contenteditable=\"true\"]',\n )\n )\n return;\n focus(node.key);\n if (checkable && checkOnClick) check(node);\n else if (expandOnClick && hasChildren && (!selectable || node.selectable === false))\n expand(node, !opened);\n else select(node, event);\n }}\n >\n <TreeRow\n enabled={Boolean(draggable)}\n node={node}\n draggable={\n !disabled && Boolean(typeof draggable === 'function' ? draggable(node) : draggable)\n }\n >\n {' '}\n <div\n className=\"leaf-tree__row\"\n data-selected={selected.includes(node.key) || undefined}\n data-disabled={inactive || undefined}\n style={{ paddingInlineStart: `${(level - 1) * 20 + 4}px` }}\n >\n <button\n type=\"button\"\n className=\"leaf-tree__toggle\"\n tabIndex={-1}\n aria-label={format(opened ? 'tree.collapseNode' : 'tree.expandNode', {\n label: node.searchLabel ?? (typeof node.title === 'string' ? node.title : node.key),\n })}\n disabled={disabled}\n data-hidden={!hasChildren || undefined}\n data-open={opened || undefined}\n aria-hidden={!hasChildren || undefined}\n onClick={(event) => {\n event.stopPropagation();\n focus(node.key);\n expand(node, !opened);\n }}\n >\n {loading.includes(node.key) ? (\n <LoaderCircle size={14} className=\"leaf-tree__spinner\" aria-hidden=\"true\" />\n ) : (\n hasChildren && <ChevronRight size={14} aria-hidden=\"true\" />\n )}\n </button>\n {checkable && node.checkable !== false && (\n <span className=\"leaf-tree__check\">\n <Checkbox\n checked={checked.has(node.key)}\n indeterminate={half.has(node.key)}\n disabled={inactive || node.disableCheckbox}\n tabIndex={-1}\n aria-label={\n node.searchLabel ?? (typeof node.title === 'string' ? node.title : node.key)\n }\n onChange={() => {\n focus(node.key);\n check(node);\n }}\n />\n </span>\n )}\n {(showIcon || node.icon) && (\n <span className=\"leaf-tree__icon\" aria-hidden=\"true\">\n {node.icon ?? <Icon size={16} />}\n </span>\n )}\n <span\n className=\"leaf-tree__title\"\n data-match={matches?.matched.has(node.key) || undefined}\n >\n {nodeRender?.(node) ?? node.title}\n </span>\n </div>\n </TreeRow>\n {hasChildren && !flat && (\n <TreeGroup\n open={opened}\n style={{ '--leaf-tree-line-left': `${(level - 1) * 20 + 14}px` } as CSSProperties}\n >\n {() => renderNodes(node.children ?? [], level + 1)}\n </TreeGroup>\n )}\n </div>\n );\n };\n\n const renderNodes = (nodes: readonly TreeNode[], level: number): ReactNode => {\n const siblings = nodes.filter((node) => !matches || matches.visible.has(node.key));\n return siblings.map((node, index) => renderNode(node, level, index, siblings.length));\n };\n const content = (\n <ScrollbarControl\n ref={root}\n viewportProps={{\n ...props,\n 'aria-multiselectable': multiple || checkable || undefined,\n 'aria-disabled': disabled || undefined,\n }}\n style={{ ...(virtual ? { height } : {}), ...props.style }}\n viewportStyle={{ position: 'relative' }}\n role=\"tree\"\n aria-label={label ?? messages.tree.label}\n tabIndex={-1}\n scrollbarTabIndex={-1}\n className={classes('leaf-tree', showLine && 'leaf-tree--lines', className)}\n >\n {visible.length ? (\n virtual ? (\n <div style={{ position: 'relative', height: virtualizer.getTotalSize() }}>\n {virtualizer.getVirtualItems().map((row) => {\n const node = visible[row.index];\n if (!node) return null;\n const record = records.get(node.key);\n const siblings = (\n record?.parent ? (records.get(record.parent)?.node.children ?? []) : data\n ).filter((item) => !matches || matches.visible.has(item.key));\n return (\n <div\n key={node.key}\n ref={virtualizer.measureElement}\n data-index={row.index}\n style={{\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n transform: `translateY(${row.start}px)`,\n }}\n >\n {renderNode(\n node,\n record?.level ?? 1,\n siblings.findIndex((item) => item.key === node.key),\n siblings.length,\n true,\n )}\n </div>\n );\n })}\n </div>\n ) : (\n renderNodes(data, 1)\n )\n ) : (\n (notFoundContent ?? <Result size=\"sm\" title={messages.select.empty} icon={null} />)\n )}\n </ScrollbarControl>\n );\n return draggable ? (\n <TreeDragScope data={data} nodes={records} allowDrop={allowDrop} onDrop={onDrop}>\n {content}\n </TreeDragScope>\n ) : (\n content\n );\n}\n\nfunction TreeGroup({\n open,\n style,\n children,\n}: {\n open: boolean;\n style: CSSProperties;\n children: () => ReactNode;\n}) {\n const [visited, setVisited] = useState(open);\n if (open && !visited) setVisited(true);\n return (\n <fieldset\n className=\"leaf-tree__group\"\n style={style}\n aria-hidden={!open || undefined}\n {...inertProps(!open)}\n data-open={open || undefined}\n >\n <div className=\"leaf-tree__group-inner\">\n <div className=\"leaf-tree__group-content\">{visited && children()}</div>\n </div>\n </fieldset>\n );\n}\n\nfunction TreeRow({\n enabled,\n node,\n draggable,\n children,\n}: {\n enabled: boolean;\n node: TreeNode;\n draggable: boolean;\n children: ReactNode;\n}) {\n return enabled ? (\n <TreeDragRow node={node} draggable={draggable}>\n {children}\n </TreeDragRow>\n ) : (\n children\n );\n}\n\nexport function Tree(rawProps: TreeProps) {\n const props = useComponentProps('Tree', rawProps);\n return <TreeControl {...props} />;\n}\n"],"names":["TreeControl","suppliedData","selectedKeys","defaultSelectedKeys","onSelect","multiple","selectable","checkable","checkOnClick","expandOnClick","checkStrictly","checkedKeys","defaultCheckedKeys","onCheck","expandedKeys","defaultExpandedKeys","defaultExpandAll","onExpand","disabled","showLine","showIcon","searchValue","filterTreeNode","notFoundContent","loadData","cacheKey","nodeRender","onLoad","onLoadError","virtual","height","itemHeightProp","draggable","allowDrop","onDrop","className","label","props","messages","direction","theme","density","useLeafConfig","format","useFormattedText","itemHeight","estimateControlHeight","loaded","setLoaded","useState","Map","loading","setLoading","requests","useRef","latestLoad","useEffect","request","data","useMemo","merge","nodes","node","children","load","useCallback","callback","undefined","AbortController","previous","Promise","reason","key","records","treeModel","selection","setSelection","checks","setChecks","expansion","setExpansion","selected","expanded","Set","record","state","treeChecks","checked","half","matches","treeMatches","active","setActive","elements","anchor","typeAhead","visible","isExpanded","collect","root","virtualizer","useVirtualizer","Math","index","focusKey","focus","requestAnimationFrame","expand","next","keys","select","modifiers","first","item","last","check","keyDown","event","hasChildren","Boolean","child","now","Date","ordered","renderNode","level","setSize","flat","opened","inactive","Icon","FolderOpen","Folder","File","element","TreeRow","LoaderCircle","ChevronRight","Checkbox","TreeGroup","renderNodes","siblings","content","ScrollbarControl","classes","row","Result","TreeDragScope","open","style","visited","setVisited","inertProps","enabled","TreeDragRow","Tree","rawProps","useComponentProps"],"mappings":"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"}
@@ -16,8 +16,8 @@ import { SelectionContent } from "../shared/selection-content.js";
16
16
  import { treeModel } from "../tree/model.js";
17
17
  import { TreeControl } from "../tree/tree.js";
18
18
  const emptyKeys = [];
19
- const InternalTreeSelect = /*#__PURE__*/ forwardRef(function({ options, value, defaultValue = null, onChange, multiple = false, treeCheckable = false, checkStrictly = false, showCheckedStrategy = 'child', showSearch = true, onSearch, allowClear = true, defaultExpandAll = false, treeDefaultExpandedKeys = emptyKeys, size = 'md', status: statusProp, disabled: disabledProp, required: requiredProp, popupWidth, popupMaxWidth = 420, notFoundContent, onOpenChange, loadData, onLoadError, virtual = false, listHeight = 256, itemHeight: itemHeightProp, inputReadOnly, open: controlledOpen, defaultOpen, maxTagCount, tagWrap = true, maxCount = 1 / 0, treeExpandedKeys, onExpand, filterTreeNode, nodeRender, cacheKey, popupPlacement, popupClassName, popupStyle, popupRender, getPopupContainer, name, form, className, style, placeholder, 'aria-label': label, ...props }, forwardedRef) {
20
- const { messages, theme, density } = useLeafConfig();
19
+ const InternalTreeSelect = /*#__PURE__*/ forwardRef(function({ options, value, defaultValue = null, onChange, multiple = false, treeCheckable = false, checkStrictly = false, showCheckedStrategy = 'child', showSearch = true, onSearch, allowClear = true, defaultExpandAll = false, treeDefaultExpandedKeys = emptyKeys, size = 'md', status: statusProp, disabled: disabledProp, required: requiredProp, popupWidth = 'trigger', popupMaxWidth, notFoundContent, onOpenChange, loadData, onLoadError, virtual = false, listHeight = 256, itemHeight: itemHeightProp, inputReadOnly, open: controlledOpen, defaultOpen, maxTagCount, tagWrap = true, maxCount = 1 / 0, treeExpandedKeys, onExpand, filterTreeNode, nodeRender, cacheKey, popupPlacement, popupClassName, popupStyle, popupRender, getPopupContainer, name, form, className, style, placeholder, 'aria-label': label, ...props }, forwardedRef) {
20
+ const { messages, theme, density, direction: configuredDirection } = useLeafConfig();
21
21
  const itemHeight = itemHeightProp ?? Math.max(24, estimateControlHeight(theme, density) - 4) + 6;
22
22
  const field = useFormField();
23
23
  const disabled = disabledProp || field?.disabled;
@@ -160,6 +160,7 @@ const InternalTreeSelect = /*#__PURE__*/ forwardRef(function({ options, value, d
160
160
  ref: root,
161
161
  className: classes('leaf-tree-select', `leaf-tree-select--${size}`, multi && 'leaf-tree-select--multiple', className),
162
162
  style: style,
163
+ dir: props.dir ?? configuredDirection,
163
164
  "data-disabled": disabled || void 0,
164
165
  "data-status": status,
165
166
  "data-open": open || void 0,
@@ -332,8 +333,8 @@ const InternalTreeSelect = /*#__PURE__*/ forwardRef(function({ options, value, d
332
333
  open: open,
333
334
  triggerRef: root,
334
335
  panelRef: panel,
335
- minWidth: "trigger",
336
- width: popupWidth ?? 'max-content',
336
+ matchWidth: 'trigger' === popupWidth,
337
+ width: 'trigger' === popupWidth ? void 0 : 'auto' === popupWidth ? 'max-content' : popupWidth,
337
338
  maxWidth: popupMaxWidth,
338
339
  maxHeight: 320,
339
340
  className: classes('leaf-floating leaf-tree-select__panel', popupClassName),