wendang-react 0.0.0-stage → 0.5.5

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 (548) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +381 -0
  3. package/README.md +469 -2
  4. package/dist/bindings/yjs.js +5 -0
  5. package/dist/chunks/AnchoredPanel-D3nte06T.js +68 -0
  6. package/dist/chunks/MindMapCanvas-VWrxTy5Q.js +2070 -0
  7. package/dist/chunks/MindMapViewer-DqKu_Kuz.js +180 -0
  8. package/dist/chunks/SpreadsheetViewer-DN_QQGud.js +157 -0
  9. package/dist/chunks/code-highlight-BmaqTe1m.js +30 -0
  10. package/dist/chunks/code-highlight-engine-BFDzDPzy.js +40 -0
  11. package/dist/chunks/comment-hint-DN7LKJAn.js +296 -0
  12. package/dist/chunks/composition-state-Bl-U1R_2.js +40 -0
  13. package/dist/chunks/extensions-B-CVVQhp.js +4210 -0
  14. package/dist/chunks/fuzzy-match-DYQR-4w2.js +89 -0
  15. package/dist/chunks/hooks-C53Dp0pr.js +35 -0
  16. package/dist/chunks/host-C-V688Rq.js +197 -0
  17. package/dist/chunks/index-Ii536CFG.js +720 -0
  18. package/dist/chunks/katex-WjrodtTU.js +71 -0
  19. package/dist/chunks/mind-map-controller-B6SxK3GZ.js +479 -0
  20. package/dist/chunks/mind-map-delete-CVsxdXfs.js +31 -0
  21. package/dist/chunks/mind-map-input-CEWRz_t6.js +43 -0
  22. package/dist/chunks/mind-topic-text-BBNTbFSe.js +446 -0
  23. package/dist/chunks/nodes-iKqTGr_N.js +291 -0
  24. package/dist/chunks/popover-placement-D3xVYdkt.js +47 -0
  25. package/dist/chunks/worksheet-engine-TJ54m0KC.js +125 -0
  26. package/dist/chunks/worksheet-preview-DsDVWxIM.js +129 -0
  27. package/dist/document/viewer.js +287 -0
  28. package/dist/document.js +3620 -0
  29. package/dist/index.js +8 -0
  30. package/dist/mindmap/viewer.js +6 -0
  31. package/dist/mindmap.js +123 -0
  32. package/dist/shared.js +52 -0
  33. package/dist/spreadsheet/viewer.js +5 -0
  34. package/dist/spreadsheet/xlsx.js +299 -0
  35. package/dist/spreadsheet.js +120 -0
  36. package/dist/styles/callout.css +34 -0
  37. package/dist/styles/code-block.css +58 -0
  38. package/dist/styles/content-style.css +619 -0
  39. package/dist/styles/editor-interaction.css +621 -0
  40. package/dist/styles/file-video.css +12 -0
  41. package/dist/styles/image-preview.css +103 -0
  42. package/dist/styles/mind-map-block.css +14 -0
  43. package/dist/styles/mind-map-canvas.css +80 -0
  44. package/dist/styles/mind-map-comments.css +93 -0
  45. package/dist/styles/mind-map-details.css +7 -0
  46. package/dist/styles/mind-map-preview.css +7 -0
  47. package/dist/styles/mind-map-topic.css +112 -0
  48. package/dist/styles/page-picker.css +47 -0
  49. package/dist/styles/renderer.css +45 -0
  50. package/dist/styles/spreadsheet-editor.css +3 -0
  51. package/dist/styles/tokens.css +153 -0
  52. package/dist/styles/video-dialog.css +41 -0
  53. package/dist/styles/video-embed.css +35 -0
  54. package/dist/styles.css +2614 -0
  55. package/dist/types/bindings/yjs.d.ts +3 -0
  56. package/dist/types/document/viewer.d.ts +3 -0
  57. package/dist/types/document.d.ts +7 -0
  58. package/dist/types/editor/BlockAffordance.d.ts +47 -0
  59. package/dist/types/editor/CalloutView.d.ts +2 -0
  60. package/dist/types/editor/CodeBlockView.d.ts +9 -0
  61. package/dist/types/editor/DocumentColorPanel.d.ts +8 -0
  62. package/dist/types/editor/DocumentEditor.d.ts +71 -0
  63. package/dist/types/editor/ImagePreview.d.ts +10 -0
  64. package/dist/types/editor/LinkPopover.d.ts +21 -0
  65. package/dist/types/editor/PagePicker.d.ts +7 -0
  66. package/dist/types/editor/SelectionToolbar.d.ts +11 -0
  67. package/dist/types/editor/SlashMenu.d.ts +30 -0
  68. package/dist/types/editor/TableControls.d.ts +9 -0
  69. package/dist/types/editor/VideoEmbedDialog.d.ts +6 -0
  70. package/dist/types/editor/document-gestures.d.ts +13 -0
  71. package/dist/types/editor/extensions.d.ts +29 -0
  72. package/dist/types/editor/nodes.d.ts +20 -0
  73. package/dist/types/editor/same-document.d.ts +2 -0
  74. package/dist/types/engine/collab/presence.d.ts +1 -0
  75. package/dist/types/engine/editor/block-commands.d.ts +35 -0
  76. package/dist/types/engine/editor/block-conversion.d.ts +12 -0
  77. package/dist/types/engine/editor/block-drag.d.ts +16 -0
  78. package/dist/types/engine/editor/block-menu-placement.d.ts +16 -0
  79. package/dist/types/engine/editor/callout-commands.d.ts +4 -0
  80. package/dist/types/engine/editor/collab-change-origin.d.ts +2 -0
  81. package/dist/types/engine/editor/delete-block.d.ts +2 -0
  82. package/dist/types/engine/editor/extensions/block-format.d.ts +19 -0
  83. package/dist/types/engine/editor/extensions/block-handle.d.ts +17 -0
  84. package/dist/types/engine/editor/extensions/block-menu-highlight.d.ts +4 -0
  85. package/dist/types/engine/editor/extensions/block-selection.d.ts +117 -0
  86. package/dist/types/engine/editor/extensions/code-highlight.d.ts +2 -0
  87. package/dist/types/engine/editor/extensions/collab-cursor.d.ts +13 -0
  88. package/dist/types/engine/editor/extensions/ime-guard.d.ts +8 -0
  89. package/dist/types/engine/editor/extensions/inline-comments.d.ts +15 -0
  90. package/dist/types/engine/editor/extensions/paste-sanitizer.d.ts +4 -0
  91. package/dist/types/engine/editor/extensions/slash.d.ts +16 -0
  92. package/dist/types/engine/editor/extensions/table-interaction.d.ts +9 -0
  93. package/dist/types/engine/editor/extensions/upload-placeholder.d.ts +48 -0
  94. package/dist/types/engine/editor/image-preview-gesture.d.ts +3 -0
  95. package/dist/types/engine/editor/ime/composition-state.d.ts +9 -0
  96. package/dist/types/engine/editor/insert-block.d.ts +6 -0
  97. package/dist/types/engine/editor/insert-picker-logic.d.ts +13 -0
  98. package/dist/types/engine/editor/link-edit.d.ts +10 -0
  99. package/dist/types/engine/editor/mind-map-controller.d.ts +63 -0
  100. package/dist/types/engine/editor/mind-map-delete.d.ts +7 -0
  101. package/dist/types/engine/editor/mind-map-drag.d.ts +16 -0
  102. package/dist/types/engine/editor/mind-map-input.d.ts +16 -0
  103. package/dist/types/engine/editor/mind-map-selection.d.ts +11 -0
  104. package/dist/types/engine/editor/nodes/columns.d.ts +6 -0
  105. package/dist/types/engine/editor/nodes/file-nodeview.d.ts +4 -0
  106. package/dist/types/engine/editor/nodes/file.d.ts +2 -0
  107. package/dist/types/engine/editor/nodes/image-gallery.d.ts +2 -0
  108. package/dist/types/engine/editor/nodes/image-nodeview.d.ts +4 -0
  109. package/dist/types/engine/editor/nodes/image.d.ts +1 -0
  110. package/dist/types/engine/editor/nodes/inline-style.d.ts +4 -0
  111. package/dist/types/engine/editor/nodes/math-nodeview.d.ts +2 -0
  112. package/dist/types/engine/editor/nodes/math.d.ts +3 -0
  113. package/dist/types/engine/editor/nodes/mention.d.ts +2 -0
  114. package/dist/types/engine/editor/nodes/mind-map-schema.d.ts +6 -0
  115. package/dist/types/engine/editor/nodes/page-link.d.ts +2 -0
  116. package/dist/types/engine/editor/nodes/table-cell.d.ts +4 -0
  117. package/dist/types/engine/editor/nodes/video-embed-schema.d.ts +2 -0
  118. package/dist/types/engine/editor/popover-placement.d.ts +35 -0
  119. package/dist/types/engine/editor/table-clipboard.d.ts +3 -0
  120. package/dist/types/engine/editor/table-commands.d.ts +20 -0
  121. package/dist/types/engine/editor/table-geometry.d.ts +34 -0
  122. package/dist/types/engine/editor/table-menu-placement.d.ts +30 -0
  123. package/dist/types/engine/editor/tracked-target.d.ts +8 -0
  124. package/dist/types/engine/editor/trailing-paragraph.d.ts +2 -0
  125. package/dist/types/engine/host.d.ts +2 -0
  126. package/dist/types/engine/renderer/attachments.d.ts +11 -0
  127. package/dist/types/engine/renderer/katex.d.ts +7 -0
  128. package/dist/types/engine/renderer/lazy-visible.d.ts +11 -0
  129. package/dist/types/engine/shared/callout.d.ts +1 -0
  130. package/dist/types/engine/shared/code-block.d.ts +1 -0
  131. package/dist/types/engine/shared/code-highlight-engine.d.ts +2 -0
  132. package/dist/types/engine/shared/code-highlight.d.ts +8 -0
  133. package/dist/types/engine/shared/comment-hint-position.d.ts +20 -0
  134. package/dist/types/engine/shared/comment-hint.d.ts +2 -0
  135. package/dist/types/engine/shared/document-colors.d.ts +1 -0
  136. package/dist/types/engine/shared/fuzzy-match.d.ts +13 -0
  137. package/dist/types/engine/shared/image-gallery.d.ts +1 -0
  138. package/dist/types/engine/shared/inline-comments.d.ts +1 -0
  139. package/dist/types/engine/shared/mind-map-phase2.d.ts +1 -0
  140. package/dist/types/engine/shared/mind-map.d.ts +1 -0
  141. package/dist/types/engine/shared/mind-topic-text.d.ts +1 -0
  142. package/dist/types/engine/shared/modal-stack.d.ts +6 -0
  143. package/dist/types/engine/shared/page-candidates.d.ts +6 -0
  144. package/dist/types/engine/shared/pinyin.d.ts +6 -0
  145. package/dist/types/engine/shared/preview-items.d.ts +10 -0
  146. package/dist/types/engine/shared/safe-href.d.ts +1 -0
  147. package/dist/types/engine/shared/table-cell-format.d.ts +1 -0
  148. package/dist/types/engine/shared/table-layout.d.ts +1 -0
  149. package/dist/types/engine/shared/video-embed.d.ts +1 -0
  150. package/dist/types/engine/shared/video-feedback.d.ts +1 -0
  151. package/dist/types/engine/shared/workbook.d.ts +1 -0
  152. package/dist/types/engine/worksheets/worksheet-engine.d.ts +16 -0
  153. package/dist/types/engine/worksheets/worksheet-format.d.ts +20 -0
  154. package/dist/types/engine/worksheets/worksheet-preview.d.ts +17 -0
  155. package/dist/types/engine/worksheets/worksheet-xlsx.d.ts +21 -0
  156. package/dist/types/engine/wui/core/dialog.d.ts +5 -0
  157. package/dist/types/engine/wui/core/listbox.d.ts +8 -0
  158. package/dist/types/engine/wui/core/placement.d.ts +40 -0
  159. package/dist/types/hooks.d.ts +7 -0
  160. package/dist/types/host-types.d.ts +58 -0
  161. package/dist/types/host.d.ts +24 -0
  162. package/dist/types/index.d.ts +5 -0
  163. package/dist/types/mindmap/Comments.d.ts +9 -0
  164. package/dist/types/mindmap/Details.d.ts +13 -0
  165. package/dist/types/mindmap/Field.d.ts +10 -0
  166. package/dist/types/mindmap/MindMapCanvas.d.ts +19 -0
  167. package/dist/types/mindmap/MindMapEditor.d.ts +30 -0
  168. package/dist/types/mindmap/MindMapViewer.d.ts +23 -0
  169. package/dist/types/mindmap/TopicLabel.d.ts +4 -0
  170. package/dist/types/mindmap/viewer.d.ts +2 -0
  171. package/dist/types/mindmap.d.ts +4 -0
  172. package/dist/types/renderer/CodeToolbar.d.ts +10 -0
  173. package/dist/types/renderer/DocumentViewer.d.ts +23 -0
  174. package/dist/types/renderer/media.d.ts +33 -0
  175. package/dist/types/shared.d.ts +12 -0
  176. package/dist/types/spreadsheet/SpreadsheetEditor.d.ts +23 -0
  177. package/dist/types/spreadsheet/SpreadsheetViewer.d.ts +13 -0
  178. package/dist/types/spreadsheet/viewer.d.ts +2 -0
  179. package/dist/types/spreadsheet/xlsx.d.ts +2 -0
  180. package/dist/types/spreadsheet.d.ts +3 -0
  181. package/dist/types/wui/AnchoredPanel.d.ts +14 -0
  182. package/dist/types/wui/Dropdown.d.ts +18 -0
  183. package/dist/types/wui/Icon.d.ts +7 -0
  184. package/dist/types/wui/Tooltip.d.ts +5 -0
  185. package/dist/types/wui/index.d.ts +69 -0
  186. package/package.json +122 -3
  187. package/third-party-notices/@fast-csv__format@4.3.5-LICENSE.txt +21 -0
  188. package/third-party-notices/@fast-csv__parse@4.3.6-LICENSE.txt +21 -0
  189. package/third-party-notices/@flatten-js__interval-tree@1.1.3-LICENSE.txt +21 -0
  190. package/third-party-notices/@floating-ui__core@1.8.0-LICENSE.txt +20 -0
  191. package/third-party-notices/@floating-ui__dom@1.8.0-LICENSE.txt +20 -0
  192. package/third-party-notices/@floating-ui__react-dom@2.1.9-LICENSE.txt +20 -0
  193. package/third-party-notices/@floating-ui__utils@0.2.12-LICENSE.txt +20 -0
  194. package/third-party-notices/@grpc__grpc-js@1.14.6-LICENSE.txt +201 -0
  195. package/third-party-notices/@grpc__proto-loader@0.8.1-LICENSE.txt +201 -0
  196. package/third-party-notices/@js-sdsl__ordered-map@4.4.2-LICENSE.txt +21 -0
  197. package/third-party-notices/@protobufjs__aspromise@1.1.2-LICENSE.txt +26 -0
  198. package/third-party-notices/@protobufjs__base64@1.1.2-LICENSE.txt +26 -0
  199. package/third-party-notices/@protobufjs__codegen@2.0.5-LICENSE.txt +26 -0
  200. package/third-party-notices/@protobufjs__eventemitter@1.1.1-LICENSE.txt +26 -0
  201. package/third-party-notices/@protobufjs__fetch@1.1.1-LICENSE.txt +26 -0
  202. package/third-party-notices/@protobufjs__float@1.0.2-LICENSE.txt +26 -0
  203. package/third-party-notices/@protobufjs__path@1.1.2-LICENSE.txt +26 -0
  204. package/third-party-notices/@protobufjs__pool@1.1.0-LICENSE.txt +26 -0
  205. package/third-party-notices/@protobufjs__utf8@1.1.2-LICENSE.txt +26 -0
  206. package/third-party-notices/@radix-ui__primitive@1.2.0-LICENSE.txt +21 -0
  207. package/third-party-notices/@radix-ui__react-arrow@1.1.17-LICENSE.txt +21 -0
  208. package/third-party-notices/@radix-ui__react-collection@1.2.0-LICENSE.txt +21 -0
  209. package/third-party-notices/@radix-ui__react-compose-refs@1.1.5-LICENSE.txt +21 -0
  210. package/third-party-notices/@radix-ui__react-context@1.3.0-LICENSE.txt +21 -0
  211. package/third-party-notices/@radix-ui__react-dialog@1.3.1-LICENSE.txt +21 -0
  212. package/third-party-notices/@radix-ui__react-direction@1.2.0-LICENSE.txt +21 -0
  213. package/third-party-notices/@radix-ui__react-dismissable-layer@1.2.1-LICENSE.txt +21 -0
  214. package/third-party-notices/@radix-ui__react-dropdown-menu@2.2.1-LICENSE.txt +21 -0
  215. package/third-party-notices/@radix-ui__react-focus-guards@1.2.0-LICENSE.txt +21 -0
  216. package/third-party-notices/@radix-ui__react-focus-scope@1.3.1-LICENSE.txt +21 -0
  217. package/third-party-notices/@radix-ui__react-hover-card@1.2.1-LICENSE.txt +21 -0
  218. package/third-party-notices/@radix-ui__react-id@1.1.4-LICENSE.txt +21 -0
  219. package/third-party-notices/@radix-ui__react-menu@2.2.1-LICENSE.txt +21 -0
  220. package/third-party-notices/@radix-ui__react-popover@1.3.1-LICENSE.txt +21 -0
  221. package/third-party-notices/@radix-ui__react-popper@1.4.0-LICENSE.txt +21 -0
  222. package/third-party-notices/@radix-ui__react-portal@1.2.0-LICENSE.txt +21 -0
  223. package/third-party-notices/@radix-ui__react-presence@1.1.11-LICENSE.txt +21 -0
  224. package/third-party-notices/@radix-ui__react-primitive@2.2.0-LICENSE.txt +21 -0
  225. package/third-party-notices/@radix-ui__react-roving-focus@1.2.1-LICENSE.txt +21 -0
  226. package/third-party-notices/@radix-ui__react-separator@1.2.0-LICENSE.txt +21 -0
  227. package/third-party-notices/@radix-ui__react-slot@1.5.0-LICENSE.txt +21 -0
  228. package/third-party-notices/@radix-ui__react-use-callback-ref@1.1.5-LICENSE.txt +21 -0
  229. package/third-party-notices/@radix-ui__react-use-controllable-state@1.3.0-LICENSE.txt +21 -0
  230. package/third-party-notices/@radix-ui__react-use-effect-event@0.0.5-LICENSE.txt +21 -0
  231. package/third-party-notices/@radix-ui__react-use-is-hydrated@0.1.3-LICENSE.txt +21 -0
  232. package/third-party-notices/@radix-ui__react-use-layout-effect@1.1.4-LICENSE.txt +21 -0
  233. package/third-party-notices/@radix-ui__react-use-rect@1.1.4-LICENSE.txt +21 -0
  234. package/third-party-notices/@radix-ui__react-use-size@1.1.5-LICENSE.txt +21 -0
  235. package/third-party-notices/@radix-ui__rect@1.1.3-LICENSE.txt +21 -0
  236. package/third-party-notices/@tiptap__core@3.31.4-LICENSE.md.txt +21 -0
  237. package/third-party-notices/@tiptap__extension-blockquote@3.31.4-LICENSE.md.txt +21 -0
  238. package/third-party-notices/@tiptap__extension-bold@3.31.4-LICENSE.md.txt +21 -0
  239. package/third-party-notices/@tiptap__extension-bullet-list@3.31.4-LICENSE.md.txt +21 -0
  240. package/third-party-notices/@tiptap__extension-code-block@3.31.4-LICENSE.md.txt +21 -0
  241. package/third-party-notices/@tiptap__extension-code@3.31.4-LICENSE.md.txt +21 -0
  242. package/third-party-notices/@tiptap__extension-collaboration@3.31.4-LICENSE.md.txt +21 -0
  243. package/third-party-notices/@tiptap__extension-document@3.31.4-LICENSE.md.txt +21 -0
  244. package/third-party-notices/@tiptap__extension-dropcursor@3.31.4-LICENSE.md.txt +21 -0
  245. package/third-party-notices/@tiptap__extension-gapcursor@3.31.4-LICENSE.md.txt +21 -0
  246. package/third-party-notices/@tiptap__extension-hard-break@3.31.4-LICENSE.md.txt +21 -0
  247. package/third-party-notices/@tiptap__extension-heading@3.31.4-LICENSE.md.txt +21 -0
  248. package/third-party-notices/@tiptap__extension-horizontal-rule@3.31.4-LICENSE.md.txt +21 -0
  249. package/third-party-notices/@tiptap__extension-image@3.31.4-LICENSE.md.txt +21 -0
  250. package/third-party-notices/@tiptap__extension-italic@3.31.4-LICENSE.md.txt +21 -0
  251. package/third-party-notices/@tiptap__extension-link@3.31.4-LICENSE.md.txt +21 -0
  252. package/third-party-notices/@tiptap__extension-list-item@3.31.4-LICENSE.md.txt +21 -0
  253. package/third-party-notices/@tiptap__extension-list-keymap@3.31.4-LICENSE.md.txt +21 -0
  254. package/third-party-notices/@tiptap__extension-list@3.31.4-LICENSE.md.txt +21 -0
  255. package/third-party-notices/@tiptap__extension-ordered-list@3.31.4-LICENSE.md.txt +21 -0
  256. package/third-party-notices/@tiptap__extension-paragraph@3.31.4-LICENSE.md.txt +21 -0
  257. package/third-party-notices/@tiptap__extension-placeholder@3.31.4-LICENSE.md.txt +21 -0
  258. package/third-party-notices/@tiptap__extension-strike@3.31.4-LICENSE.md.txt +21 -0
  259. package/third-party-notices/@tiptap__extension-table-cell@3.31.4-LICENSE.md.txt +21 -0
  260. package/third-party-notices/@tiptap__extension-table-header@3.31.4-LICENSE.md.txt +21 -0
  261. package/third-party-notices/@tiptap__extension-table-row@3.31.4-LICENSE.md.txt +21 -0
  262. package/third-party-notices/@tiptap__extension-table@3.31.4-LICENSE.md.txt +21 -0
  263. package/third-party-notices/@tiptap__extension-task-item@3.31.4-LICENSE.md.txt +21 -0
  264. package/third-party-notices/@tiptap__extension-task-list@3.31.4-LICENSE.md.txt +21 -0
  265. package/third-party-notices/@tiptap__extension-text@3.31.4-LICENSE.md.txt +21 -0
  266. package/third-party-notices/@tiptap__extension-underline@3.31.4-LICENSE.md.txt +21 -0
  267. package/third-party-notices/@tiptap__extensions@3.31.4-LICENSE.md.txt +21 -0
  268. package/third-party-notices/@tiptap__pm@3.31.4-LICENSE.txt +21 -0
  269. package/third-party-notices/@tiptap__starter-kit@3.31.4-LICENSE.md.txt +21 -0
  270. package/third-party-notices/@tiptap__y-tiptap@3.0.7-LICENSE.txt +22 -0
  271. package/third-party-notices/@types__hast@3.0.5-LICENSE.txt +21 -0
  272. package/third-party-notices/@types__node@14.18.63-LICENSE.txt +21 -0
  273. package/third-party-notices/@types__node@26.6.2-LICENSE.txt +21 -0
  274. package/third-party-notices/@types__react-dom@19.3.0-LICENSE.txt +21 -0
  275. package/third-party-notices/@types__react@19.3.0-LICENSE.txt +21 -0
  276. package/third-party-notices/@types__unist@3.0.3-LICENSE.txt +21 -0
  277. package/third-party-notices/@univerjs__core@1.1.0-LICENSE.txt +176 -0
  278. package/third-party-notices/@univerjs__design@1.1.0-LICENSE.txt +176 -0
  279. package/third-party-notices/@univerjs__docs-ui@1.1.0-LICENSE.txt +176 -0
  280. package/third-party-notices/@univerjs__docs@1.1.0-LICENSE.txt +176 -0
  281. package/third-party-notices/@univerjs__drawing@1.1.0-LICENSE.txt +176 -0
  282. package/third-party-notices/@univerjs__engine-formula@1.1.0-LICENSE.txt +176 -0
  283. package/third-party-notices/@univerjs__engine-render@1.1.0-LICENSE.txt +176 -0
  284. package/third-party-notices/@univerjs__icons@1.46.0-LICENSE.txt +21 -0
  285. package/third-party-notices/@univerjs__network@1.1.0-LICENSE.txt +176 -0
  286. package/third-party-notices/@univerjs__preset-sheets-core@1.1.0-LICENSE.txt +176 -0
  287. package/third-party-notices/@univerjs__preset-sheets-filter@1.1.0-LICENSE.txt +176 -0
  288. package/third-party-notices/@univerjs__preset-sheets-sort@1.1.0-LICENSE.txt +176 -0
  289. package/third-party-notices/@univerjs__presets@1.1.0-LICENSE.txt +176 -0
  290. package/third-party-notices/@univerjs__rpc@1.1.0-LICENSE.txt +176 -0
  291. package/third-party-notices/@univerjs__sheets-filter-ui@1.1.0-LICENSE.txt +176 -0
  292. package/third-party-notices/@univerjs__sheets-filter@1.1.0-LICENSE.txt +176 -0
  293. package/third-party-notices/@univerjs__sheets-formula-ui@1.1.0-LICENSE.txt +176 -0
  294. package/third-party-notices/@univerjs__sheets-formula@1.1.0-LICENSE.txt +176 -0
  295. package/third-party-notices/@univerjs__sheets-numfmt-ui@1.1.0-LICENSE.txt +176 -0
  296. package/third-party-notices/@univerjs__sheets-numfmt@1.1.0-LICENSE.txt +176 -0
  297. package/third-party-notices/@univerjs__sheets-sort-ui@1.1.0-LICENSE.txt +176 -0
  298. package/third-party-notices/@univerjs__sheets-sort@1.1.0-LICENSE.txt +176 -0
  299. package/third-party-notices/@univerjs__sheets-ui@1.1.0-LICENSE.txt +176 -0
  300. package/third-party-notices/@univerjs__sheets@1.1.0-LICENSE.txt +176 -0
  301. package/third-party-notices/@univerjs__telemetry@1.1.0-LICENSE.txt +176 -0
  302. package/third-party-notices/@univerjs__themes@1.1.0-LICENSE.txt +176 -0
  303. package/third-party-notices/@univerjs__ui@1.1.0-LICENSE.txt +176 -0
  304. package/third-party-notices/@wendellhu__redi@1.1.3-LICENSE.txt +7 -0
  305. package/third-party-notices/ansi-regex@5.0.1-license.txt +9 -0
  306. package/third-party-notices/ansi-styles@4.3.0-license.txt +9 -0
  307. package/third-party-notices/archiver-utils@2.1.0-LICENSE.txt +22 -0
  308. package/third-party-notices/archiver-utils@3.0.4-LICENSE.txt +22 -0
  309. package/third-party-notices/archiver@5.3.2-LICENSE.txt +22 -0
  310. package/third-party-notices/aria-hidden@1.2.6-LICENSE.txt +21 -0
  311. package/third-party-notices/array-buffer-byte-length@1.0.2-LICENSE.txt +21 -0
  312. package/third-party-notices/arraybuffer.prototype.slice@1.0.4-LICENSE.txt +21 -0
  313. package/third-party-notices/async-function@1.0.0-LICENSE.txt +21 -0
  314. package/third-party-notices/async-lock@1.4.1-LICENSE.txt +22 -0
  315. package/third-party-notices/async@3.2.6-LICENSE.txt +19 -0
  316. package/third-party-notices/available-typed-arrays@1.0.7-LICENSE.txt +21 -0
  317. package/third-party-notices/balanced-match@1.0.2-LICENSE.md.txt +21 -0
  318. package/third-party-notices/base64-js@1.5.1-LICENSE.txt +21 -0
  319. package/third-party-notices/big-integer@1.6.52-LICENSE.txt +24 -0
  320. package/third-party-notices/bl@4.1.0-LICENSE.md.txt +13 -0
  321. package/third-party-notices/bluebird@3.4.7-LICENSE.txt +21 -0
  322. package/third-party-notices/brace-expansion@1.1.21-LICENSE.txt +21 -0
  323. package/third-party-notices/brace-expansion@2.1.7-LICENSE.txt +21 -0
  324. package/third-party-notices/buffer-crc32@0.2.13-LICENSE.txt +19 -0
  325. package/third-party-notices/buffer-indexof-polyfill@1.0.2-LICENSE.txt +22 -0
  326. package/third-party-notices/buffer@5.7.1-LICENSE.txt +21 -0
  327. package/third-party-notices/call-bind-apply-helpers@1.0.2-LICENSE.txt +21 -0
  328. package/third-party-notices/call-bind@1.0.9-LICENSE.txt +21 -0
  329. package/third-party-notices/call-bound@1.0.4-LICENSE.txt +21 -0
  330. package/third-party-notices/class-variance-authority@0.7.1-LICENSE.txt +190 -0
  331. package/third-party-notices/cliui@8.0.1-LICENSE.txt.txt +14 -0
  332. package/third-party-notices/clsx@2.1.1-license.txt +9 -0
  333. package/third-party-notices/cmdk@1.1.1-LICENSE.md.txt +21 -0
  334. package/third-party-notices/collapse-white-space@2.1.0-license.txt +22 -0
  335. package/third-party-notices/color-convert@2.0.1-LICENSE.txt +21 -0
  336. package/third-party-notices/color-name@1.1.4-LICENSE.txt +8 -0
  337. package/third-party-notices/commander@15.0.0-LICENSE.txt +22 -0
  338. package/third-party-notices/compress-commons@4.1.2-LICENSE.txt +22 -0
  339. package/third-party-notices/concat-map@0.0.1-LICENSE.txt +18 -0
  340. package/third-party-notices/core-util-is@1.0.3-LICENSE.txt +19 -0
  341. package/third-party-notices/crc-32@1.2.2-LICENSE.txt +201 -0
  342. package/third-party-notices/crc32-stream@4.0.3-LICENSE.txt +22 -0
  343. package/third-party-notices/csstype@3.2.3-LICENSE.txt +19 -0
  344. package/third-party-notices/data-view-buffer@1.0.2-LICENSE.txt +21 -0
  345. package/third-party-notices/data-view-byte-length@1.0.2-LICENSE.txt +21 -0
  346. package/third-party-notices/data-view-byte-offset@1.0.1-LICENSE.txt +21 -0
  347. package/third-party-notices/dayjs@1.11.23-LICENSE.txt +21 -0
  348. package/third-party-notices/decimal.js@10.6.0-LICENCE.md.txt +23 -0
  349. package/third-party-notices/define-data-property@1.1.4-LICENSE.txt +21 -0
  350. package/third-party-notices/define-properties@1.2.1-LICENSE.txt +21 -0
  351. package/third-party-notices/dequal@2.0.3-license.txt +21 -0
  352. package/third-party-notices/detect-node-es@1.1.0-LICENSE.txt +21 -0
  353. package/third-party-notices/devlop@1.1.0-license.txt +22 -0
  354. package/third-party-notices/dunder-proto@1.0.1-LICENSE.txt +21 -0
  355. package/third-party-notices/duplexer2@0.1.4-LICENSE.md.txt +26 -0
  356. package/third-party-notices/end-of-stream@1.4.5-LICENSE.txt +21 -0
  357. package/third-party-notices/es-abstract-get@1.0.0-LICENSE.txt +21 -0
  358. package/third-party-notices/es-abstract@1.24.2-LICENSE.txt +21 -0
  359. package/third-party-notices/es-define-property@1.0.1-LICENSE.txt +21 -0
  360. package/third-party-notices/es-errors@1.3.0-LICENSE.txt +21 -0
  361. package/third-party-notices/es-object-atoms@1.1.2-LICENSE.txt +21 -0
  362. package/third-party-notices/es-set-tostringtag@2.1.0-LICENSE.txt +21 -0
  363. package/third-party-notices/es-to-primitive@1.3.4-LICENSE.txt +22 -0
  364. package/third-party-notices/escalade@3.2.0-license.txt +9 -0
  365. package/third-party-notices/exceljs@4.4.0-LICENSE.txt +22 -0
  366. package/third-party-notices/fast-csv@4.3.6-LICENSE.txt +21 -0
  367. package/third-party-notices/fast-diff@1.3.0-LICENSE.txt +201 -0
  368. package/third-party-notices/for-each@0.3.5-LICENSE.txt +22 -0
  369. package/third-party-notices/fs-constants@1.0.0-LICENSE.txt +21 -0
  370. package/third-party-notices/fs.realpath@1.0.0-LICENSE.txt +43 -0
  371. package/third-party-notices/fstream@1.0.12-LICENSE.txt +15 -0
  372. package/third-party-notices/function-bind@1.1.2-LICENSE.txt +20 -0
  373. package/third-party-notices/function.prototype.name@1.2.0-LICENSE.txt +21 -0
  374. package/third-party-notices/functions-have-names@1.2.3-LICENSE.txt +21 -0
  375. package/third-party-notices/generator-function@2.0.1-LICENSE.md.txt +7 -0
  376. package/third-party-notices/get-caller-file@2.0.5-LICENSE.md.txt +6 -0
  377. package/third-party-notices/get-intrinsic@1.3.0-LICENSE.txt +21 -0
  378. package/third-party-notices/get-nonce@1.0.1-LICENSE.txt +21 -0
  379. package/third-party-notices/get-proto@1.0.1-LICENSE.txt +21 -0
  380. package/third-party-notices/get-symbol-description@1.1.0-LICENSE.txt +21 -0
  381. package/third-party-notices/glob@7.2.3-LICENSE.txt +21 -0
  382. package/third-party-notices/globalthis@1.0.4-LICENSE.txt +21 -0
  383. package/third-party-notices/gopd@1.2.0-LICENSE.txt +21 -0
  384. package/third-party-notices/graceful-fs@4.2.11-LICENSE.txt +15 -0
  385. package/third-party-notices/has-bigints@1.1.0-LICENSE.txt +21 -0
  386. package/third-party-notices/has-property-descriptors@1.0.2-LICENSE.txt +21 -0
  387. package/third-party-notices/has-proto@1.2.0-LICENSE.txt +21 -0
  388. package/third-party-notices/has-symbols@1.1.0-LICENSE.txt +21 -0
  389. package/third-party-notices/has-tostringtag@1.0.2-LICENSE.txt +21 -0
  390. package/third-party-notices/hasown@2.0.4-LICENSE.txt +21 -0
  391. package/third-party-notices/highlight.js@11.11.2-LICENSE.txt +29 -0
  392. package/third-party-notices/ieee754@1.2.1-LICENSE.txt +11 -0
  393. package/third-party-notices/immediate@3.0.6-LICENSE.txt.txt +20 -0
  394. package/third-party-notices/inflight@1.0.6-LICENSE.txt +15 -0
  395. package/third-party-notices/inherits@2.0.4-LICENSE.txt +16 -0
  396. package/third-party-notices/internal-slot@1.1.0-LICENSE.txt +21 -0
  397. package/third-party-notices/is-array-buffer@3.0.5-LICENSE.txt +21 -0
  398. package/third-party-notices/is-async-function@2.1.1-LICENSE.txt +20 -0
  399. package/third-party-notices/is-bigint@1.1.0-LICENSE.txt +21 -0
  400. package/third-party-notices/is-boolean-object@1.2.2-LICENSE.txt +22 -0
  401. package/third-party-notices/is-callable@1.2.7-LICENSE.txt +22 -0
  402. package/third-party-notices/is-data-view@1.0.2-LICENSE.txt +21 -0
  403. package/third-party-notices/is-date-object@1.1.0-LICENSE.txt +22 -0
  404. package/third-party-notices/is-document.all@1.0.0-LICENSE.txt +21 -0
  405. package/third-party-notices/is-finalizationregistry@1.1.1-LICENSE.txt +21 -0
  406. package/third-party-notices/is-fullwidth-code-point@3.0.0-license.txt +9 -0
  407. package/third-party-notices/is-generator-function@1.1.2-LICENSE.txt +20 -0
  408. package/third-party-notices/is-map@2.0.3-LICENSE.txt +21 -0
  409. package/third-party-notices/is-negative-zero@2.0.3-LICENSE.txt +20 -0
  410. package/third-party-notices/is-number-object@1.1.1-LICENSE.txt +22 -0
  411. package/third-party-notices/is-regex@1.2.1-LICENSE.txt +20 -0
  412. package/third-party-notices/is-set@2.0.3-LICENSE.txt +21 -0
  413. package/third-party-notices/is-shared-array-buffer@1.0.4-LICENSE.txt +21 -0
  414. package/third-party-notices/is-string@1.1.1-LICENSE.txt +22 -0
  415. package/third-party-notices/is-symbol@1.1.1-LICENSE.txt +22 -0
  416. package/third-party-notices/is-typed-array@1.1.15-LICENSE.txt +22 -0
  417. package/third-party-notices/is-weakmap@2.0.2-LICENSE.txt +21 -0
  418. package/third-party-notices/is-weakref@1.1.1-LICENSE.txt +21 -0
  419. package/third-party-notices/is-weakset@2.0.4-LICENSE.txt +21 -0
  420. package/third-party-notices/isarray@2.0.5-LICENSE.txt +21 -0
  421. package/third-party-notices/isomorphic.js@0.2.5-LICENSE.txt +21 -0
  422. package/third-party-notices/jszip@3.10.2-LICENSE.markdown.txt +651 -0
  423. package/third-party-notices/katex@0.18.9-LICENSE.txt +21 -0
  424. package/third-party-notices/kdbush@4.1.0-LICENSE.txt +15 -0
  425. package/third-party-notices/lazystream@1.0.1-LICENSE.txt +23 -0
  426. package/third-party-notices/lib0@0.2.119-LICENSE.txt +21 -0
  427. package/third-party-notices/lie@3.3.0-license.md.txt +7 -0
  428. package/third-party-notices/linkifyjs@4.3.3-LICENSE.txt +19 -0
  429. package/third-party-notices/listenercount@1.0.1-LICENSE.md.txt +5 -0
  430. package/third-party-notices/lodash-es@4.18.1-LICENSE.txt +47 -0
  431. package/third-party-notices/lodash.camelcase@4.3.0-LICENSE.txt +47 -0
  432. package/third-party-notices/lodash.defaults@4.2.0-LICENSE.txt +47 -0
  433. package/third-party-notices/lodash.difference@4.5.0-LICENSE.txt +47 -0
  434. package/third-party-notices/lodash.escaperegexp@4.1.2-LICENSE.txt +47 -0
  435. package/third-party-notices/lodash.flatten@4.4.0-LICENSE.txt +47 -0
  436. package/third-party-notices/lodash.groupby@4.6.0-LICENSE.txt +47 -0
  437. package/third-party-notices/lodash.isboolean@3.0.3-LICENSE.txt +22 -0
  438. package/third-party-notices/lodash.isequal@4.5.0-LICENSE.txt +47 -0
  439. package/third-party-notices/lodash.isfunction@3.0.9-LICENSE.txt +47 -0
  440. package/third-party-notices/lodash.isnil@4.0.0-LICENSE.txt +22 -0
  441. package/third-party-notices/lodash.isplainobject@4.0.6-LICENSE.txt +47 -0
  442. package/third-party-notices/lodash.isundefined@3.0.1-LICENSE.txt.txt +22 -0
  443. package/third-party-notices/lodash.union@4.6.0-LICENSE.txt +47 -0
  444. package/third-party-notices/lodash.uniq@4.5.0-LICENSE.txt +47 -0
  445. package/third-party-notices/long@5.3.2-LICENSE.txt +202 -0
  446. package/third-party-notices/lowlight@3.3.0-license.txt +22 -0
  447. package/third-party-notices/math-intrinsics@1.1.0-LICENSE.txt +21 -0
  448. package/third-party-notices/minimatch@3.1.5-LICENSE.txt +15 -0
  449. package/third-party-notices/minimatch@5.1.9-LICENSE.txt +15 -0
  450. package/third-party-notices/minimist@1.2.8-LICENSE.txt +18 -0
  451. package/third-party-notices/mkdirp@0.5.6-LICENSE.txt +21 -0
  452. package/third-party-notices/n-gram@2.0.2-license.txt +22 -0
  453. package/third-party-notices/normalize-path@3.0.0-LICENSE.txt +21 -0
  454. package/third-party-notices/numfmt@4.0.1-LICENSE.txt +19 -0
  455. package/third-party-notices/object-inspect@1.13.4-LICENSE.txt +21 -0
  456. package/third-party-notices/object-keys@1.1.1-LICENSE.txt +21 -0
  457. package/third-party-notices/object.assign@4.1.7-LICENSE.txt +21 -0
  458. package/third-party-notices/once@1.4.0-LICENSE.txt +15 -0
  459. package/third-party-notices/orderedmap@2.1.1-LICENSE.txt +19 -0
  460. package/third-party-notices/own-keys@1.0.2-LICENSE.txt +21 -0
  461. package/third-party-notices/pako@1.0.11-LICENSE.txt +21 -0
  462. package/third-party-notices/path-is-absolute@1.0.1-license.txt +21 -0
  463. package/third-party-notices/possible-typed-array-names@1.1.0-LICENSE.txt +21 -0
  464. package/third-party-notices/process-nextick-args@2.0.1-license.md.txt +19 -0
  465. package/third-party-notices/prosemirror-changeset@2.4.4-LICENSE.txt +19 -0
  466. package/third-party-notices/prosemirror-commands@1.7.2-LICENSE.txt +19 -0
  467. package/third-party-notices/prosemirror-dropcursor@1.8.4-LICENSE.txt +19 -0
  468. package/third-party-notices/prosemirror-gapcursor@1.4.1-LICENSE.txt +19 -0
  469. package/third-party-notices/prosemirror-history@1.5.1-LICENSE.txt +19 -0
  470. package/third-party-notices/prosemirror-inputrules@1.5.1-LICENSE.txt +19 -0
  471. package/third-party-notices/prosemirror-keymap@1.2.3-LICENSE.txt +19 -0
  472. package/third-party-notices/prosemirror-model@1.25.12-LICENSE.txt +19 -0
  473. package/third-party-notices/prosemirror-schema-list@1.5.1-LICENSE.txt +19 -0
  474. package/third-party-notices/prosemirror-state@1.4.4-LICENSE.txt +19 -0
  475. package/third-party-notices/prosemirror-tables@1.8.5-LICENSE.txt +19 -0
  476. package/third-party-notices/prosemirror-transform@1.12.2-LICENSE.txt +19 -0
  477. package/third-party-notices/prosemirror-view@1.42.6-LICENSE.txt +19 -0
  478. package/third-party-notices/protobufjs@7.6.6-LICENSE.txt +39 -0
  479. package/third-party-notices/quickselect@3.0.0-LICENSE.txt +15 -0
  480. package/third-party-notices/rbush@4.0.1-LICENSE.txt +21 -0
  481. package/third-party-notices/react-dom@19.3.1-LICENSE.txt +21 -0
  482. package/third-party-notices/react-remove-scroll@2.7.2-LICENSE.txt +21 -0
  483. package/third-party-notices/react-style-singleton@2.2.3-LICENSE.txt +21 -0
  484. package/third-party-notices/react@19.3.1-LICENSE.txt +21 -0
  485. package/third-party-notices/readable-stream@2.3.8-LICENSE.txt +47 -0
  486. package/third-party-notices/readable-stream@3.6.2-LICENSE.txt +47 -0
  487. package/third-party-notices/readdir-glob@1.1.3-LICENSE.txt +201 -0
  488. package/third-party-notices/reflect.getprototypeof@1.0.10-LICENSE.txt +21 -0
  489. package/third-party-notices/regexp.prototype.flags@1.5.4-LICENSE.txt +22 -0
  490. package/third-party-notices/require-directory@2.1.1-LICENSE.txt +22 -0
  491. package/third-party-notices/rimraf@2.7.1-LICENSE.txt +15 -0
  492. package/third-party-notices/rope-sequence@1.3.4-LICENSE.txt +19 -0
  493. package/third-party-notices/rxjs@7.8.2-LICENSE.txt.txt +202 -0
  494. package/third-party-notices/safe-array-concat@1.1.4-LICENSE.txt +21 -0
  495. package/third-party-notices/safe-buffer@5.1.2-LICENSE.txt +21 -0
  496. package/third-party-notices/safe-buffer@5.2.1-LICENSE.txt +21 -0
  497. package/third-party-notices/safe-push-apply@1.0.0-LICENSE.txt +21 -0
  498. package/third-party-notices/safe-regex-test@1.1.0-LICENSE.txt +21 -0
  499. package/third-party-notices/scheduler@0.28.0-LICENSE.txt +21 -0
  500. package/third-party-notices/set-function-length@1.2.2-LICENSE.txt +21 -0
  501. package/third-party-notices/set-function-name@2.0.2-LICENSE.txt +21 -0
  502. package/third-party-notices/set-proto@1.0.0-LICENSE.txt +21 -0
  503. package/third-party-notices/setimmediate@1.0.5-LICENSE.txt.txt +20 -0
  504. package/third-party-notices/side-channel-list@1.0.1-LICENSE.txt +21 -0
  505. package/third-party-notices/side-channel-map@1.0.1-LICENSE.txt +21 -0
  506. package/third-party-notices/side-channel-weakmap@1.0.2-LICENSE.txt +21 -0
  507. package/third-party-notices/side-channel@1.1.1-LICENSE.txt +21 -0
  508. package/third-party-notices/sonner@2.0.8-LICENSE.md.txt +21 -0
  509. package/third-party-notices/stop-iteration-iterator@1.1.0-LICENSE.txt +21 -0
  510. package/third-party-notices/string-width@4.2.3-license.txt +9 -0
  511. package/third-party-notices/string.prototype.trim@1.2.11-LICENSE.txt +21 -0
  512. package/third-party-notices/string.prototype.trimend@1.0.10-LICENSE.txt +21 -0
  513. package/third-party-notices/string.prototype.trimstart@1.0.8-LICENSE.txt +21 -0
  514. package/third-party-notices/string_decoder@1.1.1-LICENSE.txt +48 -0
  515. package/third-party-notices/string_decoder@1.3.0-LICENSE.txt +48 -0
  516. package/third-party-notices/strip-ansi@6.0.1-license.txt +9 -0
  517. package/third-party-notices/tar-stream@2.2.0-LICENSE.txt +21 -0
  518. package/third-party-notices/tiny-pinyin@1.3.2-LICENSE.txt +21 -0
  519. package/third-party-notices/tmp@0.2.7-LICENSE.txt +21 -0
  520. package/third-party-notices/traverse@0.3.10-LICENSE.txt +21 -0
  521. package/third-party-notices/trigram-utils@2.0.1-license.txt +22 -0
  522. package/third-party-notices/tslib@2.8.1-LICENSE.txt.txt +12 -0
  523. package/third-party-notices/typed-array-buffer@1.0.3-LICENSE.txt +21 -0
  524. package/third-party-notices/typed-array-byte-length@1.0.3-LICENSE.txt +21 -0
  525. package/third-party-notices/typed-array-byte-offset@1.0.5-LICENSE.txt +21 -0
  526. package/third-party-notices/typed-array-length@1.0.8-LICENSE.txt +21 -0
  527. package/third-party-notices/typedarray.prototype.slice@1.0.6-LICENSE.txt +21 -0
  528. package/third-party-notices/unbox-primitive@1.1.0-LICENSE.txt +21 -0
  529. package/third-party-notices/undici-types@8.9.0-LICENSE.txt +21 -0
  530. package/third-party-notices/unzipper@0.10.14-LICENSE.txt +25 -0
  531. package/third-party-notices/use-callback-ref@1.3.3-LICENSE.txt +21 -0
  532. package/third-party-notices/use-sidecar@1.1.3-LICENSE.txt +21 -0
  533. package/third-party-notices/util-deprecate@1.0.2-LICENSE.txt +24 -0
  534. package/third-party-notices/uuid@8.3.2-LICENSE.md.txt +9 -0
  535. package/third-party-notices/w3c-keyname@2.2.8-LICENSE.txt +19 -0
  536. package/third-party-notices/which-boxed-primitive@1.1.1-LICENSE.txt +21 -0
  537. package/third-party-notices/which-builtin-type@1.2.1-LICENSE.txt +21 -0
  538. package/third-party-notices/which-collection@1.0.2-LICENSE.txt +21 -0
  539. package/third-party-notices/which-typed-array@1.1.24-LICENSE.txt +22 -0
  540. package/third-party-notices/wrap-ansi@7.0.0-license.txt +9 -0
  541. package/third-party-notices/wrappy@1.0.2-LICENSE.txt +15 -0
  542. package/third-party-notices/xmlchars@2.2.0-LICENSE.txt +18 -0
  543. package/third-party-notices/y-protocols@1.0.7-LICENSE.txt +21 -0
  544. package/third-party-notices/y18n@5.0.8-LICENSE.txt +13 -0
  545. package/third-party-notices/yargs-parser@21.1.1-LICENSE.txt.txt +14 -0
  546. package/third-party-notices/yargs@17.7.3-LICENSE.txt +21 -0
  547. package/third-party-notices/yjs@13.6.33-LICENSE.txt +23 -0
  548. package/third-party-notices/zip-stream@4.1.1-LICENSE.txt +22 -0
