@dxos/react-ui-editor 0.8.4-main.fffef41 → 0.9.0

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 (436) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +1126 -8845
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/translations.mjs +39 -0
  7. package/dist/lib/browser/translations.mjs.map +7 -0
  8. package/dist/lib/node-esm/index.mjs +1126 -8844
  9. package/dist/lib/node-esm/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/lib/node-esm/translations.mjs +41 -0
  12. package/dist/lib/node-esm/translations.mjs.map +7 -0
  13. package/dist/types/src/components/Editor/Editor.d.ts +41 -24
  14. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  15. package/dist/types/src/components/Editor/Editor.stories.d.ts +7 -4
  16. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/{EditorContent/EditorContent.d.ts → Editor/EditorView.d.ts} +9 -7
  18. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  19. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  20. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +3 -5
  21. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorMenuProvider/index.d.ts +0 -1
  23. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -1
  24. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -1
  25. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -1
  26. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +9 -3
  27. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -1
  28. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +3 -3
  29. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -1
  30. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +1 -1
  31. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -1
  32. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +8 -6
  33. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  34. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  35. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  36. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  37. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  38. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  39. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  40. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  41. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  42. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -2
  43. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  44. package/dist/types/src/components/EditorToolbar/lists.d.ts +6 -0
  45. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -0
  46. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  47. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  48. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  49. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  50. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  51. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  52. package/dist/types/src/components/index.d.ts +0 -2
  53. package/dist/types/src/components/index.d.ts.map +1 -1
  54. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  55. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  56. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  57. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  58. package/dist/types/src/extensions/index.d.ts +1 -31
  59. package/dist/types/src/extensions/index.d.ts.map +1 -1
  60. package/dist/types/src/hooks/index.d.ts +1 -0
  61. package/dist/types/src/hooks/index.d.ts.map +1 -1
  62. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  63. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  64. package/dist/types/src/hooks/useTextEditor.d.ts +1 -1
  65. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  66. package/dist/types/src/index.d.ts +0 -9
  67. package/dist/types/src/index.d.ts.map +1 -1
  68. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  69. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  70. package/dist/types/src/stories/Comments.stories.d.ts +3 -2
  71. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  72. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  73. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  74. package/dist/types/src/stories/Experimental.stories.d.ts +4 -3
  75. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  76. package/dist/types/src/stories/Markdown.stories.d.ts +3 -2
  77. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  78. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  79. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  80. package/dist/types/src/stories/Popover.stories.d.ts +2 -2
  81. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  82. package/dist/types/src/stories/Preview.stories.d.ts +3 -2
  83. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  84. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  85. package/dist/types/src/stories/TextEditor.stories.d.ts +3 -2
  86. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  87. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  88. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  89. package/dist/types/src/stories/components/EditorStory.d.ts +9 -20
  90. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  91. package/dist/types/src/stories/components/util.d.ts +4 -3
  92. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  93. package/dist/types/src/translations.d.ts +26 -26
  94. package/dist/types/src/translations.d.ts.map +1 -1
  95. package/dist/types/src/util/index.d.ts +0 -5
  96. package/dist/types/src/util/index.d.ts.map +1 -1
  97. package/dist/types/src/util/react.d.ts +6 -5
  98. package/dist/types/src/util/react.d.ts.map +1 -1
  99. package/dist/types/tsconfig.tsbuildinfo +1 -1
  100. package/package.json +93 -86
  101. package/src/components/Editor/Editor.stories.tsx +26 -26
  102. package/src/components/Editor/Editor.tsx +68 -55
  103. package/src/components/Editor/EditorView.tsx +99 -0
  104. package/src/components/{EditorContent → Editor}/controller.ts +13 -4
  105. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +40 -39
  106. package/src/components/EditorMenuProvider/index.ts +0 -1
  107. package/src/components/EditorMenuProvider/menu-presets.ts +3 -1
  108. package/src/components/EditorMenuProvider/menu.ts +1 -2
  109. package/src/components/EditorMenuProvider/popover.ts +42 -9
  110. package/src/components/EditorMenuProvider/useEditorMenu.ts +21 -7
  111. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +6 -9
  112. package/src/components/EditorToolbar/EditorToolbar.tsx +37 -68
  113. package/src/components/EditorToolbar/blocks.ts +55 -48
  114. package/src/components/EditorToolbar/formatting.ts +44 -46
  115. package/src/components/EditorToolbar/headings.ts +45 -51
  116. package/src/components/EditorToolbar/image.ts +16 -14
  117. package/src/components/EditorToolbar/index.ts +2 -3
  118. package/src/components/EditorToolbar/lists.ts +58 -0
  119. package/src/components/EditorToolbar/search.ts +16 -14
  120. package/src/components/EditorToolbar/types.ts +8 -0
  121. package/src/components/EditorToolbar/view-mode.ts +37 -43
  122. package/src/components/index.ts +0 -5
  123. package/src/extensions/Assistant.stories.tsx +112 -0
  124. package/src/extensions/assistant-extension.tsx +223 -0
  125. package/src/extensions/index.ts +2 -32
  126. package/src/hooks/index.ts +1 -0
  127. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  128. package/src/hooks/useTextEditor.ts +9 -3
  129. package/src/index.ts +0 -13
  130. package/src/stories/Automerge.stories.tsx +177 -0
  131. package/src/stories/Comments.stories.tsx +48 -43
  132. package/src/stories/EditorToolbar.stories.tsx +40 -53
  133. package/src/stories/Experimental.stories.tsx +14 -16
  134. package/src/stories/Markdown.stories.tsx +16 -16
  135. package/src/stories/Outliner.stories.tsx +11 -12
  136. package/src/stories/Popover.stories.tsx +30 -34
  137. package/src/stories/Preview.stories.tsx +72 -58
  138. package/src/stories/Tags.stories.tsx +24 -15
  139. package/src/stories/TextEditor.stories.tsx +13 -19
  140. package/src/stories/Theme.stories.tsx +61 -0
  141. package/src/stories/components/EditorStory.tsx +33 -30
  142. package/src/stories/components/util.tsx +51 -52
  143. package/src/translations.ts +30 -25
  144. package/src/util/index.ts +1 -6
  145. package/src/util/react.tsx +8 -13
  146. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  147. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  148. package/dist/lib/browser/types/index.mjs +0 -13
  149. package/dist/lib/browser/types/index.mjs.map +0 -7
  150. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  151. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  152. package/dist/lib/node-esm/types/index.mjs +0 -14
  153. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  154. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +0 -1
  155. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +0 -26
  156. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +0 -1
  157. package/dist/types/src/components/EditorContent/controller.d.ts.map +0 -1
  158. package/dist/types/src/components/EditorContent/index.d.ts +0 -3
  159. package/dist/types/src/components/EditorContent/index.d.ts.map +0 -1
  160. package/dist/types/src/components/EditorMenuProvider/util.d.ts +0 -8
  161. package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +0 -1
  162. package/dist/types/src/components/EditorToolbar/actions.d.ts +0 -39
  163. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +0 -1
  164. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +0 -11
  165. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +0 -1
  166. package/dist/types/src/defaults.d.ts +0 -14
  167. package/dist/types/src/defaults.d.ts.map +0 -1
  168. package/dist/types/src/extensions/annotations.d.ts +0 -9
  169. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  170. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -17
  171. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  172. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  173. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  174. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  175. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  176. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  177. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  178. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  179. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  180. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  181. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  182. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  183. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  184. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  185. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  186. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  187. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  188. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  189. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  190. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  191. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  192. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  193. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  194. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  195. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  196. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  197. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  198. package/dist/types/src/extensions/autoscroll.d.ts +0 -20
  199. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  200. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  201. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  202. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  203. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  204. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  205. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  206. package/dist/types/src/extensions/blast.d.ts +0 -25
  207. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  208. package/dist/types/src/extensions/blocks.d.ts +0 -2
  209. package/dist/types/src/extensions/blocks.d.ts.map +0 -1
  210. package/dist/types/src/extensions/bookmarks.d.ts +0 -12
  211. package/dist/types/src/extensions/bookmarks.d.ts.map +0 -1
  212. package/dist/types/src/extensions/comments.d.ts +0 -95
  213. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  214. package/dist/types/src/extensions/debug.d.ts +0 -3
  215. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  216. package/dist/types/src/extensions/dnd.d.ts +0 -9
  217. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  218. package/dist/types/src/extensions/factories.d.ts +0 -83
  219. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  220. package/dist/types/src/extensions/focus.d.ts +0 -7
  221. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  222. package/dist/types/src/extensions/folding.d.ts +0 -7
  223. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  224. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  225. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  226. package/dist/types/src/extensions/json.d.ts +0 -7
  227. package/dist/types/src/extensions/json.d.ts.map +0 -1
  228. package/dist/types/src/extensions/listener.d.ts +0 -13
  229. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  230. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  231. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  232. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  233. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  234. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  235. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  236. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  237. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  238. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  239. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  240. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  241. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -61
  243. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  245. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  247. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  249. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  251. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  253. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  255. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  256. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  257. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  258. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  259. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  260. package/dist/types/src/extensions/mention.d.ts +0 -7
  261. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  262. package/dist/types/src/extensions/modal.d.ts +0 -7
  263. package/dist/types/src/extensions/modal.d.ts.map +0 -1
  264. package/dist/types/src/extensions/modes.d.ts +0 -10
  265. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  266. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  267. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  268. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  269. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  270. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  271. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  272. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  273. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  274. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  275. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  277. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  279. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  280. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  281. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  282. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  283. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  284. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  285. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  286. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  287. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  288. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  289. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  290. package/dist/types/src/extensions/replacer.d.ts +0 -21
  291. package/dist/types/src/extensions/replacer.d.ts.map +0 -1
  292. package/dist/types/src/extensions/replacer.test.d.ts +0 -2
  293. package/dist/types/src/extensions/replacer.test.d.ts.map +0 -1
  294. package/dist/types/src/extensions/scrolling.d.ts +0 -78
  295. package/dist/types/src/extensions/scrolling.d.ts.map +0 -1
  296. package/dist/types/src/extensions/selection.d.ts +0 -24
  297. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  298. package/dist/types/src/extensions/state.d.ts +0 -2
  299. package/dist/types/src/extensions/state.d.ts.map +0 -1
  300. package/dist/types/src/extensions/submit.d.ts +0 -10
  301. package/dist/types/src/extensions/submit.d.ts.map +0 -1
  302. package/dist/types/src/extensions/tab.d.ts +0 -4
  303. package/dist/types/src/extensions/tab.d.ts.map +0 -1
  304. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  305. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  306. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  307. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  308. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  309. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  310. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  311. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  312. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -97
  313. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  314. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  315. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  316. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  317. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  318. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  319. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  320. package/dist/types/src/styles/index.d.ts +0 -4
  321. package/dist/types/src/styles/index.d.ts.map +0 -1
  322. package/dist/types/src/styles/markdown.d.ts +0 -8
  323. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  324. package/dist/types/src/styles/theme.d.ts +0 -38
  325. package/dist/types/src/styles/theme.d.ts.map +0 -1
  326. package/dist/types/src/styles/tokens.d.ts +0 -3
  327. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  328. package/dist/types/src/types/index.d.ts +0 -2
  329. package/dist/types/src/types/index.d.ts.map +0 -1
  330. package/dist/types/src/types/types.d.ts +0 -21
  331. package/dist/types/src/types/types.d.ts.map +0 -1
  332. package/dist/types/src/util/cursor.d.ts +0 -31
  333. package/dist/types/src/util/cursor.d.ts.map +0 -1
  334. package/dist/types/src/util/debug.d.ts +0 -21
  335. package/dist/types/src/util/debug.d.ts.map +0 -1
  336. package/dist/types/src/util/decorations.d.ts +0 -4
  337. package/dist/types/src/util/decorations.d.ts.map +0 -1
  338. package/dist/types/src/util/dom.d.ts +0 -10
  339. package/dist/types/src/util/dom.d.ts.map +0 -1
  340. package/dist/types/src/util/facet.d.ts +0 -3
  341. package/dist/types/src/util/facet.d.ts.map +0 -1
  342. package/src/components/EditorContent/EditorContent.stories.tsx +0 -70
  343. package/src/components/EditorContent/EditorContent.tsx +0 -70
  344. package/src/components/EditorContent/index.ts +0 -6
  345. package/src/components/EditorMenuProvider/util.ts +0 -31
  346. package/src/components/EditorToolbar/actions.ts +0 -86
  347. package/src/components/EditorToolbar/useEditorToolbar.ts +0 -20
  348. package/src/defaults.ts +0 -52
  349. package/src/extensions/annotations.ts +0 -55
  350. package/src/extensions/autocomplete/autocomplete.ts +0 -151
  351. package/src/extensions/autocomplete/index.ts +0 -8
  352. package/src/extensions/autocomplete/match.ts +0 -46
  353. package/src/extensions/autocomplete/placeholder.ts +0 -117
  354. package/src/extensions/autocomplete/typeahead.ts +0 -87
  355. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  356. package/src/extensions/automerge/automerge.test.tsx +0 -78
  357. package/src/extensions/automerge/automerge.ts +0 -105
  358. package/src/extensions/automerge/cursor.ts +0 -28
  359. package/src/extensions/automerge/defs.ts +0 -31
  360. package/src/extensions/automerge/index.ts +0 -5
  361. package/src/extensions/automerge/sync.ts +0 -79
  362. package/src/extensions/automerge/update-automerge.ts +0 -50
  363. package/src/extensions/automerge/update-codemirror.ts +0 -115
  364. package/src/extensions/autoscroll.ts +0 -163
  365. package/src/extensions/awareness/awareness-provider.ts +0 -127
  366. package/src/extensions/awareness/awareness.ts +0 -315
  367. package/src/extensions/awareness/index.ts +0 -6
  368. package/src/extensions/blast.ts +0 -363
  369. package/src/extensions/blocks.ts +0 -131
  370. package/src/extensions/bookmarks.ts +0 -75
  371. package/src/extensions/comments.ts +0 -598
  372. package/src/extensions/debug.ts +0 -15
  373. package/src/extensions/dnd.ts +0 -37
  374. package/src/extensions/factories.ts +0 -278
  375. package/src/extensions/focus.ts +0 -36
  376. package/src/extensions/folding.tsx +0 -43
  377. package/src/extensions/hashtag.tsx +0 -68
  378. package/src/extensions/json.ts +0 -57
  379. package/src/extensions/listener.ts +0 -32
  380. package/src/extensions/markdown/action.ts +0 -117
  381. package/src/extensions/markdown/bundle.ts +0 -105
  382. package/src/extensions/markdown/changes.test.ts +0 -26
  383. package/src/extensions/markdown/changes.ts +0 -149
  384. package/src/extensions/markdown/debug.ts +0 -44
  385. package/src/extensions/markdown/decorate.ts +0 -601
  386. package/src/extensions/markdown/formatting.test.ts +0 -498
  387. package/src/extensions/markdown/formatting.ts +0 -1265
  388. package/src/extensions/markdown/highlight.ts +0 -183
  389. package/src/extensions/markdown/image.ts +0 -118
  390. package/src/extensions/markdown/index.ts +0 -13
  391. package/src/extensions/markdown/link.ts +0 -50
  392. package/src/extensions/markdown/parser.test.ts +0 -75
  393. package/src/extensions/markdown/styles.ts +0 -135
  394. package/src/extensions/markdown/table.ts +0 -150
  395. package/src/extensions/mention.ts +0 -41
  396. package/src/extensions/modal.ts +0 -24
  397. package/src/extensions/modes.ts +0 -41
  398. package/src/extensions/outliner/commands.ts +0 -270
  399. package/src/extensions/outliner/editor.test.ts +0 -33
  400. package/src/extensions/outliner/editor.ts +0 -184
  401. package/src/extensions/outliner/index.ts +0 -7
  402. package/src/extensions/outliner/menu.ts +0 -128
  403. package/src/extensions/outliner/outliner.test.ts +0 -100
  404. package/src/extensions/outliner/outliner.ts +0 -167
  405. package/src/extensions/outliner/selection.ts +0 -50
  406. package/src/extensions/outliner/tree.test.ts +0 -168
  407. package/src/extensions/outliner/tree.ts +0 -317
  408. package/src/extensions/preview/index.ts +0 -5
  409. package/src/extensions/preview/preview.ts +0 -193
  410. package/src/extensions/replacer.test.ts +0 -75
  411. package/src/extensions/replacer.ts +0 -93
  412. package/src/extensions/scrolling.ts +0 -189
  413. package/src/extensions/selection.ts +0 -100
  414. package/src/extensions/state.ts +0 -7
  415. package/src/extensions/submit.ts +0 -62
  416. package/src/extensions/tab.ts +0 -29
  417. package/src/extensions/tags/extended-markdown.test.ts +0 -262
  418. package/src/extensions/tags/extended-markdown.ts +0 -78
  419. package/src/extensions/tags/index.ts +0 -7
  420. package/src/extensions/tags/streamer.ts +0 -243
  421. package/src/extensions/tags/xml-tags.ts +0 -500
  422. package/src/extensions/tags/xml-util.ts +0 -94
  423. package/src/extensions/typewriter.ts +0 -68
  424. package/src/stories/CommandDialog.stories.tsx +0 -83
  425. package/src/styles/index.ts +0 -7
  426. package/src/styles/markdown.ts +0 -26
  427. package/src/styles/theme.ts +0 -269
  428. package/src/styles/tokens.ts +0 -17
  429. package/src/types/index.ts +0 -5
  430. package/src/types/types.ts +0 -32
  431. package/src/util/cursor.ts +0 -56
  432. package/src/util/debug.ts +0 -69
  433. package/src/util/decorations.ts +0 -21
  434. package/src/util/dom.ts +0 -34
  435. package/src/util/facet.ts +0 -13
  436. /package/dist/types/src/components/{EditorContent → Editor}/controller.d.ts +0 -0
