@ant-design/agentic-ui 2.8.0 → 2.10.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 (585) hide show
  1. package/dist/AgentRunBar/Robot.js +105 -57
  2. package/dist/AgentRunBar/icons/PauseIcon.js +38 -38
  3. package/dist/AgentRunBar/icons/PlayIcon.js +38 -38
  4. package/dist/AgentRunBar/icons/SimplePauseIcon.js +38 -38
  5. package/dist/AgentRunBar/icons/SimplePlayIcon.js +38 -38
  6. package/dist/AgentRunBar/icons/SimpleStopIcon.js +38 -38
  7. package/dist/AgentRunBar/icons/StopIcon.js +41 -50
  8. package/dist/AgentRunBar/icons/index.js +0 -1
  9. package/dist/AgentRunBar/index.js +270 -237
  10. package/dist/AgentRunBar/style.js +273 -239
  11. package/dist/AgenticLayout/index.js +140 -85
  12. package/dist/AgenticLayout/style.js +126 -107
  13. package/dist/AnswerAlert/components/CloseIcon.js +12 -21
  14. package/dist/AnswerAlert/components/ErrorIcon.js +42 -38
  15. package/dist/AnswerAlert/components/InfoIcon.js +42 -38
  16. package/dist/AnswerAlert/components/LoaderIcon.js +12 -21
  17. package/dist/AnswerAlert/components/SuccessIcon.js +42 -38
  18. package/dist/AnswerAlert/components/WarningIcon.js +42 -38
  19. package/dist/AnswerAlert/index.js +155 -75
  20. package/dist/AnswerAlert/style.js +159 -147
  21. package/dist/BackTo/BackBottom.js +154 -70
  22. package/dist/BackTo/BackTop.js +148 -68
  23. package/dist/BackTo/ScrollVisibleButton.js +124 -98
  24. package/dist/BackTo/hooks/useScrollVisible.js +79 -33
  25. package/dist/BackTo/icons/BottomIcon.js +37 -37
  26. package/dist/BackTo/icons/TopIcon.js +37 -37
  27. package/dist/BackTo/index.js +22 -7
  28. package/dist/BackTo/style.js +93 -70
  29. package/dist/Bubble/AIBubble.js +469 -406
  30. package/dist/Bubble/Avatar/index.js +139 -85
  31. package/dist/Bubble/Avatar/isEmoji.js +2 -6
  32. package/dist/Bubble/Bubble.js +114 -38
  33. package/dist/Bubble/BubbleBeforeNode.js +104 -74
  34. package/dist/Bubble/BubbleConfigProvide.js +3 -7
  35. package/dist/Bubble/FileView.js +63 -69
  36. package/dist/Bubble/List/PureBubbleList.js +130 -131
  37. package/dist/Bubble/List/SkeletonList.js +33 -24
  38. package/dist/Bubble/List/index.js +187 -124
  39. package/dist/Bubble/List/style.js +76 -47
  40. package/dist/Bubble/MessagesContent/BubbleContext.js +6 -12
  41. package/dist/Bubble/MessagesContent/BubbleExtra.js +663 -355
  42. package/dist/Bubble/MessagesContent/CopyButton/index.js +326 -96
  43. package/dist/Bubble/MessagesContent/DocInfo.js +351 -386
  44. package/dist/Bubble/MessagesContent/EXCEPTION.js +42 -22
  45. package/dist/Bubble/MessagesContent/MarkdownPreview.js +206 -156
  46. package/dist/Bubble/MessagesContent/VoiceButton/index.js +213 -115
  47. package/dist/Bubble/MessagesContent/VoiceButton/style.js +129 -105
  48. package/dist/Bubble/MessagesContent/VoiceButton/types.js +9 -0
  49. package/dist/Bubble/MessagesContent/docInfoStyle.js +118 -88
  50. package/dist/Bubble/MessagesContent/icons.js +157 -57
  51. package/dist/Bubble/MessagesContent/index.js +609 -368
  52. package/dist/Bubble/PureBubble.js +439 -326
  53. package/dist/Bubble/Title.js +110 -87
  54. package/dist/Bubble/UserBubble.js +218 -279
  55. package/dist/Bubble/index.js +10 -16
  56. package/dist/Bubble/style.js +248 -227
  57. package/dist/Bubble/type.js +3 -0
  58. package/dist/Bubble/types/BubbleExtra.js +1 -0
  59. package/dist/Bubble/types/DocInfo.js +1 -0
  60. package/dist/ChatBootPage/ButtonTab.js +25 -45
  61. package/dist/ChatBootPage/ButtonTabGroup.js +74 -47
  62. package/dist/ChatBootPage/ButtonTabGroupStyle.js +73 -45
  63. package/dist/ChatBootPage/ButtonTabStyle.js +121 -98
  64. package/dist/ChatBootPage/CaseReply.js +119 -113
  65. package/dist/ChatBootPage/CaseReplyStyle.js +217 -189
  66. package/dist/ChatBootPage/Title.js +19 -23
  67. package/dist/ChatBootPage/index.js +9 -11
  68. package/dist/ChatBootPage/style.js +80 -50
  69. package/dist/ChatLayout/index.js +93 -57
  70. package/dist/ChatLayout/style.js +206 -176
  71. package/dist/ChatLayout/types.js +1 -0
  72. package/dist/Components/ActionIconBox/index.js +571 -197
  73. package/dist/Components/ActionIconBox/style.js +141 -111
  74. package/dist/Components/ActionItemBox/ActionItemBox.js +95 -149
  75. package/dist/Components/ActionItemBox/index.js +7 -7
  76. package/dist/Components/ActionItemBox/style.js +353 -361
  77. package/dist/Components/Button/IconButton/index.js +35 -43
  78. package/dist/Components/Button/IconButton/style.js +357 -331
  79. package/dist/Components/Button/SwitchButton/index.js +243 -87
  80. package/dist/Components/Button/SwitchButton/style.js +160 -146
  81. package/dist/Components/Button/ToggleButton/index.js +46 -57
  82. package/dist/Components/Button/ToggleButton/style.js +283 -258
  83. package/dist/Components/Button/index.js +6 -2
  84. package/dist/Components/GradientText/index.js +21 -27
  85. package/dist/Components/GradientText/style.js +88 -63
  86. package/dist/Components/ImageList.js +111 -133
  87. package/dist/Components/LayoutHeader/index.js +145 -81
  88. package/dist/Components/LayoutHeader/style.js +89 -64
  89. package/dist/Components/LayoutHeader/types.js +3 -0
  90. package/dist/Components/Loading/index.js +53 -22
  91. package/dist/Components/Robot/index.js +90 -56
  92. package/dist/Components/Robot/lotties/DazingLottie/index.js +78 -47
  93. package/dist/Components/Robot/lotties/ThinkingLottie/index.js +78 -47
  94. package/dist/Components/Robot/lotties/index.js +0 -1
  95. package/dist/Components/SuggestionList/index.js +354 -182
  96. package/dist/Components/SuggestionList/style.js +204 -186
  97. package/dist/Components/TextAnimate/index.js +494 -362
  98. package/dist/Components/TextAnimate/style.js +72 -48
  99. package/dist/Components/TypingAnimation/index.js +214 -169
  100. package/dist/Components/TypingAnimation/style.js +76 -52
  101. package/dist/Components/VisualList/index.js +267 -180
  102. package/dist/Components/VisualList/style.js +140 -124
  103. package/dist/Components/icons/LoadingSpinnerIcon.js +124 -73
  104. package/dist/Components/lotties/DazingLottie/index.js +78 -47
  105. package/dist/Components/lotties/LoadingLottie/index.js +82 -48
  106. package/dist/Components/lotties/TextLoading/index.js +73 -49
  107. package/dist/Components/lotties/TextLoading/style.js +95 -78
  108. package/dist/Components/lotties/ThinkingLottie/index.js +78 -47
  109. package/dist/Components/lotties/index.js +0 -1
  110. package/dist/Constants/colors.js +71 -97
  111. package/dist/History/components/HistoryActionsBox.js +407 -180
  112. package/dist/History/components/HistoryEmpty.js +38 -42
  113. package/dist/History/components/HistoryEmptyIcon.js +682 -964
  114. package/dist/History/components/HistoryItem.js +683 -471
  115. package/dist/History/components/HistoryList.js +170 -87
  116. package/dist/History/components/HistoryRunningIcon.js +160 -111
  117. package/dist/History/components/LoadMoreComponent.js +308 -103
  118. package/dist/History/components/NewChatComponent.js +261 -69
  119. package/dist/History/components/NewChatComponent.style.js +79 -53
  120. package/dist/History/components/SearchComponent.js +367 -156
  121. package/dist/History/components/index.js +11 -23
  122. package/dist/History/hooks/useHistory.js +404 -129
  123. package/dist/History/index.js +301 -186
  124. package/dist/History/menu.js +158 -212
  125. package/dist/History/style.js +282 -276
  126. package/dist/History/types/HistoryData.js +6 -10
  127. package/dist/History/types/HistoryList.js +3 -0
  128. package/dist/History/types/index.js +3 -0
  129. package/dist/History/utils/index.js +35 -32
  130. package/dist/Hooks/useAutoScroll.js +262 -84
  131. package/dist/Hooks/useClickAway.js +60 -21
  132. package/dist/Hooks/useCopied.js +72 -20
  133. package/dist/Hooks/useDebounceFn/index.js +213 -55
  134. package/dist/Hooks/useIntersectionOnce.js +163 -74
  135. package/dist/Hooks/useLanguage.d.ts +3 -0
  136. package/dist/Hooks/useLanguage.js +67 -26
  137. package/dist/Hooks/useRefFunction/index.js +76 -11
  138. package/dist/Hooks/useSpeechSynthesis.js +143 -99
  139. package/dist/Hooks/useStyle/index.js +95 -60
  140. package/dist/Hooks/useThrottleFn/index.js +41 -41
  141. package/dist/I18n/index.js +246 -109
  142. package/dist/I18n/locales.d.ts +3 -0
  143. package/dist/I18n/locales.js +724 -711
  144. package/dist/Icons/animated/VoicePlayLottie/index.js +75 -46
  145. package/dist/Icons/animated/VoicingLottie/index.js +78 -47
  146. package/dist/MarkdownEditor/BaseMarkdownEditor.js +421 -349
  147. package/dist/MarkdownEditor/editor/Editor.js +1160 -843
  148. package/dist/MarkdownEditor/editor/components/CommentList/index.js +407 -239
  149. package/dist/MarkdownEditor/editor/components/CommentList/style.js +119 -89
  150. package/dist/MarkdownEditor/editor/components/ContributorAvatar/index.js +61 -63
  151. package/dist/MarkdownEditor/editor/components/ContributorAvatar/style.js +82 -52
  152. package/dist/MarkdownEditor/editor/components/LazyElement/index.js +208 -106
  153. package/dist/MarkdownEditor/editor/components/LazyElement/style.js +69 -42
  154. package/dist/MarkdownEditor/editor/components/fntTag/index.js +7 -11
  155. package/dist/MarkdownEditor/editor/components/fntTag/style.js +66 -36
  156. package/dist/MarkdownEditor/editor/components/index.js +0 -1
  157. package/dist/MarkdownEditor/editor/elements/Blockquote.js +95 -37
  158. package/dist/MarkdownEditor/editor/elements/Break.js +56 -25
  159. package/dist/MarkdownEditor/editor/elements/Card/index.js +131 -52
  160. package/dist/MarkdownEditor/editor/elements/Code.js +89 -67
  161. package/dist/MarkdownEditor/editor/elements/Comment/index.js +79 -50
  162. package/dist/MarkdownEditor/editor/elements/ErrorBoundary.js +117 -21
  163. package/dist/MarkdownEditor/editor/elements/FootnoteDefinition.js +83 -64
  164. package/dist/MarkdownEditor/editor/elements/FootnoteReference.js +115 -41
  165. package/dist/MarkdownEditor/editor/elements/Head.js +131 -67
  166. package/dist/MarkdownEditor/editor/elements/Hr.js +63 -38
  167. package/dist/MarkdownEditor/editor/elements/Image/index.js +636 -494
  168. package/dist/MarkdownEditor/editor/elements/InlineKatex.js +60 -44
  169. package/dist/MarkdownEditor/editor/elements/Katex.js +71 -55
  170. package/dist/MarkdownEditor/editor/elements/LinkCard/index.js +79 -175
  171. package/dist/MarkdownEditor/editor/elements/LinkCard/style.js +130 -100
  172. package/dist/MarkdownEditor/editor/elements/List/List.js +96 -69
  173. package/dist/MarkdownEditor/editor/elements/List/ListItem.js +422 -247
  174. package/dist/MarkdownEditor/editor/elements/List/index.js +1 -5
  175. package/dist/MarkdownEditor/editor/elements/List/style.js +131 -117
  176. package/dist/MarkdownEditor/editor/elements/Media.js +637 -519
  177. package/dist/MarkdownEditor/editor/elements/Mermaid.js +79 -54
  178. package/dist/MarkdownEditor/editor/elements/Paragraph.js +144 -83
  179. package/dist/MarkdownEditor/editor/elements/Schema.js +167 -128
  180. package/dist/MarkdownEditor/editor/elements/Table/ReadonlyTableComponent.js +211 -178
  181. package/dist/MarkdownEditor/editor/elements/Table/SimpleTable.js +73 -49
  182. package/dist/MarkdownEditor/editor/elements/Table/Table.js +285 -204
  183. package/dist/MarkdownEditor/editor/elements/Table/TableCellIndex/index.js +397 -280
  184. package/dist/MarkdownEditor/editor/elements/Table/TableCellIndex/style.js +126 -101
  185. package/dist/MarkdownEditor/editor/elements/Table/TableCellIndexSpacer/index.js +381 -276
  186. package/dist/MarkdownEditor/editor/elements/Table/TableCellIndexSpacer/style.js +120 -98
  187. package/dist/MarkdownEditor/editor/elements/Table/TableContext.js +64 -21
  188. package/dist/MarkdownEditor/editor/elements/Table/TableRowIndex/index.js +52 -42
  189. package/dist/MarkdownEditor/editor/elements/Table/TableRowIndex/style.js +69 -39
  190. package/dist/MarkdownEditor/editor/elements/Table/Td/index.js +126 -72
  191. package/dist/MarkdownEditor/editor/elements/Table/Td/style.js +85 -55
  192. package/dist/MarkdownEditor/editor/elements/Table/index.js +204 -105
  193. package/dist/MarkdownEditor/editor/elements/Table/style.js +244 -233
  194. package/dist/MarkdownEditor/editor/elements/Table/useScrollShadow.js +119 -62
  195. package/dist/MarkdownEditor/editor/elements/TagPopup/index.js +438 -276
  196. package/dist/MarkdownEditor/editor/elements/TagPopup/style.js +103 -77
  197. package/dist/MarkdownEditor/editor/elements/index.js +437 -424
  198. package/dist/MarkdownEditor/editor/parser/json-parse.js +38 -9
  199. package/dist/MarkdownEditor/editor/parser/parserMarkdownToSlateNode.js +1753 -1168
  200. package/dist/MarkdownEditor/editor/parser/parserMdToSchema.js +16 -20
  201. package/dist/MarkdownEditor/editor/parser/parserSlateNodeToMarkdown.js +1021 -606
  202. package/dist/MarkdownEditor/editor/parser/remarkParse.js +158 -102
  203. package/dist/MarkdownEditor/editor/plugins/catchError.js +78 -17
  204. package/dist/MarkdownEditor/editor/plugins/elements.js +458 -342
  205. package/dist/MarkdownEditor/editor/plugins/handlePaste.js +752 -300
  206. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/arrow.js +215 -129
  207. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/backspace.js +325 -180
  208. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/enter.js +576 -418
  209. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/match.js +157 -47
  210. package/dist/MarkdownEditor/editor/plugins/hotKeyCommands/tab.js +331 -209
  211. package/dist/MarkdownEditor/editor/plugins/index.js +0 -1
  212. package/dist/MarkdownEditor/editor/plugins/insertParsedHtmlNodes.js +1245 -507
  213. package/dist/MarkdownEditor/editor/plugins/parseMarkdownToNodesAndInsert.js +36 -24
  214. package/dist/MarkdownEditor/editor/plugins/useHighlight.js +267 -116
  215. package/dist/MarkdownEditor/editor/plugins/useKeyboard.js +234 -160
  216. package/dist/MarkdownEditor/editor/plugins/useOnchange.js +253 -92
  217. package/dist/MarkdownEditor/editor/plugins/withMarkdown.js +728 -439
  218. package/dist/MarkdownEditor/editor/store.js +1819 -1389
  219. package/dist/MarkdownEditor/editor/style.js +551 -506
  220. package/dist/MarkdownEditor/editor/tagStyles.js +43 -43
  221. package/dist/MarkdownEditor/editor/tools/DragHandle.js +56 -54
  222. package/dist/MarkdownEditor/editor/tools/InsertAutocomplete.js +1049 -732
  223. package/dist/MarkdownEditor/editor/tools/InsertLink.js +232 -181
  224. package/dist/MarkdownEditor/editor/tools/Leading.js +566 -303
  225. package/dist/MarkdownEditor/editor/tools/ToolBar/BaseBar.js +415 -377
  226. package/dist/MarkdownEditor/editor/tools/ToolBar/FloatBar.js +162 -125
  227. package/dist/MarkdownEditor/editor/tools/ToolBar/ReadonlyBaseBar.js +480 -258
  228. package/dist/MarkdownEditor/editor/tools/ToolBar/ToolBar.js +44 -44
  229. package/dist/MarkdownEditor/editor/tools/ToolBar/components/ClearFormatButton.js +20 -35
  230. package/dist/MarkdownEditor/editor/tools/ToolBar/components/ColorPickerButton.js +69 -73
  231. package/dist/MarkdownEditor/editor/tools/ToolBar/components/FormatButton.js +13 -19
  232. package/dist/MarkdownEditor/editor/tools/ToolBar/components/FormattingTools.js +34 -41
  233. package/dist/MarkdownEditor/editor/tools/ToolBar/components/HeadingDropdown.js +53 -47
  234. package/dist/MarkdownEditor/editor/tools/ToolBar/components/LinkButton.js +11 -19
  235. package/dist/MarkdownEditor/editor/tools/ToolBar/components/ToolBarItem.js +23 -43
  236. package/dist/MarkdownEditor/editor/tools/ToolBar/components/UndoRedoButtons.js +14 -25
  237. package/dist/MarkdownEditor/editor/tools/ToolBar/config/toolsConfig.js +139 -102
  238. package/dist/MarkdownEditor/editor/tools/ToolBar/floatBarStyle.js +95 -65
  239. package/dist/MarkdownEditor/editor/tools/ToolBar/hooks/useToolBarLogic.js +252 -161
  240. package/dist/MarkdownEditor/editor/tools/ToolBar/index.js +14 -24
  241. package/dist/MarkdownEditor/editor/tools/ToolBar/toolBarStyle.js +95 -65
  242. package/dist/MarkdownEditor/editor/tools/insertAutocompleteStyle.js +82 -52
  243. package/dist/MarkdownEditor/editor/types/Table.js +1 -0
  244. package/dist/MarkdownEditor/editor/utils/InlineChromiumBugfix.js +11 -16
  245. package/dist/MarkdownEditor/editor/utils/ace.js +136 -40
  246. package/dist/MarkdownEditor/editor/utils/docx/docxDeserializer.js +29 -32
  247. package/dist/MarkdownEditor/editor/utils/docx/index.js +0 -1
  248. package/dist/MarkdownEditor/editor/utils/docx/module.js +193 -164
  249. package/dist/MarkdownEditor/editor/utils/docx/utils.js +113 -98
  250. package/dist/MarkdownEditor/editor/utils/dom.js +119 -90
  251. package/dist/MarkdownEditor/editor/utils/editorUtils.js +1369 -906
  252. package/dist/MarkdownEditor/editor/utils/htmlToMarkdown.js +196 -184
  253. package/dist/MarkdownEditor/editor/utils/index.js +354 -215
  254. package/dist/MarkdownEditor/editor/utils/isMarkdown.js +56 -44
  255. package/dist/MarkdownEditor/editor/utils/keyboard.js +1229 -664
  256. package/dist/MarkdownEditor/editor/utils/markdownToHtml.js +294 -76
  257. package/dist/MarkdownEditor/editor/utils/media.js +274 -99
  258. package/dist/MarkdownEditor/editor/utils/path.js +22 -16
  259. package/dist/MarkdownEditor/editor/utils/performanceMonitor.js +370 -168
  260. package/dist/MarkdownEditor/editor/utils/useLocalState.js +96 -37
  261. package/dist/MarkdownEditor/el.js +1 -0
  262. package/dist/MarkdownEditor/hooks/editor.js +123 -41
  263. package/dist/MarkdownEditor/hooks/subscribe.js +18 -15
  264. package/dist/MarkdownEditor/index.js +118 -30
  265. package/dist/MarkdownEditor/plugin.js +2 -5
  266. package/dist/MarkdownEditor/style.js +96 -66
  267. package/dist/MarkdownEditor/types.js +1 -0
  268. package/dist/MarkdownEditor/utils/exportHtml.js +42 -83
  269. package/dist/MarkdownEditor/utils/native-table/index.js +0 -1
  270. package/dist/MarkdownEditor/utils/native-table/native-table-editor.js +337 -222
  271. package/dist/MarkdownEditor/utils/native-table/native-table-keyboard.js +201 -113
  272. package/dist/MarkdownInputField/AttachmentButton/AttachmentButtonPopover.d.ts +4 -0
  273. package/dist/MarkdownInputField/AttachmentButton/AttachmentButtonPopover.js +277 -82
  274. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileIcon.js +62 -33
  275. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/AttachmentFileListItem.js +147 -125
  276. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/index.js +174 -129
  277. package/dist/MarkdownInputField/AttachmentButton/AttachmentFileList/style.js +263 -237
  278. package/dist/MarkdownInputField/AttachmentButton/index.js +480 -205
  279. package/dist/MarkdownInputField/AttachmentButton/style.js +143 -114
  280. package/dist/MarkdownInputField/AttachmentButton/types.js +3 -0
  281. package/dist/MarkdownInputField/AttachmentButton/utils.d.ts +60 -0
  282. package/dist/MarkdownInputField/AttachmentButton/utils.js +365 -33
  283. package/dist/MarkdownInputField/BeforeToolContainer/BeforeToolContainer.js +438 -404
  284. package/dist/MarkdownInputField/Enlargement/index.js +7 -17
  285. package/dist/MarkdownInputField/FileMapView/FileMapViewItem.js +193 -216
  286. package/dist/MarkdownInputField/FileMapView/index.js +387 -174
  287. package/dist/MarkdownInputField/FileMapView/style.js +281 -259
  288. package/dist/MarkdownInputField/FilePaste/index.js +239 -65
  289. package/dist/MarkdownInputField/FileUploadManager/index.js +504 -170
  290. package/dist/MarkdownInputField/MarkdownInputField.js +819 -549
  291. package/dist/MarkdownInputField/QuickActions/index.js +304 -134
  292. package/dist/MarkdownInputField/RefinePromptButton/index.js +24 -33
  293. package/dist/MarkdownInputField/RefinePromptButton/style.js +99 -73
  294. package/dist/MarkdownInputField/SendActions/index.js +179 -197
  295. package/dist/MarkdownInputField/SendButton/index.js +150 -110
  296. package/dist/MarkdownInputField/SendButton/style.js +95 -64
  297. package/dist/MarkdownInputField/SkillModeBar/hooks/index.js +3 -5
  298. package/dist/MarkdownInputField/SkillModeBar/hooks/useSkillModeState.js +51 -26
  299. package/dist/MarkdownInputField/SkillModeBar/index.js +119 -106
  300. package/dist/MarkdownInputField/SkillModeBar/style.js +124 -98
  301. package/dist/MarkdownInputField/Suggestion/index.js +391 -154
  302. package/dist/MarkdownInputField/TopOperatingArea/index.js +37 -44
  303. package/dist/MarkdownInputField/TopOperatingArea/style.js +98 -81
  304. package/dist/MarkdownInputField/VoiceInput/index.js +210 -82
  305. package/dist/MarkdownInputField/VoiceInput/style.js +85 -59
  306. package/dist/MarkdownInputField/VoiceInputManager/index.js +321 -94
  307. package/dist/MarkdownInputField/style.js +296 -233
  308. package/dist/Plugins/chart/AreaChart/index.js +541 -393
  309. package/dist/Plugins/chart/AreaChart/style.js +114 -90
  310. package/dist/Plugins/chart/BarChart/index.d.ts +4 -0
  311. package/dist/Plugins/chart/BarChart/index.js +865 -697
  312. package/dist/Plugins/chart/BarChart/style.js +114 -90
  313. package/dist/Plugins/chart/ChartAttrToolBar/ChartAttrToolBarStyle.js +82 -52
  314. package/dist/Plugins/chart/ChartAttrToolBar/index.js +94 -65
  315. package/dist/Plugins/chart/ChartMark/Area.js +176 -150
  316. package/dist/Plugins/chart/ChartMark/Bar.js +181 -152
  317. package/dist/Plugins/chart/ChartMark/Column.js +181 -151
  318. package/dist/Plugins/chart/ChartMark/Container.js +116 -75
  319. package/dist/Plugins/chart/ChartMark/Line.js +179 -151
  320. package/dist/Plugins/chart/ChartMark/Pie.js +79 -63
  321. package/dist/Plugins/chart/ChartMark/index.js +6 -13
  322. package/dist/Plugins/chart/ChartMark/useChart.js +1 -0
  323. package/dist/Plugins/chart/ChartRender.js +981 -696
  324. package/dist/Plugins/chart/ChartStatistic/index.js +47 -62
  325. package/dist/Plugins/chart/ChartStatistic/style.js +142 -143
  326. package/dist/Plugins/chart/ChartStatistic/utils.js +37 -27
  327. package/dist/Plugins/chart/DonutChart/Legend.js +94 -124
  328. package/dist/Plugins/chart/DonutChart/constants.js +4 -11
  329. package/dist/Plugins/chart/DonutChart/hooks.js +183 -112
  330. package/dist/Plugins/chart/DonutChart/index.js +588 -516
  331. package/dist/Plugins/chart/DonutChart/plugins.js +47 -44
  332. package/dist/Plugins/chart/DonutChart/style.js +186 -175
  333. package/dist/Plugins/chart/DonutChart/types.js +1 -0
  334. package/dist/Plugins/chart/FunnelChart/index.js +844 -647
  335. package/dist/Plugins/chart/FunnelChart/style.js +97 -71
  336. package/dist/Plugins/chart/LineChart/index.js +516 -393
  337. package/dist/Plugins/chart/LineChart/style.js +114 -90
  338. package/dist/Plugins/chart/RadarChart/index.js +580 -582
  339. package/dist/Plugins/chart/RadarChart/style.js +122 -112
  340. package/dist/Plugins/chart/ScatterChart/index.js +633 -640
  341. package/dist/Plugins/chart/ScatterChart/style.js +108 -94
  342. package/dist/Plugins/chart/components/ChartContainer/ChartContainer.js +151 -80
  343. package/dist/Plugins/chart/components/ChartContainer/ChartErrorBoundary.js +160 -41
  344. package/dist/Plugins/chart/components/ChartContainer/ChartErrorBoundaryExample.js +80 -62
  345. package/dist/Plugins/chart/components/ChartContainer/index.js +2 -7
  346. package/dist/Plugins/chart/components/ChartContainer/style.js +121 -91
  347. package/dist/Plugins/chart/components/ChartFilter/ChartFilter.js +58 -90
  348. package/dist/Plugins/chart/components/ChartFilter/style.js +169 -154
  349. package/dist/Plugins/chart/components/ChartToolBar/ChartToolBar.js +54 -59
  350. package/dist/Plugins/chart/components/ChartToolBar/style.js +132 -117
  351. package/dist/Plugins/chart/components/icons/TimeIcon.js +20 -26
  352. package/dist/Plugins/chart/components/index.js +32 -34
  353. package/dist/Plugins/chart/const.js +34 -25
  354. package/dist/Plugins/chart/hooks/useChartStatistic.js +1 -0
  355. package/dist/Plugins/chart/index.js +436 -339
  356. package/dist/Plugins/chart/loadChartRuntime.js +209 -110
  357. package/dist/Plugins/chart/utils.js +311 -87
  358. package/dist/Plugins/code/CodeUI/Katex/Katex.js +112 -66
  359. package/dist/Plugins/code/components/AceEditor.js +334 -237
  360. package/dist/Plugins/code/components/AceEditorContainer.js +23 -32
  361. package/dist/Plugins/code/components/CodeContainer.js +41 -56
  362. package/dist/Plugins/code/components/CodeRenderer.js +202 -155
  363. package/dist/Plugins/code/components/CodeToolbar.js +137 -181
  364. package/dist/Plugins/code/components/HtmlPreview.js +19 -22
  365. package/dist/Plugins/code/components/LanguageSelector.js +162 -96
  366. package/dist/Plugins/code/components/LoadImage.js +145 -46
  367. package/dist/Plugins/code/components/ThinkBlock.js +38 -42
  368. package/dist/Plugins/code/components/index.js +13 -23
  369. package/dist/Plugins/code/hooks/index.js +7 -9
  370. package/dist/Plugins/code/hooks/useCodeEditorState.js +139 -62
  371. package/dist/Plugins/code/hooks/useRenderConditions.js +31 -23
  372. package/dist/Plugins/code/hooks/useToolbarConfig.js +44 -46
  373. package/dist/Plugins/code/index.js +141 -89
  374. package/dist/Plugins/code/langIconMap.js +400 -108
  375. package/dist/Plugins/code/langIcons/AbapIcon.js +90 -57
  376. package/dist/Plugins/code/langIcons/ActionscriptIcon.js +89 -56
  377. package/dist/Plugins/code/langIcons/AdaIcon.js +89 -52
  378. package/dist/Plugins/code/langIcons/ApacheIcon.js +205 -254
  379. package/dist/Plugins/code/langIcons/ApexIcon.js +108 -82
  380. package/dist/Plugins/code/langIcons/AplIcon.js +90 -54
  381. package/dist/Plugins/code/langIcons/ApplescriptIcon.js +89 -56
  382. package/dist/Plugins/code/langIcons/AstroIcon.js +91 -58
  383. package/dist/Plugins/code/langIcons/AwkIcon.js +98 -68
  384. package/dist/Plugins/code/langIcons/BallerinaIcon.js +92 -59
  385. package/dist/Plugins/code/langIcons/BatIcon.js +158 -229
  386. package/dist/Plugins/code/langIcons/BicepIcon.js +91 -58
  387. package/dist/Plugins/code/langIcons/BladeIcon.js +90 -58
  388. package/dist/Plugins/code/langIcons/CIcon.js +90 -55
  389. package/dist/Plugins/code/langIcons/CadenceIcon.js +89 -56
  390. package/dist/Plugins/code/langIcons/ClojureIcon.js +96 -75
  391. package/dist/Plugins/code/langIcons/CmakeIcon.js +93 -62
  392. package/dist/Plugins/code/langIcons/CobolIcon.js +99 -70
  393. package/dist/Plugins/code/langIcons/CodeqlIcon.js +96 -76
  394. package/dist/Plugins/code/langIcons/CoffeeIcon.js +89 -56
  395. package/dist/Plugins/code/langIcons/ConsoleIcon.js +89 -56
  396. package/dist/Plugins/code/langIcons/CppIcon.js +90 -55
  397. package/dist/Plugins/code/langIcons/CrystalIcon.js +90 -57
  398. package/dist/Plugins/code/langIcons/CsharpIcon.js +90 -59
  399. package/dist/Plugins/code/langIcons/CssIcon.js +89 -52
  400. package/dist/Plugins/code/langIcons/DIcon.js +90 -53
  401. package/dist/Plugins/code/langIcons/DartIcon.js +92 -71
  402. package/dist/Plugins/code/langIcons/DatabaseIcon.js +90 -57
  403. package/dist/Plugins/code/langIcons/DiffIcon.js +90 -57
  404. package/dist/Plugins/code/langIcons/DockerIcon.js +89 -56
  405. package/dist/Plugins/code/langIcons/DotenvIcon.js +94 -56
  406. package/dist/Plugins/code/langIcons/ElixirIcon.js +91 -58
  407. package/dist/Plugins/code/langIcons/ElmIcon.js +105 -58
  408. package/dist/Plugins/code/langIcons/ErbIcon.js +90 -54
  409. package/dist/Plugins/code/langIcons/ErlangIcon.js +89 -56
  410. package/dist/Plugins/code/langIcons/FsharpIcon.js +93 -62
  411. package/dist/Plugins/code/langIcons/GdscriptIcon.js +96 -88
  412. package/dist/Plugins/code/langIcons/GlslIcon.js +90 -58
  413. package/dist/Plugins/code/langIcons/GnuplotIcon.js +98 -77
  414. package/dist/Plugins/code/langIcons/GoIcon.js +114 -93
  415. package/dist/Plugins/code/langIcons/GraphqlIcon.js +106 -66
  416. package/dist/Plugins/code/langIcons/GroovyIcon.js +89 -56
  417. package/dist/Plugins/code/langIcons/HackIcon.js +97 -64
  418. package/dist/Plugins/code/langIcons/HamlIcon.js +89 -56
  419. package/dist/Plugins/code/langIcons/HandlebarsIcon.js +89 -56
  420. package/dist/Plugins/code/langIcons/HaskellIcon.js +93 -64
  421. package/dist/Plugins/code/langIcons/HclIcon.js +118 -93
  422. package/dist/Plugins/code/langIcons/HclLightIcon.js +118 -97
  423. package/dist/Plugins/code/langIcons/HjsonIcon.js +94 -62
  424. package/dist/Plugins/code/langIcons/HlslIcon.js +96 -76
  425. package/dist/Plugins/code/langIcons/HtmlIcon.js +89 -56
  426. package/dist/Plugins/code/langIcons/HttpIcon.js +89 -56
  427. package/dist/Plugins/code/langIcons/ImbaIcon.js +98 -65
  428. package/dist/Plugins/code/langIcons/IniIcon.js +90 -54
  429. package/dist/Plugins/code/langIcons/JavaIcon.js +89 -56
  430. package/dist/Plugins/code/langIcons/JavascriptIcon.js +89 -56
  431. package/dist/Plugins/code/langIcons/JinjaIcon.js +100 -68
  432. package/dist/Plugins/code/langIcons/Json5Icon.js +100 -82
  433. package/dist/Plugins/code/langIcons/JsonIcon.js +89 -56
  434. package/dist/Plugins/code/langIcons/JsonnetIcon.js +102 -86
  435. package/dist/Plugins/code/langIcons/JuliaIcon.js +105 -52
  436. package/dist/Plugins/code/langIcons/KotlinIcon.js +104 -74
  437. package/dist/Plugins/code/langIcons/KustoIcon.js +90 -57
  438. package/dist/Plugins/code/langIcons/LessIcon.js +90 -57
  439. package/dist/Plugins/code/langIcons/LiquidIcon.js +91 -58
  440. package/dist/Plugins/code/langIcons/LispIcon.js +89 -56
  441. package/dist/Plugins/code/langIcons/LuaIcon.js +93 -60
  442. package/dist/Plugins/code/langIcons/MakefileIcon.js +91 -58
  443. package/dist/Plugins/code/langIcons/MarkdownIcon.js +89 -56
  444. package/dist/Plugins/code/langIcons/MarkojsIcon.js +96 -73
  445. package/dist/Plugins/code/langIcons/MatlabIcon.js +93 -64
  446. package/dist/Plugins/code/langIcons/MdxIcon.js +90 -53
  447. package/dist/Plugins/code/langIcons/MermaidIcon.js +95 -64
  448. package/dist/Plugins/code/langIcons/MojoIcon.js +95 -62
  449. package/dist/Plugins/code/langIcons/NginxIcon.js +94 -61
  450. package/dist/Plugins/code/langIcons/NimIcon.js +91 -54
  451. package/dist/Plugins/code/langIcons/NixIcon.js +92 -56
  452. package/dist/Plugins/code/langIcons/ObjectiveCIcon.js +90 -59
  453. package/dist/Plugins/code/langIcons/ObjectiveCppIcon.js +90 -57
  454. package/dist/Plugins/code/langIcons/OcamlIcon.js +90 -61
  455. package/dist/Plugins/code/langIcons/PascalIcon.js +95 -55
  456. package/dist/Plugins/code/langIcons/Perl6Icon.js +299 -320
  457. package/dist/Plugins/code/langIcons/PerlIcon.js +89 -56
  458. package/dist/Plugins/code/langIcons/PhpIcon.js +89 -52
  459. package/dist/Plugins/code/langIcons/PostcssIcon.js +130 -113
  460. package/dist/Plugins/code/langIcons/PowershellIcon.js +91 -58
  461. package/dist/Plugins/code/langIcons/PrismaIcon.js +97 -68
  462. package/dist/Plugins/code/langIcons/PrologIcon.js +91 -58
  463. package/dist/Plugins/code/langIcons/ProtoIcon.js +94 -68
  464. package/dist/Plugins/code/langIcons/PugIcon.js +177 -145
  465. package/dist/Plugins/code/langIcons/PuppetIcon.js +96 -52
  466. package/dist/Plugins/code/langIcons/PurescriptIcon.js +93 -61
  467. package/dist/Plugins/code/langIcons/PythonIcon.js +90 -61
  468. package/dist/Plugins/code/langIcons/RIcon.js +89 -52
  469. package/dist/Plugins/code/langIcons/RazorIcon.js +90 -57
  470. package/dist/Plugins/code/langIcons/ReactIcon.js +89 -56
  471. package/dist/Plugins/code/langIcons/ReactTsIcon.js +90 -57
  472. package/dist/Plugins/code/langIcons/RubyIcon.js +91 -58
  473. package/dist/Plugins/code/langIcons/RustIcon.js +89 -56
  474. package/dist/Plugins/code/langIcons/SasIcon.js +89 -52
  475. package/dist/Plugins/code/langIcons/SassIcon.js +90 -57
  476. package/dist/Plugins/code/langIcons/ScalaIcon.js +96 -53
  477. package/dist/Plugins/code/langIcons/SchemeIcon.js +91 -58
  478. package/dist/Plugins/code/langIcons/ShaderlabIcon.js +89 -56
  479. package/dist/Plugins/code/langIcons/SolidityIcon.js +94 -52
  480. package/dist/Plugins/code/langIcons/SparqlIcon.js +94 -64
  481. package/dist/Plugins/code/langIcons/StataIcon.js +126 -108
  482. package/dist/Plugins/code/langIcons/StylusIcon.js +92 -59
  483. package/dist/Plugins/code/langIcons/SvelteIcon.js +91 -58
  484. package/dist/Plugins/code/langIcons/SwiftIcon.js +90 -57
  485. package/dist/Plugins/code/langIcons/SystemverilogIcon.js +115 -102
  486. package/dist/Plugins/code/langIcons/TclIcon.js +89 -52
  487. package/dist/Plugins/code/langIcons/TexIcon.js +99 -65
  488. package/dist/Plugins/code/langIcons/TomlIcon.js +94 -70
  489. package/dist/Plugins/code/langIcons/TwigIcon.js +89 -56
  490. package/dist/Plugins/code/langIcons/TypescriptIcon.js +93 -60
  491. package/dist/Plugins/code/langIcons/VerilogIcon.js +89 -56
  492. package/dist/Plugins/code/langIcons/VhdlIcon.js +94 -64
  493. package/dist/Plugins/code/langIcons/VimIcon.js +278 -420
  494. package/dist/Plugins/code/langIcons/VueIcon.js +92 -59
  495. package/dist/Plugins/code/langIcons/WebassemblyIcon.js +103 -76
  496. package/dist/Plugins/code/langIcons/WenyanIcon.js +104 -100
  497. package/dist/Plugins/code/langIcons/WgslIcon.js +93 -77
  498. package/dist/Plugins/code/langIcons/WolframlanguageIcon.js +100 -71
  499. package/dist/Plugins/code/langIcons/XmlIcon.js +89 -52
  500. package/dist/Plugins/code/langIcons/XslIcon.js +94 -66
  501. package/dist/Plugins/code/langIcons/YamlIcon.js +89 -56
  502. package/dist/Plugins/code/langIcons/ZigIcon.js +106 -81
  503. package/dist/Plugins/code/langIcons/index.js +128 -259
  504. package/dist/Plugins/code/utils/index.js +5 -5
  505. package/dist/Plugins/code/utils/langOptions.js +86 -11
  506. package/dist/Plugins/defaultPlugins.js +9 -13
  507. package/dist/Plugins/formatter/index.js +205 -105
  508. package/dist/Plugins/index.js +6 -2
  509. package/dist/Plugins/katex/InlineKatex.js +196 -107
  510. package/dist/Plugins/katex/Katex.js +139 -65
  511. package/dist/Plugins/katex/index.js +163 -103
  512. package/dist/Plugins/mermaid/Mermaid.js +472 -197
  513. package/dist/Plugins/mermaid/index.js +237 -142
  514. package/dist/Quote/index.js +112 -73
  515. package/dist/Quote/style.js +176 -160
  516. package/dist/Schema/SchemaEditor/AceEditorWrapper.js +163 -119
  517. package/dist/Schema/SchemaEditor/index.js +385 -275
  518. package/dist/Schema/SchemaEditor/style.js +261 -269
  519. package/dist/Schema/SchemaForm/index.js +443 -268
  520. package/dist/Schema/SchemaForm/types.js +1 -0
  521. package/dist/Schema/SchemaRenderer/index.js +973 -588
  522. package/dist/Schema/SchemaRenderer/templateEngine.js +106 -26
  523. package/dist/Schema/index.js +7 -11
  524. package/dist/Schema/types.js +1 -0
  525. package/dist/Schema/validator.js +74 -36
  526. package/dist/TaskList/index.js +197 -142
  527. package/dist/TaskList/style.js +143 -122
  528. package/dist/ThoughtChainList/CostMillis.js +88 -54
  529. package/dist/ThoughtChainList/DeepThink.js +187 -152
  530. package/dist/ThoughtChainList/DotAni/index.js +29 -14
  531. package/dist/ThoughtChainList/DotAni/style.js +82 -50
  532. package/dist/ThoughtChainList/FlipText/index.js +74 -30
  533. package/dist/ThoughtChainList/MarkdownEditor.js +126 -72
  534. package/dist/ThoughtChainList/RagRetrievalInfo.js +113 -145
  535. package/dist/ThoughtChainList/TableSql.js +413 -459
  536. package/dist/ThoughtChainList/ThoughtChainListItem.js +388 -222
  537. package/dist/ThoughtChainList/TitleInfo.js +189 -185
  538. package/dist/ThoughtChainList/ToolCall.js +429 -463
  539. package/dist/ThoughtChainList/WebSearch.js +192 -162
  540. package/dist/ThoughtChainList/index.js +449 -410
  541. package/dist/ThoughtChainList/style.js +253 -232
  542. package/dist/ThoughtChainList/types.js +1 -0
  543. package/dist/ToolUseBar/ToolUseBarItem.js +183 -139
  544. package/dist/ToolUseBar/ToolUseBarItemComponents.js +345 -276
  545. package/dist/ToolUseBar/ToolUseBarThink.js +335 -396
  546. package/dist/ToolUseBar/index.js +226 -113
  547. package/dist/ToolUseBar/style.js +334 -308
  548. package/dist/ToolUseBar/thinkStyle.js +350 -328
  549. package/dist/Types/common.js +1 -0
  550. package/dist/Types/index.js +4 -2
  551. package/dist/Types/message.js +1 -0
  552. package/dist/Utils/easings.js +9 -12
  553. package/dist/Utils/formatTime.js +41 -17
  554. package/dist/Utils/getScroll.js +41 -41
  555. package/dist/Utils/language.js +355 -150
  556. package/dist/Utils/proxySandbox/ProxySandbox.js +1637 -1076
  557. package/dist/Utils/proxySandbox/SecurityContextManager.js +607 -343
  558. package/dist/Utils/proxySandbox/index.js +554 -267
  559. package/dist/Utils/proxySandbox/types.js +187 -52
  560. package/dist/Utils/scrollTo.js +48 -56
  561. package/dist/Utils/throttleByAnimationFrame.js +46 -20
  562. package/dist/WelcomeMessage/index.js +106 -58
  563. package/dist/WelcomeMessage/style.js +80 -55
  564. package/dist/Workspace/Browser/index.js +102 -40
  565. package/dist/Workspace/Browser/style.js +62 -33
  566. package/dist/Workspace/File/DataSourceStrategy.js +419 -217
  567. package/dist/Workspace/File/FileComponent.js +1004 -791
  568. package/dist/Workspace/File/FileTypeProcessor.js +337 -184
  569. package/dist/Workspace/File/PreviewComponent.js +472 -532
  570. package/dist/Workspace/File/index.js +3 -10
  571. package/dist/Workspace/File/style.js +397 -424
  572. package/dist/Workspace/File/utils.js +160 -106
  573. package/dist/Workspace/HtmlPreview/index.js +238 -137
  574. package/dist/Workspace/HtmlPreview/style.js +99 -77
  575. package/dist/Workspace/RealtimeFollow/index.js +411 -413
  576. package/dist/Workspace/RealtimeFollow/style.js +299 -303
  577. package/dist/Workspace/Task/index.js +53 -35
  578. package/dist/Workspace/Task/style.js +99 -73
  579. package/dist/Workspace/index.js +332 -254
  580. package/dist/Workspace/style.js +165 -146
  581. package/dist/Workspace/types.js +471 -252
  582. package/dist/Workspace/utils/codeLanguageUtils.js +148 -129
  583. package/dist/Workspace/utils.js +28 -20
  584. package/dist/index.js +27 -17
  585. package/package.json +3 -2
