@gientech/modual 1.3.0 → 1.3.2

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 (308) hide show
  1. package/README.md +129 -129
  2. package/{dist/assets/mysql.svg → assets/MySQL.svg} +14 -14
  3. package/{dist/assets → assets}/database.svg +11 -11
  4. package/{src/modules/database/assets → assets}/database_add.svg +53 -53
  5. package/{dist/assets → assets}/database_connect.svg +66 -66
  6. package/{dist/assets → assets}/database_upload.svg +29 -29
  7. package/{dist/assets → assets}/defaultWeLogo.svg +14 -14
  8. package/{dist/assets/index-DIm7RgkM.js → assets/index-D-dGaGjW.js} +93 -279
  9. package/assets/index-ldqIbm0x.js +1289 -0
  10. package/assets/style.css +1 -0
  11. package/assets/style3.css +1 -0
  12. package/{dist/chat.js → chat.js} +78 -78
  13. package/database.js +20 -0
  14. package/{dist/databaseId.js → databaseId.js} +1 -1
  15. package/{dist/databaseTable.js → databaseTable.js} +1 -1
  16. package/{dist/modelManage.js → modelManage.js} +1 -1
  17. package/package.json +39 -83
  18. package/{dist/sensitive.js → sensitive.js} +1 -1
  19. package/{dist/streamFilesReader.js → streamFilesReader.js} +11 -11
  20. package/{dist/worker → worker}/pdf.worker.min.js +21 -21
  21. package/.editorconfig +0 -38
  22. package/.prettierignore +0 -16
  23. package/.prettierrc +0 -17
  24. package/USAGE.md +0 -191
  25. package/bash.exe.stackdump +0 -40
  26. package/components.json +0 -21
  27. package/dist/README.md +0 -129
  28. package/dist/assets/database_add.svg +0 -53
  29. package/dist/assets/index-Bpnc4tRH.js +0 -1284
  30. package/dist/assets/style.css +0 -1
  31. package/dist/assets/style3.css +0 -1
  32. package/dist/database.js +0 -20
  33. package/dist/package.json +0 -56
  34. package/doc_assets/2.png +0 -0
  35. package/doc_assets/demo.md +0 -27
  36. package/doc_assets/demos/dist-app/assets/index.Dh-ZAS9Z.css +0 -2
  37. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js +0 -23699
  38. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js.map +0 -1
  39. package/doc_assets/demos/dist-app/index.html +0 -14
  40. package/doc_assets/demos/dist-app/vite.svg +0 -1
  41. package/doc_assets/images/1.png +0 -0
  42. package/doc_assets/images/3.png +0 -0
  43. package/doc_assets/images/component-screenshot.png +0 -1
  44. package/doc_assets/install.md +0 -5
  45. package/eslint.config.js +0 -92
  46. package/index.html +0 -13
  47. package/postcss.config.cjs +0 -19
  48. package/public/vite.svg +0 -1
  49. package/public/worker/pdf.worker.min.js +0 -22
  50. package/scripts/README.md +0 -133
  51. package/scripts/build-demo.js +0 -88
  52. package/scripts/demo-selector.js +0 -216
  53. package/scripts/dev-demo.js +0 -76
  54. package/scripts/preview-demo.js +0 -130
  55. package/scripts/run-demo.bat +0 -34
  56. package/src/assets/img/downArrow.png +0 -0
  57. package/src/assets/img/excel.png +0 -0
  58. package/src/assets/img/img.png +0 -0
  59. package/src/assets/img/pdf.png +0 -0
  60. package/src/assets/img/ppt.png +0 -0
  61. package/src/assets/img/txt.png +0 -0
  62. package/src/assets/img/word.png +0 -0
  63. package/src/assets/login/homeBg.png +0 -0
  64. package/src/assets/login/left.jpg +0 -0
  65. package/src/assets/login/logoImg.png +0 -0
  66. package/src/examples/LoginPage/index.tsx +0 -18
  67. package/src/examples/chat/components/DrawerGraphPreview.tsx +0 -77
  68. package/src/examples/chat/index.tsx +0 -179
  69. package/src/examples/gientechStreamFilesReader/index.tsx +0 -1016
  70. package/src/examples/ragDatabaseDataPage/index.tsx +0 -36
  71. package/src/examples/ragDatabaseIdPage/index.tsx +0 -44
  72. package/src/examples/ragDatabasePage/index.tsx +0 -36
  73. package/src/examples/ragModelManagePage/index.tsx +0 -37
  74. package/src/examples/ragSearchPage/index.tsx +0 -0
  75. package/src/examples/ragSensitiveWordsPage/index.tsx +0 -32
  76. package/src/examples/streamFiles/index.tsx +0 -384
  77. package/src/lib_enter.ts +0 -38
  78. package/src/main.tsx +0 -5
  79. package/src/main.tsx.backup +0 -5
  80. package/src/modules/chat/Conversations/Item.tsx +0 -167
  81. package/src/modules/chat/Conversations/List.tsx +0 -143
  82. package/src/modules/chat/Conversations/groupByTime.ts +0 -39
  83. package/src/modules/chat/Conversations/index.tsx +0 -212
  84. package/src/modules/chat/constants.tsx +0 -33
  85. package/src/modules/chat/index.tsx +0 -1836
  86. package/src/modules/chat/types.ts +0 -17
  87. package/src/modules/database/CreateModal.tsx +0 -398
  88. package/src/modules/database/assets/Doris.png +0 -0
  89. package/src/modules/database/assets/PostgreSQL.png +0 -0
  90. package/src/modules/database/assets/SQLServer.png +0 -0
  91. package/src/modules/database/assets/database.svg +0 -11
  92. package/src/modules/database/assets/database_connect.svg +0 -66
  93. package/src/modules/database/assets/database_upload.svg +0 -29
  94. package/src/modules/database/assets/empty.png +0 -0
  95. package/src/modules/database/assets/mysql.svg +0 -14
  96. package/src/modules/database/index.tsx +0 -466
  97. package/src/modules/database/server.ts +0 -196
  98. package/src/modules/databaseId/CustomCom.tsx +0 -156
  99. package/src/modules/databaseId/EditConfig.tsx +0 -268
  100. package/src/modules/databaseId/UploadDrawer.tsx +0 -520
  101. package/src/modules/databaseId/assets/aiOptimize.svg +0 -10
  102. package/src/modules/databaseId/assets/empty.png +0 -0
  103. package/src/modules/databaseId/assets/template.svg +0 -6
  104. package/src/modules/databaseId/assets/upload.svg +0 -9
  105. package/src/modules/databaseId/assets/useTemp.svg +0 -6
  106. package/src/modules/databaseId/index.tsx +0 -734
  107. package/src/modules/databaseId/server.ts +0 -286
  108. package/src/modules/databaseId/style.css +0 -5
  109. package/src/modules/databaseTable/EditRowDrawer.tsx +0 -119
  110. package/src/modules/databaseTable/index.tsx +0 -357
  111. package/src/modules/databaseTable/server.ts +0 -180
  112. package/src/modules/headlessChat/constants.tsx +0 -32
  113. package/src/modules/headlessChat/index.tsx +0 -1065
  114. package/src/modules/headlessChat/types.ts +0 -23
  115. package/src/modules/login/components/Login/LoginBox/index.tsx +0 -102
  116. package/src/modules/login/components/Login/RegisterBox/index.tsx +0 -180
  117. package/src/modules/login/components/Login/index.tsx +0 -100
  118. package/src/modules/login/index.tsx +0 -106
  119. package/src/modules/login/style.css +0 -3
  120. package/src/modules/login/useServices.ts +0 -53
  121. package/src/modules/login/utils.ts +0 -42
  122. package/src/modules/modelManage/ConfigDrawer.tsx +0 -249
  123. package/src/modules/modelManage/assets/empty.png +0 -0
  124. package/src/modules/modelManage/const.ts +0 -50
  125. package/src/modules/modelManage/index.tsx +0 -439
  126. package/src/modules/modelManage/server.ts +0 -185
  127. package/src/modules/nodegraph/index.tsx +0 -1
  128. package/src/modules/search/assets/Icon-history.svg +0 -8
  129. package/src/modules/search/assets/answerAwartar.png +0 -0
  130. package/src/modules/search/assets/doc.png +0 -0
  131. package/src/modules/search/assets/genera.gif +0 -0
  132. package/src/modules/search/assets/icon-robot.svg +0 -9
  133. package/src/modules/search/assets/icon-search-bar.svg +0 -14
  134. package/src/modules/search/assets/icon-sub-title.svg +0 -3
  135. package/src/modules/search/assets/icon-title.svg +0 -9
  136. package/src/modules/search/assets/icon-zoomOut.svg +0 -9
  137. package/src/modules/search/assets/iconAi.svg +0 -9
  138. package/src/modules/search/assets/pdf.png +0 -0
  139. package/src/modules/search/assets/ppt.png +0 -0
  140. package/src/modules/search/assets/search.svg +0 -3
  141. package/src/modules/search/assets/selected.svg +0 -4
  142. package/src/modules/search/assets/txt.png +0 -0
  143. package/src/modules/search/assets/xls.png +0 -0
  144. package/src/modules/search/components/AssisSelect.tsx +0 -137
  145. package/src/modules/search/components/Editor/ChatViewEditor.tsx +0 -261
  146. package/src/modules/search/components/Editor/aichat.css +0 -1
  147. package/src/modules/search/components/Editor/constant.ts +0 -13
  148. package/src/modules/search/components/Editor/index.tsx +0 -113
  149. package/src/modules/search/components/Editor/plugins/autofomatRules.ts +0 -332
  150. package/src/modules/search/components/Editor/plugins/convertImgPlugins.tsx +0 -20
  151. package/src/modules/search/components/Editor/plugins/createIndexes.tsx +0 -38
  152. package/src/modules/search/components/Editor/plugins/displayer.ts +0 -298
  153. package/src/modules/search/components/Editor/plugins/imageClick.tsx +0 -32
  154. package/src/modules/search/components/Editor/plugins/myplugin.tsx +0 -98
  155. package/src/modules/search/components/Editor/ui/avatar.tsx +0 -19
  156. package/src/modules/search/components/Editor/ui/blockquote-element.tsx +0 -21
  157. package/src/modules/search/components/Editor/ui/button.tsx +0 -58
  158. package/src/modules/search/components/Editor/ui/calendar.tsx +0 -68
  159. package/src/modules/search/components/Editor/ui/caption.tsx +0 -46
  160. package/src/modules/search/components/Editor/ui/checkbox.tsx +0 -27
  161. package/src/modules/search/components/Editor/ui/code-block-combobox.tsx +0 -188
  162. package/src/modules/search/components/Editor/ui/code-block-element.css +0 -434
  163. package/src/modules/search/components/Editor/ui/code-block-element.tsx +0 -39
  164. package/src/modules/search/components/Editor/ui/code-leaf.tsx +0 -24
  165. package/src/modules/search/components/Editor/ui/code-line-element.tsx +0 -10
  166. package/src/modules/search/components/Editor/ui/code-syntax-leaf.tsx +0 -21
  167. package/src/modules/search/components/Editor/ui/column-element.tsx +0 -30
  168. package/src/modules/search/components/Editor/ui/column-group-element.tsx +0 -94
  169. package/src/modules/search/components/Editor/ui/command.tsx +0 -75
  170. package/src/modules/search/components/Editor/ui/comment-avatar.tsx +0 -22
  171. package/src/modules/search/components/Editor/ui/comment-create-form.tsx +0 -37
  172. package/src/modules/search/components/Editor/ui/comment-item.tsx +0 -74
  173. package/src/modules/search/components/Editor/ui/comment-leaf.tsx +0 -49
  174. package/src/modules/search/components/Editor/ui/comment-more-dropdown.tsx +0 -42
  175. package/src/modules/search/components/Editor/ui/comment-reply-items.tsx +0 -22
  176. package/src/modules/search/components/Editor/ui/comment-resolve-button.tsx +0 -32
  177. package/src/modules/search/components/Editor/ui/comment-value.tsx +0 -34
  178. package/src/modules/search/components/Editor/ui/comments-popover.tsx +0 -63
  179. package/src/modules/search/components/Editor/ui/date-element.tsx +0 -83
  180. package/src/modules/search/components/Editor/ui/dialog.tsx +0 -63
  181. package/src/modules/search/components/Editor/ui/draggable.tsx +0 -177
  182. package/src/modules/search/components/Editor/ui/dropdown-menu.tsx +0 -180
  183. package/src/modules/search/components/Editor/ui/emoji-input-element.tsx +0 -85
  184. package/src/modules/search/components/Editor/ui/excalidraw-element.tsx +0 -28
  185. package/src/modules/search/components/Editor/ui/fixed-toolbar-buttons.tsx +0 -76
  186. package/src/modules/search/components/Editor/ui/fixed-toolbar.tsx +0 -8
  187. package/src/modules/search/components/Editor/ui/floating-toolbar-buttons.tsx +0 -51
  188. package/src/modules/search/components/Editor/ui/floating-toolbar.tsx +0 -77
  189. package/src/modules/search/components/Editor/ui/heading-element.tsx +0 -48
  190. package/src/modules/search/components/Editor/ui/highlight-leaf.tsx +0 -17
  191. package/src/modules/search/components/Editor/ui/hr-element.tsx +0 -30
  192. package/src/modules/search/components/Editor/ui/icons.tsx +0 -267
  193. package/src/modules/search/components/Editor/ui/image-element.tsx +0 -74
  194. package/src/modules/search/components/Editor/ui/inline-combobox.tsx +0 -368
  195. package/src/modules/search/components/Editor/ui/input.tsx +0 -25
  196. package/src/modules/search/components/Editor/ui/insert-dropdown-menu.tsx +0 -218
  197. package/src/modules/search/components/Editor/ui/kbd-leaf.tsx +0 -20
  198. package/src/modules/search/components/Editor/ui/link-element.tsx +0 -29
  199. package/src/modules/search/components/Editor/ui/link-floating-toolbar.tsx +0 -161
  200. package/src/modules/search/components/Editor/ui/list-element.tsx +0 -30
  201. package/src/modules/search/components/Editor/ui/mark-toolbar-button.tsx +0 -24
  202. package/src/modules/search/components/Editor/ui/media-embed-element.tsx +0 -133
  203. package/src/modules/search/components/Editor/ui/media-popover.tsx +0 -97
  204. package/src/modules/search/components/Editor/ui/mention-element.tsx +0 -43
  205. package/src/modules/search/components/Editor/ui/mention-input-element.tsx +0 -141
  206. package/src/modules/search/components/Editor/ui/mode-dropdown-menu.tsx +0 -93
  207. package/src/modules/search/components/Editor/ui/more-dropdown-menu.tsx +0 -67
  208. package/src/modules/search/components/Editor/ui/paragraph-element.tsx +0 -4
  209. package/src/modules/search/components/Editor/ui/placeholder.tsx +0 -52
  210. package/src/modules/search/components/Editor/ui/popover.tsx +0 -32
  211. package/src/modules/search/components/Editor/ui/resizable.tsx +0 -66
  212. package/src/modules/search/components/Editor/ui/separator.tsx +0 -25
  213. package/src/modules/search/components/Editor/ui/style.less +0 -12
  214. package/src/modules/search/components/Editor/ui/table-cell-element.tsx +0 -143
  215. package/src/modules/search/components/Editor/ui/table-element.tsx +0 -243
  216. package/src/modules/search/components/Editor/ui/table-row-element.tsx +0 -22
  217. package/src/modules/search/components/Editor/ui/tableValue.tsx +0 -135
  218. package/src/modules/search/components/Editor/ui/todo-list-element.tsx +0 -43
  219. package/src/modules/search/components/Editor/ui/toggle-element.tsx +0 -31
  220. package/src/modules/search/components/Editor/ui/toolbar.tsx +0 -157
  221. package/src/modules/search/components/Editor/ui/tooltip.tsx +0 -65
  222. package/src/modules/search/components/Editor/ui/turn-into-dropdown-menu.tsx +0 -160
  223. package/src/modules/search/components/Editor/ui/with-draggables.tsx +0 -175
  224. package/src/modules/search/components/FileList.tsx +0 -287
  225. package/src/modules/search/components/ImageGroupView/index.tsx +0 -85
  226. package/src/modules/search/components/ResultContent.tsx +0 -232
  227. package/src/modules/search/components/SearchInput.tsx +0 -232
  228. package/src/modules/search/components/SearchLanding.tsx +0 -74
  229. package/src/modules/search/components/SearchView.tsx +0 -563
  230. package/src/modules/search/components/SimpleEditor.tsx +0 -158
  231. package/src/modules/search/components/SimpleFileList.tsx +0 -215
  232. package/src/modules/search/index.tsx +0 -10
  233. package/src/modules/search/reademe.md +0 -1
  234. package/src/modules/search/servers/apis.tsx +0 -19
  235. package/src/modules/search/servers/index.ts +0 -184
  236. package/src/modules/search/style.less +0 -503
  237. package/src/modules/search/type.ts +0 -22
  238. package/src/modules/search/utils.ts +0 -34
  239. package/src/modules/sensitive/index.tsx +0 -313
  240. package/src/modules/sensitive/server.ts +0 -122
  241. package/src/modules/streamFilesReader/GientechStreamReader.tsx +0 -1555
  242. package/src/modules/streamFilesReader/components/Header/Toolbar.tsx +0 -0
  243. package/src/modules/streamFilesReader/components/Header/index.tsx +0 -297
  244. package/src/modules/streamFilesReader/index.tsx +0 -3
  245. package/src/style.css +0 -6
  246. package/src/type.d.ts +0 -0
  247. package/src/utils/commonFn.tsx +0 -111
  248. package/src/utils/gientechCommon/components/AppError.tsx +0 -32
  249. package/src/utils/gientechCommon/components/AppLoading.tsx +0 -75
  250. package/src/utils/gientechCommon/components/DeleteModal.tsx +0 -75
  251. package/src/utils/gientechCommon/components/DisplayError.tsx +0 -33
  252. package/src/utils/gientechCommon/components/DisplayLoading.tsx +0 -38
  253. package/src/utils/gientechCommon/components/FeedBackModal.tsx +0 -310
  254. package/src/utils/gientechCommon/components/FileCardCommon.tsx +0 -82
  255. package/src/utils/gientechCommon/components/FileManager/index.tsx +0 -390
  256. package/src/utils/gientechCommon/components/FileManager/style.css +0 -5
  257. package/src/utils/gientechCommon/components/Messages/GientechNewChatWelcome.tsx +0 -296
  258. package/src/utils/gientechCommon/components/Messages/ReferenceCard.tsx +0 -339
  259. package/src/utils/gientechCommon/components/Messages/RetriveItem.tsx +0 -245
  260. package/src/utils/gientechCommon/components/Messages/WebRetriveItem.tsx +0 -209
  261. package/src/utils/gientechCommon/components/Messages/defaultBot.png +0 -0
  262. package/src/utils/gientechCommon/components/Messages/defaultStyleSet.tsx +0 -148
  263. package/src/utils/gientechCommon/components/Messages/defaultWeLogo.svg +0 -14
  264. package/src/utils/gientechCommon/components/RenameModal.tsx +0 -86
  265. package/src/utils/gientechCommon/components/style.less +0 -11
  266. package/src/utils/gientechCommon/configs/commonConfig.ts +0 -2
  267. package/src/utils/gientechCommon/configs/senderConfig.ts +0 -0
  268. package/src/utils/gientechCommon/configs/stylesConfig.ts +0 -142
  269. package/src/utils/gientechCommon/hooks/AichatUseController.tsx +0 -339
  270. package/src/utils/gientechCommon/slate/converters/deserializers.ts +0 -763
  271. package/src/utils/gientechCommon/slate/converters/mockData.ts +0 -232
  272. package/src/utils/gientechCommon/slate/converters/slateConverters.ts +0 -258
  273. package/src/utils/gientechCommon/slate/richElements/index.tsx +0 -499
  274. package/src/utils/gientechCommon/utils/request.ts +0 -37
  275. package/src/utils/gientechCommon/utils/serverFn.ts +0 -172
  276. package/src/utils/index.tsx +0 -126
  277. package/src/utils/testconfigs/demologin/index.tsx +0 -32
  278. package/src/utils/testconfigs/index.ts +0 -53
  279. package/src/vite-env.d.ts +0 -11
  280. package/stats.html +0 -4949
  281. package/tailwind.config.js +0 -170
  282. package/tsconfig.app.json +0 -30
  283. package/tsconfig.app.tsbuildinfo +0 -11
  284. package/tsconfig.json +0 -13
  285. package/tsconfig.node.json +0 -22
  286. package/tsconfig.node.tsbuildinfo +0 -1
  287. package/vite.config.ts +0 -177
  288. package/workflows/release.yml +0 -60
  289. /package/{dist/assets → assets}/Doris.png +0 -0
  290. /package/{dist/assets → assets}/PostgreSQL.png +0 -0
  291. /package/{dist/assets → assets}/SQLServer.png +0 -0
  292. /package/{dist/assets → assets}/_commonjsHelpers-gnU0ypJ3.js +0 -0
  293. /package/{dist/assets → assets}/circle-alert-g2Y6zAjt.js +0 -0
  294. /package/{dist/assets → assets}/empty.png +0 -0
  295. /package/{dist/assets → assets}/index-CEK88UzR.js +0 -0
  296. /package/{dist/assets → assets}/index-CpW6Dhpp.js +0 -0
  297. /package/{dist/assets → assets}/plus-omCUN0e3.js +0 -0
  298. /package/{dist/assets → assets}/style2.css +0 -0
  299. /package/{dist/assets → assets}/styled-components.browser.esm-DPkS13KC.js +0 -0
  300. /package/{dist/assets → assets}/x-vPcWt3fC.js +0 -0
  301. /package/{dist/chat.d.ts → chat.d.ts} +0 -0
  302. /package/{dist/database.d.ts → database.d.ts} +0 -0
  303. /package/{dist/databaseId.d.ts → databaseId.d.ts} +0 -0
  304. /package/{dist/databaseTable.d.ts → databaseTable.d.ts} +0 -0
  305. /package/{dist/modelManage.d.ts → modelManage.d.ts} +0 -0
  306. /package/{dist/sensitive.d.ts → sensitive.d.ts} +0 -0
  307. /package/{dist/streamFilesReader.d.ts → streamFilesReader.d.ts} +0 -0
  308. /package/{dist/vite.svg → vite.svg} +0 -0
