@lobehub/ui 5.51.2 → 5.52.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 (322) hide show
  1. package/es/Accordion/Accordion.mjs +1 -1
  2. package/es/Accordion/Accordion.mjs.map +1 -1
  3. package/es/ActionIconGroup/type.d.mts +2 -1
  4. package/es/Alert/Alert.mjs +1 -1
  5. package/es/AutoComplete/Select.mjs +1 -1
  6. package/es/Avatar/Avatar.mjs +2 -2
  7. package/es/Burger/Burger.mjs +2 -2
  8. package/es/Burger/Burger.mjs.map +1 -1
  9. package/es/Button/Button.mjs +1 -1
  10. package/es/CodeDiff/DiffPanel.mjs +1 -1
  11. package/es/CodeDiff/DiffPanel.mjs.map +1 -1
  12. package/es/Collapse/Collapse.mjs +1 -1
  13. package/es/ColorSwatches/ColorSwatches.mjs +21 -21
  14. package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
  15. package/es/ColorSwatches/style.mjs +3 -12
  16. package/es/ColorSwatches/style.mjs.map +1 -1
  17. package/es/DatePicker/DatePicker.mjs +1 -1
  18. package/es/DraggablePanel/DraggablePanel.mjs +1 -1
  19. package/es/Drawer/Drawer.mjs +1 -1
  20. package/es/EditableText/ControlInput.d.mts +2 -2
  21. package/es/EditableText/ControlInput.mjs +1 -1
  22. package/es/EditableText/ControlInput.mjs.map +1 -1
  23. package/es/EditableText/EditableText.mjs +1 -0
  24. package/es/EditableText/EditableText.mjs.map +1 -1
  25. package/es/EditableText/type.d.mts +5 -1
  26. package/es/EmojiPicker/AvatarUploader.mjs +76 -71
  27. package/es/EmojiPicker/AvatarUploader.mjs.map +1 -1
  28. package/es/EmojiPicker/EmojiPicker.mjs +12 -6
  29. package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
  30. package/es/EmojiPicker/style.mjs +32 -9
  31. package/es/EmojiPicker/style.mjs.map +1 -1
  32. package/es/EmojiPicker/type.d.mts +2 -1
  33. package/es/Form/Form.mjs +1 -1
  34. package/es/Form/components/FormDivider.mjs +1 -1
  35. package/es/Form/components/FormItem.mjs +1 -1
  36. package/es/Form/components/FormSubmitFooter.mjs +1 -1
  37. package/es/Form/components/FormTitle.mjs +1 -1
  38. package/es/GroupAvatar/GroupAvatar.mjs +1 -1
  39. package/es/GroupAvatar/GroupAvatar.mjs.map +1 -1
  40. package/es/GroupAvatar/type.d.mts +2 -1
  41. package/es/Highlighter/Highlighter.mjs +1 -1
  42. package/es/Highlighter/Highlighter.mjs.map +1 -1
  43. package/es/Highlighter/LangSelect.mjs +23 -13
  44. package/es/Highlighter/LangSelect.mjs.map +1 -1
  45. package/es/Highlighter/style.mjs +1 -1
  46. package/es/Highlighter/style.mjs.map +1 -1
  47. package/es/HtmlPreview/HtmlPreview.mjs +28 -1
  48. package/es/HtmlPreview/HtmlPreview.mjs.map +1 -1
  49. package/es/Image/viewer/ImageViewer.mjs +1 -1
  50. package/es/Image/viewer/ImageViewer.mjs.map +1 -1
  51. package/es/Image/viewer/Toolbar.mjs +1 -1
  52. package/es/Input/Input.mjs +1 -1
  53. package/es/Input/InputNumber.mjs +1 -1
  54. package/es/Input/InputOPT.mjs +1 -1
  55. package/es/Input/InputPassword.mjs +1 -1
  56. package/es/Input/TextArea.mjs +1 -1
  57. package/es/Menu/Menu.mjs +1 -1
  58. package/es/Menu/index.d.mts +2 -1
  59. package/es/Menu/index.mjs +1 -1
  60. package/es/Menu/itemInterface.d.mts +71 -0
  61. package/es/Menu/type.d.mts +8 -8
  62. package/es/Mermaid/Mermaid.mjs +1 -1
  63. package/es/Mermaid/Mermaid.mjs.map +1 -1
  64. package/es/Modal/Modal.mjs +1 -1
  65. package/es/SearchBar/SearchBar.mjs +1 -1
  66. package/es/SearchBar/SearchBar.mjs.map +1 -1
  67. package/es/SearchBar/type.d.mts +2 -2
  68. package/es/Segmented/Segmented.mjs +1 -1
  69. package/es/Select/Select.mjs +1 -1
  70. package/es/SliderWithInput/SliderWithInput.mjs +1 -1
  71. package/es/Tabs/Tabs.mjs +1 -1
  72. package/es/Tag/Tag.mjs +1 -1
  73. package/es/ThemeProvider/ConfigProvider.mjs +1 -1
  74. package/es/ThemeProvider/ThemeProvider.mjs +1 -1
  75. package/es/ThemeSwitch/ThemeSwitch.mjs +1 -1
  76. package/es/Toc/Toc.mjs +1 -1
  77. package/es/Toc/TocMobile.mjs +1 -1
  78. package/es/awesome/AgentSkillCard/AgentSkillCard.mjs +1 -1
  79. package/es/awesome/Hero/Hero.mjs +1 -1
  80. package/es/awesome/LandingSection/LandingSection.mjs +1 -1
  81. package/es/base-ui/Anchor/Anchor.d.mts +6 -0
  82. package/es/base-ui/Anchor/Anchor.mjs +141 -0
  83. package/es/base-ui/Anchor/Anchor.mjs.map +1 -0
  84. package/es/base-ui/Anchor/index.d.mts +3 -0
  85. package/es/base-ui/Anchor/style.mjs +80 -0
  86. package/es/base-ui/Anchor/style.mjs.map +1 -0
  87. package/es/base-ui/Anchor/type.d.mts +20 -0
  88. package/es/base-ui/AutoComplete/AutoComplete.mjs.map +1 -1
  89. package/es/base-ui/Avatar/Avatar.mjs +1 -1
  90. package/es/base-ui/Breadcrumb/Breadcrumb.d.mts +6 -0
  91. package/es/base-ui/Breadcrumb/Breadcrumb.mjs +58 -0
  92. package/es/base-ui/Breadcrumb/Breadcrumb.mjs.map +1 -0
  93. package/es/base-ui/Breadcrumb/index.d.mts +3 -0
  94. package/es/base-ui/Breadcrumb/style.mjs +65 -0
  95. package/es/base-ui/Breadcrumb/style.mjs.map +1 -0
  96. package/es/base-ui/Breadcrumb/type.d.mts +24 -0
  97. package/es/base-ui/Burger/Burger.d.mts +6 -0
  98. package/es/base-ui/Burger/Burger.mjs +69 -0
  99. package/es/base-ui/Burger/Burger.mjs.map +1 -0
  100. package/es/base-ui/Burger/index.d.mts +3 -0
  101. package/es/base-ui/Burger/style.mjs +63 -0
  102. package/es/base-ui/Burger/style.mjs.map +1 -0
  103. package/es/base-ui/Burger/type.d.mts +23 -0
  104. package/es/base-ui/Carousel/Carousel.d.mts +6 -0
  105. package/es/base-ui/Carousel/Carousel.mjs +157 -0
  106. package/es/base-ui/Carousel/Carousel.mjs.map +1 -0
  107. package/es/base-ui/Carousel/index.d.mts +3 -0
  108. package/es/base-ui/Carousel/style.mjs +88 -0
  109. package/es/base-ui/Carousel/style.mjs.map +1 -0
  110. package/es/base-ui/Carousel/type.d.mts +23 -0
  111. package/es/base-ui/ColorPicker/ColorPicker.d.mts +6 -0
  112. package/es/base-ui/ColorPicker/ColorPicker.mjs +227 -0
  113. package/es/base-ui/ColorPicker/ColorPicker.mjs.map +1 -0
  114. package/es/base-ui/ColorPicker/SaturationArea.mjs +64 -0
  115. package/es/base-ui/ColorPicker/SaturationArea.mjs.map +1 -0
  116. package/es/base-ui/ColorPicker/color.mjs +28 -0
  117. package/es/base-ui/ColorPicker/color.mjs.map +1 -0
  118. package/es/base-ui/ColorPicker/index.d.mts +3 -0
  119. package/es/base-ui/ColorPicker/style.mjs +180 -0
  120. package/es/base-ui/ColorPicker/style.mjs.map +1 -0
  121. package/es/base-ui/ColorPicker/type.d.mts +20 -0
  122. package/es/base-ui/ContextMenu/ContextMenuHost.mjs.map +1 -1
  123. package/es/base-ui/ContextMenu/renderItems.d.mts +0 -1
  124. package/es/base-ui/ContextMenu/renderItems.mjs.map +1 -1
  125. package/es/base-ui/DatePicker/CalendarPanel.mjs +188 -0
  126. package/es/base-ui/DatePicker/CalendarPanel.mjs.map +1 -0
  127. package/es/base-ui/DatePicker/DatePicker.d.mts +6 -0
  128. package/es/base-ui/DatePicker/DatePicker.mjs +88 -0
  129. package/es/base-ui/DatePicker/DatePicker.mjs.map +1 -0
  130. package/es/base-ui/DatePicker/DateRangePicker.d.mts +6 -0
  131. package/es/base-ui/DatePicker/DateRangePicker.mjs +128 -0
  132. package/es/base-ui/DatePicker/DateRangePicker.mjs.map +1 -0
  133. package/es/base-ui/DatePicker/PickerShell.mjs +43 -0
  134. package/es/base-ui/DatePicker/PickerShell.mjs.map +1 -0
  135. package/es/base-ui/DatePicker/calendar.d.mts +5 -0
  136. package/es/base-ui/DatePicker/calendar.mjs +46 -0
  137. package/es/base-ui/DatePicker/calendar.mjs.map +1 -0
  138. package/es/base-ui/DatePicker/index.d.mts +5 -0
  139. package/es/base-ui/DatePicker/style.mjs +193 -0
  140. package/es/base-ui/DatePicker/style.mjs.map +1 -0
  141. package/es/base-ui/DatePicker/type.d.mts +35 -0
  142. package/es/base-ui/Descriptions/Descriptions.d.mts +6 -0
  143. package/es/base-ui/Descriptions/Descriptions.mjs +62 -0
  144. package/es/base-ui/Descriptions/Descriptions.mjs.map +1 -0
  145. package/es/base-ui/Descriptions/index.d.mts +3 -0
  146. package/es/base-ui/Descriptions/style.mjs +64 -0
  147. package/es/base-ui/Descriptions/style.mjs.map +1 -0
  148. package/es/base-ui/Descriptions/type.d.mts +28 -0
  149. package/es/base-ui/Divider/Divider.d.mts +6 -0
  150. package/es/base-ui/Divider/Divider.mjs +30 -0
  151. package/es/base-ui/Divider/Divider.mjs.map +1 -0
  152. package/es/base-ui/Divider/index.d.mts +3 -0
  153. package/es/base-ui/Divider/style.mjs +59 -0
  154. package/es/base-ui/Divider/style.mjs.map +1 -0
  155. package/es/base-ui/Divider/type.d.mts +12 -0
  156. package/es/base-ui/Drawer/atoms.mjs.map +1 -1
  157. package/es/base-ui/DropdownMenu/atoms.mjs +1 -1
  158. package/es/base-ui/DropdownMenu/atoms.mjs.map +1 -1
  159. package/es/base-ui/DropdownMenu/renderItems.d.mts +0 -1
  160. package/es/base-ui/DropdownMenu/renderItems.mjs.map +1 -1
  161. package/es/base-ui/Form/components/FormTitle.mjs +1 -1
  162. package/es/base-ui/Form/components/FormTitle.mjs.map +1 -1
  163. package/es/base-ui/Form/type.d.mts +2 -2
  164. package/es/base-ui/Input/ClearButton.mjs +32 -0
  165. package/es/base-ui/Input/ClearButton.mjs.map +1 -0
  166. package/es/base-ui/Input/Input.mjs +30 -4
  167. package/es/base-ui/Input/Input.mjs.map +1 -1
  168. package/es/base-ui/Input/InputNumber.mjs +43 -22
  169. package/es/base-ui/Input/InputNumber.mjs.map +1 -1
  170. package/es/base-ui/Input/TextArea.mjs +50 -13
  171. package/es/base-ui/Input/TextArea.mjs.map +1 -1
  172. package/es/base-ui/Input/clearNativeValue.mjs +12 -0
  173. package/es/base-ui/Input/clearNativeValue.mjs.map +1 -0
  174. package/es/base-ui/Input/pressEnter.mjs +6 -0
  175. package/es/base-ui/Input/pressEnter.mjs.map +1 -0
  176. package/es/base-ui/Input/style.d.mts +5 -1
  177. package/es/base-ui/Input/style.mjs +67 -4
  178. package/es/base-ui/Input/style.mjs.map +1 -1
  179. package/es/base-ui/Input/type.d.mts +13 -2
  180. package/es/base-ui/List/List.d.mts +6 -0
  181. package/es/base-ui/List/List.mjs +50 -0
  182. package/es/base-ui/List/List.mjs.map +1 -0
  183. package/es/base-ui/List/ListRow.mjs +74 -0
  184. package/es/base-ui/List/ListRow.mjs.map +1 -0
  185. package/es/base-ui/List/index.d.mts +3 -0
  186. package/es/base-ui/List/style.mjs +146 -0
  187. package/es/base-ui/List/style.mjs.map +1 -0
  188. package/es/base-ui/List/type.d.mts +48 -0
  189. package/es/base-ui/Modal/atoms.mjs.map +1 -1
  190. package/es/base-ui/Modal/imperative.mjs +1 -1
  191. package/es/base-ui/Modal/imperative.mjs.map +1 -1
  192. package/es/base-ui/Modal/type.d.mts +1 -0
  193. package/es/base-ui/Popover/PopoverPortal.mjs.map +1 -1
  194. package/es/base-ui/Progress/Progress.mjs +16 -14
  195. package/es/base-ui/Progress/Progress.mjs.map +1 -1
  196. package/es/base-ui/Progress/style.mjs +16 -25
  197. package/es/base-ui/Progress/style.mjs.map +1 -1
  198. package/es/base-ui/QRCode/QRCode.d.mts +6 -0
  199. package/es/base-ui/QRCode/QRCode.mjs +105 -0
  200. package/es/base-ui/QRCode/QRCode.mjs.map +1 -0
  201. package/es/base-ui/QRCode/index.d.mts +3 -0
  202. package/es/base-ui/QRCode/qrPath.mjs +16 -0
  203. package/es/base-ui/QRCode/qrPath.mjs.map +1 -0
  204. package/es/base-ui/QRCode/style.mjs +52 -0
  205. package/es/base-ui/QRCode/style.mjs.map +1 -0
  206. package/es/base-ui/QRCode/type.d.mts +19 -0
  207. package/es/base-ui/Rate/Rate.d.mts +6 -0
  208. package/es/base-ui/Rate/Rate.mjs +111 -0
  209. package/es/base-ui/Rate/Rate.mjs.map +1 -0
  210. package/es/base-ui/Rate/index.d.mts +3 -0
  211. package/es/base-ui/Rate/style.mjs +81 -0
  212. package/es/base-ui/Rate/style.mjs.map +1 -0
  213. package/es/base-ui/Rate/type.d.mts +19 -0
  214. package/es/base-ui/Select/atoms.mjs.map +1 -1
  215. package/es/base-ui/Select/hooks.mjs.map +1 -1
  216. package/es/base-ui/Statistic/Statistic.d.mts +6 -0
  217. package/es/base-ui/Statistic/Statistic.mjs +42 -0
  218. package/es/base-ui/Statistic/Statistic.mjs.map +1 -0
  219. package/es/base-ui/Statistic/formatValue.d.mts +5 -0
  220. package/es/base-ui/Statistic/formatValue.mjs +23 -0
  221. package/es/base-ui/Statistic/formatValue.mjs.map +1 -0
  222. package/es/base-ui/Statistic/index.d.mts +4 -0
  223. package/es/base-ui/Statistic/style.mjs +34 -0
  224. package/es/base-ui/Statistic/style.mjs.map +1 -0
  225. package/es/base-ui/Statistic/type.d.mts +23 -0
  226. package/es/base-ui/Steps/Steps.d.mts +6 -0
  227. package/es/base-ui/Steps/Steps.mjs +74 -0
  228. package/es/base-ui/Steps/Steps.mjs.map +1 -0
  229. package/es/base-ui/Steps/index.d.mts +3 -0
  230. package/es/base-ui/Steps/style.mjs +155 -0
  231. package/es/base-ui/Steps/style.mjs.map +1 -0
  232. package/es/base-ui/Steps/type.d.mts +32 -0
  233. package/es/base-ui/Table/FilterMenu.mjs +45 -0
  234. package/es/base-ui/Table/FilterMenu.mjs.map +1 -0
  235. package/es/base-ui/Table/Table.d.mts +10 -0
  236. package/es/base-ui/Table/Table.mjs +134 -0
  237. package/es/base-ui/Table/Table.mjs.map +1 -0
  238. package/es/base-ui/Table/TableBody.mjs +59 -0
  239. package/es/base-ui/Table/TableBody.mjs.map +1 -0
  240. package/es/base-ui/Table/TableHead.mjs +50 -0
  241. package/es/base-ui/Table/TableHead.mjs.map +1 -0
  242. package/es/base-ui/Table/features.mjs +12 -0
  243. package/es/base-ui/Table/features.mjs.map +1 -0
  244. package/es/base-ui/Table/fixedOffsets.mjs +29 -0
  245. package/es/base-ui/Table/fixedOffsets.mjs.map +1 -0
  246. package/es/base-ui/Table/index.d.mts +3 -0
  247. package/es/base-ui/Table/style.mjs +168 -0
  248. package/es/base-ui/Table/style.mjs.map +1 -0
  249. package/es/base-ui/Table/toColumnDefs.mjs +26 -0
  250. package/es/base-ui/Table/toColumnDefs.mjs.map +1 -0
  251. package/es/base-ui/Table/type.d.mts +68 -0
  252. package/es/base-ui/Table/useTableState.mjs +99 -0
  253. package/es/base-ui/Table/useTableState.mjs.map +1 -0
  254. package/es/base-ui/Toast/imperative.mjs.map +1 -1
  255. package/es/base-ui/Tooltip/TooltipGroup.mjs.map +1 -1
  256. package/es/base-ui/Tooltip/TooltipStandalone.mjs.map +1 -1
  257. package/es/base-ui/index.d.mts +66 -21
  258. package/es/base-ui/index.mjs +42 -26
  259. package/es/base-ui/panelStyles.mjs +95 -0
  260. package/es/base-ui/panelStyles.mjs.map +1 -0
  261. package/es/chat/ChatList/components/HistoryDivider.mjs +9 -6
  262. package/es/chat/ChatList/components/HistoryDivider.mjs.map +1 -1
  263. package/es/chat/MessageModal/MessageModal.mjs +1 -1
  264. package/es/chat/TokenTag/TokenTag.mjs +1 -1
  265. package/es/color/CssVar/VarRow.mjs +1 -1
  266. package/es/color/CssVar/index.mjs +1 -1
  267. package/es/dashboard/FilterSidebar/FilterSidebar.mjs +1 -1
  268. package/es/i18n/resources/en/burger.d.mts +8 -0
  269. package/es/i18n/resources/en/burger.mjs +9 -0
  270. package/es/i18n/resources/en/burger.mjs.map +1 -0
  271. package/es/i18n/resources/en/colorPicker.d.mts +12 -0
  272. package/es/i18n/resources/en/colorPicker.mjs +13 -0
  273. package/es/i18n/resources/en/colorPicker.mjs.map +1 -0
  274. package/es/i18n/resources/en/common.d.mts +1 -0
  275. package/es/i18n/resources/en/common.mjs +1 -0
  276. package/es/i18n/resources/en/common.mjs.map +1 -1
  277. package/es/i18n/resources/en/datePicker.d.mts +13 -0
  278. package/es/i18n/resources/en/datePicker.mjs +14 -0
  279. package/es/i18n/resources/en/datePicker.mjs.map +1 -0
  280. package/es/i18n/resources/en/index.d.mts +15 -11
  281. package/es/i18n/resources/en/index.mjs +9 -1
  282. package/es/i18n/resources/en/index.mjs.map +1 -1
  283. package/es/i18n/resources/en/qrCode.d.mts +9 -0
  284. package/es/i18n/resources/en/qrCode.mjs +10 -0
  285. package/es/i18n/resources/en/qrCode.mjs.map +1 -0
  286. package/es/i18n/resources/zhCn/burger.d.mts +8 -0
  287. package/es/i18n/resources/zhCn/burger.mjs +9 -0
  288. package/es/i18n/resources/zhCn/burger.mjs.map +1 -0
  289. package/es/i18n/resources/zhCn/colorPicker.d.mts +12 -0
  290. package/es/i18n/resources/zhCn/colorPicker.mjs +13 -0
  291. package/es/i18n/resources/zhCn/colorPicker.mjs.map +1 -0
  292. package/es/i18n/resources/zhCn/common.d.mts +1 -0
  293. package/es/i18n/resources/zhCn/common.mjs +1 -0
  294. package/es/i18n/resources/zhCn/common.mjs.map +1 -1
  295. package/es/i18n/resources/zhCn/datePicker.d.mts +13 -0
  296. package/es/i18n/resources/zhCn/datePicker.mjs +14 -0
  297. package/es/i18n/resources/zhCn/datePicker.mjs.map +1 -0
  298. package/es/i18n/resources/zhCn/index.d.mts +15 -11
  299. package/es/i18n/resources/zhCn/index.mjs +9 -1
  300. package/es/i18n/resources/zhCn/index.mjs.map +1 -1
  301. package/es/i18n/resources/zhCn/qrCode.d.mts +9 -0
  302. package/es/i18n/resources/zhCn/qrCode.mjs +10 -0
  303. package/es/i18n/resources/zhCn/qrCode.mjs.map +1 -0
  304. package/es/i18n/types.d.mts +14 -10
  305. package/es/index.d.mts +12 -11
  306. package/es/index.mjs +23 -23
  307. package/es/mdx/Cards/Card.d.mts +2 -2
  308. package/es/mdx/Cards/Card.mjs +1 -1
  309. package/es/mdx/Cards/Card.mjs.map +1 -1
  310. package/es/mdx/Mdx/index.mjs +1 -1
  311. package/es/mdx/Mdx/index.mjs.map +1 -1
  312. package/es/mdx/Tabs/index.d.mts +2 -2
  313. package/es/mdx/Tabs/index.mjs +7 -2
  314. package/es/mdx/Tabs/index.mjs.map +1 -1
  315. package/es/mdx/Tabs/style.mjs +33 -1
  316. package/es/mdx/Tabs/style.mjs.map +1 -1
  317. package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs +1 -1
  318. package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs.map +1 -1
  319. package/es/static-css/baseline.mjs +1 -4
  320. package/es/static-css/baseline.mjs.map +1 -1
  321. package/es/static-css/buildAntdStaticCss.mjs +1 -1
  322. package/package.json +3 -1
