@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":"tabs/tabs.js","sources":["../../../src/tabs/tabs.tsx"],"sourcesContent":["import {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n horizontalListSortingStrategy,\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { Ellipsis, GripVertical, Plus, X } from 'lucide-react';\nimport {\n type HTMLAttributes,\n type MouseEvent,\n type ReactNode,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { ButtonControl } from '../button/button';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { DropdownControl as Dropdown } from '../dropdown/dropdown';\nimport { classes } from '../shared/classes';\nimport { useMotionEnabled } from '../shared/motion';\nimport type { ControlSize } from '../shared/types';\nimport { useDragAnnouncements } from '../shared/use-drag-announcements';\nimport { useFormattedText } from '../shared/use-formatted-text';\nimport { useText } from '../shared/use-text';\nimport { useMovingIndicator } from './use-moving-indicator';\n\nexport interface TabItem {\n key: string;\n label: ReactNode;\n children: ReactNode;\n disabled?: boolean;\n icon?: ReactNode;\n closable?: boolean;\n}\nexport interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n items: readonly TabItem[];\n activeKey?: string;\n defaultActiveKey?: string;\n onChange?: (key: string) => void;\n type?: 'line' | 'card';\n placement?: 'top' | 'bottom' | 'left' | 'right';\n size?: ControlSize;\n activationMode?: 'automatic' | 'manual';\n destroyInactive?: boolean;\n extra?: ReactNode;\n onClose?: (key: string, event: MouseEvent<HTMLButtonElement>) => void;\n onAdd?: () => void;\n addLabel?: string;\n overflow?: boolean;\n sortable?: boolean;\n onReorder?: (items: TabItem[]) => void;\n}\nexport function TabsControl({\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n type = 'line',\n placement = 'top',\n size = 'md',\n activationMode = 'automatic',\n destroyInactive = false,\n extra,\n onClose,\n onAdd,\n addLabel,\n overflow = true,\n sortable = false,\n onReorder,\n className,\n 'aria-label': label,\n ...props\n}: TabsProps) {\n const { direction } = useLeafConfig();\n const t = useText();\n const format = useFormattedText();\n const enabled = items.filter((item) => !item.disabled);\n const [internal, setInternal] = useState(defaultActiveKey ?? enabled[0]?.key);\n const requested = activeKey ?? internal;\n const selected = enabled.find((item) => item.key === requested)?.key ?? enabled[0]?.key;\n const [focused, setFocused] = useState<string>();\n const focusKey = enabled.some((item) => item.key === focused) ? focused : selected;\n const [visited, setVisited] = useState<readonly string[]>(selected ? [selected] : []);\n if (selected && !visited.includes(selected)) setVisited([...visited, selected]);\n const id = useId();\n const list = useRef<HTMLDivElement>(null);\n const track = useRef<HTMLDivElement>(null);\n const indicator = useRef<HTMLSpanElement>(null);\n useMovingIndicator(\n track,\n indicator,\n '[data-leaf-indicator-item][data-active=\"true\"]',\n `${selected}-${placement}-${type}-${direction}`,\n items.length > 0,\n );\n const header = useRef<HTMLDivElement>(null);\n const [overflowKeys, setOverflowKeys] = useState<string[]>([]);\n const sorting = sortable && Boolean(onReorder);\n // biome-ignore lint/correctness/useExhaustiveDependencies: Observe the new tab elements after the item list changes.\n useEffect(() => {\n const node = list.current;\n const container = header.current;\n if (!overflow || !node || !container) {\n setOverflowKeys([]);\n return;\n }\n const measure = () => {\n const horizontal = placement === 'top' || placement === 'bottom';\n const entries = Array.from(node.querySelectorAll<HTMLElement>('[data-tab-key]'));\n const more = container.querySelector<HTMLElement>('[data-tabs-more]');\n const fullSize =\n (horizontal ? node.clientWidth : node.clientHeight) +\n (more\n ? (horizontal ? more.offsetWidth : more.offsetHeight) +\n (Number.parseFloat(getComputedStyle(container)[horizontal ? 'columnGap' : 'rowGap']) ||\n 0)\n : 0);\n const total = horizontal ? node.scrollWidth : node.scrollHeight;\n const rect = node.getBoundingClientRect();\n const keys =\n total <= fullSize + 1\n ? []\n : entries\n .filter((entry) => {\n const item = entry.getBoundingClientRect();\n return horizontal\n ? item.left < rect.left - 1 || item.right > rect.right + 1\n : item.top < rect.top - 1 || item.bottom > rect.bottom + 1;\n })\n .map((entry) => entry.dataset.tabKey ?? '');\n setOverflowKeys((previous) =>\n previous.length === keys.length && previous.every((key, index) => key === keys[index])\n ? previous\n : keys,\n );\n };\n measure();\n const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(measure);\n observer?.observe(node);\n observer?.observe(container);\n for (const entry of node.children) observer?.observe(entry);\n node.addEventListener('scroll', measure, { passive: true });\n window.addEventListener('resize', measure);\n return () => {\n observer?.disconnect();\n node.removeEventListener('scroll', measure);\n window.removeEventListener('resize', measure);\n };\n }, [overflow, placement, items]);\n const choose = (key: string) => {\n if (!enabled.some((item) => item.key === key)) return;\n if (activeKey === undefined) setInternal(key);\n if (key !== selected) onChange?.(key);\n };\n if (items.length === 0) return null;\n return (\n <div\n {...props}\n className={classes(\n 'leaf-tabs',\n `leaf-tabs--${type}`,\n `leaf-tabs--${placement}`,\n `leaf-tabs--${size}`,\n className,\n )}\n >\n <TabDragScope enabled={sorting} items={items} onReorder={onReorder}>\n <div className=\"leaf-tabs__header\" ref={header}>\n <div\n ref={list}\n onBlur={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget)) setFocused(undefined);\n }}\n role=\"tablist\"\n aria-label={label}\n aria-orientation={\n placement === 'left' || placement === 'right' ? 'vertical' : 'horizontal'\n }\n className=\"leaf-tabs__list\"\n >\n <div ref={track} className=\"leaf-tabs__track\">\n <span ref={indicator} className=\"leaf-tabs__indicator\" aria-hidden=\"true\" />\n <SortableContext\n items={items.map((item) => item.key)}\n strategy={\n placement === 'top' || placement === 'bottom'\n ? horizontalListSortingStrategy\n : verticalListSortingStrategy\n }\n >\n {items.map((item, index) => (\n <TabEntry\n item={item}\n sortable={sorting}\n className=\"leaf-tabs__entry\"\n key={item.key}\n data-active={item.key === selected || undefined}\n data-leaf-indicator-item=\"\"\n >\n <button\n id={`${id}-tab-${index}`}\n type=\"button\"\n role=\"tab\"\n aria-selected={item.key === selected}\n aria-controls={`${id}-panel-${index}`}\n disabled={item.disabled}\n tabIndex={item.key === focusKey ? 0 : -1}\n className=\"leaf-tabs__tab\"\n onFocus={() => setFocused(item.key)}\n onClick={() => choose(item.key)}\n onKeyDown={(event) => {\n let next: string | undefined;\n const position = enabled.findIndex((entry) => entry.key === item.key);\n const forward =\n placement === 'left' || placement === 'right'\n ? 'ArrowDown'\n : direction === 'rtl'\n ? 'ArrowLeft'\n : 'ArrowRight';\n const backward =\n placement === 'left' || placement === 'right'\n ? 'ArrowUp'\n : direction === 'rtl'\n ? 'ArrowRight'\n : 'ArrowLeft';\n if (event.key === forward)\n next = enabled[(position + 1) % enabled.length]?.key;\n else if (event.key === backward)\n next = enabled[(position - 1 + enabled.length) % enabled.length]?.key;\n else if (event.key === 'Home') next = enabled[0]?.key;\n else if (event.key === 'End') next = enabled.at(-1)?.key;\n if (next !== undefined) {\n event.preventDefault();\n setFocused(next);\n const nextIndex = items.findIndex((entry) => entry.key === next);\n list.current\n ?.querySelector<HTMLButtonElement>(`[id='${id}-tab-${nextIndex}']`)\n ?.focus();\n if (activationMode === 'automatic') choose(next);\n }\n }}\n >\n {item.icon && <span aria-hidden=\"true\">{item.icon}</span>}\n {item.label}\n </button>\n {item.closable && (\n <button\n type=\"button\"\n className=\"leaf-tabs__close\"\n disabled={item.disabled || !onClose}\n aria-label={format('tabs.closeLabel', {\n label: typeof item.label === 'string' ? item.label : item.key,\n })}\n onClick={(event) => {\n onClose?.(item.key, event);\n if (event.defaultPrevented) return;\n const position = enabled.findIndex((entry) => entry.key === item.key);\n const next =\n item.key === selected\n ? (enabled[position + 1] ?? enabled[position - 1])\n : enabled.find((entry) => entry.key === selected);\n if (next) {\n if (item.key === selected) choose(next.key);\n const nextIndex = items.findIndex((entry) => entry.key === next.key);\n list.current\n ?.querySelector<HTMLButtonElement>(`[id='${id}-tab-${nextIndex}']`)\n ?.focus();\n }\n }}\n >\n <X size={13} aria-hidden=\"true\" />\n </button>\n )}\n </TabEntry>\n ))}\n </SortableContext>\n </div>\n </div>\n {overflowKeys.length > 0 && (\n <Dropdown\n items={items\n .filter((item) => overflowKeys.includes(item.key))\n .map((item) => ({\n key: item.key,\n label: item.label,\n disabled: item.disabled,\n onClick: () => {\n choose(item.key);\n requestAnimationFrame(() => {\n const target = document.getElementById(`${id}-tab-${items.indexOf(item)}`);\n target?.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n target?.focus();\n });\n },\n }))}\n >\n <ButtonControl\n className=\"leaf-tabs__action\"\n data-tabs-more=\"\"\n variant=\"ghost\"\n size={size}\n startIcon={<Ellipsis size={16} />}\n aria-label={t('tabs.moreTabs')}\n />\n </Dropdown>\n )}\n {onAdd && (\n <ButtonControl\n className=\"leaf-tabs__action\"\n variant=\"ghost\"\n size={size}\n startIcon={<Plus size={16} />}\n aria-label={addLabel ?? t('tabs.addTab')}\n onClick={onAdd}\n />\n )}\n {extra && <div className=\"leaf-tabs__extra\">{extra}</div>}\n </div>\n </TabDragScope>\n <div className=\"leaf-tabs__panels\">\n {items.map((item, index) => (\n <div\n key={item.key}\n id={`${id}-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`${id}-tab-${index}`}\n hidden={item.key !== selected}\n // biome-ignore lint/a11y/noNoninteractiveTabindex: Tabpanels are keyboard focus destinations in the ARIA tabs pattern.\n tabIndex={0}\n className=\"leaf-tabs__panel\"\n >\n {(item.key === selected || (!destroyInactive && visited.includes(item.key))) &&\n item.children}\n </div>\n ))}\n </div>\n </div>\n );\n}\n\nfunction TabEntry({\n item,\n sortable,\n ...props\n}: HTMLAttributes<HTMLDivElement> & { item: TabItem; sortable: boolean }) {\n return sortable ? (\n <SortableTab item={item} {...props} />\n ) : (\n <div {...props} data-tab-key={item.key} />\n );\n}\nfunction SortableTab({\n item,\n children,\n ...props\n}: HTMLAttributes<HTMLDivElement> & { item: TabItem }) {\n const format = useFormattedText();\n const motion = useMotionEnabled();\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: item.key, disabled: item.disabled });\n return (\n <div\n {...props}\n ref={setNodeRef}\n data-tab-key={item.key}\n data-dragging={isDragging || undefined}\n style={{\n ...props.style,\n transform: CSS.Transform.toString(transform),\n transition:\n motion && transition\n ? 'transform var(--leaf-motion-slow) var(--leaf-motion-easing)'\n : undefined,\n }}\n >\n <button\n type=\"button\"\n {...attributes}\n {...listeners}\n ref={setActivatorNodeRef}\n disabled={item.disabled}\n className=\"leaf-tabs__drag\"\n aria-label={format('tabs.reorder', {\n label: typeof item.label === 'string' ? item.label : item.key,\n })}\n >\n <GripVertical size={13} aria-hidden=\"true\" />\n </button>\n {children}\n </div>\n );\n}\n\nfunction TabDragScope({\n enabled,\n items,\n onReorder,\n children,\n}: {\n enabled: boolean;\n items: readonly TabItem[];\n onReorder?: (items: TabItem[]) => void;\n children: ReactNode;\n}) {\n return enabled ? (\n <TabSortScope items={items} onReorder={onReorder}>\n {children}\n </TabSortScope>\n ) : (\n children\n );\n}\nfunction TabSortScope({\n items,\n onReorder,\n children,\n}: {\n items: readonly TabItem[];\n onReorder?: (items: TabItem[]) => void;\n children: ReactNode;\n}) {\n const id = useId();\n const accessibility = useDragAnnouncements((key) => {\n const item = items.find((entry) => entry.key === key);\n return typeof item?.label === 'string' ? item.label : String(key);\n });\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 6 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n );\n return (\n <DndContext\n id={id}\n sensors={sensors}\n collisionDetection={closestCenter}\n accessibility={accessibility}\n onDragEnd={({ active, over }) => {\n if (!over || active.id === over.id) return;\n const from = items.findIndex((item) => item.key === active.id);\n const to = items.findIndex((item) => item.key === over.id);\n if (from >= 0 && to >= 0 && !items[to]?.disabled)\n onReorder?.(arrayMove([...items], from, to));\n }}\n >\n {children}\n </DndContext>\n );\n}\n\nexport function Tabs(rawProps: TabsProps) {\n const props = useComponentProps('Tabs', rawProps);\n return <TabsControl {...props} />;\n}\n"],"names":["TabsControl","items","activeKey","defaultActiveKey","onChange","type","placement","size","activationMode","destroyInactive","extra","onClose","onAdd","addLabel","overflow","sortable","onReorder","className","label","props","direction","useLeafConfig","t","useText","format","useFormattedText","enabled","item","internal","setInternal","useState","requested","selected","focused","setFocused","focusKey","visited","setVisited","id","useId","list","useRef","track","indicator","useMovingIndicator","header","overflowKeys","setOverflowKeys","sorting","Boolean","useEffect","node","container","measure","horizontal","entries","Array","more","fullSize","Number","getComputedStyle","total","rect","keys","entry","previous","key","index","observer","ResizeObserver","window","choose","undefined","classes","TabDragScope","event","SortableContext","horizontalListSortingStrategy","verticalListSortingStrategy","TabEntry","next","position","forward","backward","nextIndex","X","Dropdown","requestAnimationFrame","target","document","ButtonControl","Ellipsis","Plus","SortableTab","children","motion","useMotionEnabled","attributes","listeners","setNodeRef","setActivatorNodeRef","transform","transition","isDragging","useSortable","CSS","GripVertical","TabSortScope","accessibility","useDragAnnouncements","String","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","DndContext","closestCenter","active","over","from","to","arrayMove","Tabs","rawProps","useComponentProps"],"mappings":";;;;;;;;;;;;;;;;;AAiEO,SAASA,YAAY,EAC1BC,KAAK,EACLC,SAAS,EACTC,gBAAgB,EAChBC,QAAQ,EACRC,OAAO,MAAM,EACbC,YAAY,KAAK,EACjBC,OAAO,IAAI,EACXC,iBAAiB,WAAW,EAC5BC,kBAAkB,KAAK,EACvBC,KAAK,EACLC,OAAO,EACPC,KAAK,EACLC,QAAQ,EACRC,WAAW,IAAI,EACfC,WAAW,KAAK,EAChBC,SAAS,EACTC,SAAS,EACT,cAAcC,KAAK,EACnB,GAAGC,OACO;IACV,MAAM,EAAEC,SAAS,EAAE,GAAGC;IACtB,MAAMC,IAAIC;IACV,MAAMC,SAASC;IACf,MAAMC,UAAUzB,MAAM,MAAM,CAAC,CAAC0B,OAAS,CAACA,KAAK,QAAQ;IACrD,MAAM,CAACC,UAAUC,YAAY,GAAGC,SAAS3B,oBAAoBuB,OAAO,CAAC,EAAE,EAAE;IACzE,MAAMK,YAAY7B,aAAa0B;IAC/B,MAAMI,WAAWN,QAAQ,IAAI,CAAC,CAACC,OAASA,KAAK,GAAG,KAAKI,YAAY,OAAOL,OAAO,CAAC,EAAE,EAAE;IACpF,MAAM,CAACO,SAASC,WAAW,GAAGJ;IAC9B,MAAMK,WAAWT,QAAQ,IAAI,CAAC,CAACC,OAASA,KAAK,GAAG,KAAKM,WAAWA,UAAUD;IAC1E,MAAM,CAACI,SAASC,WAAW,GAAGP,SAA4BE,WAAW;QAACA;KAAS,GAAG,EAAE;IACpF,IAAIA,YAAY,CAACI,QAAQ,QAAQ,CAACJ,WAAWK,WAAW;WAAID;QAASJ;KAAS;IAC9E,MAAMM,KAAKC;IACX,MAAMC,OAAOC,OAAuB;IACpC,MAAMC,QAAQD,OAAuB;IACrC,MAAME,YAAYF,OAAwB;IAC1CG,mBACEF,OACAC,WACA,kDACA,GAAGX,SAAS,CAAC,EAAE1B,UAAU,CAAC,EAAED,KAAK,CAAC,EAAEe,WAAW,EAC/CnB,MAAM,MAAM,GAAG;IAEjB,MAAM4C,SAASJ,OAAuB;IACtC,MAAM,CAACK,cAAcC,gBAAgB,GAAGjB,SAAmB,EAAE;IAC7D,MAAMkB,UAAUjC,YAAYkC,QAAQjC;IAEpCkC,UAAU;QACR,MAAMC,OAAOX,KAAK,OAAO;QACzB,MAAMY,YAAYP,OAAO,OAAO;QAChC,IAAI,CAAC/B,YAAY,CAACqC,QAAQ,CAACC,WAAW,YACpCL,gBAAgB,EAAE;QAGpB,MAAMM,UAAU;YACd,MAAMC,aAAahD,AAAc,UAAdA,aAAuBA,AAAc,aAAdA;YAC1C,MAAMiD,UAAUC,MAAM,IAAI,CAACL,KAAK,gBAAgB,CAAc;YAC9D,MAAMM,OAAOL,UAAU,aAAa,CAAc;YAClD,MAAMM,WACHJ,AAAAA,CAAAA,aAAaH,KAAK,WAAW,GAAGA,KAAK,YAAW,IAChDM,CAAAA,OACIH,AAAAA,CAAAA,aAAaG,KAAK,WAAW,GAAGA,KAAK,YAAW,IAChDE,CAAAA,OAAO,UAAU,CAACC,iBAAiBR,UAAU,CAACE,aAAa,cAAc,SAAS,KACjF,KACF;YACN,MAAMO,QAAQP,aAAaH,KAAK,WAAW,GAAGA,KAAK,YAAY;YAC/D,MAAMW,OAAOX,KAAK,qBAAqB;YACvC,MAAMY,OACJF,SAASH,WAAW,IAChB,EAAE,GACFH,QACG,MAAM,CAAC,CAACS;gBACP,MAAMrC,OAAOqC,MAAM,qBAAqB;gBACxC,OAAOV,aACH3B,KAAK,IAAI,GAAGmC,KAAK,IAAI,GAAG,KAAKnC,KAAK,KAAK,GAAGmC,KAAK,KAAK,GAAG,IACvDnC,KAAK,GAAG,GAAGmC,KAAK,GAAG,GAAG,KAAKnC,KAAK,MAAM,GAAGmC,KAAK,MAAM,GAAG;YAC7D,GACC,GAAG,CAAC,CAACE,QAAUA,MAAM,OAAO,CAAC,MAAM,IAAI;YAChDjB,gBAAgB,CAACkB,WACfA,SAAS,MAAM,KAAKF,KAAK,MAAM,IAAIE,SAAS,KAAK,CAAC,CAACC,KAAKC,QAAUD,QAAQH,IAAI,CAACI,MAAM,IACjFF,WACAF;QAER;QACAV;QACA,MAAMe,WAAW,AAA0B,MAA1B,OAAOC,iBAAiC,OAAO,IAAIA,eAAehB;QACnFe,UAAU,QAAQjB;QAClBiB,UAAU,QAAQhB;QAClB,KAAK,MAAMY,SAASb,KAAK,QAAQ,CAAEiB,UAAU,QAAQJ;QACrDb,KAAK,gBAAgB,CAAC,UAAUE,SAAS;YAAE,SAAS;QAAK;QACzDiB,OAAO,gBAAgB,CAAC,UAAUjB;QAClC,OAAO;YACLe,UAAU;YACVjB,KAAK,mBAAmB,CAAC,UAAUE;YACnCiB,OAAO,mBAAmB,CAAC,UAAUjB;QACvC;IACF,GAAG;QAACvC;QAAUR;QAAWL;KAAM;IAC/B,MAAMsE,SAAS,CAACL;QACd,IAAI,CAACxC,QAAQ,IAAI,CAAC,CAACC,OAASA,KAAK,GAAG,KAAKuC,MAAM;QAC/C,IAAIhE,AAAcsE,WAAdtE,WAAyB2B,YAAYqC;QACzC,IAAIA,QAAQlC,UAAU5B,WAAW8D;IACnC;IACA,IAAIjE,AAAiB,MAAjBA,MAAM,MAAM,EAAQ,OAAO;IAC/B,OAAO,WAAP,GACE,KAAC;QACE,GAAGkB,KAAK;QACT,WAAWsD,QACT,aACA,CAAC,WAAW,EAAEpE,MAAM,EACpB,CAAC,WAAW,EAAEC,WAAW,EACzB,CAAC,WAAW,EAAEC,MAAM,EACpBU;;0BAGF,IAACyD,cAAYA;gBAAC,SAAS1B;gBAAS,OAAO/C;gBAAO,WAAWe;0BACvD,mBAAC;oBAAI,WAAU;oBAAoB,KAAK6B;;sCACtC,IAAC;4BACC,KAAKL;4BACL,QAAQ,CAACmC;gCACP,IAAI,CAACA,MAAM,aAAa,CAAC,QAAQ,CAACA,MAAM,aAAa,GAAGzC,WAAWsC;4BACrE;4BACA,MAAK;4BACL,cAAYtD;4BACZ,oBACEZ,AAAc,WAAdA,aAAwBA,AAAc,YAAdA,YAAwB,aAAa;4BAE/D,WAAU;sCAEV,mBAAC;gCAAI,KAAKoC;gCAAO,WAAU;;kDACzB,IAAC;wCAAK,KAAKC;wCAAW,WAAU;wCAAuB,eAAY;;kDACnE,IAACiC,iBAAeA;wCACd,OAAO3E,MAAM,GAAG,CAAC,CAAC0B,OAASA,KAAK,GAAG;wCACnC,UACErB,AAAc,UAAdA,aAAuBA,AAAc,aAAdA,YACnBuE,gCACAC;kDAGL7E,MAAM,GAAG,CAAC,CAAC0B,MAAMwC,QAAAA,WAAAA,GAChB,KAACY,UAAQA;gDACP,MAAMpD;gDACN,UAAUqB;gDACV,WAAU;gDAEV,eAAarB,KAAK,GAAG,KAAKK,YAAYwC;gDACtC,4BAAyB;;kEAEzB,KAAC;wDACC,IAAI,GAAGlC,GAAG,KAAK,EAAE6B,OAAO;wDACxB,MAAK;wDACL,MAAK;wDACL,iBAAexC,KAAK,GAAG,KAAKK;wDAC5B,iBAAe,GAAGM,GAAG,OAAO,EAAE6B,OAAO;wDACrC,UAAUxC,KAAK,QAAQ;wDACvB,UAAUA,KAAK,GAAG,KAAKQ,WAAW,IAAI;wDACtC,WAAU;wDACV,SAAS,IAAMD,WAAWP,KAAK,GAAG;wDAClC,SAAS,IAAM4C,OAAO5C,KAAK,GAAG;wDAC9B,WAAW,CAACgD;4DACV,IAAIK;4DACJ,MAAMC,WAAWvD,QAAQ,SAAS,CAAC,CAACsC,QAAUA,MAAM,GAAG,KAAKrC,KAAK,GAAG;4DACpE,MAAMuD,UACJ5E,AAAc,WAAdA,aAAwBA,AAAc,YAAdA,YACpB,cACAc,AAAc,UAAdA,YACE,cACA;4DACR,MAAM+D,WACJ7E,AAAc,WAAdA,aAAwBA,AAAc,YAAdA,YACpB,YACAc,AAAc,UAAdA,YACE,eACA;4DACR,IAAIuD,MAAM,GAAG,KAAKO,SAChBF,OAAOtD,OAAO,CAAEuD,AAAAA,CAAAA,WAAW,KAAKvD,QAAQ,MAAM,CAAC,EAAE;iEAC9C,IAAIiD,MAAM,GAAG,KAAKQ,UACrBH,OAAOtD,OAAO,CAAEuD,AAAAA,CAAAA,WAAW,IAAIvD,QAAQ,MAAK,IAAKA,QAAQ,MAAM,CAAC,EAAE;iEAC/D,IAAIiD,AAAc,WAAdA,MAAM,GAAG,EAAaK,OAAOtD,OAAO,CAAC,EAAE,EAAE;iEAC7C,IAAIiD,AAAc,UAAdA,MAAM,GAAG,EAAYK,OAAOtD,QAAQ,EAAE,CAAC,KAAK;4DACrD,IAAIsD,AAASR,WAATQ,MAAoB;gEACtBL,MAAM,cAAc;gEACpBzC,WAAW8C;gEACX,MAAMI,YAAYnF,MAAM,SAAS,CAAC,CAAC+D,QAAUA,MAAM,GAAG,KAAKgB;gEAC3DxC,KAAK,OAAO,EACR,cAAiC,CAAC,KAAK,EAAEF,GAAG,KAAK,EAAE8C,UAAU,EAAE,CAAC,GAChE;gEACJ,IAAI5E,AAAmB,gBAAnBA,gBAAgC+D,OAAOS;4DAC7C;wDACF;;4DAECrD,KAAK,IAAI,IAAI,WAAJ,GAAI,IAAC;gEAAK,eAAY;0EAAQA,KAAK,IAAI;;4DAChDA,KAAK,KAAK;;;oDAEZA,KAAK,QAAQ,IAAI,WAAJ,GACZ,IAAC;wDACC,MAAK;wDACL,WAAU;wDACV,UAAUA,KAAK,QAAQ,IAAI,CAAChB;wDAC5B,cAAYa,OAAO,mBAAmB;4DACpC,OAAO,AAAsB,YAAtB,OAAOG,KAAK,KAAK,GAAgBA,KAAK,KAAK,GAAGA,KAAK,GAAG;wDAC/D;wDACA,SAAS,CAACgD;4DACRhE,UAAUgB,KAAK,GAAG,EAAEgD;4DACpB,IAAIA,MAAM,gBAAgB,EAAE;4DAC5B,MAAMM,WAAWvD,QAAQ,SAAS,CAAC,CAACsC,QAAUA,MAAM,GAAG,KAAKrC,KAAK,GAAG;4DACpE,MAAMqD,OACJrD,KAAK,GAAG,KAAKK,WACRN,OAAO,CAACuD,WAAW,EAAE,IAAIvD,OAAO,CAACuD,WAAW,EAAE,GAC/CvD,QAAQ,IAAI,CAAC,CAACsC,QAAUA,MAAM,GAAG,KAAKhC;4DAC5C,IAAIgD,MAAM;gEACR,IAAIrD,KAAK,GAAG,KAAKK,UAAUuC,OAAOS,KAAK,GAAG;gEAC1C,MAAMI,YAAYnF,MAAM,SAAS,CAAC,CAAC+D,QAAUA,MAAM,GAAG,KAAKgB,KAAK,GAAG;gEACnExC,KAAK,OAAO,EACR,cAAiC,CAAC,KAAK,EAAEF,GAAG,KAAK,EAAE8C,UAAU,EAAE,CAAC,GAChE;4DACN;wDACF;kEAEA,kBAACC,GAACA;4DAAC,MAAM;4DAAI,eAAY;;;;+CA3ExB1D,KAAK,GAAG;;;;;wBAmFtBmB,aAAa,MAAM,GAAG,KAAK,WAAL,GACrB,IAACwC,iBAAQA;4BACP,OAAOrF,MACJ,MAAM,CAAC,CAAC0B,OAASmB,aAAa,QAAQ,CAACnB,KAAK,GAAG,GAC/C,GAAG,CAAC,CAACA,OAAU;oCACd,KAAKA,KAAK,GAAG;oCACb,OAAOA,KAAK,KAAK;oCACjB,UAAUA,KAAK,QAAQ;oCACvB,SAAS;wCACP4C,OAAO5C,KAAK,GAAG;wCACf4D,sBAAsB;4CACpB,MAAMC,SAASC,SAAS,cAAc,CAAC,GAAGnD,GAAG,KAAK,EAAErC,MAAM,OAAO,CAAC0B,OAAO;4CACzE6D,QAAQ,iBAAiB;gDAAE,OAAO;gDAAW,QAAQ;4CAAU;4CAC/DA,QAAQ;wCACV;oCACF;gCACF;sCAEF,kBAACE,eAAaA;gCACZ,WAAU;gCACV,kBAAe;gCACf,SAAQ;gCACR,MAAMnF;gCACN,yBAAW,IAACoF,UAAQA;oCAAC,MAAM;;gCAC3B,cAAYrE,EAAE;;;wBAInBV,SAAS,WAATA,GACC,IAAC8E,eAAaA;4BACZ,WAAU;4BACV,SAAQ;4BACR,MAAMnF;4BACN,yBAAW,IAACqF,MAAIA;gCAAC,MAAM;;4BACvB,cAAY/E,YAAYS,EAAE;4BAC1B,SAASV;;wBAGZF,SAAS,WAATA,GAAS,IAAC;4BAAI,WAAU;sCAAoBA;;;;;0BAGjD,IAAC;gBAAI,WAAU;0BACZT,MAAM,GAAG,CAAC,CAAC0B,MAAMwC,QAAAA,WAAAA,GAChB,IAAC;wBAEC,IAAI,GAAG7B,GAAG,OAAO,EAAE6B,OAAO;wBAC1B,MAAK;wBACL,mBAAiB,GAAG7B,GAAG,KAAK,EAAE6B,OAAO;wBACrC,QAAQxC,KAAK,GAAG,KAAKK;wBAErB,UAAU;wBACV,WAAU;kCAERL,AAAAA,CAAAA,KAAK,GAAG,KAAKK,YAAa,CAACvB,mBAAmB2B,QAAQ,QAAQ,CAACT,KAAK,GAAG,MACvEA,KAAK,QAAQ;uBAVVA,KAAK,GAAG;;;;AAgBzB;AAEA,SAASoD,SAAS,EAChBpD,IAAI,EACJZ,QAAQ,EACR,GAAGI,OACmE;IACtE,OAAOJ,WAAW,WAAXA,GACL,IAAC8E,aAAWA;QAAC,MAAMlE;QAAO,GAAGR,KAAK;uBAElC,IAAC;QAAK,GAAGA,KAAK;QAAE,gBAAcQ,KAAK,GAAG;;AAE1C;AACA,SAASkE,YAAY,EACnBlE,IAAI,EACJmE,QAAQ,EACR,GAAG3E,OACgD;IACnD,MAAMK,SAASC;IACf,MAAMsE,SAASC;IACf,MAAM,EACJC,UAAU,EACVC,SAAS,EACTC,UAAU,EACVC,mBAAmB,EACnBC,SAAS,EACTC,UAAU,EACVC,UAAU,EACX,GAAGC,YAAY;QAAE,IAAI7E,KAAK,GAAG;QAAE,UAAUA,KAAK,QAAQ;IAAC;IACxD,OAAO,WAAP,GACE,KAAC;QACE,GAAGR,KAAK;QACT,KAAKgF;QACL,gBAAcxE,KAAK,GAAG;QACtB,iBAAe4E,cAAc/B;QAC7B,OAAO;YACL,GAAGrD,MAAM,KAAK;YACd,WAAWsF,IAAI,SAAS,CAAC,QAAQ,CAACJ;YAClC,YACEN,UAAUO,aACN,gEACA9B;QACR;;0BAEA,IAAC;gBACC,MAAK;gBACJ,GAAGyB,UAAU;gBACb,GAAGC,SAAS;gBACb,KAAKE;gBACL,UAAUzE,KAAK,QAAQ;gBACvB,WAAU;gBACV,cAAYH,OAAO,gBAAgB;oBACjC,OAAO,AAAsB,YAAtB,OAAOG,KAAK,KAAK,GAAgBA,KAAK,KAAK,GAAGA,KAAK,GAAG;gBAC/D;0BAEA,kBAAC+E,cAAYA;oBAAC,MAAM;oBAAI,eAAY;;;YAErCZ;;;AAGP;AAEA,SAASpB,aAAa,EACpBhD,OAAO,EACPzB,KAAK,EACLe,SAAS,EACT8E,QAAQ,EAMT;IACC,OAAOpE,UAAU,WAAVA,GACL,IAACiF,cAAYA;QAAC,OAAO1G;QAAO,WAAWe;kBACpC8E;SAGHA;AAEJ;AACA,SAASa,aAAa,EACpB1G,KAAK,EACLe,SAAS,EACT8E,QAAQ,EAKT;IACC,MAAMxD,KAAKC;IACX,MAAMqE,gBAAgBC,qBAAqB,CAAC3C;QAC1C,MAAMvC,OAAO1B,MAAM,IAAI,CAAC,CAAC+D,QAAUA,MAAM,GAAG,KAAKE;QACjD,OAAO,AAAuB,YAAvB,OAAOvC,MAAM,QAAqBA,KAAK,KAAK,GAAGmF,OAAO5C;IAC/D;IACA,MAAM6C,UAAUC,WACdC,UAAUC,eAAe;QAAE,sBAAsB;YAAE,UAAU;QAAE;IAAE,IACjED,UAAUE,gBAAgB;QAAE,kBAAkBC;IAA4B;IAE5E,OAAO,WAAP,GACE,IAACC,YAAUA;QACT,IAAI/E;QACJ,SAASyE;QACT,oBAAoBO;QACpB,eAAeV;QACf,WAAW,CAAC,EAAEW,MAAM,EAAEC,IAAI,EAAE;YAC1B,IAAI,CAACA,QAAQD,OAAO,EAAE,KAAKC,KAAK,EAAE,EAAE;YACpC,MAAMC,OAAOxH,MAAM,SAAS,CAAC,CAAC0B,OAASA,KAAK,GAAG,KAAK4F,OAAO,EAAE;YAC7D,MAAMG,KAAKzH,MAAM,SAAS,CAAC,CAAC0B,OAASA,KAAK,GAAG,KAAK6F,KAAK,EAAE;YACzD,IAAIC,QAAQ,KAAKC,MAAM,KAAK,CAACzH,KAAK,CAACyH,GAAG,EAAE,UACtC1G,YAAY2G,UAAU;mBAAI1H;aAAM,EAAEwH,MAAMC;QAC5C;kBAEC5B;;AAGP;AAEO,SAAS8B,KAAKC,QAAmB;IACtC,MAAM1G,QAAQ2G,kBAAkB,QAAQD;IACxC,OAAO,WAAP,GAAO,IAAC7H,aAAWA;QAAE,GAAGmB,KAAK;;AAC/B"}
1
+ {"version":3,"file":"tabs/tabs.js","sources":["../../../src/tabs/tabs.tsx"],"sourcesContent":["import {\n closestCenter,\n DndContext,\n KeyboardSensor,\n PointerSensor,\n useSensor,\n useSensors,\n} from '@dnd-kit/core';\nimport {\n arrayMove,\n horizontalListSortingStrategy,\n SortableContext,\n sortableKeyboardCoordinates,\n useSortable,\n verticalListSortingStrategy,\n} from '@dnd-kit/sortable';\nimport { CSS } from '@dnd-kit/utilities';\nimport { Ellipsis, GripVertical, Plus, X } from 'lucide-react';\nimport {\n type HTMLAttributes,\n type MouseEvent,\n type ReactNode,\n useEffect,\n useId,\n useRef,\n useState,\n} from 'react';\nimport { ButtonControl } from '../button/button';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { DropdownControl as Dropdown } from '../dropdown/dropdown';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { classes } from '../shared/classes';\nimport { useMotionEnabled } from '../shared/motion';\nimport type { ControlSize } from '../shared/types';\nimport { useDragAnnouncements } from '../shared/use-drag-announcements';\nimport { useFormattedText } from '../shared/use-formatted-text';\nimport { useText } from '../shared/use-text';\nimport { useMovingIndicator } from './use-moving-indicator';\n\nexport interface TabItem {\n key: string;\n label: ReactNode;\n children?: ReactNode;\n disabled?: boolean;\n icon?: ReactNode;\n closable?: boolean;\n}\nexport interface TabsProps extends Omit<HTMLAttributes<HTMLDivElement>, 'onChange'> {\n items: readonly TabItem[];\n activeKey?: string;\n defaultActiveKey?: string;\n onChange?: (key: string) => void;\n type?: 'line' | 'card';\n placement?: 'top' | 'bottom' | 'left' | 'right';\n size?: ControlSize;\n /** Fill the available width with equally sized tabs. */\n block?: boolean;\n activationMode?: 'automatic' | 'manual';\n destroyInactive?: boolean;\n extra?: ReactNode;\n onClose?: (key: string, event: MouseEvent<HTMLButtonElement>) => void;\n onAdd?: () => void;\n addLabel?: string;\n overflow?: boolean;\n sortable?: boolean;\n onReorder?: (items: TabItem[]) => void;\n}\nexport function TabsControl({\n items,\n activeKey,\n defaultActiveKey,\n onChange,\n type = 'line',\n placement = 'top',\n size = 'md',\n block = false,\n activationMode = 'automatic',\n destroyInactive = false,\n extra,\n onClose,\n onAdd,\n addLabel,\n overflow = true,\n sortable = false,\n onReorder,\n className,\n 'aria-label': label,\n ...props\n}: TabsProps) {\n const { direction } = useLeafConfig();\n const t = useText();\n const format = useFormattedText();\n const enabled = items.filter((item) => !item.disabled);\n const [internal, setInternal] = useState(defaultActiveKey ?? enabled[0]?.key);\n const requested = activeKey ?? internal;\n const selected = enabled.find((item) => item.key === requested)?.key ?? enabled[0]?.key;\n const [focused, setFocused] = useState<string>();\n const focusKey = enabled.some((item) => item.key === focused) ? focused : selected;\n const [visited, setVisited] = useState<readonly string[]>(selected ? [selected] : []);\n if (selected && !visited.includes(selected)) setVisited([...visited, selected]);\n const id = useId();\n const list = useRef<HTMLDivElement>(null);\n const track = useRef<HTMLDivElement>(null);\n const indicator = useRef<HTMLSpanElement>(null);\n useMovingIndicator(\n track,\n indicator,\n '[data-leaf-indicator-item][data-active=\"true\"]',\n `${selected}-${placement}-${type}-${direction}`,\n items.length > 0,\n );\n const header = useRef<HTMLDivElement>(null);\n const [overflowKeys, setOverflowKeys] = useState<string[]>([]);\n const sorting = sortable && Boolean(onReorder);\n // biome-ignore lint/correctness/useExhaustiveDependencies: Observe the new tab elements after the item list changes.\n useEffect(() => {\n const node = list.current;\n const container = header.current;\n if (!overflow || !node || !container) {\n setOverflowKeys([]);\n return;\n }\n const measure = () => {\n const horizontal = placement === 'top' || placement === 'bottom';\n const entries = Array.from(node.querySelectorAll<HTMLElement>('[data-tab-key]'));\n const more = container.querySelector<HTMLElement>('[data-tabs-more]');\n const fullSize =\n (horizontal ? node.clientWidth : node.clientHeight) +\n (more\n ? (horizontal ? more.offsetWidth : more.offsetHeight) +\n (Number.parseFloat(getComputedStyle(container)[horizontal ? 'columnGap' : 'rowGap']) ||\n 0)\n : 0);\n const total = horizontal ? node.scrollWidth : node.scrollHeight;\n const rect = node.getBoundingClientRect();\n const keys =\n total <= fullSize + 1\n ? []\n : entries\n .filter((entry) => {\n const item = entry.getBoundingClientRect();\n return horizontal\n ? item.left < rect.left - 1 || item.right > rect.right + 1\n : item.top < rect.top - 1 || item.bottom > rect.bottom + 1;\n })\n .map((entry) => entry.dataset.tabKey ?? '');\n setOverflowKeys((previous) =>\n previous.length === keys.length && previous.every((key, index) => key === keys[index])\n ? previous\n : keys,\n );\n };\n measure();\n const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(measure);\n observer?.observe(node);\n observer?.observe(container);\n for (const entry of node.children) observer?.observe(entry);\n node.addEventListener('scroll', measure, { passive: true });\n window.addEventListener('resize', measure);\n return () => {\n observer?.disconnect();\n node.removeEventListener('scroll', measure);\n window.removeEventListener('resize', measure);\n };\n }, [overflow, placement, items]);\n const choose = (key: string) => {\n if (!enabled.some((item) => item.key === key)) return;\n if (activeKey === undefined) setInternal(key);\n if (key !== selected) onChange?.(key);\n };\n if (items.length === 0) return null;\n return (\n <div\n {...props}\n className={classes(\n 'leaf-tabs',\n `leaf-tabs--${type}`,\n `leaf-tabs--${placement}`,\n `leaf-tabs--${size}`,\n block && 'leaf-tabs--block',\n className,\n )}\n >\n <TabDragScope enabled={sorting} items={items} onReorder={onReorder}>\n <div className=\"leaf-tabs__header\" ref={header}>\n <ScrollbarControl\n ref={list}\n onBlur={(event) => {\n if (!event.currentTarget.contains(event.relatedTarget)) setFocused(undefined);\n }}\n role=\"tablist\"\n aria-label={label}\n viewportProps={{\n 'aria-orientation':\n placement === 'left' || placement === 'right' ? 'vertical' : 'horizontal',\n }}\n className=\"leaf-tabs__scroll\"\n viewportClassName=\"leaf-tabs__list\"\n tabIndex={-1}\n scrollbarTabIndex={-1}\n >\n <div ref={track} className=\"leaf-tabs__track\">\n <span ref={indicator} className=\"leaf-tabs__indicator\" aria-hidden=\"true\" />\n <SortableContext\n items={items.map((item) => item.key)}\n strategy={\n placement === 'top' || placement === 'bottom'\n ? horizontalListSortingStrategy\n : verticalListSortingStrategy\n }\n >\n {items.map((item, index) => (\n <TabEntry\n item={item}\n sortable={sorting}\n className=\"leaf-tabs__entry\"\n key={item.key}\n data-active={item.key === selected || undefined}\n data-leaf-indicator-item=\"\"\n >\n <button\n id={`${id}-tab-${index}`}\n type=\"button\"\n role=\"tab\"\n aria-selected={item.key === selected}\n aria-controls={item.children != null ? `${id}-panel-${index}` : undefined}\n disabled={item.disabled}\n tabIndex={item.key === focusKey ? 0 : -1}\n className=\"leaf-tabs__tab\"\n onFocus={() => setFocused(item.key)}\n onClick={() => choose(item.key)}\n onKeyDown={(event) => {\n let next: string | undefined;\n const position = enabled.findIndex((entry) => entry.key === item.key);\n const forward =\n placement === 'left' || placement === 'right'\n ? 'ArrowDown'\n : direction === 'rtl'\n ? 'ArrowLeft'\n : 'ArrowRight';\n const backward =\n placement === 'left' || placement === 'right'\n ? 'ArrowUp'\n : direction === 'rtl'\n ? 'ArrowRight'\n : 'ArrowLeft';\n if (event.key === forward)\n next = enabled[(position + 1) % enabled.length]?.key;\n else if (event.key === backward)\n next = enabled[(position - 1 + enabled.length) % enabled.length]?.key;\n else if (event.key === 'Home') next = enabled[0]?.key;\n else if (event.key === 'End') next = enabled.at(-1)?.key;\n if (next !== undefined) {\n event.preventDefault();\n setFocused(next);\n const nextIndex = items.findIndex((entry) => entry.key === next);\n list.current\n ?.querySelector<HTMLButtonElement>(`[id='${id}-tab-${nextIndex}']`)\n ?.focus();\n if (activationMode === 'automatic') choose(next);\n }\n }}\n >\n {item.icon && <span aria-hidden=\"true\">{item.icon}</span>}\n {item.label}\n </button>\n {item.closable && (\n <button\n type=\"button\"\n className=\"leaf-tabs__close\"\n disabled={item.disabled || !onClose}\n aria-label={format('tabs.closeLabel', {\n label: typeof item.label === 'string' ? item.label : item.key,\n })}\n onClick={(event) => {\n onClose?.(item.key, event);\n if (event.defaultPrevented) return;\n const position = enabled.findIndex((entry) => entry.key === item.key);\n const next =\n item.key === selected\n ? (enabled[position + 1] ?? enabled[position - 1])\n : enabled.find((entry) => entry.key === selected);\n if (next) {\n if (item.key === selected) choose(next.key);\n const nextIndex = items.findIndex((entry) => entry.key === next.key);\n list.current\n ?.querySelector<HTMLButtonElement>(`[id='${id}-tab-${nextIndex}']`)\n ?.focus();\n }\n }}\n >\n <X size={13} aria-hidden=\"true\" />\n </button>\n )}\n </TabEntry>\n ))}\n </SortableContext>\n </div>\n </ScrollbarControl>\n {overflowKeys.length > 0 && (\n <Dropdown\n items={items\n .filter((item) => overflowKeys.includes(item.key))\n .map((item) => ({\n key: item.key,\n label: item.label,\n disabled: item.disabled,\n onClick: () => {\n choose(item.key);\n requestAnimationFrame(() => {\n const target = document.getElementById(`${id}-tab-${items.indexOf(item)}`);\n target?.scrollIntoView?.({ block: 'nearest', inline: 'nearest' });\n target?.focus();\n });\n },\n }))}\n >\n <ButtonControl\n className=\"leaf-tabs__action\"\n data-tabs-more=\"\"\n variant=\"ghost\"\n size={size}\n startIcon={<Ellipsis size={16} />}\n aria-label={t('tabs.moreTabs')}\n />\n </Dropdown>\n )}\n {onAdd && (\n <ButtonControl\n className=\"leaf-tabs__action\"\n variant=\"ghost\"\n size={size}\n startIcon={<Plus size={16} />}\n aria-label={addLabel ?? t('tabs.addTab')}\n onClick={onAdd}\n />\n )}\n {extra && <div className=\"leaf-tabs__extra\">{extra}</div>}\n </div>\n </TabDragScope>\n {items.some((item) => item.children != null) && (\n <div className=\"leaf-tabs__panels\">\n {items.map(\n (item, index) =>\n item.children != null && (\n <div\n key={item.key}\n id={`${id}-panel-${index}`}\n role=\"tabpanel\"\n aria-labelledby={`${id}-tab-${index}`}\n hidden={item.key !== selected}\n // biome-ignore lint/a11y/noNoninteractiveTabindex: Tabpanels are keyboard focus destinations in the ARIA tabs pattern.\n tabIndex={0}\n className=\"leaf-tabs__panel\"\n >\n {(item.key === selected || (!destroyInactive && visited.includes(item.key))) &&\n item.children}\n </div>\n ),\n )}\n </div>\n )}\n </div>\n );\n}\n\nfunction TabEntry({\n item,\n sortable,\n ...props\n}: HTMLAttributes<HTMLDivElement> & { item: TabItem; sortable: boolean }) {\n return sortable ? (\n <SortableTab item={item} {...props} />\n ) : (\n <div {...props} data-tab-key={item.key} />\n );\n}\nfunction SortableTab({\n item,\n children,\n ...props\n}: HTMLAttributes<HTMLDivElement> & { item: TabItem }) {\n const format = useFormattedText();\n const motion = useMotionEnabled();\n const {\n attributes,\n listeners,\n setNodeRef,\n setActivatorNodeRef,\n transform,\n transition,\n isDragging,\n } = useSortable({ id: item.key, disabled: item.disabled });\n return (\n <div\n {...props}\n ref={setNodeRef}\n data-tab-key={item.key}\n data-dragging={isDragging || undefined}\n style={{\n ...props.style,\n transform: CSS.Transform.toString(transform),\n transition:\n motion && transition\n ? 'transform var(--leaf-motion-slow) var(--leaf-motion-easing)'\n : undefined,\n }}\n >\n <button\n type=\"button\"\n {...attributes}\n {...listeners}\n ref={setActivatorNodeRef}\n disabled={item.disabled}\n className=\"leaf-tabs__drag\"\n aria-label={format('tabs.reorder', {\n label: typeof item.label === 'string' ? item.label : item.key,\n })}\n >\n <GripVertical size={13} aria-hidden=\"true\" />\n </button>\n {children}\n </div>\n );\n}\n\nfunction TabDragScope({\n enabled,\n items,\n onReorder,\n children,\n}: {\n enabled: boolean;\n items: readonly TabItem[];\n onReorder?: (items: TabItem[]) => void;\n children: ReactNode;\n}) {\n return enabled ? (\n <TabSortScope items={items} onReorder={onReorder}>\n {children}\n </TabSortScope>\n ) : (\n children\n );\n}\nfunction TabSortScope({\n items,\n onReorder,\n children,\n}: {\n items: readonly TabItem[];\n onReorder?: (items: TabItem[]) => void;\n children: ReactNode;\n}) {\n const id = useId();\n const accessibility = useDragAnnouncements((key) => {\n const item = items.find((entry) => entry.key === key);\n return typeof item?.label === 'string' ? item.label : String(key);\n });\n const sensors = useSensors(\n useSensor(PointerSensor, { activationConstraint: { distance: 6 } }),\n useSensor(KeyboardSensor, { coordinateGetter: sortableKeyboardCoordinates }),\n );\n return (\n <DndContext\n id={id}\n sensors={sensors}\n collisionDetection={closestCenter}\n accessibility={accessibility}\n onDragEnd={({ active, over }) => {\n if (!over || active.id === over.id) return;\n const from = items.findIndex((item) => item.key === active.id);\n const to = items.findIndex((item) => item.key === over.id);\n if (from >= 0 && to >= 0 && !items[to]?.disabled)\n onReorder?.(arrayMove([...items], from, to));\n }}\n >\n {children}\n </DndContext>\n );\n}\n\nexport function Tabs(rawProps: TabsProps) {\n const props = useComponentProps('Tabs', rawProps);\n return <TabsControl {...props} />;\n}\n"],"names":["TabsControl","items","activeKey","defaultActiveKey","onChange","type","placement","size","block","activationMode","destroyInactive","extra","onClose","onAdd","addLabel","overflow","sortable","onReorder","className","label","props","direction","useLeafConfig","t","useText","format","useFormattedText","enabled","item","internal","setInternal","useState","requested","selected","focused","setFocused","focusKey","visited","setVisited","id","useId","list","useRef","track","indicator","useMovingIndicator","header","overflowKeys","setOverflowKeys","sorting","Boolean","useEffect","node","container","measure","horizontal","entries","Array","more","fullSize","Number","getComputedStyle","total","rect","keys","entry","previous","key","index","observer","ResizeObserver","window","choose","undefined","classes","TabDragScope","ScrollbarControl","event","SortableContext","horizontalListSortingStrategy","verticalListSortingStrategy","TabEntry","next","position","forward","backward","nextIndex","X","Dropdown","requestAnimationFrame","target","document","ButtonControl","Ellipsis","Plus","SortableTab","children","motion","useMotionEnabled","attributes","listeners","setNodeRef","setActivatorNodeRef","transform","transition","isDragging","useSortable","CSS","GripVertical","TabSortScope","accessibility","useDragAnnouncements","String","sensors","useSensors","useSensor","PointerSensor","KeyboardSensor","sortableKeyboardCoordinates","DndContext","closestCenter","active","over","from","to","arrayMove","Tabs","rawProps","useComponentProps"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"tailwind-tokens.d.ts","sourceRoot":"","sources":["../../src/tailwind-tokens.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB;IAC7B,MAAM;QACJ,cAAc;QACd,oBAAoB;QACpB,qBAAqB;QACrB,iBAAiB;QACjB,cAAc;QACd,cAAc;QACd,iBAAiB;QACjB,aAAa;QACb,mBAAmB;QACnB,oBAAoB;QACpB,gBAAgB;QAChB,WAAW;QACX,WAAW;QACX,YAAY;QACZ,aAAa;QACb,cAAc;QACd,oBAAoB;QACpB,qBAAqB;QACrB,aAAa;QACb,mBAAmB;QACnB,cAAc;QACd,mBAAmB;QACnB,YAAY;;IAEd,YAAY;QACV,IAAI;QACJ,SAAS;QACT,SAAS;QACT,SAAS;QACT,aAAa;;IAEf,OAAO;QACL,IAAI;QACJ,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,cAAc;QACd,iBAAiB;QACjB,iBAAiB;QACjB,eAAe;QACf,gBAAgB;QAChB,kBAAkB;QAClB,oBAAoB;QACpB,qBAAqB;QACrB,oBAAoB;QACpB,mBAAmB;QACnB,oBAAoB;QACpB,iBAAiB;;IAEnB,UAAU;QAAI,IAAI;;IAClB,QAAQ;QACN,IAAI;QACJ,SAAS;QACT,SAAS;;IAEX,UAAU;QAAI,IAAI;;IAClB,UAAU;QACR,aAAa;QACb,cAAc;;IAEhB,SAAS;QACP,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;;IAEX,kBAAkB;QAChB,IAAI;QACJ,WAAW;QACX,WAAW;;IAEb,wBAAwB;QACtB,IAAI;QACJ,aAAa;;IAEf,MAAM;QACJ,YAAY;QACZ,YAAY;QACZ,cAAc;;CAEjB,CAAC"}
1
+ {"version":3,"file":"tailwind-tokens.d.ts","sourceRoot":"","sources":["../../src/tailwind-tokens.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,eAAO,MAAM,kBAAkB;IAC7B,MAAM;QACJ,cAAc;QACd,oBAAoB;QACpB,qBAAqB;QACrB,iBAAiB;QACjB,cAAc;QACd,cAAc;QACd,iBAAiB;QACjB,aAAa;QACb,mBAAmB;QACnB,oBAAoB;QACpB,gBAAgB;QAChB,WAAW;QACX,WAAW;QACX,YAAY;QACZ,aAAa;QACb,cAAc;QACd,oBAAoB;QACpB,qBAAqB;QACrB,aAAa;QACb,mBAAmB;QACnB,cAAc;QACd,mBAAmB;QACnB,YAAY;;IAGd,YAAY;QACV,IAAI;QACJ,SAAS;QACT,SAAS;QACT,SAAS;QACT,aAAa;;IAEf,OAAO;QACL,IAAI;QACJ,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;QACT,cAAc;QACd,iBAAiB;QACjB,iBAAiB;QACjB,eAAe;QACf,gBAAgB;QAChB,kBAAkB;QAClB,oBAAoB;QACpB,qBAAqB;QACrB,oBAAoB;QACpB,mBAAmB;QACnB,oBAAoB;QACpB,iBAAiB;;IAEnB,UAAU;QAAI,IAAI;;IAClB,QAAQ;QACN,IAAI;QACJ,SAAS;QACT,SAAS;;IAEX,UAAU;QAAI,IAAI;;IAClB,UAAU;QACR,aAAa;QACb,cAAc;;IAEhB,SAAS;QACP,SAAS;QACT,SAAS;QACT,SAAS;QACT,SAAS;;IAEX,kBAAkB;QAChB,IAAI;QACJ,WAAW;QACX,WAAW;;IAEb,wBAAwB;QACtB,IAAI;QACJ,aAAa;;IAEf,MAAM;QACJ,YAAY;QACZ,YAAY;QACZ,cAAc;;CAEjB,CAAC"}
@@ -23,7 +23,7 @@ const leafTailwindTokens = {
23
23
  'leaf-border-hover': 'var(--leaf-color-border-hover)',
24
24
  'leaf-divider': 'var(--leaf-color-divider)',
25
25
  'leaf-option-hover': 'var(--leaf-color-option-hover)',
26
- 'leaf-focus': 'var(--leaf-color-focus, var(--leaf-color-primary-alpha-42))'
26
+ 'leaf-focus': 'var(--leaf-color-focus, var(--leaf-color-primary-focus, var(--leaf-color-primary-alpha-42)))'
27
27
  },
28
28
  borderRadius: {
29
29
  leaf: 'var(--leaf-radius)',
@@ -1 +1 @@
1
- {"version":3,"file":"tailwind-tokens.js","sources":["../../src/tailwind-tokens.ts"],"sourcesContent":["/** Shared by the Tailwind 3 preset and the generated Tailwind 4 CSS theme. */\nexport const leafTailwindTokens = {\n colors: {\n 'leaf-primary': 'var(--leaf-color-primary)',\n 'leaf-primary-hover': 'var(--leaf-color-primary-hover)',\n 'leaf-primary-active': 'var(--leaf-color-primary-active)',\n 'leaf-on-primary': 'var(--leaf-color-on-primary)',\n 'leaf-success': 'var(--leaf-color-success)',\n 'leaf-warning': 'var(--leaf-color-warning)',\n 'leaf-on-warning': 'var(--leaf-color-on-warning)',\n 'leaf-danger': 'var(--leaf-color-danger)',\n 'leaf-danger-hover': 'var(--leaf-color-danger-hover)',\n 'leaf-danger-active': 'var(--leaf-color-danger-active)',\n 'leaf-on-danger': 'var(--leaf-color-on-danger)',\n 'leaf-info': 'var(--leaf-color-info)',\n 'leaf-text': 'var(--leaf-color-text)',\n 'leaf-muted': 'var(--leaf-color-text-muted)',\n 'leaf-subtle': 'var(--leaf-color-text-subtle)',\n 'leaf-surface': 'var(--leaf-color-surface)',\n 'leaf-surface-muted': 'var(--leaf-color-surface-muted)',\n 'leaf-surface-raised': 'var(--leaf-color-surface-raised)',\n 'leaf-border': 'var(--leaf-color-border)',\n 'leaf-border-hover': 'var(--leaf-color-border-hover)',\n 'leaf-divider': 'var(--leaf-color-divider)',\n 'leaf-option-hover': 'var(--leaf-color-option-hover)',\n 'leaf-focus': 'var(--leaf-color-focus, var(--leaf-color-primary-alpha-42))',\n },\n borderRadius: {\n leaf: 'var(--leaf-radius)',\n 'leaf-sm': 'var(--leaf-radius-sm)',\n 'leaf-md': 'var(--leaf-radius-md)',\n 'leaf-lg': 'var(--leaf-radius-lg)',\n 'leaf-choice': 'var(--leaf-choice-radius)',\n },\n spacing: {\n leaf: 'var(--leaf-spacing)',\n 'leaf-xs': 'var(--leaf-spacing-xs)',\n 'leaf-sm': 'var(--leaf-spacing-sm)',\n 'leaf-md': 'var(--leaf-spacing-md)',\n 'leaf-lg': 'var(--leaf-spacing-lg)',\n 'leaf-xl': 'var(--leaf-spacing-xl)',\n 'leaf-control': 'var(--leaf-control-height)',\n 'leaf-control-sm': 'var(--leaf-control-height-sm)',\n 'leaf-control-lg': 'var(--leaf-control-height-lg)',\n 'leaf-form-gap': 'var(--leaf-density-form-gap)',\n 'leaf-label-gap': 'var(--leaf-density-label-gap)',\n 'leaf-row-padding': 'var(--leaf-density-row-padding)',\n 'leaf-option-height': 'var(--leaf-density-option-height)',\n 'leaf-option-padding': 'var(--leaf-density-option-padding)',\n 'leaf-field-padding': 'var(--leaf-density-field-padding)',\n 'leaf-dialog-block': 'var(--leaf-density-dialog-block)',\n 'leaf-dialog-inline': 'var(--leaf-density-dialog-inline)',\n 'leaf-dialog-gap': 'var(--leaf-density-dialog-gap)',\n },\n fontFamily: { leaf: 'var(--leaf-font-family)' },\n fontSize: {\n leaf: 'var(--leaf-font-size)',\n 'leaf-sm': 'var(--leaf-font-size-sm)',\n 'leaf-lg': 'var(--leaf-font-size-lg)',\n },\n lineHeight: { leaf: 'var(--leaf-line-height)' },\n fontWeight: {\n 'leaf-medium': 'var(--leaf-font-weight)',\n 'leaf-heading': 'var(--leaf-heading-weight)',\n },\n boxShadow: {\n 'leaf-xs': 'var(--leaf-shadow-xs)',\n 'leaf-sm': 'var(--leaf-shadow-sm)',\n 'leaf-md': 'var(--leaf-shadow-md)',\n 'leaf-lg': 'var(--leaf-shadow-lg)',\n },\n transitionDuration: {\n leaf: 'var(--leaf-motion-duration)',\n 'leaf-fast': 'var(--leaf-motion-fast)',\n 'leaf-slow': 'var(--leaf-motion-slow)',\n },\n transitionTimingFunction: {\n leaf: 'var(--leaf-motion-easing)',\n 'leaf-spring': 'var(--leaf-motion-spring)',\n },\n zIndex: {\n 'leaf-popup': 'var(--leaf-z-index-popup)',\n 'leaf-modal': 'var(--leaf-z-index-modal)',\n 'leaf-message': 'var(--leaf-z-index-message)',\n },\n};\n"],"names":["leafTailwindTokens"],"mappings":";AACO,MAAMA,qBAAqB;IAChC,QAAQ;QACN,gBAAgB;QAChB,sBAAsB;QACtB,uBAAuB;QACvB,mBAAmB;QACnB,gBAAgB;QAChB,gBAAgB;QAChB,mBAAmB;QACnB,eAAe;QACf,qBAAqB;QACrB,sBAAsB;QACtB,kBAAkB;QAClB,aAAa;QACb,aAAa;QACb,cAAc;QACd,eAAe;QACf,gBAAgB;QAChB,sBAAsB;QACtB,uBAAuB;QACvB,eAAe;QACf,qBAAqB;QACrB,gBAAgB;QAChB,qBAAqB;QACrB,cAAc;IAChB;IACA,cAAc;QACZ,MAAM;QACN,WAAW;QACX,WAAW;QACX,WAAW;QACX,eAAe;IACjB;IACA,SAAS;QACP,MAAM;QACN,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,mBAAmB;QACnB,mBAAmB;QACnB,iBAAiB;QACjB,kBAAkB;QAClB,oBAAoB;QACpB,sBAAsB;QACtB,uBAAuB;QACvB,sBAAsB;QACtB,qBAAqB;QACrB,sBAAsB;QACtB,mBAAmB;IACrB;IACA,YAAY;QAAE,MAAM;IAA0B;IAC9C,UAAU;QACR,MAAM;QACN,WAAW;QACX,WAAW;IACb;IACA,YAAY;QAAE,MAAM;IAA0B;IAC9C,YAAY;QACV,eAAe;QACf,gBAAgB;IAClB;IACA,WAAW;QACT,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;IACb;IACA,oBAAoB;QAClB,MAAM;QACN,aAAa;QACb,aAAa;IACf;IACA,0BAA0B;QACxB,MAAM;QACN,eAAe;IACjB;IACA,QAAQ;QACN,cAAc;QACd,cAAc;QACd,gBAAgB;IAClB;AACF"}
1
+ {"version":3,"file":"tailwind-tokens.js","sources":["../../src/tailwind-tokens.ts"],"sourcesContent":["/** Shared by the Tailwind 3 preset and the generated Tailwind 4 CSS theme. */\nexport const leafTailwindTokens = {\n colors: {\n 'leaf-primary': 'var(--leaf-color-primary)',\n 'leaf-primary-hover': 'var(--leaf-color-primary-hover)',\n 'leaf-primary-active': 'var(--leaf-color-primary-active)',\n 'leaf-on-primary': 'var(--leaf-color-on-primary)',\n 'leaf-success': 'var(--leaf-color-success)',\n 'leaf-warning': 'var(--leaf-color-warning)',\n 'leaf-on-warning': 'var(--leaf-color-on-warning)',\n 'leaf-danger': 'var(--leaf-color-danger)',\n 'leaf-danger-hover': 'var(--leaf-color-danger-hover)',\n 'leaf-danger-active': 'var(--leaf-color-danger-active)',\n 'leaf-on-danger': 'var(--leaf-color-on-danger)',\n 'leaf-info': 'var(--leaf-color-info)',\n 'leaf-text': 'var(--leaf-color-text)',\n 'leaf-muted': 'var(--leaf-color-text-muted)',\n 'leaf-subtle': 'var(--leaf-color-text-subtle)',\n 'leaf-surface': 'var(--leaf-color-surface)',\n 'leaf-surface-muted': 'var(--leaf-color-surface-muted)',\n 'leaf-surface-raised': 'var(--leaf-color-surface-raised)',\n 'leaf-border': 'var(--leaf-color-border)',\n 'leaf-border-hover': 'var(--leaf-color-border-hover)',\n 'leaf-divider': 'var(--leaf-color-divider)',\n 'leaf-option-hover': 'var(--leaf-color-option-hover)',\n 'leaf-focus':\n 'var(--leaf-color-focus, var(--leaf-color-primary-focus, var(--leaf-color-primary-alpha-42)))',\n },\n borderRadius: {\n leaf: 'var(--leaf-radius)',\n 'leaf-sm': 'var(--leaf-radius-sm)',\n 'leaf-md': 'var(--leaf-radius-md)',\n 'leaf-lg': 'var(--leaf-radius-lg)',\n 'leaf-choice': 'var(--leaf-choice-radius)',\n },\n spacing: {\n leaf: 'var(--leaf-spacing)',\n 'leaf-xs': 'var(--leaf-spacing-xs)',\n 'leaf-sm': 'var(--leaf-spacing-sm)',\n 'leaf-md': 'var(--leaf-spacing-md)',\n 'leaf-lg': 'var(--leaf-spacing-lg)',\n 'leaf-xl': 'var(--leaf-spacing-xl)',\n 'leaf-control': 'var(--leaf-control-height)',\n 'leaf-control-sm': 'var(--leaf-control-height-sm)',\n 'leaf-control-lg': 'var(--leaf-control-height-lg)',\n 'leaf-form-gap': 'var(--leaf-density-form-gap)',\n 'leaf-label-gap': 'var(--leaf-density-label-gap)',\n 'leaf-row-padding': 'var(--leaf-density-row-padding)',\n 'leaf-option-height': 'var(--leaf-density-option-height)',\n 'leaf-option-padding': 'var(--leaf-density-option-padding)',\n 'leaf-field-padding': 'var(--leaf-density-field-padding)',\n 'leaf-dialog-block': 'var(--leaf-density-dialog-block)',\n 'leaf-dialog-inline': 'var(--leaf-density-dialog-inline)',\n 'leaf-dialog-gap': 'var(--leaf-density-dialog-gap)',\n },\n fontFamily: { leaf: 'var(--leaf-font-family)' },\n fontSize: {\n leaf: 'var(--leaf-font-size)',\n 'leaf-sm': 'var(--leaf-font-size-sm)',\n 'leaf-lg': 'var(--leaf-font-size-lg)',\n },\n lineHeight: { leaf: 'var(--leaf-line-height)' },\n fontWeight: {\n 'leaf-medium': 'var(--leaf-font-weight)',\n 'leaf-heading': 'var(--leaf-heading-weight)',\n },\n boxShadow: {\n 'leaf-xs': 'var(--leaf-shadow-xs)',\n 'leaf-sm': 'var(--leaf-shadow-sm)',\n 'leaf-md': 'var(--leaf-shadow-md)',\n 'leaf-lg': 'var(--leaf-shadow-lg)',\n },\n transitionDuration: {\n leaf: 'var(--leaf-motion-duration)',\n 'leaf-fast': 'var(--leaf-motion-fast)',\n 'leaf-slow': 'var(--leaf-motion-slow)',\n },\n transitionTimingFunction: {\n leaf: 'var(--leaf-motion-easing)',\n 'leaf-spring': 'var(--leaf-motion-spring)',\n },\n zIndex: {\n 'leaf-popup': 'var(--leaf-z-index-popup)',\n 'leaf-modal': 'var(--leaf-z-index-modal)',\n 'leaf-message': 'var(--leaf-z-index-message)',\n },\n};\n"],"names":["leafTailwindTokens"],"mappings":";AACO,MAAMA,qBAAqB;IAChC,QAAQ;QACN,gBAAgB;QAChB,sBAAsB;QACtB,uBAAuB;QACvB,mBAAmB;QACnB,gBAAgB;QAChB,gBAAgB;QAChB,mBAAmB;QACnB,eAAe;QACf,qBAAqB;QACrB,sBAAsB;QACtB,kBAAkB;QAClB,aAAa;QACb,aAAa;QACb,cAAc;QACd,eAAe;QACf,gBAAgB;QAChB,sBAAsB;QACtB,uBAAuB;QACvB,eAAe;QACf,qBAAqB;QACrB,gBAAgB;QAChB,qBAAqB;QACrB,cACE;IACJ;IACA,cAAc;QACZ,MAAM;QACN,WAAW;QACX,WAAW;QACX,WAAW;QACX,eAAe;IACjB;IACA,SAAS;QACP,MAAM;QACN,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;QACX,gBAAgB;QAChB,mBAAmB;QACnB,mBAAmB;QACnB,iBAAiB;QACjB,kBAAkB;QAClB,oBAAoB;QACpB,sBAAsB;QACtB,uBAAuB;QACvB,sBAAsB;QACtB,qBAAqB;QACrB,sBAAsB;QACtB,mBAAmB;IACrB;IACA,YAAY;QAAE,MAAM;IAA0B;IAC9C,UAAU;QACR,MAAM;QACN,WAAW;QACX,WAAW;IACb;IACA,YAAY;QAAE,MAAM;IAA0B;IAC9C,YAAY;QACV,eAAe;QACf,gBAAgB;IAClB;IACA,WAAW;QACT,WAAW;QACX,WAAW;QACX,WAAW;QACX,WAAW;IACb;IACA,oBAAoB;QAClB,MAAM;QACN,aAAa;QACb,aAAa;IACf;IACA,0BAA0B;QACxB,MAAM;QACN,eAAe;IACjB;IACA,QAAQ;QACN,cAAc;QACd,cAAc;QACd,gBAAgB;IAClB;AACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../../src/textarea/textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,sBAAsB,EAI5B,MAAM,OAAO,CAAC;AAMf,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,aAAc,SAAQ,sBAAsB,CAAC,mBAAmB,CAAC;IAChF,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC;CAC1E;AAID,eAAO,MAAM,eAAe,+GA4H3B,CAAC;AAGF,eAAO,MAAM,QAAQ,+GAMnB,CAAC"}
1
+ {"version":3,"file":"textarea.d.ts","sourceRoot":"","sources":["../../../src/textarea/textarea.tsx"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,sBAAsB,EAK5B,MAAM,OAAO,CAAC;AAOf,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAElE,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,aAAc,SAAQ,sBAAsB,CAAC,mBAAmB,CAAC;IAChF,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,MAAM,CAAC,EAAE,aAAa,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IACtC,QAAQ,CAAC,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACtC,SAAS,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC;CAC1E;AAID,eAAO,MAAM,eAAe,+GAyJ3B,CAAC;AAGF,eAAO,MAAM,QAAQ,+GAMnB,CAAC"}
@@ -1,14 +1,16 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from "react/jsx-runtime";
3
- import { forwardRef, useEffect, useLayoutEffect, useRef } from "react";
3
+ import { forwardRef, useEffect, useId, useLayoutEffect, useRef } from "react";
4
4
  import { useComponentProps } from "../config-provider/component-defaults.js";
5
5
  import { useFormField } from "../form/form.js";
6
+ import { ScrollbarControl } from "../scrollbar/scrollbar.js";
6
7
  import { classes } from "../shared/classes.js";
7
8
  import { useFieldValue, useMergedRef } from "../shared/field.js";
8
9
  import { animateMotion, useMotionEnabled } from "../shared/motion.js";
9
10
  const useBrowserLayoutEffect = "u" < typeof window ? useEffect : useLayoutEffect;
10
11
  const textarea_TextareaControl = /*#__PURE__*/ forwardRef(function({ size = 'md', status: statusProp, resize = 'vertical', rows = 3, autoSize = false, showCount = false, value, defaultValue, onChange, className, style, disabled: disabledProp, 'aria-invalid': ariaInvalid, ...props }, ref) {
11
12
  const field = useFormField();
13
+ const id = useId();
12
14
  const textarea = useRef(null);
13
15
  const heightAnimation = useRef(void 0);
14
16
  const measuredHeight = useRef(false);
@@ -70,29 +72,55 @@ const textarea_TextareaControl = /*#__PURE__*/ forwardRef(function({ size = 'md'
70
72
  motionEnabled
71
73
  ]);
72
74
  useEffect(()=>()=>heightAnimation.current?.cancel(), []);
73
- const control = /*#__PURE__*/ jsx("textarea", {
74
- ...props,
75
- id: props.id ?? field?.id,
76
- required: props.required ?? field?.required,
77
- "aria-describedby": [
78
- props['aria-describedby'],
79
- field?.descriptionId
80
- ].filter(Boolean).join(' ') || void 0,
81
- ref: merged,
82
- disabled: disabled,
83
- rows: rows,
84
- value: current,
85
- onChange: (event)=>{
86
- setCurrent(event.target.value);
87
- onChange?.(event);
88
- },
89
- className: classes('leaf-textarea', `leaf-textarea--${size}`, className),
75
+ const control = /*#__PURE__*/ jsx(ScrollbarControl, {
76
+ externalViewport: textarea,
77
+ viewportRevision: current,
78
+ resizeHandle: !autoSize && 'none' !== resize,
79
+ scrollbarTabIndex: -1,
80
+ className: "leaf-textarea-scrollbar",
90
81
  style: {
91
- resize: autoSize ? 'none' : resize,
92
- ...style
82
+ width: style?.width,
83
+ minWidth: style?.minWidth,
84
+ maxWidth: style?.maxWidth,
85
+ flex: style?.flex,
86
+ flexBasis: style?.flexBasis,
87
+ flexGrow: style?.flexGrow,
88
+ flexShrink: style?.flexShrink,
89
+ alignSelf: style?.alignSelf,
90
+ order: style?.order,
91
+ gridArea: style?.gridArea,
92
+ gridColumn: style?.gridColumn,
93
+ gridRow: style?.gridRow
93
94
  },
94
- "data-status": status,
95
- "aria-invalid": 'error' === status ? true : ariaInvalid
95
+ children: /*#__PURE__*/ jsx("textarea", {
96
+ ...props,
97
+ id: props.id ?? field?.id ?? id,
98
+ required: props.required ?? field?.required,
99
+ "aria-describedby": [
100
+ props['aria-describedby'],
101
+ field?.descriptionId
102
+ ].filter(Boolean).join(' ') || void 0,
103
+ ref: merged,
104
+ disabled: disabled,
105
+ rows: rows,
106
+ value: current,
107
+ onChange: (event)=>{
108
+ setCurrent(event.target.value);
109
+ onChange?.(event);
110
+ },
111
+ className: classes('leaf-textarea', `leaf-textarea--${size}`, className),
112
+ style: {
113
+ resize: autoSize ? 'none' : resize,
114
+ ...style,
115
+ minWidth: void 0,
116
+ maxWidth: void 0,
117
+ ...style?.width === void 0 ? {} : {
118
+ width: '100%'
119
+ }
120
+ },
121
+ "data-status": status,
122
+ "aria-invalid": 'error' === status ? true : ariaInvalid
123
+ })
96
124
  });
97
125
  return showCount ? /*#__PURE__*/ jsxs("div", {
98
126
  className: "leaf-textarea-wrap",
@@ -1 +1 @@
1
- {"version":3,"file":"textarea/textarea.js","sources":["../../../src/textarea/textarea.tsx"],"sourcesContent":["import {\n forwardRef,\n type ReactNode,\n type TextareaHTMLAttributes,\n useEffect,\n useLayoutEffect,\n useRef,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useFormField } from '../form/form';\nimport { classes } from '../shared/classes';\nimport { useFieldValue, useMergedRef } from '../shared/field';\nimport { animateMotion, useMotionEnabled } from '../shared/motion';\nimport type { ControlSize, ControlStatus } from '../shared/types';\n\nexport interface TextareaAutoSize {\n minRows?: number;\n maxRows?: number;\n}\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n size?: ControlSize;\n status?: ControlStatus;\n resize?: 'none' | 'vertical' | 'both';\n autoSize?: boolean | TextareaAutoSize;\n showCount?: boolean | ((value: string, maxLength?: number) => ReactNode);\n}\n\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\nexport const TextareaControl = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function TextareaControl(\n {\n size = 'md',\n status: statusProp,\n resize = 'vertical',\n rows = 3,\n autoSize = false,\n showCount = false,\n value,\n defaultValue,\n onChange,\n className,\n style,\n disabled: disabledProp,\n 'aria-invalid': ariaInvalid,\n ...props\n }: TextareaProps,\n ref,\n ) {\n const field = useFormField();\n const textarea = useRef<HTMLTextAreaElement>(null);\n const heightAnimation = useRef<Animation | undefined>(undefined);\n const measuredHeight = useRef(false);\n const motionEnabled = useMotionEnabled();\n const merged = useMergedRef(textarea, ref);\n const [current, setCurrent] = useFieldValue(\n value === undefined ? undefined : String(value),\n String(defaultValue ?? ''),\n textarea,\n props.form,\n );\n const disabled = disabledProp || field?.disabled;\n const status = statusProp ?? (field?.error ? 'error' : undefined);\n const minRows = typeof autoSize === 'object' ? Math.max(1, autoSize.minRows ?? rows) : rows;\n const maxRows =\n typeof autoSize === 'object' ? Math.max(minRows, autoSize.maxRows ?? Infinity) : Infinity;\n useBrowserLayoutEffect(() => {\n if (!autoSize || !textarea.current) {\n heightAnimation.current?.cancel();\n measuredHeight.current = false;\n return;\n }\n const node = textarea.current;\n const measure = () => {\n const previousHeight =\n Number.parseFloat(getComputedStyle(node).height) || node.offsetHeight;\n heightAnimation.current?.cancel();\n const computed = getComputedStyle(node);\n const lineHeight =\n Number.parseFloat(computed.lineHeight) ||\n (Number.parseFloat(computed.fontSize) || 14) * 1.5;\n const padding =\n (Number.parseFloat(computed.paddingTop) || 0) +\n (Number.parseFloat(computed.paddingBottom) || 0);\n const border =\n (Number.parseFloat(computed.borderTopWidth) || 0) +\n (Number.parseFloat(computed.borderBottomWidth) || 0);\n const addition = computed.boxSizing === 'border-box' ? padding + border : 0;\n node.style.height = 'auto';\n const measured =\n node.scrollHeight + (computed.boxSizing === 'border-box' ? border : -padding);\n const maximum = lineHeight * maxRows + addition;\n const height = Math.min(maximum, Math.max(lineHeight * minRows + addition, measured));\n node.style.height = `${height}px`;\n node.style.overflowY = measured > maximum ? 'auto' : 'hidden';\n if (measuredHeight.current && motionEnabled && Math.abs(previousHeight - height) > 0.5)\n heightAnimation.current = animateMotion(\n node,\n [{ height: `${previousHeight}px` }, { height: `${height}px` }],\n { durationMultiplier: 0.8 },\n );\n measuredHeight.current = true;\n };\n measure();\n let width = node.clientWidth;\n const observer =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => {\n if (width !== node.clientWidth) {\n width = node.clientWidth;\n measure();\n }\n });\n observer?.observe(node);\n return () => observer?.disconnect();\n }, [autoSize, minRows, maxRows, current, motionEnabled]);\n useEffect(() => () => heightAnimation.current?.cancel(), []);\n const control = (\n <textarea\n {...props}\n id={props.id ?? field?.id}\n required={props.required ?? field?.required}\n aria-describedby={\n [props['aria-describedby'], field?.descriptionId].filter(Boolean).join(' ') || undefined\n }\n ref={merged}\n disabled={disabled}\n rows={rows}\n value={current}\n onChange={(event) => {\n setCurrent(event.target.value);\n onChange?.(event);\n }}\n className={classes('leaf-textarea', `leaf-textarea--${size}`, className)}\n style={{ resize: autoSize ? 'none' : resize, ...style }}\n data-status={status}\n aria-invalid={status === 'error' ? true : ariaInvalid}\n />\n );\n return showCount ? (\n <div className=\"leaf-textarea-wrap\">\n {control}\n <span className=\"leaf-textarea__count\">\n {typeof showCount === 'function'\n ? showCount(current, props.maxLength)\n : `${current.length}${props.maxLength === undefined ? '' : ` / ${props.maxLength}`}`}\n </span>\n </div>\n ) : (\n control\n );\n },\n);\nTextareaControl.displayName = 'TextareaControl';\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n rawProps: TextareaProps,\n ref,\n) {\n const props = useComponentProps('Textarea', rawProps);\n return <TextareaControl {...props} ref={ref} />;\n});\nTextarea.displayName = 'Textarea';\n"],"names":["useBrowserLayoutEffect","window","useEffect","useLayoutEffect","TextareaControl","forwardRef","size","statusProp","resize","rows","autoSize","showCount","value","defaultValue","onChange","className","style","disabledProp","ariaInvalid","props","ref","field","useFormField","textarea","useRef","heightAnimation","undefined","measuredHeight","motionEnabled","useMotionEnabled","merged","useMergedRef","current","setCurrent","useFieldValue","String","disabled","status","minRows","Math","maxRows","Infinity","node","measure","previousHeight","Number","getComputedStyle","computed","lineHeight","padding","border","addition","measured","maximum","height","animateMotion","width","observer","ResizeObserver","control","Boolean","event","classes","Textarea","rawProps","useComponentProps"],"mappings":"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"}
1
+ {"version":3,"file":"textarea/textarea.js","sources":["../../../src/textarea/textarea.tsx"],"sourcesContent":["import {\n forwardRef,\n type ReactNode,\n type TextareaHTMLAttributes,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useFormField } from '../form/form';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { classes } from '../shared/classes';\nimport { useFieldValue, useMergedRef } from '../shared/field';\nimport { animateMotion, useMotionEnabled } from '../shared/motion';\nimport type { ControlSize, ControlStatus } from '../shared/types';\n\nexport interface TextareaAutoSize {\n minRows?: number;\n maxRows?: number;\n}\nexport interface TextareaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\n size?: ControlSize;\n status?: ControlStatus;\n resize?: 'none' | 'vertical' | 'both';\n autoSize?: boolean | TextareaAutoSize;\n showCount?: boolean | ((value: string, maxLength?: number) => ReactNode);\n}\n\nconst useBrowserLayoutEffect = typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\nexport const TextareaControl = forwardRef<HTMLTextAreaElement, TextareaProps>(\n function TextareaControl(\n {\n size = 'md',\n status: statusProp,\n resize = 'vertical',\n rows = 3,\n autoSize = false,\n showCount = false,\n value,\n defaultValue,\n onChange,\n className,\n style,\n disabled: disabledProp,\n 'aria-invalid': ariaInvalid,\n ...props\n }: TextareaProps,\n ref,\n ) {\n const field = useFormField();\n const id = useId();\n const textarea = useRef<HTMLTextAreaElement>(null);\n const heightAnimation = useRef<Animation | undefined>(undefined);\n const measuredHeight = useRef(false);\n const motionEnabled = useMotionEnabled();\n const merged = useMergedRef(textarea, ref);\n const [current, setCurrent] = useFieldValue(\n value === undefined ? undefined : String(value),\n String(defaultValue ?? ''),\n textarea,\n props.form,\n );\n const disabled = disabledProp || field?.disabled;\n const status = statusProp ?? (field?.error ? 'error' : undefined);\n const minRows = typeof autoSize === 'object' ? Math.max(1, autoSize.minRows ?? rows) : rows;\n const maxRows =\n typeof autoSize === 'object' ? Math.max(minRows, autoSize.maxRows ?? Infinity) : Infinity;\n useBrowserLayoutEffect(() => {\n if (!autoSize || !textarea.current) {\n heightAnimation.current?.cancel();\n measuredHeight.current = false;\n return;\n }\n const node = textarea.current;\n const measure = () => {\n const previousHeight =\n Number.parseFloat(getComputedStyle(node).height) || node.offsetHeight;\n heightAnimation.current?.cancel();\n const computed = getComputedStyle(node);\n const lineHeight =\n Number.parseFloat(computed.lineHeight) ||\n (Number.parseFloat(computed.fontSize) || 14) * 1.5;\n const padding =\n (Number.parseFloat(computed.paddingTop) || 0) +\n (Number.parseFloat(computed.paddingBottom) || 0);\n const border =\n (Number.parseFloat(computed.borderTopWidth) || 0) +\n (Number.parseFloat(computed.borderBottomWidth) || 0);\n const addition = computed.boxSizing === 'border-box' ? padding + border : 0;\n node.style.height = 'auto';\n const measured =\n node.scrollHeight + (computed.boxSizing === 'border-box' ? border : -padding);\n const maximum = lineHeight * maxRows + addition;\n const height = Math.min(maximum, Math.max(lineHeight * minRows + addition, measured));\n node.style.height = `${height}px`;\n node.style.overflowY = measured > maximum ? 'auto' : 'hidden';\n if (measuredHeight.current && motionEnabled && Math.abs(previousHeight - height) > 0.5)\n heightAnimation.current = animateMotion(\n node,\n [{ height: `${previousHeight}px` }, { height: `${height}px` }],\n { durationMultiplier: 0.8 },\n );\n measuredHeight.current = true;\n };\n measure();\n let width = node.clientWidth;\n const observer =\n typeof ResizeObserver === 'undefined'\n ? null\n : new ResizeObserver(() => {\n if (width !== node.clientWidth) {\n width = node.clientWidth;\n measure();\n }\n });\n observer?.observe(node);\n return () => observer?.disconnect();\n }, [autoSize, minRows, maxRows, current, motionEnabled]);\n useEffect(() => () => heightAnimation.current?.cancel(), []);\n const control = (\n <ScrollbarControl\n externalViewport={textarea}\n viewportRevision={current}\n resizeHandle={!autoSize && resize !== 'none'}\n scrollbarTabIndex={-1}\n className=\"leaf-textarea-scrollbar\"\n style={{\n width: style?.width,\n minWidth: style?.minWidth,\n maxWidth: style?.maxWidth,\n flex: style?.flex,\n flexBasis: style?.flexBasis,\n flexGrow: style?.flexGrow,\n flexShrink: style?.flexShrink,\n alignSelf: style?.alignSelf,\n order: style?.order,\n gridArea: style?.gridArea,\n gridColumn: style?.gridColumn,\n gridRow: style?.gridRow,\n }}\n >\n <textarea\n {...props}\n id={props.id ?? field?.id ?? id}\n required={props.required ?? field?.required}\n aria-describedby={\n [props['aria-describedby'], field?.descriptionId].filter(Boolean).join(' ') || undefined\n }\n ref={merged}\n disabled={disabled}\n rows={rows}\n value={current}\n onChange={(event) => {\n setCurrent(event.target.value);\n onChange?.(event);\n }}\n className={classes('leaf-textarea', `leaf-textarea--${size}`, className)}\n style={{\n resize: autoSize ? 'none' : resize,\n ...style,\n minWidth: undefined,\n maxWidth: undefined,\n ...(style?.width === undefined ? {} : { width: '100%' }),\n }}\n data-status={status}\n aria-invalid={status === 'error' ? true : ariaInvalid}\n />\n </ScrollbarControl>\n );\n return showCount ? (\n <div className=\"leaf-textarea-wrap\">\n {control}\n <span className=\"leaf-textarea__count\">\n {typeof showCount === 'function'\n ? showCount(current, props.maxLength)\n : `${current.length}${props.maxLength === undefined ? '' : ` / ${props.maxLength}`}`}\n </span>\n </div>\n ) : (\n control\n );\n },\n);\nTextareaControl.displayName = 'TextareaControl';\n\nexport const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(function Textarea(\n rawProps: TextareaProps,\n ref,\n) {\n const props = useComponentProps('Textarea', rawProps);\n return <TextareaControl {...props} ref={ref} />;\n});\nTextarea.displayName = 'Textarea';\n"],"names":["useBrowserLayoutEffect","window","useEffect","useLayoutEffect","TextareaControl","forwardRef","size","statusProp","resize","rows","autoSize","showCount","value","defaultValue","onChange","className","style","disabledProp","ariaInvalid","props","ref","field","useFormField","id","useId","textarea","useRef","heightAnimation","undefined","measuredHeight","motionEnabled","useMotionEnabled","merged","useMergedRef","current","setCurrent","useFieldValue","String","disabled","status","minRows","Math","maxRows","Infinity","node","measure","previousHeight","Number","getComputedStyle","computed","lineHeight","padding","border","addition","measured","maximum","height","animateMotion","width","observer","ResizeObserver","control","ScrollbarControl","Boolean","event","classes","Textarea","rawProps","useComponentProps"],"mappings":"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"}
@@ -22,6 +22,7 @@ export interface LeafTheme {
22
22
  }
23
23
  export interface LeafComponentTokens {
24
24
  borderRadius?: string | number;
25
+ borderWidth?: string | number;
25
26
  controlHeight?: string | number;
26
27
  padding?: string | number;
27
28
  gap?: string | number;
@@ -32,6 +33,17 @@ export interface LeafComponentTokens {
32
33
  headerBackground?: string;
33
34
  footerBackground?: string;
34
35
  shadow?: string;
36
+ hover?: LeafComponentStateTokens;
37
+ active?: LeafComponentStateTokens;
38
+ focus?: LeafComponentStateTokens;
39
+ disabled?: LeafComponentStateTokens;
40
+ }
41
+ /** Interaction overrides supported by themed controls; focus keeps the accessible outline. */
42
+ export interface LeafComponentStateTokens {
43
+ color?: string;
44
+ background?: string;
45
+ borderColor?: string;
46
+ shadow?: string;
35
47
  }
36
48
  /** Optional overrides for applications with more specific design requirements. */
37
49
  export interface LeafThemeTokens {
@@ -50,6 +62,9 @@ export interface LeafThemeTokens {
50
62
  borderColor?: string;
51
63
  borderHoverColor?: string;
52
64
  dividerColor?: string;
65
+ borderWidth?: number | string;
66
+ controlShadow?: string;
67
+ surfaceShadow?: string;
53
68
  borderRadiusSm?: number | string;
54
69
  borderRadiusMd?: number | string;
55
70
  borderRadiusLg?: number | string;
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/theme.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/theme.ts"],"names":[],"mappings":"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"}
package/dist/esm/theme.js CHANGED
@@ -1,6 +1,23 @@
1
1
  "use client";
2
2
  import { deriveColors } from "./colors.js";
3
3
  const defined = (value)=>Object.fromEntries(Object.entries(value ?? {}).filter(([, item])=>void 0 !== item));
4
+ const componentStates = [
5
+ 'hover',
6
+ 'active',
7
+ 'focus',
8
+ 'disabled'
9
+ ];
10
+ function mergeComponentTokens(parent, tokens) {
11
+ const merged = {
12
+ ...defined(parent),
13
+ ...defined(tokens)
14
+ };
15
+ for (const state of componentStates)if (parent?.[state] || tokens?.[state]) merged[state] = {
16
+ ...defined(parent?.[state]),
17
+ ...defined(tokens?.[state])
18
+ };
19
+ return merged;
20
+ }
4
21
  function mergeLeafTheme(parent, theme) {
5
22
  return {
6
23
  ...parent,
@@ -16,10 +33,7 @@ function mergeLeafTheme(parent, theme) {
16
33
  ])
17
34
  ].map((key)=>[
18
35
  key,
19
- {
20
- ...parent.components?.[key],
21
- ...defined(theme?.components?.[key])
22
- }
36
+ mergeComponentTokens(parent.components?.[key], theme?.components?.[key])
23
37
  ])),
24
38
  ...parent.tokens || theme?.tokens ? {
25
39
  tokens: {
@@ -45,6 +59,9 @@ const tokenVariables = {
45
59
  borderColor: 'color-border',
46
60
  borderHoverColor: 'color-border-hover',
47
61
  dividerColor: 'color-divider',
62
+ borderWidth: 'border-width',
63
+ controlShadow: 'control-shadow',
64
+ surfaceShadow: 'surface-shadow',
48
65
  borderRadiusSm: 'radius-sm',
49
66
  borderRadiusMd: 'radius-md',
50
67
  borderRadiusLg: 'radius-lg',
@@ -105,10 +122,7 @@ function paddingSides(value) {
105
122
  }
106
123
  function leafThemeColors(theme) {
107
124
  const colors = {};
108
- if (theme.primaryColor) {
109
- colors.primary = theme.primaryColor;
110
- colors['on-primary'] = '#ffffff';
111
- }
125
+ if (theme.primaryColor) colors.primary = theme.primaryColor;
112
126
  for (const key of Object.keys(tokenVariables)){
113
127
  const variable = tokenVariables[key];
114
128
  const value = theme.tokens?.[key];
@@ -165,6 +179,7 @@ function leafThemeVariables(theme) {
165
179
  for (const [name, value] of Object.entries(theme.breakpoints ?? {}))if (void 0 !== value) variables[`--leaf-breakpoint-${name}`] = `${value}px`;
166
180
  const componentKeys = {
167
181
  borderRadius: 'radius',
182
+ borderWidth: 'border-width',
168
183
  controlHeight: 'height',
169
184
  padding: 'padding',
170
185
  gap: 'gap',
@@ -176,29 +191,37 @@ function leafThemeVariables(theme) {
176
191
  footerBackground: 'footer-background',
177
192
  shadow: 'shadow'
178
193
  };
179
- for (const [component, tokens] of Object.entries(theme.components ?? {}))for (const [key, value] of Object.entries(tokens))if (void 0 !== value && /^[a-z][a-z\d-]*$/i.test(component)) {
180
- const token = componentKeys[key];
181
- if (token) variables[`--leaf-component-${component.replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase()}-${token}`] = 'number' == typeof value ? theme_length(value) : value;
182
- if ('controlHeight' === key) {
183
- const name = component.replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase();
184
- variables[`--leaf-component-${name}-height-sm`] = `max(1px, calc(var(--leaf-component-${name}-height) - 6px))`;
185
- variables[`--leaf-component-${name}-height-lg`] = `calc(var(--leaf-component-${name}-height) + 6px)`;
194
+ const stateKeys = {
195
+ color: 'color',
196
+ background: 'background',
197
+ borderColor: 'border-color',
198
+ shadow: 'shadow'
199
+ };
200
+ for (const [component, tokens] of Object.entries(theme.components ?? {})){
201
+ if (!/^[a-z][a-z\d-]*$/i.test(component)) continue;
202
+ const name = component.replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase();
203
+ for (const [key, value] of Object.entries(tokens))if (void 0 !== value && 'object' != typeof value) {
204
+ const token = componentKeys[key];
205
+ if (token) variables[`--leaf-component-${name}-${token}`] = 'number' == typeof value ? theme_length(value) : value;
206
+ if ('controlHeight' === key) {
207
+ variables[`--leaf-component-${name}-height-sm`] = `max(1px, calc(var(--leaf-component-${name}-height) - 6px))`;
208
+ variables[`--leaf-component-${name}-height-lg`] = `calc(var(--leaf-component-${name}-height) + 6px)`;
209
+ }
210
+ if ('padding' === key) {
211
+ const sides = paddingSides(theme_length(value));
212
+ for (const [index, side] of [
213
+ 'top',
214
+ 'right',
215
+ 'bottom',
216
+ 'left'
217
+ ].entries())variables[`--leaf-component-${name}-padding-${side}`] = sides[index];
218
+ }
186
219
  }
187
- if ('padding' === key) {
188
- const name = component.replace(/([a-z\d])([A-Z])/g, '$1-$2').toLowerCase();
189
- const sides = paddingSides(theme_length(value));
190
- for (const [index, side] of [
191
- 'top',
192
- 'right',
193
- 'bottom',
194
- 'left'
195
- ].entries())variables[`--leaf-component-${name}-padding-${side}`] = sides[index];
220
+ for (const state of componentStates)for (const [key, suffix] of Object.entries(stateKeys)){
221
+ const value = tokens[state]?.[key];
222
+ if (void 0 !== value) variables[`--leaf-component-${name}-${state}-${suffix}`] = value;
196
223
  }
197
224
  }
198
- if (void 0 !== theme.primaryColor) {
199
- variables['--leaf-color-primary'] = theme.primaryColor;
200
- variables['--leaf-color-on-primary'] = '#ffffff';
201
- }
202
225
  if (void 0 !== theme.borderRadius) {
203
226
  variables['--leaf-radius'] = theme_length(theme.borderRadius);
204
227
  variables['--leaf-radius-sm'] = 'calc(var(--leaf-radius) * 0.6)';
@@ -221,8 +244,9 @@ function leafThemeVariables(theme) {
221
244
  const value = theme.tokens?.[key];
222
245
  if (void 0 === value) continue;
223
246
  const variable = tokenVariables[key];
224
- variables[`--leaf-${variable}`] = 'number' != typeof value ? value : 'motionDuration' === key ? `${value}ms` : variable.includes('radius') || variable.includes('height') || variable.includes('font-size') || variable.includes('spacing') ? theme_length(value) : value;
247
+ variables[`--leaf-${variable}`] = 'number' != typeof value ? value : 'motionDuration' === key ? `${value}ms` : variable.includes('radius') || variable.includes('height') || variable.includes('font-size') || 'border-width' === variable || variable.includes('spacing') ? theme_length(value) : value;
225
248
  }
249
+ if (theme.tokens?.borderColor !== void 0) variables['--leaf-frame-border-color'] = theme.tokens.borderColor;
226
250
  if (void 0 !== theme.motion) {
227
251
  variables['--leaf-motion-play-state'] = theme.motion ? 'running' : 'paused';
228
252
  variables['--leaf-motion-animation'] = theme.motion ? 'initial' : 'none';