@@ -1,167 +0,0 @@
1
- import React, { useMemo, useState } from 'react';
2
- import { Dropdown } from 'antd';
3
- import type { MenuProps } from 'antd';
4
- import { MoreHorizontal, Edit2, Trash2 } from 'lucide-react';
5
- import { ListItemType } from '.';
6
- import dayjs from 'dayjs';
7
-
8
- export interface GientechConversationBarItemProps {
9
- isActive: boolean;
10
- isDisabled: boolean;
11
- data: ListItemType;
12
- isNew: boolean;
13
- eventsEmit?: (type: string, data?: any) => void;
14
- styles?: any;
15
- assistantList?: any[];
16
- }
17
-
18
- export function GientechConversationBarItem({ isActive, isNew, isDisabled, data, eventsEmit, styles = {}, assistantList = [] }: GientechConversationBarItemProps) {
19
- const [hovered, setHovered] = useState(false);
20
- const colors = styles?.colors || {};
21
-
22
- // 由 configId 匹配助手名称(优先用 name,其次 configJson.config_name)
23
- const assistantName = useMemo(() => {
24
- const id = data?.configId;
25
- if (!id || !assistantList || assistantList.length === 0) return '未选择助手';
26
- const found = assistantList.find((a: any) => String(a?.id) === String(id));
27
- if (!found) return '未选择助手';
28
- if (found?.name) return found.name;
29
- try {
30
- const cj = typeof found.configJson === 'string' ? JSON.parse(found.configJson) : found.configJson;
31
- return cj?.config_name || '未选择助手';
32
- } catch {
33
- return '未选择助手';
34
- }
35
- }, [assistantList, data?.configId]);
36
-
37
- // antd v5+ menu items
38
- const menuItems: MenuProps['items'] = [
39
- {
40
- key: 'rename',
41
- icon: <Edit2 size={12} />,
42
- label: '重命名',
43
- onClick: (info) => {
44
- info.domEvent.stopPropagation();
45
- eventsEmit&&eventsEmit('conversations:rename_icon_clicked', data);
46
- },
47
- },
48
- {
49
- key: 'delete',
50
- icon: <Trash2 size={12} />,
51
- label: '删除',
52
- danger: true,
53
- onClick: (info) => {
54
- info.domEvent.stopPropagation();
55
- eventsEmit&&eventsEmit('conversations:delete_icon_clicked', data);
56
- },
57
- },
58
- ];
59
-
60
-
61
- // 动态样式
62
- const itemBg = isActive
63
- ? colors.activeItemBg || '#f0f4ff'
64
- : hovered
65
- ? colors.itemHoverBg || '#f5f7fa'
66
- : colors.itemBg || 'transparent';
67
- const itemText = isActive
68
- ? colors.activeItemText || colors.primary || '#0122ff'
69
- : colors.itemText || '#333';
70
- const borderColor = isActive
71
- ? colors.activeItemBorder || colors.primary || '#0122ff'
72
- : 'transparent';
73
-
74
- // 格式化时间显示
75
- const formatTime = (timestamp: number) => {
76
- const now = dayjs();
77
- const messageTime = dayjs(timestamp);
78
- const isToday = now.isSame(messageTime, 'day');
79
-
80
- if (isToday) {
81
- return messageTime.format('HH:mm');
82
- } else {
83
- return messageTime.format('MM-DD HH:mm');
84
- }
85
- };
86
-
87
- return (
88
- <div
89
- className={`flex relative items-center justify-between mb-2 px-4 py-3 rounded-md transition-colors cursor-pointer select-none`}
90
- onClick={() => !isDisabled && eventsEmit&&eventsEmit('conversation:item_click', data)}
91
- onMouseEnter={() => setHovered(true)}
92
- onMouseLeave={() => setHovered(false)}
93
- style={{
94
- minHeight: 48,
95
- background: itemBg,
96
- color: itemText,
97
- border: `1px solid ${borderColor}`,
98
- ...styles.item,
99
- opacity: isDisabled ? 0.5 : 1,
100
- }}
101
- >
102
- <div className="flex flex-col gap-y-2 flex-1 min-w-0">
103
- {/* 主标题 */}
104
- <span
105
- className="truncate text-sm max-w-[160px] font-medium"
106
- title={data.label || '未命名会话'}
107
- style={{
108
- color: itemText,
109
- fontSize: '14px',
110
- lineHeight: '1.4'
111
- }}
112
- >
113
- {data.label || '未命名会话'}
114
- </span>
115
-
116
- {/* 副标题和时间 */}
117
- <div className="flex items-center justify-between gap-2">
118
- <span
119
- className="text-xs truncate flex-1"
120
- style={{
121
- color: isActive ? colors.activeItemTextSecondary || '#666' : colors.itemTextSecondary || '#666',
122
- fontSize: '12px',
123
- lineHeight: '1.3'
124
- }}
125
- >
126
- {assistantName}
127
- </span>
128
-
129
- {/* 时间显示 */}
130
- {data.gmtModified && (
131
- <span
132
- className="text-xs flex-shrink-0"
133
- style={{
134
- color: isActive ? colors.activeItemTextSecondary || '#999' : colors.itemTextSecondary || '#999',
135
- fontSize: '12px',
136
- lineHeight: '1.3'
137
- }}
138
- >
139
- {formatTime(data.gmtModified)}
140
- </span>
141
- )}
142
- </div>
143
- </div>
144
-
145
- {/* 省略号菜单 */}
146
- {!isDisabled && hovered && !isNew && (
147
- <div className="absolute top-2 right-3">
148
- <Dropdown
149
- menu={{ items: menuItems }}
150
- trigger={['click']}
151
- placement="bottomRight"
152
- >
153
- <MoreHorizontal
154
- size={16}
155
- className="text-gray-600 hover:text-gray-800"
156
- style={{
157
- cursor: 'pointer',
158
- color: isActive ? colors.activeItemTextSecondary || '#999' : colors.itemTextSecondary || '#999'
159
- }}
160
- onClick={(e: React.MouseEvent) => e.stopPropagation()}
161
- />
162
- </Dropdown>
163
- </div>
164
- )}
165
- </div>
166
- );
167
- }
@@ -1,143 +0,0 @@
1
- import React, { useMemo, useRef, useEffect } from 'react';
2
- import { VariableSizeList as List } from 'react-window';
3
- import { GientechConversationBarItem } from './Item';
4
- import { groupConversationsByTime, ListItemType } from './groupByTime';
5
- import { Flipper, Flipped } from 'react-flip-toolkit';
6
-
7
- export interface GientechConversationBarListProps {
8
- data: ListItemType[];
9
- activedItem: string;
10
- onChange?: (sessionId: string) => void;
11
- onDelete?: (item: ListItemType) => void;
12
- sortRules?: { label: string; dayPeriod: number }[];
13
- eventsEmit?: (eventName: string, data?: any) => void;
14
- assistantList?: any[];
15
- height?: number;
16
- styles?: any;
17
- }
18
-
19
- export function GientechConversationBarList(
20
- props: GientechConversationBarListProps & { styles?: any }
21
- ) {
22
- const {
23
- data,
24
- activedItem,
25
- onChange,
26
- onDelete,
27
- sortRules = [{ label: '当天', dayPeriod: 1 }],
28
- eventsEmit,
29
- assistantList,
30
- height = 400,
31
- styles = {},
32
- } = props;
33
-
34
- // 用于动画的 flipKey,包含 sessionId 和 gmtModified
35
- const flipKey = data.map(i => i.sessionId + '-' + i.gmtModified).join(',');
36
-
37
- const flatList = useMemo(() => {
38
- const rules = sortRules.length > 0 ? sortRules : [{ label: '当天', dayPeriod: 1 }];
39
- const sortedList = groupConversationsByTime(data, rules);
40
- const hasOtherOnly = rules.every(
41
- rule => !sortedList[rule.label] || sortedList[rule.label].length === 0
42
- );
43
- const arr: { type: 'group' | 'item'; label?: string; data?: ListItemType }[] = [];
44
- rules.forEach(rule => {
45
- if (sortedList[rule.label] && sortedList[rule.label].length > 0) {
46
- arr.push({ type: 'group', label: rule.label });
47
- sortedList[rule.label].forEach(i => arr.push({ type: 'item', data: i }));
48
- }
49
- });
50
- if (sortedList.other.length > 0 && !hasOtherOnly) {
51
- arr.push({ type: 'group', label: '其他' });
52
- sortedList.other.forEach(i => arr.push({ type: 'item', data: i }));
53
- }
54
- if (hasOtherOnly && sortedList.other.length > 0) {
55
- sortedList.other.forEach(i => arr.push({ type: 'item', data: i }));
56
- }
57
- return arr;
58
- }, [data, sortRules, flipKey]);
59
-
60
- const ITEM_HEIGHT = 56;
61
- const ITEM_GAP = 14;
62
-
63
- const getItemSize = (index: number) =>
64
- flatList[index].type === 'group' ? 32 : ITEM_HEIGHT + ITEM_GAP;
65
-
66
- // 新增:List ref
67
- const listRef = useRef<any>(null);
68
- // 新增:当前激活会话在 flatList 的 index
69
- const activeIndex = useMemo(() => {
70
- return flatList.findIndex(item => item.type === 'item' && item.data?.sessionId === activedItem);
71
- }, [flatList, activedItem]);
72
- // 新增:flatList 里第一个会话项的 index
73
- const firstItemIndex = useMemo(() => {
74
- return flatList.findIndex(item => item.type === 'item');
75
- }, [flatList]);
76
- // 新增:只有激活会话是第一个 item 时才滚动
77
- useEffect(() => {
78
- if (activeIndex > -1 && activeIndex === firstItemIndex && listRef.current) {
79
- listRef.current.scrollToItem(activeIndex, 'start');
80
- }
81
- }, [activeIndex, firstItemIndex, flatList.length]);
82
-
83
- // 修复:删除/数据变化/flipKey变化后强制刷新缓存,防止重叠
84
- useEffect(() => {
85
- if (listRef.current) {
86
- listRef.current.resetAfterIndex(0, true);
87
- }
88
- }, [flipKey]);
89
-
90
- // hooks全部调用完后再判断是否为空
91
- if (flatList.length === 0) {
92
- return <div className="text-center text-zinc-400 py-8">暂无会话</div>;
93
- }
94
-
95
- const colors = styles?.colors || {};
96
-
97
- return (
98
- <Flipper flipKey={flipKey} spring={{ stiffness: 180, damping: 18 }}>
99
- <List
100
- ref={listRef}
101
- height={height}
102
- width={'100%'}
103
-
104
- itemCount={flatList.length}
105
- itemSize={getItemSize}
106
- itemKey={index => {
107
- const item = flatList[index];
108
- return item.type === 'item' ? item.data!.sessionId : `group-${item.label}`;
109
- }}
110
- style={{ overflowX: 'hidden' }}
111
- >
112
- {({ index, style }) => {
113
- const item = flatList[index];
114
- if (item.type === 'group') {
115
- return (
116
- <div
117
- style={{ ...style, background: colors.groupBg || 'white', zIndex: 1 }}
118
- className="pt-2 pb-1 px-[28px] py-[2px] text-xs text-gray-400"
119
- >
120
- {item.label}
121
- </div>
122
- );
123
- }
124
- return (
125
- <Flipped key={item.data!.sessionId} flipId={item.data!.sessionId}>
126
- <div style={style} className='px-[12px] py-[2px]'>
127
- <GientechConversationBarItem
128
- isActive={activedItem === item.data!.sessionId}
129
- isDisabled={false}
130
- isNew={item.data!.isNew}
131
- data={item.data!}
132
- eventsEmit={eventsEmit}
133
- assistantList={assistantList}
134
- styles={styles}
135
- />
136
- </div>
137
- </Flipped>
138
- );
139
- }}
140
- </List>
141
- </Flipper>
142
- );
143
- }
@@ -1,39 +0,0 @@
1
- export interface ListItemType {
2
- label: string;
3
- sessionId: string;
4
- gmtModified: number;
5
- [key: string]: any;
6
- }
7
- export interface SortRule {
8
- label: string;
9
- dayPeriod: number;
10
- }
11
-
12
- /**
13
- * 按时间分组会话数据
14
- * @param data 会话列表
15
- * @param rules 分组规则
16
- * @returns 分组后的对象
17
- */
18
- export function groupConversationsByTime(
19
- data: ListItemType[],
20
- rules: SortRule[] = [{ label: '当天', dayPeriod: 1 }]
21
- ): Record<string, ListItemType[]> {
22
- const now = new Date();
23
- const sortedList: Record<string, ListItemType[]> = { other: [] };
24
- data.forEach(item => {
25
- const itemDate = new Date(item.gmtModified);
26
- const daysDifference = Math.floor((+now - +itemDate) / (1000 * 60 * 60 * 24));
27
- let found = false;
28
- for (const rule of rules) {
29
- if (daysDifference <= rule.dayPeriod) {
30
- if (!sortedList[rule.label]) sortedList[rule.label] = [];
31
- sortedList[rule.label].push(item);
32
- found = true;
33
- break;
34
- }
35
- }
36
- if (!found) sortedList.other.push(item);
37
- });
38
- return sortedList;
39
- }
@@ -1,212 +0,0 @@
1
- import React, { useState, useMemo, useEffect, useRef } from 'react';
2
-
3
- import { GientechConversationBarList } from './List';
4
- import { Plus, Search, X } from 'lucide-react';
5
- export interface ListItemType {
6
- label: string;
7
- sessionId: string;
8
- gmtModified: number;
9
- [key: string]: any;
10
- }
11
- export interface GientechConversationPanelProps {
12
- data: ListItemType[];
13
- sortRules?: { label: string; dayPeriod: number }[];
14
- activedItem: string;
15
- eventsEmit?: (eventName: string, data?: any) => void;
16
- assistantList?: any[];
17
- styles?: any; // 新增,支持动态主题样式
18
- }
19
-
20
- // Header美化:分区更明显,搜索框更圆润,按钮更突出,底部分割线阴影
21
- const Header: React.FC<{
22
- value: string;
23
- setSearch: (v: string) => void;
24
- eventsEmit?: (eventName: string, data?: any) => void;
25
- style?: React.CSSProperties;
26
- styles?: any;
27
- }> = ({ value, eventsEmit, setSearch, style, styles: themeStyles = {} }) => {
28
- const colors = themeStyles.colors || {};
29
- const radius = themeStyles.radius || '12px';
30
- const border = colors.border || '#e5e7eb';
31
- const primary = colors.primary || '#2563eb';
32
- const headerBg = themeStyles.headerBg || colors.sidebarBg || colors.background || '#fff';
33
- const [searchOpen, setSearchOpen] = React.useState(false);
34
- return (
35
- <div
36
- className="flex items-center gap-2 px-4 py-3 sticky top-0 z-10 min-w-0"
37
- style={{
38
- ...style,
39
- background: headerBg,
40
- // borderBottom: `1px solid ${border}`,
41
- borderTopLeftRadius: radius,
42
- borderTopRightRadius: radius,
43
- }}
44
- >
45
- {/* 新建按钮:通过宽度/透明度动画隐藏,保持DOM稳定 */}
46
- <button
47
- className="border-none flex items-center justify-center"
48
- onClick={() => {
49
- // 新建会话后保持默认布局
50
- setSearchOpen(false);
51
- eventsEmit && eventsEmit('conversation:create');
52
- }}
53
- title="新建会话"
54
- style={{
55
- height: 42,
56
- borderRadius: '90px',
57
- background: primary,
58
- color: colors.buttonText || '#fff',
59
- fontWeight: 600,
60
- boxShadow: themeStyles.shadow || '0 2px 8px 0 rgba(0,0,0,0.04)',
61
- padding: searchOpen ? '0 0' : '0 14px',
62
- minWidth: searchOpen ? 0 : 180,
63
- width: searchOpen ? 0 : undefined,
64
- opacity: searchOpen ? 0 : 1,
65
- overflow: 'hidden',
66
- flexShrink: 0,
67
- transition: 'width .22s ease, min-width .22s ease, padding .22s ease, opacity .18s ease',
68
- }}
69
- >
70
- <div className="flex items-center gap-2">
71
- <Plus size={18} />
72
- <span className="text-sm">新建对话</span>
73
- </div>
74
- </button>
75
-
76
- {/* 搜索区:折叠图标/展开输入框 */}
77
- {!searchOpen ? (
78
- <button
79
- className="ml-auto flex items-center justify-center transition-colors"
80
- style={{
81
- width: 36,
82
- height: 36,
83
- borderRadius: '90px',
84
- // background: colors.inputBg || '#f4f4f5',
85
- border: `1px solid ${border}`,
86
- color: primary || '#222',
87
- flexShrink: 0,
88
- }}
89
- onClick={() => setSearchOpen(true)}
90
- title="搜索"
91
- >
92
- <Search size={18} />
93
- </button>
94
- ) : (
95
- <div className="flex-1 min-w-0 flex items-center gap-2">
96
- <input
97
- className="flex-1 px-3 py-2 text-sm transition-all"
98
- placeholder="搜索会话..."
99
- value={value}
100
- onChange={e => setSearch(e.target.value)}
101
- onBlur={() => setSearchOpen(false)}
102
- onKeyDown={e => {
103
- if (e.key === 'Enter') {
104
- setSearchOpen(false);
105
- }
106
- }}
107
- style={{
108
- minWidth: 0,
109
- width: '100%',
110
- maxWidth: '100%',
111
- borderRadius: radius,
112
- background: colors.inputBg || '#f4f4f5',
113
- border: `1px solid ${border}`,
114
- color: colors.text || '#222',
115
- outline: 'none',
116
- }}
117
- />
118
- <button
119
- className="flex items-center justify-center transition-colors"
120
- style={{
121
- width: 36,
122
- height: 36,
123
- borderRadius: '90px',
124
- // background: colors.inputBg || '#f4f4f5',
125
- border: `1px solid ${border}`,
126
- color: colors.text || '#222',
127
- flexShrink: 0,
128
- }}
129
- onClick={() => setSearchOpen(false)}
130
- title="收起搜索"
131
- >
132
- <X size={16} />
133
- </button>
134
- </div>
135
- )}
136
- </div>
137
- );
138
- };
139
-
140
- export default function GientechConversationPanel(props: GientechConversationPanelProps) {
141
- const { data, sortRules, activedItem,eventsEmit,assistantList, styles = {} } = props;
142
- const [search, setSearch] = useState('');
143
-
144
- // 本地搜索过滤
145
- const filteredData = useMemo(() => {
146
- if (!search) return data;
147
- return data.filter(item => (item.label || '未命名会话').toLowerCase().includes(search.toLowerCase()));
148
- }, [data, search]);
149
-
150
- // 新增:对 filteredData 按 gmtModified 倒序排序
151
- const sortedData = useMemo(() => {
152
- return [...filteredData].sort((a, b) => new Date(b.gmtModified).getTime() - new Date(a.gmtModified).getTime());
153
- }, [filteredData]);
154
-
155
- // 动态获取会话列表容器高度
156
- const listContainerRef = useRef<HTMLDivElement>(null);
157
- const [listHeight, setListHeight] = useState(400);
158
- useEffect(() => {
159
- function updateHeight() {
160
- if (listContainerRef.current) {
161
- setListHeight(listContainerRef.current.clientHeight);
162
- }
163
- }
164
- updateHeight();
165
- window.addEventListener('resize', updateHeight);
166
- return () => window.removeEventListener('resize', updateHeight);
167
- }, []);
168
-
169
- // 主题色提取
170
- const colors = styles?.colors || {};
171
- const radius = styles?.radius || '12px';
172
- const shadow = styles?.shadow || '0 4px 24px 0 rgba(0,0,0,0.06)';
173
- const border = colors.border || '#e5e7eb';
174
- const sidebarBg = colors.sidebarBg || colors.background || '#EAEEFF';
175
- const textColor = colors.text || '#222';
176
-
177
- return (
178
- <div
179
- className="h-full flex flex-col overflow-y-hidden"
180
- style={{
181
- background: sidebarBg,
182
- color: textColor,
183
- // borderRadius: radius,
184
- boxShadow: shadow,
185
- border: `1px solid ${border}`,
186
- ...styles.container,
187
- }}
188
- >
189
- {/* Header 区域美化 */}
190
- <Header value={search} setSearch={setSearch} eventsEmit={eventsEmit} style={styles.header} styles={styles} />
191
- {/* 会话列表区域,内容溢出时顶部有阴影提示 */}
192
- <div className="flex-1 min-h-0 relative" ref={listContainerRef} style={styles.list}>
193
- <GientechConversationBarList
194
- eventsEmit={eventsEmit}
195
- data={sortedData}
196
- assistantList={assistantList}
197
- activedItem={activedItem}
198
- sortRules={sortRules}
199
- height={listHeight}
200
- styles={styles}
201
- />
202
- {/* 顶部阴影提示 */}
203
- <div
204
- className="pointer-events-none absolute left-0 right-0 top-0 h-3 z-20"
205
- style={{
206
- background: `linear-gradient(to bottom, ${sidebarBg}cc, transparent)`
207
- }}
208
- />
209
- </div>
210
- </div>
211
- );
212
- }
@@ -1,33 +0,0 @@
1
- import { Icon } from '@mxmweb/zui';
2
-
3
- export const DefaultSenderConfig = {
4
- actions: [
5
- {
6
- icon: <Icon type='rag/folder' size={18} />,
7
- name: 'history',
8
- badgeCount: 0,
9
- },
10
- ],
11
-
12
- switchs: [
13
- {
14
- label: '联网搜索',
15
- name: 'netSearch',
16
- type: 'checkbox',
17
- defaultValue: false,
18
- enabled: true,
19
- icon: <Icon type='rag/url' size={12} />,
20
- },
21
- {
22
- label: '推理思考',
23
- name: 'reasoning',
24
- type: 'checkbox',
25
- defaultValue: false,
26
- enabled: true,
27
- icon: <Icon type='rag/think' size={12} />,
28
- },
29
- ],
30
- };
31
-
32
- export const MaxHistoryChatDisplay = 5000;
33
- export const MaxHistoryItemDisplay = 3000;