@@ -3,23 +3,29 @@ import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
3
  import Center from "../Flex/Center.mjs";
4
4
  import Icon from "../Icon/Icon.mjs";
5
5
  import Text from "../Text/Text.mjs";
6
- import Button$1 from "../Button/Button.mjs";
7
- import Tag$1 from "../Tag/Tag.mjs";
6
+ import Button from "../base-ui/Button/Button.mjs";
7
+ import UploadDragger from "../base-ui/Upload/UploadDragger.mjs";
8
+ import Tag from "../base-ui/Tag/Tag.mjs";
8
9
  import { useTranslation } from "../i18n/useTranslation.mjs";
9
10
  import emojiPicker_default from "../i18n/resources/en/emojiPicker.mjs";
11
+ import { ToastHost, toast } from "../base-ui/Toast/imperative.mjs";
10
12
  import { memo, useCallback, useRef, useState } from "react";
11
13
  import { jsx, jsxs } from "react/jsx-runtime";
12
- import { Upload, message } from "antd";
13
14
  import { cssVar } from "antd-style";
14
15
  import { ChevronLeftIcon, ImageUpIcon } from "lucide-react";
15
16
  import AvatarEditor from "react-avatar-editor";
16
17
  //#region src/EmojiPicker/AvatarUploader.tsx
