@lobehub/ui 4.3.2 → 4.3.3

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 (633) hide show
  1. package/es/Accordion/Accordion.mjs +2 -2
  2. package/es/Accordion/Accordion.mjs.map +1 -1
  3. package/es/Accordion/AccordionItem.mjs +11 -2
  4. package/es/Accordion/AccordionItem.mjs.map +1 -1
  5. package/es/Accordion/style.mjs +12 -9
  6. package/es/Accordion/style.mjs.map +1 -1
  7. package/es/ActionIcon/ActionIcon.d.mts +2 -2
  8. package/es/ActionIcon/ActionIcon.mjs +2 -57
  9. package/es/ActionIcon/ActionIcon.mjs.map +1 -1
  10. package/es/ActionIcon/style.mjs +76 -20
  11. package/es/ActionIcon/style.mjs.map +1 -1
  12. package/es/ActionIconGroup/ActionIconGroup.mjs +2 -30
  13. package/es/ActionIconGroup/ActionIconGroup.mjs.map +1 -1
  14. package/es/ActionIconGroup/style.mjs +39 -10
  15. package/es/ActionIconGroup/style.mjs.map +1 -1
  16. package/es/Alert/Alert.d.mts +2 -2
  17. package/es/Alert/Alert.mjs +17 -60
  18. package/es/Alert/Alert.mjs.map +1 -1
  19. package/es/Alert/style.mjs +318 -82
  20. package/es/Alert/style.mjs.map +1 -1
  21. package/es/AutoComplete/Select.d.mts +2 -2
  22. package/es/AutoComplete/Select.mjs +7 -21
  23. package/es/AutoComplete/Select.mjs.map +1 -1
  24. package/es/AutoComplete/style.mjs +32 -15
  25. package/es/AutoComplete/style.mjs.map +1 -1
  26. package/es/Avatar/Avatar.mjs +12 -24
  27. package/es/Avatar/Avatar.mjs.map +1 -1
  28. package/es/Avatar/AvatarGroup/index.d.mts +2 -2
  29. package/es/Avatar/AvatarGroup/index.mjs +3 -3
  30. package/es/Avatar/AvatarGroup/index.mjs.map +1 -1
  31. package/es/Avatar/AvatarGroup/style.mjs +9 -8
  32. package/es/Avatar/AvatarGroup/style.mjs.map +1 -1
  33. package/es/Avatar/style.mjs +30 -10
  34. package/es/Avatar/style.mjs.map +1 -1
  35. package/es/Block/Block.mjs +3 -48
  36. package/es/Block/Block.mjs.map +1 -1
  37. package/es/Block/style.mjs +58 -12
  38. package/es/Block/style.mjs.map +1 -1
  39. package/es/Burger/Burger.d.mts +2 -2
  40. package/es/Burger/Burger.mjs +21 -8
  41. package/es/Burger/Burger.mjs.map +1 -1
  42. package/es/Burger/style.mjs +115 -96
  43. package/es/Burger/style.mjs.map +1 -1
  44. package/es/Button/Button.mjs +6 -21
  45. package/es/Button/Button.mjs.map +1 -1
  46. package/es/Button/style.mjs +25 -7
  47. package/es/Button/style.mjs.map +1 -1
  48. package/es/Checkbox/Checkbox.mjs +2 -2
  49. package/es/Checkbox/Checkbox.mjs.map +1 -1
  50. package/es/Checkbox/style.mjs +12 -13
  51. package/es/Checkbox/style.mjs.map +1 -1
  52. package/es/CodeEditor/CodeEditor.d.mts +2 -2
  53. package/es/CodeEditor/CodeEditor.mjs +5 -13
  54. package/es/CodeEditor/CodeEditor.mjs.map +1 -1
  55. package/es/CodeEditor/style.mjs +21 -12
  56. package/es/CodeEditor/style.mjs.map +1 -1
  57. package/es/Collapse/Collapse.d.mts +2 -2
  58. package/es/Collapse/Collapse.mjs +4 -29
  59. package/es/Collapse/Collapse.mjs.map +1 -1
  60. package/es/Collapse/style.mjs +78 -18
  61. package/es/Collapse/style.mjs.map +1 -1
  62. package/es/ColorSwatches/ColorSwatches.mjs +20 -14
  63. package/es/ColorSwatches/ColorSwatches.mjs.map +1 -1
  64. package/es/ColorSwatches/style.mjs +35 -34
  65. package/es/ColorSwatches/style.mjs.map +1 -1
  66. package/es/ConfigProvider/index.d.mts +2 -2
  67. package/es/CopyButton/CopyButton.d.mts +2 -2
  68. package/es/DatePicker/DatePicker.d.mts +2 -2
  69. package/es/DatePicker/DatePicker.mjs +7 -21
  70. package/es/DatePicker/DatePicker.mjs.map +1 -1
  71. package/es/DatePicker/style.mjs +24 -7
  72. package/es/DatePicker/style.mjs.map +1 -1
  73. package/es/DraggablePanel/DraggablePanel.mjs +19 -62
  74. package/es/DraggablePanel/DraggablePanel.mjs.map +1 -1
  75. package/es/DraggablePanel/components/DraggablePanelBody.d.mts +2 -2
  76. package/es/DraggablePanel/components/DraggablePanelBody.mjs +2 -2
  77. package/es/DraggablePanel/components/DraggablePanelBody.mjs.map +1 -1
  78. package/es/DraggablePanel/components/DraggablePanelContainer.d.mts +2 -2
  79. package/es/DraggablePanel/components/DraggablePanelContainer.mjs +2 -2
  80. package/es/DraggablePanel/components/DraggablePanelContainer.mjs.map +1 -1
  81. package/es/DraggablePanel/components/DraggablePanelFooter.d.mts +2 -2
  82. package/es/DraggablePanel/components/DraggablePanelFooter.mjs +2 -2
  83. package/es/DraggablePanel/components/DraggablePanelFooter.mjs.map +1 -1
  84. package/es/DraggablePanel/components/DraggablePanelHeader.d.mts +2 -2
  85. package/es/DraggablePanel/components/DraggablePanelHeader.mjs +2 -2
  86. package/es/DraggablePanel/components/DraggablePanelHeader.mjs.map +1 -1
  87. package/es/DraggablePanel/components/style.mjs +6 -6
  88. package/es/DraggablePanel/components/style.mjs.map +1 -1
  89. package/es/DraggablePanel/style.mjs +336 -194
  90. package/es/DraggablePanel/style.mjs.map +1 -1
  91. package/es/DraggableSideNav/DraggableSideNav.d.mts +2 -2
  92. package/es/DraggableSideNav/DraggableSideNav.mjs +11 -8
  93. package/es/DraggableSideNav/DraggableSideNav.mjs.map +1 -1
  94. package/es/DraggableSideNav/style.mjs +192 -181
  95. package/es/DraggableSideNav/style.mjs.map +1 -1
  96. package/es/Drawer/Drawer.d.mts +2 -2
  97. package/es/Drawer/Drawer.mjs +11 -13
  98. package/es/Drawer/Drawer.mjs.map +1 -1
  99. package/es/Dropdown/Dropdown.d.mts +2 -2
  100. package/es/EditableText/EditableText.d.mts +2 -2
  101. package/es/EditableText/EditableText.mjs +1 -1
  102. package/es/EmojiPicker/AvatarUploader.mjs +3 -4
  103. package/es/EmojiPicker/AvatarUploader.mjs.map +1 -1
  104. package/es/EmojiPicker/EmojiPicker.d.mts +2 -2
  105. package/es/EmojiPicker/EmojiPicker.mjs +11 -4
  106. package/es/EmojiPicker/EmojiPicker.mjs.map +1 -1
  107. package/es/EmojiPicker/style.mjs +9 -9
  108. package/es/EmojiPicker/style.mjs.map +1 -1
  109. package/es/Empty/Empty.mjs +4 -4
  110. package/es/Empty/Empty.mjs.map +1 -1
  111. package/es/FileTypeIcon/FileTypeIcon.mjs +5 -6
  112. package/es/FileTypeIcon/FileTypeIcon.mjs.map +1 -1
  113. package/es/FileTypeIcon/components/FileIcon.mjs +5 -5
  114. package/es/FileTypeIcon/components/FileIcon.mjs.map +1 -1
  115. package/es/FileTypeIcon/components/FolderIcon.mjs +4 -4
  116. package/es/FileTypeIcon/components/FolderIcon.mjs.map +1 -1
  117. package/es/FileTypeIcon/style.mjs +3 -3
  118. package/es/FileTypeIcon/style.mjs.map +1 -1
  119. package/es/Flex/FlexBasic.d.mts +2 -2
  120. package/es/FluentEmoji/FluentEmoji.mjs +2 -2
  121. package/es/FluentEmoji/FluentEmoji.mjs.map +1 -1
  122. package/es/FluentEmoji/style.mjs +3 -3
  123. package/es/FluentEmoji/style.mjs.map +1 -1
  124. package/es/FontLoader/index.d.mts +2 -2
  125. package/es/Footer/Footer.d.mts +2 -2
  126. package/es/Footer/Footer.mjs +10 -8
  127. package/es/Footer/Footer.mjs.map +1 -1
  128. package/es/Footer/style.mjs +169 -133
  129. package/es/Footer/style.mjs.map +1 -1
  130. package/es/Form/Form.mjs +4 -14
  131. package/es/Form/Form.mjs.map +1 -1
  132. package/es/Form/components/FormDivider.mjs +3 -4
  133. package/es/Form/components/FormDivider.mjs.map +1 -1
  134. package/es/Form/components/FormFlatGroup.mjs +4 -14
  135. package/es/Form/components/FormFlatGroup.mjs.map +1 -1
  136. package/es/Form/components/FormGroup.d.mts +2 -2
  137. package/es/Form/components/FormGroup.mjs +5 -13
  138. package/es/Form/components/FormGroup.mjs.map +1 -1
  139. package/es/Form/components/FormItem.d.mts +2 -2
  140. package/es/Form/components/FormItem.mjs +12 -27
  141. package/es/Form/components/FormItem.mjs.map +1 -1
  142. package/es/Form/components/FormSubmitFooter.d.mts +2 -2
  143. package/es/Form/components/FormSubmitFooter.mjs +5 -4
  144. package/es/Form/components/FormSubmitFooter.mjs.map +1 -1
  145. package/es/Form/components/FormTitle.mjs +5 -5
  146. package/es/Form/components/FormTitle.mjs.map +1 -1
  147. package/es/Form/style.mjs +120 -72
  148. package/es/Form/style.mjs.map +1 -1
  149. package/es/FormModal/FormModal.d.mts +2 -2
  150. package/es/FormModal/FormModal.mjs +7 -8
  151. package/es/FormModal/FormModal.mjs.map +1 -1
  152. package/es/FormModal/style.mjs +7 -7
  153. package/es/FormModal/style.mjs.map +1 -1
  154. package/es/Grid/Grid.mjs +17 -4
  155. package/es/Grid/Grid.mjs.map +1 -1
  156. package/es/Grid/style.mjs +15 -16
  157. package/es/Grid/style.mjs.map +1 -1
  158. package/es/GroupAvatar/GroupAvatar.mjs +2 -14
  159. package/es/GroupAvatar/GroupAvatar.mjs.map +1 -1
  160. package/es/GroupAvatar/style.mjs +27 -16
  161. package/es/GroupAvatar/style.mjs.map +1 -1
  162. package/es/GuideCard/GuideCard.d.mts +2 -2
  163. package/es/GuideCard/GuideCard.mjs +5 -21
  164. package/es/GuideCard/GuideCard.mjs.map +1 -1
  165. package/es/GuideCard/style.mjs +57 -15
  166. package/es/GuideCard/style.mjs.map +1 -1
  167. package/es/Header/Header.d.mts +2 -2
  168. package/es/Header/Header.mjs +6 -7
  169. package/es/Header/Header.mjs.map +1 -1
  170. package/es/Header/style.mjs +8 -10
  171. package/es/Header/style.mjs.map +1 -1
  172. package/es/Highlighter/FullFeatured.mjs +2 -40
  173. package/es/Highlighter/FullFeatured.mjs.map +1 -1
  174. package/es/Highlighter/Highlighter.d.mts +2 -2
  175. package/es/Highlighter/Highlighter.mjs +2 -25
  176. package/es/Highlighter/Highlighter.mjs.map +1 -1
  177. package/es/Highlighter/SyntaxHighlighter/StaticRenderer.mjs +1 -1
  178. package/es/Highlighter/SyntaxHighlighter/StaticRenderer.mjs.map +1 -1
  179. package/es/Highlighter/SyntaxHighlighter/StreamRenderer.mjs +11 -31
  180. package/es/Highlighter/SyntaxHighlighter/StreamRenderer.mjs.map +1 -1
  181. package/es/Highlighter/SyntaxHighlighter/index.d.mts +2 -2
  182. package/es/Highlighter/SyntaxHighlighter/index.mjs +3 -31
  183. package/es/Highlighter/SyntaxHighlighter/index.mjs.map +1 -1
  184. package/es/Highlighter/SyntaxHighlighter/style.mjs +43 -16
  185. package/es/Highlighter/SyntaxHighlighter/style.mjs.map +1 -1
  186. package/es/Highlighter/style.mjs +64 -25
  187. package/es/Highlighter/style.mjs.map +1 -1
  188. package/es/Highlighter/theme/lobe-theme.mjs +370 -0
  189. package/es/Highlighter/theme/lobe-theme.mjs.map +1 -0
  190. package/es/Hotkey/Hotkey.d.mts +2 -2
  191. package/es/Hotkey/Hotkey.mjs +5 -20
  192. package/es/Hotkey/Hotkey.mjs.map +1 -1
  193. package/es/Hotkey/style.mjs +53 -17
  194. package/es/Hotkey/style.mjs.map +1 -1
  195. package/es/HotkeyInput/HotkeyInput.d.mts +2 -2
  196. package/es/HotkeyInput/HotkeyInput.mjs +5 -36
  197. package/es/HotkeyInput/HotkeyInput.mjs.map +1 -1
  198. package/es/HotkeyInput/style.mjs +46 -14
  199. package/es/HotkeyInput/style.mjs.map +1 -1
  200. package/es/Icon/Icon.d.mts +2 -2
  201. package/es/Icon/Icon.mjs +2 -10
  202. package/es/Icon/Icon.mjs.map +1 -1
  203. package/es/Icon/components/IconProvider.d.mts +3 -3
  204. package/es/Icon/style.mjs +15 -6
  205. package/es/Icon/style.mjs.map +1 -1
  206. package/es/Image/Image.mjs +8 -15
  207. package/es/Image/Image.mjs.map +1 -1
  208. package/es/Image/PreviewGroup.d.mts +2 -2
  209. package/es/Image/components/Toolbar.mjs +1 -2
  210. package/es/Image/components/Toolbar.mjs.map +1 -1
  211. package/es/Image/components/usePreview.mjs +2 -2
  212. package/es/Image/components/usePreview.mjs.map +1 -1
  213. package/es/Image/components/usePreviewGroup.mjs +4 -4
  214. package/es/Image/components/usePreviewGroup.mjs.map +1 -1
  215. package/es/Image/style.mjs +79 -54
  216. package/es/Image/style.mjs.map +1 -1
  217. package/es/ImageSelect/ImageSelect.mjs +2 -2
  218. package/es/ImageSelect/ImageSelect.mjs.map +1 -1
  219. package/es/ImageSelect/styles.mjs +11 -10
  220. package/es/ImageSelect/styles.mjs.map +1 -1
  221. package/es/Input/Input.d.mts +2 -2
  222. package/es/Input/Input.mjs +7 -21
  223. package/es/Input/Input.mjs.map +1 -1
  224. package/es/Input/InputNumber.d.mts +2 -2
  225. package/es/Input/InputNumber.mjs +7 -21
  226. package/es/Input/InputNumber.mjs.map +1 -1
  227. package/es/Input/InputOPT.d.mts +2 -2
  228. package/es/Input/InputOPT.mjs +7 -22
  229. package/es/Input/InputOPT.mjs.map +1 -1
  230. package/es/Input/InputPassword.d.mts +2 -2
  231. package/es/Input/InputPassword.mjs +6 -21
  232. package/es/Input/InputPassword.mjs.map +1 -1
  233. package/es/Input/TextArea.d.mts +2 -2
  234. package/es/Input/TextArea.mjs +6 -21
  235. package/es/Input/TextArea.mjs.map +1 -1
  236. package/es/Input/style.mjs +57 -25
  237. package/es/Input/style.mjs.map +1 -1
  238. package/es/Layout/Layout.mjs +36 -33
  239. package/es/Layout/Layout.mjs.map +1 -1
  240. package/es/Layout/components/LayoutFooter.d.mts +2 -2
  241. package/es/Layout/components/LayoutFooter.mjs +2 -2
  242. package/es/Layout/components/LayoutFooter.mjs.map +1 -1
  243. package/es/Layout/components/LayoutHeader.d.mts +2 -2
  244. package/es/Layout/components/LayoutHeader.mjs +2 -2
  245. package/es/Layout/components/LayoutHeader.mjs.map +1 -1
  246. package/es/Layout/components/LayoutMain.d.mts +2 -2
  247. package/es/Layout/components/LayoutMain.mjs +2 -2
  248. package/es/Layout/components/LayoutMain.mjs.map +1 -1
  249. package/es/Layout/components/LayoutSidebar.d.mts +2 -2
  250. package/es/Layout/components/LayoutSidebar.mjs +3 -3
  251. package/es/Layout/components/LayoutSidebar.mjs.map +1 -1
  252. package/es/Layout/components/LayoutSidebarInner.d.mts +2 -2
  253. package/es/Layout/components/LayoutSidebarInner.mjs +2 -2
  254. package/es/Layout/components/LayoutSidebarInner.mjs.map +1 -1
  255. package/es/Layout/components/LayoutToc.d.mts +2 -2
  256. package/es/Layout/components/LayoutToc.mjs +2 -2
  257. package/es/Layout/components/LayoutToc.mjs.map +1 -1
  258. package/es/Layout/style.mjs +6 -5
  259. package/es/Layout/style.mjs.map +1 -1
  260. package/es/List/ListItem/index.d.mts +2 -2
  261. package/es/List/ListItem/index.mjs +2 -2
  262. package/es/List/ListItem/index.mjs.map +1 -1
  263. package/es/List/ListItem/style.mjs +12 -11
  264. package/es/List/ListItem/style.mjs.map +1 -1
  265. package/es/Markdown/Markdown.d.mts +2 -2
  266. package/es/Markdown/Markdown.mjs +3 -25
  267. package/es/Markdown/Markdown.mjs.map +1 -1
  268. package/es/Markdown/SyntaxMarkdown/StreamdownRender.mjs +1 -2
  269. package/es/Markdown/SyntaxMarkdown/StreamdownRender.mjs.map +1 -1
  270. package/es/Markdown/SyntaxMarkdown/style.mjs +3 -3
  271. package/es/Markdown/SyntaxMarkdown/style.mjs.map +1 -1
  272. package/es/Markdown/Typography.d.mts +2 -2
  273. package/es/Markdown/Typography.mjs +2 -2
  274. package/es/Markdown/Typography.mjs.map +1 -1
  275. package/es/Markdown/components/CodeBlock.mjs +1 -0
  276. package/es/Markdown/components/CodeBlock.mjs.map +1 -1
  277. package/es/Markdown/components/SearchResultCards/SearchResultCard.mjs +1 -2
  278. package/es/Markdown/components/SearchResultCards/SearchResultCard.mjs.map +1 -1
  279. package/es/Markdown/components/SearchResultCards/index.d.mts +2 -2
  280. package/es/Markdown/components/SearchResultCards/style.mjs +3 -3
  281. package/es/Markdown/components/SearchResultCards/style.mjs.map +1 -1
  282. package/es/Markdown/markdown.style.mjs +23 -23
  283. package/es/Markdown/markdown.style.mjs.map +1 -1
  284. package/es/Markdown/style.mjs +48 -26
  285. package/es/Markdown/style.mjs.map +1 -1
  286. package/es/MaskShadow/MaskShadow.d.mts +2 -2
  287. package/es/MaskShadow/MaskShadow.mjs +8 -12
  288. package/es/MaskShadow/MaskShadow.mjs.map +1 -1
  289. package/es/MaskShadow/style.mjs +33 -8
  290. package/es/MaskShadow/style.mjs.map +1 -1
  291. package/es/Menu/Menu.d.mts +2 -2
  292. package/es/Menu/Menu.mjs +3 -25
  293. package/es/Menu/Menu.mjs.map +1 -1
  294. package/es/Menu/style.mjs +40 -15
  295. package/es/Menu/style.mjs.map +1 -1
  296. package/es/Mermaid/FullFeatured.mjs +2 -35
  297. package/es/Mermaid/FullFeatured.mjs.map +1 -1
  298. package/es/Mermaid/Mermaid.d.mts +2 -2
  299. package/es/Mermaid/Mermaid.mjs +5 -28
  300. package/es/Mermaid/Mermaid.mjs.map +1 -1
  301. package/es/Mermaid/SyntaxMermaid/StaticMermaid.mjs +82 -0
  302. package/es/Mermaid/SyntaxMermaid/StaticMermaid.mjs.map +1 -0
  303. package/es/Mermaid/SyntaxMermaid/StreamMermaid.mjs +94 -0
  304. package/es/Mermaid/SyntaxMermaid/StreamMermaid.mjs.map +1 -0
  305. package/es/Mermaid/SyntaxMermaid/index.d.mts +2 -2
  306. package/es/Mermaid/SyntaxMermaid/index.mjs +36 -58
  307. package/es/Mermaid/SyntaxMermaid/index.mjs.map +1 -1
  308. package/es/Mermaid/SyntaxMermaid/style.mjs +80 -0
  309. package/es/Mermaid/SyntaxMermaid/style.mjs.map +1 -0
  310. package/es/Mermaid/type.d.mts +3 -2
  311. package/es/Modal/Modal.d.mts +2 -2
  312. package/es/Modal/Modal.mjs +8 -9
  313. package/es/Modal/Modal.mjs.map +1 -1
  314. package/es/Modal/style.mjs +13 -11
  315. package/es/Modal/style.mjs.map +1 -1
  316. package/es/MotionProvider/index.d.mts +2 -2
  317. package/es/ScrollShadow/ScrollShadow.mjs +20 -43
  318. package/es/ScrollShadow/ScrollShadow.mjs.map +1 -1
  319. package/es/ScrollShadow/style.mjs +54 -12
  320. package/es/ScrollShadow/style.mjs.map +1 -1
  321. package/es/SearchBar/SearchBar.d.mts +2 -2
  322. package/es/SearchBar/SearchBar.mjs +2 -2
  323. package/es/SearchBar/SearchBar.mjs.map +1 -1
  324. package/es/SearchBar/style.mjs +7 -6
  325. package/es/SearchBar/style.mjs.map +1 -1
  326. package/es/Segmented/Segmented.d.mts +2 -2
  327. package/es/Segmented/Segmented.mjs +4 -26
  328. package/es/Segmented/Segmented.mjs.map +1 -1
  329. package/es/Segmented/style.mjs +33 -9
  330. package/es/Segmented/style.mjs.map +1 -1
  331. package/es/Select/Select.d.mts +2 -2
  332. package/es/Select/Select.mjs +7 -21
  333. package/es/Select/Select.mjs.map +1 -1
  334. package/es/Select/style.mjs +36 -19
  335. package/es/Select/style.mjs.map +1 -1
  336. package/es/SideNav/SideNav.d.mts +2 -2
  337. package/es/SideNav/SideNav.mjs +2 -2
  338. package/es/SideNav/SideNav.mjs.map +1 -1
  339. package/es/SideNav/style.mjs +5 -5
  340. package/es/SideNav/style.mjs.map +1 -1
  341. package/es/Skeleton/Skeleton.mjs +2 -2
  342. package/es/Skeleton/Skeleton.mjs.map +1 -1
  343. package/es/Skeleton/SkeletonAvatar.mjs +3 -3
  344. package/es/Skeleton/SkeletonAvatar.mjs.map +1 -1
  345. package/es/Skeleton/SkeletonBlock.mjs +2 -2
  346. package/es/Skeleton/SkeletonBlock.mjs.map +1 -1
  347. package/es/Skeleton/SkeletonButton.mjs +5 -6
  348. package/es/Skeleton/SkeletonButton.mjs.map +1 -1
  349. package/es/Skeleton/SkeletonTags.mjs +5 -5
  350. package/es/Skeleton/SkeletonTags.mjs.map +1 -1
  351. package/es/Skeleton/SkeletonTitle.mjs +2 -2
  352. package/es/Skeleton/SkeletonTitle.mjs.map +1 -1
  353. package/es/Skeleton/style.mjs +7 -8
  354. package/es/Skeleton/style.mjs.map +1 -1
  355. package/es/SliderWithInput/SliderWithInput.d.mts +2 -2
  356. package/es/Snippet/Snippet.mjs +2 -21
  357. package/es/Snippet/Snippet.mjs.map +1 -1
  358. package/es/Snippet/style.mjs +27 -9
  359. package/es/Snippet/style.mjs.map +1 -1
  360. package/es/SortableList/SortableList.mjs +1 -2
  361. package/es/SortableList/SortableList.mjs.map +1 -1
  362. package/es/SortableList/components/DragHandle.d.mts +2 -2
  363. package/es/SortableList/components/SortableItem.d.mts +2 -2
  364. package/es/SortableList/components/SortableItem.mjs +3 -22
  365. package/es/SortableList/components/SortableItem.mjs.map +1 -1
  366. package/es/SortableList/style.mjs +24 -7
  367. package/es/SortableList/style.mjs.map +1 -1
  368. package/es/Tabs/Tabs.mjs +3 -26
  369. package/es/Tabs/Tabs.mjs.map +1 -1
  370. package/es/Tabs/style.mjs +34 -10
  371. package/es/Tabs/style.mjs.map +1 -1
  372. package/es/Tag/Tag.mjs +3 -21
  373. package/es/Tag/Tag.mjs.map +1 -1
  374. package/es/Tag/styles.mjs +36 -10
  375. package/es/Tag/styles.mjs.map +1 -1
  376. package/es/Text/Text.mjs +2 -35
  377. package/es/Text/Text.mjs.map +1 -1
  378. package/es/Text/styles.mjs +49 -17
  379. package/es/Text/styles.mjs.map +1 -1
  380. package/es/ThemeProvider/ConfigProvider.mjs +11 -12
  381. package/es/ThemeProvider/ConfigProvider.mjs.map +1 -1
  382. package/es/ThemeProvider/ThemeProvider.d.mts +2 -2
  383. package/es/ThemeProvider/ThemeProvider.mjs +1 -1
  384. package/es/Toc/Toc.d.mts +2 -2
  385. package/es/Toc/Toc.mjs +8 -6
  386. package/es/Toc/Toc.mjs.map +1 -1
  387. package/es/Toc/TocMobile.mjs +1 -5
  388. package/es/Toc/TocMobile.mjs.map +1 -1
  389. package/es/Toc/style.mjs +52 -52
  390. package/es/Toc/style.mjs.map +1 -1
  391. package/es/Tooltip/TooltipFloating.mjs +2 -2
  392. package/es/Tooltip/TooltipFloating.mjs.map +1 -1
  393. package/es/Tooltip/TooltipPortal.mjs +3 -1
  394. package/es/Tooltip/TooltipPortal.mjs.map +1 -1
  395. package/es/Tooltip/style.mjs +7 -7
  396. package/es/Tooltip/style.mjs.map +1 -1
  397. package/es/Video/index.d.mts +2 -2
  398. package/es/Video/index.mjs +13 -13
  399. package/es/Video/index.mjs.map +1 -1
  400. package/es/Video/style.mjs +49 -42
  401. package/es/Video/style.mjs.map +1 -1
  402. package/es/awesome/AuroraBackground/AuroraBackground.d.mts +2 -2
  403. package/es/awesome/AuroraBackground/AuroraBackground.mjs +4 -3
  404. package/es/awesome/AuroraBackground/AuroraBackground.mjs.map +1 -1
  405. package/es/awesome/AuroraBackground/style.mjs +129 -90
  406. package/es/awesome/AuroraBackground/style.mjs.map +1 -1
  407. package/es/awesome/BottomGradientButton/BottomGradientButton.d.mts +2 -2
  408. package/es/awesome/BottomGradientButton/BottomGradientButton.mjs +2 -2
  409. package/es/awesome/BottomGradientButton/BottomGradientButton.mjs.map +1 -1
  410. package/es/awesome/BottomGradientButton/style.mjs +6 -5
  411. package/es/awesome/BottomGradientButton/style.mjs.map +1 -1
  412. package/es/awesome/Features/FeatureItem.mjs +10 -7
  413. package/es/awesome/Features/FeatureItem.mjs.map +1 -1
  414. package/es/awesome/Features/Features.d.mts +2 -2
  415. package/es/awesome/Features/style.mjs +141 -90
  416. package/es/awesome/Features/style.mjs.map +1 -1
  417. package/es/awesome/Giscus/Giscus.d.mts +2 -2
  418. package/es/awesome/GradientButton/GradientButton.d.mts +2 -2
  419. package/es/awesome/GradientButton/GradientButton.mjs +26 -5
  420. package/es/awesome/GradientButton/GradientButton.mjs.map +1 -1
  421. package/es/awesome/GradientButton/style.mjs +93 -63
  422. package/es/awesome/GradientButton/style.mjs.map +1 -1
  423. package/es/awesome/GridBackground/GridBackground.d.mts +2 -2
  424. package/es/awesome/GridBackground/GridBackground.mjs +30 -9
  425. package/es/awesome/GridBackground/GridBackground.mjs.map +1 -1
  426. package/es/awesome/GridBackground/GridShowcase.d.mts +2 -2
  427. package/es/awesome/GridBackground/style.mjs +70 -62
  428. package/es/awesome/GridBackground/style.mjs.map +1 -1
  429. package/es/awesome/Hero/Hero.d.mts +2 -2
  430. package/es/awesome/Hero/Hero.mjs +1 -2
  431. package/es/awesome/Hero/Hero.mjs.map +1 -1
  432. package/es/awesome/Hero/style.mjs +11 -10
  433. package/es/awesome/Hero/style.mjs.map +1 -1
  434. package/es/awesome/Spline/ParentSize.mjs +1 -1
  435. package/es/awesome/Spline/Spine.d.mts +2 -2
  436. package/es/awesome/Spotlight/Spotlight.d.mts +2 -2
  437. package/es/awesome/Spotlight/Spotlight.mjs +15 -7
  438. package/es/awesome/Spotlight/Spotlight.mjs.map +1 -1
  439. package/es/awesome/Spotlight/style.mjs +76 -23
  440. package/es/awesome/Spotlight/style.mjs.map +1 -1
  441. package/es/awesome/SpotlightCard/SpotlightCard.d.mts +2 -2
  442. package/es/awesome/SpotlightCard/SpotlightCard.mjs +11 -7
  443. package/es/awesome/SpotlightCard/SpotlightCard.mjs.map +1 -1
  444. package/es/awesome/SpotlightCard/SpotlightCardItem.mjs +10 -7
  445. package/es/awesome/SpotlightCard/SpotlightCardItem.mjs.map +1 -1
  446. package/es/awesome/SpotlightCard/style.mjs +121 -69
  447. package/es/awesome/SpotlightCard/style.mjs.map +1 -1
  448. package/es/awesome/TypewriterEffect/TypewriterEffect.d.mts +2 -2
  449. package/es/awesome/TypewriterEffect/TypewriterEffect.mjs +6 -5
  450. package/es/awesome/TypewriterEffect/TypewriterEffect.mjs.map +1 -1
  451. package/es/awesome/TypewriterEffect/style.mjs +8 -8
  452. package/es/awesome/TypewriterEffect/style.mjs.map +1 -1
  453. package/es/brand/BrandLoading/{style-Cz42xGgB.css → style-DX648z7a.css} +1 -1
  454. package/es/brand/BrandLoading/{style-Cz42xGgB.css.map → style-DX648z7a.css.map} +1 -1
  455. package/es/brand/LobeChat/index.d.mts +2 -2
  456. package/es/brand/LobeChat/index.mjs +5 -7
  457. package/es/brand/LobeChat/index.mjs.map +1 -1
  458. package/es/brand/LobeHub/index.d.mts +2 -2
  459. package/es/brand/LobeHub/index.mjs +5 -7
  460. package/es/brand/LobeHub/index.mjs.map +1 -1
  461. package/es/brand/LobeHub/style.mjs +3 -3
  462. package/es/brand/LobeHub/style.mjs.map +1 -1
  463. package/es/brand/LogoFlat/index.d.mts +3 -6
  464. package/es/brand/LogoFlat/index.mjs +2 -76
  465. package/es/brand/LogoFlat/index.mjs.map +1 -1
  466. package/es/brand/LogoMono/index.d.mts +2 -10
  467. package/es/brand/LogoMono/index.mjs +2 -84
  468. package/es/brand/LogoThree/LogoSpline.d.mts +2 -2
  469. package/es/brand/LogoThree/index.d.mts +2 -2
  470. package/es/brand/index.d.mts +3 -3
  471. package/es/brand/index.mjs +2 -2
  472. package/es/chat/BackBottom/BackBottom.d.mts +2 -2
  473. package/es/chat/BackBottom/BackBottom.mjs +3 -3
  474. package/es/chat/BackBottom/BackBottom.mjs.map +1 -1
  475. package/es/chat/BackBottom/style.mjs +27 -8
  476. package/es/chat/BackBottom/style.mjs.map +1 -1
  477. package/es/chat/ChatHeader/ChatHeader.mjs +2 -2
  478. package/es/chat/ChatHeader/ChatHeader.mjs.map +1 -1
  479. package/es/chat/ChatHeader/ChatHeaderTitle.mjs +8 -9
  480. package/es/chat/ChatHeader/ChatHeaderTitle.mjs.map +1 -1
  481. package/es/chat/ChatHeader/style.mjs +7 -7
  482. package/es/chat/ChatHeader/style.mjs.map +1 -1
  483. package/es/chat/ChatInputArea/ChatInputArea.mjs +1 -2
  484. package/es/chat/ChatInputArea/ChatInputArea.mjs.map +1 -1
  485. package/es/chat/ChatInputArea/components/ChatInputActionBar.mjs +4 -5
  486. package/es/chat/ChatInputArea/components/ChatInputActionBar.mjs.map +1 -1
  487. package/es/chat/ChatInputArea/components/ChatInputAreaInner.d.mts +2 -2
  488. package/es/chat/ChatInputArea/components/ChatSendButton.mjs +2 -3
  489. package/es/chat/ChatInputArea/components/ChatSendButton.mjs.map +1 -1
  490. package/es/chat/ChatInputArea/style.mjs +6 -5
  491. package/es/chat/ChatInputArea/style.mjs.map +1 -1
  492. package/es/chat/ChatItem/ChatItem.d.mts +2 -2
  493. package/es/chat/ChatItem/ChatItem.mjs +19 -16
  494. package/es/chat/ChatItem/ChatItem.mjs.map +1 -1
  495. package/es/chat/ChatItem/components/Actions.mjs +8 -8
  496. package/es/chat/ChatItem/components/Actions.mjs.map +1 -1
  497. package/es/chat/ChatItem/components/Avatar.mjs +7 -3
  498. package/es/chat/ChatItem/components/Avatar.mjs.map +1 -1
  499. package/es/chat/ChatItem/components/ErrorContent.mjs +2 -3
  500. package/es/chat/ChatItem/components/ErrorContent.mjs.map +1 -1
  501. package/es/chat/ChatItem/components/Loading.mjs +3 -4
  502. package/es/chat/ChatItem/components/Loading.mjs.map +1 -1
  503. package/es/chat/ChatItem/components/MessageContent.mjs +11 -10
  504. package/es/chat/ChatItem/components/MessageContent.mjs.map +1 -1
  505. package/es/chat/ChatItem/components/Title.mjs +3 -8
  506. package/es/chat/ChatItem/components/Title.mjs.map +1 -1
  507. package/es/chat/ChatItem/style.mjs +294 -142
  508. package/es/chat/ChatItem/style.mjs.map +1 -1
  509. package/es/chat/ChatList/ChatList.d.mts +2 -2
  510. package/es/chat/ChatList/ChatList.mjs +2 -2
  511. package/es/chat/ChatList/ChatList.mjs.map +1 -1
  512. package/es/chat/ChatList/style.mjs +3 -3
  513. package/es/chat/ChatList/style.mjs.map +1 -1
  514. package/es/chat/EditableMessage/EditableMessage.d.mts +2 -2
  515. package/es/chat/EditableMessage/EditableMessage.mjs +1 -1
  516. package/es/chat/EditableMessageList/EditableMessageList.d.mts +2 -2
  517. package/es/chat/LoadingDots/LoadingDots.mjs +17 -10
  518. package/es/chat/LoadingDots/LoadingDots.mjs.map +1 -1
  519. package/es/chat/LoadingDots/style.mjs +117 -116
  520. package/es/chat/LoadingDots/style.mjs.map +1 -1
  521. package/es/chat/LoadingDots/type.d.mts +6 -0
  522. package/es/chat/MessageInput/MessageInput.d.mts +2 -2
  523. package/es/chat/MessageInput/MessageInput.mjs +4 -5
  524. package/es/chat/MessageInput/MessageInput.mjs.map +1 -1
  525. package/es/chat/MessageInput/style.mjs +4 -4
  526. package/es/chat/MessageInput/style.mjs.map +1 -1
  527. package/es/chat/MessageModal/MessageModal.d.mts +2 -2
  528. package/es/chat/MessageModal/MessageModal.mjs +4 -5
  529. package/es/chat/MessageModal/MessageModal.mjs.map +1 -1
  530. package/es/chat/TokenTag/TokenTag.mjs +5 -6
  531. package/es/chat/TokenTag/TokenTag.mjs.map +1 -1
  532. package/es/color/ColorScales/ScaleRow.mjs +1 -2
  533. package/es/color/ColorScales/ScaleRow.mjs.map +1 -1
  534. package/es/color/ColorScales/index.d.mts +2 -2
  535. package/es/color/ColorScales/index.mjs +1 -2
  536. package/es/color/ColorScales/index.mjs.map +1 -1
  537. package/es/color/ColorScales/style.mjs +4 -4
  538. package/es/color/ColorScales/style.mjs.map +1 -1
  539. package/es/hooks/useHighlight.mjs +84 -227
  540. package/es/hooks/useHighlight.mjs.map +1 -1
  541. package/es/hooks/useMermaid.mjs +104 -57
  542. package/es/hooks/useMermaid.mjs.map +1 -1
  543. package/es/hooks/useStreamHighlight.mjs +221 -0
  544. package/es/hooks/useStreamHighlight.mjs.map +1 -0
  545. package/es/hooks/useStreamMermaid.mjs +87 -0
  546. package/es/hooks/useStreamMermaid.mjs.map +1 -0
  547. package/es/i18n/context.d.mts +2 -2
  548. package/es/icons/lucideExtra/BotPromptIcon.d.mts +2 -2
  549. package/es/icons/lucideExtra/CreateBotIcon.d.mts +2 -2
  550. package/es/icons/lucideExtra/DiscordIcon.d.mts +2 -2
  551. package/es/icons/lucideExtra/GlobeOffIcon.d.mts +3 -3
  552. package/es/icons/lucideExtra/GroupBotIcon.d.mts +3 -3
  553. package/es/icons/lucideExtra/GroupBotSquareIcon.d.mts +3 -3
  554. package/es/icons/lucideExtra/LeftClickIcon.d.mts +3 -3
  555. package/es/icons/lucideExtra/LeftDoubleClickIcon.d.mts +3 -3
  556. package/es/icons/lucideExtra/McpIcon.d.mts +3 -3
  557. package/es/icons/lucideExtra/ProviderIcon.d.mts +3 -3
  558. package/es/icons/lucideExtra/RightClickIcon.d.mts +3 -3
  559. package/es/icons/lucideExtra/RightDoubleClickIcon.d.mts +3 -3
  560. package/es/icons/lucideExtra/ShapesUploadIcon.d.mts +3 -3
  561. package/es/icons/lucideExtra/TreeDownRightIcon.d.mts +3 -3
  562. package/es/icons/lucideExtra/TreeUpDownRightIcon.d.mts +3 -3
  563. package/es/index.d.mts +2 -1
  564. package/es/index.mjs +9 -8
  565. package/es/mdx/Callout/index.mjs +8 -7
  566. package/es/mdx/Callout/index.mjs.map +1 -1
  567. package/es/mdx/Callout/style.mjs +3 -4
  568. package/es/mdx/Callout/style.mjs.map +1 -1
  569. package/es/mdx/Cards/Card.mjs +14 -16
  570. package/es/mdx/Cards/Card.mjs.map +1 -1
  571. package/es/mdx/Cards/index.mjs +2 -2
  572. package/es/mdx/Cards/index.mjs.map +1 -1
  573. package/es/mdx/Cards/style.mjs +3 -3
  574. package/es/mdx/Cards/style.mjs.map +1 -1
  575. package/es/mdx/FileTree/Folder.mjs +1 -16
  576. package/es/mdx/FileTree/Folder.mjs.map +1 -1
  577. package/es/mdx/FileTree/index.mjs +2 -2
  578. package/es/mdx/FileTree/index.mjs.map +1 -1
  579. package/es/mdx/FileTree/style.mjs +19 -7
  580. package/es/mdx/FileTree/style.mjs.map +1 -1
  581. package/es/mdx/Mdx/index.d.mts +2 -2
  582. package/es/mdx/Mdx/index.mjs +2 -2
  583. package/es/mdx/Mdx/index.mjs.map +1 -1
  584. package/es/mdx/Steps/index.mjs +2 -2
  585. package/es/mdx/Steps/index.mjs.map +1 -1
  586. package/es/mdx/Steps/style.mjs +8 -8
  587. package/es/mdx/Steps/style.mjs.map +1 -1
  588. package/es/mdx/Tabs/Tab.mjs +3 -12
  589. package/es/mdx/Tabs/Tab.mjs.map +1 -1
  590. package/es/mdx/Tabs/index.mjs +2 -2
  591. package/es/mdx/Tabs/index.mjs.map +1 -1
  592. package/es/mdx/Tabs/style.mjs +12 -14
  593. package/es/mdx/Tabs/style.mjs.map +1 -1
  594. package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs +1 -22
  595. package/es/mdx/mdxComponents/Citation/PopoverPanel.mjs.map +1 -1
  596. package/es/mdx/mdxComponents/Citation/index.mjs +3 -17
  597. package/es/mdx/mdxComponents/Citation/index.mjs.map +1 -1
  598. package/es/mdx/mdxComponents/Citation/style.mjs +39 -0
  599. package/es/mdx/mdxComponents/Citation/style.mjs.map +1 -0
  600. package/es/mdx/mdxComponents/Pre.mjs +7 -9
  601. package/es/mdx/mdxComponents/Pre.mjs.map +1 -1
  602. package/es/mobile/ChatHeader/ChatHeader.mjs +2 -2
  603. package/es/mobile/ChatHeader/ChatHeader.mjs.map +1 -1
  604. package/es/mobile/ChatHeader/ChatHeaderTitle.d.mts +2 -2
  605. package/es/mobile/ChatHeader/ChatHeaderTitle.mjs +7 -8
  606. package/es/mobile/ChatHeader/ChatHeaderTitle.mjs.map +1 -1
  607. package/es/mobile/ChatHeader/style.mjs +6 -6
  608. package/es/mobile/ChatHeader/style.mjs.map +1 -1
  609. package/es/mobile/ChatInputArea/ChatInputArea.mjs +2 -2
  610. package/es/mobile/ChatInputArea/ChatInputArea.mjs.map +1 -1
  611. package/es/mobile/ChatInputArea/components/ChatSendButton.d.mts +2 -2
  612. package/es/mobile/ChatInputArea/style.mjs +5 -5
  613. package/es/mobile/ChatInputArea/style.mjs.map +1 -1
  614. package/es/mobile/SafeArea/SafeArea.mjs +2 -2
  615. package/es/mobile/SafeArea/SafeArea.mjs.map +1 -1
  616. package/es/mobile/SafeArea/style.mjs +3 -3
  617. package/es/mobile/SafeArea/style.mjs.map +1 -1
  618. package/es/mobile/TabBar/TabBar.mjs +2 -2
  619. package/es/mobile/TabBar/TabBar.mjs.map +1 -1
  620. package/es/mobile/TabBar/style.mjs +7 -7
  621. package/es/mobile/TabBar/style.mjs.map +1 -1
  622. package/es/storybook/StoryBook/index.d.mts +2 -2
  623. package/es/storybook/StoryBook/index.mjs +4 -5
  624. package/es/storybook/StoryBook/index.mjs.map +1 -1
  625. package/es/storybook/StoryBook/style.mjs +27 -24
  626. package/es/storybook/StoryBook/style.mjs.map +1 -1
  627. package/es/styles/index.d.mts +2 -1
  628. package/es/styles/index.mjs +2 -1
  629. package/es/styles/theme/customStylishStatic.d.mts +7 -0
  630. package/es/styles/theme/customStylishStatic.mjs +161 -0
  631. package/es/styles/theme/customStylishStatic.mjs.map +1 -0
  632. package/package.json +3 -2
  633. package/es/brand/LogoMono/index.mjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"TokenTag.mjs","names":["TokenTag: FC<TokenTagProps>","chatMessages","type: 'normal' | 'low' | 'overload'","ActionIcon"],"sources":["../../../src/chat/TokenTag/TokenTag.tsx"],"sourcesContent":["'use client';\n\nimport { Progress } from 'antd';\nimport { useTheme } from 'antd-style';\nimport numeral from 'numeral';\nimport { type FC, useMemo } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport chatMessages from '@/i18n/resources/en/chat';\nimport { useTranslation } from '@/i18n/useTranslation';\n\nimport type { TokenTagProps } from './type';\n\nconst format = (number: number) => numeral(number).format('0,0');\n\nconst TokenTag: FC<TokenTagProps> = ({\n mode = 'remained',\n maxValue,\n value,\n text,\n showInfo,\n size = 20,\n ...rest\n}) => {\n const theme = useTheme();\n const { t } = useTranslation(chatMessages);\n const valueLeft = maxValue - value;\n const percent = value / maxValue;\n const remainedText = text?.remained ?? t('tokenTag.remained');\n const usedText = text?.used ?? t('tokenTag.used');\n const overloadText = text?.overload ?? t('tokenTag.overload');\n\n const data = useMemo(() => {\n let type: 'normal' | 'low' | 'overload';\n let color;\n\n if (percent < 0.7) {\n type = 'normal';\n color = theme.colorText;\n } else if (percent < 0.9) {\n type = 'low';\n color = theme.colorWarning;\n } else {\n type = 'overload';\n color = theme.colorError;\n }\n return {\n color,\n type,\n };\n }, [percent, theme]);\n\n const title =\n valueLeft > 0\n ? [\n mode === 'remained' ? remainedText : usedText,\n mode === 'remained' ? format(valueLeft) : format(value),\n ].join(' ')\n : overloadText;\n\n return (\n <ActionIcon\n icon={\n <Progress\n percent={percent * 100}\n showInfo={false}\n size={Number(typeof size === 'object' ? size?.size || 20 : size) || 20}\n strokeColor={data.color}\n type=\"circle\"\n />\n }\n size={size}\n title={showInfo ? title : undefined}\n {...rest}\n />\n );\n};\n\nTokenTag.displayName = 'TokenTag';\n\nexport default TokenTag;\n"],"mappings":";;;;;;;;;;;;AAaA,MAAM,UAAU,WAAmB,QAAQ,OAAO,CAAC,OAAO,MAAM;AAEhE,MAAMA,YAA+B,EACnC,OAAO,YACP,UACA,OACA,MACA,UACA,OAAO,IACP,GAAG,WACC;CACJ,MAAM,QAAQ,UAAU;CACxB,MAAM,EAAE,MAAM,eAAeC,aAAa;CAC1C,MAAM,YAAY,WAAW;CAC7B,MAAM,UAAU,QAAQ;CACxB,MAAM,eAAe,MAAM,YAAY,EAAE,oBAAoB;CAC7D,MAAM,WAAW,MAAM,QAAQ,EAAE,gBAAgB;CACjD,MAAM,eAAe,MAAM,YAAY,EAAE,oBAAoB;CAE7D,MAAM,OAAO,cAAc;EACzB,IAAIC;EACJ,IAAI;AAEJ,MAAI,UAAU,IAAK;AACjB,UAAO;AACP,WAAQ,MAAM;aACL,UAAU,IAAK;AACxB,UAAO;AACP,WAAQ,MAAM;SACT;AACL,UAAO;AACP,WAAQ,MAAM;;AAEhB,SAAO;GACL;GACA;GACD;IACA,CAAC,SAAS,MAAM,CAAC;CAEpB,MAAM,QACJ,YAAY,IACR,CACE,SAAS,aAAa,eAAe,UACrC,SAAS,aAAa,OAAO,UAAU,GAAG,OAAO,MAAM,CACxD,CAAC,KAAK,IAAI,GACX;AAEN,QACE,oBAACC;EACC,MACE,oBAAC;GACC,SAAS,UAAU;GACnB,UAAU;GACV,MAAM,OAAO,OAAO,SAAS,WAAW,MAAM,QAAQ,KAAK,KAAK,IAAI;GACpE,aAAa,KAAK;GAClB,MAAK;IACL;EAEE;EACN,OAAO,WAAW,QAAQ;EAC1B,GAAI;GACJ;;AAIN,SAAS,cAAc;AAEvB,uBAAe"}
