@gientech/modual 2.0.5 → 2.0.6

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 (413) hide show
  1. package/README.md +118 -0
  2. package/{dist/chat.js → chat.js} +98 -98
  3. package/package.json +41 -103
  4. package/.editorconfig +0 -38
  5. package/.prettierignore +0 -16
  6. package/.prettierrc +0 -17
  7. package/USAGE.md +0 -247
  8. package/bash.exe.stackdump +0 -40
  9. package/components.json +0 -21
  10. package/dist/README.md +0 -643
  11. package/dist/package.json +0 -68
  12. package/doc_assets/2.png +0 -0
  13. package/doc_assets/demo.md +0 -27
  14. package/doc_assets/demos/dist-app/assets/index.Dh-ZAS9Z.css +0 -2
  15. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js +0 -23699
  16. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js.map +0 -1
  17. package/doc_assets/demos/dist-app/index.html +0 -14
  18. package/doc_assets/demos/dist-app/vite.svg +0 -1
  19. package/doc_assets/images/1.png +0 -0
  20. package/doc_assets/images/3.png +0 -0
  21. package/doc_assets/images/component-screenshot.png +0 -1
  22. package/doc_assets/install.md +0 -5
  23. package/doc_assets//346/226/271/346/241/210//344/274/230/345/214/226/346/226/271/346/241/210-/345/244/232/344/274/232/350/257/235SSE/350/277/236/346/216/245/347/256/241/347/220/206.md +0 -504
  24. package/eslint.config.js +0 -92
  25. package/index.html +0 -13
  26. package/package.json.demo-backup +0 -109
  27. package/postcss.config.cjs +0 -19
  28. package/public/icons/answerAwartar.png +0 -0
  29. package/public/icons/docx-file.png +0 -0
  30. package/public/icons/folder.png +0 -0
  31. package/public/icons/html.png +0 -0
  32. package/public/icons/image.png +0 -0
  33. package/public/icons/jpg-file.png +0 -0
  34. package/public/icons/json.png +0 -0
  35. package/public/icons/md.png +0 -0
  36. package/public/icons/pdf.png +0 -0
  37. package/public/icons/pptx.png +0 -0
  38. package/public/icons/questionAwartar.png +0 -0
  39. package/public/icons/sheets.png +0 -0
  40. package/public/icons/txt.png +0 -0
  41. package/public/icons/xlsx.png +0 -0
  42. package/public/vite.svg +0 -1
  43. package/public/worker/pdf.worker.min.js +0 -22
  44. package/scripts/README.md +0 -133
  45. package/scripts/build-demo.js +0 -88
  46. package/scripts/decrypt-api-key.js +0 -95
  47. package/scripts/demo-selector.js +0 -216
  48. package/scripts/dev-demo.js +0 -76
  49. package/scripts/preview-demo.js +0 -130
  50. package/scripts/run-demo.bat +0 -34
  51. package/src/assets/img/close.png +0 -0
  52. package/src/assets/img/database.png +0 -0
  53. package/src/assets/img/downArrow.png +0 -0
  54. package/src/assets/img/downLoad.png +0 -0
  55. package/src/assets/img/excel.png +0 -0
  56. package/src/assets/img/graphIcon.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/singleQa.png +0 -0
  61. package/src/assets/img/txt.png +0 -0
  62. package/src/assets/img/webSearch.png +0 -0
  63. package/src/assets/img/word.png +0 -0
  64. package/src/assets/login/homeBg.png +0 -0
  65. package/src/assets/login/left.jpg +0 -0
  66. package/src/assets/login/logoImg.png +0 -0
  67. package/src/examples/ConversationAssistantPage/index.tsx +0 -41
  68. package/src/examples/Demo/index.tsx +0 -12
  69. package/src/examples/LoginPage/index.tsx +0 -18
  70. package/src/examples/chat/components/DrawerGraphPreview.tsx +0 -78
  71. package/src/examples/chat/index.tsx +0 -154
  72. package/src/examples/chat/logo03.png +0 -0
  73. package/src/examples/gientechStreamFilesReader/index.tsx +0 -951
  74. package/src/examples/headlessChat/index.tsx +0 -234
  75. package/src/examples/ragDatabaseDataPage/index.tsx +0 -40
  76. package/src/examples/ragDatabaseIdPage/index.tsx +0 -47
  77. package/src/examples/ragDatabasePage/index.tsx +0 -36
  78. package/src/examples/ragModelManagePage/index.tsx +0 -38
  79. package/src/examples/ragSearchPage/index.tsx +0 -0
  80. package/src/examples/ragSensitiveWordsPage/index.tsx +0 -32
  81. package/src/examples/streamFiles/index.tsx +0 -417
  82. package/src/lib_enter.ts +0 -43
  83. package/src/main.tsx +0 -5
  84. package/src/main.tsx.backup +0 -5
  85. package/src/modules/CHAT_UNIFICATION_PLAN.md +0 -324
  86. package/src/modules/assistantConfig/assets/databse.svg +0 -6
  87. package/src/modules/assistantConfig/assets/empty.png +0 -0
  88. package/src/modules/assistantConfig/assets/graph.svg +0 -4
  89. package/src/modules/assistantConfig/assets/knowledge.svg +0 -4
  90. package/src/modules/assistantConfig/assets/sensitive.svg +0 -5
  91. package/src/modules/assistantConfig/components/Database.tsx +0 -171
  92. package/src/modules/assistantConfig/components/Graph.tsx +0 -177
  93. package/src/modules/assistantConfig/components/Knowledge.tsx +0 -276
  94. package/src/modules/assistantConfig/components/NotFoundContent.tsx +0 -21
  95. package/src/modules/assistantConfig/components/Paragraph.tsx +0 -51
  96. package/src/modules/assistantConfig/components/ParamsItem.tsx +0 -39
  97. package/src/modules/assistantConfig/components/ResourceBinderItem.tsx +0 -133
  98. package/src/modules/assistantConfig/components/SearchableSelector.tsx +0 -500
  99. package/src/modules/assistantConfig/components/Sensitive.tsx +0 -221
  100. package/src/modules/assistantConfig/components/SliderInput.tsx +0 -65
  101. package/src/modules/assistantConfig/constants.tsx +0 -75
  102. package/src/modules/assistantConfig/index.tsx +0 -710
  103. package/src/modules/assistantConfig/server.ts +0 -262
  104. package/src/modules/chat/Conversations/Item.tsx +0 -167
  105. package/src/modules/chat/Conversations/List.tsx +0 -210
  106. package/src/modules/chat/Conversations/groupByTime.ts +0 -39
  107. package/src/modules/chat/Conversations/index.tsx +0 -252
  108. package/src/modules/chat/ReferenceBar.tsx +0 -622
  109. package/src/modules/chat/constants.tsx +0 -52
  110. package/src/modules/chat/data.txt +0 -82
  111. package/src/modules/chat/index.tsx +0 -2054
  112. package/src/modules/chat/referenceCom/DeleteModal.tsx +0 -75
  113. package/src/modules/chat/referenceCom/DrawerContent.tsx +0 -136
  114. package/src/modules/chat/referenceCom/DrawerDatabase.tsx +0 -102
  115. package/src/modules/chat/referenceCom/DrawerGraphPreview.tsx +0 -86
  116. package/src/modules/chat/referenceCom/DrawerPreview.tsx +0 -73
  117. package/src/modules/chat/referenceCom/DrawerTitle.tsx +0 -26
  118. package/src/modules/chat/referenceCom/RenameModal.tsx +0 -86
  119. package/src/modules/chat/referenceCom/TagCom.tsx +0 -30
  120. package/src/modules/chat/style.less +0 -3
  121. package/src/modules/chat/types.ts +0 -17
  122. package/src/modules/chat/utils/index.ts +0 -348
  123. package/src/modules/database/CreateModal.tsx +0 -403
  124. package/src/modules/database/assets/Doris.png +0 -0
  125. package/src/modules/database/assets/PostgreSQL.png +0 -0
  126. package/src/modules/database/assets/SQLServer.png +0 -0
  127. package/src/modules/database/assets/database.svg +0 -11
  128. package/src/modules/database/assets/database_add.svg +0 -53
  129. package/src/modules/database/assets/database_connect.svg +0 -66
  130. package/src/modules/database/assets/database_upload.svg +0 -29
  131. package/src/modules/database/assets/empty.png +0 -0
  132. package/src/modules/database/assets/mysql.svg +0 -14
  133. package/src/modules/database/index.tsx +0 -477
  134. package/src/modules/database/server.ts +0 -196
  135. package/src/modules/databaseId/CustomCom.tsx +0 -156
  136. package/src/modules/databaseId/EditConfig.tsx +0 -280
  137. package/src/modules/databaseId/UploadDrawer.tsx +0 -535
  138. package/src/modules/databaseId/assets/aiOptimize.svg +0 -10
  139. package/src/modules/databaseId/assets/empty.png +0 -0
  140. package/src/modules/databaseId/assets/template.svg +0 -6
  141. package/src/modules/databaseId/assets/upload.svg +0 -9
  142. package/src/modules/databaseId/assets/useTemp.svg +0 -6
  143. package/src/modules/databaseId/index.tsx +0 -769
  144. package/src/modules/databaseId/server.ts +0 -286
  145. package/src/modules/databaseId/style.css +0 -5
  146. package/src/modules/databaseTable/EditRowDrawer.tsx +0 -124
  147. package/src/modules/databaseTable/index.tsx +0 -359
  148. package/src/modules/databaseTable/server.ts +0 -180
  149. package/src/modules/headlessChat/ReferenceBar.tsx +0 -783
  150. package/src/modules/headlessChat/constants.tsx +0 -54
  151. package/src/modules/headlessChat/index.tsx +0 -1706
  152. package/src/modules/headlessChat/referenceCom/DeleteModal.tsx +0 -75
  153. package/src/modules/headlessChat/referenceCom/DrawerContent.tsx +0 -136
  154. package/src/modules/headlessChat/referenceCom/DrawerDatabase.tsx +0 -102
  155. package/src/modules/headlessChat/referenceCom/DrawerGraphPreview.tsx +0 -86
  156. package/src/modules/headlessChat/referenceCom/DrawerPreview.tsx +0 -73
  157. package/src/modules/headlessChat/referenceCom/DrawerTitle.tsx +0 -26
  158. package/src/modules/headlessChat/referenceCom/RenameModal.tsx +0 -86
  159. package/src/modules/headlessChat/referenceCom/TagCom.tsx +0 -30
  160. package/src/modules/headlessChat/style.less +0 -3
  161. package/src/modules/headlessChat/types.ts +0 -23
  162. package/src/modules/headlessChat/utils/index.ts +0 -348
  163. package/src/modules/login/components/Login/LoginBox/index.tsx +0 -102
  164. package/src/modules/login/components/Login/RegisterBox/index.tsx +0 -180
  165. package/src/modules/login/components/Login/index.tsx +0 -100
  166. package/src/modules/login/index.tsx +0 -106
  167. package/src/modules/login/style.css +0 -3
  168. package/src/modules/login/useServices.ts +0 -53
  169. package/src/modules/login/utils.ts +0 -42
  170. package/src/modules/modelManage/ConfigDrawer.tsx +0 -249
  171. package/src/modules/modelManage/ReplaceModal.tsx +0 -124
  172. package/src/modules/modelManage/assets/empty.png +0 -0
  173. package/src/modules/modelManage/const.ts +0 -51
  174. package/src/modules/modelManage/index.tsx +0 -606
  175. package/src/modules/modelManage/server.ts +0 -223
  176. package/src/modules/nodegraph/index.tsx +0 -1
  177. package/src/modules/search/assets/Icon-history.svg +0 -8
  178. package/src/modules/search/assets/answerAwartar.png +0 -0
  179. package/src/modules/search/assets/doc.png +0 -0
  180. package/src/modules/search/assets/genera.gif +0 -0
  181. package/src/modules/search/assets/icon-robot.svg +0 -9
  182. package/src/modules/search/assets/icon-search-bar.svg +0 -14
  183. package/src/modules/search/assets/icon-sub-title.svg +0 -3
  184. package/src/modules/search/assets/icon-title.svg +0 -9
  185. package/src/modules/search/assets/icon-zoomOut.svg +0 -9
  186. package/src/modules/search/assets/iconAi.svg +0 -9
  187. package/src/modules/search/assets/pdf.png +0 -0
  188. package/src/modules/search/assets/ppt.png +0 -0
  189. package/src/modules/search/assets/search.svg +0 -3
  190. package/src/modules/search/assets/selected.svg +0 -4
  191. package/src/modules/search/assets/txt.png +0 -0
  192. package/src/modules/search/assets/xls.png +0 -0
  193. package/src/modules/search/components/AssisSelect.tsx +0 -137
  194. package/src/modules/search/components/Editor/ChatViewEditor.tsx +0 -261
  195. package/src/modules/search/components/Editor/aichat.css +0 -1
  196. package/src/modules/search/components/Editor/constant.ts +0 -13
  197. package/src/modules/search/components/Editor/index.tsx +0 -113
  198. package/src/modules/search/components/Editor/plugins/autofomatRules.ts +0 -332
  199. package/src/modules/search/components/Editor/plugins/convertImgPlugins.tsx +0 -20
  200. package/src/modules/search/components/Editor/plugins/createIndexes.tsx +0 -38
  201. package/src/modules/search/components/Editor/plugins/displayer.ts +0 -298
  202. package/src/modules/search/components/Editor/plugins/imageClick.tsx +0 -32
  203. package/src/modules/search/components/Editor/plugins/myplugin.tsx +0 -98
  204. package/src/modules/search/components/Editor/ui/avatar.tsx +0 -19
  205. package/src/modules/search/components/Editor/ui/blockquote-element.tsx +0 -21
  206. package/src/modules/search/components/Editor/ui/button.tsx +0 -58
  207. package/src/modules/search/components/Editor/ui/calendar.tsx +0 -68
  208. package/src/modules/search/components/Editor/ui/caption.tsx +0 -46
  209. package/src/modules/search/components/Editor/ui/checkbox.tsx +0 -27
  210. package/src/modules/search/components/Editor/ui/code-block-combobox.tsx +0 -188
  211. package/src/modules/search/components/Editor/ui/code-block-element.css +0 -434
  212. package/src/modules/search/components/Editor/ui/code-block-element.tsx +0 -39
  213. package/src/modules/search/components/Editor/ui/code-leaf.tsx +0 -24
  214. package/src/modules/search/components/Editor/ui/code-line-element.tsx +0 -10
  215. package/src/modules/search/components/Editor/ui/code-syntax-leaf.tsx +0 -21
  216. package/src/modules/search/components/Editor/ui/column-element.tsx +0 -30
  217. package/src/modules/search/components/Editor/ui/column-group-element.tsx +0 -94
  218. package/src/modules/search/components/Editor/ui/command.tsx +0 -75
  219. package/src/modules/search/components/Editor/ui/comment-avatar.tsx +0 -22
  220. package/src/modules/search/components/Editor/ui/comment-create-form.tsx +0 -37
  221. package/src/modules/search/components/Editor/ui/comment-item.tsx +0 -74
  222. package/src/modules/search/components/Editor/ui/comment-leaf.tsx +0 -49
  223. package/src/modules/search/components/Editor/ui/comment-more-dropdown.tsx +0 -42
  224. package/src/modules/search/components/Editor/ui/comment-reply-items.tsx +0 -22
  225. package/src/modules/search/components/Editor/ui/comment-resolve-button.tsx +0 -32
  226. package/src/modules/search/components/Editor/ui/comment-value.tsx +0 -34
  227. package/src/modules/search/components/Editor/ui/comments-popover.tsx +0 -63
  228. package/src/modules/search/components/Editor/ui/date-element.tsx +0 -83
  229. package/src/modules/search/components/Editor/ui/dialog.tsx +0 -63
  230. package/src/modules/search/components/Editor/ui/draggable.tsx +0 -177
  231. package/src/modules/search/components/Editor/ui/dropdown-menu.tsx +0 -180
  232. package/src/modules/search/components/Editor/ui/emoji-input-element.tsx +0 -85
  233. package/src/modules/search/components/Editor/ui/excalidraw-element.tsx +0 -28
  234. package/src/modules/search/components/Editor/ui/fixed-toolbar-buttons.tsx +0 -76
  235. package/src/modules/search/components/Editor/ui/fixed-toolbar.tsx +0 -8
  236. package/src/modules/search/components/Editor/ui/floating-toolbar-buttons.tsx +0 -51
  237. package/src/modules/search/components/Editor/ui/floating-toolbar.tsx +0 -77
  238. package/src/modules/search/components/Editor/ui/heading-element.tsx +0 -48
  239. package/src/modules/search/components/Editor/ui/highlight-leaf.tsx +0 -17
  240. package/src/modules/search/components/Editor/ui/hr-element.tsx +0 -30
  241. package/src/modules/search/components/Editor/ui/icons.tsx +0 -267
  242. package/src/modules/search/components/Editor/ui/image-element.tsx +0 -74
  243. package/src/modules/search/components/Editor/ui/inline-combobox.tsx +0 -368
  244. package/src/modules/search/components/Editor/ui/input.tsx +0 -25
  245. package/src/modules/search/components/Editor/ui/insert-dropdown-menu.tsx +0 -218
  246. package/src/modules/search/components/Editor/ui/kbd-leaf.tsx +0 -20
  247. package/src/modules/search/components/Editor/ui/link-element.tsx +0 -29
  248. package/src/modules/search/components/Editor/ui/link-floating-toolbar.tsx +0 -161
  249. package/src/modules/search/components/Editor/ui/list-element.tsx +0 -30
  250. package/src/modules/search/components/Editor/ui/mark-toolbar-button.tsx +0 -24
  251. package/src/modules/search/components/Editor/ui/media-embed-element.tsx +0 -133
  252. package/src/modules/search/components/Editor/ui/media-popover.tsx +0 -97
  253. package/src/modules/search/components/Editor/ui/mention-element.tsx +0 -43
  254. package/src/modules/search/components/Editor/ui/mention-input-element.tsx +0 -141
  255. package/src/modules/search/components/Editor/ui/mode-dropdown-menu.tsx +0 -93
  256. package/src/modules/search/components/Editor/ui/more-dropdown-menu.tsx +0 -67
  257. package/src/modules/search/components/Editor/ui/paragraph-element.tsx +0 -4
  258. package/src/modules/search/components/Editor/ui/placeholder.tsx +0 -52
  259. package/src/modules/search/components/Editor/ui/popover.tsx +0 -32
  260. package/src/modules/search/components/Editor/ui/resizable.tsx +0 -66
  261. package/src/modules/search/components/Editor/ui/separator.tsx +0 -25
  262. package/src/modules/search/components/Editor/ui/style.less +0 -12
  263. package/src/modules/search/components/Editor/ui/table-cell-element.tsx +0 -143
  264. package/src/modules/search/components/Editor/ui/table-element.tsx +0 -243
  265. package/src/modules/search/components/Editor/ui/table-row-element.tsx +0 -22
  266. package/src/modules/search/components/Editor/ui/tableValue.tsx +0 -135
  267. package/src/modules/search/components/Editor/ui/todo-list-element.tsx +0 -43
  268. package/src/modules/search/components/Editor/ui/toggle-element.tsx +0 -31
  269. package/src/modules/search/components/Editor/ui/toolbar.tsx +0 -157
  270. package/src/modules/search/components/Editor/ui/tooltip.tsx +0 -65
  271. package/src/modules/search/components/Editor/ui/turn-into-dropdown-menu.tsx +0 -160
  272. package/src/modules/search/components/Editor/ui/with-draggables.tsx +0 -175
  273. package/src/modules/search/components/FileList.tsx +0 -287
  274. package/src/modules/search/components/ImageGroupView/index.tsx +0 -85
  275. package/src/modules/search/components/ResultContent.tsx +0 -232
  276. package/src/modules/search/components/SearchInput.tsx +0 -232
  277. package/src/modules/search/components/SearchLanding.tsx +0 -74
  278. package/src/modules/search/components/SearchView.tsx +0 -563
  279. package/src/modules/search/components/SimpleEditor.tsx +0 -158
  280. package/src/modules/search/components/SimpleFileList.tsx +0 -215
  281. package/src/modules/search/index.tsx +0 -10
  282. package/src/modules/search/reademe.md +0 -1
  283. package/src/modules/search/servers/apis.tsx +0 -19
  284. package/src/modules/search/servers/index.ts +0 -184
  285. package/src/modules/search/style.less +0 -503
  286. package/src/modules/search/type.ts +0 -22
  287. package/src/modules/search/utils.ts +0 -34
  288. package/src/modules/sensitive/index.tsx +0 -313
  289. package/src/modules/sensitive/server.ts +0 -122
  290. package/src/modules/streamFilesReader/GientechStreamReader.tsx +0 -1625
  291. package/src/modules/streamFilesReader/components/Header/Toolbar.tsx +0 -0
  292. package/src/modules/streamFilesReader/components/Header/index.tsx +0 -297
  293. package/src/modules/streamFilesReader/index.tsx +0 -3
  294. package/src/style.css +0 -6
  295. package/src/type.d.ts +0 -0
  296. package/src/utils/commonFn.tsx +0 -111
  297. package/src/utils/decryptApiKey.ts +0 -40
  298. package/src/utils/gientechCommon/components/AppError.tsx +0 -32
  299. package/src/utils/gientechCommon/components/AppLoading.tsx +0 -75
  300. package/src/utils/gientechCommon/components/DeleteModal.tsx +0 -75
  301. package/src/utils/gientechCommon/components/DisplayError.tsx +0 -33
  302. package/src/utils/gientechCommon/components/DisplayLoading.tsx +0 -38
  303. package/src/utils/gientechCommon/components/FeedBackModal.tsx +0 -319
  304. package/src/utils/gientechCommon/components/FileCardCommon.tsx +0 -82
  305. package/src/utils/gientechCommon/components/FileManager/index.tsx +0 -400
  306. package/src/utils/gientechCommon/components/FileManager/style.css +0 -5
  307. package/src/utils/gientechCommon/components/Messages/GientechNewChatWelcome.tsx +0 -581
  308. package/src/utils/gientechCommon/components/Messages/ReferenceCard.tsx +0 -359
  309. package/src/utils/gientechCommon/components/Messages/RetriveItem.tsx +0 -245
  310. package/src/utils/gientechCommon/components/Messages/WebRetriveItem.tsx +0 -209
  311. package/src/utils/gientechCommon/components/Messages/defaultBot.png +0 -0
  312. package/src/utils/gientechCommon/components/Messages/defaultStyleSet.tsx +0 -148
  313. package/src/utils/gientechCommon/components/Messages/defaultWeLogo.svg +0 -14
  314. package/src/utils/gientechCommon/components/RenameModal.tsx +0 -86
  315. package/src/utils/gientechCommon/components/style.less +0 -11
  316. package/src/utils/gientechCommon/configs/commonConfig.ts +0 -2
  317. package/src/utils/gientechCommon/configs/senderConfig.ts +0 -0
  318. package/src/utils/gientechCommon/configs/stylesConfig.ts +0 -142
  319. package/src/utils/gientechCommon/hooks/AichatUseController.tsx +0 -417
  320. package/src/utils/gientechCommon/hooks/useFileDisplayTools.tsx +0 -204
  321. package/src/utils/gientechCommon/hooks/useFileManager.ts +0 -193
  322. package/src/utils/gientechCommon/slate/converters/deserializers.ts +0 -763
  323. package/src/utils/gientechCommon/slate/converters/mockData.ts +0 -232
  324. package/src/utils/gientechCommon/slate/converters/slateConverters.ts +0 -258
  325. package/src/utils/gientechCommon/slate/richElements/index.tsx +0 -499
  326. package/src/utils/gientechCommon/utils/fileUtils.ts +0 -86
  327. package/src/utils/gientechCommon/utils/request.ts +0 -37
  328. package/src/utils/gientechCommon/utils/serverFn.ts +0 -172
  329. package/src/utils/index.tsx +0 -142
  330. package/src/utils/testconfigs/demologin/index.tsx +0 -32
  331. package/src/utils/testconfigs/index.ts +0 -59
  332. package/src/vite-env.d.ts +0 -42
  333. package/stats.html +0 -4949
  334. package/tailwind.config.js +0 -170
  335. package/tsconfig.app.json +0 -30
  336. package/tsconfig.app.tsbuildinfo +0 -11
  337. package/tsconfig.json +0 -13
  338. package/tsconfig.node.json +0 -22
  339. package/tsconfig.node.tsbuildinfo +0 -1
  340. package/vite.config.app.ts +0 -93
  341. package/vite.config.ts +0 -232
  342. package/workflows/release.yml +0 -60
  343. package//346/215/242/350/241/214/346/240/274/345/274/217/344/277/235/346/214/201/344/274/230/345/214/226/346/226/271/346/241/210.md +0 -359
  344. /package/{dist/assets → assets}/Doris.png +0 -0
  345. /package/{dist/assets → assets}/GientechStreamReader-DUCq-O5X.js +0 -0
  346. /package/{dist/assets → assets}/PostgreSQL.png +0 -0
  347. /package/{dist/assets → assets}/SQLServer.png +0 -0
  348. /package/{dist/assets → assets}/database.svg +0 -0
  349. /package/{dist/assets → assets}/database_add.svg +0 -0
  350. /package/{dist/assets → assets}/database_connect.svg +0 -0
  351. /package/{dist/assets → assets}/database_upload.svg +0 -0
  352. /package/{dist/assets → assets}/databse.svg +0 -0
  353. /package/{dist/assets → assets}/defaultWeLogo.svg +0 -0
  354. /package/{dist/assets → assets}/empty.png +0 -0
  355. /package/{dist/assets → assets}/graph.svg +0 -0
  356. /package/{dist/assets → assets}/homeBg.png +0 -0
  357. /package/{dist/assets → assets}/index-B2yNvzjy.js +0 -0
  358. /package/{dist/assets → assets}/index-BKe5FgcC.js +0 -0
  359. /package/{dist/assets → assets}/index-CpW6Dhpp.js +0 -0
  360. /package/{dist/assets → assets}/index-D72cKELw.js +0 -0
  361. /package/{dist/assets → assets}/index-DdVFXD_y.js +0 -0
  362. /package/{dist/assets → assets}/index-DrkSoKz6.js +0 -0
  363. /package/{dist/assets → assets}/index-KCfkkJKb.js +0 -0
  364. /package/{dist/assets → assets}/index-QI9biQrR.js +0 -0
  365. /package/{dist/assets → assets}/index-ZopkeZtI.js +0 -0
  366. /package/{dist/assets → assets}/index-g-SUxfJH.js +0 -0
  367. /package/{dist/assets → assets}/index-j0kQJd0a.js +0 -0
  368. /package/{dist/assets → assets}/knowledge.svg +0 -0
  369. /package/{dist/assets → assets}/left.jpg +0 -0
  370. /package/{dist/assets → assets}/logoImg.png +0 -0
  371. /package/{dist/assets → assets}/mysql.svg +0 -0
  372. /package/{dist/assets → assets}/plus-V9zUoSq6.js +0 -0
  373. /package/{dist/assets → assets}/sensitive.svg +0 -0
  374. /package/{dist/assets → assets}/style-CGmZ5osp.js +0 -0
  375. /package/{dist/assets → assets}/style.css +0 -0
  376. /package/{dist/assets → assets}/style2.css +0 -0
  377. /package/{dist/assets → assets}/style3.css +0 -0
  378. /package/{dist/assets → assets}/style4.css +0 -0
  379. /package/{dist/assets → assets}/worker-BbpylX7l.js +0 -0
  380. /package/{dist/assets → assets}/x-CnaaLGJF.js +0 -0
  381. /package/{dist/assistantConfig.d.ts → assistantConfig.d.ts} +0 -0
  382. /package/{dist/assistantConfig.js → assistantConfig.js} +0 -0
  383. /package/{dist/chat.d.ts → chat.d.ts} +0 -0
  384. /package/{dist/database.d.ts → database.d.ts} +0 -0
  385. /package/{dist/database.js → database.js} +0 -0
  386. /package/{dist/databaseId.d.ts → databaseId.d.ts} +0 -0
  387. /package/{dist/databaseId.js → databaseId.js} +0 -0
  388. /package/{dist/databaseTable.d.ts → databaseTable.d.ts} +0 -0
  389. /package/{dist/databaseTable.js → databaseTable.js} +0 -0
  390. /package/{dist/icons → icons}/answerAwartar.png +0 -0
  391. /package/{dist/icons → icons}/docx-file.png +0 -0
  392. /package/{dist/icons → icons}/folder.png +0 -0
  393. /package/{dist/icons → icons}/html.png +0 -0
  394. /package/{dist/icons → icons}/image.png +0 -0
  395. /package/{dist/icons → icons}/jpg-file.png +0 -0
  396. /package/{dist/icons → icons}/json.png +0 -0
  397. /package/{dist/icons → icons}/md.png +0 -0
  398. /package/{dist/icons → icons}/pdf.png +0 -0
  399. /package/{dist/icons → icons}/pptx.png +0 -0
  400. /package/{dist/icons → icons}/questionAwartar.png +0 -0
  401. /package/{dist/icons → icons}/sheets.png +0 -0
  402. /package/{dist/icons → icons}/txt.png +0 -0
  403. /package/{dist/icons → icons}/xlsx.png +0 -0
  404. /package/{dist/index.d.ts → index.d.ts} +0 -0
  405. /package/{dist/index.js → index.js} +0 -0
  406. /package/{dist/modelManage.d.ts → modelManage.d.ts} +0 -0
  407. /package/{dist/modelManage.js → modelManage.js} +0 -0
  408. /package/{dist/sensitive.d.ts → sensitive.d.ts} +0 -0
  409. /package/{dist/sensitive.js → sensitive.js} +0 -0
  410. /package/{dist/streamFilesReader.d.ts → streamFilesReader.d.ts} +0 -0
  411. /package/{dist/streamFilesReader.js → streamFilesReader.js} +0 -0
  412. /package/{dist/vite.svg → vite.svg} +0 -0
  413. /package/{dist/worker → worker}/pdf.worker.min.js +0 -0
