@gientech/modual 1.3.2 → 1.3.3

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 (309) hide show
  1. package/.editorconfig +38 -0
  2. package/.prettierignore +16 -0
  3. package/.prettierrc +17 -0
  4. package/README.md +129 -129
  5. package/USAGE.md +191 -0
  6. package/bash.exe.stackdump +40 -0
  7. package/components.json +21 -0
  8. package/dist/README.md +129 -0
  9. package/{assets → dist/assets}/database.svg +11 -11
  10. package/{assets → dist/assets}/database_add.svg +53 -53
  11. package/{assets → dist/assets}/database_connect.svg +66 -66
  12. package/{assets → dist/assets}/database_upload.svg +29 -29
  13. package/{assets → dist/assets}/defaultWeLogo.svg +14 -14
  14. package/{assets/index-ldqIbm0x.js → dist/assets/index-XvC_4jDB.js} +106 -101
  15. package/{assets/index-D-dGaGjW.js → dist/assets/index-mPgEc8KC.js} +288 -102
  16. package/{assets/MySQL.svg → dist/assets/mysql.svg} +14 -14
  17. package/dist/assets/style.css +1 -0
  18. package/dist/assets/style3.css +1 -0
  19. package/{chat.js → dist/chat.js} +78 -78
  20. package/dist/database.js +20 -0
  21. package/{databaseId.js → dist/databaseId.js} +1 -1
  22. package/{databaseTable.js → dist/databaseTable.js} +1 -1
  23. package/{modelManage.js → dist/modelManage.js} +1 -1
  24. package/dist/package.json +56 -0
  25. package/{sensitive.js → dist/sensitive.js} +1 -1
  26. package/{streamFilesReader.js → dist/streamFilesReader.js} +11 -11
  27. package/{worker → dist/worker}/pdf.worker.min.js +21 -21
  28. package/doc_assets/2.png +0 -0
  29. package/doc_assets/demo.md +27 -0
  30. package/doc_assets/demos/dist-app/assets/index.Dh-ZAS9Z.css +2 -0
  31. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js +23699 -0
  32. package/doc_assets/demos/dist-app/assets/index.Dv8KVW18.js.map +1 -0
  33. package/doc_assets/demos/dist-app/index.html +14 -0
  34. package/doc_assets/demos/dist-app/vite.svg +1 -0
  35. package/doc_assets/images/1.png +0 -0
  36. package/doc_assets/images/3.png +0 -0
  37. package/doc_assets/images/component-screenshot.png +1 -0
  38. package/doc_assets/install.md +5 -0
  39. package/eslint.config.js +92 -0
  40. package/index.html +13 -0
  41. package/package.json +83 -39
  42. package/postcss.config.cjs +19 -0
  43. package/public/vite.svg +1 -0
  44. package/public/worker/pdf.worker.min.js +22 -0
  45. package/scripts/README.md +133 -0
  46. package/scripts/build-demo.js +88 -0
  47. package/scripts/demo-selector.js +216 -0
  48. package/scripts/dev-demo.js +76 -0
  49. package/scripts/preview-demo.js +130 -0
  50. package/scripts/run-demo.bat +34 -0
  51. package/src/assets/img/downArrow.png +0 -0
  52. package/src/assets/img/excel.png +0 -0
  53. package/src/assets/img/img.png +0 -0
  54. package/src/assets/img/pdf.png +0 -0
  55. package/src/assets/img/ppt.png +0 -0
  56. package/src/assets/img/txt.png +0 -0
  57. package/src/assets/img/word.png +0 -0
  58. package/src/assets/login/homeBg.png +0 -0
  59. package/src/assets/login/left.jpg +0 -0
  60. package/src/assets/login/logoImg.png +0 -0
  61. package/src/examples/LoginPage/index.tsx +18 -0
  62. package/src/examples/aaa/index.tsx +3758 -0
  63. package/src/examples/chat/components/DrawerGraphPreview.tsx +78 -0
  64. package/src/examples/chat/index.tsx +190 -0
  65. package/src/examples/gientechStreamFilesReader/index.tsx +1016 -0
  66. package/src/examples/ragDatabaseDataPage/index.tsx +36 -0
  67. package/src/examples/ragDatabaseIdPage/index.tsx +44 -0
  68. package/src/examples/ragDatabasePage/index.tsx +36 -0
  69. package/src/examples/ragModelManagePage/index.tsx +37 -0
  70. package/src/examples/ragSearchPage/index.tsx +0 -0
  71. package/src/examples/ragSensitiveWordsPage/index.tsx +32 -0
  72. package/src/examples/streamFiles/index.tsx +384 -0
  73. package/src/lib_enter.ts +38 -0
  74. package/src/main.tsx +5 -0
  75. package/src/main.tsx.backup +5 -0
  76. package/src/modules/chat/Conversations/Item.tsx +167 -0
  77. package/src/modules/chat/Conversations/List.tsx +143 -0
  78. package/src/modules/chat/Conversations/groupByTime.ts +39 -0
  79. package/src/modules/chat/Conversations/index.tsx +212 -0
  80. package/src/modules/chat/constants.tsx +33 -0
  81. package/src/modules/chat/data.txt +82 -0
  82. package/src/modules/chat/index.tsx +1908 -0
  83. package/src/modules/chat/types.ts +17 -0
  84. package/src/modules/database/CreateModal.tsx +398 -0
  85. package/src/modules/database/assets/Doris.png +0 -0
  86. package/src/modules/database/assets/PostgreSQL.png +0 -0
  87. package/src/modules/database/assets/SQLServer.png +0 -0
  88. package/src/modules/database/assets/database.svg +11 -0
  89. package/src/modules/database/assets/database_add.svg +53 -0
  90. package/src/modules/database/assets/database_connect.svg +66 -0
  91. package/src/modules/database/assets/database_upload.svg +29 -0
  92. package/src/modules/database/assets/empty.png +0 -0
  93. package/src/modules/database/assets/mysql.svg +14 -0
  94. package/src/modules/database/index.tsx +466 -0
  95. package/src/modules/database/server.ts +196 -0
  96. package/src/modules/databaseId/CustomCom.tsx +156 -0
  97. package/src/modules/databaseId/EditConfig.tsx +268 -0
  98. package/src/modules/databaseId/UploadDrawer.tsx +520 -0
  99. package/src/modules/databaseId/assets/aiOptimize.svg +10 -0
  100. package/src/modules/databaseId/assets/empty.png +0 -0
  101. package/src/modules/databaseId/assets/template.svg +6 -0
  102. package/src/modules/databaseId/assets/upload.svg +9 -0
  103. package/src/modules/databaseId/assets/useTemp.svg +6 -0
  104. package/src/modules/databaseId/index.tsx +734 -0
  105. package/src/modules/databaseId/server.ts +286 -0
  106. package/src/modules/databaseId/style.css +5 -0
  107. package/src/modules/databaseTable/EditRowDrawer.tsx +119 -0
  108. package/src/modules/databaseTable/index.tsx +357 -0
  109. package/src/modules/databaseTable/server.ts +180 -0
  110. package/src/modules/headlessChat/constants.tsx +32 -0
  111. package/src/modules/headlessChat/index.tsx +1065 -0
  112. package/src/modules/headlessChat/types.ts +23 -0
  113. package/src/modules/login/components/Login/LoginBox/index.tsx +102 -0
  114. package/src/modules/login/components/Login/RegisterBox/index.tsx +180 -0
  115. package/src/modules/login/components/Login/index.tsx +100 -0
  116. package/src/modules/login/index.tsx +106 -0
  117. package/src/modules/login/style.css +3 -0
  118. package/src/modules/login/useServices.ts +53 -0
  119. package/src/modules/login/utils.ts +42 -0
  120. package/src/modules/modelManage/ConfigDrawer.tsx +249 -0
  121. package/src/modules/modelManage/assets/empty.png +0 -0
  122. package/src/modules/modelManage/const.ts +50 -0
  123. package/src/modules/modelManage/index.tsx +439 -0
  124. package/src/modules/modelManage/server.ts +185 -0
  125. package/src/modules/nodegraph/index.tsx +1 -0
  126. package/src/modules/search/assets/Icon-history.svg +8 -0
  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 +9 -0
  131. package/src/modules/search/assets/icon-search-bar.svg +14 -0
  132. package/src/modules/search/assets/icon-sub-title.svg +3 -0
  133. package/src/modules/search/assets/icon-title.svg +9 -0
  134. package/src/modules/search/assets/icon-zoomOut.svg +9 -0
  135. package/src/modules/search/assets/iconAi.svg +9 -0
  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 +3 -0
  139. package/src/modules/search/assets/selected.svg +4 -0
  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 +137 -0
  143. package/src/modules/search/components/Editor/ChatViewEditor.tsx +261 -0
  144. package/src/modules/search/components/Editor/aichat.css +1 -0
  145. package/src/modules/search/components/Editor/constant.ts +13 -0
  146. package/src/modules/search/components/Editor/index.tsx +113 -0
  147. package/src/modules/search/components/Editor/plugins/autofomatRules.ts +332 -0
  148. package/src/modules/search/components/Editor/plugins/convertImgPlugins.tsx +20 -0
  149. package/src/modules/search/components/Editor/plugins/createIndexes.tsx +38 -0
  150. package/src/modules/search/components/Editor/plugins/displayer.ts +298 -0
  151. package/src/modules/search/components/Editor/plugins/imageClick.tsx +32 -0
  152. package/src/modules/search/components/Editor/plugins/myplugin.tsx +98 -0
  153. package/src/modules/search/components/Editor/ui/avatar.tsx +19 -0
  154. package/src/modules/search/components/Editor/ui/blockquote-element.tsx +21 -0
  155. package/src/modules/search/components/Editor/ui/button.tsx +58 -0
  156. package/src/modules/search/components/Editor/ui/calendar.tsx +68 -0
  157. package/src/modules/search/components/Editor/ui/caption.tsx +46 -0
  158. package/src/modules/search/components/Editor/ui/checkbox.tsx +27 -0
  159. package/src/modules/search/components/Editor/ui/code-block-combobox.tsx +188 -0
  160. package/src/modules/search/components/Editor/ui/code-block-element.css +434 -0
  161. package/src/modules/search/components/Editor/ui/code-block-element.tsx +39 -0
  162. package/src/modules/search/components/Editor/ui/code-leaf.tsx +24 -0
  163. package/src/modules/search/components/Editor/ui/code-line-element.tsx +10 -0
  164. package/src/modules/search/components/Editor/ui/code-syntax-leaf.tsx +21 -0
  165. package/src/modules/search/components/Editor/ui/column-element.tsx +30 -0
  166. package/src/modules/search/components/Editor/ui/column-group-element.tsx +94 -0
  167. package/src/modules/search/components/Editor/ui/command.tsx +75 -0
  168. package/src/modules/search/components/Editor/ui/comment-avatar.tsx +22 -0
  169. package/src/modules/search/components/Editor/ui/comment-create-form.tsx +37 -0
  170. package/src/modules/search/components/Editor/ui/comment-item.tsx +74 -0
  171. package/src/modules/search/components/Editor/ui/comment-leaf.tsx +49 -0
  172. package/src/modules/search/components/Editor/ui/comment-more-dropdown.tsx +42 -0
  173. package/src/modules/search/components/Editor/ui/comment-reply-items.tsx +22 -0
  174. package/src/modules/search/components/Editor/ui/comment-resolve-button.tsx +32 -0
  175. package/src/modules/search/components/Editor/ui/comment-value.tsx +34 -0
  176. package/src/modules/search/components/Editor/ui/comments-popover.tsx +63 -0
  177. package/src/modules/search/components/Editor/ui/date-element.tsx +83 -0
  178. package/src/modules/search/components/Editor/ui/dialog.tsx +63 -0
  179. package/src/modules/search/components/Editor/ui/draggable.tsx +177 -0
  180. package/src/modules/search/components/Editor/ui/dropdown-menu.tsx +180 -0
  181. package/src/modules/search/components/Editor/ui/emoji-input-element.tsx +85 -0
  182. package/src/modules/search/components/Editor/ui/excalidraw-element.tsx +28 -0
  183. package/src/modules/search/components/Editor/ui/fixed-toolbar-buttons.tsx +76 -0
  184. package/src/modules/search/components/Editor/ui/fixed-toolbar.tsx +8 -0
  185. package/src/modules/search/components/Editor/ui/floating-toolbar-buttons.tsx +51 -0
  186. package/src/modules/search/components/Editor/ui/floating-toolbar.tsx +77 -0
  187. package/src/modules/search/components/Editor/ui/heading-element.tsx +48 -0
  188. package/src/modules/search/components/Editor/ui/highlight-leaf.tsx +17 -0
  189. package/src/modules/search/components/Editor/ui/hr-element.tsx +30 -0
  190. package/src/modules/search/components/Editor/ui/icons.tsx +267 -0
  191. package/src/modules/search/components/Editor/ui/image-element.tsx +74 -0
  192. package/src/modules/search/components/Editor/ui/inline-combobox.tsx +368 -0
  193. package/src/modules/search/components/Editor/ui/input.tsx +25 -0
  194. package/src/modules/search/components/Editor/ui/insert-dropdown-menu.tsx +218 -0
  195. package/src/modules/search/components/Editor/ui/kbd-leaf.tsx +20 -0
  196. package/src/modules/search/components/Editor/ui/link-element.tsx +29 -0
  197. package/src/modules/search/components/Editor/ui/link-floating-toolbar.tsx +161 -0
  198. package/src/modules/search/components/Editor/ui/list-element.tsx +30 -0
  199. package/src/modules/search/components/Editor/ui/mark-toolbar-button.tsx +24 -0
  200. package/src/modules/search/components/Editor/ui/media-embed-element.tsx +133 -0
  201. package/src/modules/search/components/Editor/ui/media-popover.tsx +97 -0
  202. package/src/modules/search/components/Editor/ui/mention-element.tsx +43 -0
  203. package/src/modules/search/components/Editor/ui/mention-input-element.tsx +141 -0
  204. package/src/modules/search/components/Editor/ui/mode-dropdown-menu.tsx +93 -0
  205. package/src/modules/search/components/Editor/ui/more-dropdown-menu.tsx +67 -0
  206. package/src/modules/search/components/Editor/ui/paragraph-element.tsx +4 -0
  207. package/src/modules/search/components/Editor/ui/placeholder.tsx +52 -0
  208. package/src/modules/search/components/Editor/ui/popover.tsx +32 -0
  209. package/src/modules/search/components/Editor/ui/resizable.tsx +66 -0
  210. package/src/modules/search/components/Editor/ui/separator.tsx +25 -0
  211. package/src/modules/search/components/Editor/ui/style.less +12 -0
  212. package/src/modules/search/components/Editor/ui/table-cell-element.tsx +143 -0
  213. package/src/modules/search/components/Editor/ui/table-element.tsx +243 -0
  214. package/src/modules/search/components/Editor/ui/table-row-element.tsx +22 -0
  215. package/src/modules/search/components/Editor/ui/tableValue.tsx +135 -0
  216. package/src/modules/search/components/Editor/ui/todo-list-element.tsx +43 -0
  217. package/src/modules/search/components/Editor/ui/toggle-element.tsx +31 -0
  218. package/src/modules/search/components/Editor/ui/toolbar.tsx +157 -0
  219. package/src/modules/search/components/Editor/ui/tooltip.tsx +65 -0
  220. package/src/modules/search/components/Editor/ui/turn-into-dropdown-menu.tsx +160 -0
  221. package/src/modules/search/components/Editor/ui/with-draggables.tsx +175 -0
  222. package/src/modules/search/components/FileList.tsx +287 -0
  223. package/src/modules/search/components/ImageGroupView/index.tsx +85 -0
  224. package/src/modules/search/components/ResultContent.tsx +232 -0
  225. package/src/modules/search/components/SearchInput.tsx +232 -0
  226. package/src/modules/search/components/SearchLanding.tsx +74 -0
  227. package/src/modules/search/components/SearchView.tsx +563 -0
  228. package/src/modules/search/components/SimpleEditor.tsx +158 -0
  229. package/src/modules/search/components/SimpleFileList.tsx +215 -0
  230. package/src/modules/search/index.tsx +10 -0
  231. package/src/modules/search/reademe.md +1 -0
  232. package/src/modules/search/servers/apis.tsx +19 -0
  233. package/src/modules/search/servers/index.ts +184 -0
  234. package/src/modules/search/style.less +503 -0
  235. package/src/modules/search/type.ts +22 -0
  236. package/src/modules/search/utils.ts +34 -0
  237. package/src/modules/sensitive/index.tsx +313 -0
  238. package/src/modules/sensitive/server.ts +122 -0
  239. package/src/modules/streamFilesReader/GientechStreamReader.tsx +1555 -0
  240. package/src/modules/streamFilesReader/components/Header/Toolbar.tsx +0 -0
  241. package/src/modules/streamFilesReader/components/Header/index.tsx +297 -0
  242. package/src/modules/streamFilesReader/index.tsx +3 -0
  243. package/src/style.css +6 -0
  244. package/src/type.d.ts +0 -0
  245. package/src/utils/commonFn.tsx +111 -0
  246. package/src/utils/gientechCommon/components/AppError.tsx +32 -0
  247. package/src/utils/gientechCommon/components/AppLoading.tsx +75 -0
  248. package/src/utils/gientechCommon/components/DeleteModal.tsx +75 -0
  249. package/src/utils/gientechCommon/components/DisplayError.tsx +33 -0
  250. package/src/utils/gientechCommon/components/DisplayLoading.tsx +38 -0
  251. package/src/utils/gientechCommon/components/FeedBackModal.tsx +310 -0
  252. package/src/utils/gientechCommon/components/FileCardCommon.tsx +82 -0
  253. package/src/utils/gientechCommon/components/FileManager/index.tsx +390 -0
  254. package/src/utils/gientechCommon/components/FileManager/style.css +5 -0
  255. package/src/utils/gientechCommon/components/Messages/GientechNewChatWelcome.tsx +296 -0
  256. package/src/utils/gientechCommon/components/Messages/ReferenceCard.tsx +339 -0
  257. package/src/utils/gientechCommon/components/Messages/RetriveItem.tsx +245 -0
  258. package/src/utils/gientechCommon/components/Messages/WebRetriveItem.tsx +209 -0
  259. package/src/utils/gientechCommon/components/Messages/defaultBot.png +0 -0
  260. package/src/utils/gientechCommon/components/Messages/defaultStyleSet.tsx +148 -0
  261. package/src/utils/gientechCommon/components/Messages/defaultWeLogo.svg +14 -0
  262. package/src/utils/gientechCommon/components/RenameModal.tsx +86 -0
  263. package/src/utils/gientechCommon/components/style.less +11 -0
  264. package/src/utils/gientechCommon/configs/commonConfig.ts +2 -0
  265. package/src/utils/gientechCommon/configs/senderConfig.ts +0 -0
  266. package/src/utils/gientechCommon/configs/stylesConfig.ts +142 -0
  267. package/src/utils/gientechCommon/hooks/AichatUseController.tsx +345 -0
  268. package/src/utils/gientechCommon/slate/converters/deserializers.ts +763 -0
  269. package/src/utils/gientechCommon/slate/converters/mockData.ts +232 -0
  270. package/src/utils/gientechCommon/slate/converters/slateConverters.ts +258 -0
  271. package/src/utils/gientechCommon/slate/richElements/index.tsx +499 -0
  272. package/src/utils/gientechCommon/utils/request.ts +37 -0
  273. package/src/utils/gientechCommon/utils/serverFn.ts +172 -0
  274. package/src/utils/index.tsx +126 -0
  275. package/src/utils/testconfigs/demologin/index.tsx +32 -0
  276. package/src/utils/testconfigs/index.ts +53 -0
  277. package/src/vite-env.d.ts +11 -0
  278. package/stats.html +4949 -0
  279. package/tailwind.config.js +170 -0
  280. package/tsconfig.app.json +30 -0
  281. package/tsconfig.app.tsbuildinfo +11 -0
  282. package/tsconfig.json +13 -0
  283. package/tsconfig.node.json +22 -0
  284. package/tsconfig.node.tsbuildinfo +1 -0
  285. package/vite.config.ts +177 -0
  286. package/workflows/release.yml +60 -0
  287. package/assets/style.css +0 -1
  288. package/assets/style3.css +0 -1
  289. package/database.js +0 -20
  290. /package/{assets → dist/assets}/Doris.png +0 -0
  291. /package/{assets → dist/assets}/PostgreSQL.png +0 -0
  292. /package/{assets → dist/assets}/SQLServer.png +0 -0
  293. /package/{assets → dist/assets}/_commonjsHelpers-gnU0ypJ3.js +0 -0
  294. /package/{assets → dist/assets}/circle-alert-g2Y6zAjt.js +0 -0
  295. /package/{assets → dist/assets}/empty.png +0 -0
  296. /package/{assets → dist/assets}/index-CEK88UzR.js +0 -0
  297. /package/{assets → dist/assets}/index-CpW6Dhpp.js +0 -0
  298. /package/{assets → dist/assets}/plus-omCUN0e3.js +0 -0
  299. /package/{assets → dist/assets}/style2.css +0 -0
  300. /package/{assets → dist/assets}/styled-components.browser.esm-DPkS13KC.js +0 -0
  301. /package/{assets → dist/assets}/x-vPcWt3fC.js +0 -0
  302. /package/{chat.d.ts → dist/chat.d.ts} +0 -0
  303. /package/{database.d.ts → dist/database.d.ts} +0 -0
  304. /package/{databaseId.d.ts → dist/databaseId.d.ts} +0 -0
  305. /package/{databaseTable.d.ts → dist/databaseTable.d.ts} +0 -0
  306. /package/{modelManage.d.ts → dist/modelManage.d.ts} +0 -0
  307. /package/{sensitive.d.ts → dist/sensitive.d.ts} +0 -0
  308. /package/{streamFilesReader.d.ts → dist/streamFilesReader.d.ts} +0 -0
  309. /package/{vite.svg → dist/vite.svg} +0 -0