17
- const { Dragger } = Upload;
18
- const createUploadImageHandler = (onUploadImage) => (file) => {
18
+ const ACCEPTED_IMAGE_TYPES = /* @__PURE__ */ new Set([
19
+ "image/jpeg",
20
+ "image/png",
21
+ "image/gif",
22
+ "image/webp"
23
+ ]);
24
+ const readAsDataURL = (file, onLoad) => {
19
25
  const reader = new FileReader();
20
26
  reader.readAsDataURL(file);
21
27
  reader.addEventListener("load", () => {
22
- onUploadImage(String(reader.result));
28
+ onLoad(String(reader.result));
23
29
  });
24
30
  };
25
31
  const AvatarUploader = memo(({ shape, onChange, texts, compressSize = 256, onUpload }) => {
@@ -29,14 +35,12 @@ const AvatarUploader = memo(({ shape, onChange, texts, compressSize = 256, onUpl
29
35
  const fileTypeErrorText = texts?.fileTypeError ?? t("emojiPicker.fileTypeError");
30
36
  const draggerDescText = texts?.draggerDesc ?? t("emojiPicker.draggerDesc");
31
37
  const uploadBtnText = texts?.uploadBtn ?? t("emojiPicker.uploadBtn");
32
- const beforeUpload = useCallback((file) => {
33
- if (!(file.type === "image/jpeg" || file.type === "image/png" || file.type === "image/gif" || file.type === "image/webp")) {
34
- message.error(fileTypeErrorText);
38
+ const handleFiles = useCallback(([file]) => {
39
+ if (!ACCEPTED_IMAGE_TYPES.has(file.type)) {
40
+ toast.error(fileTypeErrorText);
35
41
  return;
36
42
  }
37
- return createUploadImageHandler((avatar) => {
38
- setPreviewImage(avatar);
39
- })(file);
43
+ readAsDataURL(file, setPreviewImage);
40
44
  }, [fileTypeErrorText]);
41
45
  const handleUpload = () => {
42
46
  if (!editor.current) return;
@@ -51,69 +55,70 @@ const AvatarUploader = memo(({ shape, onChange, texts, compressSize = 256, onUpl
51
55
  padding: 10,
52
56
  style: { position: "relative" },
53
57
  width: "100%",
54
- children: [!previewImage && /* @__PURE__ */ jsx(Dragger, {
55
- accept: "image",
56
- beforeUpload,
57
- itemRender: () => void 0,
58
- maxCount: 1,
59
- multiple: false,
60
- children: /* @__PURE__ */ jsxs(Center, {
61
- gap: 16,
62
- height: compressSize,
63
- width: compressSize,
64
- children: [
65
- /* @__PURE__ */ jsx(Icon, {
66
- color: cssVar.colorTextDescription,
67
- icon: ImageUpIcon,
68
- size: 48
69
- }),
70
- /* @__PURE__ */ jsx(Text, {
71
- color: cssVar.colorTextSecondary,
72
- children: draggerDescText
73
- }),
74
- /* @__PURE__ */ jsxs(Center, {
75
- horizontal: true,
76
- gap: 4,
77
- children: [
78
- /* @__PURE__ */ jsx(Tag$1, { children: "JPG" }),
79
- /* @__PURE__ */ jsx(Tag$1, { children: "PNG" }),
80
- /* @__PURE__ */ jsx(Tag$1, { children: "GIF" }),
81
- /* @__PURE__ */ jsx(Tag$1, { children: "WEBP" })
82
- ]
83
- })
84
- ]
85
- })
86
- }), previewImage && /* @__PURE__ */ jsxs(Center, {
87
- gap: 8,
88
- style: { position: "relative" },
89
- width: "100%",
90
- children: [/* @__PURE__ */ jsx(AvatarEditor, {
91
- border: 0,
92
- borderRadius: shape === "square" ? void 0 : compressSize / 2,
93
- height: compressSize,
94
- image: previewImage,
95
- ref: editor,
96
- width: compressSize
97
- }), /* @__PURE__ */ jsxs(FlexBasic_default, {
98
- horizontal: true,
58
+ children: [
59
+ !previewImage && /* @__PURE__ */ jsx(UploadDragger, {
60
+ maxCount: 1,
61
+ onFiles: handleFiles,
62
+ children: /* @__PURE__ */ jsxs(Center, {
63
+ gap: 16,
64
+ height: compressSize,
65
+ width: compressSize,
66
+ children: [
67
+ /* @__PURE__ */ jsx(Icon, {
68
+ color: cssVar.colorTextDescription,
69
+ icon: ImageUpIcon,
70
+ size: 48
71
+ }),
72
+ /* @__PURE__ */ jsx(Text, {
73
+ color: cssVar.colorTextSecondary,
74
+ children: draggerDescText
75
+ }),
76
+ /* @__PURE__ */ jsxs(Center, {
77
+ horizontal: true,
78
+ gap: 4,
79
+ children: [
80
+ /* @__PURE__ */ jsx(Tag, { children: "JPG" }),
81
+ /* @__PURE__ */ jsx(Tag, { children: "PNG" }),
82
+ /* @__PURE__ */ jsx(Tag, { children: "GIF" }),
83
+ /* @__PURE__ */ jsx(Tag, { children: "WEBP" })
84
+ ]
85
+ })
86
+ ]
87
+ })
88
+ }),
89
+ previewImage && /* @__PURE__ */ jsxs(Center, {
99
90
  gap: 8,
100
91
  style: { position: "relative" },
101
92
  width: "100%",
102
- children: [/* @__PURE__ */ jsx(Button$1, {
103
- icon: ChevronLeftIcon,
104
- style: { flex: "none" },
105
- onClick: () => setPreviewImage("")
106
- }), /* @__PURE__ */ jsx(Button$1, {
107
- style: {
108
- flex: 1,
109
- fontWeight: 500
110
- },
111
- type: "primary",
112
- onClick: handleUpload,
113
- children: uploadBtnText
93
+ children: [/* @__PURE__ */ jsx(AvatarEditor, {
94
+ border: 0,
95
+ borderRadius: shape === "square" ? void 0 : compressSize / 2,
96
+ height: compressSize,
97
+ image: previewImage,
98
+ ref: editor,
99
+ width: compressSize
100
+ }), /* @__PURE__ */ jsxs(FlexBasic_default, {
101
+ horizontal: true,
102
+ gap: 8,
103
+ style: { position: "relative" },
104
+ width: "100%",
105
+ children: [/* @__PURE__ */ jsx(Button, {
106
+ icon: ChevronLeftIcon,
107
+ style: { flex: "none" },
108
+ onClick: () => setPreviewImage("")
109
+ }), /* @__PURE__ */ jsx(Button, {
110
+ style: {
111
+ flex: 1,
112
+ fontWeight: 500
113
+ },
114
+ type: "primary",
115
+ onClick: handleUpload,
116
+ children: uploadBtnText
117
+ })]
114
118
  })]
115
- })]
116
- })]
119
+ }),
120
+ /* @__PURE__ */ jsx(ToastHost, {})
121
+ ]
117
122
  });
118
123
  });
119
124
  AvatarUploader.displayName = "AvatarUploader";
@@ -1 +1 @@
1
- {"version":3,"file":"AvatarUploader.mjs","names":["emojiPickerMessages","Flexbox","Tag","Button"],"sources":["../../src/EmojiPicker/AvatarUploader.tsx"],"sourcesContent":["'use client';\n\nimport { type GetProp, message, Upload, type UploadProps } from 'antd';\nimport { cssVar } from 'antd-style';\nimport { ChevronLeftIcon, ImageUpIcon } from 'lucide-react';\nimport { memo, useCallback, useRef, useState } from 'react';\nimport AvatarEditor from 'react-avatar-editor';\n\nimport Button from '@/Button';\nimport { Center, Flexbox } from '@/Flex';\nimport emojiPickerMessages from '@/i18n/resources/en/emojiPicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\nimport Tag from '@/Tag';\nimport Text from '@/Text';\n\nimport { type AvatarUploaderProps } from './type';\n\ntype FileType = Parameters<GetProp<UploadProps, 'beforeUpload'>>[0];\n\nconst { Dragger } = Upload;\n\nconst createUploadImageHandler = (onUploadImage: (base64: string) => void) => (file: any) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.addEventListener('load', () => {\n onUploadImage(String(reader.result));\n });\n};\n\nconst AvatarUploader = memo<AvatarUploaderProps>(\n ({ shape, onChange, texts, compressSize = 256, onUpload }) => {\n const editor = useRef<any>(null);\n const [previewImage, setPreviewImage] = useState('');\n const { t } = useTranslation(emojiPickerMessages);\n\n const fileTypeErrorText = texts?.fileTypeError ?? t('emojiPicker.fileTypeError');\n const draggerDescText = texts?.draggerDesc ?? t('emojiPicker.draggerDesc');\n const uploadBtnText = texts?.uploadBtn ?? t('emojiPicker.uploadBtn');\n\n const beforeUpload = useCallback(\n (file: FileType) => {\n const isJpgOrPng =\n file.type === 'image/jpeg' ||\n file.type === 'image/png' ||\n file.type === 'image/gif' ||\n file.type === 'image/webp';\n if (!isJpgOrPng) {\n message.error(fileTypeErrorText);\n return;\n }\n return createUploadImageHandler((avatar) => {\n setPreviewImage(avatar);\n })(file);\n },\n [fileTypeErrorText],\n );\n\n const handleUpload = () => {\n if (!editor.current) return;\n const canvasScaled = editor.current.getImageScaledToCanvas() as HTMLCanvasElement;\n const dataUrl = canvasScaled.toDataURL();\n onChange(dataUrl);\n\n if (!onUpload) return;\n\n // 使用 toBlob 直接获取 Blob,然后创建 File 对象\n canvasScaled.toBlob(\n (blob) => {\n if (blob) {\n const file = new File([blob], 'avatar.webp', { type: 'image/webp' });\n onUpload(file);\n }\n },\n 'image/webp',\n 0.95,\n ); // 0.95 是图片质量\n };\n\n return (\n <Flexbox padding={10} style={{ position: 'relative' }} width={'100%'}>\n {!previewImage && (\n <Dragger\n accept={'image'}\n beforeUpload={beforeUpload}\n itemRender={() => void 0}\n maxCount={1}\n multiple={false}\n >\n <Center gap={16} height={compressSize} width={compressSize}>\n <Icon color={cssVar.colorTextDescription} icon={ImageUpIcon} size={48} />\n <Text color={cssVar.colorTextSecondary}>{draggerDescText}</Text>\n <Center horizontal gap={4}>\n <Tag>JPG</Tag>\n <Tag>PNG</Tag>\n <Tag>GIF</Tag>\n <Tag>WEBP</Tag>\n </Center>\n </Center>\n </Dragger>\n )}\n {previewImage && (\n <Center gap={8} style={{ position: 'relative' }} width={'100%'}>\n <AvatarEditor\n border={0}\n borderRadius={shape === 'square' ? undefined : compressSize / 2}\n height={compressSize}\n image={previewImage}\n ref={editor}\n width={compressSize}\n />\n\n <Flexbox horizontal gap={8} style={{ position: 'relative' }} width={'100%'}>\n <Button\n icon={ChevronLeftIcon}\n style={{ flex: 'none' }}\n onClick={() => setPreviewImage('')}\n />\n <Button style={{ flex: 1, fontWeight: 500 }} type={'primary'} onClick={handleUpload}>\n {uploadBtnText}\n </Button>\n </Flexbox>\n </Center>\n )}\n </Flexbox>\n );\n },\n);\n\nAvatarUploader.displayName = 'AvatarUploader';\n\nexport default AvatarUploader;\n"],"mappings":"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"}
1
+ {"version":3,"file":"AvatarUploader.mjs","names":["emojiPickerMessages","Flexbox"],"sources":["../../src/EmojiPicker/AvatarUploader.tsx"],"sourcesContent":["'use client';\n\nimport { cssVar } from 'antd-style';\nimport { ChevronLeftIcon, ImageUpIcon } from 'lucide-react';\nimport { memo, useCallback, useRef, useState } from 'react';\nimport AvatarEditor from 'react-avatar-editor';\n\nimport Button from '@/base-ui/Button';\nimport Tag from '@/base-ui/Tag';\nimport { toast, ToastHost } from '@/base-ui/Toast';\nimport { UploadDragger } from '@/base-ui/Upload';\nimport { Center, Flexbox } from '@/Flex';\nimport emojiPickerMessages from '@/i18n/resources/en/emojiPicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\nimport Text from '@/Text';\n\nimport { type AvatarUploaderProps } from './type';\n\nconst ACCEPTED_IMAGE_TYPES = new Set(['image/jpeg', 'image/png', 'image/gif', 'image/webp']);\n\nconst readAsDataURL = (file: File, onLoad: (dataUrl: string) => void) => {\n const reader = new FileReader();\n reader.readAsDataURL(file);\n reader.addEventListener('load', () => {\n onLoad(String(reader.result));\n });\n};\n\nconst AvatarUploader = memo<AvatarUploaderProps>(\n ({ shape, onChange, texts, compressSize = 256, onUpload }) => {\n const editor = useRef<any>(null);\n const [previewImage, setPreviewImage] = useState('');\n const { t } = useTranslation(emojiPickerMessages);\n\n const fileTypeErrorText = texts?.fileTypeError ?? t('emojiPicker.fileTypeError');\n const draggerDescText = texts?.draggerDesc ?? t('emojiPicker.draggerDesc');\n const uploadBtnText = texts?.uploadBtn ?? t('emojiPicker.uploadBtn');\n\n const handleFiles = useCallback(\n ([file]: File[]) => {\n if (!ACCEPTED_IMAGE_TYPES.has(file.type)) {\n toast.error(fileTypeErrorText);\n return;\n }\n readAsDataURL(file, setPreviewImage);\n },\n [fileTypeErrorText],\n );\n\n const handleUpload = () => {\n if (!editor.current) return;\n const canvasScaled = editor.current.getImageScaledToCanvas() as HTMLCanvasElement;\n const dataUrl = canvasScaled.toDataURL();\n onChange(dataUrl);\n\n if (!onUpload) return;\n\n // 使用 toBlob 直接获取 Blob,然后创建 File 对象\n canvasScaled.toBlob(\n (blob) => {\n if (blob) {\n const file = new File([blob], 'avatar.webp', { type: 'image/webp' });\n onUpload(file);\n }\n },\n 'image/webp',\n 0.95,\n ); // 0.95 是图片质量\n };\n\n return (\n <Flexbox padding={10} style={{ position: 'relative' }} width={'100%'}>\n {!previewImage && (\n <UploadDragger maxCount={1} onFiles={handleFiles}>\n <Center gap={16} height={compressSize} width={compressSize}>\n <Icon color={cssVar.colorTextDescription} icon={ImageUpIcon} size={48} />\n <Text color={cssVar.colorTextSecondary}>{draggerDescText}</Text>\n <Center horizontal gap={4}>\n <Tag>JPG</Tag>\n <Tag>PNG</Tag>\n <Tag>GIF</Tag>\n <Tag>WEBP</Tag>\n </Center>\n </Center>\n </UploadDragger>\n )}\n {previewImage && (\n <Center gap={8} style={{ position: 'relative' }} width={'100%'}>\n <AvatarEditor\n border={0}\n borderRadius={shape === 'square' ? undefined : compressSize / 2}\n height={compressSize}\n image={previewImage}\n ref={editor}\n width={compressSize}\n />\n\n <Flexbox horizontal gap={8} style={{ position: 'relative' }} width={'100%'}>\n <Button\n icon={ChevronLeftIcon}\n style={{ flex: 'none' }}\n onClick={() => setPreviewImage('')}\n />\n <Button style={{ flex: 1, fontWeight: 500 }} type={'primary'} onClick={handleUpload}>\n {uploadBtnText}\n </Button>\n </Flexbox>\n </Center>\n )}\n <ToastHost />\n </Flexbox>\n );\n },\n);\n\nAvatarUploader.displayName = 'AvatarUploader';\n\nexport default AvatarUploader;\n"],"mappings":";;;;;;;;;;;;;;;;;AAmBA,MAAM,uCAAuB,IAAI,IAAI;CAAC;CAAc;CAAa;CAAa;AAAY,CAAC;AAE3F,MAAM,iBAAiB,MAAY,WAAsC;CACvE,MAAM,SAAS,IAAI,WAAW;CAC9B,OAAO,cAAc,IAAI;CACzB,OAAO,iBAAiB,cAAc;EACpC,OAAO,OAAO,OAAO,MAAM,CAAC;CAC9B,CAAC;AACH;AAEA,MAAM,iBAAiB,MACpB,EAAE,OAAO,UAAU,OAAO,eAAe,KAAK,eAAe;CAC5D,MAAM,SAAS,OAAY,IAAI;CAC/B,MAAM,CAAC,cAAc,mBAAmB,SAAS,EAAE;CACnD,MAAM,EAAE,MAAM,eAAeA,mBAAmB;CAEhD,MAAM,oBAAoB,OAAO,iBAAiB,EAAE,2BAA2B;CAC/E,MAAM,kBAAkB,OAAO,eAAe,EAAE,yBAAyB;CACzE,MAAM,gBAAgB,OAAO,aAAa,EAAE,uBAAuB;CAEnE,MAAM,cAAc,aACjB,CAAC,UAAkB;EAClB,IAAI,CAAC,qBAAqB,IAAI,KAAK,IAAI,GAAG;GACxC,MAAM,MAAM,iBAAiB;GAC7B;EACF;EACA,cAAc,MAAM,eAAe;CACrC,GACA,CAAC,iBAAiB,CACpB;CAEA,MAAM,qBAAqB;EACzB,IAAI,CAAC,OAAO,SAAS;EACrB,MAAM,eAAe,OAAO,QAAQ,uBAAuB;EAE3D,SADgB,aAAa,UACd,CAAC;EAEhB,IAAI,CAAC,UAAU;EAGf,aAAa,QACV,SAAS;GACR,IAAI,MAEF,SAAS,IADQ,KAAK,CAAC,IAAI,GAAG,eAAe,EAAE,MAAM,aAAa,CACtD,CAAC;EAEjB,GACA,cACA,GACF;CACF;CAEA,OACE,qBAACC,mBAAD;EAAS,SAAS;EAAI,OAAO,EAAE,UAAU,WAAW;EAAG,OAAO;EAA9D,UAAA;GACG,CAAC,gBACA,oBAAC,eAAD;IAAe,UAAU;IAAG,SAAS;IACnC,UAAA,qBAAC,QAAD;KAAQ,KAAK;KAAI,QAAQ;KAAc,OAAO;KAA9C,UAAA;MACE,oBAAC,MAAD;OAAM,OAAO,OAAO;OAAsB,MAAM;OAAa,MAAM;MAAK,CAAA;MACxE,oBAAC,MAAD;OAAM,OAAO,OAAO;OAAqB,UAAA;MAAsB,CAAA;MAC/D,qBAAC,QAAD;OAAQ,YAAA;OAAW,KAAK;OAAxB,UAAA;QACE,oBAAC,KAAD,EAAA,UAAK,MAAQ,CAAA;QACb,oBAAC,KAAD,EAAA,UAAK,MAAQ,CAAA;QACb,oBAAC,KAAD,EAAA,UAAK,MAAQ,CAAA;QACb,oBAAC,KAAD,EAAA,UAAK,OAAS,CAAA;OACR;;KACF;;GACK,CAAA;GAEhB,gBACC,qBAAC,QAAD;IAAQ,KAAK;IAAG,OAAO,EAAE,UAAU,WAAW;IAAG,OAAO;IAAxD,UAAA,CACE,oBAAC,cAAD;KACE,QAAQ;KACR,cAAc,UAAU,WAAW,KAAA,IAAY,eAAe;KAC9D,QAAQ;KACR,OAAO;KACP,KAAK;KACL,OAAO;IACR,CAAA,GAED,qBAACA,mBAAD;KAAS,YAAA;KAAW,KAAK;KAAG,OAAO,EAAE,UAAU,WAAW;KAAG,OAAO;KAApE,UAAA,CACE,oBAAC,QAAD;MACE,MAAM;MACN,OAAO,EAAE,MAAM,OAAO;MACtB,eAAe,gBAAgB,EAAE;KAClC,CAAA,GACD,oBAAC,QAAD;MAAQ,OAAO;OAAE,MAAM;OAAG,YAAY;MAAI;MAAG,MAAM;MAAW,SAAS;MACpE,UAAA;KACK,CAAA,CACD;IACH,CAAA,CAAA;;GAEV,oBAAC,WAAD,CAAY,CAAA;EACL;;AAEb,CACF;AAEA,eAAe,cAAc"}
@@ -3,11 +3,11 @@ import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
3
  import Icon from "../Icon/Icon.mjs";
4
4
  import { Tooltip } from "../base-ui/Tooltip/Tooltip.mjs";
5
5
  import ActionIcon from "../base-ui/ActionIcon/ActionIcon.mjs";
6
- import Avatar from "../Avatar/index.mjs";
7
6
  import { useTranslation } from "../i18n/useTranslation.mjs";
8
- import emojiPicker_default from "../i18n/resources/en/emojiPicker.mjs";
9
7
  import Popover from "../base-ui/Popover/Popover.mjs";
10
- import Tabs from "../Tabs/Tabs.mjs";
8
+ import Avatar from "../base-ui/Avatar/index.mjs";
9
+ import Tabs from "../base-ui/Tabs/Tabs.mjs";
10
+ import emojiPicker_default from "../i18n/resources/en/emojiPicker.mjs";
11
11
  import AvatarUploader from "./AvatarUploader.mjs";
12
12
  import { styles } from "./style.mjs";
13
13
  import { memo, useMemo, useRef, useState } from "react";
@@ -18,7 +18,8 @@ import { SmileIcon, TrashIcon, UploadIcon } from "lucide-react";
18
18
  import chroma from "chroma-js";
19
19
  import data from "@emoji-mart/data";
20
20
  import Picker from "@emoji-mart/react";
21
- import { getLobeIconCDN, toc } from "@lobehub/icons";
21
+ import { getLobeIconCDN } from "@lobehub/icons/es/features/getLobeIconCDN/index.js";
22
+ import { toc } from "@lobehub/icons/es/toc.js";
22
23
  import useSWR from "swr";
23
24
  //#region src/EmojiPicker/EmojiPicker.tsx
24
25
  const DEFAULT_AVATAR = "🤖";
@@ -127,10 +128,15 @@ const EmojiPicker = memo(({ value, defaultAvatar = DEFAULT_AVATAR, onChange, loc
127
128
  justify: "space-between",
128
129
  paddingInline: 10,
129
130
  children: [/* @__PURE__ */ jsx(Tabs, {
130
- compact: true,
131
131
  activeKey: tab,
132
132
  items,
133
- size: "small",
133
+ variant: "square",
134
+ classNames: {
135
+ indicator: styles.tabsIndicator,
136
+ list: styles.tabsList,
137
+ root: styles.tabsRoot,
138
+ tab: styles.tab
139
+ },
134
140
  onChange: (key) => setTab(key)
135
141
  }), allowDelete && /* @__PURE__ */ jsx(ActionIcon, {
136
142
  icon: TrashIcon,
@@ -1 +1 @@
1
- {"version":3,"file":"EmojiPicker.mjs","names":["emojiPickerMessages","Flexbox"],"sources":["../../src/EmojiPicker/EmojiPicker.tsx"],"sourcesContent":["'use client';\n\nimport data from '@emoji-mart/data';\nimport Picker from '@emoji-mart/react';\nimport { getLobeIconCDN, toc } from '@lobehub/icons';\nimport { cx, useTheme } from 'antd-style';\nimport chroma from 'chroma-js';\nimport { SmileIcon, TrashIcon, UploadIcon } from 'lucide-react';\nimport { memo, useMemo, useRef, useState } from 'react';\nimport useSWR from 'swr';\nimport useMergeState from 'use-merge-value';\n\nimport Avatar from '@/Avatar';\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport { Flexbox } from '@/Flex';\nimport emojiPickerMessages from '@/i18n/resources/en/emojiPicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\nimport Popover from '@/Popover';\nimport Tabs, { type TabsProps } from '@/Tabs';\nimport Tooltip from '@/Tooltip';\n\nimport AvatarUploader from './AvatarUploader';\nimport { styles } from './style';\nimport { type EmojiPickerProps } from './type';\n\nconst DEFAULT_AVATAR = '🤖';\n\nconst EmojiPicker = memo<EmojiPickerProps>(\n ({\n value,\n defaultAvatar = DEFAULT_AVATAR,\n onChange,\n locale = 'en-US',\n allowUpload,\n allowDelete,\n allowModelAvatar,\n texts,\n onDelete,\n compressSize = 256,\n customEmojis,\n className,\n loading,\n onUpload,\n customTabs = [],\n popupClassName,\n popupStyle,\n customRender,\n open,\n defaultOpen = false,\n onOpenChange,\n popupProps,\n shape,\n contentProps,\n ...rest\n }) => {\n const ref = useRef<HTMLDivElement>(null);\n const { t } = useTranslation(emojiPickerMessages);\n const [visible, setVisible] = useMergeState(defaultOpen, {\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n value: open,\n });\n const [tab, setTab] = useState<'emoji' | 'upload'>('emoji');\n\n const theme = useTheme();\n const pickerCssVariables = useMemo<Record<string, string>>(\n () => ({\n '--emoji-picker-rgb-accent': chroma(theme.colorPrimary).rgb().join(', '),\n '--emoji-picker-rgb-background': chroma(theme.colorBgElevated).rgb().join(', '),\n }),\n [theme.colorPrimary, theme.colorBgElevated],\n );\n\n const { data: i18n } = useSWR(\n locale,\n async () =>\n await import(/* @vite-ignore */ `@emoji-mart/data/i18n/${locale.split('-')[0]}.json`),\n { revalidateOnFocus: false, revalidateOnMount: false },\n );\n\n const [ava, setAva] = useMergeState(defaultAvatar, {\n defaultValue: defaultAvatar,\n onChange,\n value,\n });\n\n const handleAvatarChange = (emoji: string) => {\n setAva(emoji);\n setVisible(false);\n };\n\n // Generate model avatars from @lobehub/icons when allowModelAvatar is enabled\n const mergedCustomEmojis = useMemo(() => {\n if (!allowModelAvatar) return customEmojis;\n\n const modelIcons = toc.filter((item) => item.group !== 'application');\n\n const modelEmojisCategory = {\n id: 'models',\n name: 'Models / Providers',\n emojis: modelIcons.map((item) => ({\n id: item.id.toLowerCase(),\n name: item.title,\n keywords: [item.title, item.id, item.fullTitle],\n skins: [{ src: getLobeIconCDN(item.id, { format: 'avatar', cdn: 'aliyun' }) }],\n })),\n };\n\n return customEmojis ? [modelEmojisCategory, ...customEmojis] : [modelEmojisCategory];\n }, [allowModelAvatar, customEmojis]);\n\n const emojiText = texts?.emoji ?? t('emojiPicker.emoji');\n const uploadText = texts?.upload ?? t('emojiPicker.upload');\n const deleteText = texts?.delete ?? t('emojiPicker.delete');\n\n const hideEmojiTab = typeof allowUpload === 'object' && allowUpload?.enableEmoji === false;\n\n const items: TabsProps['items'] = [\n !hideEmojiTab && {\n key: 'emoji',\n label: (\n <Tooltip title={emojiText}>\n <Icon icon={SmileIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n allowUpload && {\n key: 'upload',\n label: (\n <Tooltip title={uploadText}>\n <Icon icon={UploadIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n ...customTabs.map((tab) => ({ key: tab.value, label: tab.label })),\n ].filter(Boolean) as TabsProps['items'];\n\n const showTabs = allowDelete || (items && items.length > 1);\n\n const content = (\n <Flexbox\n className={cx(styles.picker, popupClassName)}\n ref={ref}\n style={{\n minWidth: 310,\n paddingTop: showTabs ? 4 : 0,\n ...pickerCssVariables,\n ...popupStyle,\n }}\n {...contentProps}\n >\n {showTabs && (\n <Flexbox\n horizontal\n align={'center'}\n className={styles.tabs}\n justify={'space-between'}\n paddingInline={10}\n >\n <Tabs\n compact\n activeKey={tab}\n items={items}\n size={'small'}\n onChange={(key) => setTab(key as any)}\n />\n {allowDelete && (\n <ActionIcon\n icon={TrashIcon}\n title={deleteText}\n size={{\n blockSize: 32,\n size: 18,\n }}\n onClick={() => {\n handleAvatarChange(defaultAvatar);\n onDelete?.();\n }}\n />\n )}\n </Flexbox>\n )}\n {tab === 'emoji' && (\n <Picker\n custom={mergedCustomEmojis}\n data={data}\n i18n={i18n}\n icons={'outline'}\n locale={locale.split('-')[0]}\n navPosition={showTabs ? 'bottom' : 'top'}\n previewPosition={'none'}\n skinTonePosition={'none'}\n theme={theme.isDarkMode ? 'dark' : 'light'}\n onEmojiSelect={(e: any) => handleAvatarChange(e.src || e.native)}\n />\n )}\n {tab === 'upload' && (\n <AvatarUploader\n compressSize={compressSize}\n shape={shape}\n texts={texts}\n onChange={handleAvatarChange}\n onUpload={onUpload}\n />\n )}\n {customTabs.map(\n (item) =>\n tab === item.value && (\n <Flexbox key={item.value} padding={10}>\n {item.render(handleAvatarChange)}\n </Flexbox>\n ),\n )}\n </Flexbox>\n );\n\n return (\n <Popover\n className={cx(styles.popover)}\n content={content}\n defaultOpen={defaultOpen}\n open={visible}\n placement={'bottom'}\n trigger={'click'}\n classNames={{\n content: styles.popover,\n root: styles.positioner,\n }}\n onOpenChange={(v) => {\n if (loading) return;\n setVisible(v);\n }}\n {...popupProps}\n >\n {customRender ? (\n customRender(ava)\n ) : (\n <Avatar\n avatar={ava}\n className={cx(styles.root, className)}\n loading={loading}\n shape={shape}\n {...rest}\n />\n )}\n </Popover>\n );\n },\n);\n\nEmojiPicker.displayName = 'EmojiPicker';\n\nexport default EmojiPicker;\n"],"mappings":"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"}
1
+ {"version":3,"file":"EmojiPicker.mjs","names":["emojiPickerMessages","Flexbox"],"sources":["../../src/EmojiPicker/EmojiPicker.tsx"],"sourcesContent":["'use client';\n\nimport data from '@emoji-mart/data';\nimport Picker from '@emoji-mart/react';\nimport { getLobeIconCDN } from '@lobehub/icons/es/features/getLobeIconCDN';\nimport { toc } from '@lobehub/icons/es/toc';\nimport { cx, useTheme } from 'antd-style';\nimport chroma from 'chroma-js';\nimport { SmileIcon, TrashIcon, UploadIcon } from 'lucide-react';\nimport { memo, useMemo, useRef, useState } from 'react';\nimport useSWR from 'swr';\nimport useMergeState from 'use-merge-value';\n\nimport ActionIcon from '@/base-ui/ActionIcon';\nimport Avatar from '@/base-ui/Avatar';\nimport Tabs, { type TabsProps } from '@/base-ui/Tabs';\nimport { Flexbox } from '@/Flex';\nimport emojiPickerMessages from '@/i18n/resources/en/emojiPicker';\nimport { useTranslation } from '@/i18n/useTranslation';\nimport Icon from '@/Icon';\nimport Popover from '@/Popover';\nimport Tooltip from '@/Tooltip';\n\nimport AvatarUploader from './AvatarUploader';\nimport { styles } from './style';\nimport { type EmojiPickerProps } from './type';\n\nconst DEFAULT_AVATAR = '🤖';\n\nconst EmojiPicker = memo<EmojiPickerProps>(\n ({\n value,\n defaultAvatar = DEFAULT_AVATAR,\n onChange,\n locale = 'en-US',\n allowUpload,\n allowDelete,\n allowModelAvatar,\n texts,\n onDelete,\n compressSize = 256,\n customEmojis,\n className,\n loading,\n onUpload,\n customTabs = [],\n popupClassName,\n popupStyle,\n customRender,\n open,\n defaultOpen = false,\n onOpenChange,\n popupProps,\n shape,\n contentProps,\n ...rest\n }) => {\n const ref = useRef<HTMLDivElement>(null);\n const { t } = useTranslation(emojiPickerMessages);\n const [visible, setVisible] = useMergeState(defaultOpen, {\n defaultValue: defaultOpen,\n onChange: onOpenChange,\n value: open,\n });\n const [tab, setTab] = useState<'emoji' | 'upload'>('emoji');\n\n const theme = useTheme();\n const pickerCssVariables = useMemo<Record<string, string>>(\n () => ({\n '--emoji-picker-rgb-accent': chroma(theme.colorPrimary).rgb().join(', '),\n '--emoji-picker-rgb-background': chroma(theme.colorBgElevated).rgb().join(', '),\n }),\n [theme.colorPrimary, theme.colorBgElevated],\n );\n\n const { data: i18n } = useSWR(\n locale,\n async () =>\n await import(/* @vite-ignore */ `@emoji-mart/data/i18n/${locale.split('-')[0]}.json`),\n { revalidateOnFocus: false, revalidateOnMount: false },\n );\n\n const [ava, setAva] = useMergeState(defaultAvatar, {\n defaultValue: defaultAvatar,\n onChange,\n value,\n });\n\n const handleAvatarChange = (emoji: string) => {\n setAva(emoji);\n setVisible(false);\n };\n\n // Generate model avatars from @lobehub/icons when allowModelAvatar is enabled\n const mergedCustomEmojis = useMemo(() => {\n if (!allowModelAvatar) return customEmojis;\n\n const modelIcons = toc.filter((item) => item.group !== 'application');\n\n const modelEmojisCategory = {\n id: 'models',\n name: 'Models / Providers',\n emojis: modelIcons.map((item) => ({\n id: item.id.toLowerCase(),\n name: item.title,\n keywords: [item.title, item.id, item.fullTitle],\n skins: [{ src: getLobeIconCDN(item.id, { format: 'avatar', cdn: 'aliyun' }) }],\n })),\n };\n\n return customEmojis ? [modelEmojisCategory, ...customEmojis] : [modelEmojisCategory];\n }, [allowModelAvatar, customEmojis]);\n\n const emojiText = texts?.emoji ?? t('emojiPicker.emoji');\n const uploadText = texts?.upload ?? t('emojiPicker.upload');\n const deleteText = texts?.delete ?? t('emojiPicker.delete');\n\n const hideEmojiTab = typeof allowUpload === 'object' && allowUpload?.enableEmoji === false;\n\n const items: TabsProps['items'] = [\n !hideEmojiTab && {\n key: 'emoji',\n label: (\n <Tooltip title={emojiText}>\n <Icon icon={SmileIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n allowUpload && {\n key: 'upload',\n label: (\n <Tooltip title={uploadText}>\n <Icon icon={UploadIcon} size={{ size: 20, strokeWidth: 2.5 }} />\n </Tooltip>\n ),\n },\n ...customTabs.map((tab) => ({ key: tab.value, label: tab.label })),\n ].filter(Boolean) as TabsProps['items'];\n\n const showTabs = allowDelete || (items && items.length > 1);\n\n const content = (\n <Flexbox\n className={cx(styles.picker, popupClassName)}\n ref={ref}\n style={{\n minWidth: 310,\n paddingTop: showTabs ? 4 : 0,\n ...pickerCssVariables,\n ...popupStyle,\n }}\n {...contentProps}\n >\n {showTabs && (\n <Flexbox\n horizontal\n align={'center'}\n className={styles.tabs}\n justify={'space-between'}\n paddingInline={10}\n >\n <Tabs\n activeKey={tab}\n items={items}\n variant={'square'}\n classNames={{\n indicator: styles.tabsIndicator,\n list: styles.tabsList,\n root: styles.tabsRoot,\n tab: styles.tab,\n }}\n onChange={(key) => setTab(key as any)}\n />\n {allowDelete && (\n <ActionIcon\n icon={TrashIcon}\n title={deleteText}\n size={{\n blockSize: 32,\n size: 18,\n }}\n onClick={() => {\n handleAvatarChange(defaultAvatar);\n onDelete?.();\n }}\n />\n )}\n </Flexbox>\n )}\n {tab === 'emoji' && (\n <Picker\n custom={mergedCustomEmojis}\n data={data}\n i18n={i18n}\n icons={'outline'}\n locale={locale.split('-')[0]}\n navPosition={showTabs ? 'bottom' : 'top'}\n previewPosition={'none'}\n skinTonePosition={'none'}\n theme={theme.isDarkMode ? 'dark' : 'light'}\n onEmojiSelect={(e: any) => handleAvatarChange(e.src || e.native)}\n />\n )}\n {tab === 'upload' && (\n <AvatarUploader\n compressSize={compressSize}\n shape={shape}\n texts={texts}\n onChange={handleAvatarChange}\n onUpload={onUpload}\n />\n )}\n {customTabs.map(\n (item) =>\n tab === item.value && (\n <Flexbox key={item.value} padding={10}>\n {item.render(handleAvatarChange)}\n </Flexbox>\n ),\n )}\n </Flexbox>\n );\n\n return (\n <Popover\n className={cx(styles.popover)}\n content={content}\n defaultOpen={defaultOpen}\n open={visible}\n placement={'bottom'}\n trigger={'click'}\n classNames={{\n content: styles.popover,\n root: styles.positioner,\n }}\n onOpenChange={(v) => {\n if (loading) return;\n setVisible(v);\n }}\n {...popupProps}\n >\n {customRender ? (\n customRender(ava)\n ) : (\n <Avatar\n avatar={ava}\n className={cx(styles.root, className)}\n loading={loading}\n shape={shape}\n {...rest}\n />\n )}\n </Popover>\n );\n },\n);\n\nEmojiPicker.displayName = 'EmojiPicker';\n\nexport default EmojiPicker;\n"],"mappings":"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"}
@@ -26,17 +26,40 @@ const styles = createStaticStyles(({ css, cssVar }) => ({
26
26
  background: ${cssVar.colorFillSecondary};
27
27
  }
28
28
  `,
29
- tabs: css`
30
- border-block-end: 1px solid ${cssVar.colorBorderSecondary};
31
-
32
- .ant-tabs-tab {
33
- display: flex;
34
- align-items: center;
35
- justify-content: center;
36
-
29
+ tab: css`
30
+ && {
37
31
  width: 32px;
38
32
  height: 32px;
39
- padding: 0 !important;
33
+ padding: 0;
34
+ border-radius: ${cssVar.borderRadius};
35
+
36
+ transition: background-color 100ms ease-out;
37
+ }
38
+
39
+ &&:hover:not([data-disabled]) {
40
+ background: ${cssVar.colorFillTertiary};
41
+ }
42
+ `,
43
+ tabs: css`
44
+ border-block-end: 1px solid ${cssVar.colorBorderSecondary};
45
+ `,
46
+ tabsIndicator: css`
47
+ && {
48
+ height: 3px;
49
+ border-start-start-radius: 3px;
50
+ border-start-end-radius: 3px;
51
+ }
52
+ `,
53
+ tabsList: css`
54
+ && {
55
+ gap: 8px;
56
+ padding: 4px;
57
+ box-shadow: none;
58
+ }
59
+ `,
60
+ tabsRoot: css`
61
+ && {
62
+ width: auto;
40
63
  }
41
64
  `
42
65
  }));
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","names":[],"sources":["../../src/EmojiPicker/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n picker: css`\n position: relative;\n\n em-emoji-picker {\n --rgb-accent: var(--emoji-picker-rgb-accent, 0, 0, 0);\n --shadow: none;\n --rgb-background: var(--emoji-picker-rgb-background, 255, 255, 255);\n --border-radius: 0;\n }\n `,\n popover: css`\n overflow: hidden;\n padding: 0;\n `,\n positioner: css`\n width: fit-content !important;\n `,\n root: css`\n position: relative;\n transition: background 150ms ${cssVar.motionEaseOut};\n\n &:hover {\n background: ${cssVar.colorFillSecondary};\n }\n `,\n tabs: css`\n border-block-end: 1px solid ${cssVar.colorBorderSecondary};\n\n .ant-tabs-tab {\n display: flex;\n align-items: center;\n justify-content: center;\n\n width: 32px;\n height: 32px;\n padding: 0 !important;\n }\n `,\n}));\n"],"mappings":";;AAEA,MAAa,SAAS,oBAAoB,EAAE,KAAK,cAAc;CAC7D,QAAQ,GAAG;;;;;;;;;;CAUX,SAAS,GAAG;;;;CAIZ,YAAY,GAAG;;;CAGf,MAAM,GAAG;;mCAEwB,OAAO,cAAc;;;oBAGpC,OAAO,mBAAmB;;;CAG5C,MAAM,GAAG;kCACuB,OAAO,qBAAqB;;;;;;;;;;;;AAY9D,EAAE"}
1
+ {"version":3,"file":"style.mjs","names":[],"sources":["../../src/EmojiPicker/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n picker: css`\n position: relative;\n\n em-emoji-picker {\n --rgb-accent: var(--emoji-picker-rgb-accent, 0, 0, 0);\n --shadow: none;\n --rgb-background: var(--emoji-picker-rgb-background, 255, 255, 255);\n --border-radius: 0;\n }\n `,\n popover: css`\n overflow: hidden;\n padding: 0;\n `,\n positioner: css`\n width: fit-content !important;\n `,\n root: css`\n position: relative;\n transition: background 150ms ${cssVar.motionEaseOut};\n\n &:hover {\n background: ${cssVar.colorFillSecondary};\n }\n `,\n tab: css`\n && {\n width: 32px;\n height: 32px;\n padding: 0;\n border-radius: ${cssVar.borderRadius};\n\n transition: background-color 100ms ease-out;\n }\n\n &&:hover:not([data-disabled]) {\n background: ${cssVar.colorFillTertiary};\n }\n `,\n tabs: css`\n border-block-end: 1px solid ${cssVar.colorBorderSecondary};\n `,\n tabsIndicator: css`\n && {\n height: 3px;\n border-start-start-radius: 3px;\n border-start-end-radius: 3px;\n }\n `,\n tabsList: css`\n && {\n gap: 8px;\n padding: 4px;\n box-shadow: none;\n }\n `,\n tabsRoot: css`\n && {\n width: auto;\n }\n `,\n}));\n"],"mappings":";;AAEA,MAAa,SAAS,oBAAoB,EAAE,KAAK,cAAc;CAC7D,QAAQ,GAAG;;;;;;;;;;CAUX,SAAS,GAAG;;;;CAIZ,YAAY,GAAG;;;CAGf,MAAM,GAAG;;mCAEwB,OAAO,cAAc;;;oBAGpC,OAAO,mBAAmB;;;CAG5C,KAAK,GAAG;;;;;uBAKa,OAAO,aAAa;;;;;;oBAMvB,OAAO,kBAAkB;;;CAG3C,MAAM,GAAG;kCACuB,OAAO,qBAAqB;;CAE5D,eAAe,GAAG;;;;;;;CAOlB,UAAU,GAAG;;;;;;;CAOb,UAAU,GAAG;;;;;AAKf,EAAE"}
@@ -1,5 +1,6 @@
1
1
  import { FlexboxProps } from "../Flex/type.mjs";
2
- import { AvatarProps } from "../Avatar/type.mjs";
2
+ import { AvatarProps } from "../base-ui/Avatar/type.mjs";
3
+ import "../base-ui/Avatar/index.mjs";
3
4
  import { PopoverProps } from "../base-ui/Popover/type.mjs";
4
5
  import "../Popover/index.mjs";
5
6
  import { CSSProperties, ReactNode } from "react";
package/es/Form/Form.mjs CHANGED
@@ -6,9 +6,9 @@ import { FormProvider } from "./components/FormProvider.mjs";
6
6
  import FormFlatGroup from "./components/FormFlatGroup.mjs";
7
7
  import { memo, useCallback, useState } from "react";
8
8
  import { jsx, jsxs } from "react/jsx-runtime";
9
- import { Form } from "antd";
10
9
  import { cx, useResponsive } from "antd-style";
11
10
  import { isUndefined } from "es-toolkit/compat";
11
+ import { Form } from "antd";
12
12
  //#region src/Form/Form.tsx
13
13
  const Form$1 = memo(({ className, itemMinWidth, footer, form, items = [], children, itemsType = "group", itemVariant, variant = "borderless", classNames, styles: customStyles, gap, style, collapsible, defaultActiveKey, initialValues, activeKey, onCollapse, onFinish, ref, layout, ...rest }) => {
14
14
  const { mobile } = useResponsive();
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx } from "react/jsx-runtime";
3
- import { Divider } from "antd";
4
3
  import { createStaticStyles, cx } from "antd-style";
4
+ import { Divider } from "antd";
5
5
  //#region src/Form/components/FormDivider.tsx
6
6
  const styles = createStaticStyles(({ css }) => {
7
7
  return { root: css`
@@ -4,8 +4,8 @@ import FormDivider from "./FormDivider.mjs";
4
4
  import FormTitle from "./FormTitle.mjs";
5
5
  import { memo, useMemo } from "react";
6
6
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
7
- import { Form } from "antd";
8
7
  import { cx } from "antd-style";
8
+ import { Form } from "antd";
9
9
  //#region src/Form/components/FormItem.tsx
10
10
  const { Item } = Form;
11
11
  const FormItem = memo(({ desc, tag, minWidth, avatar, className, label, children, divider, layout, variant, ...rest }) => {
@@ -10,9 +10,9 @@ import { useFormContext } from "./FormProvider.mjs";
10
10
  import { merge, removeUndefined } from "./merge.mjs";
11
11
  import { memo, useEffect, useMemo, useState } from "react";
12
12
  import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
13
- import { Form } from "antd";
14
13
  import { cssVar, cx } from "antd-style";
15
14
  import { InfoIcon } from "lucide-react";
15
+ import { Form } from "antd";
16
16
  import isEqual from "fast-deep-equal";
17
17
  //#region src/Form/components/FormSubmitFooter.tsx
18
18
  const FormSubmitFooter = memo(({ enableReset = true, buttonProps, float, onReset, saveButtonProps, resetButtonProps, enableUnsavedWarning, children, texts, className, ...rest }) => {
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import FlexBasic_default from "../../Flex/FlexBasic.mjs";
3
- import Tag from "../../Tag/Tag.mjs";
4
3
  import { titleStyles } from "../style.mjs";
4
+ import Tag from "../../Tag/Tag.mjs";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { cx } from "antd-style";
7
7
  //#region src/Form/components/FormTitle.tsx
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import Block from "../Block/Block.mjs";
3
- import Avatar from "../Avatar/index.mjs";
3
+ import Avatar from "../base-ui/Avatar/index.mjs";
4
4
  import Grid from "../Grid/Grid.mjs";
5
5
  import { variants } from "./style.mjs";
6
6
  import { useMemo } from "react";
@@ -1 +1 @@
1
- {"version":3,"file":"GroupAvatar.mjs","names":[],"sources":["../../src/GroupAvatar/GroupAvatar.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { type FC, useMemo } from 'react';\n\nimport Avatar from '@/Avatar';\nimport Block from '@/Block';\nimport Grid from '@/Grid';\n\nimport { variants } from './style';\nimport type { GroupAvatarProps } from './type';\n\nconst GroupAvatar: FC<GroupAvatarProps> = ({\n className,\n style,\n avatars = [],\n size = 32,\n grid = 2,\n cornerShape = 'square',\n avatarShape = 'square',\n ...rest\n}) => {\n const calcSize = useMemo(() => {\n const length = avatars.length;\n const isAutoGrid = grid === 'auto';\n const gridSize = isAutoGrid ? (length > 4 ? 3 : 2) : grid;\n const isCircle = cornerShape === 'circle';\n const avatarSize = Math.floor((size / gridSize) * (isCircle ? 0.65 : 0.75));\n const gapSize = Math.floor((size - avatarSize * gridSize) / (isCircle ? 6 : 4));\n\n return {\n avatarSize,\n gapSize,\n gridSize,\n gridWidth: avatarSize * gridSize + gapSize,\n maxItemWidth: avatarSize - 1,\n };\n }, [avatars, grid, size, cornerShape]);\n\n const calcAvatars = useMemo(\n () => avatars?.slice(0, calcSize.gridSize * calcSize.gridSize),\n [avatars, calcSize.gridSize],\n );\n\n const isSingle = calcAvatars?.length === 1;\n\n return (\n <Block\n align={'center'}\n className={cx(variants({ cornerShape }), className)}\n height={size}\n justify={'center'}\n style={style}\n width={size}\n {...rest}\n >\n <Grid\n gap={calcSize.gapSize}\n maxItemWidth={0}\n rows={calcSize.gridSize}\n width={calcSize.gridWidth}\n >\n {calcAvatars.map((item, index) => {\n if (typeof item === 'string')\n return (\n <Avatar\n avatar={item}\n key={index}\n shape={avatarShape}\n size={isSingle ? size * 0.8 : calcSize.avatarSize}\n />\n );\n return (\n <Avatar\n key={index}\n {...item}\n shape={avatarShape}\n size={isSingle ? size * 0.8 : calcSize.avatarSize}\n />\n );\n })}\n </Grid>\n </Block>\n );\n};\n\nexport default GroupAvatar;\n"],"mappings":";;;;;;;;;AAYA,MAAM,eAAqC,EACzC,WACA,OACA,UAAU,CAAC,GACX,OAAO,IACP,OAAO,GACP,cAAc,UACd,cAAc,UACd,GAAG,WACC;CACJ,MAAM,WAAW,cAAc;EAC7B,MAAM,SAAS,QAAQ;EAEvB,MAAM,WADa,SAAS,SACG,SAAS,IAAI,IAAI,IAAK;EACrD,MAAM,WAAW,gBAAgB;EACjC,MAAM,aAAa,KAAK,MAAO,OAAO,YAAa,WAAW,MAAO,IAAK;EAC1E,MAAM,UAAU,KAAK,OAAO,OAAO,aAAa,aAAa,WAAW,IAAI,EAAE;EAE9E,OAAO;GACL;GACA;GACA;GACA,WAAW,aAAa,WAAW;GACnC,cAAc,aAAa;EAC7B;CACF,GAAG;EAAC;EAAS;EAAM;EAAM;CAAW,CAAC;CAErC,MAAM,cAAc,cACZ,SAAS,MAAM,GAAG,SAAS,WAAW,SAAS,QAAQ,GAC7D,CAAC,SAAS,SAAS,QAAQ,CAC7B;CAEA,MAAM,WAAW,aAAa,WAAW;CAEzC,OACE,oBAAC,OAAD;EACE,OAAO;EACP,WAAW,GAAG,SAAS,EAAE,YAAY,CAAC,GAAG,SAAS;EAClD,QAAQ;EACR,SAAS;EACF;EACP,OAAO;EACP,GAAI;EAEJ,UAAA,oBAAC,MAAD;GACE,KAAK,SAAS;GACd,cAAc;GACd,MAAM,SAAS;GACf,OAAO,SAAS;GAEf,UAAA,YAAY,KAAK,MAAM,UAAU;IAChC,IAAI,OAAO,SAAS,UAClB,OACE,oBAAC,QAAD;KACE,QAAQ;KAER,OAAO;KACP,MAAM,WAAW,OAAO,KAAM,SAAS;IACxC,GAHM,KAGN;IAEL,OACE,oBAAC,QAAD;KAEE,GAAI;KACJ,OAAO;KACP,MAAM,WAAW,OAAO,KAAM,SAAS;IACxC,GAJM,KAIN;GAEL,CAAC;EACG,CAAA;CACD,CAAA;AAEX"}
1
+ {"version":3,"file":"GroupAvatar.mjs","names":[],"sources":["../../src/GroupAvatar/GroupAvatar.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { type FC, useMemo } from 'react';\n\nimport Avatar from '@/base-ui/Avatar';\nimport Block from '@/Block';\nimport Grid from '@/Grid';\n\nimport { variants } from './style';\nimport type { GroupAvatarProps } from './type';\n\nconst GroupAvatar: FC<GroupAvatarProps> = ({\n className,\n style,\n avatars = [],\n size = 32,\n grid = 2,\n cornerShape = 'square',\n avatarShape = 'square',\n ...rest\n}) => {\n const calcSize = useMemo(() => {\n const length = avatars.length;\n const isAutoGrid = grid === 'auto';\n const gridSize = isAutoGrid ? (length > 4 ? 3 : 2) : grid;\n const isCircle = cornerShape === 'circle';\n const avatarSize = Math.floor((size / gridSize) * (isCircle ? 0.65 : 0.75));\n const gapSize = Math.floor((size - avatarSize * gridSize) / (isCircle ? 6 : 4));\n\n return {\n avatarSize,\n gapSize,\n gridSize,\n gridWidth: avatarSize * gridSize + gapSize,\n maxItemWidth: avatarSize - 1,\n };\n }, [avatars, grid, size, cornerShape]);\n\n const calcAvatars = useMemo(\n () => avatars?.slice(0, calcSize.gridSize * calcSize.gridSize),\n [avatars, calcSize.gridSize],\n );\n\n const isSingle = calcAvatars?.length === 1;\n\n return (\n <Block\n align={'center'}\n className={cx(variants({ cornerShape }), className)}\n height={size}\n justify={'center'}\n style={style}\n width={size}\n {...rest}\n >\n <Grid\n gap={calcSize.gapSize}\n maxItemWidth={0}\n rows={calcSize.gridSize}\n width={calcSize.gridWidth}\n >\n {calcAvatars.map((item, index) => {\n if (typeof item === 'string')\n return (\n <Avatar\n avatar={item}\n key={index}\n shape={avatarShape}\n size={isSingle ? size * 0.8 : calcSize.avatarSize}\n />\n );\n return (\n <Avatar\n key={index}\n {...item}\n shape={avatarShape}\n size={isSingle ? size * 0.8 : calcSize.avatarSize}\n />\n );\n })}\n </Grid>\n </Block>\n );\n};\n\nexport default GroupAvatar;\n"],"mappings":";;;;;;;;;AAYA,MAAM,eAAqC,EACzC,WACA,OACA,UAAU,CAAC,GACX,OAAO,IACP,OAAO,GACP,cAAc,UACd,cAAc,UACd,GAAG,WACC;CACJ,MAAM,WAAW,cAAc;EAC7B,MAAM,SAAS,QAAQ;EAEvB,MAAM,WADa,SAAS,SACG,SAAS,IAAI,IAAI,IAAK;EACrD,MAAM,WAAW,gBAAgB;EACjC,MAAM,aAAa,KAAK,MAAO,OAAO,YAAa,WAAW,MAAO,IAAK;EAC1E,MAAM,UAAU,KAAK,OAAO,OAAO,aAAa,aAAa,WAAW,IAAI,EAAE;EAE9E,OAAO;GACL;GACA;GACA;GACA,WAAW,aAAa,WAAW;GACnC,cAAc,aAAa;EAC7B;CACF,GAAG;EAAC;EAAS;EAAM;EAAM;CAAW,CAAC;CAErC,MAAM,cAAc,cACZ,SAAS,MAAM,GAAG,SAAS,WAAW,SAAS,QAAQ,GAC7D,CAAC,SAAS,SAAS,QAAQ,CAC7B;CAEA,MAAM,WAAW,aAAa,WAAW;CAEzC,OACE,oBAAC,OAAD;EACE,OAAO;EACP,WAAW,GAAG,SAAS,EAAE,YAAY,CAAC,GAAG,SAAS;EAClD,QAAQ;EACR,SAAS;EACF;EACP,OAAO;EACP,GAAI;EAEJ,UAAA,oBAAC,MAAD;GACE,KAAK,SAAS;GACd,cAAc;GACd,MAAM,SAAS;GACf,OAAO,SAAS;GAEf,UAAA,YAAY,KAAK,MAAM,UAAU;IAChC,IAAI,OAAO,SAAS,UAClB,OACE,oBAAC,QAAD;KACE,QAAQ;KAER,OAAO;KACP,MAAM,WAAW,OAAO,KAAM,SAAS;IACxC,GAHM,KAGN;IAEL,OACE,oBAAC,QAAD;KAEE,GAAI;KACJ,OAAO;KACP,MAAM,WAAW,OAAO,KAAM,SAAS;IACxC,GAJM,KAIN;GAEL,CAAC;EACG,CAAA;CACD,CAAA;AAEX"}
@@ -1,5 +1,6 @@
1
1
  import { BlockProps } from "../Block/type.mjs";
2
- import { AvatarProps } from "../Avatar/type.mjs";
2
+ import { AvatarProps } from "../base-ui/Avatar/type.mjs";
3
+ import "../base-ui/Avatar/index.mjs";
3
4
  import { SMOOTH_CORNER_MASKS } from "../utils/smoothCorners.mjs";
4
5
  import { Ref } from "react";
5
6
  //#region src/GroupAvatar/type.d.ts
@@ -1,6 +1,6 @@
1
1
  "use client";
2
2
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
- import Tag from "../Tag/Tag.mjs";
3
+ import Tag from "../base-ui/Tag/Tag.mjs";
4
4
  import { getCodeLanguageDisplayName } from "./const.mjs";
5
5
  import SyntaxHighlighter from "./SyntaxHighlighter/index.mjs";
6
6
  import CopyButton from "../CopyButton/CopyButton.mjs";
@@ -1 +1 @@
1
- {"version":3,"file":"Highlighter.mjs","names":["FullFeatured","Flexbox"],"sources":["../../src/Highlighter/Highlighter.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport { getCodeLanguageDisplayName } from '@/Highlighter/const';\nimport Tag from '@/Tag';\n\nimport FullFeatured from './FullFeatured';\nimport { styles, variants } from './style';\nimport SyntaxHighlighter from './SyntaxHighlighter';\nimport { type HighlighterProps } from './type';\n\nexport const Highlighter = memo<HighlighterProps>(\n ({\n animated,\n fullFeatured,\n actionIconSize,\n children,\n language = 'markdown',\n className,\n classNames,\n styles: customStyles,\n copyable = true,\n showLanguage = true,\n variant = 'filled',\n shadow,\n wrap,\n bodyRender,\n actionsRender,\n enableTransformer,\n theme,\n icon,\n fileName,\n allowChangeLanguage,\n defaultExpand = true,\n ...rest\n }) => {\n const [lang, setLang] = useState(language);\n\n // Safely handle children with boundary check\n const tirmedChildren = useMemo(() => {\n if (children === null || children === undefined) return '';\n if (typeof children !== 'string') {\n console.warn('Highlighter: children should be a string, received:', typeof children);\n return String(children);\n }\n return children.trim();\n }, [children]);\n\n const copyContentRef = useRef(tirmedChildren);\n\n useEffect(() => {\n copyContentRef.current = tirmedChildren;\n }, [tirmedChildren]);\n\n const getCopyContent = useCallback(() => copyContentRef.current, []);\n\n const originalActions = useMemo(() => {\n if (!copyable) return null;\n return (\n <CopyButton\n glass\n content={getCopyContent}\n size={actionIconSize || { blockSize: 28, size: 16 }}\n />\n );\n }, [actionIconSize, copyable, getCopyContent]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return originalActions;\n return actionsRender({\n actionIconSize,\n content: tirmedChildren,\n getContent: getCopyContent,\n language: lang,\n originalNode: originalActions,\n });\n }, [actionIconSize, actionsRender, getCopyContent, lang, originalActions, tirmedChildren]);\n\n const originalBody = useMemo(\n () => (\n <SyntaxHighlighter\n animated={animated}\n className={classNames?.content}\n enableTransformer={enableTransformer}\n language={lang?.toLowerCase()}\n theme={theme}\n variant={variant}\n style={{\n height: '100%',\n ...customStyles?.content,\n }}\n >\n {tirmedChildren}\n </SyntaxHighlighter>\n ),\n [\n animated,\n enableTransformer,\n lang,\n theme,\n tirmedChildren,\n variant,\n customStyles?.content,\n customStyles?.content,\n ],\n );\n\n const displayName = useMemo(() => {\n if (fileName) return fileName;\n return getCodeLanguageDisplayName(language);\n }, [fileName, language]);\n\n const body = useMemo(() => {\n if (!bodyRender) return originalBody;\n return bodyRender({ content: tirmedChildren, language: lang, originalNode: originalBody });\n }, [bodyRender, lang, originalBody, tirmedChildren]);\n\n if (fullFeatured)\n return (\n <FullFeatured\n actionsRender={actionsRender}\n allowChangeLanguage={allowChangeLanguage}\n className={className}\n classNames={classNames}\n content={tirmedChildren}\n copyable={copyable}\n defaultExpand={defaultExpand}\n fileName={fileName}\n icon={icon}\n language={language}\n setLanguage={setLang}\n shadow={shadow}\n showLanguage={showLanguage}\n styles={customStyles}\n variant={variant}\n wrap={wrap}\n {...rest}\n >\n {body}\n </FullFeatured>\n );\n\n return (\n <Flexbox\n className={cx(variants({ shadow, variant, wrap }), className)}\n data-code-type=\"highlighter\"\n {...rest}\n >\n <Flexbox horizontal align={'center'} className={styles.actions} flex={'none'} gap={4}>\n {actions}\n </Flexbox>\n {showLanguage && language && <Tag className={styles.lang}>{displayName}</Tag>}\n {body}\n </Flexbox>\n );\n },\n);\n\nHighlighter.displayName = 'Highlighter';\n\nexport default Highlighter;\n"],"mappings":";;;;;;;;;;;;AAeA,MAAa,cAAc,MACxB,EACC,UACA,cACA,gBACA,UACA,WAAW,YACX,WACA,YACA,QAAQ,cACR,WAAW,MACX,eAAe,MACf,UAAU,UACV,QACA,MACA,YACA,eACA,mBACA,OACA,MACA,UACA,qBACA,gBAAgB,MAChB,GAAG,WACC;CACJ,MAAM,CAAC,MAAM,WAAW,SAAS,QAAQ;CAGzC,MAAM,iBAAiB,cAAc;EACnC,IAAI,aAAa,QAAQ,aAAa,KAAA,GAAW,OAAO;EACxD,IAAI,OAAO,aAAa,UAAU;GAChC,QAAQ,KAAK,uDAAuD,OAAO,QAAQ;GACnF,OAAO,OAAO,QAAQ;EACxB;EACA,OAAO,SAAS,KAAK;CACvB,GAAG,CAAC,QAAQ,CAAC;CAEb,MAAM,iBAAiB,OAAO,cAAc;CAE5C,gBAAgB;EACd,eAAe,UAAU;CAC3B,GAAG,CAAC,cAAc,CAAC;CAEnB,MAAM,iBAAiB,kBAAkB,eAAe,SAAS,CAAC,CAAC;CAEnE,MAAM,kBAAkB,cAAc;EACpC,IAAI,CAAC,UAAU,OAAO;EACtB,OACE,oBAAC,YAAD;GACE,OAAA;GACA,SAAS;GACT,MAAM,kBAAkB;IAAE,WAAW;IAAI,MAAM;GAAG;EACnD,CAAA;CAEL,GAAG;EAAC;EAAgB;EAAU;CAAc,CAAC;CAE7C,MAAM,UAAU,cAAc;EAC5B,IAAI,CAAC,eAAe,OAAO;EAC3B,OAAO,cAAc;GACnB;GACA,SAAS;GACT,YAAY;GACZ,UAAU;GACV,cAAc;EAChB,CAAC;CACH,GAAG;EAAC;EAAgB;EAAe;EAAgB;EAAM;EAAiB;CAAc,CAAC;CAEzF,MAAM,eAAe,cAEjB,oBAAC,mBAAD;EACY;EACV,WAAW,YAAY;EACJ;EACnB,UAAU,MAAM,YAAY;EACrB;EACE;EACT,OAAO;GACL,QAAQ;GACR,GAAG,cAAc;EACnB;EAEC,UAAA;CACgB,CAAA,GAErB;EACE;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;EACd,cAAc;CAChB,CACF;CAEA,MAAM,cAAc,cAAc;EAChC,IAAI,UAAU,OAAO;EACrB,OAAO,2BAA2B,QAAQ;CAC5C,GAAG,CAAC,UAAU,QAAQ,CAAC;CAEvB,MAAM,OAAO,cAAc;EACzB,IAAI,CAAC,YAAY,OAAO;EACxB,OAAO,WAAW;GAAE,SAAS;GAAgB,UAAU;GAAM,cAAc;EAAa,CAAC;CAC3F,GAAG;EAAC;EAAY;EAAM;EAAc;CAAc,CAAC;CAEnD,IAAI,cACF,OACE,oBAACA,yBAAD;EACiB;EACM;EACV;EACC;EACZ,SAAS;EACC;EACK;EACL;EACJ;EACI;EACV,aAAa;EACL;EACM;EACd,QAAQ;EACC;EACH;EACN,GAAI;EAEH,UAAA;CACW,CAAA;CAGlB,OACE,qBAACC,mBAAD;EACE,WAAW,GAAG,SAAS;GAAE;GAAQ;GAAS;EAAK,CAAC,GAAG,SAAS;EAC5D,kBAAe;EACf,GAAI;EAHN,UAAA;GAKE,oBAACA,mBAAD;IAAS,YAAA;IAAW,OAAO;IAAU,WAAW,OAAO;IAAS,MAAM;IAAQ,KAAK;IAChF,UAAA;GACM,CAAA;GACR,gBAAgB,YAAY,oBAAC,KAAD;IAAK,WAAW,OAAO;IAAO,UAAA;GAAiB,CAAA;GAC3E;EACM;;AAEb,CACF;AAEA,YAAY,cAAc"}
1
+ {"version":3,"file":"Highlighter.mjs","names":["FullFeatured","Flexbox"],"sources":["../../src/Highlighter/Highlighter.tsx"],"sourcesContent":["'use client';\n\nimport { cx } from 'antd-style';\nimport { memo, useCallback, useEffect, useMemo, useRef, useState } from 'react';\n\nimport Tag from '@/base-ui/Tag';\nimport CopyButton from '@/CopyButton';\nimport { Flexbox } from '@/Flex';\nimport { getCodeLanguageDisplayName } from '@/Highlighter/const';\n\nimport FullFeatured from './FullFeatured';\nimport { styles, variants } from './style';\nimport SyntaxHighlighter from './SyntaxHighlighter';\nimport { type HighlighterProps } from './type';\n\nexport const Highlighter = memo<HighlighterProps>(\n ({\n animated,\n fullFeatured,\n actionIconSize,\n children,\n language = 'markdown',\n className,\n classNames,\n styles: customStyles,\n copyable = true,\n showLanguage = true,\n variant = 'filled',\n shadow,\n wrap,\n bodyRender,\n actionsRender,\n enableTransformer,\n theme,\n icon,\n fileName,\n allowChangeLanguage,\n defaultExpand = true,\n ...rest\n }) => {\n const [lang, setLang] = useState(language);\n\n // Safely handle children with boundary check\n const tirmedChildren = useMemo(() => {\n if (children === null || children === undefined) return '';\n if (typeof children !== 'string') {\n console.warn('Highlighter: children should be a string, received:', typeof children);\n return String(children);\n }\n return children.trim();\n }, [children]);\n\n const copyContentRef = useRef(tirmedChildren);\n\n useEffect(() => {\n copyContentRef.current = tirmedChildren;\n }, [tirmedChildren]);\n\n const getCopyContent = useCallback(() => copyContentRef.current, []);\n\n const originalActions = useMemo(() => {\n if (!copyable) return null;\n return (\n <CopyButton\n glass\n content={getCopyContent}\n size={actionIconSize || { blockSize: 28, size: 16 }}\n />\n );\n }, [actionIconSize, copyable, getCopyContent]);\n\n const actions = useMemo(() => {\n if (!actionsRender) return originalActions;\n return actionsRender({\n actionIconSize,\n content: tirmedChildren,\n getContent: getCopyContent,\n language: lang,\n originalNode: originalActions,\n });\n }, [actionIconSize, actionsRender, getCopyContent, lang, originalActions, tirmedChildren]);\n\n const originalBody = useMemo(\n () => (\n <SyntaxHighlighter\n animated={animated}\n className={classNames?.content}\n enableTransformer={enableTransformer}\n language={lang?.toLowerCase()}\n theme={theme}\n variant={variant}\n style={{\n height: '100%',\n ...customStyles?.content,\n }}\n >\n {tirmedChildren}\n </SyntaxHighlighter>\n ),\n [\n animated,\n enableTransformer,\n lang,\n theme,\n tirmedChildren,\n variant,\n customStyles?.content,\n customStyles?.content,\n ],\n );\n\n const displayName = useMemo(() => {\n if (fileName) return fileName;\n return getCodeLanguageDisplayName(language);\n }, [fileName, language]);\n\n const body = useMemo(() => {\n if (!bodyRender) return originalBody;\n return bodyRender({ content: tirmedChildren, language: lang, originalNode: originalBody });\n }, [bodyRender, lang, originalBody, tirmedChildren]);\n\n if (fullFeatured)\n return (\n <FullFeatured\n actionsRender={actionsRender}\n allowChangeLanguage={allowChangeLanguage}\n className={className}\n classNames={classNames}\n content={tirmedChildren}\n copyable={copyable}\n defaultExpand={defaultExpand}\n fileName={fileName}\n icon={icon}\n language={language}\n setLanguage={setLang}\n shadow={shadow}\n showLanguage={showLanguage}\n styles={customStyles}\n variant={variant}\n wrap={wrap}\n {...rest}\n >\n {body}\n </FullFeatured>\n );\n\n return (\n <Flexbox\n className={cx(variants({ shadow, variant, wrap }), className)}\n data-code-type=\"highlighter\"\n {...rest}\n >\n <Flexbox horizontal align={'center'} className={styles.actions} flex={'none'} gap={4}>\n {actions}\n </Flexbox>\n {showLanguage && language && <Tag className={styles.lang}>{displayName}</Tag>}\n {body}\n </Flexbox>\n );\n },\n);\n\nHighlighter.displayName = 'Highlighter';\n\nexport default Highlighter;\n"],"mappings":";;;;;;;;;;;;AAeA,MAAa,cAAc,MACxB,EACC,UACA,cACA,gBACA,UACA,WAAW,YACX,WACA,YACA,QAAQ,cACR,WAAW,MACX,eAAe,MACf,UAAU,UACV,QACA,MACA,YACA,eACA,mBACA,OACA,MACA,UACA,qBACA,gBAAgB,MAChB,GAAG,WACC;CACJ,MAAM,CAAC,MAAM,WAAW,SAAS,QAAQ;CAGzC,MAAM,iBAAiB,cAAc;EACnC,IAAI,aAAa,QAAQ,aAAa,KAAA,GAAW,OAAO;EACxD,IAAI,OAAO,aAAa,UAAU;GAChC,QAAQ,KAAK,uDAAuD,OAAO,QAAQ;GACnF,OAAO,OAAO,QAAQ;EACxB;EACA,OAAO,SAAS,KAAK;CACvB,GAAG,CAAC,QAAQ,CAAC;CAEb,MAAM,iBAAiB,OAAO,cAAc;CAE5C,gBAAgB;EACd,eAAe,UAAU;CAC3B,GAAG,CAAC,cAAc,CAAC;CAEnB,MAAM,iBAAiB,kBAAkB,eAAe,SAAS,CAAC,CAAC;CAEnE,MAAM,kBAAkB,cAAc;EACpC,IAAI,CAAC,UAAU,OAAO;EACtB,OACE,oBAAC,YAAD;GACE,OAAA;GACA,SAAS;GACT,MAAM,kBAAkB;IAAE,WAAW;IAAI,MAAM;GAAG;EACnD,CAAA;CAEL,GAAG;EAAC;EAAgB;EAAU;CAAc,CAAC;CAE7C,MAAM,UAAU,cAAc;EAC5B,IAAI,CAAC,eAAe,OAAO;EAC3B,OAAO,cAAc;GACnB;GACA,SAAS;GACT,YAAY;GACZ,UAAU;GACV,cAAc;EAChB,CAAC;CACH,GAAG;EAAC;EAAgB;EAAe;EAAgB;EAAM;EAAiB;CAAc,CAAC;CAEzF,MAAM,eAAe,cAEjB,oBAAC,mBAAD;EACY;EACV,WAAW,YAAY;EACJ;EACnB,UAAU,MAAM,YAAY;EACrB;EACE;EACT,OAAO;GACL,QAAQ;GACR,GAAG,cAAc;EACnB;EAEC,UAAA;CACgB,CAAA,GAErB;EACE;EACA;EACA;EACA;EACA;EACA;EACA,cAAc;EACd,cAAc;CAChB,CACF;CAEA,MAAM,cAAc,cAAc;EAChC,IAAI,UAAU,OAAO;EACrB,OAAO,2BAA2B,QAAQ;CAC5C,GAAG,CAAC,UAAU,QAAQ,CAAC;CAEvB,MAAM,OAAO,cAAc;EACzB,IAAI,CAAC,YAAY,OAAO;EACxB,OAAO,WAAW;GAAE,SAAS;GAAgB,UAAU;GAAM,cAAc;EAAa,CAAC;CAC3F,GAAG;EAAC;EAAY;EAAM;EAAc;CAAc,CAAC;CAEnD,IAAI,cACF,OACE,oBAACA,yBAAD;EACiB;EACM;EACV;EACC;EACZ,SAAS;EACC;EACK;EACL;EACJ;EACI;EACV,aAAa;EACL;EACM;EACd,QAAQ;EACC;EACH;EACN,GAAI;EAEH,UAAA;CACW,CAAA;CAGlB,OACE,qBAACC,mBAAD;EACE,WAAW,GAAG,SAAS;GAAE;GAAQ;GAAS;EAAK,CAAC,GAAG,SAAS;EAC5D,kBAAe;EACf,GAAI;EAHN,UAAA;GAKE,oBAACA,mBAAD;IAAS,YAAA;IAAW,OAAO;IAAU,WAAW,OAAO;IAAS,MAAM;IAAQ,KAAK;IAChF,UAAA;GACM,CAAA;GACR,gBAAgB,YAAY,oBAAC,KAAD;IAAK,WAAW,OAAO;IAAO,UAAA;GAAiB,CAAA;GAC3E;EACM;;AAEb,CACF;AAEA,YAAY,cAAc"}
@@ -2,15 +2,14 @@
2
2
  import FlexBasic_default from "../Flex/FlexBasic.mjs";
3
3
  import Text from "../Text/Text.mjs";
4
4
  import { stopPropagation } from "../utils/dom.mjs";
5
+ import Select from "../base-ui/Select/Select.mjs";
5
6
  import MaterialFileTypeIcon from "../MaterialFileTypeIcon/MaterialFileTypeIcon.mjs";
6
7
  import { memo, useMemo } from "react";
7
8
  import { jsx, jsxs } from "react/jsx-runtime";
8
- import { Select } from "antd";
9
9
  import { bundledLanguagesInfo } from "shiki";
10
10
  //#region src/Highlighter/LangSelect.tsx
11
- const LangSelect = memo(({ ...rest }) => {
11
+ const LangSelect = memo(({ style, ...rest }) => {
12
12
  const options = useMemo(() => [{
13
- aliases: ["text", "txt"],
14
13
  label: /* @__PURE__ */ jsxs(FlexBasic_default, {
15
14
  horizontal: true,
16
15
  align: "center",
@@ -27,9 +26,9 @@ const LangSelect = memo(({ ...rest }) => {
27
26
  children: "Plaintext"
28
27
  })]
29
28
  }),
29
+ title: "Plaintext,plaintext,*.text,*.txt",
30
30
  value: "plaintext"
31
31
  }, ...bundledLanguagesInfo.map((item) => ({
32
- aliases: item.aliases,
33
32
  label: /* @__PURE__ */ jsxs(FlexBasic_default, {
34
33
  horizontal: true,
35
34
  align: "center",
@@ -46,22 +45,33 @@ const LangSelect = memo(({ ...rest }) => {
46
45
  children: item.name
47
46
  })]
48
47
  }),
49
- title: (item.aliases || [item.id]).filter(Boolean).map((item) => `*.${item}`).join(","),
48
+ title: [
49
+ item.name,
50
+ item.id,
51
+ ...(item.aliases || []).map((alias) => `*.${alias}`)
52
+ ].join(","),
50
53
  value: item.id
51
54
  }))], []);
52
- return /* @__PURE__ */ jsx(Select, {
53
- showSearch: true,
54
- className: "language-title",
55
- options,
56
- size: "small",
57
- suffixIcon: false,
58
- variant: "borderless",
55
+ return /* @__PURE__ */ jsx("div", {
59
56
  style: {
60
57
  maxWidth: 240,
61
58
  width: "100%"
62
59
  },
63
60
  onClick: stopPropagation,
64
- ...rest
61
+ children: /* @__PURE__ */ jsx(Select, {
62
+ showSearch: true,
63
+ virtual: true,
64
+ className: "language-title",
65
+ options,
66
+ size: "small",
67
+ style: {
68
+ width: "100%",
69
+ ...style
70
+ },
71
+ suffixIcon: null,
72
+ variant: "borderless",
73
+ ...rest
74
+ })
65
75
  });
66
76
  });
67
77
  //#endregion