@@ -1,55 +1,231 @@
1
- var __defProp = Object.defineProperty;
2
- var __defProps = Object.defineProperties;
3
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
4
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
5
- var __hasOwnProp = Object.prototype.hasOwnProperty;
6
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
7
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
8
- var __spreadValues = (a, b) => {
9
- for (var prop in b || (b = {}))
10
- if (__hasOwnProp.call(b, prop))
11
- __defNormalProp(a, prop, b[prop]);
12
- if (__getOwnPropSymbols)
13
- for (var prop of __getOwnPropSymbols(b)) {
14
- if (__propIsEnum.call(b, prop))
15
- __defNormalProp(a, prop, b[prop]);
1
+ function _array_like_to_array(arr, len) {
2
+ if (len == null || len > arr.length) len = arr.length;
3
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
4
+ return arr2;
5
+ }
6
+ function _array_with_holes(arr) {
7
+ if (Array.isArray(arr)) return arr;
8
+ }
9
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
10
+ try {
11
+ var info = gen[key](arg);
12
+ var value = info.value;
13
+ } catch (error) {
14
+ reject(error);
15
+ return;
16
16
  }
17
- return a;
18
- };
19
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
20
- var __async = (__this, __arguments, generator) => {
21
- return new Promise((resolve, reject) => {
22
- var fulfilled = (value) => {
23
- try {
24
- step(generator.next(value));
25
- } catch (e) {
26
- reject(e);
27
- }
17
+ if (info.done) {
18
+ resolve(value);
19
+ } else {
20
+ Promise.resolve(value).then(_next, _throw);
21
+ }
22
+ }
23
+ function _async_to_generator(fn) {
24
+ return function() {
25
+ var self = this, args = arguments;
26
+ return new Promise(function(resolve, reject) {
27
+ var gen = fn.apply(self, args);
28
+ function _next(value) {
29
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
30
+ }
31
+ function _throw(err) {
32
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
33
+ }
34
+ _next(undefined);
35
+ });
28
36
  };
29
- var rejected = (value) => {
30
- try {
31
- step(generator.throw(value));
32
- } catch (e) {
33
- reject(e);
34
- }
37
+ }
38
+ function _define_property(obj, key, value) {
39
+ if (key in obj) {
40
+ Object.defineProperty(obj, key, {
41
+ value: value,
42
+ enumerable: true,
43
+ configurable: true,
44
+ writable: true
45
+ });
46
+ } else {
47
+ obj[key] = value;
48
+ }
49
+ return obj;
50
+ }
51
+ function _iterable_to_array_limit(arr, i) {
52
+ var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
53
+ if (_i == null) return;
54
+ var _arr = [];
55
+ var _n = true;
56
+ var _d = false;
57
+ var _s, _e;
58
+ try {
59
+ for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
60
+ _arr.push(_s.value);
61
+ if (i && _arr.length === i) break;
62
+ }
63
+ } catch (err) {
64
+ _d = true;
65
+ _e = err;
66
+ } finally{
67
+ try {
68
+ if (!_n && _i["return"] != null) _i["return"]();
69
+ } finally{
70
+ if (_d) throw _e;
71
+ }
72
+ }
73
+ return _arr;
74
+ }
75
+ function _non_iterable_rest() {
76
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
77
+ }
78
+ function _object_spread(target) {
79
+ for(var i = 1; i < arguments.length; i++){
80
+ var source = arguments[i] != null ? arguments[i] : {};
81
+ var ownKeys = Object.keys(source);
82
+ if (typeof Object.getOwnPropertySymbols === "function") {
83
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
84
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
85
+ }));
86
+ }
87
+ ownKeys.forEach(function(key) {
88
+ _define_property(target, key, source[key]);
89
+ });
90
+ }
91
+ return target;
92
+ }
93
+ function ownKeys(object, enumerableOnly) {
94
+ var keys = Object.keys(object);
95
+ if (Object.getOwnPropertySymbols) {
96
+ var symbols = Object.getOwnPropertySymbols(object);
97
+ if (enumerableOnly) {
98
+ symbols = symbols.filter(function(sym) {
99
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
100
+ });
101
+ }
102
+ keys.push.apply(keys, symbols);
103
+ }
104
+ return keys;
105
+ }
106
+ function _object_spread_props(target, source) {
107
+ source = source != null ? source : {};
108
+ if (Object.getOwnPropertyDescriptors) {
109
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
110
+ } else {
111
+ ownKeys(Object(source)).forEach(function(key) {
112
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
113
+ });
114
+ }
115
+ return target;
116
+ }
117
+ function _sliced_to_array(arr, i) {
118
+ return _array_with_holes(arr) || _iterable_to_array_limit(arr, i) || _unsupported_iterable_to_array(arr, i) || _non_iterable_rest();
119
+ }
120
+ function _type_of(obj) {
121
+ "@swc/helpers - typeof";
122
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
123
+ }
124
+ function _unsupported_iterable_to_array(o, minLen) {
125
+ if (!o) return;
126
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
127
+ var n = Object.prototype.toString.call(o).slice(8, -1);
128
+ if (n === "Object" && o.constructor) n = o.constructor.name;
129
+ if (n === "Map" || n === "Set") return Array.from(n);
130
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
131
+ }
132
+ function _ts_generator(thisArg, body) {
133
+ var f, y, t, g, _ = {
134
+ label: 0,
135
+ sent: function() {
136
+ if (t[0] & 1) throw t[1];
137
+ return t[1];
138
+ },
139
+ trys: [],
140
+ ops: []
35
141
  };
36
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
37
- step((generator = generator.apply(__this, __arguments)).next());
38
- });
39
- };
40
-
41
- // src/Workspace/File/FileComponent.tsx
142
+ return g = {
143
+ next: verb(0),
144
+ "throw": verb(1),
145
+ "return": verb(2)
146
+ }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
147
+ return this;
148
+ }), g;
149
+ function verb(n) {
150
+ return function(v) {
151
+ return step([
152
+ n,
153
+ v
154
+ ]);
155
+ };
156
+ }
157
+ function step(op) {
158
+ if (f) throw new TypeError("Generator is already executing.");
159
+ while(_)try {
160
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
161
+ if (y = 0, t) op = [
162
+ op[0] & 2,
163
+ t.value
164
+ ];
165
+ switch(op[0]){
166
+ case 0:
167
+ case 1:
168
+ t = op;
169
+ break;
170
+ case 4:
171
+ _.label++;
172
+ return {
173
+ value: op[1],
174
+ done: false
175
+ };
176
+ case 5:
177
+ _.label++;
178
+ y = op[1];
179
+ op = [
180
+ 0
181
+ ];
182
+ continue;
183
+ case 7:
184
+ op = _.ops.pop();
185
+ _.trys.pop();
186
+ continue;
187
+ default:
188
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
189
+ _ = 0;
190
+ continue;
191
+ }
192
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
193
+ _.label = op[1];
194
+ break;
195
+ }
196
+ if (op[0] === 6 && _.label < t[1]) {
197
+ _.label = t[1];
198
+ t = op;
199
+ break;
200
+ }
201
+ if (t && _.label < t[2]) {
202
+ _.label = t[2];
203
+ _.ops.push(op);
204
+ break;
205
+ }
206
+ if (t[2]) _.ops.pop();
207
+ _.trys.pop();
208
+ continue;
209
+ }
210
+ op = body.call(thisArg, _);
211
+ } catch (e) {
212
+ op = [
213
+ 6,
214
+ e
215
+ ];
216
+ y = 0;
217
+ } finally{
218
+ f = t = 0;
219
+ }
220
+ if (op[0] & 5) throw op[1];
221
+ return {
222
+ value: op[0] ? op[1] : void 0,
223
+ done: true
224
+ };
225
+ }
226
+ }
42
227
  import { ConfigProvider, Image, Input, Spin, Typography, message } from "antd";