@@ -0,0 +1,243 @@
1
+ import React from "react";
2
+
3
+ import type * as DropdownMenuPrimitive from "@radix-ui/react-dropdown-menu";
4
+ import type { TTableElement } from "@udecode/plate-table";
5
+
6
+ import { PopoverAnchor } from "@radix-ui/react-popover";
7
+ import { cn, withRef } from "@udecode/cn";
8
+ import { isSelectionExpanded } from "@udecode/plate-common";
9
+ import {
10
+ PlateElement,
11
+ useEditorRef,
12
+ useEditorSelector,
13
+ useElement,
14
+ useRemoveNodeButton,
15
+ withHOC
16
+ } from "@udecode/plate-common/react";
17
+ import {
18
+ TableProvider,
19
+ mergeTableCells,
20
+ unmergeTableCells,
21
+ useTableBordersDropdownMenuContentState,
22
+ useTableElement,
23
+ useTableElementState,
24
+ useTableMergeState
25
+ } from "@udecode/plate-table/react";
26
+ import { useReadOnly, useSelected } from "slate-react";
27
+
28
+ import { Icons, iconVariants } from "./icons";
29
+
30
+ import { Button } from "./button";
31
+ import {
32
+ DropdownMenu,
33
+ DropdownMenuCheckboxItem,
34
+ DropdownMenuContent,
35
+ DropdownMenuPortal,
36
+ DropdownMenuTrigger
37
+ } from "./dropdown-menu";
38
+ import { Popover, PopoverContent, popoverVariants } from "./popover";
39
+ import { Separator } from "./separator";
40
+
41
+ export const TableBordersDropdownMenuContent = withRef<
42
+ typeof DropdownMenuPrimitive.Content
43
+ >((props, ref) => {
44
+ const {
45
+ getOnSelectTableBorder,
46
+ hasBottomBorder,
47
+ hasLeftBorder,
48
+ hasNoBorders,
49
+ hasOuterBorders,
50
+ hasRightBorder,
51
+ hasTopBorder
52
+ } = useTableBordersDropdownMenuContentState();
53
+
54
+ return (
55
+ <DropdownMenuContent
56
+ align="start"
57
+ className={cn("min-w-[220px]")}
58
+ ref={ref}
59
+ side="right"
60
+ sideOffset={0}
61
+ {...props}
62
+ >
63
+ <DropdownMenuCheckboxItem
64
+ checked={hasBottomBorder}
65
+ onCheckedChange={getOnSelectTableBorder("bottom")}
66
+ >
67
+ <Icons.borderBottom className={iconVariants({ size: "sm" })} />
68
+ <div>Bottom Border</div>
69
+ </DropdownMenuCheckboxItem>
70
+ <DropdownMenuCheckboxItem
71
+ checked={hasTopBorder}
72
+ onCheckedChange={getOnSelectTableBorder("top")}
73
+ >
74
+ <Icons.borderTop className={iconVariants({ size: "sm" })} />
75
+ <div>Top Border</div>
76
+ </DropdownMenuCheckboxItem>
77
+ <DropdownMenuCheckboxItem
78
+ checked={hasLeftBorder}
79
+ onCheckedChange={getOnSelectTableBorder("left")}
80
+ >
81
+ <Icons.borderLeft className={iconVariants({ size: "sm" })} />
82
+ <div>Left Border</div>
83
+ </DropdownMenuCheckboxItem>
84
+ <DropdownMenuCheckboxItem
85
+ checked={hasRightBorder}
86
+ onCheckedChange={getOnSelectTableBorder("right")}
87
+ >
88
+ <Icons.borderRight className={iconVariants({ size: "sm" })} />
89
+ <div>Right Border</div>
90
+ </DropdownMenuCheckboxItem>
91
+
92
+ <Separator />
93
+
94
+ <DropdownMenuCheckboxItem
95
+ checked={hasNoBorders}
96
+ onCheckedChange={getOnSelectTableBorder("none")}
97
+ >
98
+ <Icons.borderNone className={iconVariants({ size: "sm" })} />
99
+ <div>No Border</div>
100
+ </DropdownMenuCheckboxItem>
101
+ <DropdownMenuCheckboxItem
102
+ checked={hasOuterBorders}
103
+ onCheckedChange={getOnSelectTableBorder("outer")}
104
+ >
105
+ <Icons.borderAll className={iconVariants({ size: "sm" })} />
106
+ <div>Outside Borders</div>
107
+ </DropdownMenuCheckboxItem>
108
+ </DropdownMenuContent>
109
+ );
110
+ });
111
+
112
+ export const TableFloatingToolbar = withRef<typeof PopoverContent>(
113
+ ({ children, ...props }, ref) => {
114
+ const element = useElement<TTableElement>();
115
+ const { props: buttonProps } = useRemoveNodeButton({ element });
116
+
117
+ const selectionCollapsed = useEditorSelector(
118
+ (editor) => !isSelectionExpanded(editor),
119
+ []
120
+ );
121
+
122
+ const readOnly = useReadOnly();
123
+ const selected = useSelected();
124
+ const editor = useEditorRef();
125
+
126
+ const collapsed = !readOnly && selected && selectionCollapsed;
127
+ const open = !readOnly && selected;
128
+
129
+ const { canMerge, canUnmerge } = useTableMergeState();
130
+
131
+ const mergeContent = canMerge && (
132
+ <Button
133
+ contentEditable={false}
134
+ isMenu
135
+ onClick={() => mergeTableCells(editor)}
136
+ variant="ghost"
137
+ >
138
+ <Icons.combine className="mr-2 size-4" />
139
+ Merge
140
+ </Button>
141
+ );
142
+
143
+ const unmergeButton = canUnmerge && (
144
+ <Button
145
+ contentEditable={false}
146
+ isMenu
147
+ onClick={() => unmergeTableCells(editor)}
148
+ variant="ghost"
149
+ >
150
+ <Icons.ungroup className="mr-2 size-4" />
151
+ Unmerge
152
+ </Button>
153
+ );
154
+
155
+ const bordersContent = collapsed && (
156
+ <>
157
+ <DropdownMenu modal={false}>
158
+ <DropdownMenuTrigger asChild>
159
+ <Button isMenu variant="ghost">
160
+ <Icons.borderAll className="mr-2 size-4" />
161
+ Borders
162
+ </Button>
163
+ </DropdownMenuTrigger>
164
+
165
+ <DropdownMenuPortal>
166
+ <TableBordersDropdownMenuContent />
167
+ </DropdownMenuPortal>
168
+ </DropdownMenu>
169
+
170
+ <Button contentEditable={false} isMenu variant="ghost" {...buttonProps}>
171
+ <Icons.delete className="mr-2 size-4" />
172
+ Delete
173
+ </Button>
174
+ </>
175
+ );
176
+
177
+ return (
178
+ <Popover modal={false} open={open}>
179
+ <PopoverAnchor asChild>{children}</PopoverAnchor>
180
+ {(canMerge || canUnmerge || collapsed) && (
181
+ <PopoverContent
182
+ className={cn(
183
+ popoverVariants(),
184
+ "flex w-[220px] flex-col gap-1 p-1"
185
+ )}
186
+ onOpenAutoFocus={(e) => e.preventDefault()}
187
+ ref={ref}
188
+ {...props}
189
+ >
190
+ {unmergeButton}
191
+ {mergeContent}
192
+ {bordersContent}
193
+ </PopoverContent>
194
+ )}
195
+ </Popover>
196
+ );
197
+ }
198
+ );
199
+
200
+ export const TableElement = withHOC(
201
+ TableProvider,
202
+ withRef<typeof PlateElement>(({ children, className, ...props }, ref) => {
203
+ const { colSizes, isSelectingCell, marginLeft, minColumnWidth } =
204
+ useTableElementState();
205
+ const { colGroupProps, props: tableProps } = useTableElement();
206
+
207
+ return (
208
+ // <TableFloatingToolbar>
209
+ <div className="overflow-x-auto" style={{ paddingLeft: marginLeft }}>
210
+ <PlateElement
211
+ asChild
212
+ className={cn(
213
+ "my-4 ml-px mr-0 table h-px w-full table-fixed border-collapse",
214
+ isSelectingCell && "[&_*::selection]:bg-none",
215
+ className
216
+ )}
217
+ ref={ref}
218
+ {...tableProps}
219
+ {...props}
220
+ >
221
+ <table>
222
+ <colgroup {...colGroupProps}>
223
+ {colSizes.map((width, index) => {
224
+ return (
225
+ <col
226
+ key={index}
227
+ style={{
228
+ minWidth: minColumnWidth,
229
+ width: width || undefined
230
+ }}
231
+ />
232
+ );
233
+ })}
234
+ </colgroup>
235
+
236
+ <tbody className="min-w-full">{children}</tbody>
237
+ </table>
238
+ </PlateElement>
239
+ </div>
240
+ // </TableFloatingToolbar>
241
+ );
242
+ })
243
+ );
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+
3
+ import { cn, withRef } from '@udecode/cn';
4
+ import { PlateElement } from '@udecode/plate-common/react';
5
+
6
+ export const TableRowElement = withRef<
7
+ typeof PlateElement,
8
+ {
9
+ hideBorder?: boolean;
10
+ }
11
+ >(({ children, hideBorder, ...props }, ref) => {
12
+ return (
13
+ <PlateElement
14
+ asChild
15
+ className={cn('h-full', hideBorder && 'border-none')}
16
+ ref={ref}
17
+ {...props}
18
+ >
19
+ <tr>{children}</tr>
20
+ </PlateElement>
21
+ );
22
+ });
@@ -0,0 +1,135 @@
1
+ /** @jsxRuntime classic */
2
+ /** @jsx jsx */
3
+ import { jsx } from "@udecode/plate-test-utils";
4
+ import "./style.less";
5
+ jsx;
6
+
7
+ export const isMarkdownTableData = (str: string) => {
8
+ // 按行拆分字符串
9
+ const lines = str.trim().split("\n");
10
+
11
+ // 检查行数是否足够
12
+ if (lines?.length < 3) {
13
+ return false;
14
+ }
15
+ const cols = lines[0].split("|").length;
16
+ const r = lines.every((item: any) => {
17
+ return item.split("|").length === cols;
18
+ });
19
+
20
+ if (!r) return r;
21
+ // 检查表头和数据行是否以 | 开头和结尾
22
+ for (let i = 0; i < lines.length; i++) {
23
+ if (!lines[i].trim().startsWith("|") || !lines[i].trim().endsWith("|")) {
24
+ return false;
25
+ }
26
+ }
27
+
28
+ // 检查第二行是否包含分隔线
29
+ if (!lines[1].trim().includes("-")) {
30
+ return false;
31
+ }
32
+
33
+ return true;
34
+ };
35
+
36
+ const markdownTableToJSON = (mdTable: string) => {
37
+ const rows = mdTable.trim().split("\n");
38
+ const headers = rows[0].split("|").map((header) => header.trim());
39
+
40
+ if (headers?.length > 2) {
41
+ headers.pop();
42
+ headers.shift();
43
+ }
44
+
45
+ const feakHeaders = headers.map((i, index) => index);
46
+
47
+ const jsonData: any[] = [];
48
+
49
+ for (let i = 2; i < rows.length; i++) {
50
+ const cells = rows[i].split("|").map((cell) => cell.trim());
51
+ if (cells?.length > 2) {
52
+ cells.pop();
53
+ cells.shift();
54
+ }
55
+ if (cells.length === headers.length) {
56
+ const rowObject: any = {};
57
+ feakHeaders.forEach((header, index) => {
58
+ rowObject[header] = cells[index];
59
+ });
60
+ jsonData.push(rowObject);
61
+ }
62
+ }
63
+
64
+ return { jsonData, headers };
65
+ };
66
+
67
+ export const createTable = (data: any): any => {
68
+ const { jsonData, headers } = markdownTableToJSON(data);
69
+ return (
70
+ <fragment>
71
+ <htable
72
+ colSizes={new Array(headers.length - 1).fill("100%")}
73
+ marginLeft={0}
74
+ border={true}
75
+ >
76
+ <htr>
77
+ {headers.map((key, index) => {
78
+ return (
79
+ <hth key={index}>
80
+ <hp>
81
+ <htext bold>{key}</htext>
82
+ </hp>
83
+ </hth>
84
+ );
85
+ })}
86
+ </htr>
87
+ {jsonData.map((row, rowIndex) => (
88
+ <htr key={rowIndex}>
89
+ {Object.values(row).map((value, colIndex) => {
90
+ return (
91
+ <htd key={colIndex}>
92
+ <hp>{value}</hp>
93
+ </htd>
94
+ );
95
+ })}
96
+ </htr>
97
+ ))}
98
+ </htable>
99
+ {/* <htable colSizes={[100, 100, 100, 100]} marginLeft={0} border={true}>
100
+ <htr>
101
+ <hth>
102
+ <hp>
103
+ <htext bold>序号</htext>
104
+ </hp>
105
+ </hth>
106
+ <hth>
107
+ <hp>
108
+ <htext bold>姓名</htext>
109
+ </hp>
110
+ </hth>
111
+ </htr>
112
+ <htr>
113
+ <htd>
114
+ <hp>1</hp>
115
+ </htd>
116
+ <htd>
117
+ <hp>张三</hp>
118
+ </htd>
119
+ </htr>
120
+ <htr>
121
+ <htd>
122
+ <hp>2</hp>
123
+ </htd>
124
+ <htd>
125
+ <hp>李四</hp>
126
+ </htd>
127
+ </htr>
128
+ </htable> */}
129
+ </fragment>
130
+ );
131
+ };
132
+
133
+ export const tableValue: any = (data: any) => {
134
+ return <fragment>{createTable(data)}</fragment>;
135
+ };
@@ -0,0 +1,43 @@
1
+ import React from 'react';
2
+
3
+ import { cn, withRef } from '@udecode/cn';
4
+ import { PlateElement } from '@udecode/plate-common/react';
5
+ import {
6
+ useTodoListElement,
7
+ useTodoListElementState,
8
+ } from '@udecode/plate-list/react';
9
+
10
+ import { Checkbox } from './checkbox';
11
+
12
+ export const TodoListElement = withRef<typeof PlateElement>(
13
+ ({ children, className, ...props }, ref) => {
14
+ const { element } = props;
15
+ const state = useTodoListElementState({ element });
16
+ const { checkboxProps } = useTodoListElement(state);
17
+
18
+ return (
19
+ <PlateElement
20
+ className={cn('flex flex-row py-1', className)}
21
+ ref={ref}
22
+ {...props}
23
+ >
24
+ <div
25
+ className="mr-1.5 flex select-none items-center justify-center"
26
+ contentEditable={false}
27
+ >
28
+ <Checkbox {...checkboxProps} />
29
+ </div>
30
+ <span
31
+ className={cn(
32
+ 'flex-1 focus:outline-none',
33
+ state.checked && 'text-muted-foreground line-through'
34
+ )}
35
+ contentEditable={!state.readOnly}
36
+ suppressContentEditableWarning
37
+ >
38
+ {children}
39
+ </span>
40
+ </PlateElement>
41
+ );
42
+ }
43
+ );
@@ -0,0 +1,31 @@
1
+ import { withRef } from '@udecode/cn';
2
+ import { PlateElement, useElement } from '@udecode/plate-common/react';
3
+ import {
4
+ useToggleButton,
5
+ useToggleButtonState,
6
+ } from '@udecode/plate-toggle/react';
7
+
8
+ import { Icons } from './icons';
9
+
10
+ export const ToggleElement = withRef<typeof PlateElement>(
11
+ ({ children, ...props }, ref) => {
12
+ const element = useElement();
13
+ const state = useToggleButtonState(element.id as string);
14
+ const { buttonProps, open } = useToggleButton(state);
15
+
16
+ return (
17
+ <PlateElement asChild ref={ref} {...props}>
18
+ <div className="relative pl-6">
19
+ <span
20
+ className="absolute -left-0.5 -top-0.5 flex cursor-pointer select-none items-center justify-center rounded-sm p-px transition-colors hover:bg-slate-200"
21
+ contentEditable={false}
22
+ {...buttonProps}
23
+ >
24
+ {open ? <Icons.chevronDown /> : <Icons.chevronRight />}
25
+ </span>
26
+ {children}
27
+ </div>
28
+ </PlateElement>
29
+ );
30
+ }
31
+ );
@@ -0,0 +1,157 @@
1
+ 'use client';
2
+
3
+ import * as React from 'react';
4
+
5
+ import * as ToolbarPrimitive from '@radix-ui/react-toolbar';
6
+ import { cn, withCn, withRef, withVariants } from '@udecode/cn';
7
+ import { type VariantProps, cva } from 'class-variance-authority';
8
+
9
+ import { Icons } from './icons';
10
+
11
+ import { Separator } from './separator';
12
+ import { withTooltip } from './tooltip';
13
+
14
+ export const Toolbar = withCn(
15
+ ToolbarPrimitive.Root,
16
+ 'relative flex select-none items-center gap-1 bg-background'
17
+ );
18
+
19
+ export const ToolbarToggleGroup = withCn(
20
+ ToolbarPrimitive.ToolbarToggleGroup,
21
+ 'flex items-center'
22
+ );
23
+
24
+ export const ToolbarLink = withCn(
25
+ ToolbarPrimitive.Link,
26
+ 'font-medium underline underline-offset-4'
27
+ );
28
+
29
+ export const ToolbarSeparator = withCn(
30
+ ToolbarPrimitive.Separator,
31
+ 'my-1 w-px shrink-0 bg-border'
32
+ );
33
+
34
+ const toolbarButtonVariants = cva(
35
+ cn(
36
+ 'inline-flex items-center justify-center rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',
37
+ '[&_svg:not([data-icon])]:size-5'
38
+ ),
39
+ {
40
+ defaultVariants: {
41
+ size: 'sm',
42
+ variant: 'default',
43
+ },
44
+ variants: {
45
+ size: {
46
+ default: 'h-10 px-3',
47
+ lg: 'h-11 px-5',
48
+ sm: 'h-9 px-2',
49
+ },
50
+ variant: {
51
+ default:
52
+ 'bg-transparent hover:bg-muted hover:text-muted-foreground aria-checked:bg-accent aria-checked:text-accent-foreground',
53
+ outline:
54
+ 'border border-input bg-transparent hover:bg-accent hover:text-accent-foreground',
55
+ },
56
+ },
57
+ }
58
+ );
59
+
60
+ const ToolbarButton = withTooltip(
61
+ React.forwardRef<
62
+ React.ElementRef<typeof ToolbarToggleItem>,
63
+ {
64
+ isDropdown?: boolean;
65
+ pressed?: boolean;
66
+ } & Omit<
67
+ React.ComponentPropsWithoutRef<typeof ToolbarToggleItem>,
68
+ 'asChild' | 'value'
69
+ > &
70
+ VariantProps<typeof toolbarButtonVariants>
71
+ >(
72
+ (
73
+ { children, className, isDropdown, pressed, size, variant, ...props },
74
+ ref
75
+ ) => {
76
+ return typeof pressed === 'boolean' ? (
77
+ <ToolbarToggleGroup
78
+ disabled={props.disabled}
79
+ type="single"
80
+ value="single"
81
+ >
82
+ <ToolbarToggleItem
83
+ className={cn(
84
+ toolbarButtonVariants({
85
+ size,
86
+ variant,
87
+ }),
88
+ isDropdown && 'my-1 justify-between pr-1',
89
+ className
90
+ )}
91
+ ref={ref}
92
+ value={pressed ? 'single' : ''}
93
+ {...props}
94
+ >
95
+ {isDropdown ? (
96
+ <>
97
+ <div className="flex flex-1">{children}</div>
98
+ <div>
99
+ <Icons.arrowDown className="ml-0.5 size-4" data-icon />
100
+ </div>
101
+ </>
102
+ ) : (
103
+ children
104
+ )}
105
+ </ToolbarToggleItem>
106
+ </ToolbarToggleGroup>
107
+ ) : (
108
+ <ToolbarPrimitive.Button
109
+ className={cn(
110
+ toolbarButtonVariants({
111
+ size,
112
+ variant,
113
+ }),
114
+ isDropdown && 'pr-1',
115
+ className
116
+ )}
117
+ ref={ref}
118
+ {...props}
119
+ >
120
+ {children}
121
+ </ToolbarPrimitive.Button>
122
+ );
123
+ }
124
+ )
125
+ );
126
+ ToolbarButton.displayName = 'ToolbarButton';
127
+
128
+ export { ToolbarButton };
129
+
130
+ export const ToolbarToggleItem = withVariants(
131
+ ToolbarPrimitive.ToggleItem,
132
+ toolbarButtonVariants,
133
+ ['variant', 'size']
134
+ );
135
+
136
+ export const ToolbarGroup = withRef<
137
+ 'div',
138
+ {
139
+ noSeparator?: boolean;
140
+ }
141
+ >(({ children, className, noSeparator }, ref) => {
142
+ const childArr = React.Children.map(children, (c) => c);
143
+
144
+ if (!childArr || childArr.length === 0) return null;
145
+
146
+ return (
147
+ <div className={cn('flex', className)} ref={ref}>
148
+ {!noSeparator && (
149
+ <div className="h-full py-1">
150
+ <Separator orientation="vertical" />
151
+ </div>
152
+ )}
153
+
154
+ <div className="mx-1 flex items-center gap-1">{children}</div>
155
+ </div>
156
+ );
157
+ });
@@ -0,0 +1,65 @@
1
+ 'use client';
2
+
3
+ import React from 'react';
4
+
5
+ import * as TooltipPrimitive from '@radix-ui/react-tooltip';
6
+ import { withCn, withProps } from '@udecode/cn';
7
+
8
+ export const TooltipProvider = TooltipPrimitive.Provider;
9
+
10
+ export const Tooltip = TooltipPrimitive.Root;
11
+
12
+ export const TooltipTrigger = TooltipPrimitive.Trigger;
13
+
14
+ export const TooltipPortal = TooltipPrimitive.Portal;
15
+
16
+ export const TooltipContent = withCn(
17
+ withProps(TooltipPrimitive.Content, {
18
+ sideOffset: 4,
19
+ }),
20
+ 'z-50 overflow-hidden rounded-md border bg-popover px-3 py-1.5 text-sm text-popover-foreground shadow-md'
21
+ );
22
+
23
+ export function withTooltip<
24
+ T extends React.ComponentType<any> | keyof HTMLElementTagNameMap,
25
+ >(Component: T) {
26
+ return React.forwardRef<
27
+ React.ElementRef<T>,
28
+ {
29
+ tooltip?: React.ReactNode;
30
+ tooltipContentProps?: Omit<
31
+ React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Content>,
32
+ 'children'
33
+ >;
34
+ tooltipProps?: Omit<
35
+ React.ComponentPropsWithoutRef<typeof TooltipPrimitive.Root>,
36
+ 'children'
37
+ >;
38
+ } & React.ComponentPropsWithoutRef<T>
39
+ >(function ExtendComponent(
40
+ { tooltip, tooltipContentProps, tooltipProps, ...props },
41
+ ref
42
+ ) {
43
+ const [mounted, setMounted] = React.useState(false);
44
+
45
+ React.useEffect(() => {
46
+ setMounted(true);
47
+ }, []);
48
+
49
+ const component = <Component ref={ref} {...(props as any)} />;
50
+
51
+ if (tooltip && mounted) {
52
+ return (
53
+ <Tooltip {...tooltipProps}>
54
+ <TooltipTrigger asChild>{component}</TooltipTrigger>
55
+
56
+ <TooltipPortal>
57
+ <TooltipContent {...tooltipContentProps}>{tooltip}</TooltipContent>
58
+ </TooltipPortal>
59
+ </Tooltip>
60
+ );
61
+ }
62
+
63
+ return component;
64
+ });
65
+ }