@gientech/modual 2.0.4 → 2.0.5

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 (419) hide show
  1. package/.editorconfig +38 -0
  2. package/.prettierignore +16 -0
  3. package/.prettierrc +17 -0
  4. package/README.md +643 -643
  5. package/USAGE.md +247 -0
  6. package/bash.exe.stackdump +40 -0
  7. package/components.json +21 -0
  8. package/dist/README.md +643 -0
  9. package/{assets/GientechStreamReader-CzB5AuYo.js → dist/assets/GientechStreamReader-DUCq-O5X.js} +1 -1
  10. package/{assets → dist/assets}/database.svg +11 -11
  11. package/{assets → dist/assets}/database_add.svg +53 -53
  12. package/{assets → dist/assets}/database_connect.svg +66 -66
  13. package/{assets → dist/assets}/database_upload.svg +29 -29
  14. package/{assets → dist/assets}/databse.svg +6 -6
  15. package/{assets → dist/assets}/defaultWeLogo.svg +14 -14
  16. package/{assets → dist/assets}/graph.svg +4 -4
  17. package/{assets/index-CN2AYX8Q.js → dist/assets/index-B2yNvzjy.js} +1 -1
  18. package/{assets/index-D9lYd8TZ.js → dist/assets/index-BKe5FgcC.js} +1 -1
  19. package/{assets/index-CBTA5S-5.js → dist/assets/index-D72cKELw.js} +1 -1
  20. package/{assets/index-s0cmC4Ks.js → dist/assets/index-DdVFXD_y.js} +1 -1
  21. package/{assets/index-B1ZDDbC1.js → dist/assets/index-DrkSoKz6.js} +1 -1
  22. package/{assets/index-B2rFliXg.js → dist/assets/index-KCfkkJKb.js} +1 -1
  23. package/{assets/index-DnBY0UXI.js → dist/assets/index-QI9biQrR.js} +2 -2
  24. package/{assets/index-DYhXjvk4.js → dist/assets/index-ZopkeZtI.js} +1 -1
  25. package/{assets/index-LDFwTu47.js → dist/assets/index-g-SUxfJH.js} +1 -1
  26. package/{assets/index-NFQIKNFn.js → dist/assets/index-j0kQJd0a.js} +1 -1
  27. package/{assets → dist/assets}/knowledge.svg +4 -4
  28. package/{assets/MySQL.svg → dist/assets/mysql.svg} +14 -14
  29. package/{assets/plus-G7zGXf6S.js → dist/assets/plus-V9zUoSq6.js} +1 -1
  30. package/{assets → dist/assets}/sensitive.svg +5 -5
  31. package/{assets/style-Bn7b5XHU.js → dist/assets/style-CGmZ5osp.js} +2 -2
  32. package/{assets/x-vfKYzKkK.js → dist/assets/x-CnaaLGJF.js} +1 -1
  33. package/dist/assistantConfig.js +1 -0
  34. package/dist/chat.js +824 -0
  35. package/dist/database.js +20 -0
  36. package/dist/databaseId.js +1 -0
  37. package/{databaseTable.js → dist/databaseTable.js} +1 -1
  38. package/dist/index.js +1 -0
  39. package/{modelManage.js → dist/modelManage.js} +1 -1
  40. package/dist/package.json +68 -0
  41. package/{sensitive.js → dist/sensitive.js} +1 -1
  42. package/dist/streamFilesReader.js +1 -0
  43. package/{worker → dist/worker}/pdf.worker.min.js +21 -21
  44. package/doc_assets/2.png +0 -0
  45. package/doc_assets/demo.md +27 -0
  46. package/doc_assets/demos/dist-app/assets/index.Dh-ZAS9Z.css +2 -0
  47. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js +23699 -0
  48. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js.map +1 -0
  49. package/doc_assets/demos/dist-app/index.html +14 -0
  50. package/doc_assets/demos/dist-app/vite.svg +1 -0
  51. package/doc_assets/images/1.png +0 -0
  52. package/doc_assets/images/3.png +0 -0
  53. package/doc_assets/images/component-screenshot.png +1 -0
  54. package/doc_assets/install.md +5 -0
  55. package/doc_assets//346/226/271/346/241/210//344/274/230/345/214/226/346/226/271/346/241/210-/345/244/232/344/274/232/350/257/235SSE/350/277/236/346/216/245/347/256/241/347/220/206.md +504 -0
  56. package/eslint.config.js +92 -0
  57. package/index.html +13 -0
  58. package/package.json +106 -44
  59. package/package.json.demo-backup +109 -0
  60. package/postcss.config.cjs +19 -0
  61. package/public/icons/answerAwartar.png +0 -0
  62. package/public/icons/docx-file.png +0 -0
  63. package/public/icons/folder.png +0 -0
  64. package/public/icons/html.png +0 -0
  65. package/public/icons/image.png +0 -0
  66. package/public/icons/jpg-file.png +0 -0
  67. package/public/icons/json.png +0 -0
  68. package/public/icons/md.png +0 -0
  69. package/public/icons/pdf.png +0 -0
  70. package/public/icons/pptx.png +0 -0
  71. package/public/icons/questionAwartar.png +0 -0
  72. package/public/icons/sheets.png +0 -0
  73. package/public/icons/txt.png +0 -0
  74. package/public/icons/xlsx.png +0 -0
  75. package/public/vite.svg +1 -0
  76. package/public/worker/pdf.worker.min.js +22 -0
  77. package/scripts/README.md +133 -0
  78. package/scripts/build-demo.js +88 -0
  79. package/scripts/decrypt-api-key.js +95 -0
  80. package/scripts/demo-selector.js +216 -0
  81. package/scripts/dev-demo.js +76 -0
  82. package/scripts/preview-demo.js +130 -0
  83. package/scripts/run-demo.bat +34 -0
  84. package/src/assets/img/close.png +0 -0
  85. package/src/assets/img/database.png +0 -0
  86. package/src/assets/img/downArrow.png +0 -0
  87. package/src/assets/img/downLoad.png +0 -0
  88. package/src/assets/img/excel.png +0 -0
  89. package/src/assets/img/graphIcon.png +0 -0
  90. package/src/assets/img/img.png +0 -0
  91. package/src/assets/img/pdf.png +0 -0
  92. package/src/assets/img/ppt.png +0 -0
  93. package/src/assets/img/singleQa.png +0 -0
  94. package/src/assets/img/txt.png +0 -0
  95. package/src/assets/img/webSearch.png +0 -0
  96. package/src/assets/img/word.png +0 -0
  97. package/src/assets/login/homeBg.png +0 -0
  98. package/src/assets/login/left.jpg +0 -0
  99. package/src/assets/login/logoImg.png +0 -0
  100. package/src/examples/ConversationAssistantPage/index.tsx +41 -0
  101. package/src/examples/Demo/index.tsx +12 -0
  102. package/src/examples/LoginPage/index.tsx +18 -0
  103. package/src/examples/chat/components/DrawerGraphPreview.tsx +78 -0
  104. package/src/examples/chat/index.tsx +154 -0
  105. package/src/examples/chat/logo03.png +0 -0
  106. package/src/examples/gientechStreamFilesReader/index.tsx +951 -0
  107. package/src/examples/headlessChat/index.tsx +234 -0
  108. package/src/examples/ragDatabaseDataPage/index.tsx +40 -0
  109. package/src/examples/ragDatabaseIdPage/index.tsx +47 -0
  110. package/src/examples/ragDatabasePage/index.tsx +36 -0
  111. package/src/examples/ragModelManagePage/index.tsx +38 -0
  112. package/src/examples/ragSearchPage/index.tsx +0 -0
  113. package/src/examples/ragSensitiveWordsPage/index.tsx +32 -0
  114. package/src/examples/streamFiles/index.tsx +417 -0
  115. package/src/lib_enter.ts +43 -0
  116. package/src/main.tsx +5 -0
  117. package/src/main.tsx.backup +5 -0
  118. package/src/modules/CHAT_UNIFICATION_PLAN.md +324 -0
  119. package/src/modules/assistantConfig/assets/databse.svg +6 -0
  120. package/src/modules/assistantConfig/assets/empty.png +0 -0
  121. package/src/modules/assistantConfig/assets/graph.svg +4 -0
  122. package/src/modules/assistantConfig/assets/knowledge.svg +4 -0
  123. package/src/modules/assistantConfig/assets/sensitive.svg +5 -0
  124. package/src/modules/assistantConfig/components/Database.tsx +171 -0
  125. package/src/modules/assistantConfig/components/Graph.tsx +177 -0
  126. package/src/modules/assistantConfig/components/Knowledge.tsx +276 -0
  127. package/src/modules/assistantConfig/components/NotFoundContent.tsx +21 -0
  128. package/src/modules/assistantConfig/components/Paragraph.tsx +51 -0
  129. package/src/modules/assistantConfig/components/ParamsItem.tsx +39 -0
  130. package/src/modules/assistantConfig/components/ResourceBinderItem.tsx +133 -0
  131. package/src/modules/assistantConfig/components/SearchableSelector.tsx +500 -0
  132. package/src/modules/assistantConfig/components/Sensitive.tsx +221 -0
  133. package/src/modules/assistantConfig/components/SliderInput.tsx +65 -0
  134. package/src/modules/assistantConfig/constants.tsx +75 -0
  135. package/src/modules/assistantConfig/index.tsx +710 -0
  136. package/src/modules/assistantConfig/server.ts +262 -0
  137. package/src/modules/chat/Conversations/Item.tsx +167 -0
  138. package/src/modules/chat/Conversations/List.tsx +210 -0
  139. package/src/modules/chat/Conversations/groupByTime.ts +39 -0
  140. package/src/modules/chat/Conversations/index.tsx +252 -0
  141. package/src/modules/chat/ReferenceBar.tsx +622 -0
  142. package/src/modules/chat/constants.tsx +52 -0
  143. package/src/modules/chat/data.txt +82 -0
  144. package/src/modules/chat/index.tsx +2054 -0
  145. package/src/modules/chat/referenceCom/DeleteModal.tsx +75 -0
  146. package/src/modules/chat/referenceCom/DrawerContent.tsx +136 -0
  147. package/src/modules/chat/referenceCom/DrawerDatabase.tsx +102 -0
  148. package/src/modules/chat/referenceCom/DrawerGraphPreview.tsx +86 -0
  149. package/src/modules/chat/referenceCom/DrawerPreview.tsx +73 -0
  150. package/src/modules/chat/referenceCom/DrawerTitle.tsx +26 -0
  151. package/src/modules/chat/referenceCom/RenameModal.tsx +86 -0
  152. package/src/modules/chat/referenceCom/TagCom.tsx +30 -0
  153. package/src/modules/chat/style.less +3 -0
  154. package/src/modules/chat/types.ts +17 -0
  155. package/src/modules/chat/utils/index.ts +348 -0
  156. package/src/modules/database/CreateModal.tsx +403 -0
  157. package/src/modules/database/assets/Doris.png +0 -0
  158. package/src/modules/database/assets/PostgreSQL.png +0 -0
  159. package/src/modules/database/assets/SQLServer.png +0 -0
  160. package/src/modules/database/assets/database.svg +11 -0
  161. package/src/modules/database/assets/database_add.svg +53 -0
  162. package/src/modules/database/assets/database_connect.svg +66 -0
  163. package/src/modules/database/assets/database_upload.svg +29 -0
  164. package/src/modules/database/assets/empty.png +0 -0
  165. package/src/modules/database/assets/mysql.svg +14 -0
  166. package/src/modules/database/index.tsx +477 -0
  167. package/src/modules/database/server.ts +196 -0
  168. package/src/modules/databaseId/CustomCom.tsx +156 -0
  169. package/src/modules/databaseId/EditConfig.tsx +280 -0
  170. package/src/modules/databaseId/UploadDrawer.tsx +535 -0
  171. package/src/modules/databaseId/assets/aiOptimize.svg +10 -0
  172. package/src/modules/databaseId/assets/empty.png +0 -0
  173. package/src/modules/databaseId/assets/template.svg +6 -0
  174. package/src/modules/databaseId/assets/upload.svg +9 -0
  175. package/src/modules/databaseId/assets/useTemp.svg +6 -0
  176. package/src/modules/databaseId/index.tsx +769 -0
  177. package/src/modules/databaseId/server.ts +286 -0
  178. package/src/modules/databaseId/style.css +5 -0
  179. package/src/modules/databaseTable/EditRowDrawer.tsx +124 -0
  180. package/src/modules/databaseTable/index.tsx +359 -0
  181. package/src/modules/databaseTable/server.ts +180 -0
  182. package/src/modules/headlessChat/ReferenceBar.tsx +783 -0
  183. package/src/modules/headlessChat/constants.tsx +54 -0
  184. package/src/modules/headlessChat/index.tsx +1706 -0
  185. package/src/modules/headlessChat/referenceCom/DeleteModal.tsx +75 -0
  186. package/src/modules/headlessChat/referenceCom/DrawerContent.tsx +136 -0
  187. package/src/modules/headlessChat/referenceCom/DrawerDatabase.tsx +102 -0
  188. package/src/modules/headlessChat/referenceCom/DrawerGraphPreview.tsx +86 -0
  189. package/src/modules/headlessChat/referenceCom/DrawerPreview.tsx +73 -0
  190. package/src/modules/headlessChat/referenceCom/DrawerTitle.tsx +26 -0
  191. package/src/modules/headlessChat/referenceCom/RenameModal.tsx +86 -0
  192. package/src/modules/headlessChat/referenceCom/TagCom.tsx +30 -0
  193. package/src/modules/headlessChat/style.less +3 -0
  194. package/src/modules/headlessChat/types.ts +23 -0
  195. package/src/modules/headlessChat/utils/index.ts +348 -0
  196. package/src/modules/login/components/Login/LoginBox/index.tsx +102 -0
  197. package/src/modules/login/components/Login/RegisterBox/index.tsx +180 -0
  198. package/src/modules/login/components/Login/index.tsx +100 -0
  199. package/src/modules/login/index.tsx +106 -0
  200. package/src/modules/login/style.css +3 -0
  201. package/src/modules/login/useServices.ts +53 -0
  202. package/src/modules/login/utils.ts +42 -0
  203. package/src/modules/modelManage/ConfigDrawer.tsx +249 -0
  204. package/src/modules/modelManage/ReplaceModal.tsx +124 -0
  205. package/src/modules/modelManage/assets/empty.png +0 -0
  206. package/src/modules/modelManage/const.ts +51 -0
  207. package/src/modules/modelManage/index.tsx +606 -0
  208. package/src/modules/modelManage/server.ts +223 -0
  209. package/src/modules/nodegraph/index.tsx +1 -0
  210. package/src/modules/search/assets/Icon-history.svg +8 -0
  211. package/src/modules/search/assets/answerAwartar.png +0 -0
  212. package/src/modules/search/assets/doc.png +0 -0
  213. package/src/modules/search/assets/genera.gif +0 -0
  214. package/src/modules/search/assets/icon-robot.svg +9 -0
  215. package/src/modules/search/assets/icon-search-bar.svg +14 -0
  216. package/src/modules/search/assets/icon-sub-title.svg +3 -0
  217. package/src/modules/search/assets/icon-title.svg +9 -0
  218. package/src/modules/search/assets/icon-zoomOut.svg +9 -0
  219. package/src/modules/search/assets/iconAi.svg +9 -0
  220. package/src/modules/search/assets/pdf.png +0 -0
  221. package/src/modules/search/assets/ppt.png +0 -0
  222. package/src/modules/search/assets/search.svg +3 -0
  223. package/src/modules/search/assets/selected.svg +4 -0
  224. package/src/modules/search/assets/txt.png +0 -0
  225. package/src/modules/search/assets/xls.png +0 -0
  226. package/src/modules/search/components/AssisSelect.tsx +137 -0
  227. package/src/modules/search/components/Editor/ChatViewEditor.tsx +261 -0
  228. package/src/modules/search/components/Editor/aichat.css +1 -0
  229. package/src/modules/search/components/Editor/constant.ts +13 -0
  230. package/src/modules/search/components/Editor/index.tsx +113 -0
  231. package/src/modules/search/components/Editor/plugins/autofomatRules.ts +332 -0
  232. package/src/modules/search/components/Editor/plugins/convertImgPlugins.tsx +20 -0
  233. package/src/modules/search/components/Editor/plugins/createIndexes.tsx +38 -0
  234. package/src/modules/search/components/Editor/plugins/displayer.ts +298 -0
  235. package/src/modules/search/components/Editor/plugins/imageClick.tsx +32 -0
  236. package/src/modules/search/components/Editor/plugins/myplugin.tsx +98 -0
  237. package/src/modules/search/components/Editor/ui/avatar.tsx +19 -0
  238. package/src/modules/search/components/Editor/ui/blockquote-element.tsx +21 -0
  239. package/src/modules/search/components/Editor/ui/button.tsx +58 -0
  240. package/src/modules/search/components/Editor/ui/calendar.tsx +68 -0
  241. package/src/modules/search/components/Editor/ui/caption.tsx +46 -0
  242. package/src/modules/search/components/Editor/ui/checkbox.tsx +27 -0
  243. package/src/modules/search/components/Editor/ui/code-block-combobox.tsx +188 -0
  244. package/src/modules/search/components/Editor/ui/code-block-element.css +434 -0
  245. package/src/modules/search/components/Editor/ui/code-block-element.tsx +39 -0
  246. package/src/modules/search/components/Editor/ui/code-leaf.tsx +24 -0
  247. package/src/modules/search/components/Editor/ui/code-line-element.tsx +10 -0
  248. package/src/modules/search/components/Editor/ui/code-syntax-leaf.tsx +21 -0
  249. package/src/modules/search/components/Editor/ui/column-element.tsx +30 -0
  250. package/src/modules/search/components/Editor/ui/column-group-element.tsx +94 -0
  251. package/src/modules/search/components/Editor/ui/command.tsx +75 -0
  252. package/src/modules/search/components/Editor/ui/comment-avatar.tsx +22 -0
  253. package/src/modules/search/components/Editor/ui/comment-create-form.tsx +37 -0
  254. package/src/modules/search/components/Editor/ui/comment-item.tsx +74 -0
  255. package/src/modules/search/components/Editor/ui/comment-leaf.tsx +49 -0
  256. package/src/modules/search/components/Editor/ui/comment-more-dropdown.tsx +42 -0
  257. package/src/modules/search/components/Editor/ui/comment-reply-items.tsx +22 -0
  258. package/src/modules/search/components/Editor/ui/comment-resolve-button.tsx +32 -0
  259. package/src/modules/search/components/Editor/ui/comment-value.tsx +34 -0
  260. package/src/modules/search/components/Editor/ui/comments-popover.tsx +63 -0
  261. package/src/modules/search/components/Editor/ui/date-element.tsx +83 -0
  262. package/src/modules/search/components/Editor/ui/dialog.tsx +63 -0
  263. package/src/modules/search/components/Editor/ui/draggable.tsx +177 -0
  264. package/src/modules/search/components/Editor/ui/dropdown-menu.tsx +180 -0
  265. package/src/modules/search/components/Editor/ui/emoji-input-element.tsx +85 -0
  266. package/src/modules/search/components/Editor/ui/excalidraw-element.tsx +28 -0
  267. package/src/modules/search/components/Editor/ui/fixed-toolbar-buttons.tsx +76 -0
  268. package/src/modules/search/components/Editor/ui/fixed-toolbar.tsx +8 -0
  269. package/src/modules/search/components/Editor/ui/floating-toolbar-buttons.tsx +51 -0
  270. package/src/modules/search/components/Editor/ui/floating-toolbar.tsx +77 -0
  271. package/src/modules/search/components/Editor/ui/heading-element.tsx +48 -0
  272. package/src/modules/search/components/Editor/ui/highlight-leaf.tsx +17 -0
  273. package/src/modules/search/components/Editor/ui/hr-element.tsx +30 -0
  274. package/src/modules/search/components/Editor/ui/icons.tsx +267 -0
  275. package/src/modules/search/components/Editor/ui/image-element.tsx +74 -0
  276. package/src/modules/search/components/Editor/ui/inline-combobox.tsx +368 -0
  277. package/src/modules/search/components/Editor/ui/input.tsx +25 -0
  278. package/src/modules/search/components/Editor/ui/insert-dropdown-menu.tsx +218 -0
  279. package/src/modules/search/components/Editor/ui/kbd-leaf.tsx +20 -0
  280. package/src/modules/search/components/Editor/ui/link-element.tsx +29 -0
  281. package/src/modules/search/components/Editor/ui/link-floating-toolbar.tsx +161 -0
  282. package/src/modules/search/components/Editor/ui/list-element.tsx +30 -0
  283. package/src/modules/search/components/Editor/ui/mark-toolbar-button.tsx +24 -0
  284. package/src/modules/search/components/Editor/ui/media-embed-element.tsx +133 -0
  285. package/src/modules/search/components/Editor/ui/media-popover.tsx +97 -0
  286. package/src/modules/search/components/Editor/ui/mention-element.tsx +43 -0
  287. package/src/modules/search/components/Editor/ui/mention-input-element.tsx +141 -0
  288. package/src/modules/search/components/Editor/ui/mode-dropdown-menu.tsx +93 -0
  289. package/src/modules/search/components/Editor/ui/more-dropdown-menu.tsx +67 -0
  290. package/src/modules/search/components/Editor/ui/paragraph-element.tsx +4 -0
  291. package/src/modules/search/components/Editor/ui/placeholder.tsx +52 -0
  292. package/src/modules/search/components/Editor/ui/popover.tsx +32 -0
  293. package/src/modules/search/components/Editor/ui/resizable.tsx +66 -0
  294. package/src/modules/search/components/Editor/ui/separator.tsx +25 -0
  295. package/src/modules/search/components/Editor/ui/style.less +12 -0
  296. package/src/modules/search/components/Editor/ui/table-cell-element.tsx +143 -0
  297. package/src/modules/search/components/Editor/ui/table-element.tsx +243 -0
  298. package/src/modules/search/components/Editor/ui/table-row-element.tsx +22 -0
  299. package/src/modules/search/components/Editor/ui/tableValue.tsx +135 -0
  300. package/src/modules/search/components/Editor/ui/todo-list-element.tsx +43 -0
  301. package/src/modules/search/components/Editor/ui/toggle-element.tsx +31 -0
  302. package/src/modules/search/components/Editor/ui/toolbar.tsx +157 -0
  303. package/src/modules/search/components/Editor/ui/tooltip.tsx +65 -0
  304. package/src/modules/search/components/Editor/ui/turn-into-dropdown-menu.tsx +160 -0
  305. package/src/modules/search/components/Editor/ui/with-draggables.tsx +175 -0
  306. package/src/modules/search/components/FileList.tsx +287 -0
  307. package/src/modules/search/components/ImageGroupView/index.tsx +85 -0
  308. package/src/modules/search/components/ResultContent.tsx +232 -0
  309. package/src/modules/search/components/SearchInput.tsx +232 -0
  310. package/src/modules/search/components/SearchLanding.tsx +74 -0
  311. package/src/modules/search/components/SearchView.tsx +563 -0
  312. package/src/modules/search/components/SimpleEditor.tsx +158 -0
  313. package/src/modules/search/components/SimpleFileList.tsx +215 -0
  314. package/src/modules/search/index.tsx +10 -0
  315. package/src/modules/search/reademe.md +1 -0
  316. package/src/modules/search/servers/apis.tsx +19 -0
  317. package/src/modules/search/servers/index.ts +184 -0
  318. package/src/modules/search/style.less +503 -0
  319. package/src/modules/search/type.ts +22 -0
  320. package/src/modules/search/utils.ts +34 -0
  321. package/src/modules/sensitive/index.tsx +313 -0
  322. package/src/modules/sensitive/server.ts +122 -0
  323. package/src/modules/streamFilesReader/GientechStreamReader.tsx +1625 -0
  324. package/src/modules/streamFilesReader/components/Header/Toolbar.tsx +0 -0
  325. package/src/modules/streamFilesReader/components/Header/index.tsx +297 -0
  326. package/src/modules/streamFilesReader/index.tsx +3 -0
  327. package/src/style.css +6 -0
  328. package/src/type.d.ts +0 -0
  329. package/src/utils/commonFn.tsx +111 -0
  330. package/src/utils/decryptApiKey.ts +40 -0
  331. package/src/utils/gientechCommon/components/AppError.tsx +32 -0
  332. package/src/utils/gientechCommon/components/AppLoading.tsx +75 -0
  333. package/src/utils/gientechCommon/components/DeleteModal.tsx +75 -0
  334. package/src/utils/gientechCommon/components/DisplayError.tsx +33 -0
  335. package/src/utils/gientechCommon/components/DisplayLoading.tsx +38 -0
  336. package/src/utils/gientechCommon/components/FeedBackModal.tsx +319 -0
  337. package/src/utils/gientechCommon/components/FileCardCommon.tsx +82 -0
  338. package/src/utils/gientechCommon/components/FileManager/index.tsx +400 -0
  339. package/src/utils/gientechCommon/components/FileManager/style.css +5 -0
  340. package/src/utils/gientechCommon/components/Messages/GientechNewChatWelcome.tsx +581 -0
  341. package/src/utils/gientechCommon/components/Messages/ReferenceCard.tsx +359 -0
  342. package/src/utils/gientechCommon/components/Messages/RetriveItem.tsx +245 -0
  343. package/src/utils/gientechCommon/components/Messages/WebRetriveItem.tsx +209 -0
  344. package/src/utils/gientechCommon/components/Messages/defaultBot.png +0 -0
  345. package/src/utils/gientechCommon/components/Messages/defaultStyleSet.tsx +148 -0
  346. package/src/utils/gientechCommon/components/Messages/defaultWeLogo.svg +14 -0
  347. package/src/utils/gientechCommon/components/RenameModal.tsx +86 -0
  348. package/src/utils/gientechCommon/components/style.less +11 -0
  349. package/src/utils/gientechCommon/configs/commonConfig.ts +2 -0
  350. package/src/utils/gientechCommon/configs/senderConfig.ts +0 -0
  351. package/src/utils/gientechCommon/configs/stylesConfig.ts +142 -0
  352. package/src/utils/gientechCommon/hooks/AichatUseController.tsx +417 -0
  353. package/src/utils/gientechCommon/hooks/useFileDisplayTools.tsx +204 -0
  354. package/src/utils/gientechCommon/hooks/useFileManager.ts +193 -0
  355. package/src/utils/gientechCommon/slate/converters/deserializers.ts +763 -0
  356. package/src/utils/gientechCommon/slate/converters/mockData.ts +232 -0
  357. package/src/utils/gientechCommon/slate/converters/slateConverters.ts +258 -0
  358. package/src/utils/gientechCommon/slate/richElements/index.tsx +499 -0
  359. package/src/utils/gientechCommon/utils/fileUtils.ts +86 -0
  360. package/src/utils/gientechCommon/utils/request.ts +37 -0
  361. package/src/utils/gientechCommon/utils/serverFn.ts +172 -0
  362. package/src/utils/index.tsx +142 -0
  363. package/src/utils/testconfigs/demologin/index.tsx +32 -0
  364. package/src/utils/testconfigs/index.ts +59 -0
  365. package/src/vite-env.d.ts +42 -0
  366. package/stats.html +4949 -0
  367. package/tailwind.config.js +170 -0
  368. package/tsconfig.app.json +30 -0
  369. package/tsconfig.app.tsbuildinfo +11 -0
  370. package/tsconfig.json +13 -0
  371. package/tsconfig.node.json +22 -0
  372. package/tsconfig.node.tsbuildinfo +1 -0
  373. package/vite.config.app.ts +93 -0
  374. package/vite.config.ts +232 -0
  375. package/workflows/release.yml +60 -0
  376. package//346/215/242/350/241/214/346/240/274/345/274/217/344/277/235/346/214/201/344/274/230/345/214/226/346/226/271/346/241/210.md +359 -0
  377. package/assistantConfig.js +0 -1
  378. package/chat.js +0 -786
  379. package/database.js +0 -20
  380. package/databaseId.js +0 -1
  381. package/index.js +0 -1
  382. package/streamFilesReader.js +0 -1
  383. /package/{assets → dist/assets}/Doris.png +0 -0
  384. /package/{assets → dist/assets}/PostgreSQL.png +0 -0
  385. /package/{assets → dist/assets}/SQLServer.png +0 -0
  386. /package/{assets → dist/assets}/empty.png +0 -0
  387. /package/{assets → dist/assets}/homeBg.png +0 -0
  388. /package/{assets → dist/assets}/index-CpW6Dhpp.js +0 -0
  389. /package/{assets → dist/assets}/left.jpg +0 -0
  390. /package/{assets → dist/assets}/logoImg.png +0 -0
  391. /package/{assets → dist/assets}/style.css +0 -0
  392. /package/{assets → dist/assets}/style2.css +0 -0
  393. /package/{assets → dist/assets}/style3.css +0 -0
  394. /package/{assets → dist/assets}/style4.css +0 -0
  395. /package/{assets → dist/assets}/worker-BbpylX7l.js +0 -0
  396. /package/{assistantConfig.d.ts → dist/assistantConfig.d.ts} +0 -0
  397. /package/{chat.d.ts → dist/chat.d.ts} +0 -0
  398. /package/{database.d.ts → dist/database.d.ts} +0 -0
  399. /package/{databaseId.d.ts → dist/databaseId.d.ts} +0 -0
  400. /package/{databaseTable.d.ts → dist/databaseTable.d.ts} +0 -0
  401. /package/{icons → dist/icons}/answerAwartar.png +0 -0
  402. /package/{icons → dist/icons}/docx-file.png +0 -0
  403. /package/{icons → dist/icons}/folder.png +0 -0
  404. /package/{icons → dist/icons}/html.png +0 -0
  405. /package/{icons → dist/icons}/image.png +0 -0
  406. /package/{icons → dist/icons}/jpg-file.png +0 -0
  407. /package/{icons → dist/icons}/json.png +0 -0
  408. /package/{icons → dist/icons}/md.png +0 -0
  409. /package/{icons → dist/icons}/pdf.png +0 -0
  410. /package/{icons → dist/icons}/pptx.png +0 -0
  411. /package/{icons → dist/icons}/questionAwartar.png +0 -0
  412. /package/{icons → dist/icons}/sheets.png +0 -0
  413. /package/{icons → dist/icons}/txt.png +0 -0
  414. /package/{icons → dist/icons}/xlsx.png +0 -0
  415. /package/{index.d.ts → dist/index.d.ts} +0 -0
  416. /package/{modelManage.d.ts → dist/modelManage.d.ts} +0 -0
  417. /package/{sensitive.d.ts → dist/sensitive.d.ts} +0 -0
  418. /package/{streamFilesReader.d.ts → dist/streamFilesReader.d.ts} +0 -0
  419. /package/{vite.svg → dist/vite.svg} +0 -0