43
- import {
44
- Check,
45
- ChevronDown as DownIcon,
46
- Download as DownloadIcon,
47
- Eye as EyeIcon,
48
- Locate,
49
- ChevronRight as RightIcon,
50
- Search,
51
- SquareArrowOutUpRight as ShareIcon
52
- } from "@sofa-design/icons";
228
+ import { Check, ChevronDown as DownIcon, Download as DownloadIcon, Eye as EyeIcon, Locate, ChevronRight as RightIcon, Search, SquareArrowOutUpRight as ShareIcon } from "@sofa-design/icons";
53
229
  import { Empty } from "antd";
54
230
  import classNames from "classnames";
55
231
  import React, { useContext, useEffect, useRef, useState } from "react";
@@ -60,775 +236,812 @@ import { fileTypeProcessor, isImageFile } from "./FileTypeProcessor";
60
236
  import { PreviewComponent } from "./PreviewComponent";
61
237
  import { useFileStyle } from "./style";
62
238
  import { generateUniqueId, getFileTypeIcon, getGroupIcon } from "./utils";
63
- var handleKeyboardEvent = (e, callback) => {
64
- if (e.key === "Enter" || e.key === " ") {
65
- callback(e);
66
- }
67
- };
68
- var handleFileDownload = (file) => {
69
- let blobUrl = null;
70
- try {
71
- const link = document.createElement("a");
72
- if (file.url) {
73
- link.href = file.url;
74
- } else if (file.content) {
75
- const blob = new Blob([file.content], { type: "text/plain" });
76
- blobUrl = URL.createObjectURL(blob);
77
- link.href = blobUrl;
78
- } else if (file.file instanceof File || file.file instanceof Blob) {
79
- blobUrl = URL.createObjectURL(file.file);
80
- link.href = blobUrl;
81
- } else {
82
- return;
239
+ // 通用的键盘事件处理函数
240
+ var handleKeyboardEvent = function(e, callback) {
241
+ if (e.key === 'Enter' || e.key === ' ') {
242
+ callback(e);
83
243
  }
84
- link.download = file.name || (file.file instanceof File ? file.file.name : "");
85
- document.body.appendChild(link);
86
- link.click();
87
- document.body.removeChild(link);
88
- } finally {
89
- if (blobUrl) {
90
- URL.revokeObjectURL(blobUrl);
91
- }
92
- }
93
244
  };
94
- var handleDefaultShare = (file, locale) => __async(void 0, null, function* () {
95
- try {
96
- const shareUrl = file.url || file.previewUrl || window.location.href;
97
- yield navigator.clipboard.writeText(shareUrl);
98
- message.success({
99
- icon: /* @__PURE__ */ React.createElement(
100
- Check,
101
- {
102
- style: {
103
- fontSize: 16,
104
- marginRight: 8,
105
- color: "var(--color-green-control-fill-primary)"
106
- }
245
+ // 通用的下载处理函数
246
+ var handleFileDownload = function(file) {
247
+ var blobUrl = null;
248
+ try {
249
+ // 创建下载链接
250
+ var link = document.createElement('a');
251
+ if (file.url) {
252
+ // 使用url作为下载链接
253
+ link.href = file.url;
254
+ } else if (file.content) {
255
+ // 使用文件内容创建 Blob 对象
256
+ var blob = new Blob([
257
+ file.content
258
+ ], {
259
+ type: 'text/plain'
260
+ });
261
+ blobUrl = URL.createObjectURL(blob);
262
+ link.href = blobUrl;
263
+ } else if (file.file instanceof File || file.file instanceof Blob) {
264
+ // 处理 File 或 Blob 对象
265
+ blobUrl = URL.createObjectURL(file.file);
266
+ link.href = blobUrl;
267
+ } else {
268
+ return; // 没有可下载的内容
107
269
  }
108
- ),
109
- content: /* @__PURE__ */ React.createElement(
110
- "span",
111
- {
112
- style: {
113
- font: "var(--font-text-body-emphasized-base)",
114
- color: "var(--color-gray-text-default)"
115
- }
116
- },
117
- (locale == null ? void 0 : locale["workspace.file.linkCopied"]) || "已复制链接"
118
- )
270
+ // 设置文件名(如果是 File 对象且没有指定文件名,使用 File 对象的名称)
271
+ link.download = file.name || (file.file instanceof File ? file.file.name : '');
272
+ // 执行下载
273
+ document.body.appendChild(link);
274
+ link.click();
275
+ document.body.removeChild(link);
276
+ } finally{
277
+ // 清理 Blob URL
278
+ if (blobUrl) {
279
+ URL.revokeObjectURL(blobUrl);
280
+ }
281
+ }
282
+ };
283
+ // 通用的默认分享处理函数
284
+ var handleDefaultShare = /*#__PURE__*/ function() {
285
+ var _ref = _async_to_generator(function(file, locale) {
286
+ var shareUrl, error;
287
+ return _ts_generator(this, function(_state) {
288
+ switch(_state.label){
289
+ case 0:
290
+ _state.trys.push([
291
+ 0,
292
+ 2,
293
+ ,
294
+ 3
295
+ ]);
296
+ shareUrl = file.url || file.previewUrl || window.location.href;
297
+ return [
298
+ 4,
299
+ navigator.clipboard.writeText(shareUrl)
300
+ ];
301
+ case 1:
302
+ _state.sent();
303
+ message.success({
304
+ icon: /*#__PURE__*/ React.createElement(Check, {
305
+ style: {
306
+ fontSize: 16,
307
+ marginRight: 8,
308
+ color: 'var(--color-green-control-fill-primary)'
309
+ }
310
+ }),
311
+ content: /*#__PURE__*/ React.createElement("span", {
312
+ style: {
313
+ font: 'var(--font-text-body-emphasized-base)',
314
+ color: 'var(--color-gray-text-default)'
315
+ }
316
+ }, (locale === null || locale === void 0 ? void 0 : locale['workspace.file.linkCopied']) || '已复制链接')
317
+ });
318
+ return [
319
+ 3,
320
+ 3
321
+ ];
322
+ case 2:
323
+ error = _state.sent();
324
+ // 如果复制失败,显示错误提示
325
+ message.error((locale === null || locale === void 0 ? void 0 : locale['workspace.file.copyFailed']) || '复制失败');
326
+ return [
327
+ 3,
328
+ 3
329
+ ];
330
+ case 3:
331
+ return [
332
+ 2
333
+ ];
334
+ }
335
+ });
119
336
  });
120
- } catch (error) {
121
- message.error((locale == null ? void 0 : locale["workspace.file.copyFailed"]) || "复制失败");
122
- }
123
- });
124
- var ensureNodeWithId = (node) => __spreadProps(__spreadValues({}, node), {
125
- id: node.id || generateUniqueId(node)
126
- });
127
- var getPreviewSource = (file) => {
128
- return file.previewUrl || file.url || "";
337
+ return function handleDefaultShare(file, locale) {
338
+ return _ref.apply(this, arguments);
339
+ };
340
+ }();
341
+ // 确保节点有唯一ID的辅助函数
342
+ var ensureNodeWithId = function(node) {
343
+ return _object_spread_props(_object_spread({}, node), {
344
+ id: node.id || generateUniqueId(node)
345
+ });
346
+ };
347
+ // 获取文件预览源的辅助函数
348
+ var getPreviewSource = function(file) {
349
+ return file.previewUrl || file.url || '';
350
+ };
351
+ var AccessibleButton = function(param) {
352
+ var icon = param.icon, onClick = param.onClick, className = param.className, ariaLabel = param.ariaLabel, id = param.id;
353
+ return /*#__PURE__*/ React.createElement("div", {
354
+ id: id,
355
+ className: className,
356
+ onClick: onClick,
357
+ role: "button",
358
+ tabIndex: 0,
359
+ onKeyDown: function(e) {
360
+ return handleKeyboardEvent(e, onClick);
361
+ },
362
+ "aria-label": ariaLabel
363
+ }, icon);
129
364
  };
130
- var AccessibleButton = ({
131
- icon,
132
- onClick,
133
- className,
134
- ariaLabel,
135
- id
136
- }) => /* @__PURE__ */ React.createElement(
137
- "div",
138
- {
139
- id,
140
- className,
141
- onClick,
142
- role: "button",
143
- tabIndex: 0,
144
- onKeyDown: (e) => handleKeyboardEvent(e, onClick),
145
- "aria-label": ariaLabel
146
- },
147
- icon
148
- );
149
- var SearchInput = React.memo(
150
- ({ keyword, onChange, searchPlaceholder, prefixCls, hashId, locale }) => {
151
- const inputRef = useRef(null);
152
- return /* @__PURE__ */ React.createElement("div", { className: classNames(`${prefixCls}-search`, hashId) }, /* @__PURE__ */ React.createElement(
153
- Input,
154
- {
365
+ var SearchInput = /*#__PURE__*/ React.memo(function(param) {
366
+ var keyword = param.keyword, onChange = param.onChange, searchPlaceholder = param.searchPlaceholder, prefixCls = param.prefixCls, hashId = param.hashId, locale = param.locale;
367
+ var inputRef = useRef(null);
368
+ return /*#__PURE__*/ React.createElement("div", {
369
+ className: classNames("".concat(prefixCls, "-search"), hashId)
370
+ }, /*#__PURE__*/ React.createElement(Input, {
155
371
  ref: inputRef,
156
- key: "file-search-input",
157
- style: { marginBottom: 8 },
372
+ key: "file-search-input" // 添加稳定的 key
373
+ ,
374
+ style: {
375
+ marginBottom: 8
376
+ },
158
377
  allowClear: true,
159
- placeholder: searchPlaceholder || (locale == null ? void 0 : locale["workspace.searchPlaceholder"]) || "搜索文件名",
160
- prefix: /* @__PURE__ */ React.createElement(
161
- Search,
162
- {
378
+ placeholder: searchPlaceholder || (locale === null || locale === void 0 ? void 0 : locale['workspace.searchPlaceholder']) || '搜索文件名',
379
+ prefix: /*#__PURE__*/ React.createElement(Search, {
163
380
  style: {
164
- color: "var(--color-gray-text-secondary)",
165
- fontSize: 16
381
+ color: 'var(--color-gray-text-secondary)',
382
+ fontSize: 16
166
383
  }
167
- }
168
- ),
169
- value: keyword != null ? keyword : "",
170
- onChange: (e) => onChange == null ? void 0 : onChange(e.target.value)
171
- }
172
- ));
173
- }
174
- );
175
- SearchInput.displayName = "SearchInput";
176
- var FileItemComponent = ({
177
- file,
178
- onClick,
179
- onDownload,
180
- onPreview,
181
- onShare,
182
- onLocate,
183
- prefixCls,
184
- hashId,
185
- bindDomId = false
186
- }) => {
187
- const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);
188
- const { locale } = useContext(I18nContext);
189
- const finalPrefixCls = prefixCls || getPrefixCls("workspace-file");
190
- const fileWithId = ensureNodeWithId(file);
191
- const fileTypeInfo = fileTypeProcessor.inferFileType(fileWithId);
192
- const handleClick = () => {
193
- if (onClick) {
194
- onClick(fileWithId);
195
- return;
196
- }
197
- if (onPreview) {
198
- onPreview(fileWithId);
199
- }
200
- };
201
- const showDownloadButton = (() => {
202
- if (fileWithId.canDownload !== void 0) {
203
- return fileWithId.canDownload;
204
- }
205
- return Boolean(
206
- onDownload || fileWithId.url || fileWithId.content || fileWithId.file
207
- );
208
- })();
209
- const handleDownload = (e) => {
210
- e.stopPropagation();
211
- if (onDownload) {
212
- onDownload(fileWithId);
213
- return;
214
- }
215
- handleFileDownload(fileWithId);
216
- };
217
- const handlePreview = (e) => {
218
- e.stopPropagation();
219
- onPreview == null ? void 0 : onPreview(fileWithId);
220
- };
221
- const handleShare = (e) => {
222
- e.stopPropagation();
223
- if (onShare) {
224
- onShare(fileWithId, {
225
- anchorEl: e.currentTarget,
226
- origin: "list"
227
- });
228
- return;
229
- }
230
- handleDefaultShare(fileWithId, locale);
231
- };
232
- const showPreviewButton = (() => {
233
- if (fileWithId.canPreview !== void 0) {
234
- return fileWithId.canPreview;
235
- }
236
- return onPreview && (isImageFile(fileWithId) ? !!(fileWithId.url || fileWithId.previewUrl) : fileTypeProcessor.processFile(fileWithId).canPreview);
237
- })();
238
- const showShareButton = fileWithId.canShare === true;
239
- const showLocationButton = fileWithId.canLocate === true;
240
- const handleLocate = (e) => {
241
- e.stopPropagation();
242
- onLocate == null ? void 0 : onLocate(fileWithId);
243
- };
244
- return /* @__PURE__ */ React.createElement(
245
- AccessibleButton,
246
- {
247
- icon: /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement("div", { className: classNames(`${finalPrefixCls}-item-icon`, hashId) }, getFileTypeIcon(
248
- fileTypeInfo.fileType,
249
- fileWithId.icon,
250
- fileWithId.name
251
- )), /* @__PURE__ */ React.createElement("div", { className: classNames(`${finalPrefixCls}-item-info`, hashId) }, /* @__PURE__ */ React.createElement("div", { className: classNames(`${finalPrefixCls}-item-name`, hashId) }, /* @__PURE__ */ React.createElement(Typography.Text, { ellipsis: { tooltip: fileWithId.name } }, fileWithId.name)), /* @__PURE__ */ React.createElement(
252
- "div",
253
- {
254
- className: classNames(`${finalPrefixCls}-item-details`, hashId)
255
- },
256
- /* @__PURE__ */ React.createElement(Typography.Text, { type: "secondary", ellipsis: true }, /* @__PURE__ */ React.createElement(
257
- "span",
258
- {
259
- className: classNames(`${finalPrefixCls}-item-type`, hashId)
260
- },
261
- fileTypeInfo.displayType || fileTypeInfo.fileType
262
- ), fileWithId.size && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
263
- "span",
264
- {
265
- className: classNames(
266
- `${finalPrefixCls}-item-separator`,
267
- hashId
268
- )
269
- },
270
- "|"
271
- ), /* @__PURE__ */ React.createElement(
272
- "span",
273
- {
274
- className: classNames(
275
- `${finalPrefixCls}-item-size`,
276
- hashId
277
- )
278
- },
279
- formatFileSize(fileWithId.size)
280
- )), fileWithId.lastModified && /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
281
- "span",
282
- {
283
- className: classNames(
284
- `${finalPrefixCls}-item-separator`,
285
- hashId
286
- )
287
- },
288
- "|"
289
- ), /* @__PURE__ */ React.createElement(
290
- "span",
291
- {
292
- className: classNames(
293
- `${finalPrefixCls}-item-time`,
294
- hashId
295
- )
296
- },
297
- formatLastModified(fileWithId.lastModified)
298
- )))
299
- )), /* @__PURE__ */ React.createElement(
300
- "div",
301
- {
302
- className: classNames(`${finalPrefixCls}-item-actions`, hashId),
303
- onClick: (e) => e.stopPropagation()
304
- },
305
- showPreviewButton && /* @__PURE__ */ React.createElement(
306
- ActionIconBox,
307
- {
308
- title: (locale == null ? void 0 : locale["workspace.file.preview"]) || "预览",
384
+ }),
385
+ value: keyword !== null && keyword !== void 0 ? keyword : '',
386
+ onChange: function(e) {
387
+ return onChange === null || onChange === void 0 ? void 0 : onChange(e.target.value);
388
+ }
389
+ }));
390
+ });
391
+ SearchInput.displayName = 'SearchInput';
392
+ // 文件项组件
393
+ var FileItemComponent = function(param) {
394
+ var file = param.file, onClick = param.onClick, onDownload = param.onDownload, onPreview = param.onPreview, onShare = param.onShare, onLocate = param.onLocate, prefixCls = param.prefixCls, hashId = param.hashId, _param_bindDomId = param.bindDomId, bindDomId = _param_bindDomId === void 0 ? false : _param_bindDomId;
395
+ var getPrefixCls = useContext(ConfigProvider.ConfigContext).getPrefixCls;
396
+ var locale = useContext(I18nContext).locale;
397
+ var finalPrefixCls = prefixCls || getPrefixCls('workspace-file');
398
+ // 确保文件有唯一ID
399
+ var fileWithId = ensureNodeWithId(file);
400
+ var fileTypeInfo = fileTypeProcessor.inferFileType(fileWithId);
401
+ var handleClick = function() {
402
+ // 如果有传入 onClick 事件,优先使用
403
+ if (onClick) {
404
+ onClick(fileWithId);
405
+ return;
406
+ }
407
+ // 如果没有传入 onClick 事件,默认打开预览页面
408
+ if (onPreview) {
409
+ onPreview(fileWithId);
410
+ }
411
+ };
412
+ // 判断是否显示下载按钮:优先使用用户 canDownload;否则当存在 onDownload/url/content/file 时显示
413
+ var showDownloadButton = function() {
414
+ if (fileWithId.canDownload !== undefined) {
415
+ return fileWithId.canDownload;
416
+ }
417
+ return Boolean(onDownload || fileWithId.url || fileWithId.content || fileWithId.file);
418
+ }();
419
+ var handleDownload = function(e) {
420
+ e.stopPropagation();
421
+ // 优先使用用户传入的下载方法
422
+ if (onDownload) {
423
+ onDownload(fileWithId);
424
+ return;
425
+ }
426
+ handleFileDownload(fileWithId);
427
+ };
428
+ var handlePreview = function(e) {
429
+ e.stopPropagation();
430
+ onPreview === null || onPreview === void 0 ? void 0 : onPreview(fileWithId);
431
+ };
432
+ var handleShare = function(e) {
433
+ e.stopPropagation();
434
+ // 如果有自定义的分享方法,优先使用
435
+ if (onShare) {
436
+ onShare(fileWithId, {
437
+ anchorEl: e.currentTarget,
438
+ origin: 'list'
439
+ });
440
+ return;
441
+ }
442
+ // 使用默认分享行为
443
+ handleDefaultShare(fileWithId, locale);
444
+ };
445
+ // 判断是否显示预览按钮:
446
+ // 1. 如果用户设置了 canPreview,优先使用用户的设置
447
+ // 2. 如果没有设置,则使用系统默认逻辑:图片类型有 url 就可以预览;其他类型按原有逻辑判断
448
+ var showPreviewButton = function() {
449
+ // 如果用户明确设置了 canPreview,直接使用用户设置
450
+ if (fileWithId.canPreview !== undefined) {
451
+ return fileWithId.canPreview;
452
+ }
453
+ // 否则使用系统默认逻辑
454
+ return onPreview && (isImageFile(fileWithId) ? !!(fileWithId.url || fileWithId.previewUrl) : fileTypeProcessor.processFile(fileWithId).canPreview);
455
+ }();
456
+ var showShareButton = fileWithId.canShare === true;
457
+ var showLocationButton = fileWithId.canLocate === true;
458
+ var handleLocate = function(e) {
459
+ e.stopPropagation();
460
+ onLocate === null || onLocate === void 0 ? void 0 : onLocate(fileWithId);
461
+ };
462
+ return /*#__PURE__*/ React.createElement(AccessibleButton, {
463
+ icon: /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("div", {
464
+ className: classNames("".concat(finalPrefixCls, "-item-icon"), hashId)
465
+ }, getFileTypeIcon(fileTypeInfo.fileType, fileWithId.icon, fileWithId.name)), /*#__PURE__*/ React.createElement("div", {
466
+ className: classNames("".concat(finalPrefixCls, "-item-info"), hashId)
467
+ }, /*#__PURE__*/ React.createElement("div", {
468
+ className: classNames("".concat(finalPrefixCls, "-item-name"), hashId)
469
+ }, /*#__PURE__*/ React.createElement(Typography.Text, {
470
+ ellipsis: {
471
+ tooltip: fileWithId.name
472
+ }
473
+ }, fileWithId.name)), /*#__PURE__*/ React.createElement("div", {
474
+ className: classNames("".concat(finalPrefixCls, "-item-details"), hashId)
475
+ }, /*#__PURE__*/ React.createElement(Typography.Text, {
476
+ type: "secondary",
477
+ ellipsis: true
478
+ }, /*#__PURE__*/ React.createElement("span", {
479
+ className: classNames("".concat(finalPrefixCls, "-item-type"), hashId)
480
+ }, fileTypeInfo.displayType || fileTypeInfo.fileType), fileWithId.size && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("span", {
481
+ className: classNames("".concat(finalPrefixCls, "-item-separator"), hashId)
482
+ }, "|"), /*#__PURE__*/ React.createElement("span", {
483
+ className: classNames("".concat(finalPrefixCls, "-item-size"), hashId)
484
+ }, formatFileSize(fileWithId.size))), fileWithId.lastModified && /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("span", {
485
+ className: classNames("".concat(finalPrefixCls, "-item-separator"), hashId)
486
+ }, "|"), /*#__PURE__*/ React.createElement("span", {
487
+ className: classNames("".concat(finalPrefixCls, "-item-time"), hashId)
488
+ }, formatLastModified(fileWithId.lastModified)))))), /*#__PURE__*/ React.createElement("div", {
489
+ className: classNames("".concat(finalPrefixCls, "-item-actions"), hashId),
490
+ onClick: function(e) {
491
+ return e.stopPropagation();
492
+ }
493
+ }, showPreviewButton && /*#__PURE__*/ React.createElement(ActionIconBox, {
494
+ title: (locale === null || locale === void 0 ? void 0 : locale['workspace.file.preview']) || '预览',
309
495
  onClick: handlePreview,
310
- tooltipProps: { mouseEnterDelay: 0.3 },
311
- className: classNames(
312
- `${finalPrefixCls}-item-action-btn`,
313
- hashId
314
- )
315
- },
316
- /* @__PURE__ */ React.createElement(EyeIcon, null)
317
- ),
318
- showLocationButton && /* @__PURE__ */ React.createElement(
319
- ActionIconBox,
320
- {
321
- title: (locale == null ? void 0 : locale["workspace.file.location"]) || "定位",
496
+ tooltipProps: {
497
+ mouseEnterDelay: 0.3
498
+ },
499
+ className: classNames("".concat(finalPrefixCls, "-item-action-btn"), hashId)
500
+ }, /*#__PURE__*/ React.createElement(EyeIcon, null)), showLocationButton && /*#__PURE__*/ React.createElement(ActionIconBox, {
501
+ title: (locale === null || locale === void 0 ? void 0 : locale['workspace.file.location']) || '定位',
322
502
  onClick: handleLocate,
323
- tooltipProps: { mouseEnterDelay: 0.3 },
324
- className: classNames(
325
- `${finalPrefixCls}-item-action-btn`,
326
- hashId
327
- )
328
- },
329
- /* @__PURE__ */ React.createElement(Locate, null)
330
- ),
331
- showShareButton && /* @__PURE__ */ React.createElement(
332
- ActionIconBox,
333
- {
334
- title: (locale == null ? void 0 : locale["workspace.file.share"]) || "分享",
503
+ tooltipProps: {
504
+ mouseEnterDelay: 0.3
505
+ },
506
+ className: classNames("".concat(finalPrefixCls, "-item-action-btn"), hashId)
507
+ }, /*#__PURE__*/ React.createElement(Locate, null)), showShareButton && /*#__PURE__*/ React.createElement(ActionIconBox, {
508
+ title: (locale === null || locale === void 0 ? void 0 : locale['workspace.file.share']) || '分享',
335
509
  onClick: handleShare,
336
- tooltipProps: { mouseEnterDelay: 0.3 },
337
- className: classNames(
338
- `${finalPrefixCls}-item-action-btn`,
339
- hashId
340
- )
341
- },
342
- /* @__PURE__ */ React.createElement(ShareIcon, null)
343
- ),
344
- showDownloadButton && /* @__PURE__ */ React.createElement(
345
- ActionIconBox,
346
- {
347
- title: (locale == null ? void 0 : locale["workspace.file.download"]) || "下载",
510
+ tooltipProps: {
511
+ mouseEnterDelay: 0.3
512
+ },
513
+ className: classNames("".concat(finalPrefixCls, "-item-action-btn"), hashId)
514
+ }, /*#__PURE__*/ React.createElement(ShareIcon, null)), showDownloadButton && /*#__PURE__*/ React.createElement(ActionIconBox, {
515
+ title: (locale === null || locale === void 0 ? void 0 : locale['workspace.file.download']) || '下载',
348
516
  onClick: handleDownload,
349
- tooltipProps: { mouseEnterDelay: 0.3 },
350
- className: classNames(
351
- `${finalPrefixCls}-item-action-btn`,
352
- hashId
353
- )
354
- },
355
- /* @__PURE__ */ React.createElement(DownloadIcon, null)
356
- )
357
- )),
358
- onClick: handleClick,
359
- className: classNames(`${finalPrefixCls}-item`, hashId),
360
- ariaLabel: `${(locale == null ? void 0 : locale["workspace.file"]) || "文件"}:${fileWithId.name}`,
361
- id: bindDomId ? fileWithId.id : void 0
362
- }
363
- );
517
+ tooltipProps: {
518
+ mouseEnterDelay: 0.3
519
+ },
520
+ className: classNames("".concat(finalPrefixCls, "-item-action-btn"), hashId)
521
+ }, /*#__PURE__*/ React.createElement(DownloadIcon, null)))),
522
+ onClick: handleClick,
523
+ className: classNames("".concat(finalPrefixCls, "-item"), hashId),
524
+ ariaLabel: "".concat((locale === null || locale === void 0 ? void 0 : locale['workspace.file']) || '文件', ":").concat(fileWithId.name),
525
+ id: bindDomId ? fileWithId.id : undefined
526
+ });
364
527
  };