@@ -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/client/echo';
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/client/echo';
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
- };
@@ -1,163 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { StateEffect } from '@codemirror/state';
6
- import { EditorView, ViewPlugin } from '@codemirror/view';
7
-
8
- import { debounce } from '@dxos/async';
9
- import { Domino } from '@dxos/react-ui';
10
-
11
- import { scrollToLineEffect } from './scrolling';
12
-
13
- // TODO(burdon): Reconcile with scrollToLineEffect (scrolling).
14
- export const scrollToBottomEffect = StateEffect.define<ScrollBehavior | undefined>();
15
-
16
- export type AutoScrollOptions = {
17
- /** Auto-scroll when reaches the bottom. */
18
- autoScroll?: boolean;
19
- /** Threshold in px to trigger scroll from bottom. */
20
- threshold?: number;
21
- /** Throttle time in ms. */
22
- throttleDelay?: number;
23
- /** Callback when auto-scrolling. */
24
- onAutoScroll?: (props: { view: EditorView; distanceFromBottom: number }) => boolean | void;
25
- };
26
-
27
- /**
28
- * Extension that supports pinning the scroll position and automatically scrolls to the bottom when content is added.
29
- */
30
- // TODO(burdon): Reconcile with transcript-extension.
31
- export const autoScroll = ({
32
- autoScroll = true,
33
- threshold = 100,
34
- throttleDelay = 1_000,
35
- onAutoScroll,
36
- }: Partial<AutoScrollOptions> = {}) => {
37
- let buttonContainer: HTMLDivElement | undefined;
38
- let hideTimeout: NodeJS.Timeout | undefined;
39
- let lastScrollTop = 0;
40
- let isPinned = true;
41
-
42
- const setPinned = (pin: boolean) => {
43
- isPinned = pin;
44
- buttonContainer?.classList.toggle('opacity-0', pin);
45
- };
46
-
47
- // Temporarily hide the scrollbar while auto-scrolling.
48
- const hideScrollbar = (view: EditorView) => {
49
- view.scrollDOM.classList.add('cm-hide-scrollbar');
50
- clearTimeout(hideTimeout);
51
- hideTimeout = setTimeout(() => {
52
- view.scrollDOM.classList.remove('cm-hide-scrollbar');
53
- }, 1_000);
54
- };
55
-
56
- // Throttled scroll to bottom.
57
- const scrollToBottom = (view: EditorView, behavior?: ScrollBehavior) => {
58
- setPinned(true);
59
- hideScrollbar(view);
60
- const line = view.state.doc.lineAt(view.state.doc.length);
61
- view.dispatch({
62
- selection: { anchor: line.to, head: line.to },
63
- effects: scrollToLineEffect.of({ line: line.number, options: { position: 'end', offset: threshold, behavior } }),
64
- });
65
- };
66
-
67
- // Throttled check for distance from bottom (for downward scrolls only).
68
- const checkDistance = debounce((view: EditorView) => {
69
- const scrollerRect = view.scrollDOM.getBoundingClientRect();
70
- const coords = view.coordsAtPos(view.state.doc.length);
71
- const distanceFromBottom = coords ? coords.bottom - scrollerRect.bottom : 0;
72
- setPinned(distanceFromBottom < 0);
73
- }, 1_000);
74
-
75
- // Debounce scroll updates so rapid edits don't cause clunky scrolling.
76
- const triggerUpdate = debounce((view: EditorView) => scrollToBottom(view), throttleDelay);
77
-
78
- return [
79
- // Update listener for logging when scrolling is needed.
80
- EditorView.updateListener.of(({ view, transactions, heightChanged }) => {
81
- // TODO(burdon): Remove and use scrollToLineEffect instead.
82
- transactions.forEach((transaction) => {
83
- for (const effect of transaction.effects) {
84
- if (effect.is(scrollToBottomEffect)) {
85
- scrollToBottom(view, effect.value);
86
- }
87
- }
88
- });
89
-
90
- // Maybe scroll if doc changed and pinned.
91
- // NOTE: Geometry changed is triggered when widgets change height (e.g., toggle tool block).
92
- if (heightChanged && isPinned) {
93
- const coords = view.coordsAtPos(view.state.doc.length);
94
- const scrollerRect = view.scrollDOM.getBoundingClientRect();
95
- const distanceFromBottom = coords ? scrollerRect.bottom - coords.bottom : 0;
96
- if (autoScroll && distanceFromBottom < threshold) {
97
- const shouldScroll = onAutoScroll?.({ view, distanceFromBottom }) ?? true;
98
- if (shouldScroll) {
99
- triggerUpdate(view);
100
- }
101
- } else if (distanceFromBottom < 0) {
102
- setPinned(false);
103
- }
104
- }
105
- }),
106
-
107
- // Detect user scroll.
108
- EditorView.domEventHandlers({
109
- scroll: (event, view) => {
110
- const currentScrollTop = view.scrollDOM.scrollTop;
111
- const scrollingUp = currentScrollTop < lastScrollTop;
112
- lastScrollTop = currentScrollTop;
113
-
114
- // If user scrolls up, immediately unpin auto-scroll.
115
- if (scrollingUp) {
116
- setPinned(false);
117
- } else {
118
- checkDistance(view);
119
- }
120
- },
121
- }),
122
-
123
- // Scroll button.
124
- ViewPlugin.fromClass(
125
- class {
126
- constructor(view: EditorView) {
127
- buttonContainer = Domino.of('div')
128
- .classNames(true && 'cm-scroll-button transition-opacity duration-300 opacity-0')
129
- .children(
130
- Domino.of('button')
131
- .classNames('dx-button bg-accentSurface')
132
- .data('density', 'fine')
133
- .children(Domino.of<any>('dx-icon').attributes({ icon: 'ph--arrow-down--regular' }))
134
- .on('click', () => {
135
- scrollToBottom(view);
136
- }),
137
- )
138
- .build();
139
-
140
- view.scrollDOM.parentElement!.appendChild(buttonContainer);
141
- }
142
- },
143
- ),
144
-
145
- // Styles.
146
- EditorView.theme({
147
- '.cm-scroller': {
148
- scrollbarWidth: 'thin',
149
- },
150
- '.cm-scroller.cm-hide-scrollbar': {
151
- scrollbarWidth: 'none',
152
- },
153
- '.cm-scroller.cm-hide-scrollbar::-webkit-scrollbar': {
154
- display: 'none',
155
- },
156
- '.cm-scroll-button': {
157
- position: 'absolute',
158
- bottom: '0.5rem',
159
- right: '1rem',
160
- },
161
- }),
162
- ];
163
- };
@@ -1,127 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { DeferredTask, Event, sleep } from '@dxos/async';
6
- import { type Space } from '@dxos/client/echo';
7
- import { type GossipMessage } from '@dxos/client/mesh';
8
- import { Context } from '@dxos/context';
9
- import { invariant } from '@dxos/invariant';
10
- import { log } from '@dxos/log';
11
-
12
- import { type AwarenessInfo, type AwarenessPosition, type AwarenessProvider, type AwarenessState } from './awareness';
13
-
14
- type ProtocolMessage =
15
- | {
16
- kind: 'query';
17
- }
18
- | {
19
- kind: 'post';
20
- state: AwarenessState;
21
- };
22
-
23
- const DEBOUNCE_INTERVAL = 100; // ms
24
-
25
- export type AwarenessProviderParams = {
26
- space: Space;
27
- channel: string;
28
- peerId: string;
29
- info: AwarenessInfo;
30
- };
31
-
32
- /**
33
- * Receives and broadcasts profile and cursor position.
34
- */
35
- export class SpaceAwarenessProvider implements AwarenessProvider {
36
- private readonly _remoteStates = new Map<string, AwarenessState>();
37
-
38
- private readonly _space: Space;
39
- private readonly _channel: string;
40
- private readonly _peerId: string;
41
- private readonly _info: AwarenessInfo;
42
-
43
- private _ctx?: Context;
44
- private _postTask?: DeferredTask;
45
- private _localState?: AwarenessState;
46
-
47
- public readonly remoteStateChange = new Event<void>();
48
-
49
- constructor(params: AwarenessProviderParams) {
50
- this._space = params.space;
51
- this._channel = params.channel;
52
- this._peerId = params.peerId;
53
- this._info = params.info;
54
- }
55
-
56
- open(): void {
57
- this._ctx = new Context();
58
- this._postTask = new DeferredTask(this._ctx, async () => {
59
- if (this._localState) {
60
- await this._space.postMessage(this._channel, {
61
- kind: 'post',
62
- state: this._localState,
63
- } satisfies ProtocolMessage);
64
-
65
- // TODO(burdon): Replace with throttle.
66
- // TODO(burdon): Send heads?
67
- await sleep(DEBOUNCE_INTERVAL);
68
- }
69
- });
70
-
71
- this._ctx.onDispose(
72
- this._space.listen(this._channel, (message: GossipMessage) => {
73
- switch (message.payload.kind) {
74
- case 'query': {
75
- this._handleQueryMessage();
76
- break;
77
- }
78
- case 'post': {
79
- this._handlePostMessage(message.payload);
80
- break;
81
- }
82
- }
83
- }),
84
- );
85
-
86
- void this._space
87
- .postMessage(this._channel, {
88
- kind: 'query',
89
- } satisfies ProtocolMessage)
90
- .catch((err) => {
91
- log.debug('failed to query awareness', { err });
92
- });
93
- }
94
-
95
- close(): void {
96
- void this._ctx?.dispose();
97
- this._ctx = undefined;
98
- this._postTask = undefined;
99
- }
100
-
101
- getRemoteStates(): AwarenessState[] {
102
- return Array.from(this._remoteStates.values());
103
- }
104
-
105
- update(position: AwarenessPosition | undefined): void {
106
- invariant(this._postTask);
107
- this._localState = {
108
- peerId: this._peerId,
109
- position,
110
- info: this._info,
111
- };
112
-
113
- this._postTask.schedule();
114
- }
115
-
116
- private _handleQueryMessage(): void {
117
- invariant(this._postTask);
118
- this._postTask.schedule();
119
- }
120
-
121
- private _handlePostMessage(message: ProtocolMessage): void {
122
- invariant(message.kind === 'post');
123
- // TODO(wittjosiah): Is it helpful or confusing to show cursors for self on other devices?
124
- this._remoteStates.set(message.state.peerId, message.state);
125
- this.remoteStateChange.emit();
126
- }
127
- }