1
+ {"version":3,"file":"TokenTag.mjs","names":["TokenTag: FC<TokenTagProps>","chatMessages","type: 'normal' | 'low' | 'overload'","ActionIcon"],"sources":["../../../src/chat/TokenTag/TokenTag.tsx"],"sourcesContent":["'use client';\n\nimport { Progress } from 'antd';\nimport { cssVar } from 'antd-style';\nimport numeral from 'numeral';\nimport { type FC, useMemo } from 'react';\n\nimport ActionIcon from '@/ActionIcon';\nimport chatMessages from '@/i18n/resources/en/chat';\nimport { useTranslation } from '@/i18n/useTranslation';\n\nimport type { TokenTagProps } from './type';\n\nconst format = (number: number) => numeral(number).format('0,0');\n\nconst TokenTag: FC<TokenTagProps> = ({\n mode = 'remained',\n maxValue,\n value,\n text,\n showInfo,\n size = 20,\n ...rest\n}) => {\n const { t } = useTranslation(chatMessages);\n const valueLeft = maxValue - value;\n const percent = value / maxValue;\n const remainedText = text?.remained ?? t('tokenTag.remained');\n const usedText = text?.used ?? t('tokenTag.used');\n const overloadText = text?.overload ?? t('tokenTag.overload');\n\n const data = useMemo(() => {\n let type: 'normal' | 'low' | 'overload';\n let color;\n\n if (percent < 0.7) {\n type = 'normal';\n color = cssVar.colorText;\n } else if (percent < 0.9) {\n type = 'low';\n color = cssVar.colorWarning;\n } else {\n type = 'overload';\n color = cssVar.colorError;\n }\n return {\n color,\n type,\n };\n }, [percent]);\n\n const title =\n valueLeft > 0\n ? [\n mode === 'remained' ? remainedText : usedText,\n mode === 'remained' ? format(valueLeft) : format(value),\n ].join(' ')\n : overloadText;\n\n return (\n <ActionIcon\n icon={\n <Progress\n percent={percent * 100}\n showInfo={false}\n size={Number(typeof size === 'object' ? size?.size || 20 : size) || 20}\n strokeColor={data.color}\n type=\"circle\"\n />\n }\n size={size}\n title={showInfo ? title : undefined}\n {...rest}\n />\n );\n};\n\nTokenTag.displayName = 'TokenTag';\n\nexport default TokenTag;\n"],"mappings":";;;;;;;;;;;;AAaA,MAAM,UAAU,WAAmB,QAAQ,OAAO,CAAC,OAAO,MAAM;AAEhE,MAAMA,YAA+B,EACnC,OAAO,YACP,UACA,OACA,MACA,UACA,OAAO,IACP,GAAG,WACC;CACJ,MAAM,EAAE,MAAM,eAAeC,aAAa;CAC1C,MAAM,YAAY,WAAW;CAC7B,MAAM,UAAU,QAAQ;CACxB,MAAM,eAAe,MAAM,YAAY,EAAE,oBAAoB;CAC7D,MAAM,WAAW,MAAM,QAAQ,EAAE,gBAAgB;CACjD,MAAM,eAAe,MAAM,YAAY,EAAE,oBAAoB;CAE7D,MAAM,OAAO,cAAc;EACzB,IAAIC;EACJ,IAAI;AAEJ,MAAI,UAAU,IAAK;AACjB,UAAO;AACP,WAAQ,OAAO;aACN,UAAU,IAAK;AACxB,UAAO;AACP,WAAQ,OAAO;SACV;AACL,UAAO;AACP,WAAQ,OAAO;;AAEjB,SAAO;GACL;GACA;GACD;IACA,CAAC,QAAQ,CAAC;CAEb,MAAM,QACJ,YAAY,IACR,CACE,SAAS,aAAa,eAAe,UACrC,SAAS,aAAa,OAAO,UAAU,GAAG,OAAO,MAAM,CACxD,CAAC,KAAK,IAAI,GACX;AAEN,QACE,oBAACC;EACC,MACE,oBAAC;GACC,SAAS,UAAU;GACnB,UAAU;GACV,MAAM,OAAO,OAAO,SAAS,WAAW,MAAM,QAAQ,KAAK,KAAK,IAAI;GACpE,aAAa,KAAK;GAClB,MAAK;IACL;EAEE;EACN,OAAO,WAAW,QAAQ;EAC1B,GAAI;GACJ;;AAIN,SAAS,cAAc;AAEvB,uBAAe"}
@@ -1,13 +1,12 @@
1
1
  import FlexBasic_default from "../../Flex/FlexBasic.mjs";