365
- var GroupHeader = ({ group, onToggle, onGroupDownload, prefixCls, hashId }) => {
366
- const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);
367
- const { locale } = useContext(I18nContext);
368
- const finalPrefixCls = prefixCls || getPrefixCls("workspace-file");
369
- const groupTypeInfo = fileTypeProcessor.inferFileType(group);
370
- const groupType = group.type || groupTypeInfo.fileType;
371
- const handleToggle = () => {
372
- onToggle == null ? void 0 : onToggle(group.id, groupType, !group.collapsed);
373
- };
374
- const handleDownload = (e) => {
375
- e.stopPropagation();
376
- onGroupDownload == null ? void 0 : onGroupDownload(group.children, groupType);
377
- };
378
- const CollapseIcon = group.collapsed ? RightIcon : DownIcon;
379
- const groupIcon = getGroupIcon(group, groupType, group.icon);
380
- const showDownloadButton = (() => {
381
- if (group.canDownload !== void 0) {
382
- return group.canDownload;
383
- }
384
- return Boolean(onGroupDownload);
385
- })();
386
- return /* @__PURE__ */ React.createElement(
387
- AccessibleButton,
388
- {
389
- icon: /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
390
- "div",
391
- {
392
- className: classNames(
393
- `${finalPrefixCls}-group-header-left`,
394
- hashId
395
- )
396
- },
397
- /* @__PURE__ */ React.createElement(
398
- CollapseIcon,
399
- {
400
- className: classNames(
401
- `${finalPrefixCls}-group-toggle-icon`,
402
- hashId
403
- )
404
- }
405
- ),
406
- /* @__PURE__ */ React.createElement(
407
- "div",
408
- {
409
- className: classNames(
410
- `${finalPrefixCls}-group-type-icon`,
411
- hashId
412
- )
413
- },
414
- groupIcon
415
- ),
416
- /* @__PURE__ */ React.createElement(
417
- "span",
418
- {
419
- className: classNames(
420
- `${finalPrefixCls}-group-type-name`,
421
- hashId
422
- )
423
- },
424
- group.name
425
- )
426
- ), /* @__PURE__ */ React.createElement(
427
- "div",
428
- {
429
- className: classNames(
430
- `${finalPrefixCls}-group-header-right`,
431
- hashId
432
- )
433
- },
434
- /* @__PURE__ */ React.createElement(
435
- "span",
436
- {
437
- className: classNames(`${finalPrefixCls}-group-count`, hashId)
438
- },
439
- group.children.length
440
- ),
441
- showDownloadButton && /* @__PURE__ */ React.createElement(
442
- ActionIconBox,
443
- {
444
- title: (locale == null ? void 0 : locale["workspace.file.download"]) || "下载",
528
+ // 分组标题栏组件
529
+ var GroupHeader = function(param) {
530
+ var group = param.group, onToggle = param.onToggle, onGroupDownload = param.onGroupDownload, prefixCls = param.prefixCls, hashId = param.hashId;
531
+ var getPrefixCls = useContext(ConfigProvider.ConfigContext).getPrefixCls;
532
+ var locale = useContext(I18nContext).locale;
533
+ var finalPrefixCls = prefixCls || getPrefixCls('workspace-file');
534
+ var groupTypeInfo = fileTypeProcessor.inferFileType(group);
535
+ var groupType = group.type || groupTypeInfo.fileType;
536
+ var handleToggle = function() {
537
+ onToggle === null || onToggle === void 0 ? void 0 : onToggle(group.id, groupType, !group.collapsed);
538
+ };
539
+ var handleDownload = function(e) {
540
+ e.stopPropagation();
541
+ onGroupDownload === null || onGroupDownload === void 0 ? void 0 : onGroupDownload(group.children, groupType);
542
+ };
543
+ var CollapseIcon = group.collapsed ? RightIcon : DownIcon;
544
+ // 获取分组图标
545
+ var groupIcon = getGroupIcon(group, groupType, group.icon);
546
+ // 判断是否显示下载按钮:优先使用用户 canDownload;否则当存在 onGroupDownload 时显示
547
+ var showDownloadButton = function() {
548
+ if (group.canDownload !== undefined) {
549
+ return group.canDownload;
550
+ }
551
+ return Boolean(onGroupDownload);
552
+ }();
553
+ return /*#__PURE__*/ React.createElement(AccessibleButton, {
554
+ icon: /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement("div", {
555
+ className: classNames("".concat(finalPrefixCls, "-group-header-left"), hashId)
556
+ }, /*#__PURE__*/ React.createElement(CollapseIcon, {
557
+ className: classNames("".concat(finalPrefixCls, "-group-toggle-icon"), hashId)
558
+ }), /*#__PURE__*/ React.createElement("div", {
559
+ className: classNames("".concat(finalPrefixCls, "-group-type-icon"), hashId)
560
+ }, groupIcon), /*#__PURE__*/ React.createElement("span", {
561
+ className: classNames("".concat(finalPrefixCls, "-group-type-name"), hashId)
562
+ }, group.name)), /*#__PURE__*/ React.createElement("div", {
563
+ className: classNames("".concat(finalPrefixCls, "-group-header-right"), hashId)
564
+ }, /*#__PURE__*/ React.createElement("span", {
565
+ className: classNames("".concat(finalPrefixCls, "-group-count"), hashId)
566
+ }, group.children.length), showDownloadButton && /*#__PURE__*/ React.createElement(ActionIconBox, {
567
+ title: (locale === null || locale === void 0 ? void 0 : locale['workspace.file.download']) || '下载',
445
568
  onClick: handleDownload,
446
- tooltipProps: { mouseEnterDelay: 0.3 },
447
- className: classNames(
448
- `${finalPrefixCls}-group-action-btn`,
449
- hashId
450
- )
451
- },
452
- /* @__PURE__ */ React.createElement(DownloadIcon, null)
453
- )
454
- )),
455
- onClick: handleToggle,
456
- className: classNames(`${finalPrefixCls}-group-header`, hashId),
457
- ariaLabel: `${group.collapsed ? (locale == null ? void 0 : locale["workspace.expand"]) || "展开" : (locale == null ? void 0 : locale["workspace.collapse"]) || "收起"}${group.name}${(locale == null ? void 0 : locale["workspace.group"]) || "分组"}`
458
- }
459
- );
569
+ tooltipProps: {
570
+ mouseEnterDelay: 0.3
571
+ },
572
+ className: classNames("".concat(finalPrefixCls, "-group-action-btn"), hashId)
573
+ }, /*#__PURE__*/ React.createElement(DownloadIcon, null)))),
574
+ onClick: handleToggle,
575
+ className: classNames("".concat(finalPrefixCls, "-group-header"), hashId),
576
+ ariaLabel: "".concat(group.collapsed ? (locale === null || locale === void 0 ? void 0 : locale['workspace.expand']) || '展开' : (locale === null || locale === void 0 ? void 0 : locale['workspace.collapse']) || '收起').concat(group.name).concat((locale === null || locale === void 0 ? void 0 : locale['workspace.group']) || '分组')
577
+ });
460
578
  };
