@hkyhy/marsun-components-core 0.1.52 → 0.1.53

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 (309) hide show
  1. package/README.md +23 -15
  2. package/dist/agent-hub.d.ts +11 -0
  3. package/dist/agent-hub.js +144 -0
  4. package/dist/agent-hub.js.map +1 -0
  5. package/dist/components/AgentHub/Chat/Action/CreateButton.js +3 -3
  6. package/dist/components/AgentHub/Chat/Action/ManageActionButtons.js +4 -4
  7. package/dist/components/AgentHub/Chat/Action/SessionActionButtons.js +4 -4
  8. package/dist/components/AgentHub/Chat/Detail/ChatFollowUpSuggestions/index.js +29 -27
  9. package/dist/components/AgentHub/Chat/Detail/ChatFollowUpSuggestions/index.js.map +1 -1
  10. package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js +19 -18
  11. package/dist/components/AgentHub/Chat/Detail/ChatInput/index.js.map +1 -1
  12. package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js +18 -17
  13. package/dist/components/AgentHub/Chat/Detail/CitationPanel/index.js.map +1 -1
  14. package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js +23 -19
  15. package/dist/components/AgentHub/Chat/Detail/MessageActions/index.js.map +1 -1
  16. package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js +23 -21
  17. package/dist/components/AgentHub/Chat/Detail/MessageItem/index.js.map +1 -1
  18. package/dist/components/AgentHub/Chat/List/ChatCard/index.js +7 -7
  19. package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js +19 -17
  20. package/dist/components/AgentHub/Chat/List/SessionSidebar/index.js.map +1 -1
  21. package/dist/components/AgentHub/KnowledgeBase/Action/CreateButton.js +3 -3
  22. package/dist/components/AgentHub/KnowledgeBase/Action/ManageActionButtons.js +1 -1
  23. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js +16 -15
  24. package/dist/components/AgentHub/KnowledgeBase/Detail/DocumentTable/index.js.map +1 -1
  25. package/dist/components/AgentHub/KnowledgeBase/Detail/ParseStatusTag/index.js +7 -7
  26. package/dist/components/AgentHub/KnowledgeBase/List/KnowledgeCard/index.js +8 -8
  27. package/dist/components/AgentHub/Report/Detail/ReportHtmlPreview/index.js +1 -1
  28. package/dist/components/Auth/UserProfileCard/UserProfileCard.js +7 -7
  29. package/dist/components/File/FileItem/index.js +22 -20
  30. package/dist/components/File/FileItem/index.js.map +1 -1
  31. package/dist/components/File/FilePreview/index.js +11 -11
  32. package/dist/components/File/fileDisplay.js +41 -36
  33. package/dist/components/File/fileDisplay.js.map +1 -1
  34. package/dist/components/Filter/CommonFilter/index.js +20 -18
  35. package/dist/components/Filter/CommonFilter/index.js.map +1 -1
  36. package/dist/components/Filter/FilterSelect/index.js +90 -89
  37. package/dist/components/Filter/FilterSelect/index.js.map +1 -1
  38. package/dist/components/Filter/FilterTreeSelect/index.js +51 -48
  39. package/dist/components/Filter/FilterTreeSelect/index.js.map +1 -1
  40. package/dist/components/Filter/FilterTrigger/index.js +13 -11
  41. package/dist/components/Filter/FilterTrigger/index.js.map +1 -1
  42. package/dist/components/Form/PersonOptionRow/index.js +4 -4
  43. package/dist/components/Icons/ArrowLeft.d.ts +1 -0
  44. package/dist/components/Icons/ArrowLeft.js +7 -0
  45. package/dist/components/Icons/ArrowLeft.js.map +1 -0
  46. package/dist/components/Icons/ArrowLeftRight.d.ts +1 -0
  47. package/dist/components/Icons/ArrowLeftRight.js +7 -0
  48. package/dist/components/Icons/ArrowLeftRight.js.map +1 -0
  49. package/dist/components/Icons/BarChart3.d.ts +1 -0
  50. package/dist/components/Icons/BarChart3.js +7 -0
  51. package/dist/components/Icons/BarChart3.js.map +1 -0
  52. package/dist/components/Icons/Bell.d.ts +1 -0
  53. package/dist/components/Icons/Bell.js +7 -0
  54. package/dist/components/Icons/Bell.js.map +1 -0
  55. package/dist/components/Icons/BookOpen.d.ts +1 -0
  56. package/dist/components/Icons/BookOpen.js +7 -0
  57. package/dist/components/Icons/BookOpen.js.map +1 -0
  58. package/dist/components/Icons/Bot.d.ts +1 -0
  59. package/dist/components/Icons/Bot.js +7 -0
  60. package/dist/components/Icons/Bot.js.map +1 -0
  61. package/dist/components/Icons/Check.d.ts +1 -0
  62. package/dist/components/Icons/Check.js +7 -0
  63. package/dist/components/Icons/Check.js.map +1 -0
  64. package/dist/components/Icons/ChevronDown.d.ts +1 -0
  65. package/dist/components/Icons/ChevronDown.js +7 -0
  66. package/dist/components/Icons/ChevronDown.js.map +1 -0
  67. package/dist/components/Icons/ChevronLeft.d.ts +1 -0
  68. package/dist/components/Icons/ChevronLeft.js +7 -0
  69. package/dist/components/Icons/ChevronLeft.js.map +1 -0
  70. package/dist/components/Icons/ChevronRight.d.ts +1 -0
  71. package/dist/components/Icons/ChevronRight.js +7 -0
  72. package/dist/components/Icons/ChevronRight.js.map +1 -0
  73. package/dist/components/Icons/ChevronUp.d.ts +1 -0
  74. package/dist/components/Icons/ChevronUp.js +7 -0
  75. package/dist/components/Icons/ChevronUp.js.map +1 -0
  76. package/dist/components/Icons/CircleAlert.d.ts +1 -0
  77. package/dist/components/Icons/CircleAlert.js +7 -0
  78. package/dist/components/Icons/CircleAlert.js.map +1 -0
  79. package/dist/components/Icons/CircleCheck.d.ts +1 -0
  80. package/dist/components/Icons/CircleCheck.js +7 -0
  81. package/dist/components/Icons/CircleCheck.js.map +1 -0
  82. package/dist/components/Icons/CircleHelp.d.ts +1 -0
  83. package/dist/components/Icons/CircleHelp.js +7 -0
  84. package/dist/components/Icons/CircleHelp.js.map +1 -0
  85. package/dist/components/Icons/CirclePlay.d.ts +1 -0
  86. package/dist/components/Icons/CirclePlay.js +7 -0
  87. package/dist/components/Icons/CirclePlay.js.map +1 -0
  88. package/dist/components/Icons/CircleX.d.ts +1 -0
  89. package/dist/components/Icons/CircleX.js +7 -0
  90. package/dist/components/Icons/CircleX.js.map +1 -0
  91. package/dist/components/Icons/ClipboardCheck.d.ts +1 -0
  92. package/dist/components/Icons/ClipboardCheck.js +7 -0
  93. package/dist/components/Icons/ClipboardCheck.js.map +1 -0
  94. package/dist/components/Icons/Clock.d.ts +1 -0
  95. package/dist/components/Icons/Clock.js +7 -0
  96. package/dist/components/Icons/Clock.js.map +1 -0
  97. package/dist/components/Icons/CloudDownload.d.ts +1 -0
  98. package/dist/components/Icons/CloudDownload.js +7 -0
  99. package/dist/components/Icons/CloudDownload.js.map +1 -0
  100. package/dist/components/Icons/CloudUpload.d.ts +1 -0
  101. package/dist/components/Icons/CloudUpload.js +7 -0
  102. package/dist/components/Icons/CloudUpload.js.map +1 -0
  103. package/dist/components/Icons/Code.d.ts +1 -0
  104. package/dist/components/Icons/Code.js +7 -0
  105. package/dist/components/Icons/Code.js.map +1 -0
  106. package/dist/components/Icons/Copy.d.ts +1 -0
  107. package/dist/components/Icons/Copy.js +7 -0
  108. package/dist/components/Icons/Copy.js.map +1 -0
  109. package/dist/components/Icons/Crown.d.ts +1 -0
  110. package/dist/components/Icons/Crown.js +7 -0
  111. package/dist/components/Icons/Crown.js.map +1 -0
  112. package/dist/components/Icons/Database.d.ts +1 -0
  113. package/dist/components/Icons/Database.js +7 -0
  114. package/dist/components/Icons/Database.js.map +1 -0
  115. package/dist/components/Icons/Download.d.ts +1 -0
  116. package/dist/components/Icons/Download.js +7 -0
  117. package/dist/components/Icons/Download.js.map +1 -0
  118. package/dist/components/Icons/Eye.d.ts +1 -0
  119. package/dist/components/Icons/Eye.js +7 -0
  120. package/dist/components/Icons/Eye.js.map +1 -0
  121. package/dist/components/Icons/EyeOff.d.ts +1 -0
  122. package/dist/components/Icons/EyeOff.js +7 -0
  123. package/dist/components/Icons/EyeOff.js.map +1 -0
  124. package/dist/components/Icons/File.d.ts +1 -0
  125. package/dist/components/Icons/File.js +7 -0
  126. package/dist/components/Icons/File.js.map +1 -0
  127. package/dist/components/Icons/FileArchive.d.ts +1 -0
  128. package/dist/components/Icons/FileArchive.js +7 -0
  129. package/dist/components/Icons/FileArchive.js.map +1 -0
  130. package/dist/components/Icons/FileImage.d.ts +1 -0
  131. package/dist/components/Icons/FileImage.js +7 -0
  132. package/dist/components/Icons/FileImage.js.map +1 -0
  133. package/dist/components/Icons/FileSpreadsheet.d.ts +1 -0
  134. package/dist/components/Icons/FileSpreadsheet.js +7 -0
  135. package/dist/components/Icons/FileSpreadsheet.js.map +1 -0
  136. package/dist/components/Icons/FileText.d.ts +1 -0
  137. package/dist/components/Icons/FileText.js +7 -0
  138. package/dist/components/Icons/FileText.js.map +1 -0
  139. package/dist/components/Icons/Flag.d.ts +1 -0
  140. package/dist/components/Icons/Flag.js +7 -0
  141. package/dist/components/Icons/Flag.js.map +1 -0
  142. package/dist/components/Icons/Flame.d.ts +1 -0
  143. package/dist/components/Icons/Flame.js +7 -0
  144. package/dist/components/Icons/Flame.js.map +1 -0
  145. package/dist/components/Icons/Folder.d.ts +1 -0
  146. package/dist/components/Icons/Folder.js +7 -0
  147. package/dist/components/Icons/Folder.js.map +1 -0
  148. package/dist/components/Icons/FolderOpen.d.ts +1 -0
  149. package/dist/components/Icons/FolderOpen.js +7 -0
  150. package/dist/components/Icons/FolderOpen.js.map +1 -0
  151. package/dist/components/Icons/Hash.d.ts +1 -0
  152. package/dist/components/Icons/Hash.js +7 -0
  153. package/dist/components/Icons/Hash.js.map +1 -0
  154. package/dist/components/Icons/House.d.ts +1 -0
  155. package/dist/components/Icons/House.js +7 -0
  156. package/dist/components/Icons/House.js.map +1 -0
  157. package/dist/components/Icons/Import.d.ts +1 -0
  158. package/dist/components/Icons/Import.js +7 -0
  159. package/dist/components/Icons/Import.js.map +1 -0
  160. package/dist/components/Icons/Inbox.d.ts +1 -0
  161. package/dist/components/Icons/Inbox.js +7 -0
  162. package/dist/components/Icons/Inbox.js.map +1 -0
  163. package/dist/components/Icons/Info.d.ts +1 -0
  164. package/dist/components/Icons/Info.js +7 -0
  165. package/dist/components/Icons/Info.js.map +1 -0
  166. package/dist/components/Icons/LayoutDashboard.d.ts +1 -0
  167. package/dist/components/Icons/LayoutDashboard.js +7 -0
  168. package/dist/components/Icons/LayoutDashboard.js.map +1 -0
  169. package/dist/components/Icons/LayoutGrid.d.ts +1 -0
  170. package/dist/components/Icons/LayoutGrid.js +7 -0
  171. package/dist/components/Icons/LayoutGrid.js.map +1 -0
  172. package/dist/components/Icons/ListTodo.d.ts +1 -0
  173. package/dist/components/Icons/ListTodo.js +7 -0
  174. package/dist/components/Icons/ListTodo.js.map +1 -0
  175. package/dist/components/Icons/Loader2.d.ts +1 -0
  176. package/dist/components/Icons/Loader2.js +7 -0
  177. package/dist/components/Icons/Loader2.js.map +1 -0
  178. package/dist/components/Icons/Lock.d.ts +1 -0
  179. package/dist/components/Icons/Lock.js +7 -0
  180. package/dist/components/Icons/Lock.js.map +1 -0
  181. package/dist/components/Icons/LogOut.d.ts +1 -0
  182. package/dist/components/Icons/LogOut.js +7 -0
  183. package/dist/components/Icons/LogOut.js.map +1 -0
  184. package/dist/components/Icons/Maximize2.d.ts +1 -0
  185. package/dist/components/Icons/Maximize2.js +7 -0
  186. package/dist/components/Icons/Maximize2.js.map +1 -0
  187. package/dist/components/Icons/MessageCircle.d.ts +1 -0
  188. package/dist/components/Icons/MessageCircle.js +7 -0
  189. package/dist/components/Icons/MessageCircle.js.map +1 -0
  190. package/dist/components/Icons/MessageSquare.d.ts +1 -0
  191. package/dist/components/Icons/MessageSquare.js +7 -0
  192. package/dist/components/Icons/MessageSquare.js.map +1 -0
  193. package/dist/components/Icons/Minimize2.d.ts +1 -0
  194. package/dist/components/Icons/Minimize2.js +7 -0
  195. package/dist/components/Icons/Minimize2.js.map +1 -0
  196. package/dist/components/Icons/PanelLeftClose.d.ts +1 -0
  197. package/dist/components/Icons/PanelLeftClose.js +7 -0
  198. package/dist/components/Icons/PanelLeftClose.js.map +1 -0
  199. package/dist/components/Icons/PanelLeftOpen.d.ts +1 -0
  200. package/dist/components/Icons/PanelLeftOpen.js +7 -0
  201. package/dist/components/Icons/PanelLeftOpen.js.map +1 -0
  202. package/dist/components/Icons/Pause.d.ts +1 -0
  203. package/dist/components/Icons/Pause.js +7 -0
  204. package/dist/components/Icons/Pause.js.map +1 -0
  205. package/dist/components/Icons/Pencil.d.ts +1 -0
  206. package/dist/components/Icons/Pencil.js +7 -0
  207. package/dist/components/Icons/Pencil.js.map +1 -0
  208. package/dist/components/Icons/Plus.d.ts +1 -0
  209. package/dist/components/Icons/Plus.js +7 -0
  210. package/dist/components/Icons/Plus.js.map +1 -0
  211. package/dist/components/Icons/Presentation.d.ts +1 -0
  212. package/dist/components/Icons/Presentation.js +7 -0
  213. package/dist/components/Icons/Presentation.js.map +1 -0
  214. package/dist/components/Icons/RefreshCw.d.ts +1 -0
  215. package/dist/components/Icons/RefreshCw.js +7 -0
  216. package/dist/components/Icons/RefreshCw.js.map +1 -0
  217. package/dist/components/Icons/RotateCw.d.ts +1 -0
  218. package/dist/components/Icons/RotateCw.js +7 -0
  219. package/dist/components/Icons/RotateCw.js.map +1 -0
  220. package/dist/components/Icons/Send.d.ts +1 -0
  221. package/dist/components/Icons/Send.js +7 -0
  222. package/dist/components/Icons/Send.js.map +1 -0
  223. package/dist/components/Icons/Settings.d.ts +1 -0
  224. package/dist/components/Icons/Settings.js +7 -0
  225. package/dist/components/Icons/Settings.js.map +1 -0
  226. package/dist/components/Icons/Shield.d.ts +1 -0
  227. package/dist/components/Icons/Shield.js +7 -0
  228. package/dist/components/Icons/Shield.js.map +1 -0
  229. package/dist/components/Icons/ShieldCheck.d.ts +1 -0
  230. package/dist/components/Icons/ShieldCheck.js +7 -0
  231. package/dist/components/Icons/ShieldCheck.js.map +1 -0
  232. package/dist/components/Icons/SlidersHorizontal.d.ts +1 -0
  233. package/dist/components/Icons/SlidersHorizontal.js +7 -0
  234. package/dist/components/Icons/SlidersHorizontal.js.map +1 -0
  235. package/dist/components/Icons/Square.d.ts +1 -0
  236. package/dist/components/Icons/Square.js +7 -0
  237. package/dist/components/Icons/Square.js.map +1 -0
  238. package/dist/components/Icons/Star.d.ts +1 -0
  239. package/dist/components/Icons/Star.js +7 -0
  240. package/dist/components/Icons/Star.js.map +1 -0
  241. package/dist/components/Icons/ThumbsDown.d.ts +1 -0
  242. package/dist/components/Icons/ThumbsDown.js +7 -0
  243. package/dist/components/Icons/ThumbsDown.js.map +1 -0
  244. package/dist/components/Icons/ThumbsUp.d.ts +1 -0
  245. package/dist/components/Icons/ThumbsUp.js +7 -0
  246. package/dist/components/Icons/ThumbsUp.js.map +1 -0
  247. package/dist/components/Icons/Trash2.d.ts +1 -0
  248. package/dist/components/Icons/Trash2.js +7 -0
  249. package/dist/components/Icons/Trash2.js.map +1 -0
  250. package/dist/components/Icons/Trophy.d.ts +1 -0
  251. package/dist/components/Icons/Trophy.js +7 -0
  252. package/dist/components/Icons/Trophy.js.map +1 -0
  253. package/dist/components/Icons/Undo2.d.ts +1 -0
  254. package/dist/components/Icons/Undo2.js +7 -0
  255. package/dist/components/Icons/Undo2.js.map +1 -0
  256. package/dist/components/Icons/Upload.d.ts +1 -0
  257. package/dist/components/Icons/Upload.js +7 -0
  258. package/dist/components/Icons/Upload.js.map +1 -0
  259. package/dist/components/Icons/User.d.ts +1 -0
  260. package/dist/components/Icons/User.js +7 -0
  261. package/dist/components/Icons/User.js.map +1 -0
  262. package/dist/components/Icons/UserPlus.d.ts +1 -0
  263. package/dist/components/Icons/UserPlus.js +7 -0
  264. package/dist/components/Icons/UserPlus.js.map +1 -0
  265. package/dist/components/Icons/UserRoundCog.d.ts +1 -0
  266. package/dist/components/Icons/UserRoundCog.js +7 -0
  267. package/dist/components/Icons/UserRoundCog.js.map +1 -0
  268. package/dist/components/Icons/Users.d.ts +1 -0
  269. package/dist/components/Icons/Users.js +7 -0
  270. package/dist/components/Icons/Users.js.map +1 -0
  271. package/dist/components/Icons/X.d.ts +1 -0
  272. package/dist/components/Icons/X.js +7 -0
  273. package/dist/components/Icons/X.js.map +1 -0
  274. package/dist/components/Icons/createIcon.d.ts +9 -0
  275. package/dist/components/Icons/createIcon.js +32 -0
  276. package/dist/components/Icons/createIcon.js.map +1 -0
  277. package/dist/components/Icons/index.d.ts +80 -90
  278. package/dist/components/Icons/registry.d.ts +6 -0
  279. package/dist/components/Icons/registry.js +239 -0
  280. package/dist/components/Icons/registry.js.map +1 -0
  281. package/dist/components/InteractiveBlock/InteractiveBlock.js +6 -6
  282. package/dist/components/Layout/AgentAppShell/AgentAppShell.js +24 -23
  283. package/dist/components/Layout/AgentAppShell/AgentAppShell.js.map +1 -1
  284. package/dist/components/Layout/PageHeaderLayout/index.js +7 -7
  285. package/dist/components/Modal/Modal/index.js +8 -8
  286. package/dist/components/Modal/StepModal/index.js +9 -9
  287. package/dist/components/OrgTree/OrgTree.js +41 -39
  288. package/dist/components/OrgTree/OrgTree.js.map +1 -1
  289. package/dist/components/StateBar/StateBar.js +4 -4
  290. package/dist/components/Table/ColumnConfigPanel.js +13 -10
  291. package/dist/components/Table/ColumnConfigPanel.js.map +1 -1
  292. package/dist/components/Table/Table.js +7 -7
  293. package/dist/components/Tour/AppTour/index.js +10 -10
  294. package/dist/components/Upload/index.js +76 -72
  295. package/dist/components/Upload/index.js.map +1 -1
  296. package/dist/file.d.ts +5 -0
  297. package/dist/file.js +24 -0
  298. package/dist/file.js.map +1 -0
  299. package/dist/index.d.ts +3 -1
  300. package/dist/index.js +615 -537
  301. package/dist/index.js.map +1 -1
  302. package/dist/llm.d.ts +5 -0
  303. package/dist/llm.js +8 -0
  304. package/dist/llm.js.map +1 -0
  305. package/dist/marsun-components-core.css +1 -1
  306. package/dist/styles/global.css +1 -1
  307. package/package.json +15 -5
  308. package/dist/components/Icons/index.js +0 -268
  309. package/dist/components/Icons/index.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/CitationPanel/index.tsx"],"sourcesContent":["import { VirtualScrollbar } from '@/components/VirtualScrollbar';\nimport { ChevronDown, X } from '@/components/Icons';\nimport type { Citation } from '@/components/AgentHub/types';\nimport { Button, Empty } from 'antd';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { formatCitationMeta, resolveCitationTitle } from '../../utils';\nimport CitationContent from '../CitationContent';\nimport styles from './style.module.scss';\n\nexport interface CitationPanelProps {\n citations: Citation[];\n highlightedIndex?: number;\n onClose?: () => void;\n}\n\ninterface CitationItemProps {\n citation: Citation;\n index: number;\n highlighted?: boolean;\n expanded: boolean;\n onToggle: () => void;\n itemRef?: (el: HTMLElement | null) => void;\n}\n\nconst CitationItem: React.FC<CitationItemProps> = ({\n citation,\n index,\n highlighted,\n expanded,\n onToggle,\n itemRef,\n}) => {\n const meta = formatCitationMeta(citation);\n const hasContent = Boolean(citation.content);\n const title = resolveCitationTitle(citation, index);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (!hasContent) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onToggle();\n }\n },\n [hasContent, onToggle],\n );\n\n return (\n <article\n ref={itemRef}\n className={classNames(\n 'citation-panel-citation-item',\n styles['citation-panel-citation-item'],\n highlighted && 'citation-panel-citation-item-highlighted',\n highlighted && styles['citation-panel-citation-item-highlighted'],\n )}\n >\n {highlighted && (\n <span\n className={classNames(\n 'citation-panel-citation-item-marker',\n styles['citation-panel-citation-item-marker'],\n 'bg-primary',\n )}\n aria-hidden\n />\n )}\n\n <div\n className={classNames(\n 'citation-panel-citation-item-body',\n styles['citation-panel-citation-item-body'],\n )}\n >\n <span\n className={classNames(\n 'citation-panel-citation-item-index',\n styles['citation-panel-citation-item-index'],\n highlighted ? 'citation-item-index-highlighted' : 'citation-item-index-default',\n highlighted\n ? styles['citation-panel-citation-item-index-highlighted']\n : styles['citation-panel-citation-item-index-default'],\n )}\n >\n {index + 1}\n </span>\n\n <div\n className={classNames(\n 'citation-panel-citation-item-content',\n styles['citation-panel-citation-item-content'],\n )}\n >\n <div\n role={hasContent ? 'button' : undefined}\n tabIndex={hasContent ? 0 : undefined}\n aria-expanded={hasContent ? expanded : undefined}\n onClick={hasContent ? onToggle : undefined}\n onKeyDown={handleKeyDown}\n className={classNames(\n 'citation-panel-citation-item-header',\n styles['citation-panel-citation-item-header'],\n hasContent && 'citation-panel-citation-item-header-interactive',\n hasContent && styles['citation-panel-citation-item-header-interactive'],\n )}\n >\n <div\n className={classNames(\n 'citation-panel-citation-item-header-main',\n styles['citation-panel-citation-item-header-main'],\n )}\n >\n <h4\n className={classNames(\n 'citation-panel-citation-item-title',\n styles['citation-panel-citation-item-title'],\n )}\n title={title}\n >\n {title}\n </h4>\n {meta && (\n <p\n className={classNames(\n 'citation-panel-citation-item-meta',\n styles['citation-panel-citation-item-meta'],\n )}\n >\n {meta}\n </p>\n )}\n </div>\n\n {hasContent && (\n <ChevronDown\n className={classNames(\n 'citation-panel-citation-item-chevron',\n styles['citation-panel-citation-item-chevron'],\n expanded && 'citation-panel-citation-item-chevron-expanded',\n expanded && styles['citation-panel-citation-item-chevron-expanded'],\n )}\n aria-hidden\n />\n )}\n </div>\n\n {expanded && citation.content && (\n <blockquote\n className={classNames(\n 'citation-panel-citation-item-quote',\n styles['citation-panel-citation-item-quote'],\n )}\n >\n <CitationContent content={citation.content} />\n </blockquote>\n )}\n </div>\n </div>\n </article>\n );\n};\n\nconst CitationPanel: React.FC<CitationPanelProps> = ({ citations, highlightedIndex, onClose }) => {\n const [expandedSet, setExpandedSet] = useState<Set<number>>(() => new Set());\n const itemRefs = useRef<(HTMLElement | null)[]>([]);\n\n useEffect(() => {\n if (highlightedIndex === undefined || highlightedIndex < 0) return;\n setExpandedSet((prev) => new Set(prev).add(highlightedIndex));\n const el = itemRefs.current[highlightedIndex];\n if (el) {\n requestAnimationFrame(() => {\n el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n });\n }\n }, [highlightedIndex, citations]);\n\n const toggleExpanded = useCallback((index: number) => {\n setExpandedSet((prev) => {\n const next = new Set(prev);\n if (next.has(index)) next.delete(index);\n else next.add(index);\n return next;\n });\n }, []);\n\n return (\n <div\n className={classNames(\n 'citation-panel-citation-panel',\n styles['citation-panel-citation-panel'],\n )}\n >\n <header className={classNames('citation-panel-header', styles['citation-panel-header'])}>\n <h3 className={classNames('citation-panel-title', styles['citation-panel-title'])}>\n 引用来源\n </h3>\n <div\n className={classNames(\n 'citation-panel-header-actions',\n styles['citation-panel-header-actions'],\n )}\n >\n {citations.length > 0 && (\n <span className={classNames('citation-panel-count', styles['citation-panel-count'])}>\n {citations.length}\n </span>\n )}\n {onClose && (\n <Button\n type=\"text\"\n icon={\n <X\n className={classNames(\n 'citation-panel-citation-summary-icon',\n styles['citation-panel-citation-summary-icon'],\n )}\n />\n }\n size=\"small\"\n onClick={onClose}\n className={classNames('citation-panel-close-btn', styles['citation-panel-close-btn'])}\n />\n )}\n </div>\n </header>\n\n {citations.length === 0 ? (\n <div className={classNames('citation-panel-empty', styles['citation-panel-empty'])}>\n <Empty description=\"暂无引用来源\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n ) : (\n <VirtualScrollbar\n wrapperClassName={classNames('citation-panel-empty', styles['citation-panel-empty'])}\n >\n {citations.map((c, i) => (\n <React.Fragment key={c.id ?? `${c.doc_id ?? 'cite'}-${i}`}>\n {i > 0 && (\n <div\n className={classNames('citation-panel-divider', styles['citation-panel-divider'])}\n role=\"separator\"\n />\n )}\n <CitationItem\n citation={c}\n index={i}\n highlighted={highlightedIndex === i}\n expanded={expandedSet.has(i)}\n onToggle={() => toggleExpanded(i)}\n itemRef={(el) => {\n itemRefs.current[i] = el;\n }}\n />\n </React.Fragment>\n ))}\n </VirtualScrollbar>\n )}\n </div>\n );\n};\n\nexport default CitationPanel;\n"],"names":["CitationItem","citation","index","highlighted","expanded","onToggle","itemRef","meta","formatCitationMeta","hasContent","title","resolveCitationTitle","handleKeyDown","useCallback","e","jsxs","classNames","styles","jsx","ChevronDown","CitationContent","CitationPanel","citations","highlightedIndex","onClose","expandedSet","setExpandedSet","useState","itemRefs","useRef","useEffect","prev","el","toggleExpanded","next","Button","X","Empty","VirtualScrollbar","c","i","React"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/CitationPanel/index.tsx"],"sourcesContent":["import { VirtualScrollbar } from '@/components/VirtualScrollbar';\nimport { ChevronDown, X } from '@/components/Icons';\nimport type { Citation } from '@/components/AgentHub/types';\nimport { Button, Empty } from 'antd';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useRef, useState } from 'react';\nimport { formatCitationMeta, resolveCitationTitle } from '../../utils';\nimport CitationContent from '../CitationContent';\nimport styles from './style.module.scss';\n\nexport interface CitationPanelProps {\n citations: Citation[];\n highlightedIndex?: number;\n onClose?: () => void;\n}\n\ninterface CitationItemProps {\n citation: Citation;\n index: number;\n highlighted?: boolean;\n expanded: boolean;\n onToggle: () => void;\n itemRef?: (el: HTMLElement | null) => void;\n}\n\nconst CitationItem: React.FC<CitationItemProps> = ({\n citation,\n index,\n highlighted,\n expanded,\n onToggle,\n itemRef,\n}) => {\n const meta = formatCitationMeta(citation);\n const hasContent = Boolean(citation.content);\n const title = resolveCitationTitle(citation, index);\n\n const handleKeyDown = useCallback(\n (e: React.KeyboardEvent) => {\n if (!hasContent) return;\n if (e.key === 'Enter' || e.key === ' ') {\n e.preventDefault();\n onToggle();\n }\n },\n [hasContent, onToggle],\n );\n\n return (\n <article\n ref={itemRef}\n className={classNames(\n 'citation-panel-citation-item',\n styles['citation-panel-citation-item'],\n highlighted && 'citation-panel-citation-item-highlighted',\n highlighted && styles['citation-panel-citation-item-highlighted'],\n )}\n >\n {highlighted && (\n <span\n className={classNames(\n 'citation-panel-citation-item-marker',\n styles['citation-panel-citation-item-marker'],\n 'bg-primary',\n )}\n aria-hidden\n />\n )}\n\n <div\n className={classNames(\n 'citation-panel-citation-item-body',\n styles['citation-panel-citation-item-body'],\n )}\n >\n <span\n className={classNames(\n 'citation-panel-citation-item-index',\n styles['citation-panel-citation-item-index'],\n highlighted ? 'citation-item-index-highlighted' : 'citation-item-index-default',\n highlighted\n ? styles['citation-panel-citation-item-index-highlighted']\n : styles['citation-panel-citation-item-index-default'],\n )}\n >\n {index + 1}\n </span>\n\n <div\n className={classNames(\n 'citation-panel-citation-item-content',\n styles['citation-panel-citation-item-content'],\n )}\n >\n <div\n role={hasContent ? 'button' : undefined}\n tabIndex={hasContent ? 0 : undefined}\n aria-expanded={hasContent ? expanded : undefined}\n onClick={hasContent ? onToggle : undefined}\n onKeyDown={handleKeyDown}\n className={classNames(\n 'citation-panel-citation-item-header',\n styles['citation-panel-citation-item-header'],\n hasContent && 'citation-panel-citation-item-header-interactive',\n hasContent && styles['citation-panel-citation-item-header-interactive'],\n )}\n >\n <div\n className={classNames(\n 'citation-panel-citation-item-header-main',\n styles['citation-panel-citation-item-header-main'],\n )}\n >\n <h4\n className={classNames(\n 'citation-panel-citation-item-title',\n styles['citation-panel-citation-item-title'],\n )}\n title={title}\n >\n {title}\n </h4>\n {meta && (\n <p\n className={classNames(\n 'citation-panel-citation-item-meta',\n styles['citation-panel-citation-item-meta'],\n )}\n >\n {meta}\n </p>\n )}\n </div>\n\n {hasContent && (\n <ChevronDown\n className={classNames(\n 'citation-panel-citation-item-chevron',\n styles['citation-panel-citation-item-chevron'],\n expanded && 'citation-panel-citation-item-chevron-expanded',\n expanded && styles['citation-panel-citation-item-chevron-expanded'],\n )}\n aria-hidden\n />\n )}\n </div>\n\n {expanded && citation.content && (\n <blockquote\n className={classNames(\n 'citation-panel-citation-item-quote',\n styles['citation-panel-citation-item-quote'],\n )}\n >\n <CitationContent content={citation.content} />\n </blockquote>\n )}\n </div>\n </div>\n </article>\n );\n};\n\nconst CitationPanel: React.FC<CitationPanelProps> = ({ citations, highlightedIndex, onClose }) => {\n const [expandedSet, setExpandedSet] = useState<Set<number>>(() => new Set());\n const itemRefs = useRef<(HTMLElement | null)[]>([]);\n\n useEffect(() => {\n if (highlightedIndex === undefined || highlightedIndex < 0) return;\n setExpandedSet((prev) => new Set(prev).add(highlightedIndex));\n const el = itemRefs.current[highlightedIndex];\n if (el) {\n requestAnimationFrame(() => {\n el.scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n });\n }\n }, [highlightedIndex, citations]);\n\n const toggleExpanded = useCallback((index: number) => {\n setExpandedSet((prev) => {\n const next = new Set(prev);\n if (next.has(index)) next.delete(index);\n else next.add(index);\n return next;\n });\n }, []);\n\n return (\n <div\n className={classNames(\n 'citation-panel-citation-panel',\n styles['citation-panel-citation-panel'],\n )}\n >\n <header className={classNames('citation-panel-header', styles['citation-panel-header'])}>\n <h3 className={classNames('citation-panel-title', styles['citation-panel-title'])}>\n 引用来源\n </h3>\n <div\n className={classNames(\n 'citation-panel-header-actions',\n styles['citation-panel-header-actions'],\n )}\n >\n {citations.length > 0 && (\n <span className={classNames('citation-panel-count', styles['citation-panel-count'])}>\n {citations.length}\n </span>\n )}\n {onClose && (\n <Button\n type=\"text\"\n icon={\n <X\n className={classNames(\n 'citation-panel-citation-summary-icon',\n styles['citation-panel-citation-summary-icon'],\n )}\n />\n }\n size=\"small\"\n onClick={onClose}\n className={classNames('citation-panel-close-btn', styles['citation-panel-close-btn'])}\n />\n )}\n </div>\n </header>\n\n {citations.length === 0 ? (\n <div className={classNames('citation-panel-empty', styles['citation-panel-empty'])}>\n <Empty description=\"暂无引用来源\" image={Empty.PRESENTED_IMAGE_SIMPLE} />\n </div>\n ) : (\n <VirtualScrollbar\n wrapperClassName={classNames('citation-panel-empty', styles['citation-panel-empty'])}\n >\n {citations.map((c, i) => (\n <React.Fragment key={c.id ?? `${c.doc_id ?? 'cite'}-${i}`}>\n {i > 0 && (\n <div\n className={classNames('citation-panel-divider', styles['citation-panel-divider'])}\n role=\"separator\"\n />\n )}\n <CitationItem\n citation={c}\n index={i}\n highlighted={highlightedIndex === i}\n expanded={expandedSet.has(i)}\n onToggle={() => toggleExpanded(i)}\n itemRef={(el) => {\n itemRefs.current[i] = el;\n }}\n />\n </React.Fragment>\n ))}\n </VirtualScrollbar>\n )}\n </div>\n );\n};\n\nexport default CitationPanel;\n"],"names":["CitationItem","citation","index","highlighted","expanded","onToggle","itemRef","meta","formatCitationMeta","hasContent","title","resolveCitationTitle","handleKeyDown","useCallback","e","jsxs","classNames","styles","jsx","ChevronDown","CitationContent","CitationPanel","citations","highlightedIndex","onClose","expandedSet","setExpandedSet","useState","itemRefs","useRef","useEffect","prev","el","toggleExpanded","next","Button","X","Empty","VirtualScrollbar","c","i","React"],"mappings":"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"}
@@ -1,12 +1,16 @@
1
1
  import { jsx as a } from "react/jsx-runtime";
2
- import { Pencil as b, Copy as r, RotateCw as g, ThumbsUp as k, ThumbsDown as f } from "../../../../Icons/index.js";
3
- import { Button as h, Tooltip as d } from "antd";
2
+ import { Button as b, Tooltip as r } from "antd";
4
3
  import i from "./style.module.scss.js";
5
4
  import n from "classnames";
6
- import u from "../MessageEditPopover/index.js";
7
- const A = ({
5
+ import g from "../MessageEditPopover/index.js";
6
+ import { Pencil as k } from "../../../../Icons/Pencil.js";
7
+ import { Copy as m } from "../../../../Icons/Copy.js";
8
+ import { RotateCw as f } from "../../../../Icons/RotateCw.js";
9
+ import { ThumbsUp as h } from "../../../../Icons/ThumbsUp.js";
10
+ import { ThumbsDown as u } from "../../../../Icons/ThumbsDown.js";
11
+ const E = ({
8
12
  items: e,
9
- align: m = "left",
13
+ align: d = "left",
10
14
  editPopover: t,
11
15
  actionsVisible: c
12
16
  }) => {
@@ -19,11 +23,11 @@ const A = ({
19
23
  i["message-actions-message-actions"],
20
24
  c && "message-actions-visible",
21
25
  c && i["message-actions-visible"],
22
- m === "right" ? n("message-actions-right", i["message-actions-right"]) : n("message-actions-left", i["message-actions-left"])
26
+ d === "right" ? n("message-actions-right", i["message-actions-right"]) : n("message-actions-left", i["message-actions-left"])
23
27
  ),
24
28
  children: l.map((s) => {
25
29
  const o = /* @__PURE__ */ a(
26
- h,
30
+ b,
27
31
  {
28
32
  type: "text",
29
33
  size: "small",
@@ -39,15 +43,15 @@ const A = ({
39
43
  "aria-pressed": s.active
40
44
  }
41
45
  );
42
- return s.key === "edit" && t ? /* @__PURE__ */ a(u, { ...t, children: /* @__PURE__ */ a("span", { className: n("message-actions-message-action-btn-wrap", i["message-actions-message-action-btn-wrap"]), children: /* @__PURE__ */ a(d, { title: s.label, children: o }) }) }, s.key) : /* @__PURE__ */ a(d, { title: s.label, children: o }, s.key);
46
+ return s.key === "edit" && t ? /* @__PURE__ */ a(g, { ...t, children: /* @__PURE__ */ a("span", { className: n("message-actions-message-action-btn-wrap", i["message-actions-message-action-btn-wrap"]), children: /* @__PURE__ */ a(r, { title: s.label, children: o }) }) }, s.key) : /* @__PURE__ */ a(r, { title: s.label, children: o }, s.key);
43
47
  })
44
48
  }
45
49
  );
46
- }, M = (e) => [
50
+ }, R = (e) => [
47
51
  {
48
52
  key: "edit",
49
53
  label: "重新编辑",
50
- icon: /* @__PURE__ */ a(b, {}),
54
+ icon: /* @__PURE__ */ a(k, {}),
51
55
  onClick: e.onEdit ?? (() => {
52
56
  }),
53
57
  hidden: !e.onEdit,
@@ -56,22 +60,22 @@ const A = ({
56
60
  {
57
61
  key: "copy",
58
62
  label: "复制",
59
- icon: /* @__PURE__ */ a(r, {}),
63
+ icon: /* @__PURE__ */ a(m, {}),
60
64
  onClick: e.onCopy
61
65
  },
62
66
  {
63
67
  key: "resend",
64
68
  label: "重新发送",
65
- icon: /* @__PURE__ */ a(g, {}),
69
+ icon: /* @__PURE__ */ a(f, {}),
66
70
  onClick: e.onResend ?? (() => {
67
71
  }),
68
72
  hidden: !e.onResend
69
73
  }
70
- ], N = (e) => [
74
+ ], T = (e) => [
71
75
  {
72
76
  key: "like",
73
77
  label: "赞",
74
- icon: /* @__PURE__ */ a(k, {}),
78
+ icon: /* @__PURE__ */ a(h, {}),
75
79
  onClick: e.onLike ?? (() => {
76
80
  }),
77
81
  hidden: !e.onLike,
@@ -81,7 +85,7 @@ const A = ({
81
85
  {
82
86
  key: "dislike",
83
87
  label: "踩",
84
- icon: /* @__PURE__ */ a(f, {}),
88
+ icon: /* @__PURE__ */ a(u, {}),
85
89
  onClick: e.onDislike ?? (() => {
86
90
  }),
87
91
  hidden: !e.onDislike,
@@ -91,13 +95,13 @@ const A = ({
91
95
  {
92
96
  key: "copy",
93
97
  label: "复制",
94
- icon: /* @__PURE__ */ a(r, {}),
98
+ icon: /* @__PURE__ */ a(m, {}),
95
99
  onClick: e.onCopy
96
100
  }
97
101
  ];
98
102
  export {
99
- N as createAssistantMessageActions,
100
- M as createUserMessageActions,
101
- A as default
103
+ T as createAssistantMessageActions,
104
+ R as createUserMessageActions,
105
+ E as default
102
106
  };
103
107
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/MessageActions/index.tsx"],"sourcesContent":["import { Copy, Pencil, RotateCw, ThumbsDown, ThumbsUp } from '@/components/Icons';\nimport { Button, Tooltip } from 'antd';\nimport React from 'react';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\nimport MessageEditPopover, { type MessageEditPopoverProps } from '../MessageEditPopover';\n\nexport type MessageActionKey = 'edit' | 'copy' | 'resend' | 'like' | 'dislike';\n\nexport interface MessageActionItem {\n key: MessageActionKey;\n label: string;\n icon: React.ReactNode;\n onClick: () => void;\n hidden?: boolean;\n disabled?: boolean;\n active?: boolean;\n}\n\nexport interface MessageActionsProps {\n items: MessageActionItem[];\n align?: 'left' | 'right';\n editPopover?: Omit<MessageEditPopoverProps, 'children'>;\n actionsVisible?: boolean;\n}\n\nconst MessageActions: React.FC<MessageActionsProps> = ({\n items,\n align = 'left',\n editPopover,\n actionsVisible,\n}) => {\n const visibleItems = items.filter((item) => !item.hidden);\n if (visibleItems.length === 0) return null;\n\n return (\n <div\n className={classNames('message-actions-message-actions', styles['message-actions-message-actions'],\n actionsVisible && 'message-actions-visible',\n actionsVisible && styles['message-actions-visible'],\n align === 'right'\n ? classNames('message-actions-right', styles['message-actions-right'])\n : classNames('message-actions-left', styles['message-actions-left']),\n )}\n >\n {visibleItems.map((item) => {\n const button = (\n <Button\n type=\"text\"\n size=\"small\"\n icon={item.icon}\n disabled={item.disabled}\n onClick={item.onClick}\n className={classNames('message-actions-message-action-btn', styles['message-actions-message-action-btn'],\n item.active\n ? classNames('message-actions-message-action-btn-active', styles['message-actions-message-action-btn-active'])\n : classNames('message-actions-message-action-btn-default', styles['message-actions-message-action-btn-default']),\n )}\n aria-label={item.label}\n aria-pressed={item.active}\n />\n );\n\n if (item.key === 'edit' && editPopover) {\n return (\n <MessageEditPopover key={item.key} {...editPopover}>\n <span className={classNames('message-actions-message-action-btn-wrap', styles['message-actions-message-action-btn-wrap'])}>\n <Tooltip title={item.label}>{button}</Tooltip>\n </span>\n </MessageEditPopover>\n );\n }\n\n return (\n <Tooltip key={item.key} title={item.label}>\n {button}\n </Tooltip>\n );\n })}\n </div>\n );\n};\n\nexport const createUserMessageActions = (options: {\n onEdit?: () => void;\n onCopy: () => void;\n onResend?: () => void;\n editDisabled?: boolean;\n}): MessageActionItem[] => [\n {\n key: 'edit',\n label: '重新编辑',\n icon: <Pencil />,\n onClick: options.onEdit ?? (() => {}),\n hidden: !options.onEdit,\n disabled: options.editDisabled,\n },\n {\n key: 'copy',\n label: '复制',\n icon: <Copy />,\n onClick: options.onCopy,\n },\n {\n key: 'resend',\n label: '重新发送',\n icon: <RotateCw />,\n onClick: options.onResend ?? (() => {}),\n hidden: !options.onResend,\n },\n];\n\nexport const createAssistantMessageActions = (options: {\n onCopy: () => void;\n onLike?: () => void;\n onDislike?: () => void;\n thumbup?: boolean | null;\n feedbackDisabled?: boolean;\n}): MessageActionItem[] => [\n {\n key: 'like',\n label: '赞',\n icon: <ThumbsUp />,\n onClick: options.onLike ?? (() => {}),\n hidden: !options.onLike,\n disabled: options.feedbackDisabled,\n active: options.thumbup === true,\n },\n {\n key: 'dislike',\n label: '踩',\n icon: <ThumbsDown />,\n onClick: options.onDislike ?? (() => {}),\n hidden: !options.onDislike,\n disabled: options.feedbackDisabled,\n active: options.thumbup === false,\n },\n {\n key: 'copy',\n label: '复制',\n icon: <Copy />,\n onClick: options.onCopy,\n },\n];\n\nexport default MessageActions;\n"],"names":["MessageActions","items","align","editPopover","actionsVisible","visibleItems","item","jsx","classNames","styles","button","Button","MessageEditPopover","Tooltip","createUserMessageActions","options","Pencil","Copy","RotateCw","createAssistantMessageActions","ThumbsUp","ThumbsDown"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/MessageActions/index.tsx"],"sourcesContent":["import { Copy, Pencil, RotateCw, ThumbsDown, ThumbsUp } from '@/components/Icons';\nimport { Button, Tooltip } from 'antd';\nimport React from 'react';\nimport styles from './style.module.scss';\nimport classNames from 'classnames';\nimport MessageEditPopover, { type MessageEditPopoverProps } from '../MessageEditPopover';\n\nexport type MessageActionKey = 'edit' | 'copy' | 'resend' | 'like' | 'dislike';\n\nexport interface MessageActionItem {\n key: MessageActionKey;\n label: string;\n icon: React.ReactNode;\n onClick: () => void;\n hidden?: boolean;\n disabled?: boolean;\n active?: boolean;\n}\n\nexport interface MessageActionsProps {\n items: MessageActionItem[];\n align?: 'left' | 'right';\n editPopover?: Omit<MessageEditPopoverProps, 'children'>;\n actionsVisible?: boolean;\n}\n\nconst MessageActions: React.FC<MessageActionsProps> = ({\n items,\n align = 'left',\n editPopover,\n actionsVisible,\n}) => {\n const visibleItems = items.filter((item) => !item.hidden);\n if (visibleItems.length === 0) return null;\n\n return (\n <div\n className={classNames('message-actions-message-actions', styles['message-actions-message-actions'],\n actionsVisible && 'message-actions-visible',\n actionsVisible && styles['message-actions-visible'],\n align === 'right'\n ? classNames('message-actions-right', styles['message-actions-right'])\n : classNames('message-actions-left', styles['message-actions-left']),\n )}\n >\n {visibleItems.map((item) => {\n const button = (\n <Button\n type=\"text\"\n size=\"small\"\n icon={item.icon}\n disabled={item.disabled}\n onClick={item.onClick}\n className={classNames('message-actions-message-action-btn', styles['message-actions-message-action-btn'],\n item.active\n ? classNames('message-actions-message-action-btn-active', styles['message-actions-message-action-btn-active'])\n : classNames('message-actions-message-action-btn-default', styles['message-actions-message-action-btn-default']),\n )}\n aria-label={item.label}\n aria-pressed={item.active}\n />\n );\n\n if (item.key === 'edit' && editPopover) {\n return (\n <MessageEditPopover key={item.key} {...editPopover}>\n <span className={classNames('message-actions-message-action-btn-wrap', styles['message-actions-message-action-btn-wrap'])}>\n <Tooltip title={item.label}>{button}</Tooltip>\n </span>\n </MessageEditPopover>\n );\n }\n\n return (\n <Tooltip key={item.key} title={item.label}>\n {button}\n </Tooltip>\n );\n })}\n </div>\n );\n};\n\nexport const createUserMessageActions = (options: {\n onEdit?: () => void;\n onCopy: () => void;\n onResend?: () => void;\n editDisabled?: boolean;\n}): MessageActionItem[] => [\n {\n key: 'edit',\n label: '重新编辑',\n icon: <Pencil />,\n onClick: options.onEdit ?? (() => {}),\n hidden: !options.onEdit,\n disabled: options.editDisabled,\n },\n {\n key: 'copy',\n label: '复制',\n icon: <Copy />,\n onClick: options.onCopy,\n },\n {\n key: 'resend',\n label: '重新发送',\n icon: <RotateCw />,\n onClick: options.onResend ?? (() => {}),\n hidden: !options.onResend,\n },\n];\n\nexport const createAssistantMessageActions = (options: {\n onCopy: () => void;\n onLike?: () => void;\n onDislike?: () => void;\n thumbup?: boolean | null;\n feedbackDisabled?: boolean;\n}): MessageActionItem[] => [\n {\n key: 'like',\n label: '赞',\n icon: <ThumbsUp />,\n onClick: options.onLike ?? (() => {}),\n hidden: !options.onLike,\n disabled: options.feedbackDisabled,\n active: options.thumbup === true,\n },\n {\n key: 'dislike',\n label: '踩',\n icon: <ThumbsDown />,\n onClick: options.onDislike ?? (() => {}),\n hidden: !options.onDislike,\n disabled: options.feedbackDisabled,\n active: options.thumbup === false,\n },\n {\n key: 'copy',\n label: '复制',\n icon: <Copy />,\n onClick: options.onCopy,\n },\n];\n\nexport default MessageActions;\n"],"names":["MessageActions","items","align","editPopover","actionsVisible","visibleItems","item","jsx","classNames","styles","button","Button","MessageEditPopover","Tooltip","createUserMessageActions","options","Pencil","Copy","RotateCw","createAssistantMessageActions","ThumbsUp","ThumbsDown"],"mappings":"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"}
@@ -1,17 +1,19 @@
1
1
  import { jsx as o, jsxs as g, Fragment as le } from "react/jsx-runtime";
2
- import { User as ge, Bot as de, BookOpen as ue } from "../../../../Icons/index.js";
3
- import pe from "../ChatWidgetBlock/index.js";
4
- import { message as x, Avatar as he, Typography as fe } from "antd";
2
+ import ge from "../ChatWidgetBlock/index.js";
3
+ import { message as x, Avatar as de, Typography as ue } from "antd";
5
4
  import i from "classnames";
6
5
  import { useState as C, useMemo as d, useEffect as H, useCallback as h } from "react";
7
- import ye from "../CitationMarkdownContent/index.js";
8
- import we, { createUserMessageActions as be, createAssistantMessageActions as ke } from "../MessageActions/index.js";
9
- import ve from "../ThinkingSection/index.js";
6
+ import pe from "../CitationMarkdownContent/index.js";
7
+ import he, { createUserMessageActions as fe, createAssistantMessageActions as ye } from "../MessageActions/index.js";
8
+ import we from "../ThinkingSection/index.js";
10
9
  import n from "./style.module.scss.js";
11
- import { parseAssistantContent as Te, normalizeDisplayText as J } from "../../utils/messageContent.js";
10
+ import { parseAssistantContent as be, normalizeDisplayText as J } from "../../utils/messageContent.js";
12
11
  import { useTypewriter as K } from "../../hooks/useTypewriter.js";
13
- import { countUniqueCitedSources as xe } from "../../utils/citationContent.js";
14
- const { Text: Ce } = fe, Ve = ({
12
+ import { countUniqueCitedSources as ke } from "../../utils/citationContent.js";
13
+ import { User as ve } from "../../../../Icons/User.js";
14
+ import { Bot as Te } from "../../../../Icons/Bot.js";
15
+ import { BookOpen as xe } from "../../../../Icons/BookOpen.js";
16
+ const { Text: Ce } = ue, qe = ({
15
17
  message: e,
16
18
  onCitationClick: u,
17
19
  onTypingChange: f,
@@ -22,7 +24,7 @@ const { Text: Ce } = fe, Ve = ({
22
24
  feedbackDisabled: A
23
25
  }) => {
24
26
  const a = e.role === "user", [E, y] = C(!1), [S, w] = C(e.content), [B, L] = C(!1), [W, I] = C(e.thumbup), t = d(
25
- () => Te(e.content, !!e.streaming),
27
+ () => be(e.content, !!e.streaming),
26
28
  [e.content, e.streaming]
27
29
  ), X = !!e.streaming && t.isThinking, { displayed: Y, isTyping: Z } = K(
28
30
  t.thinking,
@@ -38,7 +40,7 @@ const { Text: Ce } = fe, Ve = ({
38
40
  ${t.answer}`,
39
41
  [t.thinking, t.answer]
40
42
  ), v = d(
41
- () => xe(k, m.length),
43
+ () => ke(k, m.length),
42
44
  [k, m.length]
43
45
  ), $ = d(() => m.length === 0 ? "" : v > 0 && v < m.length ? `检索 ${m.length} 个来源 · 正文引用 ${v} 处` : `引用了 ${m.length} 个来源`, [m.length, v]), T = t.isThinking && Z;
44
46
  H(() => {
@@ -128,14 +130,14 @@ ${t.answer}`,
128
130
  }
129
131
  },
130
132
  [A, B, W, e.id, N]
131
- ), ae = a ? be({
133
+ ), ae = a ? fe({
132
134
  onEdit: p ? () => {
133
135
  w(e.content), y(!0);
134
136
  } : void 0,
135
137
  onCopy: () => D(e.content),
136
138
  onResend: z ? () => z(e.content) : void 0,
137
139
  editDisabled: Q
138
- }) : ke({
140
+ }) : ye({
139
141
  onLike: () => {
140
142
  M(!0);
141
143
  },
@@ -187,10 +189,10 @@ ${t.answer}`,
187
189
  ),
188
190
  children: [
189
191
  /* @__PURE__ */ o(
190
- he,
192
+ de,
191
193
  {
192
194
  size: 34,
193
- icon: a ? /* @__PURE__ */ o(ge, {}) : /* @__PURE__ */ o(de, {}),
195
+ icon: a ? /* @__PURE__ */ o(ve, {}) : /* @__PURE__ */ o(Te, {}),
194
196
  className: i(
195
197
  "message-item-message-avatar",
196
198
  n["message-item-message-avatar"],
@@ -261,7 +263,7 @@ ${t.answer}`,
261
263
  }
262
264
  ) : /* @__PURE__ */ g(le, { children: [
263
265
  (t.thinking || t.isThinking) && /* @__PURE__ */ o(
264
- ve,
266
+ we,
265
267
  {
266
268
  thinking: _,
267
269
  isThinking: t.isThinking,
@@ -273,7 +275,7 @@ ${t.answer}`,
273
275
  }
274
276
  ),
275
277
  P ? /* @__PURE__ */ o(
276
- pe,
278
+ ge,
277
279
  {
278
280
  widgets: j,
279
281
  compact: !0,
@@ -296,7 +298,7 @@ ${t.answer}`,
296
298
  ),
297
299
  children: [
298
300
  /* @__PURE__ */ o(
299
- ye,
301
+ pe,
300
302
  {
301
303
  content: V,
302
304
  citations: m,
@@ -321,7 +323,7 @@ ${t.answer}`,
321
323
  }
322
324
  ),
323
325
  (a || ne) && /* @__PURE__ */ o(
324
- we,
326
+ he,
325
327
  {
326
328
  items: ae,
327
329
  align: a ? "right" : "left",
@@ -340,7 +342,7 @@ ${t.answer}`,
340
342
  ),
341
343
  children: [
342
344
  /* @__PURE__ */ o(
343
- ue,
345
+ xe,
344
346
  {
345
347
  className: i(
346
348
  "text-primary",
@@ -371,6 +373,6 @@ ${t.answer}`,
371
373
  );
372
374
  };
373
375
  export {
374
- Ve as default
376
+ qe as default
375
377
  };
376
378
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/MessageItem/index.tsx"],"sourcesContent":["import { BookOpen, Bot, User } from '@/components/Icons';\nimport type { ChatMessage, ChatWidget, Citation } from '@/components/AgentHub/types';\nimport ChatWidgetBlock from '@/components/AgentHub/Chat/Detail/ChatWidgetBlock';\nimport { message as antdMessage, Avatar, Typography } from 'antd';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTypewriter } from '../../hooks';\nimport { countUniqueCitedSources, normalizeDisplayText, parseAssistantContent } from '../../utils';\nimport CitationMarkdownContent from '../CitationMarkdownContent';\nimport MessageActions, {\n createAssistantMessageActions,\n createUserMessageActions,\n} from '../MessageActions';\nimport ThinkingSection from '../ThinkingSection';\nimport styles from './style.module.scss';\n\nconst { Text } = Typography;\n\nexport interface MessageItemProps {\n message: ChatMessage;\n onCitationClick?: (citations: Citation[], index?: number) => void;\n onTypingChange?: (typing: boolean) => void;\n onEditMessage?: (messageId: string, content: string) => void;\n onResendMessage?: (content: string) => void;\n onMessageFeedback?: (messageId: string, thumbup: boolean) => void | Promise<void>;\n editDisabled?: boolean;\n feedbackDisabled?: boolean;\n}\n\nconst MessageItem: React.FC<MessageItemProps> = ({\n message,\n onCitationClick,\n onTypingChange,\n onEditMessage,\n onResendMessage,\n onMessageFeedback,\n editDisabled,\n feedbackDisabled,\n}) => {\n const isUser = message.role === 'user';\n const [editOpen, setEditOpen] = useState(false);\n const [editValue, setEditValue] = useState(message.content);\n const [feedbackSubmitting, setFeedbackSubmitting] = useState(false);\n const [localThumbup, setLocalThumbup] = useState<boolean | null | undefined>(message.thumbup);\n const parsedContent = useMemo(\n () => parseAssistantContent(message.content, !!message.streaming),\n [message.content, message.streaming],\n );\n\n const shouldAnimateThinking = !!message.streaming && parsedContent.isThinking;\n const { displayed: displayedThinking, isTyping: isThinkingTyping } = useTypewriter(\n parsedContent.thinking,\n shouldAnimateThinking,\n );\n const thinkingToShow = parsedContent.isThinking ? displayedThinking : parsedContent.thinking;\n\n const { displayed: displayedContent, isTyping } = useTypewriter(\n parsedContent.answer,\n !!message.streaming,\n );\n\n const citations = useMemo(() => message.citations ?? [], [message.citations]);\n const messageWidgets = useMemo(\n () => (Array.isArray(message.widgets) ? (message.widgets as ChatWidget[]) : []),\n [message.widgets],\n );\n const citationSourceContent = useMemo(\n () => `${parsedContent.thinking}\\n${parsedContent.answer}`,\n [parsedContent.thinking, parsedContent.answer],\n );\n const uniqueCitedCount = useMemo(\n () => countUniqueCitedSources(citationSourceContent, citations.length),\n [citationSourceContent, citations.length],\n );\n\n const citationSummaryLabel = useMemo(() => {\n if (citations.length === 0) return '';\n if (uniqueCitedCount > 0 && uniqueCitedCount < citations.length) {\n return `检索 ${citations.length} 个来源 · 正文引用 ${uniqueCitedCount} 处`;\n }\n return `引用了 ${citations.length} 个来源`;\n }, [citations.length, uniqueCitedCount]);\n\n const effectiveThinkingTyping = parsedContent.isThinking && isThinkingTyping;\n\n useEffect(() => {\n if (isUser) return;\n onTypingChange?.(isTyping || effectiveThinkingTyping);\n }, [isUser, isTyping, effectiveThinkingTyping, onTypingChange]);\n\n useEffect(() => {\n setLocalThumbup(message.thumbup);\n }, [message.id, message.thumbup]);\n\n const hasAnswerContent = normalizeDisplayText(displayedContent).trim().length > 0;\n const showWidgets = !isUser && messageWidgets.length > 0;\n const showAnswerCursor = (message.streaming || isTyping) && hasAnswerContent;\n const isContentTyping = isTyping || effectiveThinkingTyping;\n const deferMermaid = !!message.streaming || isContentTyping;\n\n const handleSummaryClick = useCallback(() => {\n if (!citations.length || !onCitationClick) return;\n onCitationClick(citations);\n }, [citations, onCitationClick]);\n\n const copyText = useCallback(async (text: string) => {\n if (!text.trim()) return;\n\n const verifyClipboard = async () => {\n if (!navigator.clipboard?.readText) return null;\n try {\n return await navigator.clipboard.readText();\n } catch {\n return null;\n }\n };\n\n const copyWithClipboardApi = async () => {\n if (!navigator.clipboard) return false;\n\n if (typeof ClipboardItem !== 'undefined' && typeof navigator.clipboard.write === 'function') {\n try {\n const item = new ClipboardItem({\n 'text/plain': Promise.resolve(new Blob([text], { type: 'text/plain' })),\n });\n await navigator.clipboard.write([item]);\n const got = await verifyClipboard();\n // got === null:无读权限,信任 write;空串则视为未写入\n if (got === null || got === text) return true;\n if (got === '') return false;\n } catch {\n /* fall through to writeText */\n }\n }\n\n if (typeof navigator.clipboard.writeText !== 'function') return false;\n await navigator.clipboard.writeText(text);\n const got = await verifyClipboard();\n if (got === '') return false;\n return got === null || got === text;\n };\n\n const copyWithSelection = () => {\n const el = document.createElement('div');\n el.textContent = text;\n el.setAttribute('contenteditable', 'true');\n el.style.cssText =\n 'position:fixed;top:0;left:0;width:2px;height:2px;padding:0;margin:0;border:none;outline:none;opacity:0.01;overflow:hidden;z-index:2147483647;white-space:pre;user-select:text;-webkit-user-select:text;';\n document.body.appendChild(el);\n\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(el);\n selection?.removeAllRanges();\n selection?.addRange(range);\n el.focus();\n\n let ok = false;\n try {\n ok = document.execCommand('copy');\n } finally {\n selection?.removeAllRanges();\n document.body.removeChild(el);\n }\n return ok;\n };\n\n try {\n if (await copyWithClipboardApi()) {\n antdMessage.success('已复制');\n return;\n }\n } catch {\n /* 继续 selection 回退 */\n }\n\n try {\n if (copyWithSelection()) {\n const got = await verifyClipboard();\n if (got === null || got === text) {\n antdMessage.success('已复制');\n return;\n }\n }\n } catch {\n /* fall through */\n }\n\n antdMessage.error('复制失败,请手动选择文本复制');\n }, []);\n\n const assistantCopyText = normalizeDisplayText(parsedContent.answer);\n const showAssistantActions =\n !isUser && !message.streaming && !isContentTyping && assistantCopyText.trim().length > 0;\n\n const handleEditCancel = useCallback(() => {\n setEditOpen(false);\n setEditValue(message.content);\n }, [message.content]);\n\n const handleEditConfirm = useCallback(() => {\n const trimmed = editValue.trim();\n if (!trimmed || trimmed === message.content.trim() || !onEditMessage) return;\n onEditMessage(message.id, trimmed);\n setEditOpen(false);\n }, [editValue, message.content, message.id, onEditMessage]);\n\n const handleFeedback = useCallback(\n async (thumbup: boolean) => {\n if (feedbackSubmitting || feedbackDisabled) return;\n if (localThumbup === thumbup) return;\n\n if (onMessageFeedback) {\n setFeedbackSubmitting(true);\n try {\n await onMessageFeedback(message.id, thumbup);\n setLocalThumbup(thumbup);\n } catch {\n // 错误提示由上层处理\n } finally {\n setFeedbackSubmitting(false);\n }\n return;\n }\n\n setLocalThumbup(thumbup);\n antdMessage.success('感谢反馈');\n },\n [feedbackDisabled, feedbackSubmitting, localThumbup, message.id, onMessageFeedback],\n );\n\n const actionItems = isUser\n ? createUserMessageActions({\n onEdit: onEditMessage\n ? () => {\n setEditValue(message.content);\n setEditOpen(true);\n }\n : undefined,\n onCopy: () => copyText(message.content),\n onResend: onResendMessage ? () => onResendMessage(message.content) : undefined,\n editDisabled,\n })\n : createAssistantMessageActions({\n onLike: () => {\n void handleFeedback(true);\n },\n onDislike: () => {\n void handleFeedback(false);\n },\n onCopy: () => copyText(assistantCopyText),\n thumbup: localThumbup,\n feedbackDisabled: feedbackDisabled || feedbackSubmitting,\n });\n\n const editPopoverProps = onEditMessage\n ? {\n open: editOpen,\n value: editValue,\n originalContent: message.content,\n onOpenChange: (open: boolean) => {\n setEditOpen(open);\n if (!open) setEditValue(message.content);\n },\n onChange: setEditValue,\n onConfirm: handleEditConfirm,\n onCancel: handleEditCancel,\n }\n : undefined;\n\n const userMessageBubble = (\n <div\n className={classNames(\n 'message-item-message-user-bubble',\n styles['message-item-message-user-bubble'],\n 'bg-primary',\n )}\n >\n <span\n className={classNames(\n 'message-item-message-user-bubble-text',\n styles['message-item-message-user-bubble-text'],\n )}\n >\n {message.content}\n </span>\n </div>\n );\n\n return (\n <div\n className={classNames(\n 'group',\n 'message-row',\n styles['message-item-message-row'],\n isUser && 'message-item-message-row-reverse',\n isUser && styles['message-item-message-row-reverse'],\n )}\n >\n <Avatar\n size={34}\n icon={isUser ? <User /> : <Bot />}\n className={classNames(\n 'message-item-message-avatar',\n styles['message-item-message-avatar'],\n !isUser && 'message-item-message-avatar-assistant',\n !isUser && styles['message-item-message-avatar-assistant'],\n )}\n style={isUser ? {} : { color: 'var(--primary-color)' }}\n />\n\n <div\n className={classNames(\n 'message-item-message-content',\n styles['message-item-message-content'],\n isUser\n ? classNames(\n 'message-item-message-content-user',\n styles['message-item-message-content-user'],\n )\n : classNames(\n 'message-item-message-content-assistant',\n styles['message-item-message-content-assistant'],\n ),\n )}\n >\n <div\n className={\n isUser\n ? undefined\n : classNames(\n 'message-item-message-assistant-bubble',\n styles['message-item-message-assistant-bubble'],\n )\n }\n >\n {isUser ? (\n userMessageBubble\n ) : message.streaming &&\n !parsedContent.thinking &&\n !parsedContent.isThinking &&\n !hasAnswerContent &&\n !showWidgets ? (\n <div\n className={classNames(\n 'message-item-message-loading-dots',\n styles['message-item-message-loading-dots'],\n )}\n >\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n </div>\n ) : (\n <>\n {(parsedContent.thinking || parsedContent.isThinking) && (\n <ThinkingSection\n thinking={thinkingToShow}\n isThinking={parsedContent.isThinking}\n isTyping={effectiveThinkingTyping}\n citations={citations}\n citationSourceContent={citationSourceContent}\n onCitationClick={onCitationClick}\n deferMermaid={deferMermaid}\n />\n )}\n {showWidgets ? (\n <ChatWidgetBlock\n widgets={messageWidgets}\n compact\n leading\n className={classNames(\n (parsedContent.thinking || parsedContent.isThinking) &&\n styles['message-item-message-widgets-after-thinking'],\n )}\n />\n ) : null}\n {hasAnswerContent && (\n <div\n className={classNames(\n 'markdown-preview',\n 'message-answer-markdown',\n styles['message-item-message-answer-markdown'],\n (parsedContent.thinking || parsedContent.isThinking) &&\n 'message-answer-markdown-spaced',\n (parsedContent.thinking || parsedContent.isThinking) &&\n styles['message-item-message-answer-markdown-spaced'],\n showWidgets && styles['message-item-message-answer-markdown-after-widgets'],\n )}\n >\n <CitationMarkdownContent\n content={displayedContent}\n citations={citations}\n citationSourceContent={citationSourceContent}\n onCitationClick={onCitationClick}\n deferMermaid={deferMermaid}\n />\n {showAnswerCursor && (\n <span\n className={classNames(\n 'message-item-message-typing-cursor',\n styles['message-item-message-typing-cursor'],\n )}\n />\n )}\n </div>\n )}\n </>\n )}\n </div>\n\n {(isUser || showAssistantActions) && (\n <MessageActions\n items={actionItems}\n align={isUser ? 'right' : 'left'}\n editPopover={editPopoverProps}\n actionsVisible={editOpen}\n />\n )}\n\n {!isUser && citations.length > 0 && !isContentTyping && (\n <button\n type=\"button\"\n onClick={handleSummaryClick}\n className={classNames(\n 'message-item-citation-summary-button',\n styles['message-item-citation-summary-button'],\n )}\n >\n <BookOpen\n className={classNames(\n 'text-primary',\n 'citation-summary-icon',\n styles['message-item-citation-summary-icon'],\n )}\n />\n <Text\n className={classNames(\n 'text-primary',\n 'citation-summary-text',\n styles['message-item-citation-summary-text'],\n )}\n >\n {citationSummaryLabel}\n </Text>\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default MessageItem;\n"],"names":["Text","Typography","MessageItem","message","onCitationClick","onTypingChange","onEditMessage","onResendMessage","onMessageFeedback","editDisabled","feedbackDisabled","isUser","editOpen","setEditOpen","useState","editValue","setEditValue","feedbackSubmitting","setFeedbackSubmitting","localThumbup","setLocalThumbup","parsedContent","useMemo","parseAssistantContent","shouldAnimateThinking","displayedThinking","isThinkingTyping","useTypewriter","thinkingToShow","displayedContent","isTyping","citations","messageWidgets","citationSourceContent","uniqueCitedCount","countUniqueCitedSources","citationSummaryLabel","effectiveThinkingTyping","useEffect","hasAnswerContent","normalizeDisplayText","showWidgets","showAnswerCursor","isContentTyping","deferMermaid","handleSummaryClick","useCallback","copyText","text","verifyClipboard","_a","copyWithClipboardApi","item","got","copyWithSelection","el","selection","range","ok","antdMessage","assistantCopyText","showAssistantActions","handleEditCancel","handleEditConfirm","trimmed","handleFeedback","thumbup","actionItems","createUserMessageActions","createAssistantMessageActions","editPopoverProps","open","userMessageBubble","jsx","classNames","styles","jsxs","Avatar","User","Bot","Fragment","ThinkingSection","ChatWidgetBlock","CitationMarkdownContent","MessageActions","BookOpen"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../../src/components/AgentHub/Chat/Detail/MessageItem/index.tsx"],"sourcesContent":["import { BookOpen, Bot, User } from '@/components/Icons';\nimport type { ChatMessage, ChatWidget, Citation } from '@/components/AgentHub/types';\nimport ChatWidgetBlock from '@/components/AgentHub/Chat/Detail/ChatWidgetBlock';\nimport { message as antdMessage, Avatar, Typography } from 'antd';\nimport classNames from 'classnames';\nimport React, { useCallback, useEffect, useMemo, useState } from 'react';\nimport { useTypewriter } from '../../hooks';\nimport { countUniqueCitedSources, normalizeDisplayText, parseAssistantContent } from '../../utils';\nimport CitationMarkdownContent from '../CitationMarkdownContent';\nimport MessageActions, {\n createAssistantMessageActions,\n createUserMessageActions,\n} from '../MessageActions';\nimport ThinkingSection from '../ThinkingSection';\nimport styles from './style.module.scss';\n\nconst { Text } = Typography;\n\nexport interface MessageItemProps {\n message: ChatMessage;\n onCitationClick?: (citations: Citation[], index?: number) => void;\n onTypingChange?: (typing: boolean) => void;\n onEditMessage?: (messageId: string, content: string) => void;\n onResendMessage?: (content: string) => void;\n onMessageFeedback?: (messageId: string, thumbup: boolean) => void | Promise<void>;\n editDisabled?: boolean;\n feedbackDisabled?: boolean;\n}\n\nconst MessageItem: React.FC<MessageItemProps> = ({\n message,\n onCitationClick,\n onTypingChange,\n onEditMessage,\n onResendMessage,\n onMessageFeedback,\n editDisabled,\n feedbackDisabled,\n}) => {\n const isUser = message.role === 'user';\n const [editOpen, setEditOpen] = useState(false);\n const [editValue, setEditValue] = useState(message.content);\n const [feedbackSubmitting, setFeedbackSubmitting] = useState(false);\n const [localThumbup, setLocalThumbup] = useState<boolean | null | undefined>(message.thumbup);\n const parsedContent = useMemo(\n () => parseAssistantContent(message.content, !!message.streaming),\n [message.content, message.streaming],\n );\n\n const shouldAnimateThinking = !!message.streaming && parsedContent.isThinking;\n const { displayed: displayedThinking, isTyping: isThinkingTyping } = useTypewriter(\n parsedContent.thinking,\n shouldAnimateThinking,\n );\n const thinkingToShow = parsedContent.isThinking ? displayedThinking : parsedContent.thinking;\n\n const { displayed: displayedContent, isTyping } = useTypewriter(\n parsedContent.answer,\n !!message.streaming,\n );\n\n const citations = useMemo(() => message.citations ?? [], [message.citations]);\n const messageWidgets = useMemo(\n () => (Array.isArray(message.widgets) ? (message.widgets as ChatWidget[]) : []),\n [message.widgets],\n );\n const citationSourceContent = useMemo(\n () => `${parsedContent.thinking}\\n${parsedContent.answer}`,\n [parsedContent.thinking, parsedContent.answer],\n );\n const uniqueCitedCount = useMemo(\n () => countUniqueCitedSources(citationSourceContent, citations.length),\n [citationSourceContent, citations.length],\n );\n\n const citationSummaryLabel = useMemo(() => {\n if (citations.length === 0) return '';\n if (uniqueCitedCount > 0 && uniqueCitedCount < citations.length) {\n return `检索 ${citations.length} 个来源 · 正文引用 ${uniqueCitedCount} 处`;\n }\n return `引用了 ${citations.length} 个来源`;\n }, [citations.length, uniqueCitedCount]);\n\n const effectiveThinkingTyping = parsedContent.isThinking && isThinkingTyping;\n\n useEffect(() => {\n if (isUser) return;\n onTypingChange?.(isTyping || effectiveThinkingTyping);\n }, [isUser, isTyping, effectiveThinkingTyping, onTypingChange]);\n\n useEffect(() => {\n setLocalThumbup(message.thumbup);\n }, [message.id, message.thumbup]);\n\n const hasAnswerContent = normalizeDisplayText(displayedContent).trim().length > 0;\n const showWidgets = !isUser && messageWidgets.length > 0;\n const showAnswerCursor = (message.streaming || isTyping) && hasAnswerContent;\n const isContentTyping = isTyping || effectiveThinkingTyping;\n const deferMermaid = !!message.streaming || isContentTyping;\n\n const handleSummaryClick = useCallback(() => {\n if (!citations.length || !onCitationClick) return;\n onCitationClick(citations);\n }, [citations, onCitationClick]);\n\n const copyText = useCallback(async (text: string) => {\n if (!text.trim()) return;\n\n const verifyClipboard = async () => {\n if (!navigator.clipboard?.readText) return null;\n try {\n return await navigator.clipboard.readText();\n } catch {\n return null;\n }\n };\n\n const copyWithClipboardApi = async () => {\n if (!navigator.clipboard) return false;\n\n if (typeof ClipboardItem !== 'undefined' && typeof navigator.clipboard.write === 'function') {\n try {\n const item = new ClipboardItem({\n 'text/plain': Promise.resolve(new Blob([text], { type: 'text/plain' })),\n });\n await navigator.clipboard.write([item]);\n const got = await verifyClipboard();\n // got === null:无读权限,信任 write;空串则视为未写入\n if (got === null || got === text) return true;\n if (got === '') return false;\n } catch {\n /* fall through to writeText */\n }\n }\n\n if (typeof navigator.clipboard.writeText !== 'function') return false;\n await navigator.clipboard.writeText(text);\n const got = await verifyClipboard();\n if (got === '') return false;\n return got === null || got === text;\n };\n\n const copyWithSelection = () => {\n const el = document.createElement('div');\n el.textContent = text;\n el.setAttribute('contenteditable', 'true');\n el.style.cssText =\n 'position:fixed;top:0;left:0;width:2px;height:2px;padding:0;margin:0;border:none;outline:none;opacity:0.01;overflow:hidden;z-index:2147483647;white-space:pre;user-select:text;-webkit-user-select:text;';\n document.body.appendChild(el);\n\n const selection = window.getSelection();\n const range = document.createRange();\n range.selectNodeContents(el);\n selection?.removeAllRanges();\n selection?.addRange(range);\n el.focus();\n\n let ok = false;\n try {\n ok = document.execCommand('copy');\n } finally {\n selection?.removeAllRanges();\n document.body.removeChild(el);\n }\n return ok;\n };\n\n try {\n if (await copyWithClipboardApi()) {\n antdMessage.success('已复制');\n return;\n }\n } catch {\n /* 继续 selection 回退 */\n }\n\n try {\n if (copyWithSelection()) {\n const got = await verifyClipboard();\n if (got === null || got === text) {\n antdMessage.success('已复制');\n return;\n }\n }\n } catch {\n /* fall through */\n }\n\n antdMessage.error('复制失败,请手动选择文本复制');\n }, []);\n\n const assistantCopyText = normalizeDisplayText(parsedContent.answer);\n const showAssistantActions =\n !isUser && !message.streaming && !isContentTyping && assistantCopyText.trim().length > 0;\n\n const handleEditCancel = useCallback(() => {\n setEditOpen(false);\n setEditValue(message.content);\n }, [message.content]);\n\n const handleEditConfirm = useCallback(() => {\n const trimmed = editValue.trim();\n if (!trimmed || trimmed === message.content.trim() || !onEditMessage) return;\n onEditMessage(message.id, trimmed);\n setEditOpen(false);\n }, [editValue, message.content, message.id, onEditMessage]);\n\n const handleFeedback = useCallback(\n async (thumbup: boolean) => {\n if (feedbackSubmitting || feedbackDisabled) return;\n if (localThumbup === thumbup) return;\n\n if (onMessageFeedback) {\n setFeedbackSubmitting(true);\n try {\n await onMessageFeedback(message.id, thumbup);\n setLocalThumbup(thumbup);\n } catch {\n // 错误提示由上层处理\n } finally {\n setFeedbackSubmitting(false);\n }\n return;\n }\n\n setLocalThumbup(thumbup);\n antdMessage.success('感谢反馈');\n },\n [feedbackDisabled, feedbackSubmitting, localThumbup, message.id, onMessageFeedback],\n );\n\n const actionItems = isUser\n ? createUserMessageActions({\n onEdit: onEditMessage\n ? () => {\n setEditValue(message.content);\n setEditOpen(true);\n }\n : undefined,\n onCopy: () => copyText(message.content),\n onResend: onResendMessage ? () => onResendMessage(message.content) : undefined,\n editDisabled,\n })\n : createAssistantMessageActions({\n onLike: () => {\n void handleFeedback(true);\n },\n onDislike: () => {\n void handleFeedback(false);\n },\n onCopy: () => copyText(assistantCopyText),\n thumbup: localThumbup,\n feedbackDisabled: feedbackDisabled || feedbackSubmitting,\n });\n\n const editPopoverProps = onEditMessage\n ? {\n open: editOpen,\n value: editValue,\n originalContent: message.content,\n onOpenChange: (open: boolean) => {\n setEditOpen(open);\n if (!open) setEditValue(message.content);\n },\n onChange: setEditValue,\n onConfirm: handleEditConfirm,\n onCancel: handleEditCancel,\n }\n : undefined;\n\n const userMessageBubble = (\n <div\n className={classNames(\n 'message-item-message-user-bubble',\n styles['message-item-message-user-bubble'],\n 'bg-primary',\n )}\n >\n <span\n className={classNames(\n 'message-item-message-user-bubble-text',\n styles['message-item-message-user-bubble-text'],\n )}\n >\n {message.content}\n </span>\n </div>\n );\n\n return (\n <div\n className={classNames(\n 'group',\n 'message-row',\n styles['message-item-message-row'],\n isUser && 'message-item-message-row-reverse',\n isUser && styles['message-item-message-row-reverse'],\n )}\n >\n <Avatar\n size={34}\n icon={isUser ? <User /> : <Bot />}\n className={classNames(\n 'message-item-message-avatar',\n styles['message-item-message-avatar'],\n !isUser && 'message-item-message-avatar-assistant',\n !isUser && styles['message-item-message-avatar-assistant'],\n )}\n style={isUser ? {} : { color: 'var(--primary-color)' }}\n />\n\n <div\n className={classNames(\n 'message-item-message-content',\n styles['message-item-message-content'],\n isUser\n ? classNames(\n 'message-item-message-content-user',\n styles['message-item-message-content-user'],\n )\n : classNames(\n 'message-item-message-content-assistant',\n styles['message-item-message-content-assistant'],\n ),\n )}\n >\n <div\n className={\n isUser\n ? undefined\n : classNames(\n 'message-item-message-assistant-bubble',\n styles['message-item-message-assistant-bubble'],\n )\n }\n >\n {isUser ? (\n userMessageBubble\n ) : message.streaming &&\n !parsedContent.thinking &&\n !parsedContent.isThinking &&\n !hasAnswerContent &&\n !showWidgets ? (\n <div\n className={classNames(\n 'message-item-message-loading-dots',\n styles['message-item-message-loading-dots'],\n )}\n >\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n <span\n className={classNames(\n 'message-item-message-loading-dot',\n styles['message-item-message-loading-dot'],\n )}\n />\n </div>\n ) : (\n <>\n {(parsedContent.thinking || parsedContent.isThinking) && (\n <ThinkingSection\n thinking={thinkingToShow}\n isThinking={parsedContent.isThinking}\n isTyping={effectiveThinkingTyping}\n citations={citations}\n citationSourceContent={citationSourceContent}\n onCitationClick={onCitationClick}\n deferMermaid={deferMermaid}\n />\n )}\n {showWidgets ? (\n <ChatWidgetBlock\n widgets={messageWidgets}\n compact\n leading\n className={classNames(\n (parsedContent.thinking || parsedContent.isThinking) &&\n styles['message-item-message-widgets-after-thinking'],\n )}\n />\n ) : null}\n {hasAnswerContent && (\n <div\n className={classNames(\n 'markdown-preview',\n 'message-answer-markdown',\n styles['message-item-message-answer-markdown'],\n (parsedContent.thinking || parsedContent.isThinking) &&\n 'message-answer-markdown-spaced',\n (parsedContent.thinking || parsedContent.isThinking) &&\n styles['message-item-message-answer-markdown-spaced'],\n showWidgets && styles['message-item-message-answer-markdown-after-widgets'],\n )}\n >\n <CitationMarkdownContent\n content={displayedContent}\n citations={citations}\n citationSourceContent={citationSourceContent}\n onCitationClick={onCitationClick}\n deferMermaid={deferMermaid}\n />\n {showAnswerCursor && (\n <span\n className={classNames(\n 'message-item-message-typing-cursor',\n styles['message-item-message-typing-cursor'],\n )}\n />\n )}\n </div>\n )}\n </>\n )}\n </div>\n\n {(isUser || showAssistantActions) && (\n <MessageActions\n items={actionItems}\n align={isUser ? 'right' : 'left'}\n editPopover={editPopoverProps}\n actionsVisible={editOpen}\n />\n )}\n\n {!isUser && citations.length > 0 && !isContentTyping && (\n <button\n type=\"button\"\n onClick={handleSummaryClick}\n className={classNames(\n 'message-item-citation-summary-button',\n styles['message-item-citation-summary-button'],\n )}\n >\n <BookOpen\n className={classNames(\n 'text-primary',\n 'citation-summary-icon',\n styles['message-item-citation-summary-icon'],\n )}\n />\n <Text\n className={classNames(\n 'text-primary',\n 'citation-summary-text',\n styles['message-item-citation-summary-text'],\n )}\n >\n {citationSummaryLabel}\n </Text>\n </button>\n )}\n </div>\n </div>\n );\n};\n\nexport default MessageItem;\n"],"names":["Text","Typography","MessageItem","message","onCitationClick","onTypingChange","onEditMessage","onResendMessage","onMessageFeedback","editDisabled","feedbackDisabled","isUser","editOpen","setEditOpen","useState","editValue","setEditValue","feedbackSubmitting","setFeedbackSubmitting","localThumbup","setLocalThumbup","parsedContent","useMemo","parseAssistantContent","shouldAnimateThinking","displayedThinking","isThinkingTyping","useTypewriter","thinkingToShow","displayedContent","isTyping","citations","messageWidgets","citationSourceContent","uniqueCitedCount","countUniqueCitedSources","citationSummaryLabel","effectiveThinkingTyping","useEffect","hasAnswerContent","normalizeDisplayText","showWidgets","showAnswerCursor","isContentTyping","deferMermaid","handleSummaryClick","useCallback","copyText","text","verifyClipboard","_a","copyWithClipboardApi","item","got","copyWithSelection","el","selection","range","ok","antdMessage","assistantCopyText","showAssistantActions","handleEditCancel","handleEditConfirm","trimmed","handleFeedback","thumbup","actionItems","createUserMessageActions","createAssistantMessageActions","editPopoverProps","open","userMessageBubble","jsx","classNames","styles","jsxs","Avatar","User","Bot","Fragment","ThinkingSection","ChatWidgetBlock","CitationMarkdownContent","MessageActions","BookOpen"],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  import { jsxs as s, jsx as r } from "react/jsx-runtime";
2
- import { Bot as f } from "../../../../Icons/index.js";
3
- import C from "@kne/button-group";
4
- import { Tooltip as k, Typography as x } from "antd";
2
+ import f from "@kne/button-group";
3
+ import { Tooltip as C, Typography as k } from "antd";
5
4
  import a from "./style.module.scss.js";
6
5
  import t from "classnames";
6
+ import { Bot as x } from "../../../../Icons/Bot.js";
7
7
  import p, { SEMANTIC_COLORS as g } from "../../../../Tag/SemanticTag.js";
8
- const { Text: o, Paragraph: T } = x, L = ({ chat: e, datasets: u, onStartChat: l, onEdit: v, onDelete: N }) => {
8
+ const { Text: o, Paragraph: T } = k, L = ({ chat: e, datasets: u, onStartChat: l, onEdit: v, onDelete: N }) => {
9
9
  var n, h;
10
10
  const d = (n = e.dataset_ids) == null ? void 0 : n.map((c) => {
11
11
  var m;
@@ -13,9 +13,9 @@ const { Text: o, Paragraph: T } = x, L = ({ chat: e, datasets: u, onStartChat: l
13
13
  }).filter(Boolean), i = e.status === "1";
14
14
  return /* @__PURE__ */ s("div", { className: t("group", "chat-card", a["chat-card-chat-card"]), onClick: () => l(e), children: [
15
15
  /* @__PURE__ */ s("div", { className: t("chat-card-header", a["chat-card-header"]), children: [
16
- /* @__PURE__ */ r("div", { className: t("chat-card-avatar", a["chat-card-avatar"], "bg-primary"), children: /* @__PURE__ */ r(f, { className: t("chat-card-avatar-icon", a["chat-card-avatar-icon"]) }) }),
16
+ /* @__PURE__ */ r("div", { className: t("chat-card-avatar", a["chat-card-avatar"], "bg-primary"), children: /* @__PURE__ */ r(x, { className: t("chat-card-avatar-icon", a["chat-card-avatar-icon"]) }) }),
17
17
  /* @__PURE__ */ s("div", { className: t("chat-card-title-wrap", a["chat-card-title-wrap"]), children: [
18
- /* @__PURE__ */ r(k, { title: e.name, children: /* @__PURE__ */ r(o, { strong: !0, className: t("chat-card-title", a["chat-card-title"]), style: { lineHeight: "1.4" }, children: e.name }) }),
18
+ /* @__PURE__ */ r(C, { title: e.name, children: /* @__PURE__ */ r(o, { strong: !0, className: t("chat-card-title", a["chat-card-title"]), style: { lineHeight: "1.4" }, children: e.name }) }),
19
19
  /* @__PURE__ */ s("div", { className: t("chat-card-status-row", a["chat-card-status-row"]), children: [
20
20
  /* @__PURE__ */ r(
21
21
  "span",
@@ -48,7 +48,7 @@ const { Text: o, Paragraph: T } = x, L = ({ chat: e, datasets: u, onStartChat: l
48
48
  ] }) : /* @__PURE__ */ r(o, { type: "secondary", className: t("chat-card-empty-kb", a["chat-card-empty-kb"]), children: "未关联知识库" }) })
49
49
  ] }),
50
50
  /* @__PURE__ */ r("div", { className: t("chat-card-footer", a["chat-card-footer"]), onClick: (c) => c.stopPropagation(), children: /* @__PURE__ */ r(
51
- C,
51
+ f,
52
52
  {
53
53
  moreType: "link",
54
54
  showLength: 1,