@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":"treeselect/treeselect.js","sources":["../../../../../src/treeselect/treeselect.tsx"],"sourcesContent":["import { ChevronDown, X } from 'lucide-react';\nimport {\n forwardRef,\n type InputHTMLAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { estimateControlHeight } from '../density';\nimport { FieldScope, useFormField } from '../form/form';\nimport { classes } from '../shared/classes';\nimport { FormValue, useFieldValue, useMergedRef } from '../shared/field';\nimport {\n FloatingPanel,\n type PopupOptions,\n useFloatingDismiss,\n usePopupState,\n} from '../shared/floating';\nimport { useListMotion } from '../shared/motion';\nimport { SelectionContent } from '../shared/selection-content';\nimport type { ControlSize, ControlStatus } from '../shared/types';\nimport type { TreeNode } from '../tree';\nimport { treeModel } from '../tree/model';\nimport { TreeControl as Tree } from '../tree/tree';\n\nexport interface TreeSelectOption {\n value: string;\n label: ReactNode;\n children?: readonly TreeSelectOption[];\n disabled?: boolean;\n selectable?: boolean;\n disableCheckbox?: boolean;\n icon?: ReactNode;\n searchLabel?: string;\n isLeaf?: boolean;\n}\nexport type TreeSelectValue = string | readonly string[] | null;\ninterface InternalTreeSelectProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'defaultValue' | 'onChange' | 'size' | 'multiple'\n >,\n PopupOptions {\n options: readonly TreeSelectOption[];\n value?: TreeSelectValue;\n defaultValue?: TreeSelectValue;\n onChange?: (value: TreeSelectValue) => void;\n multiple?: boolean;\n treeCheckable?: boolean;\n checkStrictly?: boolean;\n showCheckedStrategy?: 'child' | 'parent' | 'all';\n showSearch?: boolean;\n onSearch?: (query: string) => void;\n allowClear?: boolean;\n defaultExpandAll?: boolean;\n treeDefaultExpandedKeys?: readonly string[];\n size?: ControlSize;\n status?: ControlStatus;\n popupWidth?: number | string;\n popupMaxWidth?: number | string;\n notFoundContent?: ReactNode;\n onOpenChange?: (open: boolean) => void;\n loadData?: (\n option: TreeSelectOption,\n signal: AbortSignal,\n ) => Promise<readonly TreeSelectOption[]>;\n onLoadError?: (error: unknown, option: TreeSelectOption) => void;\n virtual?: boolean;\n listHeight?: number;\n itemHeight?: number;\n inputReadOnly?: boolean;\n open?: boolean;\n defaultOpen?: boolean;\n maxTagCount?: number | 'responsive';\n tagWrap?: boolean;\n maxCount?: number;\n treeExpandedKeys?: readonly string[];\n onExpand?: (keys: string[]) => void;\n filterTreeNode?: (option: TreeSelectOption, query: string) => boolean;\n nodeRender?: (option: TreeSelectOption) => ReactNode;\n cacheKey?: string | number;\n}\nconst emptyKeys: readonly string[] = [];\nconst InternalTreeSelect = forwardRef<HTMLInputElement, InternalTreeSelectProps>(\n function TreeSelect(\n {\n options,\n value,\n defaultValue = null,\n onChange,\n multiple = false,\n treeCheckable = false,\n checkStrictly = false,\n showCheckedStrategy = 'child',\n showSearch = true,\n onSearch,\n allowClear = true,\n defaultExpandAll = false,\n treeDefaultExpandedKeys = emptyKeys,\n size = 'md',\n status: statusProp,\n disabled: disabledProp,\n required: requiredProp,\n popupWidth,\n popupMaxWidth = 420,\n notFoundContent,\n onOpenChange,\n loadData,\n onLoadError,\n virtual = false,\n listHeight = 256,\n itemHeight: itemHeightProp,\n inputReadOnly,\n open: controlledOpen,\n defaultOpen,\n maxTagCount,\n tagWrap = true,\n maxCount = Infinity,\n treeExpandedKeys,\n onExpand,\n filterTreeNode,\n nodeRender,\n cacheKey,\n popupPlacement,\n popupClassName,\n popupStyle,\n popupRender,\n getPopupContainer,\n name,\n form,\n className,\n style,\n placeholder,\n 'aria-label': label,\n ...props\n },\n forwardedRef,\n ) {\n const { messages, theme, density } = useLeafConfig();\n const itemHeight =\n itemHeightProp ?? Math.max(24, estimateControlHeight(theme, density) - 4) + 6;\n const field = useFormField();\n const disabled = disabledProp || field?.disabled;\n const required = requiredProp ?? field?.required;\n const status = statusProp ?? (field?.error ? 'error' : undefined);\n const multi = multiple || treeCheckable;\n const trigger = useRef<HTMLInputElement>(null);\n const ref = useMergedRef(trigger, forwardedRef);\n const root = useRef<HTMLDivElement>(null);\n const panel = useRef<HTMLDivElement>(null);\n const pendingFocus = useRef(false);\n const [current, setCurrent] = useFieldValue(value, defaultValue, trigger, form);\n const selected = typeof current === 'string' ? [current] : (current ?? emptyKeys);\n useListMotion(root, selected[0], multi ? '' : '.leaf-tree-select__input-wrap[data-motion-key]');\n const [query, setQuery] = useState<string | null>(null);\n const searchQuery = query ?? '';\n const [open, setOpen] = usePopupState(\n disabled || props.readOnly,\n onOpenChange,\n controlledOpen,\n defaultOpen,\n );\n const id = `${useId()}-tree-select`;\n const [loadedOptions, setLoadedOptions] = useState<Map<string, readonly TreeSelectOption[]>>(\n new Map(),\n );\n const generation = useRef(0);\n // biome-ignore lint/correctness/useExhaustiveDependencies: Invalidate lazy options on source and cache-version changes.\n useEffect(() => {\n generation.current++;\n setLoadedOptions(new Map());\n }, [options, loadData, cacheKey]);\n const allOptions = useMemo(() => {\n const merge = (entries: readonly TreeSelectOption[]): TreeSelectOption[] =>\n entries.map((option) => {\n const children = option.children ?? loadedOptions.get(option.value);\n return children ? { ...option, children: merge(children) } : option;\n });\n return merge(options);\n }, [options, loadedOptions]);\n const optionRecords = useMemo(() => {\n const map = new Map<string, TreeSelectOption>();\n const visit = (entries: readonly TreeSelectOption[]) => {\n for (const option of entries) {\n map.set(option.value, option);\n if (option.children) visit(option.children);\n }\n };\n visit(allOptions);\n return map;\n }, [allOptions]);\n const latestLoader = useRef({ loadData, optionRecords });\n latestLoader.current = { loadData, optionRecords };\n const lazyLoad = useCallback(async (node: TreeNode, signal: AbortSignal) => {\n const snapshot = generation.current;\n const option = latestLoader.current.optionRecords.get(node.key);\n if (!option || !latestLoader.current.loadData) return [];\n const children = await latestLoader.current.loadData(option, signal);\n if (!signal.aborted && snapshot === generation.current)\n setLoadedOptions((previous) => new Map(previous).set(node.key, children));\n const convert = (entries: readonly TreeSelectOption[]): TreeNode[] =>\n entries.map(({ value: key, label: title, children, ...entry }) => ({\n ...entry,\n key,\n title,\n children: children ? convert(children) : undefined,\n }));\n return convert(children);\n }, []);\n const data = useMemo(() => {\n const convert = (nodes: readonly TreeSelectOption[]): TreeNode[] =>\n nodes.map(({ value: key, label: title, children, ...node }) => ({\n ...node,\n key,\n title,\n children: children ? convert(children) : undefined,\n }));\n return convert(allOptions);\n }, [allOptions]);\n const records = useMemo(() => treeModel(data), [data]);\n const [expandedKeys, setExpandedKeys] = useState<readonly string[]>(() =>\n defaultExpandAll ? [...records.keys()] : treeDefaultExpandedKeys,\n );\n const close = () => {\n setOpen(false);\n setQuery(null);\n };\n useFloatingDismiss(open, close, trigger, panel, root);\n useEffect(() => {\n if (!open) setQuery(null);\n else if (pendingFocus.current) {\n panel.current?.querySelector<HTMLElement>('[role=\"treeitem\"][tabindex=\"0\"]')?.focus();\n pendingFocus.current = false;\n }\n }, [open]);\n const commit = (keys: readonly string[]) => {\n if (disabled || props.readOnly || keys.length > maxCount) return;\n const next: TreeSelectValue = multi ? [...keys] : (keys[0] ?? null);\n setCurrent(next);\n onChange?.(next);\n setQuery(null);\n if (!multi) {\n setOpen(false);\n trigger.current?.focus();\n }\n };\n const canRemove = (key: string) =>\n !records.get(key)?.node.disabled && !records.get(key)?.node.disableCheckbox;\n const clearable = allowClear && selected.some(canRemove) && !disabled && !props.readOnly;\n const caption = (key: string) => records.get(key)?.node.title ?? key;\n const a11yCaption = (key: string) =>\n records.get(key)?.node.searchLabel ??\n (typeof caption(key) === 'string' || typeof caption(key) === 'number'\n ? String(caption(key))\n : key);\n const selectedCaption = selected[0] === undefined ? undefined : caption(selected[0]);\n const hasRichCaption =\n selectedCaption !== undefined &&\n typeof selectedCaption !== 'string' &&\n typeof selectedCaption !== 'number';\n const showCaption = !multi && hasRichCaption && (!showSearch || !open || query === null);\n const inputValue = multi\n ? searchQuery\n : showSearch && open\n ? (query ?? (selected[0] === undefined ? '' : a11yCaption(selected[0])))\n : selected[0] === undefined\n ? ''\n : a11yCaption(selected[0]);\n const beginSearch = () => {\n if (!showSearch || disabled || props.readOnly || inputReadOnly) return;\n if (!multi && query === null) trigger.current?.select();\n setOpen(true);\n };\n return (\n <>\n {/* biome-ignore lint/a11y/noStaticElementInteractions: The wrapper extends the input's clickable area, as in Select. */}\n {/* biome-ignore lint/a11y/useKeyWithClickEvents: The enclosed combobox owns keyboard interaction. */}\n <div\n ref={root}\n className={classes(\n 'leaf-tree-select',\n `leaf-tree-select--${size}`,\n multi && 'leaf-tree-select--multiple',\n className,\n )}\n style={style}\n data-disabled={disabled || undefined}\n data-status={status}\n data-open={open || undefined}\n data-clearable={clearable || undefined}\n data-searchable={showSearch || undefined}\n onMouseDown={(event) => {\n if (\n !disabled &&\n event.target instanceof Element &&\n !event.target.closest('input, button, a')\n )\n event.preventDefault();\n }}\n onClick={(event) => {\n if (\n !disabled &&\n event.target instanceof Element &&\n !event.target.closest('input, button, a')\n ) {\n trigger.current?.focus();\n trigger.current?.click();\n }\n }}\n >\n <SelectionContent\n className=\"leaf-tree-select__content\"\n tagClassName=\"leaf-tree-select__tag\"\n tagWrap={tagWrap}\n maxTagCount={maxTagCount}\n searchable={showSearch && !props.readOnly && !inputReadOnly}\n query={searchQuery}\n removeLabel={messages.common.remove}\n items={\n multi\n ? selected.map((key) => ({\n key,\n label: caption(key),\n text: a11yCaption(key),\n remove:\n canRemove(key) && !disabled && !props.readOnly\n ? () => {\n commit(selected.filter((item) => item !== key));\n trigger.current?.focus();\n }\n : undefined,\n }))\n : undefined\n }\n >\n <span className=\"leaf-tree-select__input-wrap\" data-motion-key={selected[0] ?? ''}>\n {showCaption && (\n <span className=\"leaf-tree-select__value\" aria-hidden=\"true\">\n {selectedCaption}\n </span>\n )}\n <input\n {...props}\n ref={ref}\n id={props.id ?? field?.id}\n role=\"combobox\"\n aria-haspopup=\"tree\"\n aria-expanded={open}\n aria-controls={open ? id : undefined}\n aria-autocomplete={showSearch ? 'list' : undefined}\n aria-label={label ?? (field?.labelId ? undefined : messages.treeSelect.placeholder)}\n aria-labelledby={props['aria-labelledby'] ?? field?.labelId}\n aria-describedby={\n [props['aria-describedby'], field?.descriptionId].filter(Boolean).join(' ') ||\n undefined\n }\n aria-required={required || undefined}\n aria-invalid={status === 'error' || props['aria-invalid']}\n autoComplete=\"off\"\n className={classes(\n 'leaf-tree-select__input',\n showCaption && 'leaf-tree-select__input--caption',\n )}\n value={inputValue}\n readOnly={!showSearch || props.readOnly || inputReadOnly}\n disabled={disabled}\n placeholder={\n selected.length ? undefined : (placeholder ?? messages.treeSelect.placeholder)\n }\n onClick={(event) => {\n props.onClick?.(event);\n if (event.defaultPrevented) return;\n if (open && !showSearch) close();\n else setOpen(true);\n }}\n onBeforeInput={(event) => {\n props.onBeforeInput?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onPaste={(event) => {\n props.onPaste?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onCompositionStart={(event) => {\n props.onCompositionStart?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onChange={(event) => {\n setQuery(event.target.value);\n onSearch?.(event.target.value);\n setOpen(true);\n }}\n onKeyDown={(event) => {\n props.onKeyDown?.(event);\n if (event.defaultPrevented || disabled || event.nativeEvent.isComposing) return;\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n (event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete')\n )\n beginSearch();\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!open) {\n pendingFocus.current = true;\n setOpen(true);\n } else\n panel.current\n ?.querySelector<HTMLElement>('[role=\"treeitem\"][tabindex=\"0\"]')\n ?.focus();\n } else if (event.key === 'Enter' && !open) {\n event.preventDefault();\n setOpen(true);\n } else if (event.key === 'Backspace' && !searchQuery && multi) {\n const last = [...selected].reverse().find(canRemove);\n if (last) {\n event.preventDefault();\n commit(selected.filter((key) => key !== last));\n }\n }\n }}\n />\n </span>\n </SelectionContent>\n {clearable && (\n <button\n type=\"button\"\n className=\"leaf-tree-select__clear\"\n aria-label={messages.treeSelect.clear}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n commit(selected.filter((key) => !canRemove(key)));\n trigger.current?.focus();\n }}\n >\n <X size={14} aria-hidden=\"true\" />\n </button>\n )}\n <button\n type=\"button\"\n className=\"leaf-tree-select__arrow\"\n tabIndex={-1}\n disabled={disabled}\n aria-label={messages.treeSelect.placeholder}\n onClick={() => {\n trigger.current?.focus();\n if (open) close();\n else setOpen(true);\n }}\n >\n <ChevronDown size={16} aria-hidden=\"true\" />\n </button>\n <FormValue\n value={selected[0] ?? ''}\n name={name}\n form={form}\n required={required}\n disabled={disabled}\n triggerRef={trigger}\n />\n {selected.slice(1).map((key) => (\n <input\n type=\"hidden\"\n key={key}\n name={name}\n form={form}\n value={key}\n disabled={disabled}\n />\n ))}\n </div>\n <FloatingPanel\n placement={popupPlacement}\n container={getPopupContainer}\n render={popupRender}\n style={popupStyle}\n open={open}\n triggerRef={root}\n panelRef={panel}\n minWidth=\"trigger\"\n width={popupWidth ?? 'max-content'}\n maxWidth={popupMaxWidth}\n maxHeight={320}\n className={classes('leaf-floating leaf-tree-select__panel', popupClassName)}\n >\n <FieldScope>\n <Tree\n virtual={virtual}\n height={listHeight}\n itemHeight={itemHeight}\n loadData={loadData ? lazyLoad : undefined}\n cacheKey={cacheKey}\n disabled={disabled || props.readOnly}\n expandedKeys={treeExpandedKeys ?? expandedKeys}\n onExpand={(keys) => {\n if (treeExpandedKeys === undefined) setExpandedKeys(keys);\n onExpand?.(keys);\n }}\n checkOnClick={treeCheckable}\n expandOnClick\n filterTreeNode={\n filterTreeNode\n ? (node, query) => {\n const option = optionRecords.get(node.key);\n return !!option && filterTreeNode(option, query);\n }\n : undefined\n }\n nodeRender={\n nodeRender\n ? (node) => {\n const option = optionRecords.get(node.key);\n return option ? nodeRender(option) : node.title;\n }\n : undefined\n }\n onLoadError={(error, node) => {\n const option = optionRecords.get(node.key);\n if (option) onLoadError?.(error, option);\n }}\n id={id}\n data={data}\n aria-label={label ?? messages.treeSelect.placeholder}\n multiple={multi}\n selectable={!treeCheckable}\n checkable={treeCheckable}\n checkStrictly={checkStrictly}\n selectedKeys={treeCheckable ? emptyKeys : selected}\n checkedKeys={selected}\n searchValue={searchQuery}\n notFoundContent={notFoundContent ?? messages.treeSelect.empty}\n onSelect={(keys) => commit(keys)}\n onCheck={(keys) => {\n const checked = new Set(keys);\n commit(\n checkStrictly || showCheckedStrategy === 'all'\n ? keys\n : keys.filter((key) => {\n const record = records.get(key);\n if (!record) return false;\n if (showCheckedStrategy === 'parent')\n return !record.parent || !checked.has(record.parent);\n return !(record.node.children ?? []).some((child) =>\n checked.has(child.key),\n );\n }),\n );\n }}\n />\n </FieldScope>\n </FloatingPanel>\n </>\n );\n },\n);\nInternalTreeSelect.displayName = 'TreeSelect';\nexport type TreeSelectProps = Omit<\n InternalTreeSelectProps,\n 'value' | 'defaultValue' | 'onChange' | 'multiple' | 'treeCheckable'\n> &\n (\n | {\n multiple?: false;\n treeCheckable?: false;\n value?: string | null;\n defaultValue?: string | null;\n onChange?: (value: string | null) => void;\n }\n | {\n multiple: true;\n treeCheckable?: boolean;\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (value: readonly string[]) => void;\n }\n | {\n treeCheckable: true;\n multiple?: boolean;\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (value: readonly string[]) => void;\n }\n );\nexport const TreeSelectControl = InternalTreeSelect as React.ForwardRefExoticComponent<\n TreeSelectProps & React.RefAttributes<HTMLInputElement>\n>;\nexport const TreeSelect = forwardRef<HTMLInputElement, TreeSelectProps>(\n function TreeSelect(rawProps, ref) {\n const props = useComponentProps('TreeSelect', rawProps);\n return <TreeSelectControl {...props} ref={ref} />;\n },\n);\nTreeSelect.displayName = 'TreeSelect';\n"],"names":["emptyKeys","InternalTreeSelect","forwardRef","options","value","defaultValue","onChange","multiple","treeCheckable","checkStrictly","showCheckedStrategy","showSearch","onSearch","allowClear","defaultExpandAll","treeDefaultExpandedKeys","size","statusProp","disabledProp","requiredProp","popupWidth","popupMaxWidth","notFoundContent","onOpenChange","loadData","onLoadError","virtual","listHeight","itemHeightProp","inputReadOnly","controlledOpen","defaultOpen","maxTagCount","tagWrap","maxCount","Infinity","treeExpandedKeys","onExpand","filterTreeNode","nodeRender","cacheKey","popupPlacement","popupClassName","popupStyle","popupRender","getPopupContainer","name","form","className","style","placeholder","label","props","forwardedRef","messages","theme","density","useLeafConfig","itemHeight","Math","estimateControlHeight","field","useFormField","disabled","required","status","undefined","multi","trigger","useRef","ref","useMergedRef","root","panel","pendingFocus","current","setCurrent","useFieldValue","selected","useListMotion","query","setQuery","useState","searchQuery","open","setOpen","usePopupState","id","useId","loadedOptions","setLoadedOptions","Map","generation","useEffect","allOptions","useMemo","merge","entries","option","children","optionRecords","map","visit","latestLoader","lazyLoad","useCallback","node","signal","snapshot","previous","convert","key","title","entry","data","nodes","records","treeModel","expandedKeys","setExpandedKeys","close","useFloatingDismiss","commit","keys","next","canRemove","clearable","caption","a11yCaption","String","selectedCaption","hasRichCaption","showCaption","inputValue","beginSearch","classes","event","Element","SelectionContent","item","Boolean","last","X","ChevronDown","FormValue","FloatingPanel","FieldScope","Tree","error","checked","Set","record","child","TreeSelectControl","TreeSelect","rawProps","useComponentProps"],"mappings":"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"}
1
+ {"version":3,"file":"treeselect/treeselect.js","sources":["../../../../../src/treeselect/treeselect.tsx"],"sourcesContent":["import { ChevronDown, X } from 'lucide-react';\nimport {\n forwardRef,\n type InputHTMLAttributes,\n type ReactNode,\n useCallback,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { estimateControlHeight } from '../density';\nimport { FieldScope, useFormField } from '../form/form';\nimport { classes } from '../shared/classes';\nimport { FormValue, useFieldValue, useMergedRef } from '../shared/field';\nimport {\n FloatingPanel,\n type PopupOptions,\n useFloatingDismiss,\n usePopupState,\n} from '../shared/floating';\nimport { useListMotion } from '../shared/motion';\nimport { SelectionContent } from '../shared/selection-content';\nimport type { ControlSize, ControlStatus } from '../shared/types';\nimport type { TreeNode } from '../tree';\nimport { treeModel } from '../tree/model';\nimport { TreeControl as Tree } from '../tree/tree';\n\nexport interface TreeSelectOption {\n value: string;\n label: ReactNode;\n children?: readonly TreeSelectOption[];\n disabled?: boolean;\n selectable?: boolean;\n disableCheckbox?: boolean;\n icon?: ReactNode;\n searchLabel?: string;\n isLeaf?: boolean;\n}\nexport type TreeSelectValue = string | readonly string[] | null;\ninterface InternalTreeSelectProps\n extends Omit<\n InputHTMLAttributes<HTMLInputElement>,\n 'value' | 'defaultValue' | 'onChange' | 'size' | 'multiple'\n >,\n PopupOptions {\n options: readonly TreeSelectOption[];\n value?: TreeSelectValue;\n defaultValue?: TreeSelectValue;\n onChange?: (value: TreeSelectValue) => void;\n multiple?: boolean;\n treeCheckable?: boolean;\n checkStrictly?: boolean;\n showCheckedStrategy?: 'child' | 'parent' | 'all';\n showSearch?: boolean;\n onSearch?: (query: string) => void;\n allowClear?: boolean;\n defaultExpandAll?: boolean;\n treeDefaultExpandedKeys?: readonly string[];\n size?: ControlSize;\n status?: ControlStatus;\n popupWidth?: number | string;\n popupMaxWidth?: number | string;\n notFoundContent?: ReactNode;\n onOpenChange?: (open: boolean) => void;\n loadData?: (\n option: TreeSelectOption,\n signal: AbortSignal,\n ) => Promise<readonly TreeSelectOption[]>;\n onLoadError?: (error: unknown, option: TreeSelectOption) => void;\n virtual?: boolean;\n listHeight?: number;\n itemHeight?: number;\n inputReadOnly?: boolean;\n open?: boolean;\n defaultOpen?: boolean;\n maxTagCount?: number | 'responsive';\n tagWrap?: boolean;\n maxCount?: number;\n treeExpandedKeys?: readonly string[];\n onExpand?: (keys: string[]) => void;\n filterTreeNode?: (option: TreeSelectOption, query: string) => boolean;\n nodeRender?: (option: TreeSelectOption) => ReactNode;\n cacheKey?: string | number;\n}\nconst emptyKeys: readonly string[] = [];\nconst InternalTreeSelect = forwardRef<HTMLInputElement, InternalTreeSelectProps>(\n function TreeSelect(\n {\n options,\n value,\n defaultValue = null,\n onChange,\n multiple = false,\n treeCheckable = false,\n checkStrictly = false,\n showCheckedStrategy = 'child',\n showSearch = true,\n onSearch,\n allowClear = true,\n defaultExpandAll = false,\n treeDefaultExpandedKeys = emptyKeys,\n size = 'md',\n status: statusProp,\n disabled: disabledProp,\n required: requiredProp,\n popupWidth = 'trigger',\n popupMaxWidth,\n notFoundContent,\n onOpenChange,\n loadData,\n onLoadError,\n virtual = false,\n listHeight = 256,\n itemHeight: itemHeightProp,\n inputReadOnly,\n open: controlledOpen,\n defaultOpen,\n maxTagCount,\n tagWrap = true,\n maxCount = Infinity,\n treeExpandedKeys,\n onExpand,\n filterTreeNode,\n nodeRender,\n cacheKey,\n popupPlacement,\n popupClassName,\n popupStyle,\n popupRender,\n getPopupContainer,\n name,\n form,\n className,\n style,\n placeholder,\n 'aria-label': label,\n ...props\n },\n forwardedRef,\n ) {\n const { messages, theme, density, direction: configuredDirection } = useLeafConfig();\n const itemHeight =\n itemHeightProp ?? Math.max(24, estimateControlHeight(theme, density) - 4) + 6;\n const field = useFormField();\n const disabled = disabledProp || field?.disabled;\n const required = requiredProp ?? field?.required;\n const status = statusProp ?? (field?.error ? 'error' : undefined);\n const multi = multiple || treeCheckable;\n const trigger = useRef<HTMLInputElement>(null);\n const ref = useMergedRef(trigger, forwardedRef);\n const root = useRef<HTMLDivElement>(null);\n const panel = useRef<HTMLDivElement>(null);\n const pendingFocus = useRef(false);\n const [current, setCurrent] = useFieldValue(value, defaultValue, trigger, form);\n const selected = typeof current === 'string' ? [current] : (current ?? emptyKeys);\n useListMotion(root, selected[0], multi ? '' : '.leaf-tree-select__input-wrap[data-motion-key]');\n const [query, setQuery] = useState<string | null>(null);\n const searchQuery = query ?? '';\n const [open, setOpen] = usePopupState(\n disabled || props.readOnly,\n onOpenChange,\n controlledOpen,\n defaultOpen,\n );\n const id = `${useId()}-tree-select`;\n const [loadedOptions, setLoadedOptions] = useState<Map<string, readonly TreeSelectOption[]>>(\n new Map(),\n );\n const generation = useRef(0);\n // biome-ignore lint/correctness/useExhaustiveDependencies: Invalidate lazy options on source and cache-version changes.\n useEffect(() => {\n generation.current++;\n setLoadedOptions(new Map());\n }, [options, loadData, cacheKey]);\n const allOptions = useMemo(() => {\n const merge = (entries: readonly TreeSelectOption[]): TreeSelectOption[] =>\n entries.map((option) => {\n const children = option.children ?? loadedOptions.get(option.value);\n return children ? { ...option, children: merge(children) } : option;\n });\n return merge(options);\n }, [options, loadedOptions]);\n const optionRecords = useMemo(() => {\n const map = new Map<string, TreeSelectOption>();\n const visit = (entries: readonly TreeSelectOption[]) => {\n for (const option of entries) {\n map.set(option.value, option);\n if (option.children) visit(option.children);\n }\n };\n visit(allOptions);\n return map;\n }, [allOptions]);\n const latestLoader = useRef({ loadData, optionRecords });\n latestLoader.current = { loadData, optionRecords };\n const lazyLoad = useCallback(async (node: TreeNode, signal: AbortSignal) => {\n const snapshot = generation.current;\n const option = latestLoader.current.optionRecords.get(node.key);\n if (!option || !latestLoader.current.loadData) return [];\n const children = await latestLoader.current.loadData(option, signal);\n if (!signal.aborted && snapshot === generation.current)\n setLoadedOptions((previous) => new Map(previous).set(node.key, children));\n const convert = (entries: readonly TreeSelectOption[]): TreeNode[] =>\n entries.map(({ value: key, label: title, children, ...entry }) => ({\n ...entry,\n key,\n title,\n children: children ? convert(children) : undefined,\n }));\n return convert(children);\n }, []);\n const data = useMemo(() => {\n const convert = (nodes: readonly TreeSelectOption[]): TreeNode[] =>\n nodes.map(({ value: key, label: title, children, ...node }) => ({\n ...node,\n key,\n title,\n children: children ? convert(children) : undefined,\n }));\n return convert(allOptions);\n }, [allOptions]);\n const records = useMemo(() => treeModel(data), [data]);\n const [expandedKeys, setExpandedKeys] = useState<readonly string[]>(() =>\n defaultExpandAll ? [...records.keys()] : treeDefaultExpandedKeys,\n );\n const close = () => {\n setOpen(false);\n setQuery(null);\n };\n useFloatingDismiss(open, close, trigger, panel, root);\n useEffect(() => {\n if (!open) setQuery(null);\n else if (pendingFocus.current) {\n panel.current?.querySelector<HTMLElement>('[role=\"treeitem\"][tabindex=\"0\"]')?.focus();\n pendingFocus.current = false;\n }\n }, [open]);\n const commit = (keys: readonly string[]) => {\n if (disabled || props.readOnly || keys.length > maxCount) return;\n const next: TreeSelectValue = multi ? [...keys] : (keys[0] ?? null);\n setCurrent(next);\n onChange?.(next);\n setQuery(null);\n if (!multi) {\n setOpen(false);\n trigger.current?.focus();\n }\n };\n const canRemove = (key: string) =>\n !records.get(key)?.node.disabled && !records.get(key)?.node.disableCheckbox;\n const clearable = allowClear && selected.some(canRemove) && !disabled && !props.readOnly;\n const caption = (key: string) => records.get(key)?.node.title ?? key;\n const a11yCaption = (key: string) =>\n records.get(key)?.node.searchLabel ??\n (typeof caption(key) === 'string' || typeof caption(key) === 'number'\n ? String(caption(key))\n : key);\n const selectedCaption = selected[0] === undefined ? undefined : caption(selected[0]);\n const hasRichCaption =\n selectedCaption !== undefined &&\n typeof selectedCaption !== 'string' &&\n typeof selectedCaption !== 'number';\n const showCaption = !multi && hasRichCaption && (!showSearch || !open || query === null);\n const inputValue = multi\n ? searchQuery\n : showSearch && open\n ? (query ?? (selected[0] === undefined ? '' : a11yCaption(selected[0])))\n : selected[0] === undefined\n ? ''\n : a11yCaption(selected[0]);\n const beginSearch = () => {\n if (!showSearch || disabled || props.readOnly || inputReadOnly) return;\n if (!multi && query === null) trigger.current?.select();\n setOpen(true);\n };\n return (\n <>\n {/* biome-ignore lint/a11y/noStaticElementInteractions: The wrapper extends the input's clickable area, as in Select. */}\n {/* biome-ignore lint/a11y/useKeyWithClickEvents: The enclosed combobox owns keyboard interaction. */}\n <div\n ref={root}\n className={classes(\n 'leaf-tree-select',\n `leaf-tree-select--${size}`,\n multi && 'leaf-tree-select--multiple',\n className,\n )}\n style={style}\n dir={props.dir ?? configuredDirection}\n data-disabled={disabled || undefined}\n data-status={status}\n data-open={open || undefined}\n data-clearable={clearable || undefined}\n data-searchable={showSearch || undefined}\n onMouseDown={(event) => {\n if (\n !disabled &&\n event.target instanceof Element &&\n !event.target.closest('input, button, a')\n )\n event.preventDefault();\n }}\n onClick={(event) => {\n if (\n !disabled &&\n event.target instanceof Element &&\n !event.target.closest('input, button, a')\n ) {\n trigger.current?.focus();\n trigger.current?.click();\n }\n }}\n >\n <SelectionContent\n className=\"leaf-tree-select__content\"\n tagClassName=\"leaf-tree-select__tag\"\n tagWrap={tagWrap}\n maxTagCount={maxTagCount}\n searchable={showSearch && !props.readOnly && !inputReadOnly}\n query={searchQuery}\n removeLabel={messages.common.remove}\n items={\n multi\n ? selected.map((key) => ({\n key,\n label: caption(key),\n text: a11yCaption(key),\n remove:\n canRemove(key) && !disabled && !props.readOnly\n ? () => {\n commit(selected.filter((item) => item !== key));\n trigger.current?.focus();\n }\n : undefined,\n }))\n : undefined\n }\n >\n <span className=\"leaf-tree-select__input-wrap\" data-motion-key={selected[0] ?? ''}>\n {showCaption && (\n <span className=\"leaf-tree-select__value\" aria-hidden=\"true\">\n {selectedCaption}\n </span>\n )}\n <input\n {...props}\n ref={ref}\n id={props.id ?? field?.id}\n role=\"combobox\"\n aria-haspopup=\"tree\"\n aria-expanded={open}\n aria-controls={open ? id : undefined}\n aria-autocomplete={showSearch ? 'list' : undefined}\n aria-label={label ?? (field?.labelId ? undefined : messages.treeSelect.placeholder)}\n aria-labelledby={props['aria-labelledby'] ?? field?.labelId}\n aria-describedby={\n [props['aria-describedby'], field?.descriptionId].filter(Boolean).join(' ') ||\n undefined\n }\n aria-required={required || undefined}\n aria-invalid={status === 'error' || props['aria-invalid']}\n autoComplete=\"off\"\n className={classes(\n 'leaf-tree-select__input',\n showCaption && 'leaf-tree-select__input--caption',\n )}\n value={inputValue}\n readOnly={!showSearch || props.readOnly || inputReadOnly}\n disabled={disabled}\n placeholder={\n selected.length ? undefined : (placeholder ?? messages.treeSelect.placeholder)\n }\n onClick={(event) => {\n props.onClick?.(event);\n if (event.defaultPrevented) return;\n if (open && !showSearch) close();\n else setOpen(true);\n }}\n onBeforeInput={(event) => {\n props.onBeforeInput?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onPaste={(event) => {\n props.onPaste?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onCompositionStart={(event) => {\n props.onCompositionStart?.(event);\n if (!event.defaultPrevented) beginSearch();\n }}\n onChange={(event) => {\n setQuery(event.target.value);\n onSearch?.(event.target.value);\n setOpen(true);\n }}\n onKeyDown={(event) => {\n props.onKeyDown?.(event);\n if (event.defaultPrevented || disabled || event.nativeEvent.isComposing) return;\n if (\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey &&\n (event.key.length === 1 || event.key === 'Backspace' || event.key === 'Delete')\n )\n beginSearch();\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!open) {\n pendingFocus.current = true;\n setOpen(true);\n } else\n panel.current\n ?.querySelector<HTMLElement>('[role=\"treeitem\"][tabindex=\"0\"]')\n ?.focus();\n } else if (event.key === 'Enter' && !open) {\n event.preventDefault();\n setOpen(true);\n } else if (event.key === 'Backspace' && !searchQuery && multi) {\n const last = [...selected].reverse().find(canRemove);\n if (last) {\n event.preventDefault();\n commit(selected.filter((key) => key !== last));\n }\n }\n }}\n />\n </span>\n </SelectionContent>\n {clearable && (\n <button\n type=\"button\"\n className=\"leaf-tree-select__clear\"\n aria-label={messages.treeSelect.clear}\n onMouseDown={(event) => event.preventDefault()}\n onClick={() => {\n commit(selected.filter((key) => !canRemove(key)));\n trigger.current?.focus();\n }}\n >\n <X size={14} aria-hidden=\"true\" />\n </button>\n )}\n <button\n type=\"button\"\n className=\"leaf-tree-select__arrow\"\n tabIndex={-1}\n disabled={disabled}\n aria-label={messages.treeSelect.placeholder}\n onClick={() => {\n trigger.current?.focus();\n if (open) close();\n else setOpen(true);\n }}\n >\n <ChevronDown size={16} aria-hidden=\"true\" />\n </button>\n <FormValue\n value={selected[0] ?? ''}\n name={name}\n form={form}\n required={required}\n disabled={disabled}\n triggerRef={trigger}\n />\n {selected.slice(1).map((key) => (\n <input\n type=\"hidden\"\n key={key}\n name={name}\n form={form}\n value={key}\n disabled={disabled}\n />\n ))}\n </div>\n <FloatingPanel\n placement={popupPlacement}\n container={getPopupContainer}\n render={popupRender}\n style={popupStyle}\n open={open}\n triggerRef={root}\n panelRef={panel}\n matchWidth={popupWidth === 'trigger'}\n width={\n popupWidth === 'trigger'\n ? undefined\n : popupWidth === 'auto'\n ? 'max-content'\n : popupWidth\n }\n maxWidth={popupMaxWidth}\n maxHeight={320}\n className={classes('leaf-floating leaf-tree-select__panel', popupClassName)}\n >\n <FieldScope>\n <Tree\n virtual={virtual}\n height={listHeight}\n itemHeight={itemHeight}\n loadData={loadData ? lazyLoad : undefined}\n cacheKey={cacheKey}\n disabled={disabled || props.readOnly}\n expandedKeys={treeExpandedKeys ?? expandedKeys}\n onExpand={(keys) => {\n if (treeExpandedKeys === undefined) setExpandedKeys(keys);\n onExpand?.(keys);\n }}\n checkOnClick={treeCheckable}\n expandOnClick\n filterTreeNode={\n filterTreeNode\n ? (node, query) => {\n const option = optionRecords.get(node.key);\n return !!option && filterTreeNode(option, query);\n }\n : undefined\n }\n nodeRender={\n nodeRender\n ? (node) => {\n const option = optionRecords.get(node.key);\n return option ? nodeRender(option) : node.title;\n }\n : undefined\n }\n onLoadError={(error, node) => {\n const option = optionRecords.get(node.key);\n if (option) onLoadError?.(error, option);\n }}\n id={id}\n data={data}\n aria-label={label ?? messages.treeSelect.placeholder}\n multiple={multi}\n selectable={!treeCheckable}\n checkable={treeCheckable}\n checkStrictly={checkStrictly}\n selectedKeys={treeCheckable ? emptyKeys : selected}\n checkedKeys={selected}\n searchValue={searchQuery}\n notFoundContent={notFoundContent ?? messages.treeSelect.empty}\n onSelect={(keys) => commit(keys)}\n onCheck={(keys) => {\n const checked = new Set(keys);\n commit(\n checkStrictly || showCheckedStrategy === 'all'\n ? keys\n : keys.filter((key) => {\n const record = records.get(key);\n if (!record) return false;\n if (showCheckedStrategy === 'parent')\n return !record.parent || !checked.has(record.parent);\n return !(record.node.children ?? []).some((child) =>\n checked.has(child.key),\n );\n }),\n );\n }}\n />\n </FieldScope>\n </FloatingPanel>\n </>\n );\n },\n);\nInternalTreeSelect.displayName = 'TreeSelect';\nexport type TreeSelectProps = Omit<\n InternalTreeSelectProps,\n 'value' | 'defaultValue' | 'onChange' | 'multiple' | 'treeCheckable'\n> &\n (\n | {\n multiple?: false;\n treeCheckable?: false;\n value?: string | null;\n defaultValue?: string | null;\n onChange?: (value: string | null) => void;\n }\n | {\n multiple: true;\n treeCheckable?: boolean;\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (value: readonly string[]) => void;\n }\n | {\n treeCheckable: true;\n multiple?: boolean;\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (value: readonly string[]) => void;\n }\n );\nexport const TreeSelectControl = InternalTreeSelect as React.ForwardRefExoticComponent<\n TreeSelectProps & React.RefAttributes<HTMLInputElement>\n>;\nexport const TreeSelect = forwardRef<HTMLInputElement, TreeSelectProps>(\n function TreeSelect(rawProps, ref) {\n const props = useComponentProps('TreeSelect', rawProps);\n return <TreeSelectControl {...props} ref={ref} />;\n },\n);\nTreeSelect.displayName = 'TreeSelect';\n"],"names":["emptyKeys","InternalTreeSelect","forwardRef","options","value","defaultValue","onChange","multiple","treeCheckable","checkStrictly","showCheckedStrategy","showSearch","onSearch","allowClear","defaultExpandAll","treeDefaultExpandedKeys","size","statusProp","disabledProp","requiredProp","popupWidth","popupMaxWidth","notFoundContent","onOpenChange","loadData","onLoadError","virtual","listHeight","itemHeightProp","inputReadOnly","controlledOpen","defaultOpen","maxTagCount","tagWrap","maxCount","Infinity","treeExpandedKeys","onExpand","filterTreeNode","nodeRender","cacheKey","popupPlacement","popupClassName","popupStyle","popupRender","getPopupContainer","name","form","className","style","placeholder","label","props","forwardedRef","messages","theme","density","configuredDirection","useLeafConfig","itemHeight","Math","estimateControlHeight","field","useFormField","disabled","required","status","undefined","multi","trigger","useRef","ref","useMergedRef","root","panel","pendingFocus","current","setCurrent","useFieldValue","selected","useListMotion","query","setQuery","useState","searchQuery","open","setOpen","usePopupState","id","useId","loadedOptions","setLoadedOptions","Map","generation","useEffect","allOptions","useMemo","merge","entries","option","children","optionRecords","map","visit","latestLoader","lazyLoad","useCallback","node","signal","snapshot","previous","convert","key","title","entry","data","nodes","records","treeModel","expandedKeys","setExpandedKeys","close","useFloatingDismiss","commit","keys","next","canRemove","clearable","caption","a11yCaption","String","selectedCaption","hasRichCaption","showCaption","inputValue","beginSearch","classes","event","Element","SelectionContent","item","Boolean","last","X","ChevronDown","FormValue","FloatingPanel","FieldScope","Tree","error","checked","Set","record","child","TreeSelectControl","TreeSelect","rawProps","useComponentProps"],"mappings":"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"}
@@ -6,6 +6,7 @@ import { useVirtualizer } from "@tanstack/react-virtual";
6
6
  import { forwardRef, useImperativeHandle, useRef } from "react";
7
7
  import { mergeComponentProps, useGenericComponentDefaults } from "../config-provider/component-defaults.js";
8
8
  import { ResultControl } from "../result/result.js";
9
+ import { ScrollbarControl } from "../scrollbar/scrollbar.js";
9
10
  import { classes } from "../shared/classes.js";
10
11
  function VirtualListRoot(rawProps, ref) {
11
12
  const { items, itemKey, renderItem, height = 320, estimateSize = 40, overscan = 5, emptyContent, horizontal = false, className, style, ...props } = rawProps;
@@ -31,12 +32,17 @@ function VirtualListRoot(rawProps, ref) {
31
32
  }), [
32
33
  virtualizer
33
34
  ]);
34
- return /*#__PURE__*/ jsx("div", {
35
- ...props,
35
+ return /*#__PURE__*/ jsx(ScrollbarControl, {
36
36
  ref: root,
37
- role: props.role,
37
+ viewportProps: props,
38
+ role: props.role ?? 'presentation',
38
39
  tabIndex: props.tabIndex ?? 0,
39
40
  className: classes('leaf-virtual-list', className),
41
+ viewportClassName: "leaf-virtual-list__viewport",
42
+ viewportStyle: {
43
+ position: 'relative'
44
+ },
45
+ scrollbarTabIndex: -1,
40
46
  style: {
41
47
  height,
42
48
  ...style
@@ -1 +1 @@
1
- {"version":3,"file":"virtuallist/virtuallist.js","sources":["../../../../../src/virtuallist/virtuallist.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport {\n forwardRef,\n type HTMLAttributes,\n type Key,\n type ReactElement,\n type ReactNode,\n type Ref,\n type RefAttributes,\n useImperativeHandle,\n useRef,\n} from 'react';\nimport {\n mergeComponentProps,\n useGenericComponentDefaults,\n} from '../config-provider/component-defaults';\nimport { ResultControl as Result } from '../result/result';\nimport { classes } from '../shared/classes';\nexport interface VirtualListHandle {\n element: HTMLDivElement | null;\n scrollToIndex: (index: number, align?: 'auto' | 'start' | 'center' | 'end') => void;\n scrollToOffset: (offset: number) => void;\n}\nexport interface VirtualListProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n items: readonly T[];\n itemKey: (item: T, index: number) => Key;\n renderItem: (item: T, index: number) => ReactNode;\n height?: number;\n estimateSize?: number | ((item: T, index: number) => number);\n overscan?: number;\n emptyContent?: ReactNode;\n horizontal?: boolean;\n}\nfunction VirtualListRoot<T>(rawProps: VirtualListProps<T>, ref: Ref<VirtualListHandle>) {\n const {\n items,\n itemKey,\n renderItem,\n height = 320,\n estimateSize = 40,\n overscan = 5,\n emptyContent,\n horizontal = false,\n className,\n style,\n ...props\n } = rawProps;\n const root = useRef<HTMLDivElement>(null);\n const virtualizer = useVirtualizer<HTMLDivElement, HTMLLIElement>({\n count: items.length,\n getScrollElement: () => root.current,\n estimateSize: (index) =>\n typeof estimateSize === 'number'\n ? Math.max(1, estimateSize)\n : Math.max(1, estimateSize(items[index] as T, index)),\n getItemKey: (index) => itemKey(items[index] as T, index),\n overscan: Math.max(0, overscan),\n horizontal,\n initialRect: { height, width: 640 },\n });\n useImperativeHandle(\n ref,\n () => ({\n element: root.current,\n scrollToIndex: (index, align = 'auto') => virtualizer.scrollToIndex(index, { align }),\n scrollToOffset: (offset) => virtualizer.scrollToOffset(offset),\n }),\n [virtualizer],\n );\n return (\n <div\n {...props}\n ref={root}\n role={props.role}\n tabIndex={props.tabIndex ?? 0}\n className={classes('leaf-virtual-list', className)}\n style={{ height, ...style }}\n >\n {!items.length ? (\n (emptyContent ?? <Result status=\"empty\" />)\n ) : (\n <ul\n className=\"leaf-virtual-list__canvas\"\n style={{\n height: horizontal ? '100%' : virtualizer.getTotalSize(),\n width: horizontal ? virtualizer.getTotalSize() : '100%',\n }}\n >\n {virtualizer.getVirtualItems().map((row) => (\n <li\n key={row.key}\n ref={virtualizer.measureElement}\n data-index={row.index}\n aria-posinset={row.index + 1}\n aria-setsize={items.length}\n className=\"leaf-virtual-list__item\"\n style={{\n top: 0,\n left: 0,\n width: horizontal ? undefined : '100%',\n height: horizontal ? '100%' : undefined,\n transform: `translate${horizontal ? 'X' : 'Y'}(${row.start}px)`,\n }}\n >\n {renderItem(items[row.index] as T, row.index)}\n </li>\n ))}\n </ul>\n )}\n </div>\n );\n}\nexport const VirtualListControl = forwardRef(VirtualListRoot) as <T>(\n props: VirtualListProps<T> & RefAttributes<VirtualListHandle>,\n) => ReactElement;\n\nfunction VirtualListEntry<T>(rawProps: VirtualListProps<T>, ref: Ref<VirtualListHandle>) {\n const props = mergeComponentProps<VirtualListProps<T>>(\n useGenericComponentDefaults('VirtualList'),\n rawProps,\n );\n return <VirtualListControl {...props} ref={ref} />;\n}\nexport const VirtualList = forwardRef(VirtualListEntry) as <T>(\n props: VirtualListProps<T> & RefAttributes<VirtualListHandle>,\n) => ReactElement;\n"],"names":["VirtualListRoot","rawProps","ref","items","itemKey","renderItem","height","estimateSize","overscan","emptyContent","horizontal","className","style","props","root","useRef","virtualizer","useVirtualizer","index","Math","useImperativeHandle","align","offset","classes","row","undefined","Result","VirtualListControl","forwardRef","VirtualListEntry","mergeComponentProps","useGenericComponentDefaults","VirtualList"],"mappings":";;;;;;;;;AAiCA,SAASA,gBAAmBC,QAA6B,EAAEC,GAA2B;IACpF,MAAM,EACJC,KAAK,EACLC,OAAO,EACPC,UAAU,EACVC,SAAS,GAAG,EACZC,eAAe,EAAE,EACjBC,WAAW,CAAC,EACZC,YAAY,EACZC,aAAa,KAAK,EAClBC,SAAS,EACTC,KAAK,EACL,GAAGC,OACJ,GAAGZ;IACJ,MAAMa,OAAOC,OAAuB;IACpC,MAAMC,cAAcC,eAA8C;QAChE,OAAOd,MAAM,MAAM;QACnB,kBAAkB,IAAMW,KAAK,OAAO;QACpC,cAAc,CAACI,QACb,AAAwB,YAAxB,OAAOX,eACHY,KAAK,GAAG,CAAC,GAAGZ,gBACZY,KAAK,GAAG,CAAC,GAAGZ,aAAaJ,KAAK,CAACe,MAAM,EAAOA;QAClD,YAAY,CAACA,QAAUd,QAAQD,KAAK,CAACe,MAAM,EAAOA;QAClD,UAAUC,KAAK,GAAG,CAAC,GAAGX;QACtBE;QACA,aAAa;YAAEJ;YAAQ,OAAO;QAAI;IACpC;IACAc,oBACElB,KACA,IAAO;YACL,SAASY,KAAK,OAAO;YACrB,eAAe,CAACI,OAAOG,QAAQ,MAAM,GAAKL,YAAY,aAAa,CAACE,OAAO;oBAAEG;gBAAM;YACnF,gBAAgB,CAACC,SAAWN,YAAY,cAAc,CAACM;QACzD,IACA;QAACN;KAAY;IAEf,OAAO,WAAP,GACE,IAAC;QACE,GAAGH,KAAK;QACT,KAAKC;QACL,MAAMD,MAAM,IAAI;QAChB,UAAUA,MAAM,QAAQ,IAAI;QAC5B,WAAWU,QAAQ,qBAAqBZ;QACxC,OAAO;YAAEL;YAAQ,GAAGM,KAAK;QAAC;kBAEzB,AAACT,MAAM,MAAM,iBAGZ,IAAC;YACC,WAAU;YACV,OAAO;gBACL,QAAQO,aAAa,SAASM,YAAY,YAAY;gBACtD,OAAON,aAAaM,YAAY,YAAY,KAAK;YACnD;sBAECA,YAAY,eAAe,GAAG,GAAG,CAAC,CAACQ,MAAAA,WAAAA,GAClC,IAAC;oBAEC,KAAKR,YAAY,cAAc;oBAC/B,cAAYQ,IAAI,KAAK;oBACrB,iBAAeA,IAAI,KAAK,GAAG;oBAC3B,gBAAcrB,MAAM,MAAM;oBAC1B,WAAU;oBACV,OAAO;wBACL,KAAK;wBACL,MAAM;wBACN,OAAOO,aAAae,SAAY;wBAChC,QAAQf,aAAa,SAASe;wBAC9B,WAAW,CAAC,SAAS,EAAEf,aAAa,MAAM,IAAI,CAAC,EAAEc,IAAI,KAAK,CAAC,GAAG,CAAC;oBACjE;8BAECnB,WAAWF,KAAK,CAACqB,IAAI,KAAK,CAAC,EAAOA,IAAI,KAAK;mBAdvCA,IAAI,GAAG;aAXjBf,gBAAgB,WAAhBA,GAAgB,IAACiB,eAAMA;YAAC,QAAO;;;AAgCxC;AACO,MAAMC,qBAAqB,WAAHA,GAAGC,WAAW5B;AAI7C,SAAS6B,iBAAoB5B,QAA6B,EAAEC,GAA2B;IACrF,MAAMW,QAAQiB,oBACZC,4BAA4B,gBAC5B9B;IAEF,OAAO,WAAP,GAAO,IAAC0B,oBAAkBA;QAAE,GAAGd,KAAK;QAAE,KAAKX;;AAC7C;AACO,MAAM8B,cAAc,WAAHA,GAAGJ,WAAWC"}
1
+ {"version":3,"file":"virtuallist/virtuallist.js","sources":["../../../../../src/virtuallist/virtuallist.tsx"],"sourcesContent":["import { useVirtualizer } from '@tanstack/react-virtual';\nimport {\n forwardRef,\n type HTMLAttributes,\n type Key,\n type ReactElement,\n type ReactNode,\n type Ref,\n type RefAttributes,\n useImperativeHandle,\n useRef,\n} from 'react';\nimport {\n mergeComponentProps,\n useGenericComponentDefaults,\n} from '../config-provider/component-defaults';\nimport { ResultControl as Result } from '../result/result';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { classes } from '../shared/classes';\nexport interface VirtualListHandle {\n element: HTMLDivElement | null;\n scrollToIndex: (index: number, align?: 'auto' | 'start' | 'center' | 'end') => void;\n scrollToOffset: (offset: number) => void;\n}\nexport interface VirtualListProps<T> extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {\n items: readonly T[];\n itemKey: (item: T, index: number) => Key;\n renderItem: (item: T, index: number) => ReactNode;\n height?: number;\n estimateSize?: number | ((item: T, index: number) => number);\n overscan?: number;\n emptyContent?: ReactNode;\n horizontal?: boolean;\n}\nfunction VirtualListRoot<T>(rawProps: VirtualListProps<T>, ref: Ref<VirtualListHandle>) {\n const {\n items,\n itemKey,\n renderItem,\n height = 320,\n estimateSize = 40,\n overscan = 5,\n emptyContent,\n horizontal = false,\n className,\n style,\n ...props\n } = rawProps;\n const root = useRef<HTMLDivElement>(null);\n const virtualizer = useVirtualizer<HTMLDivElement, HTMLLIElement>({\n count: items.length,\n getScrollElement: () => root.current,\n estimateSize: (index) =>\n typeof estimateSize === 'number'\n ? Math.max(1, estimateSize)\n : Math.max(1, estimateSize(items[index] as T, index)),\n getItemKey: (index) => itemKey(items[index] as T, index),\n overscan: Math.max(0, overscan),\n horizontal,\n initialRect: { height, width: 640 },\n });\n useImperativeHandle(\n ref,\n () => ({\n element: root.current,\n scrollToIndex: (index, align = 'auto') => virtualizer.scrollToIndex(index, { align }),\n scrollToOffset: (offset) => virtualizer.scrollToOffset(offset),\n }),\n [virtualizer],\n );\n return (\n <ScrollbarControl\n ref={root}\n viewportProps={props}\n role={props.role ?? 'presentation'}\n tabIndex={props.tabIndex ?? 0}\n className={classes('leaf-virtual-list', className)}\n viewportClassName=\"leaf-virtual-list__viewport\"\n viewportStyle={{ position: 'relative' }}\n scrollbarTabIndex={-1}\n style={{ height, ...style }}\n >\n {!items.length ? (\n (emptyContent ?? <Result status=\"empty\" />)\n ) : (\n <ul\n className=\"leaf-virtual-list__canvas\"\n style={{\n height: horizontal ? '100%' : virtualizer.getTotalSize(),\n width: horizontal ? virtualizer.getTotalSize() : '100%',\n }}\n >\n {virtualizer.getVirtualItems().map((row) => (\n <li\n key={row.key}\n ref={virtualizer.measureElement}\n data-index={row.index}\n aria-posinset={row.index + 1}\n aria-setsize={items.length}\n className=\"leaf-virtual-list__item\"\n style={{\n top: 0,\n left: 0,\n width: horizontal ? undefined : '100%',\n height: horizontal ? '100%' : undefined,\n transform: `translate${horizontal ? 'X' : 'Y'}(${row.start}px)`,\n }}\n >\n {renderItem(items[row.index] as T, row.index)}\n </li>\n ))}\n </ul>\n )}\n </ScrollbarControl>\n );\n}\nexport const VirtualListControl = forwardRef(VirtualListRoot) as <T>(\n props: VirtualListProps<T> & RefAttributes<VirtualListHandle>,\n) => ReactElement;\n\nfunction VirtualListEntry<T>(rawProps: VirtualListProps<T>, ref: Ref<VirtualListHandle>) {\n const props = mergeComponentProps<VirtualListProps<T>>(\n useGenericComponentDefaults('VirtualList'),\n rawProps,\n );\n return <VirtualListControl {...props} ref={ref} />;\n}\nexport const VirtualList = forwardRef(VirtualListEntry) as <T>(\n props: VirtualListProps<T> & RefAttributes<VirtualListHandle>,\n) => ReactElement;\n"],"names":["VirtualListRoot","rawProps","ref","items","itemKey","renderItem","height","estimateSize","overscan","emptyContent","horizontal","className","style","props","root","useRef","virtualizer","useVirtualizer","index","Math","useImperativeHandle","align","offset","ScrollbarControl","classes","row","undefined","Result","VirtualListControl","forwardRef","VirtualListEntry","mergeComponentProps","useGenericComponentDefaults","VirtualList"],"mappings":";;;;;;;;;;AAkCA,SAASA,gBAAmBC,QAA6B,EAAEC,GAA2B;IACpF,MAAM,EACJC,KAAK,EACLC,OAAO,EACPC,UAAU,EACVC,SAAS,GAAG,EACZC,eAAe,EAAE,EACjBC,WAAW,CAAC,EACZC,YAAY,EACZC,aAAa,KAAK,EAClBC,SAAS,EACTC,KAAK,EACL,GAAGC,OACJ,GAAGZ;IACJ,MAAMa,OAAOC,OAAuB;IACpC,MAAMC,cAAcC,eAA8C;QAChE,OAAOd,MAAM,MAAM;QACnB,kBAAkB,IAAMW,KAAK,OAAO;QACpC,cAAc,CAACI,QACb,AAAwB,YAAxB,OAAOX,eACHY,KAAK,GAAG,CAAC,GAAGZ,gBACZY,KAAK,GAAG,CAAC,GAAGZ,aAAaJ,KAAK,CAACe,MAAM,EAAOA;QAClD,YAAY,CAACA,QAAUd,QAAQD,KAAK,CAACe,MAAM,EAAOA;QAClD,UAAUC,KAAK,GAAG,CAAC,GAAGX;QACtBE;QACA,aAAa;YAAEJ;YAAQ,OAAO;QAAI;IACpC;IACAc,oBACElB,KACA,IAAO;YACL,SAASY,KAAK,OAAO;YACrB,eAAe,CAACI,OAAOG,QAAQ,MAAM,GAAKL,YAAY,aAAa,CAACE,OAAO;oBAAEG;gBAAM;YACnF,gBAAgB,CAACC,SAAWN,YAAY,cAAc,CAACM;QACzD,IACA;QAACN;KAAY;IAEf,OAAO,WAAP,GACE,IAACO,kBAAgBA;QACf,KAAKT;QACL,eAAeD;QACf,MAAMA,MAAM,IAAI,IAAI;QACpB,UAAUA,MAAM,QAAQ,IAAI;QAC5B,WAAWW,QAAQ,qBAAqBb;QACxC,mBAAkB;QAClB,eAAe;YAAE,UAAU;QAAW;QACtC,mBAAmB;QACnB,OAAO;YAAEL;YAAQ,GAAGM,KAAK;QAAC;kBAEzB,AAACT,MAAM,MAAM,iBAGZ,IAAC;YACC,WAAU;YACV,OAAO;gBACL,QAAQO,aAAa,SAASM,YAAY,YAAY;gBACtD,OAAON,aAAaM,YAAY,YAAY,KAAK;YACnD;sBAECA,YAAY,eAAe,GAAG,GAAG,CAAC,CAACS,MAAAA,WAAAA,GAClC,IAAC;oBAEC,KAAKT,YAAY,cAAc;oBAC/B,cAAYS,IAAI,KAAK;oBACrB,iBAAeA,IAAI,KAAK,GAAG;oBAC3B,gBAActB,MAAM,MAAM;oBAC1B,WAAU;oBACV,OAAO;wBACL,KAAK;wBACL,MAAM;wBACN,OAAOO,aAAagB,SAAY;wBAChC,QAAQhB,aAAa,SAASgB;wBAC9B,WAAW,CAAC,SAAS,EAAEhB,aAAa,MAAM,IAAI,CAAC,EAAEe,IAAI,KAAK,CAAC,GAAG,CAAC;oBACjE;8BAECpB,WAAWF,KAAK,CAACsB,IAAI,KAAK,CAAC,EAAOA,IAAI,KAAK;mBAdvCA,IAAI,GAAG;aAXjBhB,gBAAgB,WAAhBA,GAAgB,IAACkB,eAAMA;YAAC,QAAO;;;AAgCxC;AACO,MAAMC,qBAAqB,WAAHA,GAAGC,WAAW7B;AAI7C,SAAS8B,iBAAoB7B,QAA6B,EAAEC,GAA2B;IACrF,MAAMW,QAAQkB,oBACZC,4BAA4B,gBAC5B/B;IAEF,OAAO,WAAP,GAAO,IAAC2B,oBAAkBA;QAAE,GAAGf,KAAK;QAAE,KAAKX;;AAC7C;AACO,MAAM+B,cAAc,WAAHA,GAAGJ,WAAWC"}
@@ -1,6 +1,6 @@
1
1
  import { type ButtonHTMLAttributes, type ReactNode } from 'react';
2
2
  import type { ControlSize } from '../shared/types.js';
3
- export type ButtonVariant = 'solid' | 'outline' | 'ghost' | 'link';
3
+ export type ButtonVariant = 'solid' | 'outline' | 'soft' | 'link';
4
4
  export type ButtonSize = ControlSize;
5
5
  export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
6
6
  /** Visual style. @default 'solid' */
@@ -18,7 +18,12 @@ export interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {
18
18
  /** Content after the label. */
19
19
  endIcon?: ReactNode;
20
20
  }
21
+ interface ButtonControlProps extends Omit<ButtonProps, 'variant'> {
22
+ /** Borderless controls remain an implementation detail of their owning components. */
23
+ variant?: ButtonVariant | 'ghost';
24
+ }
21
25
  /** Internal rendering primitive; its owner resolves defaults and interaction constraints. */
22
- export declare const ButtonControl: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
26
+ export declare const ButtonControl: import("react").ForwardRefExoticComponent<ButtonControlProps & import("react").RefAttributes<HTMLButtonElement>>;
23
27
  export declare const Button: import("react").ForwardRefExoticComponent<ButtonProps & import("react").RefAttributes<HTMLButtonElement>>;
28
+ export {};
24
29
  //# sourceMappingURL=button.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/button/button.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AACnE,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC;AAErC,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E,qCAAqC;IACrC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,gDAAgD;IAChD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sEAAsE;IACtE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,6FAA6F;AAC7F,eAAO,MAAM,aAAa,2GAmExB,CAAC;AAGH,eAAO,MAAM,MAAM,2GAGjB,CAAC"}
1
+ {"version":3,"file":"button.d.ts","sourceRoot":"","sources":["../../../src/button/button.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,oBAAoB,EAAc,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAG9E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAGnD,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAClE,MAAM,MAAM,UAAU,GAAG,WAAW,CAAC;AAErC,MAAM,WAAW,WAAY,SAAQ,oBAAoB,CAAC,iBAAiB,CAAC;IAC1E,qCAAqC;IACrC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,gDAAgD;IAChD,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,uDAAuD;IACvD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,wDAAwD;IACxD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sEAAsE;IACtE,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AAED,UAAU,kBAAmB,SAAQ,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC;IAC/D,sFAAsF;IACtF,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC;CACnC;AAED,6FAA6F;AAC7F,eAAO,MAAM,aAAa,kHAkEzB,CAAC;AAGF,eAAO,MAAM,MAAM,2GAGjB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"button/button.js","sources":["../../../src/button/button.tsx"],"sourcesContent":["import { LoaderCircle } from 'lucide-react';\nimport { type ButtonHTMLAttributes, forwardRef, type ReactNode } from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { classes } from '../shared/classes';\nimport type { ControlSize } from '../shared/types';\nimport { useButtonWave } from './wave';\n\nexport type ButtonVariant = 'solid' | 'outline' | 'ghost' | 'link';\nexport type ButtonSize = ControlSize;\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual style. @default 'solid' */\n variant?: ButtonVariant;\n /** Shared control size. @default 'md' (36px) */\n size?: ButtonSize;\n /** Uses the semantic danger color in every variant. */\n danger?: boolean;\n /** Displays a spinner and prevents repeated interactions. */\n loading?: boolean;\n /** Expands the button to the width of its container. */\n fullWidth?: boolean;\n /** Content before the label. Use aria-label for icon-only buttons. */\n startIcon?: ReactNode;\n /** Content after the label. */\n endIcon?: ReactNode;\n}\n\n/** Internal rendering primitive; its owner resolves defaults and interaction constraints. */\nexport const ButtonControl = forwardRef<HTMLButtonElement, ButtonProps>(function ButtonControl(\n rawProps: ButtonProps,\n ref,\n) {\n const {\n variant = 'solid',\n size = 'md',\n danger = false,\n loading = false,\n fullWidth = false,\n disabled = false,\n type = 'button',\n className,\n children,\n startIcon,\n endIcon,\n onClick,\n 'aria-busy': ariaBusy,\n ...props\n } = rawProps;\n const hasLabel =\n children !== undefined && children !== null && children !== false && children !== '';\n const iconOnly = !hasLabel && Boolean(startIcon || endIcon || loading);\n const hasWave = variant === 'solid' || variant === 'outline';\n const { wave, play } = useButtonWave(disabled || loading || !hasWave);\n\n return (\n <button\n {...props}\n ref={ref}\n type={type}\n className={classes(\n 'leaf-button',\n `leaf-button--${variant}`,\n `leaf-button--${size}`,\n danger && 'leaf-button--danger',\n iconOnly && 'leaf-button--icon-only',\n fullWidth && 'leaf-button--full-width',\n className,\n )}\n disabled={disabled || loading}\n aria-busy={loading || ariaBusy}\n data-loading={loading ? '' : undefined}\n onClick={(event) => {\n play(event.currentTarget);\n onClick?.(event);\n }}\n >\n {hasWave && <span ref={wave} className=\"leaf-button__wave\" aria-hidden=\"true\" />}\n <span className=\"leaf-button__content\">\n {startIcon && (\n <span className=\"leaf-button__icon\" aria-hidden=\"true\">\n {startIcon}\n </span>\n )}\n {hasLabel && <span className=\"leaf-button__label\">{children}</span>}\n {endIcon && (\n <span className=\"leaf-button__icon\" aria-hidden=\"true\">\n {endIcon}\n </span>\n )}\n </span>\n <span className=\"leaf-button__loading\" aria-hidden=\"true\">\n <LoaderCircle className=\"leaf-button__spinner\" />\n </span>\n </button>\n );\n});\nButtonControl.displayName = 'ButtonControl';\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(rawProps, ref) {\n const props = useComponentProps('Button', rawProps);\n return <ButtonControl {...props} ref={ref} />;\n});\nButton.displayName = 'Button';\n"],"names":["ButtonControl","forwardRef","rawProps","ref","variant","size","danger","loading","fullWidth","disabled","type","className","children","startIcon","endIcon","onClick","ariaBusy","props","hasLabel","iconOnly","Boolean","hasWave","wave","play","useButtonWave","classes","undefined","event","LoaderCircle","Button","useComponentProps"],"mappings":";;;;;;;AA4BO,MAAMA,uBAAgB,WAAHA,GAAGC,WAA2C,SACtEC,QAAqB,EACrBC,GAAG;IAEH,MAAM,EACJC,UAAU,OAAO,EACjBC,OAAO,IAAI,EACXC,SAAS,KAAK,EACdC,UAAU,KAAK,EACfC,YAAY,KAAK,EACjBC,WAAW,KAAK,EAChBC,OAAO,QAAQ,EACfC,SAAS,EACTC,QAAQ,EACRC,SAAS,EACTC,OAAO,EACPC,OAAO,EACP,aAAaC,QAAQ,EACrB,GAAGC,OACJ,GAAGf;IACJ,MAAMgB,WACJN,QAAAA,YAA+CA,AAAa,UAAbA,YAAsBA,AAAa,OAAbA;IACvE,MAAMO,WAAW,CAACD,YAAYE,QAAQP,aAAaC,WAAWP;IAC9D,MAAMc,UAAUjB,AAAY,YAAZA,WAAuBA,AAAY,cAAZA;IACvC,MAAM,EAAEkB,IAAI,EAAEC,IAAI,EAAE,GAAGC,cAAcf,YAAYF,WAAW,CAACc;IAE7D,OAAO,WAAP,GACE,KAAC;QACE,GAAGJ,KAAK;QACT,KAAKd;QACL,MAAMO;QACN,WAAWe,QACT,eACA,CAAC,aAAa,EAAErB,SAAS,EACzB,CAAC,aAAa,EAAEC,MAAM,EACtBC,UAAU,uBACVa,YAAY,0BACZX,aAAa,2BACbG;QAEF,UAAUF,YAAYF;QACtB,aAAWA,WAAWS;QACtB,gBAAcT,UAAU,KAAKmB;QAC7B,SAAS,CAACC;YACRJ,KAAKI,MAAM,aAAa;YACxBZ,UAAUY;QACZ;;YAECN,WAAW,WAAXA,GAAW,IAAC;gBAAK,KAAKC;gBAAM,WAAU;gBAAoB,eAAY;;0BACvE,KAAC;gBAAK,WAAU;;oBACbT,aAAa,WAAbA,GACC,IAAC;wBAAK,WAAU;wBAAoB,eAAY;kCAC7CA;;oBAGJK,YAAY,WAAZA,GAAY,IAAC;wBAAK,WAAU;kCAAsBN;;oBAClDE,WAAW,WAAXA,GACC,IAAC;wBAAK,WAAU;wBAAoB,eAAY;kCAC7CA;;;;0BAIP,IAAC;gBAAK,WAAU;gBAAuB,eAAY;0BACjD,kBAACc,cAAYA;oBAAC,WAAU;;;;;AAIhC;AACA5B,qBAAc,WAAW,GAAG;AAErB,MAAM6B,gBAAS,WAAHA,GAAG5B,WAA2C,SAAgBC,QAAQ,EAAEC,GAAG;IAC5F,MAAMc,QAAQa,kBAAkB,UAAU5B;IAC1C,OAAO,WAAP,GAAO,IAACF,sBAAaA;QAAE,GAAGiB,KAAK;QAAE,KAAKd;;AACxC;AACA0B,cAAO,WAAW,GAAG"}
1
+ {"version":3,"file":"button/button.js","sources":["../../../src/button/button.tsx"],"sourcesContent":["import { LoaderCircle } from 'lucide-react';\nimport { type ButtonHTMLAttributes, forwardRef, type ReactNode } from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { classes } from '../shared/classes';\nimport type { ControlSize } from '../shared/types';\nimport { useButtonWave } from './wave';\n\nexport type ButtonVariant = 'solid' | 'outline' | 'soft' | 'link';\nexport type ButtonSize = ControlSize;\n\nexport interface ButtonProps extends ButtonHTMLAttributes<HTMLButtonElement> {\n /** Visual style. @default 'solid' */\n variant?: ButtonVariant;\n /** Shared control size. @default 'md' (36px) */\n size?: ButtonSize;\n /** Uses the semantic danger color in every variant. */\n danger?: boolean;\n /** Displays a spinner and prevents repeated interactions. */\n loading?: boolean;\n /** Expands the button to the width of its container. */\n fullWidth?: boolean;\n /** Content before the label. Use aria-label for icon-only buttons. */\n startIcon?: ReactNode;\n /** Content after the label. */\n endIcon?: ReactNode;\n}\n\ninterface ButtonControlProps extends Omit<ButtonProps, 'variant'> {\n /** Borderless controls remain an implementation detail of their owning components. */\n variant?: ButtonVariant | 'ghost';\n}\n\n/** Internal rendering primitive; its owner resolves defaults and interaction constraints. */\nexport const ButtonControl = forwardRef<HTMLButtonElement, ButtonControlProps>(\n function ButtonControl(rawProps: ButtonControlProps, ref) {\n const {\n variant = 'solid',\n size = 'md',\n danger = false,\n loading = false,\n fullWidth = false,\n disabled = false,\n type = 'button',\n className,\n children,\n startIcon,\n endIcon,\n onClick,\n 'aria-busy': ariaBusy,\n ...props\n } = rawProps;\n const hasLabel =\n children !== undefined && children !== null && children !== false && children !== '';\n const iconOnly = !hasLabel && Boolean(startIcon || endIcon || loading);\n const hasWave = variant === 'solid' || variant === 'outline';\n const { wave, play } = useButtonWave(disabled || loading || !hasWave);\n\n return (\n <button\n {...props}\n ref={ref}\n type={type}\n className={classes(\n 'leaf-button',\n `leaf-button--${variant}`,\n `leaf-button--${size}`,\n danger && 'leaf-button--danger',\n iconOnly && 'leaf-button--icon-only',\n fullWidth && 'leaf-button--full-width',\n className,\n )}\n disabled={disabled || loading}\n aria-busy={loading || ariaBusy}\n data-loading={loading ? '' : undefined}\n onClick={(event) => {\n play(event.currentTarget);\n onClick?.(event);\n }}\n >\n {hasWave && <span ref={wave} className=\"leaf-button__wave\" aria-hidden=\"true\" />}\n <span className=\"leaf-button__content\">\n {startIcon && (\n <span className=\"leaf-button__icon\" aria-hidden=\"true\">\n {startIcon}\n </span>\n )}\n {hasLabel && <span className=\"leaf-button__label\">{children}</span>}\n {endIcon && (\n <span className=\"leaf-button__icon\" aria-hidden=\"true\">\n {endIcon}\n </span>\n )}\n </span>\n <span className=\"leaf-button__loading\" aria-hidden=\"true\">\n <LoaderCircle className=\"leaf-button__spinner\" />\n </span>\n </button>\n );\n },\n);\nButtonControl.displayName = 'ButtonControl';\n\nexport const Button = forwardRef<HTMLButtonElement, ButtonProps>(function Button(rawProps, ref) {\n const props = useComponentProps('Button', rawProps);\n return <ButtonControl {...props} ref={ref} />;\n});\nButton.displayName = 'Button';\n"],"names":["ButtonControl","forwardRef","rawProps","ref","variant","size","danger","loading","fullWidth","disabled","type","className","children","startIcon","endIcon","onClick","ariaBusy","props","hasLabel","iconOnly","Boolean","hasWave","wave","play","useButtonWave","classes","undefined","event","LoaderCircle","Button","useComponentProps"],"mappings":";;;;;;;AAiCO,MAAMA,uBAAgB,WAAHA,GAAGC,WAC3B,SAAuBC,QAA4B,EAAEC,GAAG;IACtD,MAAM,EACJC,UAAU,OAAO,EACjBC,OAAO,IAAI,EACXC,SAAS,KAAK,EACdC,UAAU,KAAK,EACfC,YAAY,KAAK,EACjBC,WAAW,KAAK,EAChBC,OAAO,QAAQ,EACfC,SAAS,EACTC,QAAQ,EACRC,SAAS,EACTC,OAAO,EACPC,OAAO,EACP,aAAaC,QAAQ,EACrB,GAAGC,OACJ,GAAGf;IACJ,MAAMgB,WACJN,QAAAA,YAA+CA,AAAa,UAAbA,YAAsBA,AAAa,OAAbA;IACvE,MAAMO,WAAW,CAACD,YAAYE,QAAQP,aAAaC,WAAWP;IAC9D,MAAMc,UAAUjB,AAAY,YAAZA,WAAuBA,AAAY,cAAZA;IACvC,MAAM,EAAEkB,IAAI,EAAEC,IAAI,EAAE,GAAGC,cAAcf,YAAYF,WAAW,CAACc;IAE7D,OAAO,WAAP,GACE,KAAC;QACE,GAAGJ,KAAK;QACT,KAAKd;QACL,MAAMO;QACN,WAAWe,QACT,eACA,CAAC,aAAa,EAAErB,SAAS,EACzB,CAAC,aAAa,EAAEC,MAAM,EACtBC,UAAU,uBACVa,YAAY,0BACZX,aAAa,2BACbG;QAEF,UAAUF,YAAYF;QACtB,aAAWA,WAAWS;QACtB,gBAAcT,UAAU,KAAKmB;QAC7B,SAAS,CAACC;YACRJ,KAAKI,MAAM,aAAa;YACxBZ,UAAUY;QACZ;;YAECN,WAAW,WAAXA,GAAW,IAAC;gBAAK,KAAKC;gBAAM,WAAU;gBAAoB,eAAY;;0BACvE,KAAC;gBAAK,WAAU;;oBACbT,aAAa,WAAbA,GACC,IAAC;wBAAK,WAAU;wBAAoB,eAAY;kCAC7CA;;oBAGJK,YAAY,WAAZA,GAAY,IAAC;wBAAK,WAAU;kCAAsBN;;oBAClDE,WAAW,WAAXA,GACC,IAAC;wBAAK,WAAU;wBAAoB,eAAY;kCAC7CA;;;;0BAIP,IAAC;gBAAK,WAAU;gBAAuB,eAAY;0BACjD,kBAACc,cAAYA;oBAAC,WAAU;;;;;AAIhC;AAEF5B,qBAAc,WAAW,GAAG;AAErB,MAAM6B,gBAAS,WAAHA,GAAG5B,WAA2C,SAAgBC,QAAQ,EAAEC,GAAG;IAC5F,MAAMc,QAAQa,kBAAkB,UAAU5B;IAC1C,OAAO,WAAP,GAAO,IAACF,sBAAaA;QAAE,GAAGiB,KAAK;QAAE,KAAKd;;AACxC;AACA0B,cAAO,WAAW,GAAG"}
@@ -30,6 +30,8 @@ interface CascaderBaseProps extends Omit<ButtonHTMLAttributes<HTMLButtonElement>
30
30
  cacheKey?: string | number;
31
31
  tagWrap?: boolean;
32
32
  maxTagCount?: number | 'responsive';
33
+ popupWidth?: number | string;
34
+ popupMaxWidth?: number | string;
33
35
  }
34
36
  export type CascaderProps = CascaderBaseProps & ({
35
37
  multiple?: false;
@@ -1 +1 @@
1
- {"version":3,"file":"cascader.d.ts","sourceRoot":"","sources":["../../../src/cascader/cascader.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AASf,OAAO,EAEL,KAAK,YAAY,EAGlB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGlE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACtC;AAED,UAAU,iBACR,SAAQ,IAAI,CACR,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,CAC5D,EACD,YAAY;IACd,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,SAAS,CAAC;IACtF,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,SAAS,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAC/F,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;CACrC;AACD,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAC3C,CACI;IACE,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CACzE,GACD;IACE,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;IACvC,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,KAAK,IAAI,CAAC;CAC7E,CACJ,CAAC;AAeJ,eAAO,MAAM,QAAQ,6GA6dnB,CAAC"}
1
+ {"version":3,"file":"cascader.d.ts","sourceRoot":"","sources":["../../../src/cascader/cascader.tsx"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,oBAAoB,EAEzB,KAAK,SAAS,EAMf,MAAM,OAAO,CAAC;AASf,OAAO,EAEL,KAAK,YAAY,EAGlB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAGlE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,SAAS,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACtC;AAED,UAAU,iBACR,SAAQ,IAAI,CACR,oBAAoB,CAAC,iBAAiB,CAAC,EACvC,MAAM,GAAG,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,CAC5D,EACD,YAAY;IACd,OAAO,EAAE,SAAS,cAAc,EAAE,CAAC;IACnC,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,SAAS,CAAC;IACtF,YAAY,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,KAAK,SAAS,CAAC;IACrD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,cAAc,EAAE,MAAM,EAAE,WAAW,KAAK,OAAO,CAAC,SAAS,cAAc,EAAE,CAAC,CAAC;IAC/F,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/D,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,GAAG,YAAY,CAAC;IACpC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AACD,MAAM,MAAM,aAAa,GAAG,iBAAiB,GAC3C,CACI;IACE,QAAQ,CAAC,EAAE,KAAK,CAAC;IACjB,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;CACzE,GACD;IACE,QAAQ,EAAE,IAAI,CAAC;IACf,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;IACvC,YAAY,CAAC,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC;IAC9C,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,eAAe,EAAE,cAAc,EAAE,EAAE,KAAK,IAAI,CAAC;CAC7E,CACJ,CAAC;AAeJ,eAAO,MAAM,QAAQ,6GAwenB,CAAC"}
@@ -26,7 +26,7 @@ function resolvePath(options, values) {
26
26
  return path;
27
27
  }
28
28
  const cascader_Cascader = /*#__PURE__*/ forwardRef(function(rawProps, forwardedRef) {
29
- const { options: suppliedOptions, value, defaultValue = emptyPath, size = 'md', status: statusProp, placeholder, name, form, required: requiredProp, allowClear = true, disabled: disabledProp, className, style, onChange, onOpenChange, open: controlledOpen, defaultOpen, multiple = false, readOnly, showSearch, changeOnSelect, displayRender, optionRender, loadData, onLoadError, cacheKey, tagWrap = true, maxTagCount, popupPlacement, popupClassName, popupStyle, popupRender, getPopupContainer, onClick, onKeyDown, 'aria-label': ariaLabel, id: idProp, 'aria-describedby': ariaDescribedByProp, 'aria-invalid': ariaInvalid, ...props } = useComponentProps('Cascader', rawProps);
29
+ const { options: suppliedOptions, value, defaultValue = emptyPath, size = 'md', status: statusProp, placeholder, name, form, required: requiredProp, allowClear = true, disabled: disabledProp, className, style, onChange, onOpenChange, open: controlledOpen, defaultOpen, multiple = false, readOnly, showSearch, changeOnSelect, displayRender, optionRender, loadData, onLoadError, cacheKey, tagWrap = true, maxTagCount, popupWidth = 'trigger', popupMaxWidth, popupPlacement, popupClassName, popupStyle, popupRender, getPopupContainer, onClick, onKeyDown, 'aria-label': ariaLabel, id: idProp, 'aria-describedby': ariaDescribedByProp, 'aria-invalid': ariaInvalid, ...props } = useComponentProps('Cascader', rawProps);
30
30
  const { messages, direction } = useLeafConfig();
31
31
  const format = useFormattedText();
32
32
  const [loaded, setLoaded] = useState(new Map());
@@ -69,6 +69,7 @@ const cascader_Cascader = /*#__PURE__*/ forwardRef(function(rawProps, forwardedR
69
69
  field?.descriptionId
70
70
  ].filter(Boolean).join(' ') || void 0;
71
71
  const triggerRef = useRef(null);
72
+ const rootRef = useRef(null);
72
73
  const panelRef = useRef(null);
73
74
  const ref = useMergedRef(triggerRef, forwardedRef);
74
75
  const panelId = `${useId()}-cascader`;
@@ -174,8 +175,10 @@ const cascader_Cascader = /*#__PURE__*/ forwardRef(function(rawProps, forwardedR
174
175
  }
175
176
  };
176
177
  return /*#__PURE__*/ jsxs("div", {
178
+ ref: rootRef,
177
179
  className: classes('leaf-cascader', `leaf-cascader--${size}`, multiple && 'leaf-cascader--multiple', className),
178
180
  style: style,
181
+ dir: props.dir ?? direction,
179
182
  "data-status": status,
180
183
  "data-disabled": disabled ? '' : void 0,
181
184
  "data-open": open ? '' : void 0,
@@ -183,6 +186,7 @@ const cascader_Cascader = /*#__PURE__*/ forwardRef(function(rawProps, forwardedR
183
186
  children: [
184
187
  /*#__PURE__*/ jsxs("button", {
185
188
  ...props,
189
+ dir: props.dir ?? direction,
186
190
  ref: ref,
187
191
  type: "button",
188
192
  form: form,
@@ -266,8 +270,11 @@ const cascader_Cascader = /*#__PURE__*/ forwardRef(function(rawProps, forwardedR
266
270
  render: popupRender,
267
271
  style: popupStyle,
268
272
  open: open,
269
- triggerRef: triggerRef,
273
+ triggerRef: rootRef,
270
274
  panelRef: panelRef,
275
+ matchWidth: 'trigger' === popupWidth,
276
+ width: 'trigger' === popupWidth ? void 0 : 'auto' === popupWidth ? 'max-content' : popupWidth,
277
+ maxWidth: popupMaxWidth,
271
278
  id: panelId,
272
279
  className: classes('leaf-floating leaf-cascader__panel', popupClassName),
273
280
  role: "dialog",
@@ -1 +1 @@
1
- {"version":3,"file":"cascader/cascader.js","sources":["../../../src/cascader/cascader.tsx"],"sourcesContent":["import { Check, ChevronDown, ChevronRight, LoaderCircle } from 'lucide-react';\nimport {\n type ButtonHTMLAttributes,\n forwardRef,\n type ReactNode,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { FieldScope, useFormField } from '../form/form';\nimport { InputControl } from '../input/input';\nimport { ScrollbarControl as Scrollbar } from '../scrollbar/scrollbar';\nimport { classes } from '../shared/classes';\nimport { ClearButton } from '../shared/clear-button';\nimport { FormValue, useFieldValue, useMergedRef } from '../shared/field';\nimport {\n FloatingPanel,\n type PopupOptions,\n useFloatingDismiss,\n usePopupState,\n} from '../shared/floating';\nimport { SelectionContent } from '../shared/selection-content';\nimport type { ControlSize, ControlStatus } from '../shared/types';\nimport { useFormattedText } from '../shared/use-formatted-text';\n\nexport interface CascaderOption {\n value: string;\n label: ReactNode;\n searchLabel?: string;\n isLeaf?: boolean;\n disabled?: boolean;\n children?: readonly CascaderOption[];\n}\n\ninterface CascaderBaseProps\n extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'type' | 'value' | 'defaultValue' | 'onChange' | 'children'\n >,\n PopupOptions {\n options: readonly CascaderOption[];\n size?: ControlSize;\n status?: ControlStatus;\n placeholder?: string;\n name?: string;\n required?: boolean;\n allowClear?: boolean;\n onOpenChange?: (open: boolean) => void;\n open?: boolean;\n defaultOpen?: boolean;\n readOnly?: boolean;\n showSearch?: boolean;\n changeOnSelect?: boolean;\n displayRender?: (labels: ReactNode[], selectedOptions: CascaderOption[]) => ReactNode;\n optionRender?: (option: CascaderOption) => ReactNode;\n loadData?: (option: CascaderOption, signal: AbortSignal) => Promise<readonly CascaderOption[]>;\n onLoadError?: (error: unknown, option: CascaderOption) => void;\n cacheKey?: string | number;\n tagWrap?: boolean;\n maxTagCount?: number | 'responsive';\n}\nexport type CascaderProps = CascaderBaseProps &\n (\n | {\n multiple?: false;\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (value: string[], selectedOptions: CascaderOption[]) => void;\n }\n | {\n multiple: true;\n value?: readonly (readonly string[])[];\n defaultValue?: readonly (readonly string[])[];\n onChange?: (value: string[][], selectedOptions: CascaderOption[][]) => void;\n }\n );\n\nconst emptyPath: readonly string[] = [];\nfunction resolvePath(options: readonly CascaderOption[], values: readonly string[]) {\n const path: CascaderOption[] = [];\n let level = options;\n for (const value of values) {\n const option = level.find((item) => item.value === value);\n if (!option) break;\n path.push(option);\n level = option.children ?? [];\n }\n return path;\n}\n\nexport const Cascader = forwardRef<HTMLButtonElement, CascaderProps>(function Cascader(\n rawProps: CascaderProps,\n forwardedRef,\n) {\n const {\n options: suppliedOptions,\n value,\n defaultValue = emptyPath,\n size = 'md',\n status: statusProp,\n placeholder,\n name,\n form,\n required: requiredProp,\n allowClear = true,\n disabled: disabledProp,\n className,\n style,\n onChange,\n onOpenChange,\n open: controlledOpen,\n defaultOpen,\n multiple = false,\n readOnly,\n showSearch,\n changeOnSelect,\n displayRender,\n optionRender,\n loadData,\n onLoadError,\n cacheKey,\n tagWrap = true,\n maxTagCount,\n popupPlacement,\n popupClassName,\n popupStyle,\n popupRender,\n getPopupContainer,\n onClick,\n onKeyDown,\n 'aria-label': ariaLabel,\n id: idProp,\n 'aria-describedby': ariaDescribedByProp,\n 'aria-invalid': ariaInvalid,\n ...props\n } = useComponentProps('Cascader', rawProps);\n const { messages, direction } = useLeafConfig();\n const format = useFormattedText();\n const [loaded, setLoaded] = useState(new Map<string, readonly CascaderOption[]>());\n const [loading, setLoading] = useState(new Set<string>());\n const requests = useRef(new Map<string, AbortController>());\n // biome-ignore lint/correctness/useExhaustiveDependencies: Invalidate lazy children and abort requests when the source or explicit 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(new Set());\n return () => {\n for (const request of requests.current.values()) request.abort();\n };\n }, [suppliedOptions, loadData, cacheKey]);\n const options = useMemo(() => {\n const merge = (entries: readonly CascaderOption[]): CascaderOption[] =>\n entries.map((option) => {\n const children = option.children ?? loaded.get(option.value);\n return children\n ? { ...option, children: merge(children), isLeaf: !children.length }\n : option;\n });\n return merge(suppliedOptions);\n }, [suppliedOptions, loaded]);\n const field = useFormField();\n const disabled = disabledProp || field?.disabled;\n const required = requiredProp ?? field?.required;\n const status = statusProp ?? (field?.error ? 'error' : undefined);\n const id = idProp ?? field?.id;\n const ariaDescribedBy =\n [ariaDescribedByProp, field?.descriptionId].filter(Boolean).join(' ') || undefined;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const ref = useMergedRef(triggerRef, forwardedRef);\n const panelId = `${useId()}-cascader`;\n const [selectedValue, setSelectedValue] = useFieldValue<\n readonly string[] | readonly (readonly string[])[]\n >(value, defaultValue, triggerRef, form);\n const paths = multiple\n ? (selectedValue as readonly (readonly string[])[])\n : selectedValue.length\n ? [selectedValue as readonly string[]]\n : [];\n const [draft, setDraft] = useState<readonly string[]>(paths[0] ?? []);\n const [query, setQuery] = useState('');\n const [open, setOpen] = usePopupState(\n disabled || readOnly,\n onOpenChange,\n controlledOpen,\n defaultOpen,\n );\n const [focusLevel, setFocusLevel] = useState<number | null>(null);\n const selectedPaths = paths.map((path) => resolvePath(options, path));\n const caption = (path: CascaderOption[]) =>\n displayRender?.(\n path.map((option) => option.label),\n path,\n ) ??\n path\n .map(\n (option) =>\n option.searchLabel ?? (typeof option.label === 'string' ? option.label : option.value),\n )\n .join(' / ');\n const searchResults: CascaderOption[][] = [];\n const visit = (entries: readonly CascaderOption[], path: CascaderOption[]) => {\n for (const entry of entries) {\n const next = [...path, entry];\n if (entry.disabled) continue;\n if (changeOnSelect || (!entry.children?.length && (!loadData || entry.isLeaf !== false))) {\n if (\n next\n .map(\n (option) =>\n option.searchLabel ??\n (typeof option.label === 'string' ? option.label : option.value),\n )\n .join(' / ')\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase())\n )\n searchResults.push(next);\n }\n if (entry.children) visit(entry.children, next);\n }\n };\n if (query) visit(options, []);\n const draftOptions = resolvePath(options, draft);\n const levels: (readonly CascaderOption[])[] = [options];\n for (const option of draftOptions) if (option.children?.length) levels.push(option.children);\n const close = () => {\n setOpen(false);\n };\n useFloatingDismiss(open, close, triggerRef, panelRef);\n useEffect(() => {\n if (open && focusLevel !== null) {\n const column = panelRef.current?.querySelector<HTMLElement>(`[data-level='${focusLevel}']`);\n const option =\n column?.querySelector<HTMLButtonElement>('button[aria-selected=\"true\"]:not(:disabled)') ??\n column?.querySelector<HTMLButtonElement>('button:not(:disabled)');\n option?.focus();\n option?.scrollIntoView?.({ block: 'nearest' });\n setFocusLevel(null);\n }\n }, [open, focusLevel]);\n\n const openPanel = () => {\n if (disabled) return;\n setDraft(paths[0] ?? []);\n setFocusLevel(0);\n setOpen(true);\n };\n const choose = (option: CascaderOption, level: number) => {\n if (option.disabled || disabled || readOnly) return;\n const next = [...draft.slice(0, level), option.value];\n setDraft(next);\n if (\n loadData &&\n option.isLeaf === false &&\n option.children === undefined &&\n !requests.current.has(option.value)\n ) {\n const request = new AbortController();\n requests.current.set(option.value, request);\n setLoading((previous) => new Set(previous).add(option.value));\n void loadData(option, request.signal)\n .then((children) => {\n if (!request.signal.aborted)\n setLoaded((previous) => new Map(previous).set(option.value, children));\n })\n .catch((error) => {\n if (!request.signal.aborted) onLoadError?.(error, option);\n })\n .finally(() => {\n if (requests.current.get(option.value) === request) {\n requests.current.delete(option.value);\n setLoading((previous) => {\n const next = new Set(previous);\n next.delete(option.value);\n return next;\n });\n }\n });\n return;\n }\n if (changeOnSelect || (!option.children?.length && option.isLeaf !== false))\n commit(next, !option.children?.length);\n };\n const commit = (path: string[], leaf = true) => {\n if (disabled || readOnly) return;\n const next = multiple\n ? paths.some((current) => JSON.stringify(current) === JSON.stringify(path))\n ? paths\n .filter((current) => JSON.stringify(current) !== JSON.stringify(path))\n .map((current) => [...current])\n : [...paths.map((current) => [...current]), path]\n : path;\n setSelectedValue(next);\n (\n onChange as\n | ((value: string[] | string[][], options: CascaderOption[] | CascaderOption[][]) => void)\n | undefined\n )?.(\n next,\n multiple\n ? (next as string[][]).map((path) => resolvePath(options, path))\n : resolvePath(options, path),\n );\n if (!multiple && leaf) {\n close();\n triggerRef.current?.focus();\n }\n };\n\n return (\n <div\n className={classes(\n 'leaf-cascader',\n `leaf-cascader--${size}`,\n multiple && 'leaf-cascader--multiple',\n className,\n )}\n style={style}\n data-status={status}\n data-disabled={disabled ? '' : undefined}\n data-open={open ? '' : undefined}\n data-clearable={allowClear && selectedValue.length && !disabled && !readOnly ? '' : undefined}\n >\n <button\n {...props}\n ref={ref}\n type=\"button\"\n form={form}\n className=\"leaf-cascader__trigger\"\n disabled={disabled}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-controls={panelId}\n aria-label={ariaLabel}\n id={id}\n aria-describedby={ariaDescribedBy}\n aria-invalid={status === 'error' ? true : ariaInvalid}\n aria-required={required || undefined}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n if (open) close();\n else openPanel();\n }\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!open) openPanel();\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n close();\n }\n }}\n >\n {multiple && selectedPaths.length ? (\n <SelectionContent\n className=\"leaf-cascader__value\"\n tagClassName=\"leaf-cascader__tag\"\n tagWrap={tagWrap}\n maxTagCount={maxTagCount}\n items={selectedPaths.map((path, index) => ({\n key: JSON.stringify(paths[index]),\n label: caption(path),\n text: path\n .map(\n (option) =>\n option.searchLabel ??\n (typeof option.label === 'string' ? option.label : option.value),\n )\n .join(' / '),\n }))}\n />\n ) : (\n <span\n className={classes(\n 'leaf-cascader__value',\n !selectedPaths.length && 'leaf-cascader__placeholder',\n )}\n >\n {selectedPaths.length\n ? selectedPaths.map((path, index) => (\n <span key={paths[index]?.join('/')}>\n {index > 0 ? '、' : ''}\n {caption(path)}\n </span>\n ))\n : placeholder || messages.cascader.placeholder}\n </span>\n )}\n <ChevronDown size={16} aria-hidden=\"true\" />\n </button>\n {allowClear && selectedValue.length > 0 && !disabled && !readOnly && (\n <ClearButton\n label={messages.cascader.clear}\n beforeArrow\n onClear={() => {\n setSelectedValue([]);\n setDraft([]);\n (onChange as ((value: [], options: []) => void) | undefined)?.([], []);\n close();\n triggerRef.current?.focus();\n }}\n />\n )}\n <FormValue\n name={name}\n form={form}\n required={required}\n disabled={disabled}\n value={selectedValue.length ? JSON.stringify(selectedValue) : ''}\n triggerRef={triggerRef}\n />\n <FloatingPanel\n placement={popupPlacement}\n container={getPopupContainer}\n render={popupRender}\n style={popupStyle}\n open={open}\n triggerRef={triggerRef}\n panelRef={panelRef}\n id={panelId}\n className={classes('leaf-floating leaf-cascader__panel', popupClassName)}\n role=\"dialog\"\n aria-label={ariaLabel || messages.cascader.placeholder}\n >\n {showSearch && (\n <FieldScope>\n <div className=\"leaf-cascader__search\">\n <InputControl\n allowClear\n aria-label={messages.common.search}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n />\n </div>\n </FieldScope>\n )}\n {query ? (\n <Scrollbar\n role=\"listbox\"\n aria-label={messages.common.search}\n className=\"leaf-cascader__column\"\n orientation=\"vertical\"\n maxHeight={256}\n >\n {searchResults.length ? (\n searchResults.map((path) => (\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={paths.some(\n (current) =>\n JSON.stringify(current) ===\n JSON.stringify(path.map((option) => option.value)),\n )}\n className=\"leaf-floating__option\"\n key={path.map((option) => option.value).join('/')}\n onClick={() => commit(path.map((option) => option.value))}\n >\n {caption(path)}\n </button>\n ))\n ) : (\n <div className=\"leaf-floating__empty\">{messages.cascader.empty}</div>\n )}\n </Scrollbar>\n ) : (\n <div className=\"leaf-cascader__columns\">\n {levels.map((level, depth) => (\n <Scrollbar\n key={depth === 0 ? 'root' : draft[depth - 1]}\n className=\"leaf-cascader__column\"\n orientation=\"vertical\"\n maxHeight={256}\n data-level={depth}\n role=\"listbox\"\n aria-label={format('cascader.level', { level: depth + 1 })}\n >\n {level.length ? (\n level.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n role=\"option\"\n className=\"leaf-floating__option\"\n aria-selected={draft[depth] === option.value}\n disabled={option.disabled}\n tabIndex={\n option.value ===\n (draft[depth] ?? level.find((item) => !item.disabled)?.value)\n ? 0\n : -1\n }\n onClick={() => {\n choose(option, depth);\n if (option.children?.length) setFocusLevel(depth + 1);\n }}\n onKeyDown={(event) => {\n if (\n event.key === (direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight') &&\n (option.children?.length || option.isLeaf === false)\n ) {\n event.preventDefault();\n choose(option, depth);\n setFocusLevel(depth + 1);\n } else if (\n event.key === (direction === 'rtl' ? 'ArrowRight' : 'ArrowLeft') &&\n depth > 0\n ) {\n event.preventDefault();\n setFocusLevel(depth - 1);\n } else if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n event.preventDefault();\n const items = Array.from(\n event.currentTarget.parentElement?.querySelectorAll<HTMLButtonElement>(\n 'button:not(:disabled)',\n ) ?? [],\n );\n const index = items.indexOf(event.currentTarget);\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : (index + (event.key === 'ArrowDown' ? 1 : -1) + items.length) %\n items.length;\n items[next]?.focus();\n items[next]?.scrollIntoView?.({ block: 'nearest' });\n }\n }}\n >\n <span>{optionRender?.(option) ?? option.label}</span>\n {loading.has(option.value) ? (\n <LoaderCircle size={14} className=\"leaf-select__spinner\" />\n ) : option.children?.length || option.isLeaf === false ? (\n <ChevronRight size={14} aria-hidden=\"true\" />\n ) : (\n (multiple\n ? paths.some(\n (path) =>\n JSON.stringify(path) ===\n JSON.stringify([...draft.slice(0, depth), option.value]),\n )\n : draft[depth] === option.value) && (\n <Check size={14} className=\"leaf-cascader__check\" aria-hidden=\"true\" />\n )\n )}\n </button>\n ))\n ) : (\n <div className=\"leaf-floating__empty\">{messages.cascader.empty}</div>\n )}\n </Scrollbar>\n ))}\n </div>\n )}\n </FloatingPanel>\n </div>\n );\n});\nCascader.displayName = 'Cascader';\n"],"names":["emptyPath","resolvePath","options","values","path","level","value","option","item","Cascader","forwardRef","rawProps","forwardedRef","suppliedOptions","defaultValue","size","statusProp","placeholder","name","form","requiredProp","allowClear","disabledProp","className","style","onChange","onOpenChange","controlledOpen","defaultOpen","multiple","readOnly","showSearch","changeOnSelect","displayRender","optionRender","loadData","onLoadError","cacheKey","tagWrap","maxTagCount","popupPlacement","popupClassName","popupStyle","popupRender","getPopupContainer","onClick","onKeyDown","ariaLabel","idProp","ariaDescribedByProp","ariaInvalid","props","useComponentProps","messages","direction","useLeafConfig","format","useFormattedText","loaded","setLoaded","useState","Map","loading","setLoading","Set","requests","useRef","useEffect","request","useMemo","merge","entries","children","field","useFormField","disabled","required","status","undefined","id","ariaDescribedBy","Boolean","triggerRef","panelRef","ref","useMergedRef","panelId","useId","selectedValue","setSelectedValue","useFieldValue","paths","draft","setDraft","query","setQuery","open","setOpen","usePopupState","focusLevel","setFocusLevel","selectedPaths","caption","searchResults","visit","entry","next","draftOptions","levels","close","useFloatingDismiss","column","openPanel","choose","AbortController","previous","error","commit","leaf","current","JSON","classes","event","SelectionContent","index","ChevronDown","ClearButton","FormValue","FloatingPanel","FieldScope","InputControl","Scrollbar","depth","items","Array","LoaderCircle","ChevronRight","Check"],"mappings":"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"}
1
+ {"version":3,"file":"cascader/cascader.js","sources":["../../../src/cascader/cascader.tsx"],"sourcesContent":["import { Check, ChevronDown, ChevronRight, LoaderCircle } from 'lucide-react';\nimport {\n type ButtonHTMLAttributes,\n forwardRef,\n type ReactNode,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { FieldScope, useFormField } from '../form/form';\nimport { InputControl } from '../input/input';\nimport { ScrollbarControl as Scrollbar } from '../scrollbar/scrollbar';\nimport { classes } from '../shared/classes';\nimport { ClearButton } from '../shared/clear-button';\nimport { FormValue, useFieldValue, useMergedRef } from '../shared/field';\nimport {\n FloatingPanel,\n type PopupOptions,\n useFloatingDismiss,\n usePopupState,\n} from '../shared/floating';\nimport { SelectionContent } from '../shared/selection-content';\nimport type { ControlSize, ControlStatus } from '../shared/types';\nimport { useFormattedText } from '../shared/use-formatted-text';\n\nexport interface CascaderOption {\n value: string;\n label: ReactNode;\n searchLabel?: string;\n isLeaf?: boolean;\n disabled?: boolean;\n children?: readonly CascaderOption[];\n}\n\ninterface CascaderBaseProps\n extends Omit<\n ButtonHTMLAttributes<HTMLButtonElement>,\n 'type' | 'value' | 'defaultValue' | 'onChange' | 'children'\n >,\n PopupOptions {\n options: readonly CascaderOption[];\n size?: ControlSize;\n status?: ControlStatus;\n placeholder?: string;\n name?: string;\n required?: boolean;\n allowClear?: boolean;\n onOpenChange?: (open: boolean) => void;\n open?: boolean;\n defaultOpen?: boolean;\n readOnly?: boolean;\n showSearch?: boolean;\n changeOnSelect?: boolean;\n displayRender?: (labels: ReactNode[], selectedOptions: CascaderOption[]) => ReactNode;\n optionRender?: (option: CascaderOption) => ReactNode;\n loadData?: (option: CascaderOption, signal: AbortSignal) => Promise<readonly CascaderOption[]>;\n onLoadError?: (error: unknown, option: CascaderOption) => void;\n cacheKey?: string | number;\n tagWrap?: boolean;\n maxTagCount?: number | 'responsive';\n popupWidth?: number | string;\n popupMaxWidth?: number | string;\n}\nexport type CascaderProps = CascaderBaseProps &\n (\n | {\n multiple?: false;\n value?: readonly string[];\n defaultValue?: readonly string[];\n onChange?: (value: string[], selectedOptions: CascaderOption[]) => void;\n }\n | {\n multiple: true;\n value?: readonly (readonly string[])[];\n defaultValue?: readonly (readonly string[])[];\n onChange?: (value: string[][], selectedOptions: CascaderOption[][]) => void;\n }\n );\n\nconst emptyPath: readonly string[] = [];\nfunction resolvePath(options: readonly CascaderOption[], values: readonly string[]) {\n const path: CascaderOption[] = [];\n let level = options;\n for (const value of values) {\n const option = level.find((item) => item.value === value);\n if (!option) break;\n path.push(option);\n level = option.children ?? [];\n }\n return path;\n}\n\nexport const Cascader = forwardRef<HTMLButtonElement, CascaderProps>(function Cascader(\n rawProps: CascaderProps,\n forwardedRef,\n) {\n const {\n options: suppliedOptions,\n value,\n defaultValue = emptyPath,\n size = 'md',\n status: statusProp,\n placeholder,\n name,\n form,\n required: requiredProp,\n allowClear = true,\n disabled: disabledProp,\n className,\n style,\n onChange,\n onOpenChange,\n open: controlledOpen,\n defaultOpen,\n multiple = false,\n readOnly,\n showSearch,\n changeOnSelect,\n displayRender,\n optionRender,\n loadData,\n onLoadError,\n cacheKey,\n tagWrap = true,\n maxTagCount,\n popupWidth = 'trigger',\n popupMaxWidth,\n popupPlacement,\n popupClassName,\n popupStyle,\n popupRender,\n getPopupContainer,\n onClick,\n onKeyDown,\n 'aria-label': ariaLabel,\n id: idProp,\n 'aria-describedby': ariaDescribedByProp,\n 'aria-invalid': ariaInvalid,\n ...props\n } = useComponentProps('Cascader', rawProps);\n const { messages, direction } = useLeafConfig();\n const format = useFormattedText();\n const [loaded, setLoaded] = useState(new Map<string, readonly CascaderOption[]>());\n const [loading, setLoading] = useState(new Set<string>());\n const requests = useRef(new Map<string, AbortController>());\n // biome-ignore lint/correctness/useExhaustiveDependencies: Invalidate lazy children and abort requests when the source or explicit 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(new Set());\n return () => {\n for (const request of requests.current.values()) request.abort();\n };\n }, [suppliedOptions, loadData, cacheKey]);\n const options = useMemo(() => {\n const merge = (entries: readonly CascaderOption[]): CascaderOption[] =>\n entries.map((option) => {\n const children = option.children ?? loaded.get(option.value);\n return children\n ? { ...option, children: merge(children), isLeaf: !children.length }\n : option;\n });\n return merge(suppliedOptions);\n }, [suppliedOptions, loaded]);\n const field = useFormField();\n const disabled = disabledProp || field?.disabled;\n const required = requiredProp ?? field?.required;\n const status = statusProp ?? (field?.error ? 'error' : undefined);\n const id = idProp ?? field?.id;\n const ariaDescribedBy =\n [ariaDescribedByProp, field?.descriptionId].filter(Boolean).join(' ') || undefined;\n const triggerRef = useRef<HTMLButtonElement>(null);\n const rootRef = useRef<HTMLDivElement>(null);\n const panelRef = useRef<HTMLDivElement>(null);\n const ref = useMergedRef(triggerRef, forwardedRef);\n const panelId = `${useId()}-cascader`;\n const [selectedValue, setSelectedValue] = useFieldValue<\n readonly string[] | readonly (readonly string[])[]\n >(value, defaultValue, triggerRef, form);\n const paths = multiple\n ? (selectedValue as readonly (readonly string[])[])\n : selectedValue.length\n ? [selectedValue as readonly string[]]\n : [];\n const [draft, setDraft] = useState<readonly string[]>(paths[0] ?? []);\n const [query, setQuery] = useState('');\n const [open, setOpen] = usePopupState(\n disabled || readOnly,\n onOpenChange,\n controlledOpen,\n defaultOpen,\n );\n const [focusLevel, setFocusLevel] = useState<number | null>(null);\n const selectedPaths = paths.map((path) => resolvePath(options, path));\n const caption = (path: CascaderOption[]) =>\n displayRender?.(\n path.map((option) => option.label),\n path,\n ) ??\n path\n .map(\n (option) =>\n option.searchLabel ?? (typeof option.label === 'string' ? option.label : option.value),\n )\n .join(' / ');\n const searchResults: CascaderOption[][] = [];\n const visit = (entries: readonly CascaderOption[], path: CascaderOption[]) => {\n for (const entry of entries) {\n const next = [...path, entry];\n if (entry.disabled) continue;\n if (changeOnSelect || (!entry.children?.length && (!loadData || entry.isLeaf !== false))) {\n if (\n next\n .map(\n (option) =>\n option.searchLabel ??\n (typeof option.label === 'string' ? option.label : option.value),\n )\n .join(' / ')\n .toLocaleLowerCase()\n .includes(query.toLocaleLowerCase())\n )\n searchResults.push(next);\n }\n if (entry.children) visit(entry.children, next);\n }\n };\n if (query) visit(options, []);\n const draftOptions = resolvePath(options, draft);\n const levels: (readonly CascaderOption[])[] = [options];\n for (const option of draftOptions) if (option.children?.length) levels.push(option.children);\n const close = () => {\n setOpen(false);\n };\n useFloatingDismiss(open, close, triggerRef, panelRef);\n useEffect(() => {\n if (open && focusLevel !== null) {\n const column = panelRef.current?.querySelector<HTMLElement>(`[data-level='${focusLevel}']`);\n const option =\n column?.querySelector<HTMLButtonElement>('button[aria-selected=\"true\"]:not(:disabled)') ??\n column?.querySelector<HTMLButtonElement>('button:not(:disabled)');\n option?.focus();\n option?.scrollIntoView?.({ block: 'nearest' });\n setFocusLevel(null);\n }\n }, [open, focusLevel]);\n\n const openPanel = () => {\n if (disabled) return;\n setDraft(paths[0] ?? []);\n setFocusLevel(0);\n setOpen(true);\n };\n const choose = (option: CascaderOption, level: number) => {\n if (option.disabled || disabled || readOnly) return;\n const next = [...draft.slice(0, level), option.value];\n setDraft(next);\n if (\n loadData &&\n option.isLeaf === false &&\n option.children === undefined &&\n !requests.current.has(option.value)\n ) {\n const request = new AbortController();\n requests.current.set(option.value, request);\n setLoading((previous) => new Set(previous).add(option.value));\n void loadData(option, request.signal)\n .then((children) => {\n if (!request.signal.aborted)\n setLoaded((previous) => new Map(previous).set(option.value, children));\n })\n .catch((error) => {\n if (!request.signal.aborted) onLoadError?.(error, option);\n })\n .finally(() => {\n if (requests.current.get(option.value) === request) {\n requests.current.delete(option.value);\n setLoading((previous) => {\n const next = new Set(previous);\n next.delete(option.value);\n return next;\n });\n }\n });\n return;\n }\n if (changeOnSelect || (!option.children?.length && option.isLeaf !== false))\n commit(next, !option.children?.length);\n };\n const commit = (path: string[], leaf = true) => {\n if (disabled || readOnly) return;\n const next = multiple\n ? paths.some((current) => JSON.stringify(current) === JSON.stringify(path))\n ? paths\n .filter((current) => JSON.stringify(current) !== JSON.stringify(path))\n .map((current) => [...current])\n : [...paths.map((current) => [...current]), path]\n : path;\n setSelectedValue(next);\n (\n onChange as\n | ((value: string[] | string[][], options: CascaderOption[] | CascaderOption[][]) => void)\n | undefined\n )?.(\n next,\n multiple\n ? (next as string[][]).map((path) => resolvePath(options, path))\n : resolvePath(options, path),\n );\n if (!multiple && leaf) {\n close();\n triggerRef.current?.focus();\n }\n };\n\n return (\n <div\n ref={rootRef}\n className={classes(\n 'leaf-cascader',\n `leaf-cascader--${size}`,\n multiple && 'leaf-cascader--multiple',\n className,\n )}\n style={style}\n dir={props.dir ?? direction}\n data-status={status}\n data-disabled={disabled ? '' : undefined}\n data-open={open ? '' : undefined}\n data-clearable={allowClear && selectedValue.length && !disabled && !readOnly ? '' : undefined}\n >\n <button\n {...props}\n dir={props.dir ?? direction}\n ref={ref}\n type=\"button\"\n form={form}\n className=\"leaf-cascader__trigger\"\n disabled={disabled}\n role=\"combobox\"\n aria-expanded={open}\n aria-haspopup=\"dialog\"\n aria-controls={panelId}\n aria-label={ariaLabel}\n id={id}\n aria-describedby={ariaDescribedBy}\n aria-invalid={status === 'error' ? true : ariaInvalid}\n aria-required={required || undefined}\n onClick={(event) => {\n onClick?.(event);\n if (!event.defaultPrevented) {\n if (open) close();\n else openPanel();\n }\n }}\n onKeyDown={(event) => {\n onKeyDown?.(event);\n if (event.defaultPrevented) return;\n if (event.key === 'ArrowDown') {\n event.preventDefault();\n if (!open) openPanel();\n }\n if (event.key === 'Escape') {\n event.preventDefault();\n event.stopPropagation();\n close();\n }\n }}\n >\n {multiple && selectedPaths.length ? (\n <SelectionContent\n className=\"leaf-cascader__value\"\n tagClassName=\"leaf-cascader__tag\"\n tagWrap={tagWrap}\n maxTagCount={maxTagCount}\n items={selectedPaths.map((path, index) => ({\n key: JSON.stringify(paths[index]),\n label: caption(path),\n text: path\n .map(\n (option) =>\n option.searchLabel ??\n (typeof option.label === 'string' ? option.label : option.value),\n )\n .join(' / '),\n }))}\n />\n ) : (\n <span\n className={classes(\n 'leaf-cascader__value',\n !selectedPaths.length && 'leaf-cascader__placeholder',\n )}\n >\n {selectedPaths.length\n ? selectedPaths.map((path, index) => (\n <span key={paths[index]?.join('/')}>\n {index > 0 ? '、' : ''}\n {caption(path)}\n </span>\n ))\n : placeholder || messages.cascader.placeholder}\n </span>\n )}\n <ChevronDown size={16} aria-hidden=\"true\" />\n </button>\n {allowClear && selectedValue.length > 0 && !disabled && !readOnly && (\n <ClearButton\n label={messages.cascader.clear}\n beforeArrow\n onClear={() => {\n setSelectedValue([]);\n setDraft([]);\n (onChange as ((value: [], options: []) => void) | undefined)?.([], []);\n close();\n triggerRef.current?.focus();\n }}\n />\n )}\n <FormValue\n name={name}\n form={form}\n required={required}\n disabled={disabled}\n value={selectedValue.length ? JSON.stringify(selectedValue) : ''}\n triggerRef={triggerRef}\n />\n <FloatingPanel\n placement={popupPlacement}\n container={getPopupContainer}\n render={popupRender}\n style={popupStyle}\n open={open}\n triggerRef={rootRef}\n panelRef={panelRef}\n matchWidth={popupWidth === 'trigger'}\n width={\n popupWidth === 'trigger' ? undefined : popupWidth === 'auto' ? 'max-content' : popupWidth\n }\n maxWidth={popupMaxWidth}\n id={panelId}\n className={classes('leaf-floating leaf-cascader__panel', popupClassName)}\n role=\"dialog\"\n aria-label={ariaLabel || messages.cascader.placeholder}\n >\n {showSearch && (\n <FieldScope>\n <div className=\"leaf-cascader__search\">\n <InputControl\n allowClear\n aria-label={messages.common.search}\n value={query}\n onChange={(event) => setQuery(event.target.value)}\n />\n </div>\n </FieldScope>\n )}\n {query ? (\n <Scrollbar\n role=\"listbox\"\n aria-label={messages.common.search}\n className=\"leaf-cascader__column\"\n orientation=\"vertical\"\n maxHeight={256}\n >\n {searchResults.length ? (\n searchResults.map((path) => (\n <button\n type=\"button\"\n role=\"option\"\n aria-selected={paths.some(\n (current) =>\n JSON.stringify(current) ===\n JSON.stringify(path.map((option) => option.value)),\n )}\n className=\"leaf-floating__option\"\n key={path.map((option) => option.value).join('/')}\n onClick={() => commit(path.map((option) => option.value))}\n >\n {caption(path)}\n </button>\n ))\n ) : (\n <div className=\"leaf-floating__empty\">{messages.cascader.empty}</div>\n )}\n </Scrollbar>\n ) : (\n <div className=\"leaf-cascader__columns\">\n {levels.map((level, depth) => (\n <Scrollbar\n key={depth === 0 ? 'root' : draft[depth - 1]}\n className=\"leaf-cascader__column\"\n orientation=\"vertical\"\n maxHeight={256}\n data-level={depth}\n role=\"listbox\"\n aria-label={format('cascader.level', { level: depth + 1 })}\n >\n {level.length ? (\n level.map((option) => (\n <button\n key={option.value}\n type=\"button\"\n role=\"option\"\n className=\"leaf-floating__option\"\n aria-selected={draft[depth] === option.value}\n disabled={option.disabled}\n tabIndex={\n option.value ===\n (draft[depth] ?? level.find((item) => !item.disabled)?.value)\n ? 0\n : -1\n }\n onClick={() => {\n choose(option, depth);\n if (option.children?.length) setFocusLevel(depth + 1);\n }}\n onKeyDown={(event) => {\n if (\n event.key === (direction === 'rtl' ? 'ArrowLeft' : 'ArrowRight') &&\n (option.children?.length || option.isLeaf === false)\n ) {\n event.preventDefault();\n choose(option, depth);\n setFocusLevel(depth + 1);\n } else if (\n event.key === (direction === 'rtl' ? 'ArrowRight' : 'ArrowLeft') &&\n depth > 0\n ) {\n event.preventDefault();\n setFocusLevel(depth - 1);\n } else if (['ArrowUp', 'ArrowDown', 'Home', 'End'].includes(event.key)) {\n event.preventDefault();\n const items = Array.from(\n event.currentTarget.parentElement?.querySelectorAll<HTMLButtonElement>(\n 'button:not(:disabled)',\n ) ?? [],\n );\n const index = items.indexOf(event.currentTarget);\n const next =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : (index + (event.key === 'ArrowDown' ? 1 : -1) + items.length) %\n items.length;\n items[next]?.focus();\n items[next]?.scrollIntoView?.({ block: 'nearest' });\n }\n }}\n >\n <span>{optionRender?.(option) ?? option.label}</span>\n {loading.has(option.value) ? (\n <LoaderCircle size={14} className=\"leaf-select__spinner\" />\n ) : option.children?.length || option.isLeaf === false ? (\n <ChevronRight size={14} aria-hidden=\"true\" />\n ) : (\n (multiple\n ? paths.some(\n (path) =>\n JSON.stringify(path) ===\n JSON.stringify([...draft.slice(0, depth), option.value]),\n )\n : draft[depth] === option.value) && (\n <Check size={14} className=\"leaf-cascader__check\" aria-hidden=\"true\" />\n )\n )}\n </button>\n ))\n ) : (\n <div className=\"leaf-floating__empty\">{messages.cascader.empty}</div>\n )}\n </Scrollbar>\n ))}\n </div>\n )}\n </FloatingPanel>\n </div>\n );\n});\nCascader.displayName = 'Cascader';\n"],"names":["emptyPath","resolvePath","options","values","path","level","value","option","item","Cascader","forwardRef","rawProps","forwardedRef","suppliedOptions","defaultValue","size","statusProp","placeholder","name","form","requiredProp","allowClear","disabledProp","className","style","onChange","onOpenChange","controlledOpen","defaultOpen","multiple","readOnly","showSearch","changeOnSelect","displayRender","optionRender","loadData","onLoadError","cacheKey","tagWrap","maxTagCount","popupWidth","popupMaxWidth","popupPlacement","popupClassName","popupStyle","popupRender","getPopupContainer","onClick","onKeyDown","ariaLabel","idProp","ariaDescribedByProp","ariaInvalid","props","useComponentProps","messages","direction","useLeafConfig","format","useFormattedText","loaded","setLoaded","useState","Map","loading","setLoading","Set","requests","useRef","useEffect","request","useMemo","merge","entries","children","field","useFormField","disabled","required","status","undefined","id","ariaDescribedBy","Boolean","triggerRef","rootRef","panelRef","ref","useMergedRef","panelId","useId","selectedValue","setSelectedValue","useFieldValue","paths","draft","setDraft","query","setQuery","open","setOpen","usePopupState","focusLevel","setFocusLevel","selectedPaths","caption","searchResults","visit","entry","next","draftOptions","levels","close","useFloatingDismiss","column","openPanel","choose","AbortController","previous","error","commit","leaf","current","JSON","classes","event","SelectionContent","index","ChevronDown","ClearButton","FormValue","FloatingPanel","FieldScope","InputControl","Scrollbar","depth","items","Array","LoaderCircle","ChevronRight","Check"],"mappings":"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"}
@@ -28,8 +28,10 @@ export declare const defaultColors: {
28
28
  border: string;
29
29
  };
30
30
  };
31
+ /** Prefer white labels at 2.8:1 contrast; brighter fills use black unless explicitly overridden. */
32
+ export declare function primaryForeground(color: string): "#000000" | "#ffffff" | undefined;
31
33
  /** sRGB mixing with premultiplied alpha, matching CSS transparent-color semantics. */
32
34
  export declare function mixColors(first: string | undefined, second: string | undefined, weight: number): string | undefined;
33
- /** Concrete values only; CSS variable inputs can be resolved by the provider in the browser. */
35
+ /** Keep CSS expressions reactive in SSR; resolve contrast-sensitive values after hydration. */
34
36
  export declare function deriveColors(appearance: 'light' | 'dark', overrides?: Record<string, string>): Record<`--leaf-${string}`, string>;
35
37
  //# sourceMappingURL=colors.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/colors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa;IACxB,KAAK;QACH,OAAO;QACP,YAAY;QACZ,MAAM;QACN,WAAW;QACX,OAAO;QACP,IAAI;QACJ,OAAO;QACP,IAAI;QACJ,YAAY;QACZ,OAAO;QACP,eAAe;QACf,MAAM;;IAER,IAAI;QACF,OAAO;QACP,YAAY;QACZ,MAAM;QACN,WAAW;QACX,OAAO;QACP,IAAI;QACJ,OAAO;QACP,IAAI;QACJ,YAAY;QACZ,OAAO;QACP,eAAe;QACf,MAAM;;CAET,CAAC;AAEF,sFAAsF;AACtF,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,SAAS,CAYpB;AAaD,gGAAgG;AAChG,wBAAgB,YAAY,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,sCAoDhG"}
1
+ {"version":3,"file":"colors.d.ts","sourceRoot":"","sources":["../../src/colors.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa;IACxB,KAAK;QACH,OAAO;QACP,YAAY;QACZ,MAAM;QACN,WAAW;QACX,OAAO;QACP,IAAI;QACJ,OAAO;QACP,IAAI;QACJ,YAAY;QACZ,OAAO;QACP,eAAe;QACf,MAAM;;IAER,IAAI;QACF,OAAO;QACP,YAAY;QACZ,MAAM;QACN,WAAW;QACX,OAAO;QACP,IAAI;QACJ,OAAO;QACP,IAAI;QACJ,YAAY;QACZ,OAAO;QACP,eAAe;QACf,MAAM;;CAET,CAAC;AAEF,oGAAoG;AACpG,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,qCAG9C;AA8BD,sFAAsF;AACtF,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,GAAG,SAAS,EACzB,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,SAAS,CAiBpB;AAmBD,+FAA+F;AAC/F,wBAAgB,YAAY,CAAC,UAAU,EAAE,OAAO,GAAG,MAAM,EAAE,SAAS,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,sCA8FhG"}