@gientech/modual 1.2.8 → 1.2.10

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 (306) 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/assets/index-Ao_dzK_x.js +1230 -0
  9. package/{dist/assets/index-DIm7RgkM.js → assets/index-D-dGaGjW.js} +93 -279
  10. package/assets/style.css +1 -0
  11. package/assets/style3.css +1 -0
  12. package/{dist/chat.js → chat.js} +72 -66
  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 +56 -99
  18. package/{dist/sensitive.js → sensitive.js} +1 -1
  19. package/{dist/streamFilesReader.js → streamFilesReader.js} +10 -10
  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-97TKgPKE.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/index.tsx +0 -140
  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 -1837
  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/search/assets/Icon-history.svg +0 -8
  127. package/src/modules/search/assets/answerAwartar.png +0 -0
  128. package/src/modules/search/assets/doc.png +0 -0
  129. package/src/modules/search/assets/genera.gif +0 -0
  130. package/src/modules/search/assets/icon-robot.svg +0 -9
  131. package/src/modules/search/assets/icon-search-bar.svg +0 -14
  132. package/src/modules/search/assets/icon-sub-title.svg +0 -3
  133. package/src/modules/search/assets/icon-title.svg +0 -9
  134. package/src/modules/search/assets/icon-zoomOut.svg +0 -9
  135. package/src/modules/search/assets/iconAi.svg +0 -9
  136. package/src/modules/search/assets/pdf.png +0 -0
  137. package/src/modules/search/assets/ppt.png +0 -0
  138. package/src/modules/search/assets/search.svg +0 -3
  139. package/src/modules/search/assets/selected.svg +0 -4
  140. package/src/modules/search/assets/txt.png +0 -0
  141. package/src/modules/search/assets/xls.png +0 -0
  142. package/src/modules/search/components/AssisSelect.tsx +0 -137
  143. package/src/modules/search/components/Editor/ChatViewEditor.tsx +0 -261
  144. package/src/modules/search/components/Editor/aichat.css +0 -1
  145. package/src/modules/search/components/Editor/constant.ts +0 -13
  146. package/src/modules/search/components/Editor/index.tsx +0 -113
  147. package/src/modules/search/components/Editor/plugins/autofomatRules.ts +0 -332
  148. package/src/modules/search/components/Editor/plugins/convertImgPlugins.tsx +0 -20
  149. package/src/modules/search/components/Editor/plugins/createIndexes.tsx +0 -38
  150. package/src/modules/search/components/Editor/plugins/displayer.ts +0 -298
  151. package/src/modules/search/components/Editor/plugins/imageClick.tsx +0 -32
  152. package/src/modules/search/components/Editor/plugins/myplugin.tsx +0 -98
  153. package/src/modules/search/components/Editor/ui/avatar.tsx +0 -19
  154. package/src/modules/search/components/Editor/ui/blockquote-element.tsx +0 -21
  155. package/src/modules/search/components/Editor/ui/button.tsx +0 -58
  156. package/src/modules/search/components/Editor/ui/calendar.tsx +0 -68
  157. package/src/modules/search/components/Editor/ui/caption.tsx +0 -46
  158. package/src/modules/search/components/Editor/ui/checkbox.tsx +0 -27
  159. package/src/modules/search/components/Editor/ui/code-block-combobox.tsx +0 -188
  160. package/src/modules/search/components/Editor/ui/code-block-element.css +0 -434
  161. package/src/modules/search/components/Editor/ui/code-block-element.tsx +0 -39
  162. package/src/modules/search/components/Editor/ui/code-leaf.tsx +0 -24
  163. package/src/modules/search/components/Editor/ui/code-line-element.tsx +0 -10
  164. package/src/modules/search/components/Editor/ui/code-syntax-leaf.tsx +0 -21
  165. package/src/modules/search/components/Editor/ui/column-element.tsx +0 -30
  166. package/src/modules/search/components/Editor/ui/column-group-element.tsx +0 -94
  167. package/src/modules/search/components/Editor/ui/command.tsx +0 -75
  168. package/src/modules/search/components/Editor/ui/comment-avatar.tsx +0 -22
  169. package/src/modules/search/components/Editor/ui/comment-create-form.tsx +0 -37
  170. package/src/modules/search/components/Editor/ui/comment-item.tsx +0 -74
  171. package/src/modules/search/components/Editor/ui/comment-leaf.tsx +0 -49
  172. package/src/modules/search/components/Editor/ui/comment-more-dropdown.tsx +0 -42
  173. package/src/modules/search/components/Editor/ui/comment-reply-items.tsx +0 -22
  174. package/src/modules/search/components/Editor/ui/comment-resolve-button.tsx +0 -32
  175. package/src/modules/search/components/Editor/ui/comment-value.tsx +0 -34
  176. package/src/modules/search/components/Editor/ui/comments-popover.tsx +0 -63
  177. package/src/modules/search/components/Editor/ui/date-element.tsx +0 -83
  178. package/src/modules/search/components/Editor/ui/dialog.tsx +0 -63
  179. package/src/modules/search/components/Editor/ui/draggable.tsx +0 -177
  180. package/src/modules/search/components/Editor/ui/dropdown-menu.tsx +0 -180
  181. package/src/modules/search/components/Editor/ui/emoji-input-element.tsx +0 -85
  182. package/src/modules/search/components/Editor/ui/excalidraw-element.tsx +0 -28
  183. package/src/modules/search/components/Editor/ui/fixed-toolbar-buttons.tsx +0 -76
  184. package/src/modules/search/components/Editor/ui/fixed-toolbar.tsx +0 -8
  185. package/src/modules/search/components/Editor/ui/floating-toolbar-buttons.tsx +0 -51
  186. package/src/modules/search/components/Editor/ui/floating-toolbar.tsx +0 -77
  187. package/src/modules/search/components/Editor/ui/heading-element.tsx +0 -48
  188. package/src/modules/search/components/Editor/ui/highlight-leaf.tsx +0 -17
  189. package/src/modules/search/components/Editor/ui/hr-element.tsx +0 -30
  190. package/src/modules/search/components/Editor/ui/icons.tsx +0 -267
  191. package/src/modules/search/components/Editor/ui/image-element.tsx +0 -74
  192. package/src/modules/search/components/Editor/ui/inline-combobox.tsx +0 -368
  193. package/src/modules/search/components/Editor/ui/input.tsx +0 -25
  194. package/src/modules/search/components/Editor/ui/insert-dropdown-menu.tsx +0 -218
  195. package/src/modules/search/components/Editor/ui/kbd-leaf.tsx +0 -20
  196. package/src/modules/search/components/Editor/ui/link-element.tsx +0 -29
  197. package/src/modules/search/components/Editor/ui/link-floating-toolbar.tsx +0 -161
  198. package/src/modules/search/components/Editor/ui/list-element.tsx +0 -30
  199. package/src/modules/search/components/Editor/ui/mark-toolbar-button.tsx +0 -24
  200. package/src/modules/search/components/Editor/ui/media-embed-element.tsx +0 -133
  201. package/src/modules/search/components/Editor/ui/media-popover.tsx +0 -97
  202. package/src/modules/search/components/Editor/ui/mention-element.tsx +0 -43
  203. package/src/modules/search/components/Editor/ui/mention-input-element.tsx +0 -141
  204. package/src/modules/search/components/Editor/ui/mode-dropdown-menu.tsx +0 -93
  205. package/src/modules/search/components/Editor/ui/more-dropdown-menu.tsx +0 -67
  206. package/src/modules/search/components/Editor/ui/paragraph-element.tsx +0 -4
  207. package/src/modules/search/components/Editor/ui/placeholder.tsx +0 -52
  208. package/src/modules/search/components/Editor/ui/popover.tsx +0 -32
  209. package/src/modules/search/components/Editor/ui/resizable.tsx +0 -66
  210. package/src/modules/search/components/Editor/ui/separator.tsx +0 -25
  211. package/src/modules/search/components/Editor/ui/style.less +0 -12
  212. package/src/modules/search/components/Editor/ui/table-cell-element.tsx +0 -143
  213. package/src/modules/search/components/Editor/ui/table-element.tsx +0 -243
  214. package/src/modules/search/components/Editor/ui/table-row-element.tsx +0 -22
  215. package/src/modules/search/components/Editor/ui/tableValue.tsx +0 -135
  216. package/src/modules/search/components/Editor/ui/todo-list-element.tsx +0 -43
  217. package/src/modules/search/components/Editor/ui/toggle-element.tsx +0 -31
  218. package/src/modules/search/components/Editor/ui/toolbar.tsx +0 -157
  219. package/src/modules/search/components/Editor/ui/tooltip.tsx +0 -65
  220. package/src/modules/search/components/Editor/ui/turn-into-dropdown-menu.tsx +0 -160
  221. package/src/modules/search/components/Editor/ui/with-draggables.tsx +0 -175
  222. package/src/modules/search/components/FileList.tsx +0 -287
  223. package/src/modules/search/components/ImageGroupView/index.tsx +0 -85
  224. package/src/modules/search/components/ResultContent.tsx +0 -232
  225. package/src/modules/search/components/SearchInput.tsx +0 -232
  226. package/src/modules/search/components/SearchLanding.tsx +0 -74
  227. package/src/modules/search/components/SearchView.tsx +0 -563
  228. package/src/modules/search/components/SimpleEditor.tsx +0 -158
  229. package/src/modules/search/components/SimpleFileList.tsx +0 -215
  230. package/src/modules/search/index.tsx +0 -10
  231. package/src/modules/search/reademe.md +0 -1
  232. package/src/modules/search/servers/apis.tsx +0 -19
  233. package/src/modules/search/servers/index.ts +0 -184
  234. package/src/modules/search/style.less +0 -503
  235. package/src/modules/search/type.ts +0 -22
  236. package/src/modules/search/utils.ts +0 -34
  237. package/src/modules/sensitive/index.tsx +0 -313
  238. package/src/modules/sensitive/server.ts +0 -122
  239. package/src/modules/streamFilesReader/GientechStreamReader.tsx +0 -1555
  240. package/src/modules/streamFilesReader/components/Header/Toolbar.tsx +0 -0
  241. package/src/modules/streamFilesReader/components/Header/index.tsx +0 -297
  242. package/src/modules/streamFilesReader/index.tsx +0 -3
  243. package/src/style.css +0 -6
  244. package/src/type.d.ts +0 -0
  245. package/src/utils/commonFn.tsx +0 -111
  246. package/src/utils/gientechCommon/components/AppError.tsx +0 -32
  247. package/src/utils/gientechCommon/components/AppLoading.tsx +0 -75
  248. package/src/utils/gientechCommon/components/DeleteModal.tsx +0 -75
  249. package/src/utils/gientechCommon/components/DisplayError.tsx +0 -33
  250. package/src/utils/gientechCommon/components/DisplayLoading.tsx +0 -38
  251. package/src/utils/gientechCommon/components/FeedBackModal.tsx +0 -310
  252. package/src/utils/gientechCommon/components/FileCardCommon.tsx +0 -82
  253. package/src/utils/gientechCommon/components/FileManager/index.tsx +0 -390
  254. package/src/utils/gientechCommon/components/FileManager/style.css +0 -5
  255. package/src/utils/gientechCommon/components/Messages/GientechNewChatWelcome.tsx +0 -296
  256. package/src/utils/gientechCommon/components/Messages/ReferenceCard.tsx +0 -339
  257. package/src/utils/gientechCommon/components/Messages/RetriveItem.tsx +0 -245
  258. package/src/utils/gientechCommon/components/Messages/WebRetriveItem.tsx +0 -209
  259. package/src/utils/gientechCommon/components/Messages/defaultBot.png +0 -0
  260. package/src/utils/gientechCommon/components/Messages/defaultStyleSet.tsx +0 -148
  261. package/src/utils/gientechCommon/components/Messages/defaultWeLogo.svg +0 -14
  262. package/src/utils/gientechCommon/components/RenameModal.tsx +0 -86
  263. package/src/utils/gientechCommon/components/style.less +0 -11
  264. package/src/utils/gientechCommon/configs/commonConfig.ts +0 -2
  265. package/src/utils/gientechCommon/configs/senderConfig.ts +0 -0
  266. package/src/utils/gientechCommon/configs/stylesConfig.ts +0 -142
  267. package/src/utils/gientechCommon/hooks/AichatUseController.tsx +0 -339
  268. package/src/utils/gientechCommon/slate/converters/deserializers.ts +0 -763
  269. package/src/utils/gientechCommon/slate/converters/mockData.ts +0 -232
  270. package/src/utils/gientechCommon/slate/converters/slateConverters.ts +0 -258
  271. package/src/utils/gientechCommon/slate/richElements/index.tsx +0 -499
  272. package/src/utils/gientechCommon/utils/request.ts +0 -37
  273. package/src/utils/gientechCommon/utils/serverFn.ts +0 -172
  274. package/src/utils/index.tsx +0 -126
  275. package/src/utils/testconfigs/demologin/index.tsx +0 -32
  276. package/src/utils/testconfigs/index.ts +0 -53
  277. package/src/vite-env.d.ts +0 -11
  278. package/stats.html +0 -4949
  279. package/tailwind.config.js +0 -170
  280. package/tsconfig.app.json +0 -30
  281. package/tsconfig.app.tsbuildinfo +0 -11
  282. package/tsconfig.json +0 -13
  283. package/tsconfig.node.json +0 -22
  284. package/tsconfig.node.tsbuildinfo +0 -1
  285. package/vite.config.ts +0 -178
  286. package/workflows/release.yml +0 -60
  287. /package/{dist/assets → assets}/Doris.png +0 -0
  288. /package/{dist/assets → assets}/PostgreSQL.png +0 -0
  289. /package/{dist/assets → assets}/SQLServer.png +0 -0
  290. /package/{dist/assets → assets}/_commonjsHelpers-gnU0ypJ3.js +0 -0
  291. /package/{dist/assets → assets}/circle-alert-g2Y6zAjt.js +0 -0
  292. /package/{dist/assets → assets}/empty.png +0 -0
  293. /package/{dist/assets → assets}/index-CEK88UzR.js +0 -0
  294. /package/{dist/assets → assets}/index-CpW6Dhpp.js +0 -0
  295. /package/{dist/assets → assets}/plus-omCUN0e3.js +0 -0
  296. /package/{dist/assets → assets}/style2.css +0 -0
  297. /package/{dist/assets → assets}/styled-components.browser.esm-DPkS13KC.js +0 -0
  298. /package/{dist/assets → assets}/x-vPcWt3fC.js +0 -0
  299. /package/{dist/chat.d.ts → chat.d.ts} +0 -0
  300. /package/{dist/database.d.ts → database.d.ts} +0 -0
  301. /package/{dist/databaseId.d.ts → databaseId.d.ts} +0 -0
  302. /package/{dist/databaseTable.d.ts → databaseTable.d.ts} +0 -0
  303. /package/{dist/modelManage.d.ts → modelManage.d.ts} +0 -0
  304. /package/{dist/sensitive.d.ts → sensitive.d.ts} +0 -0
  305. /package/{dist/streamFilesReader.d.ts → streamFilesReader.d.ts} +0 -0
  306. /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;