@dxos/react-ui-editor 0.8.4-main.3c1ae3b → 0.8.4-main.3eb6e50203

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 (397) hide show
  1. package/dist/lib/browser/index.mjs +470 -8341
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +470 -8340
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/components/Editor/Editor.d.ts +8 -2
  8. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  9. package/dist/types/src/components/Editor/Editor.stories.d.ts +4 -1
  10. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  11. package/dist/types/src/components/EditorContent/EditorContent.d.ts +4 -2
  12. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +1 -1
  13. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +1 -1
  14. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -1
  15. package/dist/types/src/components/EditorMenuProvider/index.d.ts +0 -1
  16. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -1
  17. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -1
  18. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -1
  19. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +1 -2
  20. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -1
  21. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +1 -1
  23. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -1
  24. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +7 -5
  25. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  26. package/dist/types/src/components/EditorToolbar/actions.d.ts +8 -23
  27. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +1 -1
  28. package/dist/types/src/components/EditorToolbar/blocks.d.ts +6 -5
  29. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  30. package/dist/types/src/components/EditorToolbar/formatting.d.ts +6 -5
  31. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  32. package/dist/types/src/components/EditorToolbar/headings.d.ts +6 -5
  33. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  34. package/dist/types/src/components/EditorToolbar/image.d.ts +4 -11
  35. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  36. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  37. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  38. package/dist/types/src/components/EditorToolbar/search.d.ts +4 -11
  39. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  40. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +4 -4
  41. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -1
  42. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +7 -6
  43. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  44. package/dist/types/src/components/index.d.ts.map +1 -1
  45. package/dist/types/src/hooks/useTextEditor.d.ts +1 -1
  46. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  47. package/dist/types/src/index.d.ts +0 -8
  48. package/dist/types/src/index.d.ts.map +1 -1
  49. package/dist/types/src/{extensions/automerge/automerge.stories.d.ts → stories/Automerge.stories.d.ts} +5 -9
  50. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  51. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -1
  52. package/dist/types/src/stories/Comments.stories.d.ts +2 -2
  53. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  54. package/dist/types/src/stories/EditorToolbar.stories.d.ts +4 -4
  55. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  56. package/dist/types/src/stories/Experimental.stories.d.ts +2 -2
  57. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  58. package/dist/types/src/stories/Markdown.stories.d.ts +2 -2
  59. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  60. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  61. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  62. package/dist/types/src/stories/Preview.stories.d.ts +2 -2
  63. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  64. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  65. package/dist/types/src/stories/TextEditor.stories.d.ts +2 -2
  66. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  67. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  68. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  69. package/dist/types/src/stories/components/EditorStory.d.ts +6 -21
  70. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  71. package/dist/types/src/stories/components/util.d.ts +3 -3
  72. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  73. package/dist/types/src/translations.d.ts +5 -5
  74. package/dist/types/src/translations.d.ts.map +1 -1
  75. package/dist/types/src/util/index.d.ts +0 -5
  76. package/dist/types/src/util/index.d.ts.map +1 -1
  77. package/dist/types/src/util/react.d.ts +5 -1
  78. package/dist/types/src/util/react.d.ts.map +1 -1
  79. package/dist/types/tsconfig.tsbuildinfo +1 -1
  80. package/package.json +61 -63
  81. package/src/components/Editor/Editor.stories.tsx +14 -8
  82. package/src/components/Editor/Editor.tsx +20 -9
  83. package/src/components/EditorContent/EditorContent.tsx +19 -6
  84. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +9 -15
  85. package/src/components/EditorMenuProvider/index.ts +0 -1
  86. package/src/components/EditorMenuProvider/menu-presets.ts +2 -1
  87. package/src/components/EditorMenuProvider/menu.ts +1 -2
  88. package/src/components/EditorMenuProvider/popover.ts +1 -3
  89. package/src/components/EditorMenuProvider/useEditorMenu.ts +1 -3
  90. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +6 -9
  91. package/src/components/EditorToolbar/EditorToolbar.tsx +18 -15
  92. package/src/components/EditorToolbar/actions.ts +8 -7
  93. package/src/components/EditorToolbar/blocks.ts +3 -4
  94. package/src/components/EditorToolbar/formatting.ts +3 -4
  95. package/src/components/EditorToolbar/headings.ts +3 -3
  96. package/src/components/EditorToolbar/image.ts +8 -1
  97. package/src/components/EditorToolbar/index.ts +1 -1
  98. package/src/components/EditorToolbar/search.ts +8 -1
  99. package/src/components/EditorToolbar/useEditorToolbar.ts +6 -6
  100. package/src/components/EditorToolbar/view-mode.ts +3 -3
  101. package/src/components/index.ts +0 -2
  102. package/src/hooks/useTextEditor.ts +9 -3
  103. package/src/index.ts +0 -10
  104. package/src/stories/Automerge.stories.tsx +175 -0
  105. package/src/stories/CommandDialog.stories.tsx +4 -6
  106. package/src/stories/Comments.stories.tsx +44 -39
  107. package/src/stories/EditorToolbar.stories.tsx +28 -13
  108. package/src/stories/Experimental.stories.tsx +5 -7
  109. package/src/stories/Markdown.stories.tsx +15 -15
  110. package/src/stories/Outliner.stories.tsx +5 -6
  111. package/src/stories/Popover.stories.tsx +16 -20
  112. package/src/stories/Preview.stories.tsx +58 -52
  113. package/src/stories/Tags.stories.tsx +20 -11
  114. package/src/stories/TextEditor.stories.tsx +11 -12
  115. package/src/stories/Theme.stories.tsx +61 -0
  116. package/src/stories/components/EditorStory.tsx +14 -17
  117. package/src/stories/components/util.tsx +3 -3
  118. package/src/translations.ts +4 -4
  119. package/src/util/index.ts +1 -6
  120. package/src/util/react.tsx +6 -2
  121. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  122. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  123. package/dist/lib/browser/types/index.mjs +0 -13
  124. package/dist/lib/browser/types/index.mjs.map +0 -7
  125. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  126. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  127. package/dist/lib/node-esm/types/index.mjs +0 -14
  128. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  129. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +0 -26
  130. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +0 -1
  131. package/dist/types/src/components/EditorMenuProvider/util.d.ts +0 -8
  132. package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +0 -1
  133. package/dist/types/src/defaults.d.ts +0 -12
  134. package/dist/types/src/defaults.d.ts.map +0 -1
  135. package/dist/types/src/extensions/annotations.d.ts +0 -9
  136. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  137. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -17
  138. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  139. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  140. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  141. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  142. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  143. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  144. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  145. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  146. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  147. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  148. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  149. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  150. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  151. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  152. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  153. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  154. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  155. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  156. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  157. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  158. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  159. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  160. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  161. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  162. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  163. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  164. package/dist/types/src/extensions/autoscroll.d.ts +0 -20
  165. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  166. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  167. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  168. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  169. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  170. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  171. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  172. package/dist/types/src/extensions/blast.d.ts +0 -25
  173. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  174. package/dist/types/src/extensions/blocks.d.ts +0 -2
  175. package/dist/types/src/extensions/blocks.d.ts.map +0 -1
  176. package/dist/types/src/extensions/bookmarks.d.ts +0 -12
  177. package/dist/types/src/extensions/bookmarks.d.ts.map +0 -1
  178. package/dist/types/src/extensions/comments.d.ts +0 -95
  179. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  180. package/dist/types/src/extensions/debug.d.ts +0 -3
  181. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  182. package/dist/types/src/extensions/dnd.d.ts +0 -9
  183. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  184. package/dist/types/src/extensions/factories.d.ts +0 -82
  185. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  186. package/dist/types/src/extensions/focus.d.ts +0 -7
  187. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  188. package/dist/types/src/extensions/folding.d.ts +0 -7
  189. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  190. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  191. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  192. package/dist/types/src/extensions/index.d.ts +0 -32
  193. package/dist/types/src/extensions/index.d.ts.map +0 -1
  194. package/dist/types/src/extensions/json.d.ts +0 -7
  195. package/dist/types/src/extensions/json.d.ts.map +0 -1
  196. package/dist/types/src/extensions/listener.d.ts +0 -13
  197. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  198. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  199. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  200. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  201. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  202. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  203. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  204. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  205. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  206. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  207. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  208. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  209. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  210. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -61
  211. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  212. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  213. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  214. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  215. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  216. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  217. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  218. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  219. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  220. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  221. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  222. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  223. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  224. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  225. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  226. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  227. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  228. package/dist/types/src/extensions/mention.d.ts +0 -7
  229. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  230. package/dist/types/src/extensions/modal.d.ts +0 -7
  231. package/dist/types/src/extensions/modal.d.ts.map +0 -1
  232. package/dist/types/src/extensions/modes.d.ts +0 -10
  233. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  234. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  235. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  236. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  237. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  238. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  239. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  240. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  241. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  242. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  243. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  244. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  245. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  246. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  247. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  248. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  249. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  250. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  251. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  252. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  253. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  254. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  255. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  256. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  257. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  258. package/dist/types/src/extensions/replacer.d.ts +0 -21
  259. package/dist/types/src/extensions/replacer.d.ts.map +0 -1
  260. package/dist/types/src/extensions/replacer.test.d.ts +0 -2
  261. package/dist/types/src/extensions/replacer.test.d.ts.map +0 -1
  262. package/dist/types/src/extensions/scrolling.d.ts +0 -78
  263. package/dist/types/src/extensions/scrolling.d.ts.map +0 -1
  264. package/dist/types/src/extensions/selection.d.ts +0 -24
  265. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  266. package/dist/types/src/extensions/state.d.ts +0 -2
  267. package/dist/types/src/extensions/state.d.ts.map +0 -1
  268. package/dist/types/src/extensions/submit.d.ts +0 -10
  269. package/dist/types/src/extensions/submit.d.ts.map +0 -1
  270. package/dist/types/src/extensions/tab.d.ts +0 -4
  271. package/dist/types/src/extensions/tab.d.ts.map +0 -1
  272. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  273. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  274. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  275. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  276. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  277. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  278. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  279. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  280. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -97
  281. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  282. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  283. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  284. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  285. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  286. package/dist/types/src/styles/index.d.ts +0 -4
  287. package/dist/types/src/styles/index.d.ts.map +0 -1
  288. package/dist/types/src/styles/markdown.d.ts +0 -8
  289. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  290. package/dist/types/src/styles/theme.d.ts +0 -41
  291. package/dist/types/src/styles/theme.d.ts.map +0 -1
  292. package/dist/types/src/styles/tokens.d.ts +0 -3
  293. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  294. package/dist/types/src/types/index.d.ts +0 -2
  295. package/dist/types/src/types/index.d.ts.map +0 -1
  296. package/dist/types/src/types/types.d.ts +0 -21
  297. package/dist/types/src/types/types.d.ts.map +0 -1
  298. package/dist/types/src/util/cursor.d.ts +0 -31
  299. package/dist/types/src/util/cursor.d.ts.map +0 -1
  300. package/dist/types/src/util/debug.d.ts +0 -21
  301. package/dist/types/src/util/debug.d.ts.map +0 -1
  302. package/dist/types/src/util/decorations.d.ts +0 -4
  303. package/dist/types/src/util/decorations.d.ts.map +0 -1
  304. package/dist/types/src/util/dom.d.ts +0 -10
  305. package/dist/types/src/util/dom.d.ts.map +0 -1
  306. package/dist/types/src/util/facet.d.ts +0 -3
  307. package/dist/types/src/util/facet.d.ts.map +0 -1
  308. package/src/components/EditorContent/EditorContent.stories.tsx +0 -70
  309. package/src/components/EditorMenuProvider/util.ts +0 -31
  310. package/src/defaults.ts +0 -34
  311. package/src/extensions/annotations.ts +0 -55
  312. package/src/extensions/autocomplete/autocomplete.ts +0 -151
  313. package/src/extensions/autocomplete/index.ts +0 -8
  314. package/src/extensions/autocomplete/match.ts +0 -46
  315. package/src/extensions/autocomplete/placeholder.ts +0 -117
  316. package/src/extensions/autocomplete/typeahead.ts +0 -87
  317. package/src/extensions/automerge/automerge.stories.tsx +0 -150
  318. package/src/extensions/automerge/automerge.test.tsx +0 -78
  319. package/src/extensions/automerge/automerge.ts +0 -105
  320. package/src/extensions/automerge/cursor.ts +0 -28
  321. package/src/extensions/automerge/defs.ts +0 -31
  322. package/src/extensions/automerge/index.ts +0 -5
  323. package/src/extensions/automerge/sync.ts +0 -79
  324. package/src/extensions/automerge/update-automerge.ts +0 -50
  325. package/src/extensions/automerge/update-codemirror.ts +0 -115
  326. package/src/extensions/autoscroll.ts +0 -163
  327. package/src/extensions/awareness/awareness-provider.ts +0 -127
  328. package/src/extensions/awareness/awareness.ts +0 -315
  329. package/src/extensions/awareness/index.ts +0 -6
  330. package/src/extensions/blast.ts +0 -363
  331. package/src/extensions/blocks.ts +0 -131
  332. package/src/extensions/bookmarks.ts +0 -75
  333. package/src/extensions/comments.ts +0 -598
  334. package/src/extensions/debug.ts +0 -15
  335. package/src/extensions/dnd.ts +0 -37
  336. package/src/extensions/factories.ts +0 -277
  337. package/src/extensions/focus.ts +0 -36
  338. package/src/extensions/folding.tsx +0 -43
  339. package/src/extensions/hashtag.tsx +0 -68
  340. package/src/extensions/index.ts +0 -35
  341. package/src/extensions/json.ts +0 -57
  342. package/src/extensions/listener.ts +0 -32
  343. package/src/extensions/markdown/action.ts +0 -117
  344. package/src/extensions/markdown/bundle.ts +0 -105
  345. package/src/extensions/markdown/changes.test.ts +0 -26
  346. package/src/extensions/markdown/changes.ts +0 -149
  347. package/src/extensions/markdown/debug.ts +0 -44
  348. package/src/extensions/markdown/decorate.ts +0 -622
  349. package/src/extensions/markdown/formatting.test.ts +0 -498
  350. package/src/extensions/markdown/formatting.ts +0 -1265
  351. package/src/extensions/markdown/highlight.ts +0 -183
  352. package/src/extensions/markdown/image.ts +0 -118
  353. package/src/extensions/markdown/index.ts +0 -13
  354. package/src/extensions/markdown/link.ts +0 -50
  355. package/src/extensions/markdown/parser.test.ts +0 -75
  356. package/src/extensions/markdown/styles.ts +0 -135
  357. package/src/extensions/markdown/table.ts +0 -150
  358. package/src/extensions/mention.ts +0 -41
  359. package/src/extensions/modal.ts +0 -24
  360. package/src/extensions/modes.ts +0 -41
  361. package/src/extensions/outliner/commands.ts +0 -270
  362. package/src/extensions/outliner/editor.test.ts +0 -33
  363. package/src/extensions/outliner/editor.ts +0 -184
  364. package/src/extensions/outliner/index.ts +0 -7
  365. package/src/extensions/outliner/menu.ts +0 -128
  366. package/src/extensions/outliner/outliner.test.ts +0 -100
  367. package/src/extensions/outliner/outliner.ts +0 -167
  368. package/src/extensions/outliner/selection.ts +0 -50
  369. package/src/extensions/outliner/tree.test.ts +0 -168
  370. package/src/extensions/outliner/tree.ts +0 -317
  371. package/src/extensions/preview/index.ts +0 -5
  372. package/src/extensions/preview/preview.ts +0 -193
  373. package/src/extensions/replacer.test.ts +0 -75
  374. package/src/extensions/replacer.ts +0 -93
  375. package/src/extensions/scrolling.ts +0 -189
  376. package/src/extensions/selection.ts +0 -100
  377. package/src/extensions/state.ts +0 -7
  378. package/src/extensions/submit.ts +0 -62
  379. package/src/extensions/tab.ts +0 -29
  380. package/src/extensions/tags/extended-markdown.test.ts +0 -263
  381. package/src/extensions/tags/extended-markdown.ts +0 -78
  382. package/src/extensions/tags/index.ts +0 -7
  383. package/src/extensions/tags/streamer.ts +0 -243
  384. package/src/extensions/tags/xml-tags.ts +0 -500
  385. package/src/extensions/tags/xml-util.ts +0 -94
  386. package/src/extensions/typewriter.ts +0 -68
  387. package/src/styles/index.ts +0 -7
  388. package/src/styles/markdown.ts +0 -26
  389. package/src/styles/theme.ts +0 -285
  390. package/src/styles/tokens.ts +0 -17
  391. package/src/types/index.ts +0 -5
  392. package/src/types/types.ts +0 -32
  393. package/src/util/cursor.ts +0 -56
  394. package/src/util/debug.ts +0 -69
  395. package/src/util/decorations.ts +0 -21
  396. package/src/util/dom.ts +0 -34
  397. package/src/util/facet.ts +0 -13