461
- var FileGroupComponent = ({
462
- group,
463
- onToggle,
464
- onGroupDownload,
465
- onDownload,
466
- onFileClick,
467
- onPreview,
468
- onShare,
469
- onLocate,
470
- prefixCls,
471
- hashId,
472
- bindDomId
473
- }) => {
474
- const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);
475
- const finalPrefixCls = prefixCls || getPrefixCls("workspace-file");
476
- return /* @__PURE__ */ React.createElement("div", { className: classNames(`${finalPrefixCls}-container--group`, hashId) }, /* @__PURE__ */ React.createElement(
477
- GroupHeader,
478
- {
479
- group,
480
- onToggle,
481
- onGroupDownload,
482
- prefixCls: finalPrefixCls,
483
- hashId
484
- }
485
- ), !group.collapsed && /* @__PURE__ */ React.createElement("div", { className: classNames(`${finalPrefixCls}-group-content`, hashId) }, group.children.map((file) => /* @__PURE__ */ React.createElement(
486
- FileItemComponent,
487
- {
488
- key: file.id,
489
- file,
490
- onClick: onFileClick,
491
- onDownload,
492
- onPreview,
493
- onShare,
494
- onLocate,
495
- prefixCls: finalPrefixCls,
496
- hashId,
497
- bindDomId: !!bindDomId
498
- }
499
- ))));
579
+ // 文件分组组件
580
+ var FileGroupComponent = function(param) {
581
+ var group = param.group, onToggle = param.onToggle, onGroupDownload = param.onGroupDownload, onDownload = param.onDownload, onFileClick = param.onFileClick, onPreview = param.onPreview, onShare = param.onShare, onLocate = param.onLocate, prefixCls = param.prefixCls, hashId = param.hashId, bindDomId = param.bindDomId;
582
+ var getPrefixCls = useContext(ConfigProvider.ConfigContext).getPrefixCls;
583
+ var finalPrefixCls = prefixCls || getPrefixCls('workspace-file');
584
+ return /*#__PURE__*/ React.createElement("div", {
585
+ className: classNames("".concat(finalPrefixCls, "-container--group"), hashId)
586
+ }, /*#__PURE__*/ React.createElement(GroupHeader, {
587
+ group: group,
588
+ onToggle: onToggle,
589
+ onGroupDownload: onGroupDownload,
590
+ prefixCls: finalPrefixCls,
591
+ hashId: hashId
592
+ }), !group.collapsed && /*#__PURE__*/ React.createElement("div", {
593
+ className: classNames("".concat(finalPrefixCls, "-group-content"), hashId)
594
+ }, group.children.map(function(file) {
595
+ return /*#__PURE__*/ React.createElement(FileItemComponent, {
596
+ key: file.id,
597
+ file: file,
598
+ onClick: onFileClick,
599
+ onDownload: onDownload,
600
+ onPreview: onPreview,
601
+ onShare: onShare,
602
+ onLocate: onLocate,
603
+ prefixCls: finalPrefixCls,
604
+ hashId: hashId,
605
+ bindDomId: !!bindDomId
606
+ });
607
+ })));
500
608
  };