@@ -1,563 +0,0 @@
1
- import { message, Spin } from "antd";
2
- import { useEffect, useState, useMemo, useCallback, useRef } from "react";
3
- import { uid } from "uid";
4
-
5
- import AssisSelect from "./AssisSelect";
6
- import SearchInput from "./SearchInput";
7
- import ResultContent from "./ResultContent";
8
- import FileList from "./FileList";
9
- import SearchLanding from "./SearchLanding";
10
-
11
- import {
12
- api_createDialogue,
13
- api_start_kb_search,
14
- api_kbSearchHistoryList,
15
- api_kbSearchHistoryAdd,
16
- api_kbSearcHistoryDelete
17
- } from "../servers";
18
-
19
- import { getUrlPrefix } from "../utils";
20
- import "@/assets/styles/knowledgeSearch.less";
21
-
22
- // 临时类型定义
23
- enum StatusType {
24
- Pending = 0,
25
- Process = 1,
26
- Success = 2,
27
- Error = 3,
28
- Done = 4
29
- }
30
-
31
- enum ChatSystemType {
32
- TEMPORARY = 0,
33
- PERMANENT = 1
34
- }
35
-
36
- interface QAChatItem {
37
- id: string;
38
- query: {
39
- content: string;
40
- type: string;
41
- audioUrl: string;
42
- queryId: string;
43
- };
44
- answer: {
45
- content: string;
46
- };
47
- status: StatusType;
48
- searchConfigDTO?: any;
49
- }
50
-
51
- // const initialPage = {
52
- // page: 1,
53
- // pageSize: 1000
54
- // };
55
-
56
- const cfg = {
57
- url: getUrlPrefix(),
58
- enableMock: false,
59
- token: "/"
60
- };
61
-
62
- const KnowledgeSearch = () => {
63
- const token = ""; // TODO: 需要从正确的store获取token
64
- const [assistList, setAssistList] = useState<any[]>([]);
65
- const [assistId, setAssistId] = useState<string>("");
66
- const [searchRes, setSearchRes] = useState<any>({});
67
- const [keyWord, setKeyWord] = useState<string>("");
68
-
69
- const [cfgLoading, setCfgLoading] = useState(false);
70
- const [loading] = useState(false);
71
- const [isShowAssisText, setIsShowAssisText] = useState<boolean>(false);
72
- const [historyList, setHistoryList] = useState<Array<any>>([]);
73
- const [historyLoading, setHistoryLoading] = useState(false);
74
- const [isSearch, setIsSearch] = useState(false);
75
- const [filesObj, setFilesObj] = useState<any>({});
76
- const [conversation, setConversation] = useState<any>({
77
- id: uid(32),
78
- name: "",
79
- status: 0,
80
- modify_timeStamp: new Date().getTime(),
81
- sseController: new AbortController()
82
- });
83
- const streamDataRef = useRef<undefined | any>(undefined);
84
- const initMessageData = useRef<any | undefined>(undefined);
85
- const [selectFile, setSelectFile] = useState<string>("");
86
- const [selectBlock, setSelectBlock] = useState<string>("");
87
- const [isHistoryHide, setIsHistoryHide] = useState<boolean>(false);
88
- const [clickPosition, setClickPosition] = useState<any>({ x: 0, y: 0 });
89
- const [isHasSearch, setIsHasSearch] = useState<boolean>(false);
90
- const [cptKey, setCptKey] = useState<string>(uid(32));
91
-
92
- const getFileName = (url: string) => {
93
- const regex = /([^/]+)\.([^/]+)$/;
94
- const match = url.match(regex);
95
-
96
- if (match) {
97
- return {
98
- fileName: match[1],
99
- fileExtension: match[2],
100
- url
101
- };
102
- }
103
- return {};
104
- };
105
-
106
- const fileList = useMemo(() => {
107
- const keys = Object.keys(filesObj);
108
-
109
- return keys.length
110
- ? keys.map((key: string) => {
111
- const obj = {
112
- ...getFileName(key),
113
- list: (filesObj[key] || []).map((i: any, idx: number) =>
114
- Object.assign({}, i, {
115
- id: `${i.order_num || i.score}_${idx}`
116
- })
117
- )
118
- };
119
- return obj;
120
- })
121
- : [];
122
- }, [filesObj]);
123
-
124
- const handleAssistChanged = (aId: string) => {
125
- setAssistId(aId);
126
- };
127
-
128
- const getConfig = () => {
129
- return Object.assign({}, cfg, {
130
- token: token || cfg.token
131
- });
132
- };
133
-
134
- const fetchAssisList = () => {
135
- setCfgLoading(true);
136
- // TODO: 需要实现api_getHelperConfigList函数
137
- Promise.resolve({ records: [] })
138
- .then((res: any) => {
139
- let _records = res;
140
- if (Object.prototype.toString.call(_records) !== "[object Array]") {
141
- const { records } = res;
142
- _records = records || [];
143
- }
144
- const _assistId = _records && _records.length ? _records[0].id : "";
145
- setAssistList([..._records]); // TODO: 需要实现assistantDTO_to_SelectOption函数
146
- setAssistId(_assistId);
147
- })
148
- .finally(() => setCfgLoading(false));
149
- };
150
-
151
- const fetchHistoryList = () => {
152
- setHistoryLoading(true);
153
- api_kbSearchHistoryList({
154
- data: {},
155
- config: getConfig()
156
- })
157
- .then((res) => {
158
- const _list =
159
- Object.prototype.toString.call(res) === "[object Array]"
160
- ? [...res]
161
- : [];
162
- setHistoryList([...Array.from(new Set([..._list]))]);
163
- })
164
- .finally(() => {
165
- setHistoryLoading(false);
166
- });
167
- };
168
-
169
- const deleteHistory = (queryContent: string = "") => {
170
- api_kbSearcHistoryDelete({
171
- data: {
172
- queryContent
173
- },
174
- config: getConfig()
175
- }).then((res: any) => {
176
- if (res) {
177
- if (queryContent) {
178
- const _historyList = [...historyList];
179
- const idx = _historyList.findIndex((i: string) => i === queryContent);
180
- _historyList.splice(idx, 1);
181
- setHistoryList([..._historyList]);
182
- } else {
183
- setHistoryList([]);
184
- }
185
- }
186
- });
187
- };
188
-
189
- const keyOnChange = (val: string, isSearch: boolean = false) => {
190
- setKeyWord(val);
191
- if (isSearch) {
192
- setTimeout(() => {
193
- keyOnSearch(val);
194
- }, 0);
195
- }
196
- };
197
-
198
- const keyOnSearch = (val?: string) => {
199
- const _val = val || keyWord;
200
- if (_val) {
201
- setConversation({
202
- ...conversation,
203
- status: StatusType.Process,
204
- question: _val
205
- });
206
- api_kbSearchHistoryAdd({
207
- data: {
208
- queryContent: _val
209
- },
210
- config: getConfig()
211
- }).then(() => {
212
- setHistoryList([...Array.from(new Set([...historyList, _val]))]);
213
- });
214
- }
215
- };
216
-
217
- const onBlurHandler = () => {
218
- setTimeout(() => {
219
- isShowAssisText && setIsShowAssisText(false);
220
- }, 500);
221
- };
222
-
223
- const showAssisText = () => {
224
- !isShowAssisText && setIsShowAssisText(true);
225
- };
226
-
227
- const fixRetrieveTag = (content: string) => {
228
- return Object.prototype.toString.call(content) === "[object String]"
229
- ? content.replace(/\[retrive-tag[^\]]*\].*?\[\/retrive-tag\]/g, "")
230
- : content;
231
- };
232
-
233
- const onMessageCallback = useCallback((event: any) => {
234
- const curData = JSON.parse(event.data);
235
- // console.log(curData, StatusType.Done)
236
- setConversation({
237
- ...conversation,
238
- status: curData.status
239
- });
240
- if (curData.status === StatusType.Done) {
241
- const { docsTree } = curData;
242
- if (docsTree) {
243
- try {
244
- setFilesObj(JSON.parse(docsTree));
245
- } catch (e) {
246
- console.log(e);
247
- }
248
- }
249
- setIsSearch(false);
250
- setSearchRes((prevChat: any) => {
251
- streamDataRef.current =
252
- streamDataRef.current || initMessageData.current;
253
- if (streamDataRef.current) {
254
- const lastData = { ...curData };
255
- lastData.reply.content =
256
- streamDataRef.current?.answer?.content + curData.reply.content ||
257
- "";
258
- const data = lastData; // TODO: 需要实现stremDataToQAdata函数
259
- // console.log("最新对话的最终处理数据", data)
260
- const p = {
261
- ...streamDataRef.current,
262
- answer: {
263
- ...streamDataRef.current.answer,
264
- id: data?.qaData?.id || "",
265
- reference: data?.qaData?.answer?.reference || [],
266
- content: fixRetrieveTag(lastData.reply.content),
267
- type: "text"
268
- },
269
- status: StatusType.Done
270
- };
271
- // console.log("最新对话的最终数据", p)
272
- streamDataRef.current = undefined;
273
- return { ...p };
274
- }
275
- return prevChat;
276
- });
277
- } else {
278
- streamDataRef.current = !streamDataRef.current
279
- ? initMessageData.current
280
- : {
281
- ...streamDataRef.current,
282
- answer: {
283
- ...(curData.reply || {}),
284
- content:
285
- streamDataRef.current.answer.content +
286
- (curData.reply.content || ""),
287
- type: "text" // 修正类型
288
- }
289
- };
290
- try {
291
- setSearchRes((prevChat: any) => {
292
- if (streamDataRef.current) {
293
- const lastData = { ...curData };
294
- lastData.reply.content =
295
- streamDataRef.current?.answer?.content || "";
296
- const data = lastData; // TODO: 需要实现stremDataToQAdata函数
297
- if (streamDataRef.current?.answer?.reference) {
298
- streamDataRef.current.answer.reference =
299
- data?.qaData?.answer?.reference || [];
300
- streamDataRef.current.answer.id = data?.qaData?.id || "";
301
- }
302
- // console.log("data :", data)
303
- const p = {
304
- ...streamDataRef.current,
305
- status: StatusType.Process
306
- };
307
- return { ...p };
308
- }
309
- return prevChat;
310
- });
311
- } catch (e) {
312
- console.error(e);
313
- }
314
- }
315
- }, []);
316
-
317
- const onErrorCallback = useCallback(
318
- (e: any) => {
319
- setIsSearch(false);
320
- setConversation({
321
- ...conversation,
322
- status: StatusType.Done
323
- });
324
-
325
- setSearchRes((_prevChat: any) => {
326
- const p = {
327
- ...(streamDataRef.current || initMessageData.current),
328
- status: StatusType.Done
329
- };
330
- streamDataRef.current = undefined;
331
- return { ...p };
332
- });
333
- message.error("请求失败!");
334
- throw e;
335
- },
336
- [conversation]
337
- );
338
-
339
- const onCloseCallback = useCallback(() => {
340
- setIsSearch(false);
341
- // console.log("onCloseCallback sse")
342
- // console.log("这里已经关闭了,不应该有数据")
343
- conversation?.sseController.abort();
344
- }, [conversation]);
345
-
346
- const resetAll = () => {
347
- setIsSearch(true);
348
- setSearchRes({});
349
- setFilesObj({});
350
- clearSelect();
351
- };
352
-
353
- const clearSelect = () => {
354
- setSelectBlock("");
355
- setSelectFile("");
356
- };
357
-
358
- const selectFileHandler = (fileId: string) => {
359
- setSelectFile(fileId);
360
- setSelectBlock("");
361
- };
362
-
363
- const selectBlockHandler = (blockId: string) => {
364
- setSelectBlock(blockId);
365
- };
366
-
367
- const historyHideHandler = (sta: boolean) => {
368
- if (sta !== isHistoryHide) {
369
- setIsHistoryHide(sta);
370
- setTimeout(() => {
371
- setIsHistoryHide(!sta);
372
- }, 10);
373
- }
374
- };
375
-
376
- const containerClickHandler = (e: any) => {
377
- // e.preventDefault()
378
- // e.stopPropagation()
379
- if (!isHasSearch) {
380
- const { clientX, clientY } = e;
381
- // console.log(e.target, clientX, clientY)
382
- setClickPosition({
383
- x: clientX,
384
- y: clientY
385
- });
386
- }
387
- };
388
-
389
- const resetClickPosition = (data: any) => {
390
- setClickPosition({ ...data });
391
- };
392
-
393
- useEffect(() => {
394
- const asyncEffect = async () => {
395
- if (
396
- conversation &&
397
- conversation.status === StatusType.Process &&
398
- conversation?.question &&
399
- keyWord
400
- ) {
401
- resetAll();
402
- const dialogId = `${uid(32)}_${assistId}`;
403
- const res = await api_createDialogue({
404
- data: {
405
- label: keyWord,
406
- sessionId: dialogId,
407
- assist_id: assistId!,
408
- sysType: ChatSystemType.TEMPORARY as any
409
- },
410
- config: getConfig()
411
- });
412
-
413
- if (res && conversation.status === StatusType.Process) {
414
- conversation.sseController = new AbortController();
415
- const chat_id = uid(32);
416
- const serverInfo = getConfig();
417
- conversation?.sseController.abort();
418
- api_start_kb_search({
419
- data: {
420
- sessionId: res.sessionId,
421
- queryId: chat_id,
422
- name: res.name,
423
- lastDate: new Date().getTime().toString(),
424
- type: "text",
425
- content: keyWord,
426
- configId: res.configId,
427
- audioUrl: "",
428
- onMessage: onMessageCallback,
429
- onError: onErrorCallback,
430
- onClose: onCloseCallback,
431
- signal: conversation.sseController.signal
432
- },
433
- config: {
434
- url: serverInfo.url,
435
- token: serverInfo.token,
436
- enableMock: false
437
- }
438
- });
439
- }
440
- const p: QAChatItem = {
441
- id: res ? res.sessionId : dialogId!,
442
- query: {
443
- content: keyWord!,
444
- type: "text",
445
- audioUrl: "",
446
- queryId: uid(32)
447
- },
448
- answer: {
449
- content: ""
450
- },
451
- status: StatusType.Pending,
452
- searchConfigDTO: res ? res.searchConfigDTO : undefined // 添加此行以解决错误
453
- };
454
- initMessageData.current = p;
455
- if (!isHasSearch) {
456
- setIsHasSearch(true);
457
- }
458
- setCptKey(uid(32));
459
- setSearchRes((_prevChat: any) => {
460
- return { ..._prevChat, ...p };
461
- });
462
- }
463
- };
464
- asyncEffect();
465
- }, [conversation]);
466
-
467
- useEffect(() => {
468
- fetchAssisList();
469
- fetchHistoryList();
470
- }, []);
471
-
472
- return (
473
- <div
474
- className="knowledge-search-wrap p-5 mb-10 pr-0"
475
- onClick={containerClickHandler}
476
- >
477
- <Spin spinning={loading}>
478
- <div className="flex h-12 pr-5">
479
- {isHasSearch ? (
480
- <div className="flex-1 pr-5 search-wrap">
481
- <SearchInput
482
- loading={false}
483
- keyWord={keyWord}
484
- historyList={historyList}
485
- historyLoading={historyLoading}
486
- isSearch={isSearch}
487
- isHistoryHide={isHistoryHide}
488
- keyOnChange={keyOnChange}
489
- keyOnSearch={keyOnSearch}
490
- deleteHistory={deleteHistory}
491
- />
492
- </div>
493
- ) : null}
494
- <div className="min-w-[448px] w-1/3">
495
- {isHasSearch ? (
496
- <AssisSelect
497
- disabled={false}
498
- assistList={assistList}
499
- value={assistId || ""}
500
- loading={cfgLoading}
501
- onChange={handleAssistChanged}
502
- />
503
- ) : (
504
- <div
505
- className={`show-search-select-wrap`}
506
- onFocus={showAssisText}
507
- >
508
- <div className="select-wrap">
509
- <AssisSelect
510
- disabled={false}
511
- assistList={assistList}
512
- value={assistId || ""}
513
- loading={cfgLoading}
514
- onChange={handleAssistChanged}
515
- onBlurHandler={onBlurHandler}
516
- />
517
- </div>
518
- </div>
519
- )}
520
- </div>
521
- </div>
522
- {!isHasSearch ? (
523
- <SearchLanding
524
- keyWord={keyWord}
525
- historyList={historyList}
526
- historyLoading={historyLoading}
527
- isSearch={isSearch}
528
- isHistoryHide={isHistoryHide}
529
- clickPosition={clickPosition}
530
- keyOnChange={keyOnChange}
531
- keyOnSearch={keyOnSearch}
532
- setKeyWord={setKeyWord}
533
- deleteHistory={deleteHistory}
534
- resetClickPosition={resetClickPosition}
535
- />
536
- ) : (
537
- <div className="result-wrap">
538
- <ResultContent
539
- answer={searchRes.answer}
540
- status={conversation.status}
541
- selectFile={selectFile}
542
- selectBlock={selectBlock}
543
- isHistoryHide={isHistoryHide}
544
- fileList={fileList}
545
- historyHideHandler={historyHideHandler}
546
- clearSelect={clearSelect}
547
- />
548
- <FileList
549
- key={`file-list-${cptKey}`}
550
- fileList={fileList}
551
- selectFile={selectFile}
552
- selectBlock={selectBlock}
553
- selectFileHandler={selectFileHandler}
554
- selectBlockHandler={selectBlockHandler}
555
- />
556
- </div>
557
- )}
558
- </Spin>
559
- </div>
560
- );
561
- };
562
-
563
- export default KnowledgeSearch;
@@ -1,158 +0,0 @@
1
- import React, { useState, useRef, useEffect } from 'react';
2
- import styled from 'styled-components';
3
-
4
- const EditorContainer = styled.div`
5
- border: 1px solid #d9d9d9;
6
- border-radius: 6px;
7
- padding: 8px 12px;
8
- min-height: 100px;
9
- background: #fff;
10
- transition: border-color 0.3s;
11
-
12
- &:focus-within {
13
- border-color: #1890ff;
14
- box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2);
15
- }
16
- `;
17
-
18
- const EditorContent = styled.div`
19
- outline: none;
20
- min-height: 80px;
21
- line-height: 1.5;
22
- color: #262626;
23
- font-size: 14px;
24
-
25
- &[contenteditable="true"]:empty:before {
26
- content: attr(data-placeholder);
27
- color: #bfbfbf;
28
- pointer-events: none;
29
- }
30
- `;
31
-
32
- const Toolbar = styled.div`
33
- display: flex;
34
- gap: 8px;
35
- margin-bottom: 8px;
36
- padding: 4px 0;
37
- border-bottom: 1px solid #f0f0f0;
38
- `;
39
-
40
- const ToolbarButton = styled.button<{ active?: boolean }>`
41
- padding: 4px 8px;
42
- border: 1px solid #d9d9d9;
43
- border-radius: 4px;
44
- background: ${props => props.active ? '#1890ff' : '#fff'};
45
- color: ${props => props.active ? '#fff' : '#262626'};
46
- cursor: pointer;
47
- font-size: 12px;
48
- transition: all 0.3s;
49
-
50
- &:hover {
51
- border-color: #1890ff;
52
- color: #1890ff;
53
- }
54
-
55
- &:disabled {
56
- opacity: 0.5;
57
- cursor: not-allowed;
58
- }
59
- `;
60
-
61
- interface SimpleEditorProps {
62
- value?: string;
63
- onChange?: (value: string) => void;
64
- placeholder?: string;
65
- readOnly?: boolean;
66
- className?: string;
67
- }
68
-
69
- const SimpleEditor: React.FC<SimpleEditorProps> = ({
70
- value = '',
71
- onChange,
72
- placeholder = '请输入内容...',
73
- readOnly = false,
74
- className
75
- }) => {
76
- const editorRef = useRef<HTMLDivElement>(null);
77
- const [isBold, setIsBold] = useState(false);
78
- const [isItalic, setIsItalic] = useState(false);
79
-
80
- useEffect(() => {
81
- if (editorRef.current && editorRef.current.innerHTML !== value) {
82
- editorRef.current.innerHTML = value;
83
- }
84
- }, [value]);
85
-
86
- const handleInput = () => {
87
- if (editorRef.current && onChange) {
88
- onChange(editorRef.current.innerHTML);
89
- }
90
- };
91
-
92
- const execCommand = (command: string, value?: string) => {
93
- document.execCommand(command, false, value);
94
- editorRef.current?.focus();
95
- handleInput();
96
- };
97
-
98
- const toggleBold = () => {
99
- execCommand('bold');
100
- setIsBold(!isBold);
101
- };
102
-
103
- const toggleItalic = () => {
104
- execCommand('italic');
105
- setIsItalic(!isItalic);
106
- };
107
-
108
- const insertLink = () => {
109
- const url = prompt('请输入链接地址:');
110
- if (url) {
111
- execCommand('createLink', url);
112
- }
113
- };
114
-
115
- const insertList = () => {
116
- execCommand('insertUnorderedList');
117
- };
118
-
119
- return (
120
- <div className={className}>
121
- {!readOnly && (
122
- <Toolbar>
123
- <ToolbarButton
124
- active={isBold}
125
- onClick={toggleBold}
126
- onMouseDown={(e) => e.preventDefault()}
127
- >
128
- 粗体
129
- </ToolbarButton>
130
- <ToolbarButton
131
- active={isItalic}
132
- onClick={toggleItalic}
133
- onMouseDown={(e) => e.preventDefault()}
134
- >
135
- 斜体
136
- </ToolbarButton>
137
- <ToolbarButton onClick={insertLink} onMouseDown={(e) => e.preventDefault()}>
138
- 链接
139
- </ToolbarButton>
140
- <ToolbarButton onClick={insertList} onMouseDown={(e) => e.preventDefault()}>
141
- 列表
142
- </ToolbarButton>
143
- </Toolbar>
144
- )}
145
- <EditorContainer>
146
- <EditorContent
147
- ref={editorRef}
148
- contentEditable={!readOnly}
149
- onInput={handleInput}
150
- data-placeholder={placeholder}
151
- dangerouslySetInnerHTML={{ __html: value }}
152
- />
153
- </EditorContainer>
154
- </div>
155
- );
156
- };
157
-
158
- export default SimpleEditor;