@@ -1,150 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import '@preact/signals-react';
6
-
7
- import { Repo } from '@automerge/automerge-repo';
8
- import { BroadcastChannelNetworkAdapter } from '@automerge/automerge-repo-network-broadcastchannel';
9
- import { type Meta, type StoryObj } from '@storybook/react-vite';
10
- import React, { useEffect, useState } from 'react';
11
-
12
- import { Obj, Ref, Type } from '@dxos/echo';
13
- import { DocAccessor, createDocAccessor } from '@dxos/echo-db';
14
- import { Query, type Space, useQuery, useSpace } from '@dxos/react-client/echo';
15
- import { type Identity, useIdentity } from '@dxos/react-client/halo';
16
- import { type ClientRepeatedComponentProps, ClientRepeater } from '@dxos/react-client/testing';
17
- import { useThemeContext } from '@dxos/react-ui';
18
- import { withTheme } from '@dxos/react-ui/testing';
19
- import { render } from '@dxos/storybook-utils';
20
-
21
- import { editorSlots } from '../../defaults';
22
- import { useTextEditor } from '../../hooks';
23
- import { translations } from '../../translations';
24
- import { createBasicExtensions, createDataExtensions, createThemeExtensions } from '../factories';
25
-
26
- const initialContent = 'Hello world!';
27
-
28
- type TestObject = {
29
- text: string;
30
- };
31
-
32
- type EditorProps = {
33
- source: DocAccessor;
34
- autoFocus?: boolean;
35
- space?: Space;
36
- identity?: Identity;
37
- };
38
-
39
- const Editor = ({ source, autoFocus, space, identity }: EditorProps) => {
40
- const { themeMode } = useThemeContext();
41
- const { parentRef } = useTextEditor(
42
- () => ({
43
- initialValue: DocAccessor.getValue(source),
44
- extensions: [
45
- createBasicExtensions({ placeholder: 'Type here...', search: true }),
46
- createThemeExtensions({ themeMode, slots: editorSlots }),
47
- createDataExtensions({ id: 'test', text: source, messenger: space, identity }),
48
- ],
49
- autoFocus,
50
- }),
51
- [source, themeMode],
52
- );
53
-
54
- return <div ref={parentRef} className='flex is-full' />;
55
- };
56
-
57
- const DefaultStory = () => {
58
- const [object1, setObject1] = useState<DocAccessor<TestObject>>();
59
- const [object2, setObject2] = useState<DocAccessor<TestObject>>();
60
-
61
- useEffect(() => {
62
- queueMicrotask(async () => {
63
- const repo1 = new Repo({ network: [new BroadcastChannelNetworkAdapter()] });
64
- const repo2 = new Repo({ network: [new BroadcastChannelNetworkAdapter()] });
65
-
66
- const object1 = repo1.create<TestObject>();
67
- object1.change((doc: TestObject) => {
68
- doc.text = initialContent;
69
- });
70
-
71
- const object2 = await repo2.find<TestObject>(object1.url);
72
- await object2.whenReady();
73
-
74
- // TODO(mykola): Fix types.
75
- setObject1({ handle: object1 as any, path: ['text'] });
76
- setObject2({ handle: object2 as any, path: ['text'] });
77
- });
78
- }, []);
79
-
80
- if (!object1 || !object2) {
81
- return null;
82
- }
83
-
84
- return (
85
- <div role='none' className='grid grid-cols-2 bs-full is-full divide-x divide-neutral-500'>
86
- <Editor source={object1} autoFocus />
87
- <Editor source={object2} />
88
- </div>
89
- );
90
- };
91
-
92
- const EchoStory = ({ spaceKey }: ClientRepeatedComponentProps) => {
93
- const identity = useIdentity();
94
- const space = useSpace(spaceKey);
95
- const [source, setSource] = useState<DocAccessor>();
96
- const objects = useQuery(space, Query.type(Type.Expando, { type: 'test' }));
97
-
98
- useEffect(() => {
99
- const content = objects[0]?.content.target;
100
- if (!source && content) {
101
- const source = createDocAccessor(content, ['content']);
102
- setSource(source);
103
- }
104
- }, [objects, source]);
105
-
106
- if (!source) {
107
- return null;
108
- }
109
-
110
- return <Editor source={source} space={space} identity={identity ?? undefined} />;
111
- };
112
-
113
- const meta = {
114
- title: 'ui/react-ui-editor/Automerge',
115
- component: Editor as any,
116
- render: render(DefaultStory),
117
- decorators: [withTheme],
118
- parameters: {
119
- layout: 'fullscreen',
120
- translations,
121
- },
122
- } satisfies Meta<typeof DefaultStory>;
123
-
124
- export default meta;
125
-
126
- type Story = StoryObj<typeof meta>;
127
-
128
- export const Default: Story = {
129
- args: {},
130
- };
131
-
132
- export const WithEcho: Story = {
133
- render: () => {
134
- return (
135
- <ClientRepeater
136
- count={2}
137
- component={EchoStory}
138
- createSpace
139
- onCreateSpace={async ({ space }) => {
140
- space.db.add(
141
- Obj.make(Type.Expando, {
142
- type: 'test',
143
- content: Ref.make(Obj.make(Type.Expando, { content: initialContent })),
144
- }),
145
- );
146
- }}
147
- />
148
- );
149
- },
150
- };
@@ -1,78 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type DocHandle, Repo } from '@automerge/automerge-repo';
6
- import { EditorState } from '@codemirror/state';
7
- import { EditorView } from '@codemirror/view';
8
- import { render, screen } from '@testing-library/react';
9
- // TODO(wittjosiah): Move to vitest expect (and remove from package.json).
10
- import chai, { expect } from 'chai';
11
- import chaiDom from 'chai-dom';
12
- import React, { type FC, useEffect, useRef, useState } from 'react';
13
- import { describe, test } from 'vitest';
14
-
15
- import { get } from '@dxos/util';
16
-
17
- import { automerge } from './automerge';
18
-
19
- type TestObject = {
20
- text: string;
21
- };
22
-
23
- const path = ['text'];
24
-
25
- class Generator {
26
- constructor(private readonly _handle: DocHandle<TestObject>) {}
27
- update(text: string): void {
28
- this._handle.change((doc: TestObject) => {
29
- doc.text = text;
30
- });
31
- }
32
- }
33
-
34
- const Test: FC<{ handle: DocHandle<TestObject>; generator: Generator }> = ({ handle, generator }) => {
35
- const ref = useRef<HTMLDivElement>(null);
36
- const [view, setView] = useState<EditorView>();
37
- useEffect(() => {
38
- const extensions = [
39
- // TODO(mykola): Fix types.
40
- automerge({ handle: handle as any, path }),
41
- EditorView.updateListener.of((update) => {
42
- if (view.state.doc.toString() === 'hello!') {
43
- // Update editor.
44
- update.view.dispatch({ changes: { from: view.state.doc.length - 1, insert: ' world' } });
45
- }
46
- }),
47
- ];
48
-
49
- const view = new EditorView({
50
- state: EditorState.create({ doc: get(handle.doc()!, path), extensions }),
51
- parent: ref.current!,
52
- });
53
-
54
- setView(view);
55
- }, []);
56
-
57
- useEffect(() => {}, [view]);
58
-
59
- return <div ref={ref} />;
60
- };
61
-
62
- chai.use(chaiDom);
63
-
64
- describe('Automerge', () => {
65
- test('basic sync', () => {
66
- const repo = new Repo({ network: [] });
67
- const handle = repo.create<TestObject>();
68
- const generator = new Generator(handle);
69
- render(<Test handle={handle} generator={generator} />);
70
- expect(screen.getByRole('textbox')).to.have.text('');
71
-
72
- generator.update('hello!');
73
- expect(screen.getByRole('textbox')).to.have.text('hello world!');
74
- });
75
-
76
- // TODO(burdon): Test history/undo.
77
- // TODO(burdon): https://testing-library.com/docs/react-testing-library/example-intro/
78
- });
@@ -1,105 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- // Copyright 2024 Automerge
4
- // Ref: https://github.com/automerge/automerge-codemirror
5
- //
6
-
7
- import { next as A } from '@automerge/automerge';
8
- import { type Extension, StateField, Transaction } from '@codemirror/state';
9
- import { EditorView, ViewPlugin } from '@codemirror/view';
10
-
11
- import { DocAccessor } from '@dxos/echo-db';
12
-
13
- import { Cursor } from '../../util';
14
- import { initialSync } from '../state';
15
-
16
- import { cursorConverter } from './cursor';
17
- import { type State, isReconcile, updateHeadsEffect } from './defs';
18
- import { Syncer } from './sync';
19
-
20
- export const automerge = (accessor: DocAccessor): Extension => {
21
- const syncState = StateField.define<State>({
22
- create: () => {
23
- return {
24
- path: accessor.path.slice(),
25
- lastHeads: A.getHeads(accessor.handle.doc()!),
26
- unreconciledTransactions: [],
27
- };
28
- },
29
-
30
- update: (value, tr) => {
31
- const result: State = {
32
- path: accessor.path.slice(),
33
- lastHeads: value.lastHeads,
34
- unreconciledTransactions: value.unreconciledTransactions.slice(),
35
- };
36
-
37
- let clearUnreconciled = false;
38
- for (const effect of tr.effects) {
39
- if (effect.is(updateHeadsEffect)) {
40
- result.lastHeads = effect.value.newHeads;
41
- clearUnreconciled = true;
42
- }
43
- }
44
-
45
- if (clearUnreconciled) {
46
- result.unreconciledTransactions = [];
47
- } else {
48
- if (!isReconcile(tr)) {
49
- result.unreconciledTransactions.push(tr);
50
- }
51
- }
52
-
53
- return result;
54
- },
55
- });
56
-
57
- const syncer = new Syncer(accessor.handle, syncState);
58
-
59
- return [
60
- Cursor.converter.of(cursorConverter(accessor)),
61
-
62
- // Track heads.
63
- syncState,
64
-
65
- // Reconcile external updates.
66
- ViewPlugin.fromClass(
67
- class {
68
- constructor(private readonly _view: EditorView) {
69
- accessor.handle.addListener('change', this._handleChange);
70
-
71
- requestAnimationFrame(() => {
72
- const value = DocAccessor.getValue<string>(accessor);
73
- const current = this._view.state.doc.toString();
74
- if (value !== current) {
75
- // TODO(burdon): This attempts to set the initial state, but creates problems.
76
- // this._view.dispatch({
77
- // changes: { from: 0, to: this._view.state.doc.length, insert: value },
78
- // annotations: initialSync,
79
- // });
80
- }
81
- });
82
- }
83
-
84
- destroy() {
85
- accessor.handle.removeListener('change', this._handleChange);
86
- }
87
-
88
- readonly _handleChange = () => {
89
- syncer.reconcile(this._view, false);
90
- };
91
- },
92
- ),
93
-
94
- // Reconcile local updates.
95
- EditorView.updateListener.of(({ view, changes, transactions }) => {
96
- if (!changes.empty) {
97
- // Only reconcile if it's not an initial sync (to avoid loops)
98
- const isInitialSync = transactions.some((tr) => tr.annotation(Transaction.userEvent) === initialSync.value);
99
- if (!isInitialSync) {
100
- syncer.reconcile(view, true);
101
- }
102
- }
103
- }),
104
- ];
105
- };
@@ -1,28 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type DocAccessor, fromCursor, toCursor } from '@dxos/echo-db';
6
- import { log } from '@dxos/log';
7
-
8
- import { type CursorConverter } from '../../util';
9
-
10
- export const cursorConverter = (accessor: DocAccessor): CursorConverter => ({
11
- toCursor: (pos, assoc) => {
12
- try {
13
- return toCursor(accessor, pos, assoc);
14
- } catch (err) {
15
- log.catch(err);
16
- return ''; // In case of invalid request (e.g., wrong document).
17
- }
18
- },
19
-
20
- fromCursor: (cursor) => {
21
- try {
22
- return fromCursor(accessor, cursor);
23
- } catch (err) {
24
- log.catch(err);
25
- return 0; // In case of invalid request (e.g., wrong document).
26
- }
27
- },
28
- });
@@ -1,31 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- // Copyright 2024 Automerge
4
- // Ref: https://github.com/automerge/automerge-codemirror
5
- //
6
-
7
- import { type Heads, type Prop } from '@automerge/automerge';
8
- import { Annotation, type EditorState, StateEffect, type StateField, type Transaction } from '@codemirror/state';
9
-
10
- export type State = {
11
- path: Prop[];
12
- lastHeads: Heads;
13
- unreconciledTransactions: Transaction[];
14
- };
15
-
16
- export const getPath = (state: EditorState, field: StateField<State>): Prop[] => state.field(field).path;
17
- export const getLastHeads = (state: EditorState, field: StateField<State>): Heads => state.field(field).lastHeads;
18
-
19
- export type UpdateHeads = {
20
- newHeads: Heads;
21
- };
22
-
23
- export const updateHeadsEffect = StateEffect.define<UpdateHeads>({});
24
-
25
- export const updateHeads = (newHeads: Heads): StateEffect<UpdateHeads> => updateHeadsEffect.of({ newHeads });
26
-
27
- export const reconcileAnnotation = Annotation.define<boolean>();
28
-
29
- export const isReconcile = (tr: Transaction): boolean => {
30
- return !!tr.annotation(reconcileAnnotation);
31
- };
@@ -1,5 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export { automerge } from './automerge';
@@ -1,79 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- // Copyright 2024 Automerge
4
- // Ref: https://github.com/automerge/automerge-codemirror
5
- //
6
-
7
- import { next as A } from '@automerge/automerge';
8
- import { type StateField } from '@codemirror/state';
9
- import { type EditorView } from '@codemirror/view';
10
-
11
- import { type IDocHandle } from '@dxos/echo-db';
12
- import { log } from '@dxos/log';
13
-
14
- import { type State, getLastHeads, getPath, isReconcile, reconcileAnnotation, updateHeads } from './defs';
15
- import { updateAutomerge } from './update-automerge';
16
- import { updateCodeMirror } from './update-codemirror';
17
-
18
- /**
19
- * Implements three-way merge (on each mutation).
20
- */
21
- export class Syncer {
22
- private _pending = false;
23
-
24
- // prettier-ignore
25
- constructor(
26
- private readonly _handle: IDocHandle,
27
- private readonly _state: StateField<State>
28
- ) {}
29
-
30
- reconcile(view: EditorView, editor: boolean): void {
31
- if (this._pending) {
32
- return;
33
- }
34
-
35
- this._pending = true;
36
- if (editor) {
37
- this.onEditorChange(view);
38
- } else {
39
- this.onAutomergeChange(view);
40
- }
41
- this._pending = false;
42
- }
43
-
44
- private onEditorChange(view: EditorView): void {
45
- log('onEditorChange');
46
-
47
- // Apply the unreconciled transactions to the document.
48
- const transactions = view.state.field(this._state).unreconciledTransactions.filter((tx) => !isReconcile(tx));
49
- const newHeads = updateAutomerge(this._state, this._handle, transactions, view.state);
50
-
51
- if (newHeads) {
52
- view.dispatch({
53
- effects: updateHeads(newHeads),
54
- annotations: reconcileAnnotation.of(false),
55
- });
56
- }
57
- }
58
-
59
- private onAutomergeChange(view: EditorView): void {
60
- log('onAutomergeChange');
61
-
62
- // Get the diff between the updated state of the document and the heads and apply that to the codemirror doc.
63
- const oldHeads = getLastHeads(view.state, this._state);
64
- const newHeads = A.getHeads(this._handle.doc()!);
65
- const diff = A.equals(oldHeads, newHeads) ? [] : A.diff(this._handle.doc()!, oldHeads, newHeads);
66
-
67
- const selection = view.state.selection;
68
- const path = getPath(view.state, this._state);
69
- updateCodeMirror(view, selection, path, diff);
70
-
71
- // TODO(burdon): Test conflicts?
72
- // A.getConflicts(this._handle.doc()!, path[0]);
73
-
74
- view.dispatch({
75
- effects: updateHeads(newHeads),
76
- annotations: reconcileAnnotation.of(false),
77
- });
78
- }
79
- }
@@ -1,50 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- // Copyright 2024 Automerge
4
- // Ref: https://github.com/automerge/automerge-codemirror
5
- //
6
-
7
- import { next as A, type Heads } from '@automerge/automerge';
8
- import { type EditorState, type StateField, type Text, type Transaction } from '@codemirror/state';
9
-
10
- import { type IDocHandle } from '@dxos/echo-db';
11
-
12
- import { type State } from './defs';
13
-
14
- export const updateAutomerge = (
15
- field: StateField<State>,
16
- handle: IDocHandle,
17
- transactions: Transaction[],
18
- state: EditorState, // TODO(burdon): Just pass in the state field value?
19
- ): Heads | undefined => {
20
- const { lastHeads, path } = state.field(field);
21
-
22
- // We don't want to call `automerge.updateAt` if there are no changes.
23
- // Otherwise, later on `automerge.diff` will return empty patches that result in a no-op but still mess up the selection.
24
- let hasChanges = false;
25
- for (const tr of transactions) {
26
- tr.changes.iterChanges(() => {
27
- hasChanges = true;
28
- });
29
- }
30
-
31
- if (!hasChanges) {
32
- return undefined;
33
- }
34
-
35
- const newHeads = handle.changeAt(lastHeads, (doc: A.Doc<unknown>) => {
36
- const invertedTransactions: { from: number; del: number; insert: Text }[] = [];
37
- for (const tr of transactions) {
38
- tr.changes.iterChanges((fromA, toA, _fromB, _toB, insert) => {
39
- invertedTransactions.push({ from: fromA, del: toA - fromA, insert });
40
- });
41
- }
42
-
43
- // TODO(burdon): Hack to apply in reverse order to properly apply range.
44
- invertedTransactions.reverse().forEach(({ from, del, insert }) => {
45
- A.splice(doc, path.slice(), from, del, insert.toString());
46
- });
47
- });
48
-
49
- return newHeads ?? undefined;
50
- };
@@ -1,115 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- // Copyright 2024 Automerge
4
- // Ref: https://github.com/automerge/automerge-codemirror
5
- //
6
-
7
- import {
8
- type DelPatch,
9
- type InsertPatch,
10
- type Patch,
11
- type Prop,
12
- type PutPatch,
13
- type SpliceTextPatch,
14
- } from '@automerge/automerge';
15
- import { ChangeSet, type ChangeSpec, type EditorSelection, type EditorState } from '@codemirror/state';
16
- import { type EditorView } from '@codemirror/view';
17
-
18
- import { reconcileAnnotation } from './defs';
19
-
20
- export const updateCodeMirror = (view: EditorView, selection: EditorSelection, target: Prop[], patches: Patch[]) => {
21
- for (const patch of patches) {
22
- const changeSpec = handlePatch(patch, target, view.state);
23
- if (changeSpec != null) {
24
- const changeSet = ChangeSet.of(changeSpec, view.state.doc.length, '\n');
25
- selection = selection.map(changeSet, 1);
26
- view.dispatch({
27
- changes: changeSet,
28
- annotations: reconcileAnnotation.of(false),
29
- });
30
- }
31
- }
32
-
33
- view.dispatch({
34
- selection,
35
- annotations: reconcileAnnotation.of(false),
36
- });
37
- };
38
-
39
- const handlePatch = (patch: Patch, target: Prop[], state: EditorState): ChangeSpec | null => {
40
- if (patch.action === 'insert') {
41
- return handleInsert(target, patch);
42
- } else if (patch.action === 'splice') {
43
- return handleSplice(target, patch);
44
- } else if (patch.action === 'del') {
45
- return handleDel(target, patch);
46
- } else if (patch.action === 'put') {
47
- return handlePut(target, patch, state);
48
- } else {
49
- return null;
50
- }
51
- };
52
-
53
- const handleInsert = (target: Prop[], patch: InsertPatch): Array<ChangeSpec> => {
54
- const index = charPath(target, patch.path);
55
- if (index == null) {
56
- return [];
57
- }
58
-
59
- const text = patch.values.map((value) => (value ? value.toString() : '')).join('');
60
- return [{ from: index, to: index, insert: text }];
61
- };
62
-
63
- const handleSplice = (target: Prop[], patch: SpliceTextPatch): Array<ChangeSpec> => {
64
- const index = charPath(target, patch.path);
65
- if (index == null) {
66
- return [];
67
- }
68
-
69
- return [{ from: index, insert: patch.value }];
70
- };
71
-
72
- const handleDel = (target: Prop[], patch: DelPatch): Array<ChangeSpec> => {
73
- const index = charPath(target, patch.path);
74
- if (index == null) {
75
- return [];
76
- }
77
-
78
- const length = patch.length || 1;
79
- return [{ from: index, to: index + length }];
80
- };
81
-
82
- const handlePut = (target: Prop[], patch: PutPatch, state: EditorState): Array<ChangeSpec> => {
83
- const index = charPath(target, [...patch.path, 0]);
84
- if (index == null) {
85
- return [];
86
- }
87
-
88
- const length = state.doc.length;
89
- if (typeof patch.value !== 'string') {
90
- return []; // TODO(dmaretskyi): How to handle non-string values?
91
- }
92
-
93
- return [{ from: 0, to: length, insert: patch.value as any }];
94
- };
95
-
96
- // If the path of the patch is of the form [path, <index>] then we know this is a path to a character
97
- // within the sequence given by path.
98
- const charPath = (textPath: Prop[], candidatePath: Prop[]): number | null => {
99
- if (candidatePath.length !== textPath.length + 1) {
100
- return null;
101
- }
102
-
103
- for (let i = 0; i < textPath.length; i++) {
104
- if (textPath[i] !== candidatePath[i]) {
105
- return null;
106
- }
107
- }
108
-
109
- const index = candidatePath[candidatePath.length - 1];
110
- if (typeof index === 'number') {
111
- return index;
112
- }
113
-
114
- return null;
115
- };