501
- var FileComponent = ({
502
- nodes,
503
- onGroupDownload,
504
- onDownload,
505
- onShare,
506
- onFileClick,
507
- onLocate,
508
- onToggleGroup,
509
- onPreview,
510
- onBack,
511
- resetKey,
512
- markdownEditorProps,
513
- customActions,
514
- actionRef,
515
- loading,
516
- loadingRender,
517
- emptyRender,
518
- keyword,
519
- onChange,
520
- showSearch = false,
521
- searchPlaceholder,
522
- bindDomId = false
523
- }) => {
524
- const [previewFile, setPreviewFile] = useState(null);
525
- const [customPreviewContent, setCustomPreviewContent] = useState(null);
526
- const [customPreviewHeader, setCustomPreviewHeader] = useState(null);
527
- const [headerFileOverride, setHeaderFileOverride] = useState(null);
528
- const [imagePreview, setImagePreview] = useState({ visible: false, src: "" });
529
- const [collapsedGroups, setCollapsedGroups] = useState({});
530
- const previewRequestIdRef = useRef(0);
531
- const nodeIdCacheRef = useRef(
532
- /* @__PURE__ */ new WeakMap()
533
- );
534
- const safeNodes = nodes || [];
535
- const { getPrefixCls } = useContext(ConfigProvider.ConfigContext);
536
- const { locale } = useContext(I18nContext);
537
- const prefixCls = getPrefixCls("workspace-file");
538
- const { wrapSSR, hashId } = useFileStyle(prefixCls);
539
- const ensureNodeWithStableId = (node) => {
540
- if (node.id)
541
- return __spreadValues({}, node);
542
- let cachedId = nodeIdCacheRef.current.get(node);
543
- if (!cachedId) {
544
- cachedId = generateUniqueId(node);
545
- nodeIdCacheRef.current.set(node, cachedId);
546
- }
547
- return __spreadProps(__spreadValues({}, node), {
548
- id: cachedId
549
- });
550
- };
551
- const handleBackToList = () => {
552
- previewRequestIdRef.current++;
553
- setPreviewFile(null);
554
- setCustomPreviewContent(null);
555
- setCustomPreviewHeader(null);
556
- setHeaderFileOverride(null);
557
- };
558
- useEffect(() => {
559
- if (resetKey !== void 0 && previewFile) {
560
- handleBackToList();
561
- }
562
- }, [resetKey]);
563
- useEffect(() => {
564
- if (!previewFile)
565
- return;
566
- const findUpdatedFile = (nodesList) => {
567
- for (const node of nodesList) {
568
- if ("children" in node) {
569
- const found = findUpdatedFile(node.children);
570
- if (found)
571
- return found;
572
- } else {
573
- if (node.id && node.id === previewFile.id || node.name === previewFile.name && node.type === previewFile.type) {
574
- return node;
575
- }
609
+ export var FileComponent = function(param) {
610
+ var nodes = param.nodes, onGroupDownload = param.onGroupDownload, onDownload = param.onDownload, onShare = param.onShare, onFileClick = param.onFileClick, onLocate = param.onLocate, onToggleGroup = param.onToggleGroup, onPreview = param.onPreview, onBack = param.onBack, resetKey = param.resetKey, markdownEditorProps = param.markdownEditorProps, customActions = param.customActions, actionRef = param.actionRef, loading = param.loading, loadingRender = param.loadingRender, emptyRender = param.emptyRender, keyword = param.keyword, onChange = param.onChange, _param_showSearch = param.showSearch, showSearch = _param_showSearch === void 0 ? false : _param_showSearch, searchPlaceholder = param.searchPlaceholder, _param_bindDomId = param.bindDomId, bindDomId = _param_bindDomId === void 0 ? false : _param_bindDomId;
611
+ var _useState = _sliced_to_array(useState(null), 2), previewFile = _useState[0], setPreviewFile = _useState[1];
612
+ var _useState1 = _sliced_to_array(useState(null), 2), customPreviewContent = _useState1[0], setCustomPreviewContent = _useState1[1];
613
+ var _useState2 = _sliced_to_array(useState(null), 2), customPreviewHeader = _useState2[0], setCustomPreviewHeader = _useState2[1];
614
+ // 标题区域文件信息覆盖,仅影响展示
615
+ var _useState3 = _sliced_to_array(useState(null), 2), headerFileOverride = _useState3[0], setHeaderFileOverride = _useState3[1];
616
+ var _useState4 = _sliced_to_array(useState({
617
+ visible: false,
618
+ src: ''
619
+ }), 2), imagePreview = _useState4[0], setImagePreview = _useState4[1];
620
+ // 添加内部状态来管理分组的折叠状态
621
+ var _useState5 = _sliced_to_array(useState({}), 2), collapsedGroups = _useState5[0], setCollapsedGroups = _useState5[1];
622
+ // 追踪预览请求的序号,避免异步竞态
623
+ var previewRequestIdRef = useRef(0);
624
+ // 缓存节点 ID,避免每次渲染重新生成(使用 WeakMap 自动清理不再使用的节点)
625
+ var nodeIdCacheRef = useRef(new WeakMap());
626
+ var safeNodes = nodes || [];
627
+ // 使用 ConfigProvider 获取前缀类名
628
+ var getPrefixCls = useContext(ConfigProvider.ConfigContext).getPrefixCls;
629
+ var locale = useContext(I18nContext).locale;
630
+ var prefixCls = getPrefixCls('workspace-file');
631
+ var _useFileStyle = useFileStyle(prefixCls), wrapSSR = _useFileStyle.wrapSSR, hashId = _useFileStyle.hashId;
632
+ // 确保节点有稳定的唯一 ID(使用缓存)
633
+ var ensureNodeWithStableId = function(node) {
634
+ if (node.id) return _object_spread({}, node);
635
+ // 尝试从缓存获取 ID
636
+ var cachedId = nodeIdCacheRef.current.get(node);
637
+ if (!cachedId) {
638
+ // 生成新 ID 并缓存
639
+ cachedId = generateUniqueId(node);
640
+ nodeIdCacheRef.current.set(node, cachedId);
576
641
  }
577
- }
578
- return null;
642
+ return _object_spread_props(_object_spread({}, node), {
643
+ id: cachedId
644
+ });
579
645
  };
580
- const updatedFile = findUpdatedFile(safeNodes);
581
- if (updatedFile) {
582
- setPreviewFile(updatedFile);
583
- }
584
- }, [nodes]);
585
- const handleToggleGroup = (groupId, type, collapsed) => {
586
- setCollapsedGroups((prev) => __spreadProps(__spreadValues({}, prev), {
587
- [groupId]: collapsed
588
- }));
589
- onToggleGroup == null ? void 0 : onToggleGroup(type, collapsed);
590
- };
591
- const handleBack = () => __async(void 0, null, function* () {
592
- if (previewFile) {
593
- try {
594
- const result = yield onBack == null ? void 0 : onBack(previewFile);
595
- if (result === false)
596
- return;
597
- } catch (_) {
598
- }
599
- }
600
- handleBackToList();
601
- });
602
- const handleDownloadInPreview = (file) => {
603
- if (onDownload) {
604
- onDownload(file);
605
- return;
606
- }
607
- handleFileDownload(file);
608
- };
609
- const handlePreview = (file) => __async(void 0, null, function* () {
610
- if (onPreview) {
611
- const currentCallId = ++previewRequestIdRef.current;
612
- setPreviewFile(file);
613
- try {
614
- const previewData = yield onPreview(file);
615
- if (previewRequestIdRef.current !== currentCallId)
616
- return;
617
- if (previewData === false) {
618
- setCustomPreviewContent(null);
619
- setCustomPreviewHeader(null);
620
- setPreviewFile(null);
621
- return;
646
+ // 返回列表(供预览页调用)
647
+ var handleBackToList = function() {
648
+ // 使进行中的预览请求失效
649
+ previewRequestIdRef.current++;
650
+ setPreviewFile(null);
651
+ setCustomPreviewContent(null);
652
+ setCustomPreviewHeader(null);
653
+ setHeaderFileOverride(null);
654
+ };
655
+ // 监听 resetKey 变化,重置预览状态
656
+ useEffect(function() {
657
+ if (resetKey !== undefined && previewFile) {
658
+ // resetKey 变化且当前处于预览状态时,重置预览状态
659
+ handleBackToList();
622
660
  }
623
- if (previewData) {
624
- if (React.isValidElement(previewData) || typeof previewData === "string" || typeof previewData === "number" || typeof previewData === "boolean") {
625
- const content = React.isValidElement(previewData) ? React.cloneElement(previewData, {
626
- setPreviewHeader: (header) => setCustomPreviewHeader(header),
627
- back: handleBackToList,
628
- download: () => handleDownloadInPreview(file),
629
- share: () => {
630
- if (onShare) {
631
- onShare(file, void 0);
632
- } else {
633
- handleDefaultShare(file, locale);
661
+ }, [
662
+ resetKey
663
+ ]);
664
+ // 监听 nodes 变化,同步更新 previewFile
665
+ useEffect(function() {
666
+ if (!previewFile) return;
667
+ // 在所有节点中查找与当前预览文件匹配的文件
668
+ var findUpdatedFile = function(nodesList) {
669
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
670
+ try {
671
+ for(var _iterator = nodesList[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
672
+ var node = _step.value;
673
+ if ('children' in node) {
674
+ // 分组节点,递归查找子节点
675
+ var found = findUpdatedFile(node.children);
676
+ if (found) return found;
677
+ } else {
678
+ // 文件节点,比较 ID 或文件引用
679
+ if (node.id && node.id === previewFile.id || node.name === previewFile.name && node.type === previewFile.type) {
680
+ return node;
681
+ }
682
+ }
634
683
  }
635
- }
636
- }) : previewData;
637
- setCustomPreviewHeader(null);
638
- setCustomPreviewContent(content);
639
- } else if (typeof previewData === "object" && previewData !== null && "name" in previewData) {
640
- setCustomPreviewContent(null);
641
- setCustomPreviewHeader(null);
642
- setPreviewFile(previewData);
643
- } else {
644
- setCustomPreviewContent(null);
645
- setCustomPreviewHeader(null);
646
- setPreviewFile(file);
647
- }
648
- return;
684
+ } catch (err) {
685
+ _didIteratorError = true;
686
+ _iteratorError = err;
687
+ } finally{
688
+ try {
689
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
690
+ _iterator.return();
691
+ }
692
+ } finally{
693
+ if (_didIteratorError) {
694
+ throw _iteratorError;
695
+ }
696
+ }
697
+ }
698
+ return null;
699
+ };
700
+ var updatedFile = findUpdatedFile(safeNodes);
701
+ // 如果找到了更新的文件,更新 previewFile
702
+ if (updatedFile) {
703
+ setPreviewFile(updatedFile);
649
704
  }
650
- setCustomPreviewContent(null);
651
- setPreviewFile(file);
652
- return;
653
- } catch (err) {
654
- if (previewRequestIdRef.current !== currentCallId)
655
- return;
656
- setCustomPreviewContent(null);
657
- setPreviewFile(file);
658
- return;
659
- }
660
- }
661
- if (isImageFile(file)) {
662
- const previewSrc = getPreviewSource(file);
663
- setImagePreview({
664
- visible: true,
665
- src: previewSrc
666
- });
667
- return;
668
- }
669
- setCustomPreviewContent(null);
670
- setPreviewFile(file);
671
- });
672
- React.useEffect(() => {
673
- if (!actionRef)
674
- return;
675
- actionRef.current = {
676
- openPreview: (file) => {
677
- const fileWithId = ensureNodeWithStableId(file);
678
- void handlePreview(fileWithId);
679
- },
680
- backToList: () => {
681
- handleBackToList();
682
- },
683
- updatePreviewHeader: (partial) => {
684
- setHeaderFileOverride((prev) => __spreadValues(__spreadValues({}, prev || {}), partial));
685
- }
686
- };
687
- return () => {
688
- actionRef.current = null;
705
+ }, [
706
+ nodes
707
+ ]);
708
+ // 处理分组折叠/展开
709
+ var handleToggleGroup = function(groupId, type, collapsed) {
710
+ // 更新内部状态,使用 groupId 作为 key
711
+ setCollapsedGroups(function(prev) {
712
+ return _object_spread_props(_object_spread({}, prev), _define_property({}, groupId, collapsed));
713
+ });
714
+ // 如果外部提供了回调,也调用它
715
+ onToggleGroup === null || onToggleGroup === void 0 ? void 0 : onToggleGroup(type, collapsed);
689
716
  };
690
- }, [actionRef, handlePreview, handleBackToList]);
691
- const hasKeyword = Boolean((keyword != null ? keyword : "").trim());
692
- const renderSearchInput = () => {
693
- if (!showSearch)
694
- return null;
695
- return /* @__PURE__ */ React.createElement(
696
- SearchInput,
697
- {
698
- keyword,
699
- onChange,
700
- searchPlaceholder,
701
- prefixCls,
702
- hashId,
703
- locale
704
- }
705
- );
706
- };
707
- const renderEmptyContent = () => {
708
- if (hasKeyword) {
709
- return /* @__PURE__ */ React.createElement(Typography.Text, { type: "secondary" }, ((locale == null ? void 0 : locale["workspace.noResultsFor"]) || `未找到与「${keyword}」匹配的结果`).replace("${keyword}", String(keyword)));
710
- }
711
- if (typeof emptyRender === "function") {
712
- return emptyRender();
713
- }
714
- return emptyRender != null ? emptyRender : /* @__PURE__ */ React.createElement(Empty, { description: (locale == null ? void 0 : locale["workspace.empty"]) || "No data" });
715
- };
716
- const ImagePreviewComponent = /* @__PURE__ */ React.createElement(
717
- Image,
718
- {
719
- style: { display: "none" },
720
- src: imagePreview.src,
721
- preview: {
722
- visible: imagePreview.visible,
723
- onVisibleChange: (visible) => {
724
- setImagePreview((prev) => __spreadProps(__spreadValues({}, prev), { visible }));
717
+ // 包装后的返回逻辑,允许外部拦截
718
+ var handleBack = /*#__PURE__*/ function() {
719
+ var _ref = _async_to_generator(function() {
720
+ var result, _;
721
+ return _ts_generator(this, function(_state) {
722
+ switch(_state.label){
723
+ case 0:
724
+ if (!previewFile) return [
725
+ 3,
726
+ 4
727
+ ];
728
+ _state.label = 1;
729
+ case 1:
730
+ _state.trys.push([
731
+ 1,
732
+ 3,
733
+ ,
734
+ 4
735
+ ]);
736
+ return [
737
+ 4,
738
+ onBack === null || onBack === void 0 ? void 0 : onBack(previewFile)
739
+ ];
740
+ case 2:
741
+ result = _state.sent();
742
+ if (result === false) return [
743
+ 2
744
+ ];
745
+ return [
746
+ 3,
747
+ 4
748
+ ];
749
+ case 3:
750
+ _ = _state.sent();
751
+ return [
752
+ 3,
753
+ 4
754
+ ];
755
+ case 4:
756
+ handleBackToList();
757
+ return [
758
+ 2
759
+ ];
760
+ }
761
+ });
762
+ });
763
+ return function handleBack() {
764
+ return _ref.apply(this, arguments);
765
+ };
766
+ }();
767
+ // 预览页面的下载(供预览页调用)
768
+ var handleDownloadInPreview = function(file) {
769
+ // 优先使用用户传入的下载方法
770
+ if (onDownload) {
771
+ onDownload(file);
772
+ return;
725
773
  }
726
- }
727
- }
728
- );
729
- if (previewFile) {
730
- return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(
731
- PreviewComponent,
732
- {
733
- file: previewFile,
734
- onBack: handleBack,
735
- onDownload: handleDownloadInPreview,
736
- onShare: (file, options) => {
737
- if (onShare) {
738
- onShare(file, {
739
- anchorEl: options == null ? void 0 : options.anchorEl,
740
- origin: "preview"
774
+ handleFileDownload(file);
775
+ };
776
+ // 预览文件处理
777
+ var handlePreview = /*#__PURE__*/ function() {
778
+ var _ref = _async_to_generator(function(file) {
779
+ var currentCallId, previewData, content, err, previewSrc;
780
+ return _ts_generator(this, function(_state) {
781
+ switch(_state.label){
782
+ case 0:
783
+ if (!onPreview) return [
784
+ 3,
785
+ 4
786
+ ];
787
+ // 立刻进入预览页并展示 loading
788
+ currentCallId = ++previewRequestIdRef.current;
789
+ setPreviewFile(file);
790
+ _state.label = 1;
791
+ case 1:
792
+ _state.trys.push([
793
+ 1,
794
+ 3,
795
+ ,
796
+ 4
797
+ ]);
798
+ return [
799
+ 4,
800
+ onPreview(file)
801
+ ];
802
+ case 2:
803
+ previewData = _state.sent();
804
+ if (previewRequestIdRef.current !== currentCallId) return [
805
+ 2
806
+ ];
807
+ // 当用户返回 false:阻止内部预览逻辑,交由外部处理(如自定义弹窗)
808
+ if (previewData === false) {
809
+ setCustomPreviewContent(null);
810
+ setCustomPreviewHeader(null);
811
+ setPreviewFile(null);
812
+ return [
813
+ 2
814
+ ];
815
+ }
816
+ if (previewData) {
817
+ // 区分返回类型:ReactNode -> 自定义内容;FileNode -> 新文件预览
818
+ if (/*#__PURE__*/ React.isValidElement(previewData) || typeof previewData === 'string' || typeof previewData === 'number' || typeof previewData === 'boolean') {
819
+ content = /*#__PURE__*/ React.isValidElement(previewData) ? /*#__PURE__*/ React.cloneElement(previewData, {
820
+ setPreviewHeader: function(header) {
821
+ return setCustomPreviewHeader(header);
822
+ },
823
+ back: handleBackToList,
824
+ download: function() {
825
+ return handleDownloadInPreview(file);
826
+ },
827
+ share: function() {
828
+ if (onShare) {
829
+ // 为保持回调参数签名一致,显式传入第二个参数为 undefined
830
+ onShare(file, undefined);
831
+ } else {
832
+ handleDefaultShare(file, locale);
833
+ }
834
+ }
835
+ }) : previewData;
836
+ setCustomPreviewHeader(null);
837
+ setCustomPreviewContent(content);
838
+ } else if ((typeof previewData === "undefined" ? "undefined" : _type_of(previewData)) === 'object' && previewData !== null && 'name' in previewData) {
839
+ setCustomPreviewContent(null);
840
+ setCustomPreviewHeader(null);
841
+ setPreviewFile(previewData);
842
+ } else {
843
+ setCustomPreviewContent(null);
844
+ setCustomPreviewHeader(null);
845
+ setPreviewFile(file);
846
+ }
847
+ return [
848
+ 2
849
+ ];
850
+ }
851
+ setCustomPreviewContent(null);
852
+ setPreviewFile(file);
853
+ return [
854
+ 2
855
+ ];
856
+ case 3:
857
+ err = _state.sent();
858
+ if (previewRequestIdRef.current !== currentCallId) return [
859
+ 2
860
+ ];
861
+ setCustomPreviewContent(null);
862
+ setPreviewFile(file);
863
+ return [
864
+ 2
865
+ ];
866
+ case 4:
867
+ // 使用组件库内部的预览逻辑
868
+ if (isImageFile(file)) {
869
+ previewSrc = getPreviewSource(file);
870
+ setImagePreview({
871
+ visible: true,
872
+ src: previewSrc
873
+ });
874
+ return [
875
+ 2
876
+ ];
877
+ }
878
+ setCustomPreviewContent(null);
879
+ setPreviewFile(file);
880
+ return [
881
+ 2
882
+ ];
883
+ }
741
884
  });
742
- } else {
743
- handleDefaultShare(file, locale);
744
- }
745
- },
746
- onLocate,
747
- customContent: customPreviewContent || void 0,
748
- customHeader: customPreviewHeader || void 0,
749
- customActions: typeof customActions === "function" ? customActions(previewFile) : customActions,
750
- headerFileOverride: headerFileOverride || void 0,
751
- markdownEditorProps
752
- }
753
- ), ImagePreviewComponent);
754
- }
755
- const renderFileContent = () => {
756
- if ((!nodes || nodes.length === 0) && !loading) {
757
- return /* @__PURE__ */ React.createElement("div", { className: classNames(`${prefixCls}-empty`, hashId) }, renderEmptyContent());
758
- }
759
- if (safeNodes.length === 0) {
760
- return /* @__PURE__ */ React.createElement("div", { className: classNames(`${prefixCls}-empty`, hashId) }, renderEmptyContent());
761
- }
762
- return safeNodes.map((node) => {
763
- var _a;
764
- const nodeWithId = ensureNodeWithStableId(node);
765
- if ("children" in nodeWithId) {
766
- const groupNode = __spreadProps(__spreadValues({}, nodeWithId), {
767
- collapsed: (_a = collapsedGroups[nodeWithId.id]) != null ? _a : nodeWithId.collapsed,
768
- // 确保子节点也有唯一ID
769
- children: nodeWithId.children.map(ensureNodeWithStableId)
770
885
  });
771
- return /* @__PURE__ */ React.createElement(
772
- FileGroupComponent,
773
- {
774
- key: nodeWithId.id,
775
- group: groupNode,
776
- onToggle: handleToggleGroup,
777
- onGroupDownload,
778
- onDownload,
779
- onFileClick,
780
- onPreview: handlePreview,
781
- onShare,
782
- onLocate,
783
- prefixCls,
784
- hashId,
785
- bindDomId
786
- }
787
- );
788
- }
789
- return /* @__PURE__ */ React.createElement(
790
- FileItemComponent,
791
- {
792
- key: nodeWithId.id,
793
- file: nodeWithId,
794
- onClick: onFileClick,
795
- onDownload,
796
- onShare,
797
- onPreview: handlePreview,
798
- onLocate,
799
- prefixCls,
800
- hashId,
801
- bindDomId
886
+ return function handlePreview(file) {
887
+ return _ref.apply(this, arguments);
888
+ };
889
+ }();
890
+ // 通过 actionRef 暴露可编程接口
891
+ React.useEffect(function() {
892
+ if (!actionRef) return;
893
+ actionRef.current = {
894
+ openPreview: function(file) {
895
+ var fileWithId = ensureNodeWithStableId(file);
896
+ void handlePreview(fileWithId);
897
+ },
898
+ backToList: function() {
899
+ handleBackToList();
900
+ },
901
+ updatePreviewHeader: function(partial) {
902
+ setHeaderFileOverride(function(prev) {
903
+ return _object_spread({}, prev || {}, partial);
904
+ });
905
+ }
906
+ };
907
+ return function() {
908
+ actionRef.current = null;
909
+ };
910
+ }, [
911
+ actionRef,
912
+ handlePreview,
913
+ handleBackToList
914
+ ]);
915
+ var hasKeyword = Boolean((keyword !== null && keyword !== void 0 ? keyword : '').trim());
916
+ // 渲染搜索框组件 - 确保在所有情况下都保持一致
917
+ var renderSearchInput = function() {
918
+ if (!showSearch) return null;
919
+ return /*#__PURE__*/ React.createElement(SearchInput, {
920
+ keyword: keyword,
921
+ onChange: onChange,
922
+ searchPlaceholder: searchPlaceholder,
923
+ prefixCls: prefixCls,
924
+ hashId: hashId,
925
+ locale: locale
926
+ });
927
+ };
928
+ // 渲染空状态内容
929
+ var renderEmptyContent = function() {
930
+ if (hasKeyword) {
931
+ return /*#__PURE__*/ React.createElement(Typography.Text, {
932
+ type: "secondary"
933
+ }, ((locale === null || locale === void 0 ? void 0 : locale['workspace.noResultsFor']) || "未找到与「".concat(keyword, "」匹配的结果")).replace('${keyword}', String(keyword)));
802
934
  }
803
- );
804
- });
805
- };
806
- return wrapSSR(
807
- /* @__PURE__ */ React.createElement(React.Fragment, null, loading && loadingRender ? (
808
- // 使用自定义loading渲染函数
809
- /* @__PURE__ */ React.createElement(
810
- "div",
811
- {
812
- className: classNames(`${prefixCls}-container`, hashId),
813
- "data-testid": "file-component"
814
- },
815
- renderSearchInput(),
816
- loadingRender()
817
- )
818
- ) : (
819
- // 使用默认的Spin组件
820
- /* @__PURE__ */ React.createElement(Spin, { spinning: !!loading }, /* @__PURE__ */ React.createElement(
821
- "div",
822
- {
823
- className: classNames(`${prefixCls}-container`, hashId),
824
- "data-testid": "file-component"
935
+ if (typeof emptyRender === 'function') {
936
+ return emptyRender();
937
+ }
938
+ return emptyRender !== null && emptyRender !== void 0 ? emptyRender : /*#__PURE__*/ React.createElement(Empty, {
939
+ description: (locale === null || locale === void 0 ? void 0 : locale['workspace.empty']) || 'No data'
940
+ });
941
+ };
942
+ // 图片预览组件
943
+ var ImagePreviewComponent = /*#__PURE__*/ React.createElement(Image, {
944
+ style: {
945
+ display: 'none'
825
946
  },
826
- renderSearchInput(),
827
- renderFileContent()
828
- ))
829
- ), ImagePreviewComponent)
830
- );
831
- };
832
- export {
833
- FileComponent
947
+ src: imagePreview.src,
948
+ preview: {
949
+ visible: imagePreview.visible,
950
+ onVisibleChange: function(visible) {
951
+ setImagePreview(function(prev) {
952
+ return _object_spread_props(_object_spread({}, prev), {
953
+ visible: visible
954
+ });
955
+ });
956
+ }
957
+ }
958
+ });
959
+ // 如果正在预览文件,显示预览组件
960
+ if (previewFile) {
961
+ return /*#__PURE__*/ React.createElement(React.Fragment, null, /*#__PURE__*/ React.createElement(PreviewComponent, {
962
+ file: previewFile,
963
+ onBack: handleBack,
964
+ onDownload: handleDownloadInPreview,
965
+ onShare: function(file, options) {
966
+ if (onShare) {
967
+ onShare(file, {
968
+ anchorEl: options === null || options === void 0 ? void 0 : options.anchorEl,
969
+ origin: 'preview'
970
+ });
971
+ } else {
972
+ handleDefaultShare(file, locale);
973
+ }
974
+ },
975
+ onLocate: onLocate,
976
+ customContent: customPreviewContent || undefined,
977
+ customHeader: customPreviewHeader || undefined,
978
+ customActions: typeof customActions === 'function' ? customActions(previewFile) : customActions,
979
+ headerFileOverride: headerFileOverride || undefined,
980
+ markdownEditorProps: markdownEditorProps
981
+ }), ImagePreviewComponent);
982
+ }
983
+ // 渲染文件内容
984
+ var renderFileContent = function() {
985
+ if ((!nodes || nodes.length === 0) && !loading) {
986
+ return /*#__PURE__*/ React.createElement("div", {
987
+ className: classNames("".concat(prefixCls, "-empty"), hashId)
988
+ }, renderEmptyContent());
989
+ }
990
+ if (safeNodes.length === 0) {
991
+ return /*#__PURE__*/ React.createElement("div", {
992
+ className: classNames("".concat(prefixCls, "-empty"), hashId)
993
+ }, renderEmptyContent());
994
+ }
995
+ return safeNodes.map(function(node) {
996
+ var nodeWithId = ensureNodeWithStableId(node);
997
+ if ('children' in nodeWithId) {
998
+ var _collapsedGroups_nodeWithId_id;
999
+ // 分组节点,使用内部状态覆盖外部的 collapsed 属性
1000
+ var groupNode = _object_spread_props(_object_spread({}, nodeWithId), {
1001
+ collapsed: (_collapsedGroups_nodeWithId_id = collapsedGroups[nodeWithId.id]) !== null && _collapsedGroups_nodeWithId_id !== void 0 ? _collapsedGroups_nodeWithId_id : nodeWithId.collapsed,
1002
+ // 确保子节点也有唯一ID
1003
+ children: nodeWithId.children.map(ensureNodeWithStableId)
1004
+ });
1005
+ return /*#__PURE__*/ React.createElement(FileGroupComponent, {
1006
+ key: nodeWithId.id,
1007
+ group: groupNode,
1008
+ onToggle: handleToggleGroup,
1009
+ onGroupDownload: onGroupDownload,
1010
+ onDownload: onDownload,
1011
+ onFileClick: onFileClick,
1012
+ onPreview: handlePreview,
1013
+ onShare: onShare,
1014
+ onLocate: onLocate,
1015
+ prefixCls: prefixCls,
1016
+ hashId: hashId,
1017
+ bindDomId: bindDomId
1018
+ });
1019
+ }
1020
+ // 文件节点
1021
+ return /*#__PURE__*/ React.createElement(FileItemComponent, {
1022
+ key: nodeWithId.id,
1023
+ file: nodeWithId,
1024
+ onClick: onFileClick,
1025
+ onDownload: onDownload,
1026
+ onShare: onShare,
1027
+ onPreview: handlePreview,
1028
+ onLocate: onLocate,
1029
+ prefixCls: prefixCls,
1030
+ hashId: hashId,
1031
+ bindDomId: bindDomId
1032
+ });
1033
+ });
1034
+ };
1035
+ // 统一的渲染逻辑 - 确保搜索框位置稳定
1036
+ return wrapSSR(/*#__PURE__*/ React.createElement(React.Fragment, null, loading && loadingRender ? // 使用自定义loading渲染函数
1037
+ /*#__PURE__*/ React.createElement("div", {
1038
+ className: classNames("".concat(prefixCls, "-container"), hashId),
1039
+ "data-testid": "file-component"
1040
+ }, renderSearchInput(), loadingRender()) : // 使用默认的Spin组件
1041
+ /*#__PURE__*/ React.createElement(Spin, {
1042
+ spinning: !!loading
1043
+ }, /*#__PURE__*/ React.createElement("div", {
1044
+ className: classNames("".concat(prefixCls, "-container"), hashId),
1045
+ "data-testid": "file-component"
1046
+ }, renderSearchInput(), renderFileContent())), ImagePreviewComponent));
834
1047
  };