2
2
  import { copyToClipboard } from "../../utils/copyToClipboard.mjs";
3
- import { alphaBg, useStyles } from "./style.mjs";
3
+ import { alphaBg, styles } from "./style.mjs";
4
4
  import { memo } from "react";
5
5
  import { jsx, jsxs } from "react/jsx-runtime";
6
6
  import { Space, message } from "antd";
7
7
 
8
8
  //#region src/color/ColorScales/ScaleRow.tsx
9
9
  const ScaleRow = memo(({ name, title, scale }) => {
10
- const { styles } = useStyles();
11
10
  let style = {};
12
11
  let isAlpha = false;
13
12
  switch (title) {
@@ -1 +1 @@
1
- {"version":3,"file":"ScaleRow.mjs","names":["Flexbox"],"sources":["../../../src/color/ColorScales/ScaleRow.tsx"],"sourcesContent":["import { Space, message } from 'antd';\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport { copyToClipboard } from '@/utils/copyToClipboard';\n\nimport { alphaBg, useStyles } from './style';\n\nexport interface IScaleRow {\n name: string;\n scale: string[];\n title: 'light' | 'lightA' | 'dark' | 'darkA';\n}\n\nconst ScaleRow = memo<IScaleRow>(({ name, title, scale }) => {\n const { styles } = useStyles();\n\n let style = {};\n let isAlpha = false;\n\n switch (title) {\n case 'lightA': {\n style = { background: alphaBg.light, backgroundColor: '#fff' };\n isAlpha = true;\n break;\n }\n case 'darkA': {\n style = { background: alphaBg.dark, backgroundColor: '#000' };\n isAlpha = true;\n break;\n }\n default: {\n break;\n }\n }\n\n return (\n <Space size={2}>\n <div className={styles.scaleRowTitle} key={title}>\n <div className={styles.text}>{title}</div>\n </div>\n {scale.map((color, index) => {\n if (index === 0 || index === 12) return false;\n\n return (\n <div\n className={styles.scaleBox}\n key={index}\n onClick={async () => {\n const content = `token.${name}${index}${isAlpha ? 'A' : ''} /* ${color} */`;\n\n await copyToClipboard(content);\n message.success(content);\n }}\n style={style}\n title={color}\n >\n <Flexbox\n align={'center'}\n className={styles.scaleItem}\n horizontal\n justify={'center'}\n style={{ backgroundColor: color }}\n />\n </div>\n );\n })}\n </Space>\n );\n});\n\nexport default ScaleRow;\n"],"mappings":";;;;;;;;AAcA,MAAM,WAAW,MAAiB,EAAE,MAAM,OAAO,YAAY;CAC3D,MAAM,EAAE,WAAW,WAAW;CAE9B,IAAI,QAAQ,EAAE;CACd,IAAI,UAAU;AAEd,SAAQ,OAAR;EACE,KAAK;AACH,WAAQ;IAAE,YAAY,QAAQ;IAAO,iBAAiB;IAAQ;AAC9D,aAAU;AACV;EAEF,KAAK;AACH,WAAQ;IAAE,YAAY,QAAQ;IAAM,iBAAiB;IAAQ;AAC7D,aAAU;AACV;EAEF,QACE;;AAIJ,QACE,qBAAC;EAAM,MAAM;aACX,oBAAC;GAAI,WAAW,OAAO;aACrB,oBAAC;IAAI,WAAW,OAAO;cAAO;KAAY;KADD,MAErC,EACL,MAAM,KAAK,OAAO,UAAU;AAC3B,OAAI,UAAU,KAAK,UAAU,GAAI,QAAO;AAExC,UACE,oBAAC;IACC,WAAW,OAAO;IAElB,SAAS,YAAY;KACnB,MAAM,UAAU,SAAS,OAAO,QAAQ,UAAU,MAAM,GAAG,MAAM,MAAM;AAEvE,WAAM,gBAAgB,QAAQ;AAC9B,aAAQ,QAAQ,QAAQ;;IAEnB;IACP,OAAO;cAEP,oBAACA;KACC,OAAO;KACP,WAAW,OAAO;KAClB;KACA,SAAS;KACT,OAAO,EAAE,iBAAiB,OAAO;MACjC;MAhBG,MAiBD;IAER;GACI;EAEV;AAEF,uBAAe"}
1
+ {"version":3,"file":"ScaleRow.mjs","names":["Flexbox"],"sources":["../../../src/color/ColorScales/ScaleRow.tsx"],"sourcesContent":["import { Space, message } from 'antd';\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\nimport { copyToClipboard } from '@/utils/copyToClipboard';\n\nimport { alphaBg, styles } from './style';\n\nexport interface IScaleRow {\n name: string;\n scale: string[];\n title: 'light' | 'lightA' | 'dark' | 'darkA';\n}\n\nconst ScaleRow = memo<IScaleRow>(({ name, title, scale }) => {\n let style = {};\n let isAlpha = false;\n\n switch (title) {\n case 'lightA': {\n style = { background: alphaBg.light, backgroundColor: '#fff' };\n isAlpha = true;\n break;\n }\n case 'darkA': {\n style = { background: alphaBg.dark, backgroundColor: '#000' };\n isAlpha = true;\n break;\n }\n default: {\n break;\n }\n }\n\n return (\n <Space size={2}>\n <div className={styles.scaleRowTitle} key={title}>\n <div className={styles.text}>{title}</div>\n </div>\n {scale.map((color, index) => {\n if (index === 0 || index === 12) return false;\n\n return (\n <div\n className={styles.scaleBox}\n key={index}\n onClick={async () => {\n const content = `token.${name}${index}${isAlpha ? 'A' : ''} /* ${color} */`;\n\n await copyToClipboard(content);\n message.success(content);\n }}\n style={style}\n title={color}\n >\n <Flexbox\n align={'center'}\n className={styles.scaleItem}\n horizontal\n justify={'center'}\n style={{ backgroundColor: color }}\n />\n </div>\n );\n })}\n </Space>\n );\n});\n\nexport default ScaleRow;\n"],"mappings":";;;;;;;;AAcA,MAAM,WAAW,MAAiB,EAAE,MAAM,OAAO,YAAY;CAC3D,IAAI,QAAQ,EAAE;CACd,IAAI,UAAU;AAEd,SAAQ,OAAR;EACE,KAAK;AACH,WAAQ;IAAE,YAAY,QAAQ;IAAO,iBAAiB;IAAQ;AAC9D,aAAU;AACV;EAEF,KAAK;AACH,WAAQ;IAAE,YAAY,QAAQ;IAAM,iBAAiB;IAAQ;AAC7D,aAAU;AACV;EAEF,QACE;;AAIJ,QACE,qBAAC;EAAM,MAAM;aACX,oBAAC;GAAI,WAAW,OAAO;aACrB,oBAAC;IAAI,WAAW,OAAO;cAAO;KAAY;KADD,MAErC,EACL,MAAM,KAAK,OAAO,UAAU;AAC3B,OAAI,UAAU,KAAK,UAAU,GAAI,QAAO;AAExC,UACE,oBAAC;IACC,WAAW,OAAO;IAElB,SAAS,YAAY;KACnB,MAAM,UAAU,SAAS,OAAO,QAAQ,UAAU,MAAM,GAAG,MAAM,MAAM;AAEvE,WAAM,gBAAgB,QAAQ;AAC9B,aAAQ,QAAQ,QAAQ;;IAEnB;IACP,OAAO;cAEP,oBAACA;KACC,OAAO;KACP,WAAW,OAAO;KAClB;KACA,SAAS;KACT,OAAO,EAAE,iBAAiB,OAAO;MACjC;MAhBG,MAiBD;IAER;GACI;EAEV;AAEF,uBAAe"}
@@ -1,5 +1,5 @@
1
1
  import { ColorScaleItem } from "../types.mjs";
2
- import * as react6 from "react";
2
+ import * as react41 from "react";
3
3
 
4
4
  //#region src/color/ColorScales/index.d.ts
5
5
  interface ColorScalesProps {
@@ -16,7 +16,7 @@ interface ColorScalesProps {
16
16
  */
17
17
  scale: ColorScaleItem;
18
18
  }
19
- declare const ColorScales: react6.NamedExoticComponent<ColorScalesProps>;
19
+ declare const ColorScales: react41.NamedExoticComponent<ColorScalesProps>;
20
20
  //#endregion
21
21
  export { ColorScales, ColorScalesProps };
22
22
  //# sourceMappingURL=index.d.mts.map
@@ -1,7 +1,7 @@
1
1
  'use client';
2
2
 
3
3
  import FlexBasic_default from "../../Flex/FlexBasic.mjs";
4
- import { useStyles } from "./style.mjs";
4
+ import { styles } from "./style.mjs";
5
5
  import ScaleRow_default from "./ScaleRow.mjs";
6
6
  import { memo } from "react";
7
7
  import { jsx, jsxs } from "react/jsx-runtime";
@@ -9,7 +9,6 @@ import { Space } from "antd";
9
9
 
10
10
  //#region src/color/ColorScales/index.tsx
11
11
  const ColorScales = memo(({ name, scale, midHighLight }) => {
12
- const { styles } = useStyles();
13
12
  return /* @__PURE__ */ jsx(FlexBasic_default, {
14
13
  align: "center",
15
14
  flex: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["Flexbox","ScaleRow"],"sources":["../../../src/color/ColorScales/index.tsx"],"sourcesContent":["'use client';\n\nimport { Space } from 'antd';\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport { ColorScaleItem } from '../types';\nimport ScaleRow from './ScaleRow';\nimport { useStyles } from './style';\n\nexport interface ColorScalesProps {\n /**\n * @description Index of the mid highlight color in the scale\n */\n midHighLight: number;\n /**\n * @description Name of the color scale\n */\n name: string;\n /**\n * @description Color scale item object\n */\n scale: ColorScaleItem;\n}\n\nconst ColorScales = memo<ColorScalesProps>(({ name, scale, midHighLight }) => {\n const { styles } = useStyles();\n\n return (\n <Flexbox align={'center'} flex={1} horizontal justify={'center'}>\n <div style={{ padding: '8px 16px 32px 0' }}>\n <Space direction={'vertical'} size={2}>\n <Space key=\"scale-title\" size={2}>\n <Flexbox align={'center'} className={styles.scaleRowTitle} horizontal key=\"scale-num\" />\n {Array.from({ length: scale.light.length })\n .fill('')\n .map((_, index) => {\n if (index === 0 || index === 12) return false;\n\n const isMidHighlight = midHighLight === index;\n\n return (\n <div className={styles.scaleBox} key={`num${index}`}>\n <div className={styles.scaleBox}>\n <Flexbox\n align={'center'}\n className={styles.scaleItem}\n horizontal\n justify={'center'}\n style={{\n fontWeight: isMidHighlight ? 700 : 400,\n opacity: 0.5,\n }}\n >\n {index}\n </Flexbox>\n </div>\n </div>\n );\n })}\n </Space>\n <ScaleRow key=\"light\" name={name} scale={scale.light} title=\"light\" />\n <ScaleRow key=\"lightA\" name={name} scale={scale.lightA} title=\"lightA\" />\n <ScaleRow key=\"dark\" name={name} scale={scale.dark} title=\"dark\" />\n <ScaleRow key=\"darkA\" name={name} scale={scale.darkA} title=\"darkA\" />\n </Space>\n </div>\n </Flexbox>\n );\n});\n\nexport default ColorScales;\n"],"mappings":";;;;;;;;;;AA0BA,MAAM,cAAc,MAAwB,EAAE,MAAM,OAAO,mBAAmB;CAC5E,MAAM,EAAE,WAAW,WAAW;AAE9B,QACE,oBAACA;EAAQ,OAAO;EAAU,MAAM;EAAG;EAAW,SAAS;YACrD,oBAAC;GAAI,OAAO,EAAE,SAAS,mBAAmB;aACxC,qBAAC;IAAM,WAAW;IAAY,MAAM;;KAClC,qBAAC;MAAwB,MAAM;iBAC7B,oBAACA;OAAQ,OAAO;OAAU,WAAW,OAAO;OAAe;SAAe,YAAc,EACvF,MAAM,KAAK,EAAE,QAAQ,MAAM,MAAM,QAAQ,CAAC,CACxC,KAAK,GAAG,CACR,KAAK,GAAG,UAAU;AACjB,WAAI,UAAU,KAAK,UAAU,GAAI,QAAO;OAExC,MAAM,iBAAiB,iBAAiB;AAExC,cACE,oBAAC;QAAI,WAAW,OAAO;kBACrB,oBAAC;SAAI,WAAW,OAAO;mBACrB,oBAACA;UACC,OAAO;UACP,WAAW,OAAO;UAClB;UACA,SAAS;UACT,OAAO;WACL,YAAY,iBAAiB,MAAM;WACnC,SAAS;WACV;oBAEA;WACO;UACN;UAd8B,MAAM,QAetC;QAER;QA3BK,cA4BH;KACR,oBAACC;MAA2B;MAAM,OAAO,MAAM;MAAO,OAAM;QAA9C,QAAwD;KACtE,oBAACA;MAA4B;MAAM,OAAO,MAAM;MAAQ,OAAM;QAAhD,SAA2D;KACzE,oBAACA;MAA0B;MAAM,OAAO,MAAM;MAAM,OAAM;QAA5C,OAAqD;KACnE,oBAACA;MAA2B;MAAM,OAAO,MAAM;MAAO,OAAM;QAA9C,QAAwD;;KAChE;IACJ;GACE;EAEZ;AAEF,0BAAe"}
1
+ {"version":3,"file":"index.mjs","names":["Flexbox","ScaleRow"],"sources":["../../../src/color/ColorScales/index.tsx"],"sourcesContent":["'use client';\n\nimport { Space } from 'antd';\nimport { memo } from 'react';\n\nimport { Flexbox } from '@/Flex';\n\nimport { ColorScaleItem } from '../types';\nimport ScaleRow from './ScaleRow';\nimport { styles } from './style';\n\nexport interface ColorScalesProps {\n /**\n * @description Index of the mid highlight color in the scale\n */\n midHighLight: number;\n /**\n * @description Name of the color scale\n */\n name: string;\n /**\n * @description Color scale item object\n */\n scale: ColorScaleItem;\n}\n\nconst ColorScales = memo<ColorScalesProps>(({ name, scale, midHighLight }) => {\n return (\n <Flexbox align={'center'} flex={1} horizontal justify={'center'}>\n <div style={{ padding: '8px 16px 32px 0' }}>\n <Space direction={'vertical'} size={2}>\n <Space key=\"scale-title\" size={2}>\n <Flexbox align={'center'} className={styles.scaleRowTitle} horizontal key=\"scale-num\" />\n {Array.from({ length: scale.light.length })\n .fill('')\n .map((_, index) => {\n if (index === 0 || index === 12) return false;\n\n const isMidHighlight = midHighLight === index;\n\n return (\n <div className={styles.scaleBox} key={`num${index}`}>\n <div className={styles.scaleBox}>\n <Flexbox\n align={'center'}\n className={styles.scaleItem}\n horizontal\n justify={'center'}\n style={{\n fontWeight: isMidHighlight ? 700 : 400,\n opacity: 0.5,\n }}\n >\n {index}\n </Flexbox>\n </div>\n </div>\n );\n })}\n </Space>\n <ScaleRow key=\"light\" name={name} scale={scale.light} title=\"light\" />\n <ScaleRow key=\"lightA\" name={name} scale={scale.lightA} title=\"lightA\" />\n <ScaleRow key=\"dark\" name={name} scale={scale.dark} title=\"dark\" />\n <ScaleRow key=\"darkA\" name={name} scale={scale.darkA} title=\"darkA\" />\n </Space>\n </div>\n </Flexbox>\n );\n});\n\nexport default ColorScales;\n"],"mappings":";;;;;;;;;;AA0BA,MAAM,cAAc,MAAwB,EAAE,MAAM,OAAO,mBAAmB;AAC5E,QACE,oBAACA;EAAQ,OAAO;EAAU,MAAM;EAAG;EAAW,SAAS;YACrD,oBAAC;GAAI,OAAO,EAAE,SAAS,mBAAmB;aACxC,qBAAC;IAAM,WAAW;IAAY,MAAM;;KAClC,qBAAC;MAAwB,MAAM;iBAC7B,oBAACA;OAAQ,OAAO;OAAU,WAAW,OAAO;OAAe;SAAe,YAAc,EACvF,MAAM,KAAK,EAAE,QAAQ,MAAM,MAAM,QAAQ,CAAC,CACxC,KAAK,GAAG,CACR,KAAK,GAAG,UAAU;AACjB,WAAI,UAAU,KAAK,UAAU,GAAI,QAAO;OAExC,MAAM,iBAAiB,iBAAiB;AAExC,cACE,oBAAC;QAAI,WAAW,OAAO;kBACrB,oBAAC;SAAI,WAAW,OAAO;mBACrB,oBAACA;UACC,OAAO;UACP,WAAW,OAAO;UAClB;UACA,SAAS;UACT,OAAO;WACL,YAAY,iBAAiB,MAAM;WACnC,SAAS;WACV;oBAEA;WACO;UACN;UAd8B,MAAM,QAetC;QAER;QA3BK,cA4BH;KACR,oBAACC;MAA2B;MAAM,OAAO,MAAM;MAAO,OAAM;QAA9C,QAAwD;KACtE,oBAACA;MAA4B;MAAM,OAAO,MAAM;MAAQ,OAAM;QAAhD,SAA2D;KACzE,oBAACA;MAA0B;MAAM,OAAO,MAAM;MAAM,OAAM;QAA5C,OAAqD;KACnE,oBAACA;MAA2B;MAAM,OAAO,MAAM;MAAO,OAAM;QAA9C,QAAwD;;KAChE;IACJ;GACE;EAEZ;AAEF,0BAAe"}
@@ -1,11 +1,11 @@
1
- import { createStyles } from "antd-style";
1
+ import { createStaticStyles } from "antd-style";
2
2
 
3
3
  //#region src/color/ColorScales/style.ts
4
4
  const alphaBg = {
5
5
  dark: "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAABGdBTUEAALGPC/xhBQAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACPTkDJAAAAZUlEQVRIDe2VMQoAMAgDa9/g/1/oIzrpZBCh2dLFkkoDF0Fz99OdiOjks+2/7S8fRRmMMIVoRGSoYzvvqF8ZIMKlC1GhQBc6IkPzq32QmdAzkEGihpWOSPsAss8HegYySNSw0hE9WQ4StafZFqkAAAAASUVORK5CYII=) 0% 0% / 26px",
6
6
  light: "url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAFpJREFUWAntljEKADAIA23p6v//qQ+wfUEcCu1yriEgp0FHRJSJcnehmmWm1Dv/lO4HIg1AAAKjTqm03ea88zMCCEDgO4HV5bS757f+7wRoAAIQ4B9gByAAgQ3pfiDmXmAeEwAAAABJRU5ErkJggg==) 0% 0% / 26px"
7
7
  };
8
- const useStyles = createStyles(({ css: css$1, token }) => ({
8
+ const styles = createStaticStyles(({ css: css$1, cssVar: cssVar$1 }) => ({
9
9
  scaleBox: css$1`
10
10
  cursor: pointer;
11
11
 
@@ -21,7 +21,7 @@ const useStyles = createStyles(({ css: css$1, token }) => ({
21
21
  -8px 0;
22
22
  background-size: 16px 16px;
23
23
 
24
- transition: scale 400ms ${token.motionEaseOut};
24
+ transition: scale 400ms ${cssVar$1.motionEaseOut};
25
25
 
26
26
  &:active {
27
27
  scale: 0.8;
@@ -41,5 +41,5 @@ const useStyles = createStyles(({ css: css$1, token }) => ({
41
41
  }));
42
42
 
43
43
  //#endregion
44
- export { alphaBg, useStyles };
44
+ export { alphaBg, styles };
45
45
  //# sourceMappingURL=style.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"style.mjs","names":[],"sources":["../../../src/color/ColorScales/style.ts"],"sourcesContent":["import { createStyles } from 'antd-style';\n\nexport const alphaBg = {\n dark: 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAABGdBTUEAALGPC/xhBQAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACPTkDJAAAAZUlEQVRIDe2VMQoAMAgDa9/g/1/oIzrpZBCh2dLFkkoDF0Fz99OdiOjks+2/7S8fRRmMMIVoRGSoYzvvqF8ZIMKlC1GhQBc6IkPzq32QmdAzkEGihpWOSPsAss8HegYySNSw0hE9WQ4StafZFqkAAAAASUVORK5CYII=) 0% 0% / 26px',\n light:\n 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAFpJREFUWAntljEKADAIA23p6v//qQ+wfUEcCu1yriEgp0FHRJSJcnehmmWm1Dv/lO4HIg1AAAKjTqm03ea88zMCCEDgO4HV5bS757f+7wRoAAIQ4B9gByAAgQ3pfiDmXmAeEwAAAABJRU5ErkJggg==) 0% 0% / 26px',\n};\n\nexport const useStyles = createStyles(({ css, token }) => ({\n scaleBox: css`\n cursor: pointer;\n\n position: relative;\n\n width: 48px;\n height: 32px;\n\n background-position:\n 0 0,\n 0 8px,\n 8px -8px,\n -8px 0;\n background-size: 16px 16px;\n\n transition: scale 400ms ${token.motionEaseOut};\n\n &:active {\n scale: 0.8;\n }\n `,\n scaleItem: css`\n width: 100%;\n height: 100%;\n `,\n scaleRowTitle: css`\n width: 64px;\n height: 32px;\n `,\n text: css`\n opacity: 0.5;\n `,\n}));\n"],"mappings":";;;AAEA,MAAa,UAAU;CACrB,MAAM;CACN,OACE;CACH;AAED,MAAa,YAAY,cAAc,EAAE,YAAK,aAAa;CACzD,UAAU,KAAG;;;;;;;;;;;;;;;8BAee,MAAM,cAAc;;;;;;CAMhD,WAAW,KAAG;;;;CAId,eAAe,KAAG;;;;CAIlB,MAAM,KAAG;;;CAGV,EAAE"}
1
+ {"version":3,"file":"style.mjs","names":["cssVar"],"sources":["../../../src/color/ColorScales/style.ts"],"sourcesContent":["import { createStaticStyles } from 'antd-style';\n\nexport const alphaBg = {\n dark: 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAABGdBTUEAALGPC/xhBQAAADhlWElmTU0AKgAAAAgAAYdpAAQAAAABAAAAGgAAAAAAAqACAAQAAAABAAAAIKADAAQAAAABAAAAIAAAAACPTkDJAAAAZUlEQVRIDe2VMQoAMAgDa9/g/1/oIzrpZBCh2dLFkkoDF0Fz99OdiOjks+2/7S8fRRmMMIVoRGSoYzvvqF8ZIMKlC1GhQBc6IkPzq32QmdAzkEGihpWOSPsAss8HegYySNSw0hE9WQ4StafZFqkAAAAASUVORK5CYII=) 0% 0% / 26px',\n light:\n 'url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAALGPC/xhBQAAAFpJREFUWAntljEKADAIA23p6v//qQ+wfUEcCu1yriEgp0FHRJSJcnehmmWm1Dv/lO4HIg1AAAKjTqm03ea88zMCCEDgO4HV5bS757f+7wRoAAIQ4B9gByAAgQ3pfiDmXmAeEwAAAABJRU5ErkJggg==) 0% 0% / 26px',\n};\n\nexport const styles = createStaticStyles(({ css, cssVar }) => ({\n scaleBox: css`\n cursor: pointer;\n\n position: relative;\n\n width: 48px;\n height: 32px;\n\n background-position:\n 0 0,\n 0 8px,\n 8px -8px,\n -8px 0;\n background-size: 16px 16px;\n\n transition: scale 400ms ${cssVar.motionEaseOut};\n\n &:active {\n scale: 0.8;\n }\n `,\n scaleItem: css`\n width: 100%;\n height: 100%;\n `,\n scaleRowTitle: css`\n width: 64px;\n height: 32px;\n `,\n text: css`\n opacity: 0.5;\n `,\n}));\n"],"mappings":";;;AAEA,MAAa,UAAU;CACrB,MAAM;CACN,OACE;CACH;AAED,MAAa,SAAS,oBAAoB,EAAE,YAAK,wBAAc;CAC7D,UAAU,KAAG;;;;;;;;;;;;;;;8BAeeA,SAAO,cAAc;;;;;;CAMjD,WAAW,KAAG;;;;CAId,eAAe,KAAG;;;;CAIlB,MAAM,KAAG;;;CAGV,EAAE"}
@@ -1,181 +1,38 @@
1
1
  'use client';
2
2
 
3
3
  import { getCodeLanguageByInput } from "../Highlighter/const.mjs";
4
- import { useCallback, useEffect, useMemo, useRef, useState } from "react";
5
- import { useTheme, useThemeMode } from "antd-style";
4
+ import lobe_theme_default from "../Highlighter/theme/lobe-theme.mjs";
5
+ import { useEffect, useMemo, useState } from "react";
6
6
  import { transformerNotationDiff, transformerNotationErrorLevel, transformerNotationFocus, transformerNotationHighlight, transformerNotationWordHighlight } from "@shikijs/transformers";
7
- import { ShikiStreamTokenizer } from "shiki-stream";
8
- import useSWR from "swr";
9
7
  import { Md5 } from "ts-md5";
10
8
 
11
9
  //#region src/hooks/useHighlight.ts
12
10
  const MD5_LENGTH_THRESHOLD = 1e4;
11
+ const highlightCache = /* @__PURE__ */ new Map();
12
+ const MAX_CACHE_SIZE = 1e3;
13
+ const cleanupCache = () => {
14
+ if (highlightCache.size > MAX_CACHE_SIZE) {
15
+ const entriesToRemove = Math.floor(MAX_CACHE_SIZE * .2);
16
+ const keysToRemove = Array.from(highlightCache.keys()).slice(0, entriesToRemove);
17
+ for (const key of keysToRemove) highlightCache.delete(key);
18
+ }
19
+ };
20
+ let codeToHtmlPromise = null;
21
+ const loadCodeToHtml = () => {
22
+ if (typeof window === "undefined") return Promise.resolve(null);
23
+ if (!codeToHtmlPromise) codeToHtmlPromise = import("shiki").then((mod) => mod.codeToHtml ?? null);
24
+ return codeToHtmlPromise;
25
+ };
13
26
  const loadShikiModule = () => {
14
27
  if (typeof window === "undefined") return Promise.resolve(null);
15
28
  return import("shiki");
16
29
  };
17
30
  const shikiModulePromise = loadShikiModule();
18
- const loadShiki = () => {
19
- return shikiModulePromise.then((mod) => mod?.codeToHtml ?? null);
20
- };
21
- const shikiPromise = loadShiki();
22
31
  const escapeHtml = (str) => {
23
32
  return str.replaceAll("&", "&amp;").replaceAll("<", "&lt;").replaceAll(">", "&gt;").replaceAll("\"", "&quot;").replaceAll("'", "&#039;");
24
33
  };
25
- const tokensToLineTokens = (tokens) => {
26
- if (!tokens.length) return [[]];
27
- const lines = [[]];
28
- let currentLine = lines[0];
29
- const startNewLine = () => {
30
- currentLine = [];
31
- lines.push(currentLine);
32
- };
33
- tokens.forEach((token) => {
34
- const content = token.content ?? "";
35
- if (content === "\n") {
36
- startNewLine();
37
- return;
38
- }
39
- if (!content.includes("\n")) {
40
- currentLine.push(token);
41
- return;
42
- }
43
- const segments = content.split("\n");
44
- segments.forEach((segment, index) => {
45
- if (segment) currentLine.push({
46
- ...token,
47
- content: segment
48
- });
49
- if (index < segments.length - 1) startNewLine();
50
- });
51
- });
52
- if (lines.length === 0) return [[]];
53
- return lines;
54
- };
55
- const createPreStyle = (bg, fg) => {
56
- if (!bg && !fg) return void 0;
57
- return {
58
- backgroundColor: bg,
59
- color: fg
60
- };
61
- };
62
- const useStreamingHighlighter = (text, options) => {
63
- const { colorReplacements, enabled, language, theme } = options;
64
- const [result, setResult] = useState();
65
- const tokenizerRef = useRef(null);
66
- const previousTextRef = useRef("");
67
- const safeText = text ?? "";
68
- const latestTextRef = useRef(safeText);
69
- const preStyleRef = useRef(void 0);
70
- const colorReplacementsRef = useRef(colorReplacements);
71
- const linesRef = useRef([[]]);
72
- useEffect(() => {
73
- latestTextRef.current = safeText;
74
- }, [safeText]);
75
- useEffect(() => {
76
- colorReplacementsRef.current = colorReplacements;
77
- }, [colorReplacements]);
78
- const setStreamingResult = useCallback((rawLines) => {
79
- const previousLines = linesRef.current;
80
- const mergedLines = rawLines.map((line, index) => {
81
- const previousLine = previousLines[index];
82
- if (previousLine && previousLine.length === line.length && previousLine.every((token, tokenIndex) => token === line[tokenIndex])) return previousLine;
83
- return line;
84
- });
85
- linesRef.current = mergedLines;
86
- setResult({
87
- colorReplacements: colorReplacementsRef.current,
88
- lines: mergedLines,
89
- preStyle: preStyleRef.current
90
- });
91
- }, []);
92
- const updateTokens = useCallback(async (nextText, forceReset = false) => {
93
- const tokenizer = tokenizerRef.current;
94
- if (!tokenizer) return;
95
- if (forceReset) {
96
- tokenizer.clear();
97
- previousTextRef.current = "";
98
- }
99
- const previousText = previousTextRef.current;
100
- let chunk = nextText;
101
- if (!forceReset && nextText.startsWith(previousText)) chunk = nextText.slice(previousText.length);
102
- else if (!forceReset) tokenizer.clear();
103
- previousTextRef.current = nextText;
104
- if (!chunk) {
105
- const mergedTokens = [...tokenizer.tokensStable, ...tokenizer.tokensUnstable];
106
- setStreamingResult(mergedTokens.length ? tokensToLineTokens(mergedTokens) : [[]]);
107
- return;
108
- }
109
- try {
110
- await tokenizer.enqueue(chunk);
111
- setStreamingResult(tokensToLineTokens([...tokenizer.tokensStable, ...tokenizer.tokensUnstable]));
112
- } catch (error) {
113
- console.error("Streaming highlighting failed:", error);
114
- }
115
- }, [setStreamingResult]);
116
- useEffect(() => {
117
- if (!enabled) {
118
- tokenizerRef.current?.clear();
119
- tokenizerRef.current = null;
120
- previousTextRef.current = "";
121
- preStyleRef.current = void 0;
122
- linesRef.current = [[]];
123
- setResult(void 0);
124
- return;
125
- }
126
- let cancelled = false;
127
- (async () => {
128
- const mod = await shikiModulePromise;
129
- if (!mod || cancelled) return;
130
- try {
131
- const highlighter = await mod.getSingletonHighlighter({
132
- langs: language ? [language] : [],
133
- themes: [theme]
134
- });
135
- if (!highlighter || cancelled) return;
136
- tokenizerRef.current = new ShikiStreamTokenizer({
137
- highlighter,
138
- lang: language,
139
- theme
140
- });
141
- previousTextRef.current = "";
142
- linesRef.current = [[]];
143
- const themeInfo = highlighter.getTheme(theme);
144
- preStyleRef.current = createPreStyle(themeInfo?.bg, themeInfo?.fg);
145
- const currentText = latestTextRef.current;
146
- if (currentText) await updateTokens(currentText, true);
147
- else setStreamingResult([[]]);
148
- } catch (error) {
149
- console.error("Streaming highlighter initialization failed:", error);
150
- }
151
- })();
152
- return () => {
153
- cancelled = true;
154
- tokenizerRef.current?.clear();
155
- tokenizerRef.current = null;
156
- previousTextRef.current = "";
157
- };
158
- }, [
159
- enabled,
160
- language,
161
- setStreamingResult,
162
- theme,
163
- updateTokens
164
- ]);
165
- useEffect(() => {
166
- if (!enabled) return;
167
- if (!tokenizerRef.current) return;
168
- updateTokens(safeText);
169
- }, [
170
- enabled,
171
- safeText,
172
- updateTokens
173
- ]);
174
- return result;
175
- };
34
+ const customThemes = { "lobe-theme": lobe_theme_default };
176
35
  const useHighlight = (text, { language, enableTransformer, theme: builtinTheme, streaming }) => {
177
- const { isDarkMode } = useThemeMode();
178
- const theme = useTheme();
179
36
  const safeText = text ?? "";
180
37
  const lang = (language ?? "plaintext").toLowerCase();
181
38
  const matchedLanguage = useMemo(() => getCodeLanguageByInput(lang), [lang]);
@@ -189,87 +46,87 @@ const useHighlight = (text, { language, enableTransformer, theme: builtinTheme,
189
46
  transformerNotationErrorLevel()
190
47
  ];
191
48
  }, [enableTransformer]);
192
- const colorReplacements = useMemo(() => ({
193
- "slack-dark": {
194
- "#4ec9b0": theme.yellow,
195
- "#569cd6": theme.colorError,
196
- "#6a9955": theme.gray,
197
- "#9cdcfe": theme.colorText,
198
- "#b5cea8": theme.purple10,
199
- "#c586c0": theme.colorInfo,
200
- "#ce9178": theme.colorSuccess,
201
- "#dcdcaa": theme.colorWarning,
202
- "#e6e6e6": theme.colorText
203
- },
204
- "slack-ochin": {
205
- "#002339": theme.colorText,
206
- "#0444ac": theme.geekblue,
207
- "#0991b6": theme.colorError,
208
- "#174781": theme.purple10,
209
- "#2f86d2": theme.colorText,
210
- "#357b42": theme.gray,
211
- "#7b30d0": theme.colorInfo,
212
- "#7eb233": theme.colorWarningTextActive,
213
- "#a44185": theme.colorSuccess,
214
- "#dc3eb7": theme.yellow11
215
- }
216
- }), [theme]);
217
49
  const cacheKey = useMemo(() => {
218
- const hash = safeText.length < MD5_LENGTH_THRESHOLD ? safeText : Md5.hashStr(safeText);
50
+ if (streaming) return null;
219
51
  return [
220
52
  matchedLanguage,
221
- builtinTheme || (isDarkMode ? "d" : "l"),
222
- hash
53
+ builtinTheme,
54
+ safeText.length < MD5_LENGTH_THRESHOLD ? safeText : Md5.hashStr(safeText)
223
55
  ].filter(Boolean).join("-");
224
56
  }, [
225
57
  safeText,
226
58
  matchedLanguage,
227
- isDarkMode,
228
- builtinTheme
59
+ builtinTheme,
60
+ streaming
229
61
  ]);
230
- const response = useSWR(streaming ? null : cacheKey, async () => {
231
- try {
232
- const codeToHtml = await shikiPromise;
233
- if (!codeToHtml) return safeText;
234
- return await codeToHtml(safeText, {
235
- colorReplacements: builtinTheme ? void 0 : colorReplacements,
236
- lang: matchedLanguage,
237
- theme: builtinTheme || (isDarkMode ? "slack-dark" : "slack-ochin"),
238
- transformers
239
- });
240
- } catch (error) {
241
- console.error("Advanced rendering failed:", error);
62
+ const [data, setData] = useState();
63
+ useEffect(() => {
64
+ if (!cacheKey) {
65
+ setData(void 0);
66
+ return;
67
+ }
68
+ const cachedPromise = highlightCache.get(cacheKey);
69
+ if (cachedPromise) {
70
+ cachedPromise.then((html) => {
71
+ setData(html);
72
+ }).catch(() => {});
73
+ return;
74
+ }
75
+ const highlightPromise = (async () => {
242
76
  try {
243
- const codeToHtml = await shikiPromise;
77
+ const shikiModule = await shikiModulePromise;
78
+ if (!shikiModule) return safeText;
79
+ const effectiveTheme = builtinTheme || "lobe-theme";
80
+ if (!builtinTheme && effectiveTheme === "lobe-theme") {
81
+ const customTheme = customThemes[effectiveTheme];
82
+ if (customTheme) return await (await shikiModule.getSingletonHighlighter({
83
+ langs: [matchedLanguage],
84
+ themes: [customTheme]
85
+ })).codeToHtml(safeText, {
86
+ lang: matchedLanguage,
87
+ theme: effectiveTheme,
88
+ transformers
89
+ });
90
+ }
91
+ const codeToHtml = await loadCodeToHtml();
244
92
  if (!codeToHtml) return safeText;
245
93
  return await codeToHtml(safeText, {
246
94
  lang: matchedLanguage,
247
- theme: isDarkMode ? "dark-plus" : "light-plus"
95
+ theme: effectiveTheme,
96
+ transformers
248
97
  });
249
- } catch {
250
- return `<pre class="fallback"><code>${escapeHtml(safeText)}</code></pre>`;
98
+ } catch (error_) {
99
+ console.error("Advanced rendering failed:", error_);
100
+ try {
101
+ const codeToHtml = await loadCodeToHtml();
102
+ if (!codeToHtml) return safeText;
103
+ return await codeToHtml(safeText, {
104
+ lang: matchedLanguage,
105
+ theme: "lobe-theme"
106
+ });
107
+ } catch {
108
+ return `<pre class="fallback"><code>${escapeHtml(safeText)}</code></pre>`;
109
+ }
251
110
  }
252
- }
253
- }, {
254
- dedupingInterval: 3e3,
255
- errorRetryCount: 2,
256
- revalidateOnFocus: false,
257
- revalidateOnReconnect: false
258
- });
259
- const effectiveTheme = builtinTheme || (isDarkMode ? "slack-dark" : "slack-ochin");
260
- const streamingResult = useStreamingHighlighter(safeText, {
261
- colorReplacements: builtinTheme ? void 0 : colorReplacements[effectiveTheme],
262
- enabled: streaming,
263
- language: matchedLanguage,
264
- theme: effectiveTheme
265
- });
266
- return {
267
- ...response,
268
- colorReplacements,
269
- streaming: streamingResult
270
- };
111
+ })();
112
+ highlightCache.set(cacheKey, highlightPromise);
113
+ cleanupCache();
114
+ highlightPromise.then((html) => {
115
+ if (highlightCache.get(cacheKey) === highlightPromise) setData(html);
116
+ }).catch(() => {
117
+ if (highlightCache.get(cacheKey) === highlightPromise) highlightCache.delete(cacheKey);
118
+ });
119
+ }, [
120
+ cacheKey,
121
+ safeText,
122
+ matchedLanguage,
123
+ builtinTheme,
124
+ transformers,
125
+ customThemes
126
+ ]);
127
+ return data || "";
271
128
  };
272
129
 
273
130
  //#endregion
274
- export { useHighlight };
131
+ export { shikiModulePromise, useHighlight };
275
132
  //# sourceMappingURL=useHighlight.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"useHighlight.mjs","names":["lines: ThemedToken[][]"],"sources":["../../src/hooks/useHighlight.ts"],"sourcesContent":["'use client';\n\nimport {\n transformerNotationDiff,\n transformerNotationErrorLevel,\n transformerNotationFocus,\n transformerNotationHighlight,\n transformerNotationWordHighlight,\n} from '@shikijs/transformers';\nimport { useTheme, useThemeMode } from 'antd-style';\nimport { CSSProperties, useCallback, useEffect, useMemo, useRef, useState } from 'react';\nimport type { BuiltinTheme, CodeToHastOptions, ThemedToken } from 'shiki';\nimport { ShikiStreamTokenizer } from 'shiki-stream';\nimport useSWR, { SWRResponse } from 'swr';\nimport { Md5 } from 'ts-md5';\n\nimport { getCodeLanguageByInput } from '@/Highlighter/const';\n\n// Application-level cache to avoid repeated calculations\nconst MD5_LENGTH_THRESHOLD = 10_000; // Use async MD5 for text exceeding this length\n\n// Color replacement mapping type\ntype ColorReplacements = {\n [themeName: string]: {\n [color: string]: string;\n };\n};\n\ntype StreamingHighlightResult = {\n colorReplacements?: Record<string, string>;\n lines: ThemedToken[][];\n preStyle?: CSSProperties;\n};\n\ntype StreamingOptions = {\n colorReplacements?: Record<string, string>;\n enabled?: boolean;\n language: string;\n theme: string;\n};\n\ntype UseHighlightResponse = SWRResponse<string, Error> & {\n colorReplacements?: ColorReplacements;\n streaming?: StreamingHighlightResult;\n};\n\ntype ICodeToHtml = (code: string, options: CodeToHastOptions) => Promise<string>;\ntype ShikiModule = typeof import('shiki');\n\n// Lazy load shiki\nconst loadShikiModule = (): Promise<ShikiModule | null> => {\n if (typeof window === 'undefined') return Promise.resolve(null);\n return import('shiki');\n};\nconst shikiModulePromise = loadShikiModule();\n\nconst loadShiki = (): Promise<ICodeToHtml | null> => {\n return shikiModulePromise.then((mod) => mod?.codeToHtml ?? null);\n};\nconst shikiPromise = loadShiki();\n\n// Helper function: Safe HTML escaping\nconst escapeHtml = (str: string): string => {\n return str\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&#039;');\n};\n\nconst tokensToLineTokens = (tokens: ThemedToken[]): ThemedToken[][] => {\n if (!tokens.length) return [[]];\n\n const lines: ThemedToken[][] = [[]];\n let currentLine = lines[0];\n\n const startNewLine = () => {\n currentLine = [];\n lines.push(currentLine);\n };\n\n tokens.forEach((token) => {\n const content = token.content ?? '';\n\n if (content === '\\n') {\n startNewLine();\n return;\n }\n\n if (!content.includes('\\n')) {\n currentLine.push(token);\n return;\n }\n\n const segments = content.split('\\n');\n segments.forEach((segment, index) => {\n if (segment) {\n currentLine.push({\n ...token,\n content: segment,\n });\n }\n\n if (index < segments.length - 1) {\n startNewLine();\n }\n });\n });\n\n if (lines.length === 0) return [[]];\n\n return lines;\n};\n\nconst createPreStyle = (bg?: string, fg?: string): CSSProperties | undefined => {\n if (!bg && !fg) return undefined;\n return {\n backgroundColor: bg,\n color: fg,\n };\n};\n\nconst useStreamingHighlighter = (\n text: string,\n options: StreamingOptions,\n): StreamingHighlightResult | undefined => {\n const { colorReplacements, enabled, language, theme } = options;\n const [result, setResult] = useState<StreamingHighlightResult>();\n const tokenizerRef = useRef<ShikiStreamTokenizer | null>(null);\n const previousTextRef = useRef('');\n const safeText = text ?? '';\n const latestTextRef = useRef(safeText);\n const preStyleRef = useRef<CSSProperties | undefined>(undefined);\n const colorReplacementsRef = useRef(colorReplacements);\n const linesRef = useRef<ThemedToken[][]>([[]]);\n\n useEffect(() => {\n latestTextRef.current = safeText;\n }, [safeText]);\n\n useEffect(() => {\n colorReplacementsRef.current = colorReplacements;\n }, [colorReplacements]);\n\n const setStreamingResult = useCallback((rawLines: ThemedToken[][]) => {\n const previousLines = linesRef.current;\n\n const mergedLines = rawLines.map((line, index) => {\n const previousLine = previousLines[index];\n if (\n previousLine &&\n previousLine.length === line.length &&\n previousLine.every((token, tokenIndex) => token === line[tokenIndex])\n ) {\n return previousLine;\n }\n return line;\n });\n\n linesRef.current = mergedLines;\n\n setResult({\n colorReplacements: colorReplacementsRef.current,\n lines: mergedLines,\n preStyle: preStyleRef.current,\n });\n }, []);\n\n const updateTokens = useCallback(\n async (nextText: string, forceReset = false) => {\n const tokenizer = tokenizerRef.current;\n if (!tokenizer) return;\n\n if (forceReset) {\n tokenizer.clear();\n previousTextRef.current = '';\n }\n\n const previousText = previousTextRef.current;\n let chunk = nextText;\n const canAppend = !forceReset && nextText.startsWith(previousText);\n\n if (canAppend) {\n chunk = nextText.slice(previousText.length);\n } else if (!forceReset) {\n tokenizer.clear();\n }\n\n previousTextRef.current = nextText;\n\n if (!chunk) {\n const mergedTokens = [...tokenizer.tokensStable, ...tokenizer.tokensUnstable];\n setStreamingResult(mergedTokens.length ? tokensToLineTokens(mergedTokens) : [[]]);\n return;\n }\n\n try {\n await tokenizer.enqueue(chunk);\n const mergedTokens = [...tokenizer.tokensStable, ...tokenizer.tokensUnstable];\n setStreamingResult(tokensToLineTokens(mergedTokens));\n } catch (error) {\n console.error('Streaming highlighting failed:', error);\n }\n },\n [setStreamingResult],\n );\n\n useEffect(() => {\n if (!enabled) {\n tokenizerRef.current?.clear();\n tokenizerRef.current = null;\n previousTextRef.current = '';\n preStyleRef.current = undefined;\n linesRef.current = [[]];\n setResult(undefined);\n return;\n }\n\n let cancelled = false;\n\n (async () => {\n const mod = await shikiModulePromise;\n if (!mod || cancelled) return;\n\n try {\n const highlighter = await mod.getSingletonHighlighter({\n langs: language ? [language] : [],\n themes: [theme],\n });\n\n if (!highlighter || cancelled) return;\n\n const tokenizer = new ShikiStreamTokenizer({\n highlighter,\n lang: language,\n theme,\n });\n\n tokenizerRef.current = tokenizer;\n previousTextRef.current = '';\n linesRef.current = [[]];\n\n const themeInfo = highlighter.getTheme(theme);\n preStyleRef.current = createPreStyle(themeInfo?.bg, themeInfo?.fg);\n\n const currentText = latestTextRef.current;\n if (currentText) {\n await updateTokens(currentText, true);\n } else {\n setStreamingResult([[]]);\n }\n } catch (error) {\n console.error('Streaming highlighter initialization failed:', error);\n }\n })();\n\n return () => {\n cancelled = true;\n tokenizerRef.current?.clear();\n tokenizerRef.current = null;\n previousTextRef.current = '';\n };\n }, [enabled, language, setStreamingResult, theme, updateTokens]);\n\n useEffect(() => {\n if (!enabled) return;\n if (!tokenizerRef.current) return;\n updateTokens(safeText);\n }, [enabled, safeText, updateTokens]);\n\n return result;\n};\n\n// Main highlight component\nexport const useHighlight = (\n text: string,\n {\n language,\n enableTransformer,\n theme: builtinTheme,\n streaming,\n }: { enableTransformer?: boolean; language: string; streaming?: boolean; theme?: BuiltinTheme },\n): UseHighlightResponse => {\n const { isDarkMode } = useThemeMode();\n const theme = useTheme();\n\n // Safely handle language and text with boundary checks\n const safeText = text ?? '';\n const lang = (language ?? 'plaintext').toLowerCase();\n\n // Match supported languages\n const matchedLanguage = useMemo(() => getCodeLanguageByInput(lang), [lang]);\n\n // Optimize transformer creation\n const transformers = useMemo(() => {\n if (!enableTransformer) return;\n return [\n transformerNotationDiff(),\n transformerNotationHighlight(),\n transformerNotationWordHighlight(),\n transformerNotationFocus(),\n transformerNotationErrorLevel(),\n ];\n }, [enableTransformer]);\n\n // Optimize color replacement configuration\n const colorReplacements = useMemo(\n (): ColorReplacements => ({\n 'slack-dark': {\n '#4ec9b0': theme.yellow,\n '#569cd6': theme.colorError,\n '#6a9955': theme.gray,\n '#9cdcfe': theme.colorText,\n '#b5cea8': theme.purple10,\n '#c586c0': theme.colorInfo,\n '#ce9178': theme.colorSuccess,\n '#dcdcaa': theme.colorWarning,\n '#e6e6e6': theme.colorText,\n },\n 'slack-ochin': {\n '#002339': theme.colorText,\n '#0444ac': theme.geekblue,\n '#0991b6': theme.colorError,\n '#174781': theme.purple10,\n '#2f86d2': theme.colorText,\n '#357b42': theme.gray,\n '#7b30d0': theme.colorInfo,\n '#7eb233': theme.colorWarningTextActive,\n '#a44185': theme.colorSuccess,\n '#dc3eb7': theme.yellow11,\n },\n }),\n [theme],\n );\n\n // Build cache key\n const cacheKey = useMemo((): string | null => {\n // Use hash for long text\n const hash = safeText.length < MD5_LENGTH_THRESHOLD ? safeText : Md5.hashStr(safeText);\n return [matchedLanguage, builtinTheme || (isDarkMode ? 'd' : 'l'), hash]\n .filter(Boolean)\n .join('-');\n }, [safeText, matchedLanguage, isDarkMode, builtinTheme]);\n\n // Use SWR to get highlighted HTML\n const response = useSWR(\n streaming ? null : cacheKey,\n async (): Promise<string> => {\n try {\n // Try full rendering\n const codeToHtml = await shikiPromise;\n if (!codeToHtml) return safeText;\n const html = await codeToHtml(safeText, {\n colorReplacements: builtinTheme ? undefined : colorReplacements,\n lang: matchedLanguage,\n theme: builtinTheme || (isDarkMode ? 'slack-dark' : 'slack-ochin'),\n transformers,\n });\n\n return html;\n } catch (error) {\n console.error('Advanced rendering failed:', error);\n\n try {\n // Try simple rendering (without transformers)\n const codeToHtml = await shikiPromise;\n if (!codeToHtml) return safeText;\n const html = await codeToHtml(safeText, {\n lang: matchedLanguage,\n theme: isDarkMode ? 'dark-plus' : 'light-plus',\n });\n return html;\n } catch {\n // Fallback to plain text\n const fallbackHtml = `<pre class=\"fallback\"><code>${escapeHtml(safeText)}</code></pre>`;\n return fallbackHtml;\n }\n }\n },\n {\n dedupingInterval: 3000, // Only execute once for the same request within 3 seconds\n errorRetryCount: 2, // Retry at most 2 times\n revalidateOnFocus: false,\n revalidateOnReconnect: false,\n },\n );\n\n const effectiveTheme = builtinTheme || (isDarkMode ? 'slack-dark' : 'slack-ochin');\n const streamingResult = useStreamingHighlighter(safeText, {\n colorReplacements: builtinTheme ? undefined : colorReplacements[effectiveTheme],\n enabled: streaming,\n language: matchedLanguage,\n theme: effectiveTheme,\n });\n\n return {\n ...response,\n colorReplacements,\n streaming: streamingResult,\n };\n};\n\nexport { escapeHtml, loadShiki, MD5_LENGTH_THRESHOLD, shikiPromise };\n"],"mappings":"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"}
1
+ {"version":3,"file":"useHighlight.mjs","names":["codeToHtmlPromise: Promise<ICodeToHtml | null> | null","lobeTheme"],"sources":["../../src/hooks/useHighlight.ts"],"sourcesContent":["'use client';\n\nimport {\n transformerNotationDiff,\n transformerNotationErrorLevel,\n transformerNotationFocus,\n transformerNotationHighlight,\n transformerNotationWordHighlight,\n} from '@shikijs/transformers';\nimport { CSSProperties, useEffect, useMemo, useState } from 'react';\nimport type { BuiltinTheme, CodeToHastOptions, ThemedToken } from 'shiki';\nimport { Md5 } from 'ts-md5';\n\nimport { getCodeLanguageByInput } from '@/Highlighter/const';\nimport lobeTheme from '@/Highlighter/theme/lobe-theme';\n\n// Application-level cache to avoid repeated calculations\nexport const MD5_LENGTH_THRESHOLD = 10_000; // Use async MD5 for text exceeding this length\n\nexport type StreamingHighlightResult = {\n lines: ThemedToken[][];\n preStyle?: CSSProperties;\n};\n\n// Application-level cache for highlighted HTML\n// Key: cacheKey string, Value: Promise<string>\nconst highlightCache = new Map<string, Promise<string>>();\n\n// Maximum cache size to prevent memory leaks\nconst MAX_CACHE_SIZE = 1000;\n\n// Clean up old cache entries when limit is reached\nconst cleanupCache = () => {\n if (highlightCache.size > MAX_CACHE_SIZE) {\n // Remove oldest 20% of entries\n const entriesToRemove = Math.floor(MAX_CACHE_SIZE * 0.2);\n const keysToRemove = Array.from(highlightCache.keys()).slice(0, entriesToRemove);\n for (const key of keysToRemove) {\n highlightCache.delete(key);\n }\n }\n};\n\nexport type ICodeToHtml = (code: string, options: CodeToHastOptions) => Promise<string>;\nexport type ShikiModule = typeof import('shiki');\n\n// Use codeToHtml shorthand for better performance\n// It automatically manages highlighter instances and loads themes/languages on-demand\nlet codeToHtmlPromise: Promise<ICodeToHtml | null> | null = null;\n\nconst loadCodeToHtml = (): Promise<ICodeToHtml | null> => {\n if (typeof window === 'undefined') return Promise.resolve(null);\n\n if (!codeToHtmlPromise) {\n codeToHtmlPromise = import('shiki').then((mod) => mod.codeToHtml ?? null);\n }\n\n return codeToHtmlPromise;\n};\n\n// Export shikiModulePromise for useStreamHighlight compatibility\nconst loadShikiModule = (): Promise<ShikiModule | null> => {\n if (typeof window === 'undefined') return Promise.resolve(null);\n return import('shiki');\n};\nexport const shikiModulePromise = loadShikiModule();\n\n// Helper function: Safe HTML escaping\nexport const escapeHtml = (str: string): string => {\n return str\n .replaceAll('&', '&amp;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&#039;');\n};\n\n// Main highlight component - optimized version without SWR\nconst customThemes = {\n 'lobe-theme': lobeTheme,\n};\n\nexport const useHighlight = (\n text: string,\n {\n language,\n enableTransformer,\n theme: builtinTheme,\n streaming,\n }: { enableTransformer?: boolean; language: string; streaming?: boolean; theme?: BuiltinTheme },\n): string => {\n // Safely handle language and text with boundary checks\n const safeText = text ?? '';\n const lang = (language ?? 'plaintext').toLowerCase();\n\n // Match supported languages\n const matchedLanguage = useMemo(() => getCodeLanguageByInput(lang), [lang]);\n\n // Optimize transformer creation\n const transformers = useMemo(() => {\n if (!enableTransformer) return;\n return [\n transformerNotationDiff(),\n transformerNotationHighlight(),\n transformerNotationWordHighlight(),\n transformerNotationFocus(),\n transformerNotationErrorLevel(),\n ];\n }, [enableTransformer]);\n\n // Build cache key\n const cacheKey = useMemo((): string | null => {\n if (streaming) return null;\n // Use hash for long text\n const hash = safeText.length < MD5_LENGTH_THRESHOLD ? safeText : Md5.hashStr(safeText);\n return [matchedLanguage, builtinTheme, hash].filter(Boolean).join('-');\n }, [safeText, matchedLanguage, builtinTheme, streaming]);\n\n const [data, setData] = useState<string | undefined>();\n\n useEffect(() => {\n if (!cacheKey) {\n setData(undefined);\n return;\n }\n\n // Check cache first\n const cachedPromise = highlightCache.get(cacheKey);\n if (cachedPromise) {\n cachedPromise\n .then((html) => {\n setData(html);\n })\n .catch(() => {\n // Silently handle errors, fallback will be handled in the promise\n });\n return;\n }\n\n // Create new promise for highlighting\n // Using codeToHtml shorthand: automatically loads themes/languages on-demand\n const highlightPromise = (async (): Promise<string> => {\n try {\n // Try full rendering with transformers\n const shikiModule = await shikiModulePromise;\n if (!shikiModule) return safeText;\n\n const effectiveTheme = builtinTheme || 'lobe-theme';\n\n // Load custom theme if using slack-dark or slack-ochin\n if (!builtinTheme && effectiveTheme === 'lobe-theme') {\n const customTheme = customThemes[effectiveTheme];\n if (customTheme) {\n // Use getSingletonHighlighter to load custom theme\n const highlighter = await shikiModule.getSingletonHighlighter({\n langs: [matchedLanguage],\n themes: [customTheme as any],\n });\n\n const html = await highlighter.codeToHtml(safeText, {\n lang: matchedLanguage,\n theme: effectiveTheme,\n transformers,\n });\n\n return html;\n }\n }\n\n // Fallback to codeToHtml for builtin themes\n const codeToHtml = await loadCodeToHtml();\n if (!codeToHtml) return safeText;\n\n const html = await codeToHtml(safeText, {\n lang: matchedLanguage,\n theme: effectiveTheme,\n transformers,\n });\n\n return html;\n } catch (error_) {\n console.error('Advanced rendering failed:', error_);\n\n try {\n // Try simple rendering (without transformers)\n const codeToHtml = await loadCodeToHtml();\n if (!codeToHtml) return safeText;\n const html = await codeToHtml(safeText, {\n lang: matchedLanguage,\n theme: 'lobe-theme',\n });\n return html;\n } catch {\n // Fallback to plain text\n const fallbackHtml = `<pre class=\"fallback\"><code>${escapeHtml(safeText)}</code></pre>`;\n return fallbackHtml;\n }\n }\n })();\n\n // Cache the promise\n highlightCache.set(cacheKey, highlightPromise);\n cleanupCache();\n\n // Handle promise result\n highlightPromise\n .then((html) => {\n // Only update if this is still the current cache key\n if (highlightCache.get(cacheKey) === highlightPromise) {\n setData(html);\n }\n })\n .catch(() => {\n // Remove failed promise from cache\n if (highlightCache.get(cacheKey) === highlightPromise) {\n highlightCache.delete(cacheKey);\n }\n });\n }, [cacheKey, safeText, matchedLanguage, builtinTheme, transformers, customThemes]);\n\n return data || '';\n};\n"],"mappings":";;;;;;;;;AAiBA,MAAa,uBAAuB;AASpC,MAAM,iCAAiB,IAAI,KAA8B;AAGzD,MAAM,iBAAiB;AAGvB,MAAM,qBAAqB;AACzB,KAAI,eAAe,OAAO,gBAAgB;EAExC,MAAM,kBAAkB,KAAK,MAAM,iBAAiB,GAAI;EACxD,MAAM,eAAe,MAAM,KAAK,eAAe,MAAM,CAAC,CAAC,MAAM,GAAG,gBAAgB;AAChF,OAAK,MAAM,OAAO,aAChB,gBAAe,OAAO,IAAI;;;AAUhC,IAAIA,oBAAwD;AAE5D,MAAM,uBAAoD;AACxD,KAAI,OAAO,WAAW,YAAa,QAAO,QAAQ,QAAQ,KAAK;AAE/D,KAAI,CAAC,kBACH,qBAAoB,OAAO,SAAS,MAAM,QAAQ,IAAI,cAAc,KAAK;AAG3E,QAAO;;AAIT,MAAM,wBAAqD;AACzD,KAAI,OAAO,WAAW,YAAa,QAAO,QAAQ,QAAQ,KAAK;AAC/D,QAAO,OAAO;;AAEhB,MAAa,qBAAqB,iBAAiB;AAGnD,MAAa,cAAc,QAAwB;AACjD,QAAO,IACJ,WAAW,KAAK,QAAQ,CACxB,WAAW,KAAK,OAAO,CACvB,WAAW,KAAK,OAAO,CACvB,WAAW,MAAK,SAAS,CACzB,WAAW,KAAK,SAAS;;AAI9B,MAAM,eAAe,EACnB,cAAcC,oBACf;AAED,MAAa,gBACX,MACA,EACE,UACA,mBACA,OAAO,cACP,gBAES;CAEX,MAAM,WAAW,QAAQ;CACzB,MAAM,QAAQ,YAAY,aAAa,aAAa;CAGpD,MAAM,kBAAkB,cAAc,uBAAuB,KAAK,EAAE,CAAC,KAAK,CAAC;CAG3E,MAAM,eAAe,cAAc;AACjC,MAAI,CAAC,kBAAmB;AACxB,SAAO;GACL,yBAAyB;GACzB,8BAA8B;GAC9B,kCAAkC;GAClC,0BAA0B;GAC1B,+BAA+B;GAChC;IACA,CAAC,kBAAkB,CAAC;CAGvB,MAAM,WAAW,cAA6B;AAC5C,MAAI,UAAW,QAAO;AAGtB,SAAO;GAAC;GAAiB;GADZ,SAAS,SAAS,uBAAuB,WAAW,IAAI,QAAQ,SAAS;GAC1C,CAAC,OAAO,QAAQ,CAAC,KAAK,IAAI;IACrE;EAAC;EAAU;EAAiB;EAAc;EAAU,CAAC;CAExD,MAAM,CAAC,MAAM,WAAW,UAA8B;AAEtD,iBAAgB;AACd,MAAI,CAAC,UAAU;AACb,WAAQ,OAAU;AAClB;;EAIF,MAAM,gBAAgB,eAAe,IAAI,SAAS;AAClD,MAAI,eAAe;AACjB,iBACG,MAAM,SAAS;AACd,YAAQ,KAAK;KACb,CACD,YAAY,GAEX;AACJ;;EAKF,MAAM,oBAAoB,YAA6B;AACrD,OAAI;IAEF,MAAM,cAAc,MAAM;AAC1B,QAAI,CAAC,YAAa,QAAO;IAEzB,MAAM,iBAAiB,gBAAgB;AAGvC,QAAI,CAAC,gBAAgB,mBAAmB,cAAc;KACpD,MAAM,cAAc,aAAa;AACjC,SAAI,YAaF,QANa,OALO,MAAM,YAAY,wBAAwB;MAC5D,OAAO,CAAC,gBAAgB;MACxB,QAAQ,CAAC,YAAmB;MAC7B,CAAC,EAE6B,WAAW,UAAU;MAClD,MAAM;MACN,OAAO;MACP;MACD,CAAC;;IAON,MAAM,aAAa,MAAM,gBAAgB;AACzC,QAAI,CAAC,WAAY,QAAO;AAQxB,WANa,MAAM,WAAW,UAAU;KACtC,MAAM;KACN,OAAO;KACP;KACD,CAAC;YAGK,QAAQ;AACf,YAAQ,MAAM,8BAA8B,OAAO;AAEnD,QAAI;KAEF,MAAM,aAAa,MAAM,gBAAgB;AACzC,SAAI,CAAC,WAAY,QAAO;AAKxB,YAJa,MAAM,WAAW,UAAU;MACtC,MAAM;MACN,OAAO;MACR,CAAC;YAEI;AAGN,YADqB,+BAA+B,WAAW,SAAS,CAAC;;;MAI3E;AAGJ,iBAAe,IAAI,UAAU,iBAAiB;AAC9C,gBAAc;AAGd,mBACG,MAAM,SAAS;AAEd,OAAI,eAAe,IAAI,SAAS,KAAK,iBACnC,SAAQ,KAAK;IAEf,CACD,YAAY;AAEX,OAAI,eAAe,IAAI,SAAS,KAAK,iBACnC,gBAAe,OAAO,SAAS;IAEjC;IACH;EAAC;EAAU;EAAU;EAAiB;EAAc;EAAc;EAAa,CAAC;AAEnF,QAAO,QAAQ"}