package/README.md CHANGED
@@ -1,3 +1,470 @@
1
- # Temporary Holding Version
1
+ # Wendang React
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ 在 React 应用中编辑和展示文档、工作表与思维导图,支持表格、图片、代码、公式、附件、评论和文档协同。
4
+
5
+ [在线演示](https://doc.yjmf.com) · [Vue 版本](https://www.npmjs.com/package/wendang-vue) · [数据工具与服务端校验](https://www.npmjs.com/package/wendang) · [源码](https://gitee.com/ztes/wendang)
6
+
7
+ ## 安装
8
+
9
+ 在 React **18.3+ 或 19** 应用中安装:
10
+
11
+ ```sh
12
+ npm install wendang wendang-react yjs y-protocols
13
+ ```
14
+
15
+ 项目需已有 `react` 和 `react-dom`。使用 TypeScript 时安装对应的 `@types/react` 和 `@types/react-dom`。
16
+ 构建环境使用 Node.js **20.19+**,页面在现代浏览器中运行。应用入口引入一次 `wendang-react/styles.css`。
17
+
18
+ ## 先运行:编辑、预览和本地保存
19
+
20
+ 把下面内容放入 `App.tsx`。不需要后端或额外 UI 组件库:可以输入文字、切换预览、保存到本机,刷新后恢复。
21
+ 附件上传、页面搜索和讨论需要接入下文的宿主服务。
22
+
23
+ ```tsx
24
+ import { useEffect, useRef, useState } from 'react'
25
+ import { ContentProvider } from 'wendang-react'
26
+ import { DocumentEditor, type DocumentEditorHandle } from 'wendang-react/document'
27
+ import { DocumentViewer } from 'wendang-react/document/viewer'
28
+ import { ContentSchemaService, SCHEMA_VERSION, requiredSchemaVersion } from 'wendang/schema'
29
+ import type { ProseMirrorDoc } from 'wendang/types'
30
+ import 'wendang-react/styles.css'
31
+
32
+ const storageKey = 'wendang:demo:document'
33
+ const initialDoc: ProseMirrorDoc = {
34
+ type: 'doc', content: [{ type: 'paragraph', content: [{ type: 'text', text: '开始写作,在空行输入 / 插入内容。' }] }],
35
+ }
36
+
37
+ export default function App() {
38
+ const editor = useRef<DocumentEditorHandle>(null)
39
+ const [doc, setDoc] = useState(initialDoc)
40
+ const [schemaVersion, setSchemaVersion] = useState(SCHEMA_VERSION)
41
+ const [loaded, setLoaded] = useState(false)
42
+ const [ready, setReady] = useState(false)
43
+ const [editing, setEditing] = useState(true)
44
+ const [status, setStatus] = useState('尚未保存')
45
+ const [error, setError] = useState('')
46
+
47
+ useEffect(() => {
48
+ try {
49
+ const raw = localStorage.getItem(storageKey)
50
+ if (raw) {
51
+ const stored: { doc: ProseMirrorDoc; schemaVersion: number } = JSON.parse(raw)
52
+ new ContentSchemaService().validate(stored.doc, stored.schemaVersion)
53
+ setDoc(stored.doc)
54
+ setSchemaVersion(requiredSchemaVersion(stored.doc, stored.schemaVersion))
55
+ setStatus('已载入本机内容')
56
+ }
57
+ setLoaded(true)
58
+ } catch (failure) {
59
+ setError(`读取失败,原始数据仍保留:${String(failure)}`)
60
+ }
61
+ }, [])
62
+
63
+ async function save() {
64
+ if (!editor.current?.isReady()) return
65
+ try {
66
+ const snapshot = await editor.current.prepareSnapshot()
67
+ localStorage.setItem(storageKey, JSON.stringify(snapshot))
68
+ setSchemaVersion(snapshot.schemaVersion)
69
+ setError('')
70
+ setStatus('已保存到本机')
71
+ } catch (failure) { setError(String(failure)) }
72
+ }
73
+
74
+ return <main data-block-select-band style={{ maxWidth: 960, margin: '32px auto', padding: '0 56px' }}>
75
+ <div style={{ display: 'flex', gap: 12, marginBottom: 24 }}>
76
+ <button disabled={!loaded} onClick={() => { setReady(false); setEditing(!editing) }}>{editing ? '预览' : '继续编辑'}</button>
77
+ <button disabled={!ready || !editing} onClick={() => void save()}>保存到本机</button>
78
+ <span role="status">{status}</span>
79
+ </div>
80
+ {error && <p role="alert">{error}</p>}
81
+ {loaded && <ContentProvider theme="light">
82
+ {editing ? <DocumentEditor ref={editor} value={doc} schemaVersion={schemaVersion}
83
+ onChange={value => { setDoc(value); setStatus('有未保存的修改') }}
84
+ onReady={() => setReady(true)} onError={failure => setError(failure.message)}
85
+ onNotice={setError} /> : <DocumentViewer value={doc} />}
86
+ </ContentProvider>}
87
+ </main>
88
+ }
89
+ ```
90
+
91
+ **布局要点:** 正文左侧需由应用留出约 **56px** 空间,用于空行「+」、块菜单和表格入口。
92
+ `data-block-select-band` 声明可从留白开始框选的范围。不要在编辑器内部额外缩进正文。
93
+ 工作表和独立导图还需要明确的容器高度,示例见下文。
94
+
95
+ ### 编辑操作
96
+
97
+ | 想做什么 | 操作 |
98
+ | --- | --- |
99
+ | 插入标题、表格、图片、代码等 | 空行输入 `/`,或悬停空行后点左侧蓝色「+」;表格先选行列数 |
100
+ | 修改文字格式 | 选中文字,在浮动工具栏中选择格式、链接或颜色 |
101
+ | 转换、移动一个块 | 悬停块左侧,点类型图标或抓手打开菜单;按住抓手拖动 |
102
+ | 移动多个块 | 从正文两侧留白拖动框选,再拖动选中区域;Esc 取消,撤销恢复 |
103
+ | 调整表格 | 点表格左上入口、行列选择条或单元格工具栏;支持拖选、合并、底色、对齐和列宽 |
104
+ | 操作图片 | 先点选图片,再用工具条对齐、编辑图注、预览或删除;图片行可重排和调整相对宽度 |
105
+ | 查看大图 | 阅读态点图片;编辑态点选后再次点击,或点「查看大图」;支持缩放、旋转、拖动与同行翻页 |
106
+ | 编辑公式 | 点击公式,在输入框中修改;Enter 确认,Esc 取消 |
107
+ | 设置代码显示 | 工具栏选择语言、折叠、行号、配色与高度;显示设置不改变正文 |
108
+
109
+ ## 对接服务端:加载与保存
110
+
111
+ 建议保存格式为 `{ doc, schemaVersion }`。`DocumentEditor.prepareSnapshot()` 返回的就是这个结构。
112
+ 调用时可能因上传、公式编辑、组合输入或未完成的插入操作而拒绝;提示用户完成操作后重试。
113
+
114
+ ```ts
115
+ import type { DocumentEditorHandle } from 'wendang-react/document'
116
+ import type { ProseMirrorDoc } from 'wendang/types'
117
+ import { ContentSchemaService } from 'wendang/schema'
118
+
119
+ export interface StoredDocument { doc: ProseMirrorDoc; schemaVersion: number }
120
+
121
+ export async function loadDocument(id: string): Promise<StoredDocument> {
122
+ const response = await fetch(`/api/documents/${encodeURIComponent(id)}`, { credentials: 'include' })
123
+ if (!response.ok) throw new Error(`读取失败:${response.status}`)
124
+ const stored: StoredDocument = await response.json()
125
+ new ContentSchemaService().validate(stored.doc, stored.schemaVersion)
126
+ return stored
127
+ }
128
+
129
+ export async function saveDocument(id: string, editor: Pick<DocumentEditorHandle, 'prepareSnapshot'>) {
130
+ const snapshot = await editor.prepareSnapshot()
131
+ const response = await fetch(`/api/documents/${encodeURIComponent(id)}`, {
132
+ method: 'PUT', credentials: 'include',
133
+ headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(snapshot),
134
+ })
135
+ if (!response.ok) throw new Error(`保存失败:${response.status}`)
136
+ return snapshot
137
+ }
138
+ ```
139
+
140
+ `/api/*` 是应用实现的接口,下文示例同样如此。服务端应再次校验正文和资源权限后入库。
141
+ 把加载结果分别传给 `value` 和 `schemaVersion`;切换文档时用 `<DocumentEditor key={documentId} ... />` 重建实例。
142
+
143
+ `onChange` 更新本地状态,不能代表服务端已经保存。收到保存成功响应后再显示「已保存」;
144
+ 失败保留当前内容。自动保存需串行提交或使用服务端版本校验,避免旧请求覆盖新内容。
145
+ 不需要受控状态时,可改用 `defaultValue`;同一个实例不要同时使用两种初始化方式。
146
+
147
+ ### 文档 API
148
+
149
+ | Props / 回调 | 用途 |
150
+ | --- | --- |
151
+ | `value`、`onChange(doc, meta?)` | 受控内容;`meta.remote` 标识远端同步 |
152
+ | `defaultValue` | 不受控实例的初始内容 |
153
+ | `schemaVersion` | 加载内容的数据版本 |
154
+ | `disabled`、`placeholder` | 编辑开关和空内容提示 |
155
+ | `allowExport`、`canComment` | 导出操作、评论入口开关,默认关闭 |
156
+ | `pageId`、`spaceId` | 资源标识和引用搜索上下文 |
157
+ | `uploadImage`、`uploadFile` | 上传回调;也可通过 Provider 的 `host` 提供 |
158
+ | `inlineComments`、`activeCommentId` | 评论列表及当前高亮讨论 |
159
+ | `onReady`、`onError`、`onNotice`、`onBlur` | 就绪、错误、提示和失焦 |
160
+ | `onRequestComment`、`onInlineMarkClick`、`onCommentsChanged` | 创建行内评论、点评论标记、导图讨论变化 |
161
+ | `onSharePage`、`onConvertToSubpage`、`onSaveAsTemplate` | 应用菜单动作;后两者接收块 JSON,由应用处理 |
162
+ | `collabDoc`、`collabAwareness` | 文档协同,见下文 |
163
+
164
+ 实例方法:
165
+
166
+ | 方法 | 返回 / 用途 |
167
+ | --- | --- |
168
+ | `isReady()` / `whenReady()` | 查询就绪 / 等待初始化;销毁也会结束等待,之后先检查 `isReady()` |
169
+ | `prepareSnapshot()` | `Promise<{ doc, schemaVersion }>`,保存时优先使用 |
170
+ | `getJSON()` / `getSnapshot()` | 立即读取正文,不等待未完成操作 |
171
+ | `setContent(doc)` | 明确替换内容,协同模式不使用 |
172
+ | `hasPendingTasks()` | 是否存在未完成的上传、输入或插入 |
173
+ | `focus()` / `undo()` / `redo()` | 聚焦、撤销、重做 |
174
+ | `hasSelection()` / `setSelection(from, to?)` | 查询 / 恢复 ProseMirror 文本选区 |
175
+ | `getSelectionForAnchor()` | 评论锚点 `{ quote, prefix, suffix, start }`,无文字返回 `null` |
176
+ | `getSelectionRect()` | 选区首行的视口矩形,无选区返回 `null` |
177
+
178
+ 只读页面用 `DocumentViewer`,主要 Props 为 `value`、`inlineComments`、`activeCommentId`、
179
+ `onMarkClick`、`attachmentFetcher`、`resolvePageLink`、`pageId`、`canComment`、`allowExport`。
180
+ `sameDocument(a,b)` 可从 `wendang-react/document` 导入,用于比较归一化后的正文。
181
+
182
+ ## 宿主服务:附件、页面引用和评论
183
+
184
+ 先建立一个稳定的 `host` 对象,传给 `<ContentProvider host={host}>`。下面可以保存为 `content-host.ts`;
185
+ 示例使用 Cookie 登录,改用 Bearer token 时在请求函数中添加应用的认证头。
186
+
187
+ ```ts
188
+ import type { ContentHost } from 'wendang-react'
189
+ import type { CommentItem } from 'wendang/types'
190
+
191
+ async function json<T>(url: string, init: RequestInit = {}): Promise<T> {
192
+ const response = await fetch(url, { credentials: 'include', ...init })
193
+ if (!response.ok) throw new Error(`请求失败:${response.status}`)
194
+ return await response.json()
195
+ }
196
+ async function write(url: string, method: string, data?: unknown): Promise<void> {
197
+ const response = await fetch(url, {
198
+ method, credentials: 'include', headers: { 'Content-Type': 'application/json' },
199
+ ...(data === undefined ? {} : { body: JSON.stringify(data) }),
200
+ })
201
+ if (!response.ok) throw new Error(`操作失败:${response.status}`)
202
+ }
203
+
204
+ export function createContentHost(scope: string): ContentHost {
205
+ return {
206
+ scope,
207
+ attachments: {
208
+ async fetch(id) {
209
+ const response = await fetch(`/api/attachments/${encodeURIComponent(id)}/content`, { credentials: 'include' })
210
+ if (!response.ok) throw new Error('附件读取失败')
211
+ return await response.blob()
212
+ },
213
+ async uploadImage(file) {
214
+ const form = new FormData(); form.append('file', file)
215
+ return await json<{ id: string; alt: string }>('/api/attachments/images', { method: 'POST', body: form })
216
+ },
217
+ async uploadFile(file) {
218
+ const form = new FormData(); form.append('file', file)
219
+ return await json<{ id: string; filename: string; mimeType: string; size: number }>('/api/attachments/files', { method: 'POST', body: form })
220
+ },
221
+ },
222
+ references: {
223
+ async search(query, context) {
224
+ const params = new URLSearchParams({ q: query })
225
+ if (context.spaceId) params.set('spaceId', context.spaceId)
226
+ if (context.excludeId) params.set('excludeId', context.excludeId)
227
+ return await json<Array<{ id: string; title: string }>>(`/api/pages/search?${params}`)
228
+ },
229
+ resolve: id => ({ href: `/pages/${encodeURIComponent(id)}` }),
230
+ navigate: href => { window.location.assign(href) },
231
+ },
232
+ comments: {
233
+ list: id => json<{ items: CommentItem[] }>(`/api/documents/${encodeURIComponent(id)}/comments`),
234
+ create: (id, body, parentId, target) => write(`/api/documents/${encodeURIComponent(id)}/comments`, 'POST', { body, parentId, target }),
235
+ update: (id, body) => write(`/api/comments/${encodeURIComponent(id)}`, 'PATCH', { body }),
236
+ resolve: (id, resolved) => write(`/api/comments/${encodeURIComponent(id)}/resolve`, 'PATCH', { resolved }),
237
+ remove: id => write(`/api/comments/${encodeURIComponent(id)}`, 'DELETE'),
238
+ },
239
+ }
240
+ }
241
+ ```
242
+
243
+ 在 React 中用 `useMemo(() => createContentHost(scope), [scope])` 创建并传入 Provider。
244
+ `scope` 应包含应用、租户、账号及权限上下文,例如 `app:tenant:user:permissionVersion`;
245
+ 它变化时内容实例会重建。切换前先处理未保存内容;同页不同权限实例使用不同 scope。
246
+
247
+ | 服务 | 应用需返回什么 |
248
+ | --- | --- |
249
+ | `attachments.fetch(id)` | 附件原始 `Blob`,按当前用户鉴权 |
250
+ | `uploadImage(file)` | `{ id, alt }`,`id` 为稳定附件 UUID |
251
+ | `uploadFile(file)` | `{ id, filename, mimeType, size }`,大小单位为字节 |
252
+ | `references.search(query, context)` | 当前用户可见的 `{ id, title }[]`,支持空查询 |
253
+ | `references.resolve(id, label)` | `{ href, external? }`;不可见返回 `null`,页面降级为纯文本 |
254
+ | `references.navigate(href)` | 可选;SPA 可在这里调用自己的 router |
255
+ | `comments.list(resourceId)` | `{ items: CommentItem[] }`,回复放在父评论 `replies` 中 |
256
+ | `comments.create(resourceId, body, parentId?, target?)` | 创建成功后 resolve;`target` 为导图的 `{ blockId, topicId }` |
257
+ | `comments.update / resolve / remove` | 正文修改 / 解决状态 / 删除成功后 resolve;`update` 可选 |
258
+
259
+ 可选 `preferences.get(key) / set(key,value)` 存储展示偏好,例如代码主题键 `code-theme`。
260
+ 可选 `location.current() / subscribe(listener) / createLink({blockId,topicId})` 对接导图深链;
261
+ `current()` 返回含 `mind` 和 `topic` 参数的 hash,`subscribe` 返回取消监听函数。
262
+
263
+ **后端对应规则:** 上传返回稳定 ID,JSON 不存临时下载地址;列表和下载接口按用户鉴权。
264
+ 导图评论由后端把 `target` 写入 `anchor.prefix = 'mind:' + blockId`、`anchor.suffix = topicId`;
265
+ 普通行内评论则保存下面获取的文字锚点。编辑权限来自 `CommentItem.canEdit`,删除来自 `canDelete`,解决来自 `canResolve`。
266
+
267
+ ### 行内评论怎么接
268
+
269
+ 给编辑器传 `canComment`、`inlineComments={comments}`,并处理 `onRequestComment`。
270
+ 在用户点击评论入口时读取 `editor.current.getSelectionForAnchor()`,没有锚点就不创建。
271
+ 将 `{ ...anchor, seq: null }` 与评论正文交给应用的评论 API;保存后重新读取列表。
272
+
273
+ 阅读器传相同的 `inlineComments`,通过 `onMarkClick(id)` 打开讨论。
274
+ 编辑器用 `onInlineMarkClick(id)`;`activeCommentId` 控制当前讨论高亮。
275
+ 行内评论的输入面板由应用提供,主题讨论面板在导图内提供。
276
+
277
+ ## 工作表与 XLSX
278
+
279
+ 工作表编辑容器必须有明确高度。以下组件可直接挂到应用中,保存内容为 `WorkbookDocument`:
280
+
281
+ ```tsx
282
+ import { useRef, useState } from 'react'
283
+ import { ContentProvider } from 'wendang-react'
284
+ import { SpreadsheetEditor, type SpreadsheetEditorHandle } from 'wendang-react/spreadsheet'
285
+ import { SpreadsheetViewer } from 'wendang-react/spreadsheet/viewer'
286
+ import { emptyWorkbook } from 'wendang/spreadsheet'
287
+ import { WORKBOOK_SCHEMA_VERSION } from 'wendang/schema'
288
+ import 'wendang-react/styles.css'
289
+
290
+ export default function WorkbookExample() {
291
+ const editor = useRef<SpreadsheetEditorHandle>(null)
292
+ const [book, setBook] = useState(() => emptyWorkbook('sales'))
293
+ const [savedBook, setSavedBook] = useState(book)
294
+ const [message, setMessage] = useState('')
295
+ const [ready, setReady] = useState(false)
296
+ async function save() {
297
+ try {
298
+ if (!editor.current?.isReady()) return
299
+ const doc = await editor.current.prepareSnapshot()
300
+ localStorage.setItem('wendang:demo:workbook', JSON.stringify({ doc, schemaVersion: WORKBOOK_SCHEMA_VERSION }))
301
+ setSavedBook(doc)
302
+ setMessage('工作表已保存到本机')
303
+ } catch (error) { setMessage(String(error)) }
304
+ }
305
+ return <ContentProvider>
306
+ <button disabled={!ready} onClick={() => void save()}>保存工作表</button><p role="status">{message}</p>
307
+ <div style={{ height: 640 }}><SpreadsheetEditor ref={editor} value={book} onChange={setBook}
308
+ onReady={() => setReady(true)} onError={error => setMessage(error.message)} /></div>
309
+ <p>最近保存的工作表预览</p><SpreadsheetViewer value={savedBook} allowExport />
310
+ </ContentProvider>
311
+ }
312
+ ```
313
+
314
+ 服务端保存时用 `WORKBOOK_SCHEMA_VERSION`,不要使用正文 `SCHEMA_VERSION`。
315
+ 阅读器显示最近保存的公式结果,不会重新计算。上面预览使用 `prepareSnapshot()` 的结果,
316
+ 避免公式计算尚未完成时就把编辑事件里的中间值拿去显示。
317
+
318
+ XLSX 文件输入框得到 `File` 后调用导入;告警应先展示给用户,再替换当前工作表:
319
+
320
+ ```ts
321
+ import type { SpreadsheetEditorHandle } from 'wendang-react/spreadsheet'
322
+
323
+ export async function importWorkbook(file: File, editor: SpreadsheetEditorHandle) {
324
+ const { importXlsx } = await import('wendang-react/spreadsheet/xlsx')
325
+ const result = await importXlsx(file)
326
+ if (result.warnings.length && !window.confirm(result.warnings.join('\n') + '\n继续导入?')) return
327
+ editor.replace(result.doc)
328
+ return result.inspection
329
+ }
330
+
331
+ export async function downloadWorkbook(editor: SpreadsheetEditorHandle) {
332
+ const { exportXlsx } = await import('wendang-react/spreadsheet/xlsx')
333
+ const doc = await editor.prepareSnapshot()
334
+ const bytes = await exportXlsx(doc)
335
+ const url = URL.createObjectURL(new Blob([new Uint8Array(bytes)]))
336
+ const link = document.createElement('a')
337
+ link.href = url; link.download = '工作表.xlsx'; link.click()
338
+ setTimeout(() => URL.revokeObjectURL(url), 10000)
339
+ }
340
+ ```
341
+
342
+ 支持 `.xlsx`,文件最大 5 MiB,展开后最大 20 MiB;不支持宏文件。
343
+ 图片、图表、绘图、透视等未转换内容会通过 `warnings` 提示。
344
+ `replace()` 用于明确导入或切换内容,不要在每次 `onChange` 后调用。
345
+
346
+ | 工作表接口 | 用途 |
347
+ | --- | --- |
348
+ | `value / onChange`、`disabled`、`theme` | 内容、编辑权限、可选主题 |
349
+ | `onReady / onError` | 初始化成功与失败 |
350
+ | `prepareSnapshot()` | 完成单元格编辑、等待计算并返回校验后的工作簿 |
351
+ | `getSnapshot() / snapshot()`、`replace(doc)` | 立即取快照、替换工作簿 |
352
+ | `isEditing() / finishEditing() / settleCalculation()` | 查询输入状态、完成输入、等待计算 |
353
+ | `dispose()` | 主动销毁;正常组件卸载会自动清理 |
354
+
355
+ `SpreadsheetViewer` 可传 `standalone` 填满容器、`allowExport` 显示导出、
356
+ `exportSnapshot: () => Promise<{ title, doc }>` 提供当前有权导出的版本。
357
+
358
+ ## 思维导图
359
+
360
+ ```tsx
361
+ import { useRef, useState } from 'react'
362
+ import { ContentProvider } from 'wendang-react'
363
+ import { MindMapEditor, type MindMapEditorHandle } from 'wendang-react/mindmap'
364
+ import { MindMapViewer } from 'wendang-react/mindmap/viewer'
365
+ import { createMindMap, readMindMap } from 'wendang/mindmap'
366
+ import 'wendang-react/styles.css'
367
+
368
+ export default function MindMapExample() {
369
+ const editor = useRef<MindMapEditorHandle>(null)
370
+ const [map, setMap] = useState(() => createMindMap('both'))
371
+ const [message, setMessage] = useState(''), [ready, setReady] = useState(false)
372
+ const model = readMindMap(map)
373
+ async function save() {
374
+ try {
375
+ if (!editor.current?.isReady()) return
376
+ localStorage.setItem('wendang:demo:mindmap', JSON.stringify(await editor.current.prepareSnapshot()))
377
+ setMessage('导图已保存到本机')
378
+ } catch (error) { setMessage(String(error)) }
379
+ }
380
+ return <ContentProvider>
381
+ <button disabled={!ready} onClick={() => void save()}>保存导图</button><p role="status">{message}</p>
382
+ <div style={{ height: 640 }}><MindMapEditor ref={editor} value={map} onChange={setMap} allowExport
383
+ onReady={() => setReady(true)} onError={error => setMessage(error.message)} /></div>
384
+ {model && <MindMapViewer value={model} />}
385
+ </ContentProvider>
386
+ }
387
+ ```
388
+
389
+ 保存 `MindMapJson`,其中包含 `formatVersion`;从服务器加载后先用 `readMindMap` 检查,再传给 `value`。
390
+ 上面工作表和导图例子演示写入本机;恢复时读取相应 storage key、检查内容后初始化状态即可。
391
+
392
+ 点击主题选中,Tab 添加子主题,Enter 添加同级,F2 / 双击改名;Delete 删除,含子主题先确认。
393
+ Shift / Ctrl / ⌘ 点击可多选,空白处拖动框选;拖动中实时显示命中,Esc 取消。
394
+ 空格或中键拖动平移,Ctrl / ⌘ + 滚轮缩放。分支可拖到目标或中心另一侧,操作支持撤销。
395
+
396
+ | Props / 接口 | 用途 |
397
+ | --- | --- |
398
+ | `value / onChange`、`disabled`、`allowExport` | 导图 JSON、编辑权限、导出开关 |
399
+ | `resourceId / canComment / openComments` | 讨论资源、发表评论权限、初始展开讨论 |
400
+ | `saveStatus / showSaveHint` | 应用的真实保存状态;关闭默认保存提醒 |
401
+ | `collabAwareness / viewState` | 在线用户状态、视口/折叠/选中状态 |
402
+ | `onReady / onError / onCommentsChanged` | 就绪、失败、讨论更新 |
403
+ | `prepareSnapshot() / getSnapshot()` | 保存快照 / 立即读取;主题输入未完成时先结束输入 |
404
+ | `undo() / redo() / focus()` | 撤销、重做、聚焦 |
405
+
406
+ 更多菜单提供大纲、属性、讨论、导入;布局、配色和预览高度可在工具栏调整,分支线型在视图设置中。
407
+ 导出支持 PNG / SVG / Markdown / JSON。独立导图是快照编辑;`collabAwareness` 仅提供在线状态,不同步内容。
408
+ 正文内插入的导图随整篇文档保存。
409
+
410
+ ## 文档协同接入
411
+
412
+ 文档可以接收应用维护的 `Y.Doc` 和 `Awareness`,连接与认证由应用选择的 Yjs provider 提供。
413
+ 以下组件接收已建立连接的实例;切换资源时给组件设置不同 `key`,不要同时传 `value` 初始化内容。
414
+
415
+ ```tsx
416
+ import { ContentProvider } from 'wendang-react'
417
+ import { DocumentEditor } from 'wendang-react/document'
418
+ import type { CollaborationDocument, Awareness } from 'wendang-react/bindings/yjs'
419
+ import 'wendang-react/styles.css'
420
+
421
+ export default function CollaborativeDocument({ doc, awareness, canEdit }: {
422
+ doc: CollaborationDocument; awareness: Awareness; canEdit: boolean
423
+ }) {
424
+ return <ContentProvider>
425
+ <div style={{ padding: '0 56px' }}><DocumentEditor collabDoc={doc} collabAwareness={awareness}
426
+ disabled={!canEdit} onChange={(_value, meta) => { console.log(meta?.remote ? '收到远端更新' : '本地编辑') }} /></div>
427
+ </ContentProvider>
428
+ }
429
+ ```
430
+
431
+ 正文使用 Y.Doc 的 `default` XmlFragment。服务端/协同 provider 负责初始化及持久化 Yjs 更新;
432
+ 不要对已同步文档再次 `setContent` 灌入初始 JSON。连接关闭、撤权、重连和卸载由应用管理。
433
+ 工作表与独立导图使用快照保存;它们不通过 `collabDoc` 同步。
434
+
435
+ ## 主题、按需导入和接入规范
436
+
437
+ `ContentProvider` 支持 `theme="light" | "dark"`、`accent="#2f6feb"`、`host` 和 `unstyled`。
438
+ 每个 Provider 可使用不同主题;`unstyled` 需由应用提供颜色和排版变量。
439
+ `allowExport` 默认关闭,控制导出和下载入口;后端仍需验证下载权限。
440
+
441
+ | 入口 | 主要组件 / API |
442
+ | --- | --- |
443
+ | `wendang-react` | `ContentProvider`、宿主服务类型 |
444
+ | `wendang-react/document` | `DocumentEditor`、ref 类型、`sameDocument`、定位工具 |
445
+ | `wendang-react/document/viewer` | `DocumentViewer` |
446
+ | `wendang-react/spreadsheet`、`spreadsheet/viewer` | 工作表编辑 / 阅读 |
447
+ | `wendang-react/spreadsheet/xlsx` | `importXlsx / exportXlsx` |
448
+ | `wendang-react/mindmap`、`mindmap/viewer` | 导图编辑 / 预览、`MindMapBlock` |
449
+ | `wendang-react/bindings/yjs` | 协同字段常量及类型 |
450
+ | `wendang-react/shared` | 宿主通用工具 |
451
+
452
+ SSR / Next.js 中将交互编辑组件放入带 `'use client'` 的客户端组件;
453
+ 访问 localStorage、window、网络连接的初始化放在 effect 中。全局样式在应用根入口引入。
454
+ 同一实例编辑时保持 ref、host 和资源 key 稳定;只有明确切换内容或身份才重建。
455
+
456
+ ## 常见问题
457
+
458
+ - **没有样式或工具条被裁掉:** 引入 `styles.css`,正文外留 56px;父级不要裁掉操作轨道。
459
+ - **工作表或导图为空白:** 容器需有明确高度,如 `640px`;检查 `onError` 和浏览器网络。
460
+ - **图片/文件无法上传或显示:** 接入 `host.attachments`,fetch 返回 Blob,上传返回稳定 UUID。
461
+ - **无法选页面或发表评论:** 接入 `references / comments`,并传 `pageId / resourceId` 与 `canComment`。
462
+ - **快照准备失败:** 完成上传、公式或主题输入,关闭未完成的插入对话框后重试;不要用空内容覆盖草稿。
463
+ - **导出按钮没出现:** 显式传 `allowExport`,并确保后端允许导出该资源。
464
+ - **切换账号还显示旧内容:** 更新 `host.scope` 并重新加载该账号有权访问的数据。
465
+
466
+ ## 联系与许可
467
+
468
+ 联系我们请发邮件:[yjmf@ztes.com](mailto:yjmf@ztes.com)。问题反馈:[Gitee Issues](https://gitee.com/ztes/wendang/issues)。
469
+
470
+ 采用随包附带的 [MIT 许可](LICENSE)。第三方声明见 `NOTICE.md` 与 `third-party-notices/`。
@@ -0,0 +1,5 @@
1
+ "use client";
2
+ import { C } from "../chunks/extensions-B-CVVQhp.js";
3
+ export {
4
+ C as COLLAB_FIELD
5
+ };
@@ -0,0 +1,68 @@
1
+ "use client";
2
+ import { jsx } from "react/jsx-runtime";
3
+ import { useRef, useState, useLayoutEffect } from "react";
4
+ import { createPortal } from "react-dom";
5
+ import { a as useContentContext } from "./host-C-V688Rq.js";
6
+ import { p as placeAnchoredPopover } from "./popover-placement-D3xVYdkt.js";
7
+ import { u as useLayer, L as LayerProvider, p as placePanel } from "./index-Ii536CFG.js";
8
+ function AnchoredPanel({ anchor, onClose, align = "start", prefer = "below", gap = 8, label, role = "dialog", className = "", portal: portalOverride, children, onKeyDown }) {
9
+ const context = useContentContext();
10
+ const portal = typeof portalOverride === "function" ? portalOverride() : portalOverride !== void 0 ? portalOverride : context.portal;
11
+ const panel = useRef(null);
12
+ const trigger = useRef(anchor);
13
+ trigger.current = anchor;
14
+ const layer = useLayer(trigger, panel, true, onClose);
15
+ const [position, setPosition] = useState(null);
16
+ useLayoutEffect(() => {
17
+ const measure = () => {
18
+ var _a;
19
+ const rect = anchor == null ? void 0 : anchor.getBoundingClientRect(), card = (_a = panel.current) == null ? void 0 : _a.getBoundingClientRect();
20
+ if (!rect || !card) return;
21
+ const placed = align === "end" ? placePanel({
22
+ trigger: rect,
23
+ panel: card,
24
+ position: prefer === "above" ? "tr" : "br",
25
+ gap,
26
+ viewport: { width: innerWidth, height: innerHeight }
27
+ }) : placeAnchoredPopover({
28
+ align,
29
+ prefer,
30
+ anchor: { left: rect.left, top: rect.top, width: rect.width, height: rect.height },
31
+ host: { left: 0, top: 0 },
32
+ card: { width: card.width, height: card.height },
33
+ bounds: { left: 0, top: 0, width: window.innerWidth, height: window.innerHeight },
34
+ gap
35
+ });
36
+ setPosition({ left: placed.left, top: placed.top });
37
+ };
38
+ measure();
39
+ const observer = typeof ResizeObserver === "undefined" ? null : new ResizeObserver(measure);
40
+ if (panel.current) observer == null ? void 0 : observer.observe(panel.current);
41
+ window.addEventListener("resize", measure);
42
+ window.addEventListener("scroll", measure, true);
43
+ return () => {
44
+ observer == null ? void 0 : observer.disconnect();
45
+ window.removeEventListener("resize", measure);
46
+ window.removeEventListener("scroll", measure, true);
47
+ };
48
+ }, [anchor, align, prefer, gap]);
49
+ if (!portal) return null;
50
+ return /* @__PURE__ */ jsx(LayerProvider, { layer, children: createPortal(/* @__PURE__ */ jsx(
51
+ "div",
52
+ {
53
+ ref: panel,
54
+ className: `w-popover w-popover--flush${className ? ` ${className}` : ""}`,
55
+ role,
56
+ "aria-label": label,
57
+ onKeyDown,
58
+ onPointerDown: (event) => event.stopPropagation(),
59
+ onWheel: (event) => event.stopPropagation(),
60
+ onContextMenu: (event) => event.stopPropagation(),
61
+ style: { position: "fixed", left: (position == null ? void 0 : position.left) ?? -9999, top: (position == null ? void 0 : position.top) ?? -9999 },
62
+ children
63
+ }
64
+ ), portal) });
65
+ }
66
+ export {
67
+ AnchoredPanel as A
68
+ };