@@ -0,0 +1,359 @@
1
+ import React, { useEffect, useMemo } from 'react';
2
+ import { FileSpreadsheet, FileText, FileCode, File, Eye, FolderUp } from 'lucide-react';
3
+ import { getFileTypeIcon } from '../FileManager';
4
+ import { AiChatStyles } from '../../configs/stylesConfig';
5
+ import { dealMinioUrl, TempBaseUrl } from '../../../../utils';
6
+ import { message } from 'antd';
7
+
8
+ interface ReferenceCardProps {
9
+ file_type?: string;
10
+ file_name?: string;
11
+ url?: string;
12
+ parse_url?: string;
13
+ retrieve_tags?: any[];
14
+ clip_from?: string;
15
+ eventsEmit?: (eventName: string, payload?: any) => void;
16
+ styles: any;
17
+ onlyDownloadTypes?: string[];
18
+ type?: 'file' | 'image' | 'collection';
19
+ collectionItems?: Array<Partial<ReferenceCardProps>>;
20
+ [key: string]: any;
21
+ }
22
+
23
+ const ReferenceCard: React.FC<ReferenceCardProps> = (props) => {
24
+ const {
25
+ file_type,
26
+ file_name,
27
+ url,
28
+ parse_url,
29
+ retrieve_tags,
30
+ file_id,
31
+ parsed_file_type,
32
+ onlyDownloadTypes,
33
+ references,
34
+ eventsEmit,
35
+ styles,
36
+ isUploadFile,
37
+ type,
38
+ collectionItems,
39
+ pdfPages = 0,
40
+ fileManagerData
41
+ } = props;
42
+
43
+
44
+ // 新增:集合类型渲染
45
+ if (type === 'collection' && Array.isArray(collectionItems)) {
46
+ // 计算宫格item尺寸:父容器与普通item一致(w-24 h-24),gap为1px
47
+ const gridGap = 1; // px
48
+ const parentSize = 94; // 24*4=96px
49
+ const itemSize = `calc(90% - ${gridGap / 2}px)`;
50
+ // 最多展示4个,超出4个第4格显示省略号
51
+ const previewItems = collectionItems.slice(0, 4);
52
+ const showEllipsis = collectionItems.length > 4;
53
+ // hover 盖层内容
54
+ const overlayText = `打开合集`;
55
+ const handleClick = () => {
56
+ if(fileManagerData && file_type === 'pdf' && !props.pdfPages){
57
+ const cur = (fileManagerData?.uploadedFiles||[]).find((item: any) => (item?.name||item?.file?.name) === file_name);
58
+ if(!cur?.pdfPages){
59
+ message.warning('该PDF文件未解析完成,请稍后再试');
60
+ return
61
+ }
62
+ eventsEmit?.('reference_file:click', {...props, pdfPages: cur?.pdfPages || 0});
63
+ }else {
64
+ eventsEmit?.('reference_file:click', props);
65
+ }
66
+ };
67
+ return (
68
+ <div
69
+ className="user-file relative group flex flex-col items-center justify-center cursor-pointer backdrop-blur-sm rounded-lg border p-2 text-sm transition-all bg-white shadow"
70
+ style={{ width: parentSize, height: parentSize, minWidth: parentSize, minHeight: parentSize, borderColor: styles?.theme?.colors?.border }}
71
+ onClick={handleClick}
72
+ >
73
+ <div className="grid grid-cols-2 items-center justify-center grid-rows-2 gap-1 w-full h-full"
74
+ style={{ width: '100%', height: '100%', gap: gridGap }}
75
+ >
76
+ {previewItems.map((item, idx) => {
77
+ if (showEllipsis && idx === 3) {
78
+ return (
79
+ <div key="ellipsis" className="flex items-center justify-center bg-gray-100 rounded" style={{ width: itemSize, height: itemSize }}>
80
+ <span className="text-xl text-gray-300 font-bold scale-75">...</span>
81
+ </div>
82
+ );
83
+ }
84
+ const isImage =
85
+ item.file_type === 'image' ||
86
+ item.file_type === 'jpg' ||
87
+ item.file_type === 'jpeg' ||
88
+ item.file_type === 'png' ||
89
+ item.file_type === 'gif' ||
90
+ item.file_type === 'bmp' ||
91
+ item.file_type === 'webp';
92
+ if (isImage) {
93
+ return (
94
+ <div
95
+ key={item.file_name || idx}
96
+ className="relative flex items-center justify-center bg-white rounded-lg border overflow-hidden"
97
+ style={{ width: itemSize, height: itemSize, borderColor: styles?.theme?.colors?.border }}
98
+ >
99
+ <div className="flex items-center justify-center w-full h-full scale-75">
100
+ <img
101
+ src={String(item.url || item.file_path || '')}
102
+ alt={item.file_name || ''}
103
+ className="object-contain max-w-full max-h-full"
104
+ />
105
+ </div>
106
+ </div>
107
+ );
108
+ }
109
+ const icon = getFileTypeIcon(String(item.file_type || ''), styles);
110
+ return (
111
+ <div
112
+ key={item.file_name || idx}
113
+ className="user-file flex flex-col items-center justify-center rounded-lg border bg-gray-50 p-1 text-sm"
114
+ title={item.file_name}
115
+ style={{ width: itemSize, height: itemSize, borderColor: styles?.theme?.colors?.border }}
116
+ >
117
+ <div className="flex items-center justify-center w-full h-full scale-75">
118
+ {icon}
119
+ </div>
120
+ </div>
121
+ );
122
+ })}
123
+ </div>
124
+ {/* 整体hover盖层 */}
125
+ <div className="absolute inset-0 bg-transparent group-hover:bg-black/40 transition-all duration-300 flex items-center justify-center rounded-lg pointer-events-none">
126
+ <div className="flex flex-col items-center text-xs justify-center text-white opacity-0 group-hover:opacity-100 transition-opacity">
127
+ <FolderUp size={20} className="mb-1 text-white" />
128
+ <span className="text-white text-center" style={{ fontSize: 12 }}>{overlayText}</span>
129
+ </div>
130
+ </div>
131
+ </div>
132
+ );
133
+ }
134
+
135
+ // const icon = fileTypeIcons[file_type?.toLowerCase()] || fileTypeIcons.default;
136
+
137
+ // 文档引用点击
138
+ const handleReferenceClick = () => {
139
+ console.log(parse_url,'parse_url',url,'url')
140
+ if(fileManagerData && file_type === 'pdf' && !pdfPages){
141
+ const cur = (fileManagerData?.uploadedFiles||[]).find((item: any) => (item?.name||item?.file?.name) === (file_name||'').replace(/\s+/g, ''));
142
+ if(!cur?.pdfPages){
143
+ message.warning('该PDF文件未解析完成,请稍后再试');
144
+ return
145
+ }
146
+ eventsEmit?.('reference_file:click', {
147
+ file: file_name,
148
+ file_type,
149
+ url,
150
+ parse_url,
151
+ retrieve_tags,
152
+ file_id,
153
+ parsed_file_type,
154
+ references,
155
+ type: fileType,
156
+ isUploadFile: isUploadFile,
157
+ pdfPages:cur.pdfPages || 0,
158
+ });
159
+ }else {
160
+ eventsEmit?.('reference_file:click', {
161
+ file: file_name,
162
+ file_type,
163
+ url,
164
+ parse_url,
165
+ retrieve_tags,
166
+ file_id,
167
+ parsed_file_type,
168
+ references,
169
+ type: fileType,
170
+ isUploadFile: isUploadFile,
171
+ pdfPages
172
+ });
173
+ }
174
+
175
+ };
176
+ const fileType = useMemo(() => {
177
+ return (file_name || '').split('.').pop() || '';
178
+ }, [file_name]);
179
+ //console.log('fileType123123123123123123',fileType)
180
+ const icon = getFileTypeIcon(fileType, styles);
181
+ // 召回标签点击
182
+ // const handleRetriveTagClick = (tag: any) => {
183
+ // eventsEmit?.('retrive_tag:click', { file: file_name, tag });
184
+ // };
185
+
186
+ const downloadFile = async () => {
187
+ if (url) {
188
+ const _url: any = dealMinioUrl(url.indexOf('http') > -1 ? url : `${TempBaseUrl}/${url}`);
189
+ const fileExt = fileType.toLowerCase();
190
+ if (fileExt === 'json') {
191
+ try {
192
+ const response = await fetch(_url);
193
+ if (!response.ok) throw new Error('下载失败');
194
+ const blob = await response.blob();
195
+ const link = document.createElement('a');
196
+ link.href = URL.createObjectURL(blob);
197
+ link.download = file_name || '';
198
+ document.body.appendChild(link);
199
+ link.click();
200
+ document.body.removeChild(link);
201
+ setTimeout(() => URL.revokeObjectURL(link.href), 1000);
202
+ } catch (e) {
203
+ alert('文件下载失败');
204
+ }
205
+ return;
206
+ }
207
+ const link = document.createElement('a');
208
+ link.href = _url;
209
+ link.download = file_name || '';
210
+ document.body.appendChild(link);
211
+ link.click();
212
+ document.body.removeChild(link);
213
+ }
214
+ };
215
+
216
+ // 只支持下载的文件类型
217
+ //const onlyDownloadTypes = onlyDownloadTypes || ['xlsx', 'csv', 'xls', 'ppt', 'pptx', 'pub', 'json', 'doc', 'docx'];
218
+ if (onlyDownloadTypes && onlyDownloadTypes.includes(fileType.toLowerCase())) {
219
+ return (
220
+ <div
221
+ key={file_name}
222
+ className="user-file relative group w-24 h-24 flex flex-col items-center justify-center cursor-pointer backdrop-blur-sm rounded-lg border p-2 text-sm transition-all"
223
+ title={file_name}
224
+ onClick={downloadFile}
225
+ style={{ borderColor: styles?.theme?.colors?.border }}
226
+ >
227
+ {icon}
228
+ <span
229
+ className="file-name font-medium truncate text-center px-2 pt-1"
230
+ style={{ fontSize: 10, maxWidth: '5.5rem' }}
231
+ >
232
+ {file_name}
233
+ </span>
234
+ <div className="absolute text-center inset-0 cursor-pointer bg-transparent group-hover:bg-black/40 transition-all duration-300 flex items-center justify-center rounded-lg">
235
+ <div className="flex flex-col items-center text-xs justify-center text-white opacity-0 group-hover:opacity-100 transition-opacity">
236
+ <FolderUp className="text-white opacity-0 group-hover:opacity-100 transition-opacity mx-auto" />
237
+ <div className="text-white text-center" style={{ fontSize: 10 }}>
238
+ 下载文件
239
+ </div>
240
+ </div>
241
+ </div>
242
+ </div>
243
+ );
244
+ }
245
+
246
+ // 判断是否为图片类型:同时检查 file_type 和 fileType(从文件名提取)
247
+ const isImageType =
248
+ file_type === 'image' ||
249
+ file_type === 'jpg' ||
250
+ file_type === 'jpeg' ||
251
+ file_type === 'png' ||
252
+ file_type === 'gif' ||
253
+ file_type === 'bmp' ||
254
+ file_type === 'webp' ||
255
+ fileType === 'image' ||
256
+ fileType === 'jpg' ||
257
+ fileType === 'jpeg' ||
258
+ fileType === 'png' ||
259
+ fileType === 'gif' ||
260
+ fileType === 'bmp' ||
261
+ fileType === 'webp';
262
+
263
+ if (isImageType) {
264
+ return (
265
+ <div
266
+ key={file_name}
267
+ className="relative group w-24 h-24 cursor-pointer flex items-center justify-center"
268
+ onClick={() => handleReferenceClick()}
269
+ >
270
+ {url ? (
271
+ <img
272
+ src={String(
273
+ url && (url.indexOf('http://') > -1 || url.indexOf('https://') > -1)
274
+ ? url
275
+ : dealMinioUrl(`${TempBaseUrl}/${url}`) || ''
276
+ )}
277
+ alt={file_name || ''}
278
+ className="w-full h-full object-cover rounded-md border"
279
+ style={{ borderColor: styles?.theme?.colors?.border }}
280
+ onError={(e) => {
281
+ // 如果图片加载失败,尝试使用原始 URL
282
+ const target = e.target as HTMLImageElement;
283
+ if (target.src !== url) {
284
+ target.src = url;
285
+ }
286
+ }}
287
+ />
288
+ ) : (
289
+ <div className="w-full h-full flex items-center justify-center">
290
+ <span className="animate-spin rounded-full border-2 border-gray-300 border-t-blue-500 w-8 h-8 inline-block"></span>
291
+ </div>
292
+ )}
293
+ <div className="absolute inset-0 bg-transparent group-hover:bg-black/40 transition-all duration-300 flex items-center justify-center rounded-md">
294
+ <div className="flex flex-col items-center text-xs justify-center text-white opacity-0 group-hover:opacity-100 transition-opacity">
295
+ <Eye className="text-white opacity-0 group-hover:opacity-100 transition-opacity mx-auto" />
296
+ <div className="text-white text-center">查看图片</div>
297
+ </div>
298
+ </div>
299
+ </div>
300
+ );
301
+ } else {
302
+ return (
303
+ <div
304
+ key={file_name}
305
+ className="user-file relative group w-24 h-24 flex flex-col items-center justify-center cursor-pointer backdrop-blur-sm rounded-lg border p-2 text-sm transition-all"
306
+ title={file_name}
307
+ onClick={handleReferenceClick}
308
+ style={{ borderColor: styles?.theme?.colors?.border }}
309
+ >
310
+ {icon}
311
+ <span
312
+ className="file-name font-medium truncate text-center px-2 pt-1"
313
+ style={{ fontSize: 10, maxWidth: '5.5rem' }}
314
+ >
315
+ {file_name}
316
+ </span>
317
+ <div className="absolute text-center inset-0 cursor-pointer bg-transparent group-hover:bg-black/40 transition-all duration-300 flex items-center justify-center rounded-lg">
318
+ <div className="flex flex-col items-center text-xs justify-center text-white opacity-0 group-hover:opacity-100 transition-opacity">
319
+ <FolderUp className="text-white opacity-0 group-hover:opacity-100 transition-opacity mx-auto" />
320
+ <div className="text-white text-center" style={{ fontSize: 10 }}>
321
+ 打开文件
322
+ </div>
323
+ </div>
324
+ </div>
325
+ </div>
326
+ );
327
+ }
328
+ //return (
329
+ // <div
330
+ // className="flex items-center bg-white rounded-lg shadow-sm border border-gray-100 px-3 py-2 mb-2 min-w-[220px] max-w-[340px] hover:shadow-md hover:border-blue-200 transition cursor-pointer group"
331
+ // style={{ gap: 12 }}
332
+ // onClick={handleReferenceClick}
333
+ // >
334
+ // <div className="flex-shrink-0">{icon}</div>
335
+ // <div className="flex-1 min-w-0">
336
+ // <div
337
+ // className="font-medium text-[13px] text-gray-900 truncate group-hover:text-blue-600"
338
+ // title={file_name}
339
+ // >
340
+ // {file_name}
341
+ // </div>
342
+ // </div>
343
+ // {/* {parse_url && (
344
+ // <a
345
+ // href={parse_url}
346
+ // target="_blank"
347
+ // rel="noopener noreferrer"
348
+ // className="ml-3 px-2 py-0.5 text-xs rounded border border-blue-100 bg-blue-50 text-blue-600 hover:bg-blue-100 hover:border-blue-300 transition"
349
+ // onClick={e => { e.stopPropagation(); handleReferenceClick(); }}
350
+ // >
351
+ // 下载
352
+ // </a>
353
+ // )} */}
354
+ // </div>
355
+
356
+ //);
357
+ };
358
+
359
+ export default ReferenceCard;
@@ -0,0 +1,245 @@
1
+ import React, { useState } from 'react';
2
+ import { ArrowDownToLine, ArrowUpToLine, Download, Eye, MessageSquare } from 'lucide-react';
3
+ import { getFileTypeIcon } from '../FileManager';
4
+ import { Tooltip } from 'antd';
5
+
6
+ // 定义召回文件类型
7
+ interface Tag {
8
+ id: string;
9
+ index: string;
10
+ image_urls: string[];
11
+ fromtype: string;
12
+ }
13
+
14
+ interface RetriveFile {
15
+ file_id: string;
16
+ file_name: string;
17
+ file_type: string;
18
+ score: number;
19
+ tags: Tag[];
20
+ parsedFilePath?: string;
21
+ }
22
+
23
+ interface RetriveItemProps {
24
+ is_download?: string;
25
+ from?: string;
26
+ files: RetriveFile[];
27
+ onQa?: (file: RetriveFile) => void;
28
+ onPreview?: (file: RetriveFile) => void;
29
+ onDownload?: (file: RetriveFile) => void;
30
+ styles?: any;
31
+ onTagClick?: (tag: Tag, file: RetriveFile) => void;
32
+ eventsEmit?: (eventName: string, payload?: any) => void;
33
+ }
34
+
35
+ // const mockFiles: RetriveFile[] = [
36
+ // {
37
+ // file_id: '1',
38
+ // file_name: '测试文档1.pdf',
39
+ // file_type: 'pdf',
40
+ // score: 0.98,
41
+ // tags: [
42
+ // { id: 't1', name: '标签A' },
43
+ // { id: 't2', name: '标签B' },
44
+ // ],
45
+ // },
46
+ // {
47
+ // file_id: '2',
48
+ // file_name: '说明文档.docx',
49
+ // file_type: 'docx',
50
+ // score: 0.87,
51
+ // tags: [
52
+ // { id: 't3', name: '标签C' },
53
+ // ],
54
+ // },
55
+ // {
56
+ // file_id: '3',
57
+ // file_name: '图片示例.png',
58
+ // file_type: 'png',
59
+ // score: 0.92,
60
+ // tags: [
61
+ // { id: 't4', name: '图片标签' },
62
+ // ],
63
+ // },
64
+ // ];
65
+
66
+ const getThemeColor = (styles: any, key: string, fallback: string) =>
67
+ styles?.theme?.colors?.[key] || fallback;
68
+
69
+ const RetriveItem: React.FC<RetriveItemProps> = ({
70
+ files,
71
+ onQa,
72
+ onPreview,
73
+ onDownload,
74
+ styles,
75
+ onTagClick,
76
+ eventsEmit,
77
+ from,
78
+ is_download,
79
+ }) => {
80
+ // 主题色
81
+ const borderColor = getThemeColor(styles, 'border', '#F2F3F5');
82
+ const bgHover = getThemeColor(styles, 'background', '#F5F6FA');
83
+ const textColor = getThemeColor(styles, 'text', '#1F2329');
84
+ const disabledText = getThemeColor(styles, 'disabledText', '#8F959E');
85
+
86
+ const btnHover = getThemeColor(styles, 'btnHover', '#E5E6EB');
87
+ const [open, setOpen] = useState(false);
88
+ return (
89
+ <div className="w-full">
90
+ <ul className="divide-y divide-gray-50 flex flex-col gap-2">
91
+ {(open ? files : files.slice(0, 2)).map((file: RetriveFile, idx: number) => {
92
+ return (
93
+ <li
94
+ key={file.parsedFilePath || file.file_id + '-' + idx}
95
+ className="flex items-center px-3 py-2 group transition"
96
+ style={{
97
+ minHeight: 32,
98
+ border: 'none',
99
+ borderRadius: 6,
100
+ cursor: 'default',
101
+ background: undefined,
102
+ }}
103
+ onMouseEnter={e => (e.currentTarget.style.background = bgHover)}
104
+ onMouseLeave={e => (e.currentTarget.style.background = '')}
105
+ >
106
+ {/* 文件icon+文件名 */}
107
+ <div className="flex items-center min-w-0 flex-1">
108
+ {getFileTypeIcon(file.file_type, styles)}
109
+ <Tooltip title={file.file_name}>
110
+ <span
111
+ className="font-medium text-sm ml-2 truncate max-w-[300px]"
112
+ title={file.file_name}
113
+ style={{ color: textColor }}
114
+ >
115
+ {file.file_name}
116
+ </span>
117
+ </Tooltip>
118
+ </div>
119
+ {/* 分数+标签 */}
120
+ <div className="flex items-center gap-x-1 min-w-[120px] ml-4">
121
+ {(() => {
122
+ // tags去重并排序
123
+ const seen = new Set();
124
+ const uniqueSortedTags = (file.tags || [])
125
+ .filter(tag => {
126
+ if (seen.has(tag.id)) return false;
127
+ // console.log(tag,'tag')
128
+ seen.add(tag.id);
129
+ return true;
130
+ })
131
+ .sort((a, b) => Number(a.index) - Number(b.index));
132
+ return uniqueSortedTags.map(tag => (
133
+ <span
134
+ className="cursor-pointer"
135
+ key={tag.id}
136
+ style={{
137
+ display: 'inline-block',
138
+ background: '#e6f7ff',
139
+ color: '#1890ff',
140
+ border: '1px solid rgba(114,187,255,0.3)',
141
+ borderRadius: 6,
142
+ padding: '1px 6px',
143
+ margin: '0 2px',
144
+ fontWeight: 600,
145
+ fontSize: 12,
146
+ lineHeight: '17px',
147
+ verticalAlign: 'middle',
148
+ }}
149
+ onClick={e => {
150
+ e.stopPropagation();
151
+ onTagClick?.({ ...tag, fromtype: '0' }, file);
152
+ }}
153
+ onMouseEnter={e => (e.currentTarget.style.background = '#bae7ff')}
154
+ onMouseLeave={e => (e.currentTarget.style.background = '#e6f7ff')}
155
+ >
156
+ {tag.index}
157
+ </span>
158
+ ));
159
+ })()}
160
+ <span
161
+ className="text-xs px-5 border-r border-solid border-gray-300 ml-2"
162
+ style={{ color: disabledText }}
163
+ >
164
+ 分数: {Number(file.score).toFixed(2)}
165
+ </span>
166
+ </div>
167
+ {/* 操作按钮组 */}
168
+ <div className="flex pl-5 items-center gap-1 ml-auto">
169
+ {from !== 'headless' && (
170
+ <Tooltip title="单文档问答" placement="top">
171
+ <button
172
+ onClick={() => {
173
+ onQa?.(file);
174
+ eventsEmit?.('referenceFile_question', { data: file, is_download });
175
+ }}
176
+ className="flex cursor-pointer items-center justify-center w-8 h-8 rounded transition group"
177
+ style={{ outline: 'none', border: 'none', background: 'none' }}
178
+ onMouseEnter={e => (e.currentTarget.style.background = btnHover)}
179
+ onMouseLeave={e => (e.currentTarget.style.background = 'none')}
180
+ >
181
+ <MessageSquare className="w-4 h-4" style={{ color: disabledText }} />
182
+ </button>
183
+ </Tooltip>
184
+ )}
185
+
186
+ <Tooltip title="预览" placement="top">
187
+ <button
188
+ onClick={() => {
189
+ onPreview?.(file);
190
+ eventsEmit?.('referenceFile_view', { data: file });
191
+ }}
192
+ className="flex cursor-pointer items-center justify-center w-8 h-8 rounded transition group"
193
+ style={{ outline: 'none', border: 'none', background: 'none' }}
194
+ onMouseEnter={e => (e.currentTarget.style.background = btnHover)}
195
+ onMouseLeave={e => (e.currentTarget.style.background = 'none')}
196
+ >
197
+ <Eye className="w-4 h-4" style={{ color: disabledText }} />
198
+ </button>
199
+ </Tooltip>
200
+ {from !== 'headless' && (
201
+ <Tooltip title={is_download ? '下载' : '无权限下载'} placement="top">
202
+ <button
203
+ onClick={() => {
204
+ onDownload?.(file);
205
+ eventsEmit?.('referenceFile_download', { data: file });
206
+ }}
207
+ disabled={!is_download}
208
+ className="flex items-center justify-center w-8 h-8 rounded transition group"
209
+ style={{
210
+ outline: 'none',
211
+ border: 'none',
212
+ background: 'none',
213
+ cursor: is_download ? 'pointer' : 'not-allowed',
214
+ }}
215
+ onMouseEnter={e => (e.currentTarget.style.background = btnHover)}
216
+ onMouseLeave={e => (e.currentTarget.style.background = 'none')}
217
+ >
218
+ <Download className="w-4 h-4" style={{ color: disabledText }} />
219
+ </button>
220
+ </Tooltip>
221
+ )}
222
+ </div>
223
+ </li>
224
+ );
225
+ })}
226
+ </ul>
227
+ {files?.length > 2 && (
228
+ <div
229
+ className="w-full flex justify-center mt-[8px]"
230
+ onClick={() => {
231
+ setOpen(!open);
232
+ }}
233
+ >
234
+ {open ? (
235
+ <ArrowUpToLine className="cursor-pointer w-[16px] text-[#555]" />
236
+ ) : (
237
+ <ArrowDownToLine className="cursor-pointer w-[16px] text-[#555]" />
238
+ )}
239
+ </div>
240
+ )}
241
+ </div>
242
+ );
243
+ };
244
+
245
+ export default RetriveItem;