@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
@@ -88,12 +88,14 @@ const form_Form = /*#__PURE__*/ forwardRef(function(rawProps, ref) {
88
88
  });
89
89
  form_Form.displayName = 'Form';
90
90
  function FormField(rawProps) {
91
- const { label, htmlFor, required, help, error, labelWidth, children, className, style, ...props } = useComponentProps('FormField', rawProps);
91
+ const { label, description, layout: suppliedLayout, htmlFor, required, help, error, labelWidth, children, className, style, ...props } = useComponentProps('FormField', rawProps);
92
92
  const form = useContext(FormContext);
93
+ const layout = suppliedLayout ?? form.layout;
93
94
  const { messages } = useLeafConfig();
94
95
  const generated = useId();
95
96
  const inputId = htmlFor ?? `${generated}-control`;
96
97
  const descriptionId = `${generated}-description`;
98
+ const summaryId = `${generated}-summary`;
97
99
  const labelRef = useRef(null);
98
100
  const [validationError, setValidationError] = useState();
99
101
  const displayedError = error ?? validationError;
@@ -111,7 +113,7 @@ function FormField(rawProps) {
111
113
  label
112
114
  ]);
113
115
  useEffect(()=>{
114
- if (null == label) return;
116
+ if (null == label || 'horizontal' !== layout || void 0 !== labelWidth) return;
115
117
  const element = labelRef.current;
116
118
  if (!element) return;
117
119
  const measure = ()=>form.measure(generated, element.getBoundingClientRect().width);
@@ -125,7 +127,9 @@ function FormField(rawProps) {
125
127
  }, [
126
128
  form.measure,
127
129
  generated,
128
- label
130
+ label,
131
+ layout,
132
+ labelWidth
129
133
  ]);
130
134
  const root = useRef(null);
131
135
  useEffect(()=>{
@@ -144,7 +148,10 @@ function FormField(rawProps) {
144
148
  required,
145
149
  disabled: form.disabled,
146
150
  error: displayedError,
147
- descriptionId: displayedError || help ? descriptionId : void 0
151
+ descriptionId: [
152
+ null != description && summaryId,
153
+ (displayedError || help) && descriptionId
154
+ ].filter(Boolean).join(' ') || void 0
148
155
  };
149
156
  const variables = {
150
157
  ...void 0 !== labelWidth ? {
@@ -157,7 +164,7 @@ function FormField(rawProps) {
157
164
  children: /*#__PURE__*/ jsxs("div", {
158
165
  ...props,
159
166
  ref: root,
160
- className: classes('leaf-form-field', `leaf-form-field--${form.layout}`, `leaf-form-field--${form.labelAlign}`, className),
167
+ className: classes('leaf-form-field', `leaf-form-field--${layout}`, 'settings' === form.layout && 'leaf-form-field--settings-row', `leaf-form-field--${form.labelAlign}`, className),
161
168
  style: variables,
162
169
  onInvalidCapture: (event)=>{
163
170
  props.onInvalidCapture?.(event);
@@ -172,21 +179,31 @@ function FormField(rawProps) {
172
179
  setValidationError(void 0);
173
180
  },
174
181
  children: [
175
- null != label && /*#__PURE__*/ jsx("label", {
176
- id: `${generated}-label`,
177
- className: "leaf-form-field__label",
178
- htmlFor: inputId,
179
- children: /*#__PURE__*/ jsxs("span", {
180
- ref: labelRef,
181
- children: [
182
- required && /*#__PURE__*/ jsx("span", {
183
- className: "leaf-form-field__required",
184
- "aria-hidden": "true",
185
- children: "*"
186
- }),
187
- label
188
- ]
189
- })
182
+ (null != label || null != description) && /*#__PURE__*/ jsxs("div", {
183
+ className: "leaf-form-field__header",
184
+ children: [
185
+ null != label && /*#__PURE__*/ jsx("label", {
186
+ id: `${generated}-label`,
187
+ className: "leaf-form-field__label",
188
+ htmlFor: inputId,
189
+ children: /*#__PURE__*/ jsxs("span", {
190
+ ref: labelRef,
191
+ children: [
192
+ required && /*#__PURE__*/ jsx("span", {
193
+ className: "leaf-form-field__required",
194
+ "aria-hidden": "true",
195
+ children: "*"
196
+ }),
197
+ label
198
+ ]
199
+ })
200
+ }),
201
+ null != description && /*#__PURE__*/ jsx("div", {
202
+ id: summaryId,
203
+ className: "leaf-form-field__summary-description",
204
+ children: description
205
+ })
206
+ ]
190
207
  }),
191
208
  /*#__PURE__*/ jsxs("div", {
192
209
  className: "leaf-form-field__body",
@@ -219,7 +236,7 @@ function FormGroup(rawProps) {
219
236
  children: /*#__PURE__*/ jsxs("fieldset", {
220
237
  ...props,
221
238
  disabled: context.disabled,
222
- className: classes('leaf-form-group', className),
239
+ className: classes('leaf-form-group', 'settings' === inherited.layout && 'leaf-form-group--settings', className),
223
240
  children: [
224
241
  legend && /*#__PURE__*/ jsx("legend", {
225
242
  children: legend
@@ -1 +1 @@
1
- {"version":3,"file":"form/form.js","sources":["../../../src/form/form.tsx"],"sourcesContent":["import {\n createContext,\n type FieldsetHTMLAttributes,\n type FormHTMLAttributes,\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { classes } from '../shared/classes';\nimport type { LeafThemeStyle } from '../theme';\n\nexport interface FormProps extends FormHTMLAttributes<HTMLFormElement> {\n layout?: 'horizontal' | 'vertical';\n labelWidth?: number | 'auto';\n labelAlign?: 'left' | 'right';\n disabled?: boolean;\n}\nexport interface FormFieldProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n htmlFor?: string;\n required?: boolean;\n help?: ReactNode;\n error?: ReactNode;\n labelWidth?: number;\n}\nexport interface FormError {\n fieldId: string;\n message: ReactNode;\n label?: ReactNode;\n}\nconst FormContext = createContext({\n layout: 'horizontal' as 'horizontal' | 'vertical',\n labelAlign: 'right' as 'left' | 'right',\n disabled: false,\n measure: (_id: string, _width: number | null) => {},\n errors: [] as readonly FormError[],\n registerError: (_id: string, _error: FormError | null) => {},\n});\ninterface FieldContextValue {\n id?: string;\n labelId?: string;\n descriptionId?: string;\n error?: ReactNode;\n required?: boolean;\n disabled?: boolean;\n}\nconst FieldContext = createContext<FieldContextValue | undefined>(undefined);\nexport function useFormField() {\n const field = useContext(FieldContext);\n const form = useContext(FormContext);\n return form.disabled ? { ...field, disabled: true } : field;\n}\n\n/** Internal controls belong to the composite value, not to the outer field. */\nexport function FieldScope({ children }: { children: ReactNode }) {\n return <FieldContext.Provider value={undefined}>{children}</FieldContext.Provider>;\n}\n\nexport const Form = forwardRef<HTMLFormElement, FormProps>(function Form(rawProps: FormProps, ref) {\n const {\n layout = 'horizontal',\n labelWidth = 'auto',\n labelAlign = 'right',\n disabled = false,\n className,\n style,\n children,\n ...props\n } = useComponentProps('Form', rawProps);\n const widths = useRef(new Map<string, number>());\n const invalidFocusTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(invalidFocusTimer.current), []);\n const [maximum, setMaximum] = useState(0);\n const [errors, setErrors] = useState<readonly FormError[]>([]);\n const registerError = useCallback((id: string, error: FormError | null) => {\n setErrors((previous) =>\n error\n ? [...previous.filter((entry) => entry.fieldId !== id), error]\n : previous.some((entry) => entry.fieldId === id)\n ? previous.filter((entry) => entry.fieldId !== id)\n : previous,\n );\n }, []);\n const measure = useCallback((id: string, width: number | null) => {\n if (width === null) widths.current.delete(id);\n else widths.current.set(id, Math.ceil(width));\n setMaximum(Math.max(0, ...widths.current.values()));\n }, []);\n const context = useMemo(\n () => ({ layout, labelAlign, disabled, measure, errors, registerError }),\n [layout, labelAlign, disabled, measure, errors, registerError],\n );\n const variables: LeafThemeStyle = {\n '--leaf-form-label-width': `${labelWidth === 'auto' ? maximum : Math.max(0, labelWidth)}px`,\n ...style,\n };\n return (\n <FormContext.Provider value={context}>\n <form\n {...props}\n ref={ref}\n className={classes('leaf-form', `leaf-form--${layout}`, className)}\n style={variables}\n onInvalidCapture={(event) => {\n props.onInvalidCapture?.(event);\n if (event.defaultPrevented || invalidFocusTimer.current !== undefined) return;\n const target = event.target as HTMLElement;\n // Native validation can run microtasks between invalid events; wait for the full batch.\n invalidFocusTimer.current = setTimeout(() => {\n invalidFocusTimer.current = undefined;\n if (!target.isConnected) return;\n const control = target\n .closest('.leaf-form-field')\n ?.querySelector<HTMLElement>(\n 'input:not([aria-hidden=\"true\"]), textarea, [role=\"combobox\"], button',\n );\n (control ?? target).focus();\n });\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n});\nForm.displayName = 'Form';\n\nexport function FormField(rawProps: FormFieldProps) {\n const {\n label,\n htmlFor,\n required,\n help,\n error,\n labelWidth,\n children,\n className,\n style,\n ...props\n } = useComponentProps('FormField', rawProps);\n const form = useContext(FormContext);\n const { messages } = useLeafConfig();\n const generated = useId();\n const inputId = htmlFor ?? `${generated}-control`;\n const descriptionId = `${generated}-description`;\n const labelRef = useRef<HTMLSpanElement>(null);\n const [validationError, setValidationError] = useState<string>();\n const displayedError = error ?? validationError;\n useEffect(() => {\n form.registerError(\n inputId,\n displayedError ? { fieldId: inputId, message: displayedError, label } : null,\n );\n return () => form.registerError(inputId, null);\n }, [form.registerError, inputId, displayedError, label]);\n useEffect(() => {\n if (label == null) return;\n const element = labelRef.current;\n if (!element) return;\n const measure = () => form.measure(generated, element.getBoundingClientRect().width);\n measure();\n const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(measure);\n observer?.observe(element);\n return () => {\n observer?.disconnect();\n form.measure(generated, null);\n };\n }, [form.measure, generated, label]);\n const root = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const owner = root.current?.closest('form');\n const reset = (event: Event) => {\n queueMicrotask(() => {\n if (!event.defaultPrevented) setValidationError(undefined);\n });\n };\n owner?.addEventListener('reset', reset);\n return () => owner?.removeEventListener('reset', reset);\n }, []);\n const context: FieldContextValue = {\n id: inputId,\n labelId: label != null ? `${generated}-label` : undefined,\n required,\n disabled: form.disabled,\n error: displayedError,\n descriptionId: displayedError || help ? descriptionId : undefined,\n };\n const variables: LeafThemeStyle = {\n ...(labelWidth !== undefined\n ? { '--leaf-form-label-width': `${Math.max(0, labelWidth)}px` }\n : {}),\n ...style,\n };\n return (\n <FieldContext.Provider value={context}>\n <div\n {...props}\n ref={root}\n className={classes(\n 'leaf-form-field',\n `leaf-form-field--${form.layout}`,\n `leaf-form-field--${form.labelAlign}`,\n className,\n )}\n style={variables}\n onInvalidCapture={(event) => {\n props.onInvalidCapture?.(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n const target = event.target as HTMLInputElement;\n setValidationError(\n target.validity?.valueMissing ? messages.form.required : messages.form.invalid,\n );\n document.getElementById(inputId)?.focus();\n }}\n onInput={(event) => {\n props.onInput?.(event);\n // Capture-phase updates can restore a controlled input before its onChange runs.\n setValidationError(undefined);\n }}\n >\n {label != null && (\n <label id={`${generated}-label`} className=\"leaf-form-field__label\" htmlFor={inputId}>\n <span ref={labelRef}>\n {required && (\n <span className=\"leaf-form-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n {label}\n </span>\n </label>\n )}\n <div className=\"leaf-form-field__body\">\n {children}\n {(displayedError || help) && (\n <div\n id={descriptionId}\n className={classes(\n 'leaf-form-field__description',\n Boolean(displayedError) && 'leaf-form-field__error',\n )}\n role={displayedError ? 'alert' : undefined}\n >\n {displayedError || help}\n </div>\n )}\n </div>\n </div>\n </FieldContext.Provider>\n );\n}\n\nexport interface FormGroupProps extends FieldsetHTMLAttributes<HTMLFieldSetElement> {\n legend?: ReactNode;\n description?: ReactNode;\n}\nexport function FormGroup(rawProps: FormGroupProps) {\n const { legend, description, disabled, children, className, ...props } = useComponentProps(\n 'FormGroup',\n rawProps,\n );\n const inherited = useContext(FormContext);\n const context = useMemo(\n () => ({ ...inherited, disabled: inherited.disabled || Boolean(disabled) }),\n [inherited, disabled],\n );\n return (\n <FormContext.Provider value={context}>\n <fieldset\n {...props}\n disabled={context.disabled}\n className={classes('leaf-form-group', className)}\n >\n {legend && <legend>{legend}</legend>}\n {description && <p className=\"leaf-form-group__description\">{description}</p>}\n {children}\n </fieldset>\n </FormContext.Provider>\n );\n}\nexport interface FormErrorSummaryProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n errors?: readonly FormError[];\n title?: ReactNode;\n}\nexport function FormErrorSummary(rawProps: FormErrorSummaryProps) {\n const {\n errors: suppliedErrors,\n title,\n className,\n ...props\n } = useComponentProps('FormErrorSummary', rawProps);\n const context = useContext(FormContext);\n const { messages } = useLeafConfig();\n const errors = suppliedErrors ?? context.errors;\n if (!errors.length) return null;\n return (\n <div {...props} role=\"alert\" className={classes('leaf-form-error-summary', className)}>\n <strong>{title ?? messages.form.errorSummary}</strong>\n <ul>\n {errors.map((error) => (\n <li key={error.fieldId}>\n <button\n type=\"button\"\n onClick={() => {\n const control = document.getElementById(error.fieldId);\n control?.scrollIntoView?.({ block: 'center', behavior: 'auto' });\n control?.focus();\n }}\n >\n {error.label ? <>{error.label}: </> : null}\n {error.message}\n </button>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n"],"names":["FormContext","createContext","_id","_width","_error","FieldContext","undefined","useFormField","field","useContext","form","FieldScope","children","Form","forwardRef","rawProps","ref","layout","labelWidth","labelAlign","disabled","className","style","props","useComponentProps","widths","useRef","Map","invalidFocusTimer","useEffect","clearTimeout","maximum","setMaximum","useState","errors","setErrors","registerError","useCallback","id","error","previous","entry","measure","width","Math","context","useMemo","variables","classes","event","target","setTimeout","control","FormField","label","htmlFor","required","help","messages","useLeafConfig","generated","useId","inputId","descriptionId","labelRef","validationError","setValidationError","displayedError","element","observer","ResizeObserver","root","owner","reset","queueMicrotask","document","Boolean","FormGroup","legend","description","inherited","FormErrorSummary","suppliedErrors","title"],"mappings":"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"}
1
+ {"version":3,"file":"form/form.js","sources":["../../../src/form/form.tsx"],"sourcesContent":["import {\n createContext,\n type FieldsetHTMLAttributes,\n type FormHTMLAttributes,\n forwardRef,\n type HTMLAttributes,\n type ReactNode,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { useLeafConfig } from '../config-provider/context';\nimport { classes } from '../shared/classes';\nimport type { LeafThemeStyle } from '../theme';\n\nexport interface FormProps extends FormHTMLAttributes<HTMLFormElement> {\n layout?: 'horizontal' | 'vertical' | 'settings';\n labelWidth?: number | 'auto';\n labelAlign?: 'left' | 'right';\n disabled?: boolean;\n}\nexport interface FormFieldProps extends HTMLAttributes<HTMLDivElement> {\n label?: ReactNode;\n description?: ReactNode;\n layout?: FormProps['layout'];\n htmlFor?: string;\n required?: boolean;\n help?: ReactNode;\n error?: ReactNode;\n labelWidth?: number;\n}\nexport interface FormError {\n fieldId: string;\n message: ReactNode;\n label?: ReactNode;\n}\nconst FormContext = createContext({\n layout: 'horizontal' as NonNullable<FormProps['layout']>,\n labelAlign: 'right' as 'left' | 'right',\n disabled: false,\n measure: (_id: string, _width: number | null) => {},\n errors: [] as readonly FormError[],\n registerError: (_id: string, _error: FormError | null) => {},\n});\ninterface FieldContextValue {\n id?: string;\n labelId?: string;\n descriptionId?: string;\n error?: ReactNode;\n required?: boolean;\n disabled?: boolean;\n}\nconst FieldContext = createContext<FieldContextValue | undefined>(undefined);\nexport function useFormField() {\n const field = useContext(FieldContext);\n const form = useContext(FormContext);\n return form.disabled ? { ...field, disabled: true } : field;\n}\n\n/** Internal controls belong to the composite value, not to the outer field. */\nexport function FieldScope({ children }: { children: ReactNode }) {\n return <FieldContext.Provider value={undefined}>{children}</FieldContext.Provider>;\n}\n\nexport const Form = forwardRef<HTMLFormElement, FormProps>(function Form(rawProps: FormProps, ref) {\n const {\n layout = 'horizontal',\n labelWidth = 'auto',\n labelAlign = 'right',\n disabled = false,\n className,\n style,\n children,\n ...props\n } = useComponentProps('Form', rawProps);\n const widths = useRef(new Map<string, number>());\n const invalidFocusTimer = useRef<ReturnType<typeof setTimeout> | undefined>(undefined);\n useEffect(() => () => clearTimeout(invalidFocusTimer.current), []);\n const [maximum, setMaximum] = useState(0);\n const [errors, setErrors] = useState<readonly FormError[]>([]);\n const registerError = useCallback((id: string, error: FormError | null) => {\n setErrors((previous) =>\n error\n ? [...previous.filter((entry) => entry.fieldId !== id), error]\n : previous.some((entry) => entry.fieldId === id)\n ? previous.filter((entry) => entry.fieldId !== id)\n : previous,\n );\n }, []);\n const measure = useCallback((id: string, width: number | null) => {\n if (width === null) widths.current.delete(id);\n else widths.current.set(id, Math.ceil(width));\n setMaximum(Math.max(0, ...widths.current.values()));\n }, []);\n const context = useMemo(\n () => ({ layout, labelAlign, disabled, measure, errors, registerError }),\n [layout, labelAlign, disabled, measure, errors, registerError],\n );\n const variables: LeafThemeStyle = {\n '--leaf-form-label-width': `${labelWidth === 'auto' ? maximum : Math.max(0, labelWidth)}px`,\n ...style,\n };\n return (\n <FormContext.Provider value={context}>\n <form\n {...props}\n ref={ref}\n className={classes('leaf-form', `leaf-form--${layout}`, className)}\n style={variables}\n onInvalidCapture={(event) => {\n props.onInvalidCapture?.(event);\n if (event.defaultPrevented || invalidFocusTimer.current !== undefined) return;\n const target = event.target as HTMLElement;\n // Native validation can run microtasks between invalid events; wait for the full batch.\n invalidFocusTimer.current = setTimeout(() => {\n invalidFocusTimer.current = undefined;\n if (!target.isConnected) return;\n const control = target\n .closest('.leaf-form-field')\n ?.querySelector<HTMLElement>(\n 'input:not([aria-hidden=\"true\"]), textarea, [role=\"combobox\"], button',\n );\n (control ?? target).focus();\n });\n }}\n >\n {children}\n </form>\n </FormContext.Provider>\n );\n});\nForm.displayName = 'Form';\n\nexport function FormField(rawProps: FormFieldProps) {\n const {\n label,\n description,\n layout: suppliedLayout,\n htmlFor,\n required,\n help,\n error,\n labelWidth,\n children,\n className,\n style,\n ...props\n } = useComponentProps('FormField', rawProps);\n const form = useContext(FormContext);\n const layout = suppliedLayout ?? form.layout;\n const { messages } = useLeafConfig();\n const generated = useId();\n const inputId = htmlFor ?? `${generated}-control`;\n const descriptionId = `${generated}-description`;\n const summaryId = `${generated}-summary`;\n const labelRef = useRef<HTMLSpanElement>(null);\n const [validationError, setValidationError] = useState<string>();\n const displayedError = error ?? validationError;\n useEffect(() => {\n form.registerError(\n inputId,\n displayedError ? { fieldId: inputId, message: displayedError, label } : null,\n );\n return () => form.registerError(inputId, null);\n }, [form.registerError, inputId, displayedError, label]);\n useEffect(() => {\n if (label == null || layout !== 'horizontal' || labelWidth !== undefined) return;\n const element = labelRef.current;\n if (!element) return;\n const measure = () => form.measure(generated, element.getBoundingClientRect().width);\n measure();\n const observer = typeof ResizeObserver === 'undefined' ? null : new ResizeObserver(measure);\n observer?.observe(element);\n return () => {\n observer?.disconnect();\n form.measure(generated, null);\n };\n }, [form.measure, generated, label, layout, labelWidth]);\n const root = useRef<HTMLDivElement>(null);\n useEffect(() => {\n const owner = root.current?.closest('form');\n const reset = (event: Event) => {\n queueMicrotask(() => {\n if (!event.defaultPrevented) setValidationError(undefined);\n });\n };\n owner?.addEventListener('reset', reset);\n return () => owner?.removeEventListener('reset', reset);\n }, []);\n const context: FieldContextValue = {\n id: inputId,\n labelId: label != null ? `${generated}-label` : undefined,\n required,\n disabled: form.disabled,\n error: displayedError,\n descriptionId:\n [description != null && summaryId, (displayedError || help) && descriptionId]\n .filter(Boolean)\n .join(' ') || undefined,\n };\n const variables: LeafThemeStyle = {\n ...(labelWidth !== undefined\n ? { '--leaf-form-label-width': `${Math.max(0, labelWidth)}px` }\n : {}),\n ...style,\n };\n return (\n <FieldContext.Provider value={context}>\n <div\n {...props}\n ref={root}\n className={classes(\n 'leaf-form-field',\n `leaf-form-field--${layout}`,\n form.layout === 'settings' && 'leaf-form-field--settings-row',\n `leaf-form-field--${form.labelAlign}`,\n className,\n )}\n style={variables}\n onInvalidCapture={(event) => {\n props.onInvalidCapture?.(event);\n if (event.defaultPrevented) return;\n event.preventDefault();\n const target = event.target as HTMLInputElement;\n setValidationError(\n target.validity?.valueMissing ? messages.form.required : messages.form.invalid,\n );\n document.getElementById(inputId)?.focus();\n }}\n onInput={(event) => {\n props.onInput?.(event);\n // Capture-phase updates can restore a controlled input before its onChange runs.\n setValidationError(undefined);\n }}\n >\n {(label != null || description != null) && (\n <div className=\"leaf-form-field__header\">\n {label != null && (\n <label id={`${generated}-label`} className=\"leaf-form-field__label\" htmlFor={inputId}>\n <span ref={labelRef}>\n {required && (\n <span className=\"leaf-form-field__required\" aria-hidden=\"true\">\n *\n </span>\n )}\n {label}\n </span>\n </label>\n )}\n {description != null && (\n <div id={summaryId} className=\"leaf-form-field__summary-description\">\n {description}\n </div>\n )}\n </div>\n )}\n <div className=\"leaf-form-field__body\">\n {children}\n {(displayedError || help) && (\n <div\n id={descriptionId}\n className={classes(\n 'leaf-form-field__description',\n Boolean(displayedError) && 'leaf-form-field__error',\n )}\n role={displayedError ? 'alert' : undefined}\n >\n {displayedError || help}\n </div>\n )}\n </div>\n </div>\n </FieldContext.Provider>\n );\n}\n\nexport interface FormGroupProps extends FieldsetHTMLAttributes<HTMLFieldSetElement> {\n legend?: ReactNode;\n description?: ReactNode;\n}\nexport function FormGroup(rawProps: FormGroupProps) {\n const { legend, description, disabled, children, className, ...props } = useComponentProps(\n 'FormGroup',\n rawProps,\n );\n const inherited = useContext(FormContext);\n const context = useMemo(\n () => ({ ...inherited, disabled: inherited.disabled || Boolean(disabled) }),\n [inherited, disabled],\n );\n return (\n <FormContext.Provider value={context}>\n <fieldset\n {...props}\n disabled={context.disabled}\n className={classes(\n 'leaf-form-group',\n inherited.layout === 'settings' && 'leaf-form-group--settings',\n className,\n )}\n >\n {legend && <legend>{legend}</legend>}\n {description && <p className=\"leaf-form-group__description\">{description}</p>}\n {children}\n </fieldset>\n </FormContext.Provider>\n );\n}\nexport interface FormErrorSummaryProps extends Omit<HTMLAttributes<HTMLDivElement>, 'title'> {\n errors?: readonly FormError[];\n title?: ReactNode;\n}\nexport function FormErrorSummary(rawProps: FormErrorSummaryProps) {\n const {\n errors: suppliedErrors,\n title,\n className,\n ...props\n } = useComponentProps('FormErrorSummary', rawProps);\n const context = useContext(FormContext);\n const { messages } = useLeafConfig();\n const errors = suppliedErrors ?? context.errors;\n if (!errors.length) return null;\n return (\n <div {...props} role=\"alert\" className={classes('leaf-form-error-summary', className)}>\n <strong>{title ?? messages.form.errorSummary}</strong>\n <ul>\n {errors.map((error) => (\n <li key={error.fieldId}>\n <button\n type=\"button\"\n onClick={() => {\n const control = document.getElementById(error.fieldId);\n control?.scrollIntoView?.({ block: 'center', behavior: 'auto' });\n control?.focus();\n }}\n >\n {error.label ? <>{error.label}: </> : null}\n {error.message}\n </button>\n </li>\n ))}\n </ul>\n </div>\n );\n}\n"],"names":["FormContext","createContext","_id","_width","_error","FieldContext","undefined","useFormField","field","useContext","form","FieldScope","children","Form","forwardRef","rawProps","ref","layout","labelWidth","labelAlign","disabled","className","style","props","useComponentProps","widths","useRef","Map","invalidFocusTimer","useEffect","clearTimeout","maximum","setMaximum","useState","errors","setErrors","registerError","useCallback","id","error","previous","entry","measure","width","Math","context","useMemo","variables","classes","event","target","setTimeout","control","FormField","label","description","suppliedLayout","htmlFor","required","help","messages","useLeafConfig","generated","useId","inputId","descriptionId","summaryId","labelRef","validationError","setValidationError","displayedError","element","observer","ResizeObserver","root","owner","reset","queueMicrotask","Boolean","document","FormGroup","legend","inherited","FormErrorSummary","suppliedErrors","title"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../../../src/image/viewer.tsx"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEnE,wBAAgB,WAAW,CAAC,KAAK,EAAE,iBAAiB,+BAMnD"}
1
+ {"version":3,"file":"viewer.d.ts","sourceRoot":"","sources":["../../../src/image/viewer.tsx"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAoB,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAEnE,wBAAgB,WAAW,CAAC,KAAK,EAAE,iBAAiB,+BAMnD"}
@@ -6,6 +6,7 @@ import yet_another_react_lightbox, { useController, useLightboxState, useNavigat
6
6
  import plugins_fullscreen from "yet-another-react-lightbox/plugins/fullscreen";
7
7
  import plugins_zoom from "yet-another-react-lightbox/plugins/zoom";
8
8
  import { LoadingControl } from "../loading/loading.js";
9
+ import { ScrollbarControl } from "../scrollbar/scrollbar.js";
9
10
  import { motionDuration, useMotionEnabled } from "../shared/motion.js";
10
11
  import { ScopedPortal } from "../shared/scoped-portal.js";
11
12
  import { useFormattedText } from "../shared/use-formatted-text.js";
@@ -255,9 +256,14 @@ function ViewerChrome({ items, thumbnails, downloadable, zoomControl, fullscreen
255
256
  size: 18
256
257
  })
257
258
  }),
258
- /*#__PURE__*/ jsx("fieldset", {
259
- className: "leaf-image-viewer__thumbnails",
259
+ /*#__PURE__*/ jsx(ScrollbarControl, {
260
+ className: "leaf-image-viewer__strip",
261
+ contentClassName: "leaf-image-viewer__thumbnails",
260
262
  ref: strip,
263
+ orientation: "horizontal",
264
+ role: "group",
265
+ tabIndex: -1,
266
+ scrollbarTabIndex: -1,
261
267
  "aria-label": t('image.imageList'),
262
268
  children: items.map((image, target)=>/*#__PURE__*/ jsxs("button", {
263
269
  type: "button",
@@ -1 +1 @@
1
- {"version":3,"file":"image/viewer.js","sources":["../../../src/image/viewer.tsx"],"sourcesContent":["import {\n ChevronLeft,\n ChevronRight,\n Download,\n ImageOff,\n Maximize2,\n Minimize2,\n PanelBottom,\n RotateCcw,\n X,\n ZoomIn,\n ZoomOut,\n} from 'lucide-react';\nimport { type ReactNode, useEffect, useRef, useState } from 'react';\nimport Lightbox, {\n type FullscreenRef,\n useController,\n useLightboxState,\n useNavigationState,\n type ZoomRef,\n} from 'yet-another-react-lightbox';\nimport Fullscreen from 'yet-another-react-lightbox/plugins/fullscreen';\nimport Zoom from 'yet-another-react-lightbox/plugins/zoom';\nimport { LoadingControl as Loading } from '../loading/loading';\nimport { motionDuration, useMotionEnabled } from '../shared/motion';\nimport { ScopedPortal } from '../shared/scoped-portal';\nimport { useFormattedText } from '../shared/use-formatted-text';\nimport { useText } from '../shared/use-text';\nimport type { ImagePreviewItem, ImagePreviewProps } from './image';\n\nexport function ImageViewer(props: ImagePreviewProps) {\n return (\n <ScopedPortal>\n <Viewer {...props} />\n </ScopedPortal>\n );\n}\nfunction Control({\n label,\n children,\n active,\n disabled,\n onClick,\n className = '',\n}: {\n label: string;\n children: ReactNode;\n active?: boolean;\n disabled?: boolean;\n onClick: () => void;\n className?: string;\n}) {\n return (\n <button\n type=\"button\"\n className={`leaf-image-viewer__control ${className}`}\n aria-label={label}\n title={label}\n aria-pressed={active}\n disabled={disabled}\n onClick={onClick}\n >\n {children}\n </button>\n );\n}\nfunction ViewerChrome({\n items,\n thumbnails,\n downloadable,\n zoomControl,\n fullscreenControl,\n}: {\n items: readonly ImagePreviewItem[];\n thumbnails: boolean;\n downloadable: boolean;\n zoomControl: ZoomRef | null;\n fullscreenControl: FullscreenRef | null;\n}) {\n const t = useText();\n const format = useFormattedText();\n const motion = useMotionEnabled();\n const { currentIndex } = useLightboxState();\n const { prev, next, close } = useController();\n const { prevDisabled, nextDisabled } = useNavigationState();\n const strip = useRef<HTMLFieldSetElement>(null);\n const [showThumbs, setShowThumbs] = useState(thumbnails);\n const [failedDownload, setFailedDownload] = useState(false);\n const [downloading, setDownloading] = useState(false);\n const item = items[currentIndex];\n const hasThumbs = thumbnails && items.length > 1;\n const zoom = zoomControl?.zoom ?? 1;\n const fullscreen = fullscreenControl?.fullscreen ?? false;\n const downloadUrl = typeof item?.download === 'string' ? item.download : item?.src;\n useEffect(() => setShowThumbs(thumbnails), [thumbnails]);\n useEffect(() => {\n setFailedDownload(false);\n if (!showThumbs) return;\n const root = strip.current;\n const selected = root?.querySelector<HTMLElement>(`[data-index=\"${currentIndex}\"]`);\n if (root && selected)\n root.scrollTo({\n left: selected.offsetLeft - root.offsetLeft - (root.clientWidth - selected.clientWidth) / 2,\n behavior: motion ? 'smooth' : 'auto',\n });\n }, [currentIndex, showThumbs, motion]);\n const choose = (target: number) => {\n const difference = target - currentIndex;\n if (difference > 0) next({ count: difference });\n else if (difference < 0) prev({ count: -difference });\n };\n const download = async () => {\n if (!item || downloading) return;\n setDownloading(true);\n setFailedDownload(false);\n try {\n const address = typeof item.download === 'string' ? item.download : item.src;\n const response = await fetch(address);\n if (!response.ok) throw new Error('Download failed');\n const url = URL.createObjectURL(await response.blob());\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = item.downloadName || address.split(/[?#]/)[0]?.split('/').pop() || 'image';\n anchor.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n } catch {\n setFailedDownload(true);\n } finally {\n setDownloading(false);\n }\n };\n return (\n <div\n className=\"leaf-image-viewer__chrome\"\n data-thumbnails={(hasThumbs && showThumbs) || undefined}\n >\n <header className=\"leaf-image-viewer__header\">\n <div className=\"leaf-image-viewer__title\">\n <span>{item?.alt || t('image.imagePreview')}</span>\n <span className=\"leaf-image-viewer__count\" aria-live=\"polite\">\n {currentIndex + 1} / {items.length}\n </span>\n </div>\n <div className=\"leaf-image-viewer__header-actions\">\n {downloadable && item?.download !== false && (\n <Control\n label={t('image.downloadImage')}\n onClick={() => void download()}\n disabled={downloading}\n >\n {downloading ? <Loading size=\"sm\" /> : <Download size={19} />}\n </Control>\n )}\n <Control\n label={fullscreen ? t('image.exitFullscreen') : t('image.enterFullscreen')}\n disabled={!fullscreenControl || fullscreenControl.disabled}\n onClick={() => (fullscreen ? fullscreenControl?.exit() : fullscreenControl?.enter())}\n >\n {fullscreen ? <Minimize2 size={19} /> : <Maximize2 size={19} />}\n </Control>\n <Control label={t('image.closePreview')} onClick={close}>\n <X size={22} />\n </Control>\n </div>\n </header>\n {items.length > 1 && (\n <>\n <Control\n className=\"leaf-image-viewer__previous\"\n label={t('image.previousImage')}\n disabled={prevDisabled}\n onClick={() => prev()}\n >\n <ChevronLeft size={26} />\n </Control>\n <Control\n className=\"leaf-image-viewer__next\"\n label={t('image.nextImage')}\n disabled={nextDisabled}\n onClick={() => next()}\n >\n <ChevronRight size={26} />\n </Control>\n </>\n )}\n <footer className=\"leaf-image-viewer__footer\">\n {failedDownload && (\n <p role=\"alert\" className=\"leaf-image-viewer__error\">\n {t('image.downloadFailedOpenTheOriginalImageToSaveIt')}{' '}\n <a href={downloadUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {t('image.openOriginal')}\n </a>\n </p>\n )}\n <div className=\"leaf-image-viewer__tools\">\n <Control\n label={t('image.zoomOut')}\n disabled={!zoomControl || zoomControl.disabled || zoom <= 1}\n onClick={() => zoomControl?.zoomOut()}\n >\n <ZoomOut size={18} />\n </Control>\n <button\n type=\"button\"\n className=\"leaf-image-viewer__zoom-level\"\n onClick={() => zoomControl?.changeZoom(1)}\n title={t('image.resetZoom')}\n >\n {Math.round(zoom * 100)}%\n </button>\n <Control\n label={t('image.zoomIn')}\n disabled={!zoomControl || zoomControl.disabled || zoom >= zoomControl.maxZoom}\n onClick={() => zoomControl?.zoomIn()}\n >\n <ZoomIn size={18} />\n </Control>\n <Control\n label={t('image.resetZoom')}\n disabled={zoom <= 1}\n onClick={() => zoomControl?.changeZoom(1)}\n >\n <RotateCcw size={17} />\n </Control>\n {hasThumbs && (\n <>\n <span className=\"leaf-image-viewer__tool-separator\" />\n <Control\n label={t('image.showThumbnails')}\n active={showThumbs}\n onClick={() => setShowThumbs((value) => !value)}\n >\n <PanelBottom size={18} />\n </Control>\n </>\n )}\n </div>\n {hasThumbs && showThumbs && (\n <div className=\"leaf-image-viewer__gallery\">\n <Control\n label={t('image.scrollThumbnailsBackward')}\n onClick={() =>\n strip.current?.scrollBy({\n left: -(strip.current.clientWidth * 0.7),\n behavior: motion ? 'smooth' : 'auto',\n })\n }\n >\n <ChevronLeft size={18} />\n </Control>\n <fieldset\n className=\"leaf-image-viewer__thumbnails\"\n ref={strip}\n aria-label={t('image.imageList')}\n >\n {items.map((image, target) => (\n <button\n type=\"button\"\n // biome-ignore lint/suspicious/noArrayIndexKey: Stateless thumbnails may intentionally repeat the same source URL.\n key={`${image.src}-${target}`}\n className=\"leaf-image-viewer__thumbnail\"\n data-index={target}\n aria-current={currentIndex === target || undefined}\n aria-label={format('image.viewImage', {\n index: target + 1,\n alt: image.alt ? `: ${image.alt}` : '',\n })}\n title={image.alt || String(target + 1)}\n tabIndex={currentIndex === target ? 0 : -1}\n onClick={() => choose(target)}\n onKeyDown={(event) => {\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n event.preventDefault();\n event.stopPropagation();\n const position =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : Math.max(\n 0,\n Math.min(\n items.length - 1,\n target + (event.key === 'ArrowRight' ? 1 : -1),\n ),\n );\n choose(position);\n strip.current\n ?.querySelector<HTMLButtonElement>(`[data-index=\"${position}\"]`)\n ?.focus();\n }}\n >\n <img\n src={image.thumbnailSrc ?? image.src}\n alt=\"\"\n loading=\"lazy\"\n draggable={false}\n />\n <span>{target + 1}</span>\n </button>\n ))}\n </fieldset>\n <Control\n label={t('image.scrollThumbnailsForward')}\n onClick={() =>\n strip.current?.scrollBy({\n left: strip.current.clientWidth * 0.7,\n behavior: motion ? 'smooth' : 'auto',\n })\n }\n >\n <ChevronRight size={18} />\n </Control>\n </div>\n )}\n </footer>\n </div>\n );\n}\nfunction Viewer({\n items,\n open,\n index = 0,\n onClose,\n onIndexChange,\n thumbnails = true,\n downloadable = false,\n}: ImagePreviewProps) {\n const [root, setRoot] = useState<HTMLDivElement | null>(null);\n const [zoomControl, setZoomControl] = useState<ZoomRef | null>(null);\n const [fullscreenControl, setFullscreenControl] = useState<FullscreenRef | null>(null);\n const [slides, setSlides] = useState(() => items.map((item) => ({ ...item })));\n // A new array with the same images must not reset the carousel's navigation animation.\n if (\n items.length !== slides.length ||\n items.some((item, position) => {\n const slide = slides[position];\n return (\n !slide ||\n item.src !== slide.src ||\n item.alt !== slide.alt ||\n item.width !== slide.width ||\n item.height !== slide.height ||\n item.thumbnailSrc !== slide.thumbnailSrc ||\n item.download !== slide.download ||\n item.downloadName !== slide.downloadName\n );\n })\n ) {\n setSlides(items.map((item) => ({ ...item })));\n }\n const t = useText();\n const format = useFormattedText();\n const motion = useMotionEnabled();\n const duration = root && motion ? motionDuration(root) : 0;\n return (\n <div ref={setRoot} className=\"leaf-image-viewer\">\n {root && (\n <Lightbox\n open={open && items.length > 0}\n close={onClose}\n slides={slides}\n index={Math.max(0, Math.min(index, items.length - 1))}\n portal={{ root }}\n plugins={[Zoom, Fullscreen]}\n className=\"leaf-image-viewer__lightbox\"\n carousel={{ finite: true, padding: 0, spacing: 24 }}\n animation={{\n fade: duration * 1.2,\n swipe: duration * 1.6,\n navigation: duration * 1.6,\n zoom: duration,\n }}\n zoom={{ ref: setZoomControl, maxZoomPixelRatio: 3, scrollToZoom: true }}\n fullscreen={{ ref: setFullscreenControl }}\n controller={{ closeOnBackdropClick: true }}\n toolbar={{ buttons: [] }}\n render={{\n buttonClose: () => null,\n buttonPrev: () => null,\n buttonNext: () => null,\n buttonZoom: () => null,\n buttonFullscreen: () => null,\n iconLoading: () => <Loading />,\n iconError: () => <ImageOff size={32} />,\n controls: () => (\n <ViewerChrome\n items={items}\n thumbnails={thumbnails}\n downloadable={downloadable}\n zoomControl={zoomControl}\n fullscreenControl={fullscreenControl}\n />\n ),\n }}\n labels={{\n Lightbox: t('image.imagePreview'),\n 'Photo gallery': t('image.imageList'),\n Slide: t('image.image'),\n '{index} of {total}': format('image.position', {\n index: index + 1,\n total: items.length,\n }),\n Close: t('image.closePreview'),\n }}\n on={{\n view: ({ index: next }) => {\n if (next !== index) onIndexChange?.(next);\n },\n }}\n styles={{\n root: {\n '--yarl__color_backdrop': 'rgba(0,0,0,.92)',\n zIndex: 'var(--leaf-z-index-modal)',\n },\n }}\n />\n )}\n </div>\n );\n}\n"],"names":["ImageViewer","props","ScopedPortal","Viewer","Control","label","children","active","disabled","onClick","className","ViewerChrome","items","thumbnails","downloadable","zoomControl","fullscreenControl","t","useText","format","useFormattedText","motion","useMotionEnabled","currentIndex","useLightboxState","prev","next","close","useController","prevDisabled","nextDisabled","useNavigationState","strip","useRef","showThumbs","setShowThumbs","useState","failedDownload","setFailedDownload","downloading","setDownloading","item","hasThumbs","zoom","fullscreen","downloadUrl","useEffect","root","selected","choose","target","difference","download","address","response","fetch","Error","url","URL","anchor","document","setTimeout","undefined","Loading","Download","Minimize2","Maximize2","X","ChevronLeft","ChevronRight","ZoomOut","Math","ZoomIn","RotateCcw","value","PanelBottom","image","String","event","position","open","index","onClose","onIndexChange","setRoot","setZoomControl","setFullscreenControl","slides","setSlides","slide","duration","motionDuration","Lightbox","Zoom","Fullscreen","ImageOff"],"mappings":"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"}
1
+ {"version":3,"file":"image/viewer.js","sources":["../../../src/image/viewer.tsx"],"sourcesContent":["import {\n ChevronLeft,\n ChevronRight,\n Download,\n ImageOff,\n Maximize2,\n Minimize2,\n PanelBottom,\n RotateCcw,\n X,\n ZoomIn,\n ZoomOut,\n} from 'lucide-react';\nimport { type ReactNode, useEffect, useRef, useState } from 'react';\nimport Lightbox, {\n type FullscreenRef,\n useController,\n useLightboxState,\n useNavigationState,\n type ZoomRef,\n} from 'yet-another-react-lightbox';\nimport Fullscreen from 'yet-another-react-lightbox/plugins/fullscreen';\nimport Zoom from 'yet-another-react-lightbox/plugins/zoom';\nimport { LoadingControl as Loading } from '../loading/loading';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { motionDuration, useMotionEnabled } from '../shared/motion';\nimport { ScopedPortal } from '../shared/scoped-portal';\nimport { useFormattedText } from '../shared/use-formatted-text';\nimport { useText } from '../shared/use-text';\nimport type { ImagePreviewItem, ImagePreviewProps } from './image';\n\nexport function ImageViewer(props: ImagePreviewProps) {\n return (\n <ScopedPortal>\n <Viewer {...props} />\n </ScopedPortal>\n );\n}\nfunction Control({\n label,\n children,\n active,\n disabled,\n onClick,\n className = '',\n}: {\n label: string;\n children: ReactNode;\n active?: boolean;\n disabled?: boolean;\n onClick: () => void;\n className?: string;\n}) {\n return (\n <button\n type=\"button\"\n className={`leaf-image-viewer__control ${className}`}\n aria-label={label}\n title={label}\n aria-pressed={active}\n disabled={disabled}\n onClick={onClick}\n >\n {children}\n </button>\n );\n}\nfunction ViewerChrome({\n items,\n thumbnails,\n downloadable,\n zoomControl,\n fullscreenControl,\n}: {\n items: readonly ImagePreviewItem[];\n thumbnails: boolean;\n downloadable: boolean;\n zoomControl: ZoomRef | null;\n fullscreenControl: FullscreenRef | null;\n}) {\n const t = useText();\n const format = useFormattedText();\n const motion = useMotionEnabled();\n const { currentIndex } = useLightboxState();\n const { prev, next, close } = useController();\n const { prevDisabled, nextDisabled } = useNavigationState();\n const strip = useRef<HTMLDivElement>(null);\n const [showThumbs, setShowThumbs] = useState(thumbnails);\n const [failedDownload, setFailedDownload] = useState(false);\n const [downloading, setDownloading] = useState(false);\n const item = items[currentIndex];\n const hasThumbs = thumbnails && items.length > 1;\n const zoom = zoomControl?.zoom ?? 1;\n const fullscreen = fullscreenControl?.fullscreen ?? false;\n const downloadUrl = typeof item?.download === 'string' ? item.download : item?.src;\n useEffect(() => setShowThumbs(thumbnails), [thumbnails]);\n useEffect(() => {\n setFailedDownload(false);\n if (!showThumbs) return;\n const root = strip.current;\n const selected = root?.querySelector<HTMLElement>(`[data-index=\"${currentIndex}\"]`);\n if (root && selected)\n root.scrollTo({\n left: selected.offsetLeft - root.offsetLeft - (root.clientWidth - selected.clientWidth) / 2,\n behavior: motion ? 'smooth' : 'auto',\n });\n }, [currentIndex, showThumbs, motion]);\n const choose = (target: number) => {\n const difference = target - currentIndex;\n if (difference > 0) next({ count: difference });\n else if (difference < 0) prev({ count: -difference });\n };\n const download = async () => {\n if (!item || downloading) return;\n setDownloading(true);\n setFailedDownload(false);\n try {\n const address = typeof item.download === 'string' ? item.download : item.src;\n const response = await fetch(address);\n if (!response.ok) throw new Error('Download failed');\n const url = URL.createObjectURL(await response.blob());\n const anchor = document.createElement('a');\n anchor.href = url;\n anchor.download = item.downloadName || address.split(/[?#]/)[0]?.split('/').pop() || 'image';\n anchor.click();\n setTimeout(() => URL.revokeObjectURL(url), 1000);\n } catch {\n setFailedDownload(true);\n } finally {\n setDownloading(false);\n }\n };\n return (\n <div\n className=\"leaf-image-viewer__chrome\"\n data-thumbnails={(hasThumbs && showThumbs) || undefined}\n >\n <header className=\"leaf-image-viewer__header\">\n <div className=\"leaf-image-viewer__title\">\n <span>{item?.alt || t('image.imagePreview')}</span>\n <span className=\"leaf-image-viewer__count\" aria-live=\"polite\">\n {currentIndex + 1} / {items.length}\n </span>\n </div>\n <div className=\"leaf-image-viewer__header-actions\">\n {downloadable && item?.download !== false && (\n <Control\n label={t('image.downloadImage')}\n onClick={() => void download()}\n disabled={downloading}\n >\n {downloading ? <Loading size=\"sm\" /> : <Download size={19} />}\n </Control>\n )}\n <Control\n label={fullscreen ? t('image.exitFullscreen') : t('image.enterFullscreen')}\n disabled={!fullscreenControl || fullscreenControl.disabled}\n onClick={() => (fullscreen ? fullscreenControl?.exit() : fullscreenControl?.enter())}\n >\n {fullscreen ? <Minimize2 size={19} /> : <Maximize2 size={19} />}\n </Control>\n <Control label={t('image.closePreview')} onClick={close}>\n <X size={22} />\n </Control>\n </div>\n </header>\n {items.length > 1 && (\n <>\n <Control\n className=\"leaf-image-viewer__previous\"\n label={t('image.previousImage')}\n disabled={prevDisabled}\n onClick={() => prev()}\n >\n <ChevronLeft size={26} />\n </Control>\n <Control\n className=\"leaf-image-viewer__next\"\n label={t('image.nextImage')}\n disabled={nextDisabled}\n onClick={() => next()}\n >\n <ChevronRight size={26} />\n </Control>\n </>\n )}\n <footer className=\"leaf-image-viewer__footer\">\n {failedDownload && (\n <p role=\"alert\" className=\"leaf-image-viewer__error\">\n {t('image.downloadFailedOpenTheOriginalImageToSaveIt')}{' '}\n <a href={downloadUrl} target=\"_blank\" rel=\"noopener noreferrer\">\n {t('image.openOriginal')}\n </a>\n </p>\n )}\n <div className=\"leaf-image-viewer__tools\">\n <Control\n label={t('image.zoomOut')}\n disabled={!zoomControl || zoomControl.disabled || zoom <= 1}\n onClick={() => zoomControl?.zoomOut()}\n >\n <ZoomOut size={18} />\n </Control>\n <button\n type=\"button\"\n className=\"leaf-image-viewer__zoom-level\"\n onClick={() => zoomControl?.changeZoom(1)}\n title={t('image.resetZoom')}\n >\n {Math.round(zoom * 100)}%\n </button>\n <Control\n label={t('image.zoomIn')}\n disabled={!zoomControl || zoomControl.disabled || zoom >= zoomControl.maxZoom}\n onClick={() => zoomControl?.zoomIn()}\n >\n <ZoomIn size={18} />\n </Control>\n <Control\n label={t('image.resetZoom')}\n disabled={zoom <= 1}\n onClick={() => zoomControl?.changeZoom(1)}\n >\n <RotateCcw size={17} />\n </Control>\n {hasThumbs && (\n <>\n <span className=\"leaf-image-viewer__tool-separator\" />\n <Control\n label={t('image.showThumbnails')}\n active={showThumbs}\n onClick={() => setShowThumbs((value) => !value)}\n >\n <PanelBottom size={18} />\n </Control>\n </>\n )}\n </div>\n {hasThumbs && showThumbs && (\n <div className=\"leaf-image-viewer__gallery\">\n <Control\n label={t('image.scrollThumbnailsBackward')}\n onClick={() =>\n strip.current?.scrollBy({\n left: -(strip.current.clientWidth * 0.7),\n behavior: motion ? 'smooth' : 'auto',\n })\n }\n >\n <ChevronLeft size={18} />\n </Control>\n <ScrollbarControl\n className=\"leaf-image-viewer__strip\"\n contentClassName=\"leaf-image-viewer__thumbnails\"\n ref={strip}\n orientation=\"horizontal\"\n role=\"group\"\n tabIndex={-1}\n scrollbarTabIndex={-1}\n aria-label={t('image.imageList')}\n >\n {items.map((image, target) => (\n <button\n type=\"button\"\n // biome-ignore lint/suspicious/noArrayIndexKey: Stateless thumbnails may intentionally repeat the same source URL.\n key={`${image.src}-${target}`}\n className=\"leaf-image-viewer__thumbnail\"\n data-index={target}\n aria-current={currentIndex === target || undefined}\n aria-label={format('image.viewImage', {\n index: target + 1,\n alt: image.alt ? `: ${image.alt}` : '',\n })}\n title={image.alt || String(target + 1)}\n tabIndex={currentIndex === target ? 0 : -1}\n onClick={() => choose(target)}\n onKeyDown={(event) => {\n if (!['ArrowLeft', 'ArrowRight', 'Home', 'End'].includes(event.key)) return;\n event.preventDefault();\n event.stopPropagation();\n const position =\n event.key === 'Home'\n ? 0\n : event.key === 'End'\n ? items.length - 1\n : Math.max(\n 0,\n Math.min(\n items.length - 1,\n target + (event.key === 'ArrowRight' ? 1 : -1),\n ),\n );\n choose(position);\n strip.current\n ?.querySelector<HTMLButtonElement>(`[data-index=\"${position}\"]`)\n ?.focus();\n }}\n >\n <img\n src={image.thumbnailSrc ?? image.src}\n alt=\"\"\n loading=\"lazy\"\n draggable={false}\n />\n <span>{target + 1}</span>\n </button>\n ))}\n </ScrollbarControl>\n <Control\n label={t('image.scrollThumbnailsForward')}\n onClick={() =>\n strip.current?.scrollBy({\n left: strip.current.clientWidth * 0.7,\n behavior: motion ? 'smooth' : 'auto',\n })\n }\n >\n <ChevronRight size={18} />\n </Control>\n </div>\n )}\n </footer>\n </div>\n );\n}\nfunction Viewer({\n items,\n open,\n index = 0,\n onClose,\n onIndexChange,\n thumbnails = true,\n downloadable = false,\n}: ImagePreviewProps) {\n const [root, setRoot] = useState<HTMLDivElement | null>(null);\n const [zoomControl, setZoomControl] = useState<ZoomRef | null>(null);\n const [fullscreenControl, setFullscreenControl] = useState<FullscreenRef | null>(null);\n const [slides, setSlides] = useState(() => items.map((item) => ({ ...item })));\n // A new array with the same images must not reset the carousel's navigation animation.\n if (\n items.length !== slides.length ||\n items.some((item, position) => {\n const slide = slides[position];\n return (\n !slide ||\n item.src !== slide.src ||\n item.alt !== slide.alt ||\n item.width !== slide.width ||\n item.height !== slide.height ||\n item.thumbnailSrc !== slide.thumbnailSrc ||\n item.download !== slide.download ||\n item.downloadName !== slide.downloadName\n );\n })\n ) {\n setSlides(items.map((item) => ({ ...item })));\n }\n const t = useText();\n const format = useFormattedText();\n const motion = useMotionEnabled();\n const duration = root && motion ? motionDuration(root) : 0;\n return (\n <div ref={setRoot} className=\"leaf-image-viewer\">\n {root && (\n <Lightbox\n open={open && items.length > 0}\n close={onClose}\n slides={slides}\n index={Math.max(0, Math.min(index, items.length - 1))}\n portal={{ root }}\n plugins={[Zoom, Fullscreen]}\n className=\"leaf-image-viewer__lightbox\"\n carousel={{ finite: true, padding: 0, spacing: 24 }}\n animation={{\n fade: duration * 1.2,\n swipe: duration * 1.6,\n navigation: duration * 1.6,\n zoom: duration,\n }}\n zoom={{ ref: setZoomControl, maxZoomPixelRatio: 3, scrollToZoom: true }}\n fullscreen={{ ref: setFullscreenControl }}\n controller={{ closeOnBackdropClick: true }}\n toolbar={{ buttons: [] }}\n render={{\n buttonClose: () => null,\n buttonPrev: () => null,\n buttonNext: () => null,\n buttonZoom: () => null,\n buttonFullscreen: () => null,\n iconLoading: () => <Loading />,\n iconError: () => <ImageOff size={32} />,\n controls: () => (\n <ViewerChrome\n items={items}\n thumbnails={thumbnails}\n downloadable={downloadable}\n zoomControl={zoomControl}\n fullscreenControl={fullscreenControl}\n />\n ),\n }}\n labels={{\n Lightbox: t('image.imagePreview'),\n 'Photo gallery': t('image.imageList'),\n Slide: t('image.image'),\n '{index} of {total}': format('image.position', {\n index: index + 1,\n total: items.length,\n }),\n Close: t('image.closePreview'),\n }}\n on={{\n view: ({ index: next }) => {\n if (next !== index) onIndexChange?.(next);\n },\n }}\n styles={{\n root: {\n '--yarl__color_backdrop': 'rgba(0,0,0,.92)',\n zIndex: 'var(--leaf-z-index-modal)',\n },\n }}\n />\n )}\n </div>\n );\n}\n"],"names":["ImageViewer","props","ScopedPortal","Viewer","Control","label","children","active","disabled","onClick","className","ViewerChrome","items","thumbnails","downloadable","zoomControl","fullscreenControl","t","useText","format","useFormattedText","motion","useMotionEnabled","currentIndex","useLightboxState","prev","next","close","useController","prevDisabled","nextDisabled","useNavigationState","strip","useRef","showThumbs","setShowThumbs","useState","failedDownload","setFailedDownload","downloading","setDownloading","item","hasThumbs","zoom","fullscreen","downloadUrl","useEffect","root","selected","choose","target","difference","download","address","response","fetch","Error","url","URL","anchor","document","setTimeout","undefined","Loading","Download","Minimize2","Maximize2","X","ChevronLeft","ChevronRight","ZoomOut","Math","ZoomIn","RotateCcw","value","PanelBottom","ScrollbarControl","image","String","event","position","open","index","onClose","onIndexChange","setRoot","setZoomControl","setFullscreenControl","slides","setSlides","slide","duration","motionDuration","Lightbox","Zoom","Fullscreen","ImageOff"],"mappings":";;;;;;;;;;;;;AA+BO,SAASA,YAAYC,KAAwB;IAClD,OAAO,WAAP,GACE,IAACC,cAAYA;kBACX,kBAACC,QAAMA;YAAE,GAAGF,KAAK;;;AAGvB;AACA,SAASG,QAAQ,EACfC,KAAK,EACLC,QAAQ,EACRC,MAAM,EACNC,QAAQ,EACRC,OAAO,EACPC,YAAY,EAAE,EAQf;IACC,OAAO,WAAP,GACE,IAAC;QACC,MAAK;QACL,WAAW,CAAC,2BAA2B,EAAEA,WAAW;QACpD,cAAYL;QACZ,OAAOA;QACP,gBAAcE;QACd,UAAUC;QACV,SAASC;kBAERH;;AAGP;AACA,SAASK,aAAa,EACpBC,KAAK,EACLC,UAAU,EACVC,YAAY,EACZC,WAAW,EACXC,iBAAiB,EAOlB;IACC,MAAMC,IAAIC;IACV,MAAMC,SAASC;IACf,MAAMC,SAASC;IACf,MAAM,EAAEC,YAAY,EAAE,GAAGC;IACzB,MAAM,EAAEC,IAAI,EAAEC,IAAI,EAAEC,KAAK,EAAE,GAAGC;IAC9B,MAAM,EAAEC,YAAY,EAAEC,YAAY,EAAE,GAAGC;IACvC,MAAMC,QAAQC,OAAuB;IACrC,MAAM,CAACC,YAAYC,cAAc,GAAGC,SAASvB;IAC7C,MAAM,CAACwB,gBAAgBC,kBAAkB,GAAGF,SAAS;IACrD,MAAM,CAACG,aAAaC,eAAe,GAAGJ,SAAS;IAC/C,MAAMK,OAAO7B,KAAK,CAACW,aAAa;IAChC,MAAMmB,YAAY7B,cAAcD,MAAM,MAAM,GAAG;IAC/C,MAAM+B,OAAO5B,aAAa,QAAQ;IAClC,MAAM6B,aAAa5B,mBAAmB,cAAc;IACpD,MAAM6B,cAAc,AAA0B,YAA1B,OAAOJ,MAAM,WAAwBA,KAAK,QAAQ,GAAGA,MAAM;IAC/EK,UAAU,IAAMX,cAActB,aAAa;QAACA;KAAW;IACvDiC,UAAU;QACRR,kBAAkB;QAClB,IAAI,CAACJ,YAAY;QACjB,MAAMa,OAAOf,MAAM,OAAO;QAC1B,MAAMgB,WAAWD,MAAM,cAA2B,CAAC,aAAa,EAAExB,aAAa,EAAE,CAAC;QAClF,IAAIwB,QAAQC,UACVD,KAAK,QAAQ,CAAC;YACZ,MAAMC,SAAS,UAAU,GAAGD,KAAK,UAAU,GAAIA,AAAAA,CAAAA,KAAK,WAAW,GAAGC,SAAS,WAAU,IAAK;YAC1F,UAAU3B,SAAS,WAAW;QAChC;IACJ,GAAG;QAACE;QAAcW;QAAYb;KAAO;IACrC,MAAM4B,SAAS,CAACC;QACd,MAAMC,aAAaD,SAAS3B;QAC5B,IAAI4B,aAAa,GAAGzB,KAAK;YAAE,OAAOyB;QAAW;aACxC,IAAIA,aAAa,GAAG1B,KAAK;YAAE,OAAO,CAAC0B;QAAW;IACrD;IACA,MAAMC,WAAW;QACf,IAAI,CAACX,QAAQF,aAAa;QAC1BC,eAAe;QACfF,kBAAkB;QAClB,IAAI;YACF,MAAMe,UAAU,AAAyB,YAAzB,OAAOZ,KAAK,QAAQ,GAAgBA,KAAK,QAAQ,GAAGA,KAAK,GAAG;YAC5E,MAAMa,WAAW,MAAMC,MAAMF;YAC7B,IAAI,CAACC,SAAS,EAAE,EAAE,MAAM,IAAIE,MAAM;YAClC,MAAMC,MAAMC,IAAI,eAAe,CAAC,MAAMJ,SAAS,IAAI;YACnD,MAAMK,SAASC,SAAS,aAAa,CAAC;YACtCD,OAAO,IAAI,GAAGF;YACdE,OAAO,QAAQ,GAAGlB,KAAK,YAAY,IAAIY,QAAQ,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,KAAK,SAAS;YACrFM,OAAO,KAAK;YACZE,WAAW,IAAMH,IAAI,eAAe,CAACD,MAAM;QAC7C,EAAE,OAAM;YACNnB,kBAAkB;QACpB,SAAU;YACRE,eAAe;QACjB;IACF;IACA,OAAO,WAAP,GACE,KAAC;QACC,WAAU;QACV,mBAAkBE,aAAaR,cAAe4B;;0BAE9C,KAAC;gBAAO,WAAU;;kCAChB,KAAC;wBAAI,WAAU;;0CACb,IAAC;0CAAMrB,MAAM,OAAOxB,EAAE;;0CACtB,KAAC;gCAAK,WAAU;gCAA2B,aAAU;;oCAClDM,eAAe;oCAAE;oCAAIX,MAAM,MAAM;;;;;kCAGtC,KAAC;wBAAI,WAAU;;4BACZE,gBAAgB2B,MAAM,aAAa,SAAS,WAAT,GAClC,IAACrC,SAAOA;gCACN,OAAOa,EAAE;gCACT,SAAS,IAAM,KAAKmC;gCACpB,UAAUb;0CAETA,cAAc,WAAdA,GAAc,IAACwB,gBAAOA;oCAAC,MAAK;mDAAU,IAACC,UAAQA;oCAAC,MAAM;;;0CAG3D,IAAC5D,SAAOA;gCACN,OAAOwC,aAAa3B,EAAE,0BAA0BA,EAAE;gCAClD,UAAU,CAACD,qBAAqBA,kBAAkB,QAAQ;gCAC1D,SAAS,IAAO4B,aAAa5B,mBAAmB,SAASA,mBAAmB;0CAE3E4B,aAAa,WAAbA,GAAa,IAACqB,WAASA;oCAAC,MAAM;mDAAS,IAACC,WAASA;oCAAC,MAAM;;;0CAE3D,IAAC9D,SAAOA;gCAAC,OAAOa,EAAE;gCAAuB,SAASU;0CAChD,kBAACwC,GAACA;oCAAC,MAAM;;;;;;;YAIdvD,MAAM,MAAM,GAAG,KAAK,WAAL,GACd;;kCACE,IAACR,SAAOA;wBACN,WAAU;wBACV,OAAOa,EAAE;wBACT,UAAUY;wBACV,SAAS,IAAMJ;kCAEf,kBAAC2C,aAAWA;4BAAC,MAAM;;;kCAErB,IAAChE,SAAOA;wBACN,WAAU;wBACV,OAAOa,EAAE;wBACT,UAAUa;wBACV,SAAS,IAAMJ;kCAEf,kBAAC2C,cAAYA;4BAAC,MAAM;;;;;0BAI1B,KAAC;gBAAO,WAAU;;oBACfhC,kBAAkB,WAAlBA,GACC,KAAC;wBAAE,MAAK;wBAAQ,WAAU;;4BACvBpB,EAAE;4BAAqD;0CACxD,IAAC;gCAAE,MAAM4B;gCAAa,QAAO;gCAAS,KAAI;0CACvC5B,EAAE;;;;kCAIT,KAAC;wBAAI,WAAU;;0CACb,IAACb,SAAOA;gCACN,OAAOa,EAAE;gCACT,UAAU,CAACF,eAAeA,YAAY,QAAQ,IAAI4B,QAAQ;gCAC1D,SAAS,IAAM5B,aAAa;0CAE5B,kBAACuD,SAAOA;oCAAC,MAAM;;;0CAEjB,KAAC;gCACC,MAAK;gCACL,WAAU;gCACV,SAAS,IAAMvD,aAAa,WAAW;gCACvC,OAAOE,EAAE;;oCAERsD,KAAK,KAAK,CAAC5B,AAAO,MAAPA;oCAAY;;;0CAE1B,IAACvC,SAAOA;gCACN,OAAOa,EAAE;gCACT,UAAU,CAACF,eAAeA,YAAY,QAAQ,IAAI4B,QAAQ5B,YAAY,OAAO;gCAC7E,SAAS,IAAMA,aAAa;0CAE5B,kBAACyD,QAAMA;oCAAC,MAAM;;;0CAEhB,IAACpE,SAAOA;gCACN,OAAOa,EAAE;gCACT,UAAU0B,QAAQ;gCAClB,SAAS,IAAM5B,aAAa,WAAW;0CAEvC,kBAAC0D,WAASA;oCAAC,MAAM;;;4BAElB/B,aAAa,WAAbA,GACC;;kDACE,IAAC;wCAAK,WAAU;;kDAChB,IAACtC,SAAOA;wCACN,OAAOa,EAAE;wCACT,QAAQiB;wCACR,SAAS,IAAMC,cAAc,CAACuC,QAAU,CAACA;kDAEzC,kBAACC,aAAWA;4CAAC,MAAM;;;;;;;oBAK1BjC,aAAaR,cAAc,WAAdA,GACZ,KAAC;wBAAI,WAAU;;0CACb,IAAC9B,SAAOA;gCACN,OAAOa,EAAE;gCACT,SAAS,IACPe,MAAM,OAAO,EAAE,SAAS;wCACtB,MAAM,CAAEA,CAAAA,AAA4B,MAA5BA,MAAM,OAAO,CAAC,WAAW,AAAK;wCACtC,UAAUX,SAAS,WAAW;oCAChC;0CAGF,kBAAC+C,aAAWA;oCAAC,MAAM;;;0CAErB,IAACQ,kBAAgBA;gCACf,WAAU;gCACV,kBAAiB;gCACjB,KAAK5C;gCACL,aAAY;gCACZ,MAAK;gCACL,UAAU;gCACV,mBAAmB;gCACnB,cAAYf,EAAE;0CAEbL,MAAM,GAAG,CAAC,CAACiE,OAAO3B,SAAAA,WAAAA,GACjB,KAAC;wCACC,MAAK;wCAGL,WAAU;wCACV,cAAYA;wCACZ,gBAAc3B,iBAAiB2B,UAAUY;wCACzC,cAAY3C,OAAO,mBAAmB;4CACpC,OAAO+B,SAAS;4CAChB,KAAK2B,MAAM,GAAG,GAAG,CAAC,EAAE,EAAEA,MAAM,GAAG,EAAE,GAAG;wCACtC;wCACA,OAAOA,MAAM,GAAG,IAAIC,OAAO5B,SAAS;wCACpC,UAAU3B,iBAAiB2B,SAAS,IAAI;wCACxC,SAAS,IAAMD,OAAOC;wCACtB,WAAW,CAAC6B;4CACV,IAAI,CAAC;gDAAC;gDAAa;gDAAc;gDAAQ;6CAAM,CAAC,QAAQ,CAACA,MAAM,GAAG,GAAG;4CACrEA,MAAM,cAAc;4CACpBA,MAAM,eAAe;4CACrB,MAAMC,WACJD,AAAc,WAAdA,MAAM,GAAG,GACL,IACAA,AAAc,UAAdA,MAAM,GAAG,GACPnE,MAAM,MAAM,GAAG,IACf2D,KAAK,GAAG,CACN,GACAA,KAAK,GAAG,CACN3D,MAAM,MAAM,GAAG,GACfsC,SAAU6B,CAAAA,AAAc,iBAAdA,MAAM,GAAG,GAAoB,IAAI,EAAC;4CAGxD9B,OAAO+B;4CACPhD,MAAM,OAAO,EACT,cAAiC,CAAC,aAAa,EAAEgD,SAAS,EAAE,CAAC,GAC7D;wCACN;;0DAEA,IAAC;gDACC,KAAKH,MAAM,YAAY,IAAIA,MAAM,GAAG;gDACpC,KAAI;gDACJ,SAAQ;gDACR,WAAW;;0DAEb,IAAC;0DAAM3B,SAAS;;;uCAvCX,GAAG2B,MAAM,GAAG,CAAC,CAAC,EAAE3B,QAAQ;;0CA2CnC,IAAC9C,SAAOA;gCACN,OAAOa,EAAE;gCACT,SAAS,IACPe,MAAM,OAAO,EAAE,SAAS;wCACtB,MAAMA,AAA4B,MAA5BA,MAAM,OAAO,CAAC,WAAW;wCAC/B,UAAUX,SAAS,WAAW;oCAChC;0CAGF,kBAACgD,cAAYA;oCAAC,MAAM;;;;;;;;;AAOlC;AACA,SAASlE,OAAO,EACdS,KAAK,EACLqE,IAAI,EACJC,QAAQ,CAAC,EACTC,OAAO,EACPC,aAAa,EACbvE,aAAa,IAAI,EACjBC,eAAe,KAAK,EACF;IAClB,MAAM,CAACiC,MAAMsC,QAAQ,GAAGjD,SAAgC;IACxD,MAAM,CAACrB,aAAauE,eAAe,GAAGlD,SAAyB;IAC/D,MAAM,CAACpB,mBAAmBuE,qBAAqB,GAAGnD,SAA+B;IACjF,MAAM,CAACoD,QAAQC,UAAU,GAAGrD,SAAS,IAAMxB,MAAM,GAAG,CAAC,CAAC6B,OAAU;gBAAE,GAAGA,IAAI;YAAC;IAE1E,IACE7B,MAAM,MAAM,KAAK4E,OAAO,MAAM,IAC9B5E,MAAM,IAAI,CAAC,CAAC6B,MAAMuC;QAChB,MAAMU,QAAQF,MAAM,CAACR,SAAS;QAC9B,OACE,CAACU,SACDjD,KAAK,GAAG,KAAKiD,MAAM,GAAG,IACtBjD,KAAK,GAAG,KAAKiD,MAAM,GAAG,IACtBjD,KAAK,KAAK,KAAKiD,MAAM,KAAK,IAC1BjD,KAAK,MAAM,KAAKiD,MAAM,MAAM,IAC5BjD,KAAK,YAAY,KAAKiD,MAAM,YAAY,IACxCjD,KAAK,QAAQ,KAAKiD,MAAM,QAAQ,IAChCjD,KAAK,YAAY,KAAKiD,MAAM,YAAY;IAE5C,IAEAD,UAAU7E,MAAM,GAAG,CAAC,CAAC6B,OAAU;YAAE,GAAGA,IAAI;QAAC;IAE3C,MAAMxB,IAAIC;IACV,MAAMC,SAASC;IACf,MAAMC,SAASC;IACf,MAAMqE,WAAW5C,QAAQ1B,SAASuE,eAAe7C,QAAQ;IACzD,OAAO,WAAP,GACE,IAAC;QAAI,KAAKsC;QAAS,WAAU;kBAC1BtC,QAAQ,WAARA,GACC,IAAC8C,4BAAQA;YACP,MAAMZ,QAAQrE,MAAM,MAAM,GAAG;YAC7B,OAAOuE;YACP,QAAQK;YACR,OAAOjB,KAAK,GAAG,CAAC,GAAGA,KAAK,GAAG,CAACW,OAAOtE,MAAM,MAAM,GAAG;YAClD,QAAQ;gBAAEmC;YAAK;YACf,SAAS;gBAAC+C;gBAAMC;aAAW;YAC3B,WAAU;YACV,UAAU;gBAAE,QAAQ;gBAAM,SAAS;gBAAG,SAAS;YAAG;YAClD,WAAW;gBACT,MAAMJ,AAAW,MAAXA;gBACN,OAAOA,AAAW,MAAXA;gBACP,YAAYA,AAAW,MAAXA;gBACZ,MAAMA;YACR;YACA,MAAM;gBAAE,KAAKL;gBAAgB,mBAAmB;gBAAG,cAAc;YAAK;YACtE,YAAY;gBAAE,KAAKC;YAAqB;YACxC,YAAY;gBAAE,sBAAsB;YAAK;YACzC,SAAS;gBAAE,SAAS,EAAE;YAAC;YACvB,QAAQ;gBACN,aAAa,IAAM;gBACnB,YAAY,IAAM;gBAClB,YAAY,IAAM;gBAClB,YAAY,IAAM;gBAClB,kBAAkB,IAAM;gBACxB,aAAa,kBAAM,IAACxB,gBAAOA,CAAAA;gBAC3B,WAAW,kBAAM,IAACiC,UAAQA;wBAAC,MAAM;;gBACjC,UAAU,kBACR,IAACrF,cAAYA;wBACX,OAAOC;wBACP,YAAYC;wBACZ,cAAcC;wBACd,aAAaC;wBACb,mBAAmBC;;YAGzB;YACA,QAAQ;gBACN,UAAUC,EAAE;gBACZ,iBAAiBA,EAAE;gBACnB,OAAOA,EAAE;gBACT,sBAAsBE,OAAO,kBAAkB;oBAC7C,OAAO+D,QAAQ;oBACf,OAAOtE,MAAM,MAAM;gBACrB;gBACA,OAAOK,EAAE;YACX;YACA,IAAI;gBACF,MAAM,CAAC,EAAE,OAAOS,IAAI,EAAE;oBACpB,IAAIA,SAASwD,OAAOE,gBAAgB1D;gBACtC;YACF;YACA,QAAQ;gBACN,MAAM;oBACJ,0BAA0B;oBAC1B,QAAQ;gBACV;YACF;;;AAKV"}
@@ -91,8 +91,8 @@ export type { MasonryProps } from './masonry/index.js';
91
91
  export { Masonry } from './masonry/index.js';
92
92
  export type { MentionOption, MentionsProps } from './mentions/index.js';
93
93
  export { Mentions } from './mentions/index.js';
94
- export type { MenuItem, MenuProps } from './menu/index.js';
95
- export { Menu } from './menu/index.js';
94
+ export type { MenuGroupProps, MenuItem, MenuProps } from './menu/index.js';
95
+ export { Menu, MenuGroup } from './menu/index.js';
96
96
  export type { MessageApi, MessageOptions, MessageProps, MessageProviderProps } from './message/index.js';
97
97
  export { Message, MessageProvider, useMessage } from './message/index.js';
98
98
  export type { ModalFooterActions, ModalProps } from './modal/index.js';
@@ -119,8 +119,6 @@ export type { ScrollAreaProps } from './scrollarea/index.js';
119
119
  export { ScrollArea } from './scrollarea/index.js';
120
120
  export type { ScrollbarProps } from './scrollbar/index.js';
121
121
  export { Scrollbar } from './scrollbar/index.js';
122
- export type { SegmentedOption, SegmentedProps } from './segmented/index.js';
123
- export { Segmented } from './segmented/index.js';
124
122
  export type { SelectOption, SelectOptionGroup, SelectProps } from './select/index.js';
125
123
  export { Select } from './select/index.js';
126
124
  export type { DateFormat, DatePreset } from './shared/date-format.js';
@@ -152,7 +150,7 @@ export { CheckableTag, Tag, TagGroup } from './tag/index.js';
152
150
  export type { TextareaProps } from './textarea/index.js';
153
151
  export { Textarea } from './textarea/index.js';
154
152
  export type { TextareaAutoSize } from './textarea/textarea.js';
155
- export type { LeafComponentTokens, LeafThemeStyle } from './theme.js';
153
+ export type { LeafComponentStateTokens, LeafComponentTokens, LeafThemeStyle } from './theme.js';
156
154
  export type { TimelineItem, TimelineProps } from './timeline/index.js';
157
155
  export { Timeline } from './timeline/index.js';
158
156
  export type { TimePickerProps } from './timepicker/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
package/dist/esm/index.js CHANGED
@@ -45,7 +45,7 @@ export { Loading } from "./loading/index.js";
45
45
  export { LoadingBar, LoadingBarProvider, useLoadingBar } from "./loadingbar/index.js";
46
46
  export { Masonry } from "./masonry/index.js";
47
47
  export { Mentions } from "./mentions/index.js";
48
- export { Menu } from "./menu/index.js";
48
+ export { Menu, MenuGroup } from "./menu/index.js";
49
49
  export { Message, MessageProvider, useMessage } from "./message/index.js";
50
50
  export { Modal } from "./modal/index.js";
51
51
  export { Notification, NotificationProvider, useNotification } from "./notification/index.js";
@@ -59,7 +59,6 @@ export { Rate } from "./rate/index.js";
59
59
  export { Result } from "./result/index.js";
60
60
  export { ScrollArea } from "./scrollarea/index.js";
61
61
  export { Scrollbar } from "./scrollbar/index.js";
62
- export { Segmented } from "./segmented/index.js";
63
62
  export { Select } from "./select/index.js";
64
63
  export { Skeleton } from "./skeleton/index.js";
65
64
  export { Slider } from "./slider/index.js";
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/layout/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAO7F,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,cAAc,CAAC;IACjE,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;CACvC;AAWD,MAAM,WAAW,gBAAiB,SAAQ,cAAc,CAAC,WAAW,CAAC;IACnE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AACD,eAAO,MAAM,WAAW,0GAoDtB,CAAC;AACH,eAAO,MAAM,YAAY,qHAKxB,CAAC;AACF,eAAO,MAAM,aAAa,qHAKzB,CAAC;AACF,eAAO,MAAM,YAAY,qHAKxB,CAAC;AACF,eAAO,MAAM,MAAM;;;;;CAKjB,CAAC"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/layout/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,cAAc,EAAE,KAAK,SAAS,EAAuB,MAAM,OAAO,CAAC;AAQ7F,MAAM,WAAW,WAAY,SAAQ,cAAc,CAAC,cAAc,CAAC;IACjE,SAAS,CAAC,EAAE,YAAY,GAAG,UAAU,CAAC;CACvC;AAWD,MAAM,WAAW,gBAAiB,SAAQ,cAAc,CAAC,WAAW,CAAC;IACnE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACjC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,SAAS,EAAE,OAAO,KAAK,IAAI,CAAC;IAC1C,OAAO,CAAC,EAAE,SAAS,CAAC;CACrB;AACD,eAAO,MAAM,WAAW,0GAsDtB,CAAC;AACH,eAAO,MAAM,YAAY,qHAKxB,CAAC;AACF,eAAO,MAAM,aAAa,qHAKzB,CAAC;AACF,eAAO,MAAM,YAAY,qHAKxB,CAAC;AACF,eAAO,MAAM,MAAM;;;;;CAKjB,CAAC"}
@@ -3,6 +3,7 @@ import { jsx, jsxs } from "react/jsx-runtime";
3
3
  import { forwardRef, useEffect, useState } from "react";
4
4
  import { ButtonControl } from "../button/button.js";
5
5
  import { useComponentProps } from "../config-provider/component-defaults.js";
6
+ import { ScrollbarControl } from "../scrollbar/scrollbar.js";
6
7
  import { classes } from "../shared/classes.js";
7
8
  import { useControllable } from "../shared/use-controllable.js";
8
9
  import { useText } from "../shared/use-text.js";
@@ -40,8 +41,10 @@ const layout_LayoutSider = /*#__PURE__*/ forwardRef(function(rawProps, ref) {
40
41
  ...style
41
42
  },
42
43
  children: [
43
- /*#__PURE__*/ jsx("div", {
44
+ /*#__PURE__*/ jsx(ScrollbarControl, {
44
45
  className: "leaf-layout__sider-content",
46
+ role: "presentation",
47
+ tabIndex: -1,
45
48
  children: children
46
49
  }),
47
50
  collapsible && !narrow && /*#__PURE__*/ jsx(ButtonControl, {
@@ -1 +1 @@
1
- {"version":3,"file":"layout/layout.js","sources":["../../../src/layout/layout.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode, useEffect, useState } from 'react';\nimport { ButtonControl } from '../button/button';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { classes } from '../shared/classes';\nimport { useControllable } from '../shared/use-controllable';\nimport { useText } from '../shared/use-text';\n\nexport interface LayoutProps extends HTMLAttributes<HTMLDivElement> {\n direction?: 'horizontal' | 'vertical';\n}\nconst LayoutRoot = forwardRef<HTMLDivElement, LayoutProps>(function Layout(rawProps, ref) {\n const { direction = 'vertical', className, ...props } = useComponentProps('Layout', rawProps);\n return (\n <div\n {...props}\n ref={ref}\n className={classes('leaf-layout', `leaf-layout--${direction}`, className)}\n />\n );\n});\nexport interface LayoutSiderProps extends HTMLAttributes<HTMLElement> {\n width?: number | string;\n collapsedWidth?: number | string;\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n collapsible?: boolean;\n breakpoint?: number;\n onCollapse?: (collapsed: boolean) => void;\n trigger?: ReactNode;\n}\nexport const LayoutSider = forwardRef<HTMLElement, LayoutSiderProps>(function LayoutSider(\n rawProps: LayoutSiderProps,\n ref,\n) {\n const {\n width = 220,\n collapsedWidth = 64,\n collapsed,\n defaultCollapsed = false,\n collapsible = false,\n breakpoint,\n onCollapse,\n trigger,\n className,\n children,\n style,\n ...props\n } = useComponentProps('LayoutSider', rawProps);\n const t = useText();\n const [compact, setCompact] = useControllable(collapsed, defaultCollapsed, onCollapse);\n const [narrow, setNarrow] = useState(false);\n useEffect(() => {\n if (breakpoint === undefined) return;\n const query = matchMedia(`(max-width: ${breakpoint}px)`);\n const update = () => setNarrow(query.matches);\n update();\n query.addEventListener('change', update);\n return () => query.removeEventListener('change', update);\n }, [breakpoint]);\n const folded = compact || narrow;\n return (\n <aside\n {...props}\n ref={ref}\n className={classes('leaf-layout__sider', className)}\n data-collapsed={folded || undefined}\n style={{ width: folded ? collapsedWidth : width, ...style }}\n >\n <div className=\"leaf-layout__sider-content\">{children}</div>\n {collapsible && !narrow && (\n <ButtonControl\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setCompact(!compact)}\n aria-expanded={!folded}\n aria-label={folded ? t('layout.expandSidebar') : t('layout.collapseSidebar')}\n >\n {trigger ?? (folded ? t('layout.expandSidebar') : t('layout.collapseSidebar'))}\n </ButtonControl>\n )}\n </aside>\n );\n});\nexport const LayoutHeader = forwardRef<HTMLElement, HTMLAttributes<HTMLElement>>(\n function LayoutHeader(rawProps: HTMLAttributes<HTMLElement>, ref) {\n const { className, ...props } = useComponentProps('LayoutHeader', rawProps);\n return <header {...props} ref={ref} className={classes('leaf-layout__header', className)} />;\n },\n);\nexport const LayoutContent = forwardRef<HTMLElement, HTMLAttributes<HTMLElement>>(\n function LayoutContent(rawProps: HTMLAttributes<HTMLElement>, ref) {\n const { className, ...props } = useComponentProps('LayoutContent', rawProps);\n return <main {...props} ref={ref} className={classes('leaf-layout__content', className)} />;\n },\n);\nexport const LayoutFooter = forwardRef<HTMLElement, HTMLAttributes<HTMLElement>>(\n function LayoutFooter(rawProps: HTMLAttributes<HTMLElement>, ref) {\n const { className, ...props } = useComponentProps('LayoutFooter', rawProps);\n return <footer {...props} ref={ref} className={classes('leaf-layout__footer', className)} />;\n },\n);\nexport const Layout = Object.assign(LayoutRoot, {\n Header: LayoutHeader,\n Sider: LayoutSider,\n Content: LayoutContent,\n Footer: LayoutFooter,\n});\n"],"names":["LayoutRoot","forwardRef","rawProps","ref","direction","className","props","useComponentProps","classes","LayoutSider","width","collapsedWidth","collapsed","defaultCollapsed","collapsible","breakpoint","onCollapse","trigger","children","style","t","useText","compact","setCompact","useControllable","narrow","setNarrow","useState","useEffect","undefined","query","matchMedia","update","folded","ButtonControl","LayoutHeader","LayoutContent","LayoutFooter","Layout","Object"],"mappings":";;;;;;;;AAUA,MAAMA,aAAa,WAAHA,GAAGC,WAAwC,SAAgBC,QAAQ,EAAEC,GAAG;IACtF,MAAM,EAAEC,YAAY,UAAU,EAAEC,SAAS,EAAE,GAAGC,OAAO,GAAGC,kBAAkB,UAAUL;IACpF,OAAO,WAAP,GACE,IAAC;QACE,GAAGI,KAAK;QACT,KAAKH;QACL,WAAWK,QAAQ,eAAe,CAAC,aAAa,EAAEJ,WAAW,EAAEC;;AAGrE;AAWO,MAAMI,qBAAc,WAAHA,GAAGR,WAA0C,SACnEC,QAA0B,EAC1BC,GAAG;IAEH,MAAM,EACJO,QAAQ,GAAG,EACXC,iBAAiB,EAAE,EACnBC,SAAS,EACTC,mBAAmB,KAAK,EACxBC,cAAc,KAAK,EACnBC,UAAU,EACVC,UAAU,EACVC,OAAO,EACPZ,SAAS,EACTa,QAAQ,EACRC,KAAK,EACL,GAAGb,OACJ,GAAGC,kBAAkB,eAAeL;IACrC,MAAMkB,IAAIC;IACV,MAAM,CAACC,SAASC,WAAW,GAAGC,gBAAgBZ,WAAWC,kBAAkBG;IAC3E,MAAM,CAACS,QAAQC,UAAU,GAAGC,SAAS;IACrCC,UAAU;QACR,IAAIb,AAAec,WAAfd,YAA0B;QAC9B,MAAMe,QAAQC,WAAW,CAAC,YAAY,EAAEhB,WAAW,GAAG,CAAC;QACvD,MAAMiB,SAAS,IAAMN,UAAUI,MAAM,OAAO;QAC5CE;QACAF,MAAM,gBAAgB,CAAC,UAAUE;QACjC,OAAO,IAAMF,MAAM,mBAAmB,CAAC,UAAUE;IACnD,GAAG;QAACjB;KAAW;IACf,MAAMkB,SAASX,WAAWG;IAC1B,OAAO,WAAP,GACE,KAAC;QACE,GAAGnB,KAAK;QACT,KAAKH;QACL,WAAWK,QAAQ,sBAAsBH;QACzC,kBAAgB4B,UAAUJ;QAC1B,OAAO;YAAE,OAAOI,SAAStB,iBAAiBD;YAAO,GAAGS,KAAK;QAAC;;0BAE1D,IAAC;gBAAI,WAAU;0BAA8BD;;YAC5CJ,eAAe,CAACW,UAAU,WAAVA,GACf,IAACS,eAAaA;gBACZ,SAAQ;gBACR,MAAK;gBACL,SAAS,IAAMX,WAAW,CAACD;gBAC3B,iBAAe,CAACW;gBAChB,cAAYA,SAASb,EAAE,0BAA0BA,EAAE;0BAElDH,WAAYgB,CAAAA,SAASb,EAAE,0BAA0BA,EAAE,yBAAwB;;;;AAKtF;AACO,MAAMe,sBAAe,WAAHA,GAAGlC,WAC1B,SAAsBC,QAAqC,EAAEC,GAAG;IAC9D,MAAM,EAAEE,SAAS,EAAE,GAAGC,OAAO,GAAGC,kBAAkB,gBAAgBL;IAClE,OAAO,WAAP,GAAO,IAAC;QAAQ,GAAGI,KAAK;QAAE,KAAKH;QAAK,WAAWK,QAAQ,uBAAuBH;;AAChF;AAEK,MAAM+B,uBAAgB,WAAHA,GAAGnC,WAC3B,SAAuBC,QAAqC,EAAEC,GAAG;IAC/D,MAAM,EAAEE,SAAS,EAAE,GAAGC,OAAO,GAAGC,kBAAkB,iBAAiBL;IACnE,OAAO,WAAP,GAAO,IAAC;QAAM,GAAGI,KAAK;QAAE,KAAKH;QAAK,WAAWK,QAAQ,wBAAwBH;;AAC/E;AAEK,MAAMgC,sBAAe,WAAHA,GAAGpC,WAC1B,SAAsBC,QAAqC,EAAEC,GAAG;IAC9D,MAAM,EAAEE,SAAS,EAAE,GAAGC,OAAO,GAAGC,kBAAkB,gBAAgBL;IAClE,OAAO,WAAP,GAAO,IAAC;QAAQ,GAAGI,KAAK;QAAE,KAAKH;QAAK,WAAWK,QAAQ,uBAAuBH;;AAChF;AAEK,MAAMiC,gBAASC,OAAO,MAAM,CAACvC,YAAY;IAC9C,QAAQmC;IACR,OAAO1B;IACP,SAAS2B;IACT,QAAQC;AACV"}
1
+ {"version":3,"file":"layout/layout.js","sources":["../../../src/layout/layout.tsx"],"sourcesContent":["import { forwardRef, type HTMLAttributes, type ReactNode, useEffect, useState } from 'react';\nimport { ButtonControl } from '../button/button';\nimport { useComponentProps } from '../config-provider/component-defaults';\nimport { ScrollbarControl } from '../scrollbar/scrollbar';\nimport { classes } from '../shared/classes';\nimport { useControllable } from '../shared/use-controllable';\nimport { useText } from '../shared/use-text';\n\nexport interface LayoutProps extends HTMLAttributes<HTMLDivElement> {\n direction?: 'horizontal' | 'vertical';\n}\nconst LayoutRoot = forwardRef<HTMLDivElement, LayoutProps>(function Layout(rawProps, ref) {\n const { direction = 'vertical', className, ...props } = useComponentProps('Layout', rawProps);\n return (\n <div\n {...props}\n ref={ref}\n className={classes('leaf-layout', `leaf-layout--${direction}`, className)}\n />\n );\n});\nexport interface LayoutSiderProps extends HTMLAttributes<HTMLElement> {\n width?: number | string;\n collapsedWidth?: number | string;\n collapsed?: boolean;\n defaultCollapsed?: boolean;\n collapsible?: boolean;\n breakpoint?: number;\n onCollapse?: (collapsed: boolean) => void;\n trigger?: ReactNode;\n}\nexport const LayoutSider = forwardRef<HTMLElement, LayoutSiderProps>(function LayoutSider(\n rawProps: LayoutSiderProps,\n ref,\n) {\n const {\n width = 220,\n collapsedWidth = 64,\n collapsed,\n defaultCollapsed = false,\n collapsible = false,\n breakpoint,\n onCollapse,\n trigger,\n className,\n children,\n style,\n ...props\n } = useComponentProps('LayoutSider', rawProps);\n const t = useText();\n const [compact, setCompact] = useControllable(collapsed, defaultCollapsed, onCollapse);\n const [narrow, setNarrow] = useState(false);\n useEffect(() => {\n if (breakpoint === undefined) return;\n const query = matchMedia(`(max-width: ${breakpoint}px)`);\n const update = () => setNarrow(query.matches);\n update();\n query.addEventListener('change', update);\n return () => query.removeEventListener('change', update);\n }, [breakpoint]);\n const folded = compact || narrow;\n return (\n <aside\n {...props}\n ref={ref}\n className={classes('leaf-layout__sider', className)}\n data-collapsed={folded || undefined}\n style={{ width: folded ? collapsedWidth : width, ...style }}\n >\n <ScrollbarControl className=\"leaf-layout__sider-content\" role=\"presentation\" tabIndex={-1}>\n {children}\n </ScrollbarControl>\n {collapsible && !narrow && (\n <ButtonControl\n variant=\"ghost\"\n size=\"sm\"\n onClick={() => setCompact(!compact)}\n aria-expanded={!folded}\n aria-label={folded ? t('layout.expandSidebar') : t('layout.collapseSidebar')}\n >\n {trigger ?? (folded ? t('layout.expandSidebar') : t('layout.collapseSidebar'))}\n </ButtonControl>\n )}\n </aside>\n );\n});\nexport const LayoutHeader = forwardRef<HTMLElement, HTMLAttributes<HTMLElement>>(\n function LayoutHeader(rawProps: HTMLAttributes<HTMLElement>, ref) {\n const { className, ...props } = useComponentProps('LayoutHeader', rawProps);\n return <header {...props} ref={ref} className={classes('leaf-layout__header', className)} />;\n },\n);\nexport const LayoutContent = forwardRef<HTMLElement, HTMLAttributes<HTMLElement>>(\n function LayoutContent(rawProps: HTMLAttributes<HTMLElement>, ref) {\n const { className, ...props } = useComponentProps('LayoutContent', rawProps);\n return <main {...props} ref={ref} className={classes('leaf-layout__content', className)} />;\n },\n);\nexport const LayoutFooter = forwardRef<HTMLElement, HTMLAttributes<HTMLElement>>(\n function LayoutFooter(rawProps: HTMLAttributes<HTMLElement>, ref) {\n const { className, ...props } = useComponentProps('LayoutFooter', rawProps);\n return <footer {...props} ref={ref} className={classes('leaf-layout__footer', className)} />;\n },\n);\nexport const Layout = Object.assign(LayoutRoot, {\n Header: LayoutHeader,\n Sider: LayoutSider,\n Content: LayoutContent,\n Footer: LayoutFooter,\n});\n"],"names":["LayoutRoot","forwardRef","rawProps","ref","direction","className","props","useComponentProps","classes","LayoutSider","width","collapsedWidth","collapsed","defaultCollapsed","collapsible","breakpoint","onCollapse","trigger","children","style","t","useText","compact","setCompact","useControllable","narrow","setNarrow","useState","useEffect","undefined","query","matchMedia","update","folded","ScrollbarControl","ButtonControl","LayoutHeader","LayoutContent","LayoutFooter","Layout","Object"],"mappings":"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"}
@@ -18,6 +18,8 @@ export interface MentionsProps extends Omit<TextareaProps, 'value' | 'defaultVal
18
18
  split?: string;
19
19
  loading?: boolean;
20
20
  notFoundContent?: ReactNode;
21
+ popupWidth?: number | string;
22
+ popupMaxWidth?: number | string;
21
23
  }
22
24
  export declare const Mentions: import("react").ForwardRefExoticComponent<MentionsProps & import("react").RefAttributes<HTMLTextAreaElement>>;
23
25
  //# sourceMappingURL=mentions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../../src/mentions/mentions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAA2B,MAAM,OAAO,CAAC;AAM5E,OAAO,EAAiB,KAAK,YAAY,EAAsB,MAAM,oBAAoB,CAAC;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AACD,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,CAAC,EAC7E,YAAY;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,SAAS,CAAC;CAC7B;AAED,eAAO,MAAM,QAAQ,+GA2KnB,CAAC"}
1
+ {"version":3,"file":"mentions.d.ts","sourceRoot":"","sources":["../../../src/mentions/mentions.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,SAAS,EAA2B,MAAM,OAAO,CAAC;AAM5E,OAAO,EAAiB,KAAK,YAAY,EAAsB,MAAM,oBAAoB,CAAC;AAC1F,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AACD,MAAM,WAAW,aACf,SAAQ,IAAI,CAAC,aAAa,EAAE,OAAO,GAAG,cAAc,GAAG,UAAU,GAAG,UAAU,CAAC,EAC7E,YAAY;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,QAAQ,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC3D,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAClC,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,SAAS,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC7B,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACjC;AAED,eAAO,MAAM,QAAQ,+GAiLnB,CAAC"}
@@ -12,7 +12,7 @@ const defaultPrefixes = [
12
12
  '@'
13
13
  ];
14
14
  const mentions_Mentions = /*#__PURE__*/ forwardRef(function(rawProps, ref) {
15
- const { value, defaultValue = '', onChange, onSearch, onSelect, options, prefixes = defaultPrefixes, split = ' ', loading, notFoundContent, popupPlacement, popupClassName, popupStyle, popupRender, getPopupContainer, ...props } = useComponentProps('Mentions', rawProps);
15
+ const { value, defaultValue = '', onChange, onSearch, onSelect, options, prefixes = defaultPrefixes, split = ' ', loading, notFoundContent, popupWidth = 'trigger', popupMaxWidth, popupPlacement, popupClassName, popupStyle, popupRender, getPopupContainer, ...props } = useComponentProps('Mentions', rawProps);
16
16
  const input = useRef(null), panel = useRef(null), merged = useMergedRef(input, ref), id = useId(), field = useFormField();
17
17
  const { messages } = useLeafConfig();
18
18
  const [text, setText] = useFieldValue(value, defaultValue, input, props.form);
@@ -113,7 +113,9 @@ const mentions_Mentions = /*#__PURE__*/ forwardRef(function(rawProps, ref) {
113
113
  open: open,
114
114
  triggerRef: input,
115
115
  panelRef: panel,
116
- matchWidth: true,
116
+ matchWidth: 'trigger' === popupWidth,
117
+ width: 'trigger' === popupWidth ? void 0 : 'auto' === popupWidth ? 'max-content' : popupWidth,
118
+ maxWidth: popupMaxWidth,
117
119
  placement: popupPlacement,
118
120
  style: popupStyle,
119
121
  render: popupRender,