@dxos/react-ui-editor 0.8.4-main.1da679c → 0.8.4-main.21d9917

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 (426) hide show
  1. package/dist/lib/browser/index.mjs +1171 -8426
  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 +1171 -8425
  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 +43 -15
  8. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  9. package/dist/types/src/components/Editor/Editor.stories.d.ts +23 -0
  10. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  11. package/dist/types/src/components/EditorContent/EditorContent.d.ts +31 -0
  12. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +1 -0
  13. package/dist/types/src/components/EditorContent/controller.d.ts +10 -0
  14. package/dist/types/src/components/EditorContent/controller.d.ts.map +1 -0
  15. package/dist/types/src/components/EditorContent/index.d.ts +3 -0
  16. package/dist/types/src/components/EditorContent/index.d.ts.map +1 -0
  17. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +36 -0
  18. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  20. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  22. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  24. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +46 -0
  26. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  28. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  30. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  32. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  34. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  35. package/dist/types/src/components/EditorToolbar/actions.d.ts +24 -0
  36. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +1 -0
  37. package/dist/types/src/components/EditorToolbar/blocks.d.ts +8 -7
  38. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/formatting.d.ts +8 -7
  40. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/headings.d.ts +8 -7
  42. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/image.d.ts +4 -11
  44. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/index.d.ts +2 -1
  46. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/search.d.ts +4 -11
  48. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +11 -0
  50. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -0
  51. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +9 -8
  52. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  53. package/dist/types/src/components/index.d.ts +4 -2
  54. package/dist/types/src/components/index.d.ts.map +1 -1
  55. package/dist/types/src/hooks/useTextEditor.d.ts +6 -10
  56. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  57. package/dist/types/src/index.d.ts +0 -8
  58. package/dist/types/src/index.d.ts.map +1 -1
  59. package/dist/types/src/{extensions/automerge/automerge.stories.d.ts → stories/Automerge.stories.d.ts} +6 -10
  60. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  61. package/dist/types/src/stories/{Command.stories.d.ts → CommandDialog.stories.d.ts} +2 -3
  62. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -0
  63. package/dist/types/src/stories/Comments.stories.d.ts +4 -4
  64. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  65. package/dist/types/src/stories/EditorToolbar.stories.d.ts +5 -6
  66. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  67. package/dist/types/src/stories/Experimental.stories.d.ts +4 -4
  68. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  69. package/dist/types/src/stories/Markdown.stories.d.ts +4 -4
  70. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  71. package/dist/types/src/stories/Outliner.stories.d.ts +0 -1
  72. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  73. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -6
  74. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  75. package/dist/types/src/stories/Preview.stories.d.ts +5 -4
  76. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/Tags.stories.d.ts +0 -1
  78. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -5
  80. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  82. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  83. package/dist/types/src/stories/components/EditorStory.d.ts +10 -19
  84. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  85. package/dist/types/src/stories/components/util.d.ts +3 -3
  86. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  87. package/dist/types/src/translations.d.ts +5 -5
  88. package/dist/types/src/translations.d.ts.map +1 -1
  89. package/dist/types/src/util/index.d.ts +0 -6
  90. package/dist/types/src/util/index.d.ts.map +1 -1
  91. package/dist/types/src/util/react.d.ts +5 -1
  92. package/dist/types/src/util/react.d.ts.map +1 -1
  93. package/dist/types/tsconfig.tsbuildinfo +1 -1
  94. package/package.json +70 -73
  95. package/src/components/Editor/Editor.stories.tsx +95 -0
  96. package/src/components/Editor/Editor.tsx +164 -24
  97. package/src/components/EditorContent/EditorContent.tsx +83 -0
  98. package/src/components/EditorContent/controller.ts +50 -0
  99. package/src/components/EditorContent/index.ts +6 -0
  100. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +233 -0
  101. package/src/components/EditorMenuProvider/index.ts +10 -0
  102. package/src/components/EditorMenuProvider/menu-presets.ts +124 -0
  103. package/src/components/EditorMenuProvider/menu.ts +70 -0
  104. package/src/components/EditorMenuProvider/popover.ts +285 -0
  105. package/src/components/EditorMenuProvider/useEditorMenu.ts +173 -0
  106. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +81 -0
  107. package/src/components/EditorPreviewProvider/index.ts +5 -0
  108. package/src/components/EditorToolbar/EditorToolbar.tsx +105 -91
  109. package/src/components/EditorToolbar/{lists.ts → actions.ts} +48 -17
  110. package/src/components/EditorToolbar/blocks.ts +5 -5
  111. package/src/components/EditorToolbar/formatting.ts +5 -5
  112. package/src/components/EditorToolbar/headings.ts +11 -8
  113. package/src/components/EditorToolbar/image.ts +9 -2
  114. package/src/components/EditorToolbar/index.ts +3 -7
  115. package/src/components/EditorToolbar/search.ts +9 -2
  116. package/src/components/EditorToolbar/useEditorToolbar.ts +20 -0
  117. package/src/components/EditorToolbar/view-mode.ts +5 -4
  118. package/src/components/index.ts +6 -2
  119. package/src/hooks/useTextEditor.ts +39 -33
  120. package/src/index.ts +0 -10
  121. package/src/stories/Automerge.stories.tsx +175 -0
  122. package/src/stories/{Command.stories.tsx → CommandDialog.stories.tsx} +21 -30
  123. package/src/stories/Comments.stories.tsx +51 -47
  124. package/src/stories/EditorToolbar.stories.tsx +39 -23
  125. package/src/stories/Experimental.stories.tsx +10 -12
  126. package/src/stories/Markdown.stories.tsx +19 -19
  127. package/src/stories/Outliner.stories.tsx +23 -24
  128. package/src/stories/Popover.stories.tsx +158 -0
  129. package/src/stories/Preview.stories.tsx +94 -85
  130. package/src/stories/Tags.stories.tsx +37 -14
  131. package/src/stories/TextEditor.stories.tsx +20 -51
  132. package/src/stories/Theme.stories.tsx +61 -0
  133. package/src/stories/components/EditorStory.tsx +36 -27
  134. package/src/stories/components/util.tsx +43 -11
  135. package/src/translations.ts +4 -4
  136. package/src/util/index.ts +1 -7
  137. package/src/util/react.tsx +6 -2
  138. package/dist/lib/browser/chunk-22UMM3QJ.mjs +0 -22
  139. package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +0 -7
  140. package/dist/lib/browser/testing/index.mjs +0 -76
  141. package/dist/lib/browser/testing/index.mjs.map +0 -7
  142. package/dist/lib/browser/types/index.mjs +0 -13
  143. package/dist/lib/browser/types/index.mjs.map +0 -7
  144. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs +0 -24
  145. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +0 -7
  146. package/dist/lib/node-esm/testing/index.mjs +0 -78
  147. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  148. package/dist/lib/node-esm/types/index.mjs +0 -14
  149. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  150. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts +0 -38
  151. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts.map +0 -1
  152. package/dist/types/src/components/CommandMenu/index.d.ts +0 -2
  153. package/dist/types/src/components/CommandMenu/index.d.ts.map +0 -1
  154. package/dist/types/src/components/EditorToolbar/lists.d.ts +0 -19
  155. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +0 -1
  156. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  157. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  158. package/dist/types/src/defaults.d.ts +0 -14
  159. package/dist/types/src/defaults.d.ts.map +0 -1
  160. package/dist/types/src/extensions/annotations.d.ts +0 -9
  161. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  162. package/dist/types/src/extensions/autocomplete.d.ts +0 -26
  163. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  164. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  165. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  166. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  167. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  168. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  169. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  170. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  171. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  172. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  173. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  174. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  175. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  176. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  177. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  178. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  179. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  180. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  181. package/dist/types/src/extensions/autoscroll.d.ts +0 -10
  182. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  183. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  184. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  185. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  186. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  187. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  188. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  189. package/dist/types/src/extensions/blast.d.ts +0 -25
  190. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  191. package/dist/types/src/extensions/command/action.d.ts +0 -17
  192. package/dist/types/src/extensions/command/action.d.ts.map +0 -1
  193. package/dist/types/src/extensions/command/command-menu.d.ts +0 -20
  194. package/dist/types/src/extensions/command/command-menu.d.ts.map +0 -1
  195. package/dist/types/src/extensions/command/command.d.ts +0 -6
  196. package/dist/types/src/extensions/command/command.d.ts.map +0 -1
  197. package/dist/types/src/extensions/command/floating-menu.d.ts +0 -7
  198. package/dist/types/src/extensions/command/floating-menu.d.ts.map +0 -1
  199. package/dist/types/src/extensions/command/hint.d.ts +0 -19
  200. package/dist/types/src/extensions/command/hint.d.ts.map +0 -1
  201. package/dist/types/src/extensions/command/index.d.ts +0 -7
  202. package/dist/types/src/extensions/command/index.d.ts.map +0 -1
  203. package/dist/types/src/extensions/command/placeholder.d.ts +0 -10
  204. package/dist/types/src/extensions/command/placeholder.d.ts.map +0 -1
  205. package/dist/types/src/extensions/command/state.d.ts +0 -16
  206. package/dist/types/src/extensions/command/state.d.ts.map +0 -1
  207. package/dist/types/src/extensions/command/typeahead.d.ts +0 -22
  208. package/dist/types/src/extensions/command/typeahead.d.ts.map +0 -1
  209. package/dist/types/src/extensions/command/useCommandMenu.d.ts +0 -25
  210. package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +0 -1
  211. package/dist/types/src/extensions/comments.d.ts +0 -95
  212. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  213. package/dist/types/src/extensions/debug.d.ts +0 -3
  214. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  215. package/dist/types/src/extensions/dnd.d.ts +0 -9
  216. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  217. package/dist/types/src/extensions/factories.d.ts +0 -78
  218. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  219. package/dist/types/src/extensions/focus.d.ts +0 -7
  220. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  221. package/dist/types/src/extensions/folding.d.ts +0 -7
  222. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  223. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  224. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  225. package/dist/types/src/extensions/index.d.ts +0 -25
  226. package/dist/types/src/extensions/index.d.ts.map +0 -1
  227. package/dist/types/src/extensions/json.d.ts +0 -7
  228. package/dist/types/src/extensions/json.d.ts.map +0 -1
  229. package/dist/types/src/extensions/listener.d.ts +0 -11
  230. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  231. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  232. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  233. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  234. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  235. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  236. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  237. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  238. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  239. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  240. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  241. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  242. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  243. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  244. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  245. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  246. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  247. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  248. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  249. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  250. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  251. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  252. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  253. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  254. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  255. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  256. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  257. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  258. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  259. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  260. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  261. package/dist/types/src/extensions/mention.d.ts +0 -7
  262. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  263. package/dist/types/src/extensions/modes.d.ts +0 -10
  264. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  265. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  266. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  267. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  268. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  269. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  270. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  271. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  272. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  273. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  274. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  275. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  276. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  277. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  278. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  279. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  280. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  281. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  282. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  283. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  284. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  285. package/dist/types/src/extensions/preview/preview.d.ts +0 -29
  286. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  287. package/dist/types/src/extensions/selection.d.ts +0 -24
  288. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  289. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  290. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  291. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  292. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  293. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  294. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  295. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  296. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  297. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -71
  298. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  299. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  300. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  301. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  302. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  303. package/dist/types/src/stories/Command.stories.d.ts.map +0 -1
  304. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  305. package/dist/types/src/styles/index.d.ts +0 -4
  306. package/dist/types/src/styles/index.d.ts.map +0 -1
  307. package/dist/types/src/styles/markdown.d.ts +0 -8
  308. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  309. package/dist/types/src/styles/theme.d.ts +0 -38
  310. package/dist/types/src/styles/theme.d.ts.map +0 -1
  311. package/dist/types/src/styles/tokens.d.ts +0 -3
  312. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  313. package/dist/types/src/testing/PreviewPopover.d.ts +0 -20
  314. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  315. package/dist/types/src/testing/index.d.ts +0 -3
  316. package/dist/types/src/testing/index.d.ts.map +0 -1
  317. package/dist/types/src/testing/util.d.ts +0 -3
  318. package/dist/types/src/testing/util.d.ts.map +0 -1
  319. package/dist/types/src/types/index.d.ts +0 -2
  320. package/dist/types/src/types/index.d.ts.map +0 -1
  321. package/dist/types/src/types/types.d.ts +0 -21
  322. package/dist/types/src/types/types.d.ts.map +0 -1
  323. package/dist/types/src/util/cursor.d.ts +0 -31
  324. package/dist/types/src/util/cursor.d.ts.map +0 -1
  325. package/dist/types/src/util/debug.d.ts +0 -17
  326. package/dist/types/src/util/debug.d.ts.map +0 -1
  327. package/dist/types/src/util/decorations.d.ts +0 -4
  328. package/dist/types/src/util/decorations.d.ts.map +0 -1
  329. package/dist/types/src/util/dom.d.ts +0 -10
  330. package/dist/types/src/util/dom.d.ts.map +0 -1
  331. package/dist/types/src/util/domino.d.ts +0 -18
  332. package/dist/types/src/util/domino.d.ts.map +0 -1
  333. package/dist/types/src/util/facet.d.ts +0 -3
  334. package/dist/types/src/util/facet.d.ts.map +0 -1
  335. package/src/components/CommandMenu/CommandMenu.tsx +0 -346
  336. package/src/components/CommandMenu/index.ts +0 -5
  337. package/src/components/EditorToolbar/util.ts +0 -76
  338. package/src/defaults.ts +0 -52
  339. package/src/extensions/annotations.ts +0 -55
  340. package/src/extensions/autocomplete.ts +0 -219
  341. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  342. package/src/extensions/automerge/automerge.test.tsx +0 -78
  343. package/src/extensions/automerge/automerge.ts +0 -86
  344. package/src/extensions/automerge/cursor.ts +0 -28
  345. package/src/extensions/automerge/defs.ts +0 -31
  346. package/src/extensions/automerge/index.ts +0 -5
  347. package/src/extensions/automerge/sync.ts +0 -75
  348. package/src/extensions/automerge/update-automerge.ts +0 -50
  349. package/src/extensions/automerge/update-codemirror.ts +0 -115
  350. package/src/extensions/autoscroll.ts +0 -157
  351. package/src/extensions/awareness/awareness-provider.ts +0 -127
  352. package/src/extensions/awareness/awareness.ts +0 -315
  353. package/src/extensions/awareness/index.ts +0 -6
  354. package/src/extensions/blast.ts +0 -363
  355. package/src/extensions/command/action.ts +0 -55
  356. package/src/extensions/command/command-menu.ts +0 -211
  357. package/src/extensions/command/command.ts +0 -34
  358. package/src/extensions/command/floating-menu.ts +0 -128
  359. package/src/extensions/command/hint.ts +0 -103
  360. package/src/extensions/command/index.ts +0 -10
  361. package/src/extensions/command/placeholder.ts +0 -113
  362. package/src/extensions/command/state.ts +0 -90
  363. package/src/extensions/command/typeahead.ts +0 -129
  364. package/src/extensions/command/useCommandMenu.ts +0 -115
  365. package/src/extensions/comments.ts +0 -597
  366. package/src/extensions/debug.ts +0 -15
  367. package/src/extensions/dnd.ts +0 -37
  368. package/src/extensions/factories.ts +0 -247
  369. package/src/extensions/focus.ts +0 -35
  370. package/src/extensions/folding.tsx +0 -46
  371. package/src/extensions/hashtag.tsx +0 -68
  372. package/src/extensions/index.ts +0 -28
  373. package/src/extensions/json.ts +0 -57
  374. package/src/extensions/listener.ts +0 -38
  375. package/src/extensions/markdown/action.ts +0 -117
  376. package/src/extensions/markdown/bundle.ts +0 -93
  377. package/src/extensions/markdown/changes.test.ts +0 -26
  378. package/src/extensions/markdown/changes.ts +0 -149
  379. package/src/extensions/markdown/debug.ts +0 -44
  380. package/src/extensions/markdown/decorate.ts +0 -600
  381. package/src/extensions/markdown/formatting.test.ts +0 -498
  382. package/src/extensions/markdown/formatting.ts +0 -1267
  383. package/src/extensions/markdown/highlight.ts +0 -183
  384. package/src/extensions/markdown/image.ts +0 -118
  385. package/src/extensions/markdown/index.ts +0 -13
  386. package/src/extensions/markdown/link.ts +0 -50
  387. package/src/extensions/markdown/parser.test.ts +0 -75
  388. package/src/extensions/markdown/styles.ts +0 -135
  389. package/src/extensions/markdown/table.ts +0 -150
  390. package/src/extensions/mention.ts +0 -41
  391. package/src/extensions/modes.ts +0 -41
  392. package/src/extensions/outliner/commands.ts +0 -270
  393. package/src/extensions/outliner/editor.test.ts +0 -33
  394. package/src/extensions/outliner/editor.ts +0 -184
  395. package/src/extensions/outliner/index.ts +0 -7
  396. package/src/extensions/outliner/outliner.test.ts +0 -100
  397. package/src/extensions/outliner/outliner.ts +0 -167
  398. package/src/extensions/outliner/selection.ts +0 -50
  399. package/src/extensions/outliner/tree.test.ts +0 -168
  400. package/src/extensions/outliner/tree.ts +0 -317
  401. package/src/extensions/preview/index.ts +0 -5
  402. package/src/extensions/preview/preview.ts +0 -190
  403. package/src/extensions/selection.ts +0 -100
  404. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  405. package/src/extensions/tags/extended-markdown.ts +0 -78
  406. package/src/extensions/tags/index.ts +0 -7
  407. package/src/extensions/tags/streamer.ts +0 -244
  408. package/src/extensions/tags/xml-tags.ts +0 -335
  409. package/src/extensions/tags/xml-util.ts +0 -94
  410. package/src/extensions/typewriter.ts +0 -68
  411. package/src/stories/CommandMenu.stories.tsx +0 -158
  412. package/src/styles/index.ts +0 -7
  413. package/src/styles/markdown.ts +0 -26
  414. package/src/styles/theme.ts +0 -267
  415. package/src/styles/tokens.ts +0 -17
  416. package/src/testing/PreviewPopover.tsx +0 -78
  417. package/src/testing/index.ts +0 -6
  418. package/src/testing/util.ts +0 -7
  419. package/src/types/index.ts +0 -5
  420. package/src/types/types.ts +0 -32
  421. package/src/util/cursor.ts +0 -56
  422. package/src/util/debug.ts +0 -64
  423. package/src/util/decorations.ts +0 -21
  424. package/src/util/dom.ts +0 -34
  425. package/src/util/domino.ts +0 -51
  426. package/src/util/facet.ts +0 -13
