@gientech/modual 1.3.0 → 1.3.1

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 (307) 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/{dist/assets/index-Bpnc4tRH.js → assets/index-DPUOncCt.js} +91 -86
  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/style.css +0 -1
  30. package/dist/assets/style3.css +0 -1
  31. package/dist/database.js +0 -20
  32. package/dist/package.json +0 -56
  33. package/doc_assets/2.png +0 -0
  34. package/doc_assets/demo.md +0 -27
  35. package/doc_assets/demos/dist-app/assets/index.Dh-ZAS9Z.css +0 -2
  36. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js +0 -23699
  37. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js.map +0 -1
  38. package/doc_assets/demos/dist-app/index.html +0 -14
  39. package/doc_assets/demos/dist-app/vite.svg +0 -1
  40. package/doc_assets/images/1.png +0 -0
  41. package/doc_assets/images/3.png +0 -0
  42. package/doc_assets/images/component-screenshot.png +0 -1
  43. package/doc_assets/install.md +0 -5
  44. package/eslint.config.js +0 -92
  45. package/index.html +0 -13
  46. package/postcss.config.cjs +0 -19
  47. package/public/vite.svg +0 -1
  48. package/public/worker/pdf.worker.min.js +0 -22
  49. package/scripts/README.md +0 -133
  50. package/scripts/build-demo.js +0 -88
  51. package/scripts/demo-selector.js +0 -216
  52. package/scripts/dev-demo.js +0 -76
  53. package/scripts/preview-demo.js +0 -130
  54. package/scripts/run-demo.bat +0 -34
  55. package/src/assets/img/downArrow.png +0 -0
  56. package/src/assets/img/excel.png +0 -0
  57. package/src/assets/img/img.png +0 -0
  58. package/src/assets/img/pdf.png +0 -0
  59. package/src/assets/img/ppt.png +0 -0
  60. package/src/assets/img/txt.png +0 -0
  61. package/src/assets/img/word.png +0 -0
  62. package/src/assets/login/homeBg.png +0 -0
  63. package/src/assets/login/left.jpg +0 -0
  64. package/src/assets/login/logoImg.png +0 -0
  65. package/src/examples/LoginPage/index.tsx +0 -18
  66. package/src/examples/chat/components/DrawerGraphPreview.tsx +0 -77
  67. package/src/examples/chat/index.tsx +0 -179
  68. package/src/examples/gientechStreamFilesReader/index.tsx +0 -1016
  69. package/src/examples/ragDatabaseDataPage/index.tsx +0 -36
  70. package/src/examples/ragDatabaseIdPage/index.tsx +0 -44
  71. package/src/examples/ragDatabasePage/index.tsx +0 -36
  72. package/src/examples/ragModelManagePage/index.tsx +0 -37
  73. package/src/examples/ragSearchPage/index.tsx +0 -0
  74. package/src/examples/ragSensitiveWordsPage/index.tsx +0 -32
  75. package/src/examples/streamFiles/index.tsx +0 -384
  76. package/src/lib_enter.ts +0 -38
  77. package/src/main.tsx +0 -5
  78. package/src/main.tsx.backup +0 -5
  79. package/src/modules/chat/Conversations/Item.tsx +0 -167
  80. package/src/modules/chat/Conversations/List.tsx +0 -143
  81. package/src/modules/chat/Conversations/groupByTime.ts +0 -39
  82. package/src/modules/chat/Conversations/index.tsx +0 -212
  83. package/src/modules/chat/constants.tsx +0 -33
  84. package/src/modules/chat/index.tsx +0 -1836
  85. package/src/modules/chat/types.ts +0 -17
  86. package/src/modules/database/CreateModal.tsx +0 -398
  87. package/src/modules/database/assets/Doris.png +0 -0
  88. package/src/modules/database/assets/PostgreSQL.png +0 -0
  89. package/src/modules/database/assets/SQLServer.png +0 -0
  90. package/src/modules/database/assets/database.svg +0 -11
  91. package/src/modules/database/assets/database_connect.svg +0 -66
  92. package/src/modules/database/assets/database_upload.svg +0 -29
  93. package/src/modules/database/assets/empty.png +0 -0
  94. package/src/modules/database/assets/mysql.svg +0 -14
  95. package/src/modules/database/index.tsx +0 -466
  96. package/src/modules/database/server.ts +0 -196
  97. package/src/modules/databaseId/CustomCom.tsx +0 -156
  98. package/src/modules/databaseId/EditConfig.tsx +0 -268
  99. package/src/modules/databaseId/UploadDrawer.tsx +0 -520
  100. package/src/modules/databaseId/assets/aiOptimize.svg +0 -10
  101. package/src/modules/databaseId/assets/empty.png +0 -0
  102. package/src/modules/databaseId/assets/template.svg +0 -6
  103. package/src/modules/databaseId/assets/upload.svg +0 -9
  104. package/src/modules/databaseId/assets/useTemp.svg +0 -6
  105. package/src/modules/databaseId/index.tsx +0 -734
  106. package/src/modules/databaseId/server.ts +0 -286
  107. package/src/modules/databaseId/style.css +0 -5
  108. package/src/modules/databaseTable/EditRowDrawer.tsx +0 -119
  109. package/src/modules/databaseTable/index.tsx +0 -357
  110. package/src/modules/databaseTable/server.ts +0 -180
  111. package/src/modules/headlessChat/constants.tsx +0 -32
  112. package/src/modules/headlessChat/index.tsx +0 -1065
  113. package/src/modules/headlessChat/types.ts +0 -23
  114. package/src/modules/login/components/Login/LoginBox/index.tsx +0 -102
  115. package/src/modules/login/components/Login/RegisterBox/index.tsx +0 -180
  116. package/src/modules/login/components/Login/index.tsx +0 -100
  117. package/src/modules/login/index.tsx +0 -106
  118. package/src/modules/login/style.css +0 -3
  119. package/src/modules/login/useServices.ts +0 -53
  120. package/src/modules/login/utils.ts +0 -42
  121. package/src/modules/modelManage/ConfigDrawer.tsx +0 -249
  122. package/src/modules/modelManage/assets/empty.png +0 -0
  123. package/src/modules/modelManage/const.ts +0 -50
  124. package/src/modules/modelManage/index.tsx +0 -439
  125. package/src/modules/modelManage/server.ts +0 -185
  126. package/src/modules/nodegraph/index.tsx +0 -1
  127. package/src/modules/search/assets/Icon-history.svg +0 -8
  128. package/src/modules/search/assets/answerAwartar.png +0 -0
  129. package/src/modules/search/assets/doc.png +0 -0
  130. package/src/modules/search/assets/genera.gif +0 -0
  131. package/src/modules/search/assets/icon-robot.svg +0 -9
  132. package/src/modules/search/assets/icon-search-bar.svg +0 -14
  133. package/src/modules/search/assets/icon-sub-title.svg +0 -3
  134. package/src/modules/search/assets/icon-title.svg +0 -9
  135. package/src/modules/search/assets/icon-zoomOut.svg +0 -9
  136. package/src/modules/search/assets/iconAi.svg +0 -9
  137. package/src/modules/search/assets/pdf.png +0 -0
  138. package/src/modules/search/assets/ppt.png +0 -0
  139. package/src/modules/search/assets/search.svg +0 -3
  140. package/src/modules/search/assets/selected.svg +0 -4
  141. package/src/modules/search/assets/txt.png +0 -0
  142. package/src/modules/search/assets/xls.png +0 -0
  143. package/src/modules/search/components/AssisSelect.tsx +0 -137
  144. package/src/modules/search/components/Editor/ChatViewEditor.tsx +0 -261
  145. package/src/modules/search/components/Editor/aichat.css +0 -1
  146. package/src/modules/search/components/Editor/constant.ts +0 -13
  147. package/src/modules/search/components/Editor/index.tsx +0 -113
  148. package/src/modules/search/components/Editor/plugins/autofomatRules.ts +0 -332
  149. package/src/modules/search/components/Editor/plugins/convertImgPlugins.tsx +0 -20
  150. package/src/modules/search/components/Editor/plugins/createIndexes.tsx +0 -38
  151. package/src/modules/search/components/Editor/plugins/displayer.ts +0 -298
  152. package/src/modules/search/components/Editor/plugins/imageClick.tsx +0 -32
  153. package/src/modules/search/components/Editor/plugins/myplugin.tsx +0 -98
  154. package/src/modules/search/components/Editor/ui/avatar.tsx +0 -19
  155. package/src/modules/search/components/Editor/ui/blockquote-element.tsx +0 -21
  156. package/src/modules/search/components/Editor/ui/button.tsx +0 -58
  157. package/src/modules/search/components/Editor/ui/calendar.tsx +0 -68
  158. package/src/modules/search/components/Editor/ui/caption.tsx +0 -46
  159. package/src/modules/search/components/Editor/ui/checkbox.tsx +0 -27
  160. package/src/modules/search/components/Editor/ui/code-block-combobox.tsx +0 -188
  161. package/src/modules/search/components/Editor/ui/code-block-element.css +0 -434
  162. package/src/modules/search/components/Editor/ui/code-block-element.tsx +0 -39
  163. package/src/modules/search/components/Editor/ui/code-leaf.tsx +0 -24
  164. package/src/modules/search/components/Editor/ui/code-line-element.tsx +0 -10
  165. package/src/modules/search/components/Editor/ui/code-syntax-leaf.tsx +0 -21
  166. package/src/modules/search/components/Editor/ui/column-element.tsx +0 -30
  167. package/src/modules/search/components/Editor/ui/column-group-element.tsx +0 -94
  168. package/src/modules/search/components/Editor/ui/command.tsx +0 -75
  169. package/src/modules/search/components/Editor/ui/comment-avatar.tsx +0 -22
  170. package/src/modules/search/components/Editor/ui/comment-create-form.tsx +0 -37
  171. package/src/modules/search/components/Editor/ui/comment-item.tsx +0 -74
  172. package/src/modules/search/components/Editor/ui/comment-leaf.tsx +0 -49
  173. package/src/modules/search/components/Editor/ui/comment-more-dropdown.tsx +0 -42
  174. package/src/modules/search/components/Editor/ui/comment-reply-items.tsx +0 -22
  175. package/src/modules/search/components/Editor/ui/comment-resolve-button.tsx +0 -32
  176. package/src/modules/search/components/Editor/ui/comment-value.tsx +0 -34
  177. package/src/modules/search/components/Editor/ui/comments-popover.tsx +0 -63
  178. package/src/modules/search/components/Editor/ui/date-element.tsx +0 -83
  179. package/src/modules/search/components/Editor/ui/dialog.tsx +0 -63
  180. package/src/modules/search/components/Editor/ui/draggable.tsx +0 -177
  181. package/src/modules/search/components/Editor/ui/dropdown-menu.tsx +0 -180
  182. package/src/modules/search/components/Editor/ui/emoji-input-element.tsx +0 -85
  183. package/src/modules/search/components/Editor/ui/excalidraw-element.tsx +0 -28
  184. package/src/modules/search/components/Editor/ui/fixed-toolbar-buttons.tsx +0 -76
  185. package/src/modules/search/components/Editor/ui/fixed-toolbar.tsx +0 -8
  186. package/src/modules/search/components/Editor/ui/floating-toolbar-buttons.tsx +0 -51
  187. package/src/modules/search/components/Editor/ui/floating-toolbar.tsx +0 -77
  188. package/src/modules/search/components/Editor/ui/heading-element.tsx +0 -48
  189. package/src/modules/search/components/Editor/ui/highlight-leaf.tsx +0 -17
  190. package/src/modules/search/components/Editor/ui/hr-element.tsx +0 -30
  191. package/src/modules/search/components/Editor/ui/icons.tsx +0 -267
  192. package/src/modules/search/components/Editor/ui/image-element.tsx +0 -74
  193. package/src/modules/search/components/Editor/ui/inline-combobox.tsx +0 -368
  194. package/src/modules/search/components/Editor/ui/input.tsx +0 -25
  195. package/src/modules/search/components/Editor/ui/insert-dropdown-menu.tsx +0 -218
  196. package/src/modules/search/components/Editor/ui/kbd-leaf.tsx +0 -20
  197. package/src/modules/search/components/Editor/ui/link-element.tsx +0 -29
  198. package/src/modules/search/components/Editor/ui/link-floating-toolbar.tsx +0 -161
  199. package/src/modules/search/components/Editor/ui/list-element.tsx +0 -30
  200. package/src/modules/search/components/Editor/ui/mark-toolbar-button.tsx +0 -24
  201. package/src/modules/search/components/Editor/ui/media-embed-element.tsx +0 -133
  202. package/src/modules/search/components/Editor/ui/media-popover.tsx +0 -97
  203. package/src/modules/search/components/Editor/ui/mention-element.tsx +0 -43
  204. package/src/modules/search/components/Editor/ui/mention-input-element.tsx +0 -141
  205. package/src/modules/search/components/Editor/ui/mode-dropdown-menu.tsx +0 -93
  206. package/src/modules/search/components/Editor/ui/more-dropdown-menu.tsx +0 -67
  207. package/src/modules/search/components/Editor/ui/paragraph-element.tsx +0 -4
  208. package/src/modules/search/components/Editor/ui/placeholder.tsx +0 -52
  209. package/src/modules/search/components/Editor/ui/popover.tsx +0 -32
  210. package/src/modules/search/components/Editor/ui/resizable.tsx +0 -66
  211. package/src/modules/search/components/Editor/ui/separator.tsx +0 -25
  212. package/src/modules/search/components/Editor/ui/style.less +0 -12
  213. package/src/modules/search/components/Editor/ui/table-cell-element.tsx +0 -143
  214. package/src/modules/search/components/Editor/ui/table-element.tsx +0 -243
  215. package/src/modules/search/components/Editor/ui/table-row-element.tsx +0 -22
  216. package/src/modules/search/components/Editor/ui/tableValue.tsx +0 -135
  217. package/src/modules/search/components/Editor/ui/todo-list-element.tsx +0 -43
  218. package/src/modules/search/components/Editor/ui/toggle-element.tsx +0 -31
  219. package/src/modules/search/components/Editor/ui/toolbar.tsx +0 -157
  220. package/src/modules/search/components/Editor/ui/tooltip.tsx +0 -65
  221. package/src/modules/search/components/Editor/ui/turn-into-dropdown-menu.tsx +0 -160
  222. package/src/modules/search/components/Editor/ui/with-draggables.tsx +0 -175
  223. package/src/modules/search/components/FileList.tsx +0 -287
  224. package/src/modules/search/components/ImageGroupView/index.tsx +0 -85
  225. package/src/modules/search/components/ResultContent.tsx +0 -232
  226. package/src/modules/search/components/SearchInput.tsx +0 -232
  227. package/src/modules/search/components/SearchLanding.tsx +0 -74
  228. package/src/modules/search/components/SearchView.tsx +0 -563
  229. package/src/modules/search/components/SimpleEditor.tsx +0 -158
  230. package/src/modules/search/components/SimpleFileList.tsx +0 -215
  231. package/src/modules/search/index.tsx +0 -10
  232. package/src/modules/search/reademe.md +0 -1
  233. package/src/modules/search/servers/apis.tsx +0 -19
  234. package/src/modules/search/servers/index.ts +0 -184
  235. package/src/modules/search/style.less +0 -503
  236. package/src/modules/search/type.ts +0 -22
  237. package/src/modules/search/utils.ts +0 -34
  238. package/src/modules/sensitive/index.tsx +0 -313
  239. package/src/modules/sensitive/server.ts +0 -122
  240. package/src/modules/streamFilesReader/GientechStreamReader.tsx +0 -1555
  241. package/src/modules/streamFilesReader/components/Header/Toolbar.tsx +0 -0
  242. package/src/modules/streamFilesReader/components/Header/index.tsx +0 -297
  243. package/src/modules/streamFilesReader/index.tsx +0 -3
  244. package/src/style.css +0 -6
  245. package/src/type.d.ts +0 -0
  246. package/src/utils/commonFn.tsx +0 -111
  247. package/src/utils/gientechCommon/components/AppError.tsx +0 -32
  248. package/src/utils/gientechCommon/components/AppLoading.tsx +0 -75
  249. package/src/utils/gientechCommon/components/DeleteModal.tsx +0 -75
  250. package/src/utils/gientechCommon/components/DisplayError.tsx +0 -33
  251. package/src/utils/gientechCommon/components/DisplayLoading.tsx +0 -38
  252. package/src/utils/gientechCommon/components/FeedBackModal.tsx +0 -310
  253. package/src/utils/gientechCommon/components/FileCardCommon.tsx +0 -82
  254. package/src/utils/gientechCommon/components/FileManager/index.tsx +0 -390
  255. package/src/utils/gientechCommon/components/FileManager/style.css +0 -5
  256. package/src/utils/gientechCommon/components/Messages/GientechNewChatWelcome.tsx +0 -296
  257. package/src/utils/gientechCommon/components/Messages/ReferenceCard.tsx +0 -339
  258. package/src/utils/gientechCommon/components/Messages/RetriveItem.tsx +0 -245
  259. package/src/utils/gientechCommon/components/Messages/WebRetriveItem.tsx +0 -209
  260. package/src/utils/gientechCommon/components/Messages/defaultBot.png +0 -0
  261. package/src/utils/gientechCommon/components/Messages/defaultStyleSet.tsx +0 -148
  262. package/src/utils/gientechCommon/components/Messages/defaultWeLogo.svg +0 -14
  263. package/src/utils/gientechCommon/components/RenameModal.tsx +0 -86
  264. package/src/utils/gientechCommon/components/style.less +0 -11
  265. package/src/utils/gientechCommon/configs/commonConfig.ts +0 -2
  266. package/src/utils/gientechCommon/configs/senderConfig.ts +0 -0
  267. package/src/utils/gientechCommon/configs/stylesConfig.ts +0 -142
  268. package/src/utils/gientechCommon/hooks/AichatUseController.tsx +0 -339
  269. package/src/utils/gientechCommon/slate/converters/deserializers.ts +0 -763
  270. package/src/utils/gientechCommon/slate/converters/mockData.ts +0 -232
  271. package/src/utils/gientechCommon/slate/converters/slateConverters.ts +0 -258
  272. package/src/utils/gientechCommon/slate/richElements/index.tsx +0 -499
  273. package/src/utils/gientechCommon/utils/request.ts +0 -37
  274. package/src/utils/gientechCommon/utils/serverFn.ts +0 -172
  275. package/src/utils/index.tsx +0 -126
  276. package/src/utils/testconfigs/demologin/index.tsx +0 -32
  277. package/src/utils/testconfigs/index.ts +0 -53
  278. package/src/vite-env.d.ts +0 -11
  279. package/stats.html +0 -4949
  280. package/tailwind.config.js +0 -170
  281. package/tsconfig.app.json +0 -30
  282. package/tsconfig.app.tsbuildinfo +0 -11
  283. package/tsconfig.json +0 -13
  284. package/tsconfig.node.json +0 -22
  285. package/tsconfig.node.tsbuildinfo +0 -1
  286. package/vite.config.ts +0 -177
  287. package/workflows/release.yml +0 -60
  288. /package/{dist/assets → assets}/Doris.png +0 -0
  289. /package/{dist/assets → assets}/PostgreSQL.png +0 -0
  290. /package/{dist/assets → assets}/SQLServer.png +0 -0
  291. /package/{dist/assets → assets}/_commonjsHelpers-gnU0ypJ3.js +0 -0
  292. /package/{dist/assets → assets}/circle-alert-g2Y6zAjt.js +0 -0
  293. /package/{dist/assets → assets}/empty.png +0 -0
  294. /package/{dist/assets → assets}/index-CEK88UzR.js +0 -0
  295. /package/{dist/assets → assets}/index-CpW6Dhpp.js +0 -0
  296. /package/{dist/assets → assets}/plus-omCUN0e3.js +0 -0
  297. /package/{dist/assets → assets}/style2.css +0 -0
  298. /package/{dist/assets → assets}/styled-components.browser.esm-DPkS13KC.js +0 -0
  299. /package/{dist/assets → assets}/x-vPcWt3fC.js +0 -0
  300. /package/{dist/chat.d.ts → chat.d.ts} +0 -0
  301. /package/{dist/database.d.ts → database.d.ts} +0 -0
  302. /package/{dist/databaseId.d.ts → databaseId.d.ts} +0 -0
  303. /package/{dist/databaseTable.d.ts → databaseTable.d.ts} +0 -0
  304. /package/{dist/modelManage.d.ts → modelManage.d.ts} +0 -0
  305. /package/{dist/sensitive.d.ts → sensitive.d.ts} +0 -0
  306. /package/{dist/streamFilesReader.d.ts → streamFilesReader.d.ts} +0 -0
  307. /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;