@@ -1,219 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type Extension, Prec } from '@codemirror/state';
6
- import {
7
- Decoration,
8
- type DecorationSet,
9
- EditorView,
10
- ViewPlugin,
11
- type ViewUpdate,
12
- WidgetType,
13
- keymap,
14
- } from '@codemirror/view';
15
-
16
- export type AutocompleteOptions = {
17
- fireIfEmpty?: boolean;
18
-
19
- /**
20
- * Callback triggered when Enter is pressed.
21
- * @param text The current text in the editor
22
- * @returns true if the editor should reset the document.
23
- */
24
- onSubmit?: (text: string) => boolean | void;
25
-
26
- /**
27
- * Function that returns a list of suggestions based on the current text.
28
- * @param text The current text before the cursor
29
- * @returns Array of suggestion strings
30
- */
31
- onSuggest?: (text: string) => string[];
32
-
33
- /**
34
- * ESC pressed.
35
- */
36
- onCancel?: () => void;
37
- };
38
-
39
- /**
40
- * Creates an autocomplete extension that shows inline suggestions.
41
- * Pressing Tab will complete the suggestion.
42
- */
43
- export const autocomplete = ({ fireIfEmpty, onSubmit, onSuggest, onCancel }: AutocompleteOptions): Extension => {
44
- const suggest = ViewPlugin.fromClass(
45
- class {
46
- _decorations: DecorationSet;
47
- _currentSuggestion: string | null = null;
48
-
49
- constructor(view: EditorView) {
50
- this._decorations = this.computeDecorations(view);
51
- }
52
-
53
- update(update: ViewUpdate) {
54
- if (update.docChanged || update.selectionSet) {
55
- this._decorations = this.computeDecorations(update.view);
56
- }
57
- }
58
-
59
- private computeDecorations(view: EditorView): DecorationSet {
60
- const text = view.state.doc.toString();
61
- const suggestions = onSuggest?.(text) ?? [];
62
- if (!suggestions.length) {
63
- this._currentSuggestion = null;
64
- return Decoration.none;
65
- }
66
-
67
- // Get the first suggestion.
68
- this._currentSuggestion = suggestions[0];
69
- const suffix = this._currentSuggestion.slice(text.length);
70
- if (!suffix) {
71
- return Decoration.none;
72
- }
73
-
74
- // Always show ghost text at the end of the document.
75
- return Decoration.set([
76
- Decoration.widget({
77
- widget: new InlineSuggestionWidget(suffix),
78
- side: 1,
79
- }).range(view.state.doc.length),
80
- ]);
81
- }
82
-
83
- completeSuggestion(view: EditorView): boolean {
84
- if (!this._currentSuggestion) {
85
- return false;
86
- }
87
-
88
- const text = view.state.doc.toString();
89
- const suffix = this._currentSuggestion.slice(text.length);
90
- if (!suffix) {
91
- return false;
92
- }
93
-
94
- view.dispatch({
95
- changes: {
96
- from: view.state.doc.length,
97
- insert: suffix,
98
- },
99
- selection: {
100
- anchor: view.state.doc.length + suffix.length,
101
- },
102
- });
103
-
104
- return true;
105
- }
106
- },
107
- {
108
- decorations: (v) => v._decorations,
109
- },
110
- );
111
-
112
- return [
113
- suggest,
114
- EditorView.theme({
115
- '.cm-inline-suggestion': {
116
- opacity: 0.4,
117
- },
118
- }),
119
-
120
- Prec.highest(
121
- keymap.of([
122
- {
123
- key: 'Tab',
124
- preventDefault: true,
125
- run: (view) => {
126
- const plugin = view.plugin(suggest);
127
- return plugin?.completeSuggestion(view) ?? false;
128
- },
129
- },
130
- {
131
- key: 'ArrowRight',
132
- preventDefault: true,
133
- run: (view) => {
134
- // Only complete if cursor is at the end
135
- if (view.state.selection.main.head !== view.state.doc.length) {
136
- return false;
137
- }
138
-
139
- const plugin = view.plugin(suggest);
140
- return plugin?.completeSuggestion(view) ?? false;
141
- },
142
- },
143
- {
144
- key: 'Enter',
145
- preventDefault: true,
146
- run: (view) => {
147
- const text = view.state.doc.toString().trim();
148
- if (onSubmit && (fireIfEmpty || text.length > 0)) {
149
- const reset = onSubmit(text);
150
-
151
- // Clear the document after calling onEnter.
152
- if (reset) {
153
- view.dispatch({
154
- changes: {
155
- from: 0,
156
- to: view.state.doc.length,
157
- insert: '',
158
- },
159
- });
160
- }
161
- }
162
-
163
- return true;
164
- },
165
- },
166
- {
167
- key: 'Shift-Enter',
168
- preventDefault: true,
169
- run: (view) => {
170
- view.dispatch({
171
- changes: {
172
- from: view.state.selection.main.head,
173
- insert: '\n',
174
- },
175
- selection: {
176
- anchor: view.state.selection.main.head + 1,
177
- head: view.state.selection.main.head + 1,
178
- },
179
- });
180
- return true;
181
- },
182
- },
183
- {
184
- key: 'Escape',
185
- preventDefault: true,
186
- run: (view) => {
187
- // Clear the entire document.
188
- view.dispatch({
189
- changes: {
190
- from: 0,
191
- to: view.state.doc.length,
192
- insert: '',
193
- },
194
- });
195
- onCancel?.();
196
- return true;
197
- },
198
- },
199
- ]),
200
- ),
201
- ];
202
- };
203
-
204
- class InlineSuggestionWidget extends WidgetType {
205
- constructor(private suffix: string) {
206
- super();
207
- }
208
-
209
- override toDOM(): HTMLSpanElement {
210
- const span = document.createElement('span');
211
- span.textContent = this.suffix;
212
- span.className = 'cm-inline-suggestion';
213
- return span;
214
- }
215
-
216
- override eq(other: InlineSuggestionWidget): boolean {
217
- return other.suffix === this.suffix;
218
- }
219
- }
@@ -1,149 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import '@dxos-theme';
6
-
7
- import '@preact/signals-react';
8
-
9
- import { Repo } from '@automerge/automerge-repo';
10
- import { BroadcastChannelNetworkAdapter } from '@automerge/automerge-repo-network-broadcastchannel';
11
- import { type Meta, type StoryObj } from '@storybook/react-vite';
12
- import React, { useEffect, useState } from 'react';
13
-
14
- import { Obj, Ref, Type } from '@dxos/echo';
15
- import { DocAccessor, Query, type Space, createDocAccessor, useQuery, useSpace } from '@dxos/react-client/echo';
16
- import { type Identity, useIdentity } from '@dxos/react-client/halo';
17
- import { type ClientRepeatedComponentProps, ClientRepeater } from '@dxos/react-client/testing';
18
- import { useThemeContext } from '@dxos/react-ui';
19
- import { render, withLayout, withTheme } 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, space, identity }),
48
- ],
49
- autoFocus,
50
- }),
51
- [source, themeMode],
52
- );
53
-
54
- return <div ref={parentRef} className='flex w-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
- if (!source && objects.length) {
100
- const source = createDocAccessor(objects[0].content, ['content']);
101
- setSource(source);
102
- }
103
- }, [objects, source]);
104
-
105
- if (!source) {
106
- return null;
107
- }
108
-
109
- return <Editor source={source} space={space} identity={identity ?? undefined} />;
110
- };
111
-
112
- const meta = {
113
- title: 'ui/react-ui-editor/Automerge',
114
- component: Editor as any,
115
- render: render(DefaultStory),
116
- decorators: [withTheme, withLayout({ fullscreen: true })],
117
- parameters: {
118
- translations,
119
- },
120
- } satisfies Meta<typeof DefaultStory>;
121
-
122
- export default meta;
123
-
124
- type Story = StoryObj<typeof meta>;
125
-
126
- export const Default: Story = {
127
- args: {},
128
- };
129
-
130
- export const WithEcho: Story = {
131
- decorators: [withTheme],
132
- render: () => {
133
- return (
134
- <ClientRepeater
135
- count={2}
136
- component={EchoStory}
137
- createSpace
138
- onSpaceCreated={async ({ space }) => {
139
- space.db.add(
140
- Obj.make(Type.Expando, {
141
- type: 'test',
142
- content: Ref.make(Obj.make(Type.Expando, { content: initialContent })),
143
- }),
144
- );
145
- }}
146
- />
147
- );
148
- },
149
- };
@@ -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,86 +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 } from '@codemirror/state';
9
- import { EditorView, ViewPlugin } from '@codemirror/view';
10
-
11
- import { type DocAccessor } from '@dxos/react-client/echo';
12
-
13
- import { Cursor } from '../../util';
14
-
15
- import { cursorConverter } from './cursor';
16
- import { type State, isReconcile, updateHeadsEffect } from './defs';
17
- import { Syncer } from './sync';
18
-
19
- export const automerge = (accessor: DocAccessor): Extension => {
20
- const syncState = StateField.define<State>({
21
- create: () => ({
22
- path: accessor.path.slice(),
23
- lastHeads: A.getHeads(accessor.handle.doc()!),
24
- unreconciledTransactions: [],
25
- }),
26
-
27
- update: (value, tr) => {
28
- const result: State = {
29
- path: accessor.path.slice(),
30
- lastHeads: value.lastHeads,
31
- unreconciledTransactions: value.unreconciledTransactions.slice(),
32
- };
33
-
34
- let clearUnreconciled = false;
35
- for (const effect of tr.effects) {
36
- if (effect.is(updateHeadsEffect)) {
37
- result.lastHeads = effect.value.newHeads;
38
- clearUnreconciled = true;
39
- }
40
- }
41
-
42
- if (clearUnreconciled) {
43
- result.unreconciledTransactions = [];
44
- } else {
45
- if (!isReconcile(tr)) {
46
- result.unreconciledTransactions.push(tr);
47
- }
48
- }
49
-
50
- return result;
51
- },
52
- });
53
-
54
- const syncer = new Syncer(accessor.handle, syncState);
55
-
56
- return [
57
- Cursor.converter.of(cursorConverter(accessor)),
58
-
59
- // Track heads.
60
- syncState,
61
-
62
- // Reconcile external updates.
63
- ViewPlugin.fromClass(
64
- class {
65
- constructor(private readonly _view: EditorView) {
66
- accessor.handle.addListener('change', this._handleChange);
67
- }
68
-
69
- destroy() {
70
- accessor.handle.removeListener('change', this._handleChange);
71
- }
72
-
73
- readonly _handleChange = () => {
74
- syncer.reconcile(this._view, false);
75
- };
76
- },
77
- ),
78
-
79
- // Reconcile local updates.
80
- EditorView.updateListener.of(({ view, changes }) => {
81
- if (!changes.empty) {
82
- syncer.reconcile(view, true);
83
- }
84
- }),
85
- ];
86
- };
@@ -1,28 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { log } from '@dxos/log';
6
- import { type DocAccessor, fromCursor, toCursor } from '@dxos/react-client/echo';
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,75 +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/react-client/echo';
12
-
13
- import { type State, getLastHeads, getPath, isReconcile, reconcileAnnotation, updateHeads } from './defs';
14
- import { updateAutomerge } from './update-automerge';
15
- import { updateCodeMirror } from './update-codemirror';
16
-
17
- /**
18
- * Implements three-way merge (on each mutation).
19
- */
20
- export class Syncer {
21
- private _pending = false;
22
-
23
- // prettier-ignore
24
- constructor(
25
- private readonly _handle: IDocHandle,
26
- private readonly _state: StateField<State>
27
- ) {}
28
-
29
- reconcile(view: EditorView, editor: boolean): void {
30
- // TODO(burdon): Better way to do mutex?
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
- onEditorChange(view: EditorView): void {
45
- // Apply the unreconciled transactions to the document.
46
- const transactions = view.state.field(this._state).unreconciledTransactions.filter((tx) => !isReconcile(tx));
47
- const newHeads = updateAutomerge(this._state, this._handle, transactions, view.state);
48
-
49
- if (newHeads) {
50
- view.dispatch({
51
- effects: updateHeads(newHeads),
52
- annotations: reconcileAnnotation.of(false),
53
- });
54
- }
55
- }
56
-
57
- onAutomergeChange(view: EditorView): void {
58
- // Get the diff between the updated state of the document and the heads and apply that to the codemirror doc.
59
- const oldHeads = getLastHeads(view.state, this._state);
60
- const newHeads = A.getHeads(this._handle.doc()!);
61
- const diff = A.equals(oldHeads, newHeads) ? [] : A.diff(this._handle.doc()!, oldHeads, newHeads);
62
-
63
- const selection = view.state.selection;
64
- const path = getPath(view.state, this._state);
65
- updateCodeMirror(view, selection, path, diff);
66
-
67
- // TODO(burdon): Test conflicts?
68
- // A.getConflicts(this._handle.doc()!, path[0]);
69
-
70
- view.dispatch({
71
- effects: updateHeads(newHeads),
72
- annotations: reconcileAnnotation.of(false),
73
- });
74
- }
75
- }