@dxos/react-ui-editor 0.8.4-main.72ec0f3 → 0.8.4-main.7996785055

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 (400) hide show
  1. package/dist/lib/browser/index.mjs +520 -8302
  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 +518 -8299
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/components/Editor/Editor.d.ts +8 -2
  8. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  9. package/dist/types/src/components/Editor/Editor.stories.d.ts +4 -1
  10. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  11. package/dist/types/src/components/EditorContent/EditorContent.d.ts +4 -2
  12. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +1 -1
  13. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +2 -4
  14. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -1
  15. package/dist/types/src/components/EditorMenuProvider/index.d.ts +0 -1
  16. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -1
  17. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -1
  18. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -1
  19. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +1 -2
  20. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -1
  21. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +1 -1
  23. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -1
  24. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +7 -5
  25. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  26. package/dist/types/src/components/EditorToolbar/actions.d.ts +9 -23
  27. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +1 -1
  28. package/dist/types/src/components/EditorToolbar/blocks.d.ts +7 -5
  29. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  30. package/dist/types/src/components/EditorToolbar/formatting.d.ts +7 -5
  31. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  32. package/dist/types/src/components/EditorToolbar/headings.d.ts +7 -5
  33. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  34. package/dist/types/src/components/EditorToolbar/image.d.ts +5 -11
  35. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  36. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  37. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  38. package/dist/types/src/components/EditorToolbar/search.d.ts +5 -11
  39. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  40. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +4 -4
  41. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -1
  42. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +8 -6
  43. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  44. package/dist/types/src/components/index.d.ts.map +1 -1
  45. package/dist/types/src/hooks/useTextEditor.d.ts +1 -1
  46. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  47. package/dist/types/src/index.d.ts +0 -8
  48. package/dist/types/src/index.d.ts.map +1 -1
  49. package/dist/types/src/{extensions/automerge/automerge.stories.d.ts → stories/Automerge.stories.d.ts} +5 -8
  50. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  51. package/dist/types/src/stories/Comments.stories.d.ts +3 -2
  52. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  53. package/dist/types/src/stories/EditorToolbar.stories.d.ts +6 -6
  54. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  55. package/dist/types/src/stories/Experimental.stories.d.ts +3 -2
  56. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  57. package/dist/types/src/stories/Markdown.stories.d.ts +3 -2
  58. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  59. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  60. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  61. package/dist/types/src/stories/Popover.stories.d.ts +2 -2
  62. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  63. package/dist/types/src/stories/Preview.stories.d.ts +3 -2
  64. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  65. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  66. package/dist/types/src/stories/TextEditor.stories.d.ts +3 -2
  67. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  68. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  69. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  70. package/dist/types/src/stories/components/EditorStory.d.ts +9 -20
  71. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  72. package/dist/types/src/stories/components/util.d.ts +3 -3
  73. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  74. package/dist/types/src/translations.d.ts +5 -5
  75. package/dist/types/src/translations.d.ts.map +1 -1
  76. package/dist/types/src/util/index.d.ts +0 -5
  77. package/dist/types/src/util/index.d.ts.map +1 -1
  78. package/dist/types/src/util/react.d.ts +6 -5
  79. package/dist/types/src/util/react.d.ts.map +1 -1
  80. package/dist/types/tsconfig.tsbuildinfo +1 -1
  81. package/package.json +65 -66
  82. package/src/components/Editor/Editor.stories.tsx +14 -8
  83. package/src/components/Editor/Editor.tsx +21 -10
  84. package/src/components/EditorContent/EditorContent.tsx +19 -6
  85. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +23 -30
  86. package/src/components/EditorMenuProvider/index.ts +0 -1
  87. package/src/components/EditorMenuProvider/menu-presets.ts +3 -1
  88. package/src/components/EditorMenuProvider/menu.ts +1 -2
  89. package/src/components/EditorMenuProvider/popover.ts +1 -3
  90. package/src/components/EditorMenuProvider/useEditorMenu.ts +9 -4
  91. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +6 -9
  92. package/src/components/EditorToolbar/EditorToolbar.tsx +25 -37
  93. package/src/components/EditorToolbar/actions.ts +10 -9
  94. package/src/components/EditorToolbar/blocks.ts +5 -6
  95. package/src/components/EditorToolbar/formatting.ts +5 -6
  96. package/src/components/EditorToolbar/headings.ts +12 -12
  97. package/src/components/EditorToolbar/image.ts +9 -2
  98. package/src/components/EditorToolbar/index.ts +1 -1
  99. package/src/components/EditorToolbar/search.ts +9 -2
  100. package/src/components/EditorToolbar/useEditorToolbar.ts +6 -6
  101. package/src/components/EditorToolbar/view-mode.ts +5 -5
  102. package/src/components/index.ts +0 -2
  103. package/src/hooks/useTextEditor.ts +9 -3
  104. package/src/index.ts +0 -10
  105. package/src/stories/Automerge.stories.tsx +173 -0
  106. package/src/stories/Comments.stories.tsx +47 -42
  107. package/src/stories/EditorToolbar.stories.tsx +57 -27
  108. package/src/stories/Experimental.stories.tsx +7 -9
  109. package/src/stories/Markdown.stories.tsx +16 -16
  110. package/src/stories/Outliner.stories.tsx +8 -9
  111. package/src/stories/Popover.stories.tsx +25 -29
  112. package/src/stories/Preview.stories.tsx +66 -51
  113. package/src/stories/Tags.stories.tsx +24 -15
  114. package/src/stories/TextEditor.stories.tsx +13 -19
  115. package/src/stories/Theme.stories.tsx +61 -0
  116. package/src/stories/components/EditorStory.tsx +22 -28
  117. package/src/stories/components/util.tsx +21 -24
  118. package/src/translations.ts +4 -4
  119. package/src/util/index.ts +1 -6
  120. package/src/util/react.tsx +8 -13
  121. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  122. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  123. package/dist/lib/browser/types/index.mjs +0 -13
  124. package/dist/lib/browser/types/index.mjs.map +0 -7
  125. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  126. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  127. package/dist/lib/node-esm/types/index.mjs +0 -14
  128. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  129. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +0 -26
  130. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +0 -1
  131. package/dist/types/src/components/EditorMenuProvider/util.d.ts +0 -8
  132. package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +0 -1
  133. package/dist/types/src/defaults.d.ts +0 -14
  134. package/dist/types/src/defaults.d.ts.map +0 -1
  135. package/dist/types/src/extensions/annotations.d.ts +0 -9
  136. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  137. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -17
  138. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  139. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  140. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  141. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  142. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  143. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  144. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  145. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  146. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  147. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  148. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  149. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  150. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  151. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  152. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  153. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  154. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  155. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  156. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  157. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  158. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  159. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  160. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  161. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  162. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  163. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  164. package/dist/types/src/extensions/autoscroll.d.ts +0 -20
  165. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  166. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  167. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  168. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  169. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  170. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  171. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  172. package/dist/types/src/extensions/blast.d.ts +0 -25
  173. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  174. package/dist/types/src/extensions/blocks.d.ts +0 -2
  175. package/dist/types/src/extensions/blocks.d.ts.map +0 -1
  176. package/dist/types/src/extensions/bookmarks.d.ts +0 -12
  177. package/dist/types/src/extensions/bookmarks.d.ts.map +0 -1
  178. package/dist/types/src/extensions/comments.d.ts +0 -95
  179. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  180. package/dist/types/src/extensions/debug.d.ts +0 -3
  181. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  182. package/dist/types/src/extensions/dnd.d.ts +0 -9
  183. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  184. package/dist/types/src/extensions/factories.d.ts +0 -83
  185. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  186. package/dist/types/src/extensions/focus.d.ts +0 -7
  187. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  188. package/dist/types/src/extensions/folding.d.ts +0 -7
  189. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  190. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  191. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  192. package/dist/types/src/extensions/index.d.ts +0 -32
  193. package/dist/types/src/extensions/index.d.ts.map +0 -1
  194. package/dist/types/src/extensions/json.d.ts +0 -7
  195. package/dist/types/src/extensions/json.d.ts.map +0 -1
  196. package/dist/types/src/extensions/listener.d.ts +0 -13
  197. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  198. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  199. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  200. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  201. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  202. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  203. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  204. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  205. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  206. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  207. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  208. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  209. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  210. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -61
  211. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  212. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  213. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  214. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  215. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  216. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  217. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  218. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  219. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  220. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  221. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  222. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  223. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  224. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  225. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  226. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  227. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  228. package/dist/types/src/extensions/mention.d.ts +0 -7
  229. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  230. package/dist/types/src/extensions/modal.d.ts +0 -7
  231. package/dist/types/src/extensions/modal.d.ts.map +0 -1
  232. package/dist/types/src/extensions/modes.d.ts +0 -10
  233. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  234. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  235. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  236. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  237. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  238. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  239. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  240. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  241. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  242. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  243. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  244. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  245. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  246. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  247. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  248. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  249. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  250. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  251. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  252. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  253. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  254. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  255. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  256. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  257. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  258. package/dist/types/src/extensions/replacer.d.ts +0 -21
  259. package/dist/types/src/extensions/replacer.d.ts.map +0 -1
  260. package/dist/types/src/extensions/replacer.test.d.ts +0 -2
  261. package/dist/types/src/extensions/replacer.test.d.ts.map +0 -1
  262. package/dist/types/src/extensions/scrolling.d.ts +0 -78
  263. package/dist/types/src/extensions/scrolling.d.ts.map +0 -1
  264. package/dist/types/src/extensions/selection.d.ts +0 -24
  265. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  266. package/dist/types/src/extensions/state.d.ts +0 -2
  267. package/dist/types/src/extensions/state.d.ts.map +0 -1
  268. package/dist/types/src/extensions/submit.d.ts +0 -10
  269. package/dist/types/src/extensions/submit.d.ts.map +0 -1
  270. package/dist/types/src/extensions/tab.d.ts +0 -4
  271. package/dist/types/src/extensions/tab.d.ts.map +0 -1
  272. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  273. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  274. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  275. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  276. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  277. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  278. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  279. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  280. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -97
  281. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  282. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  283. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  284. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  285. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  286. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  287. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  288. package/dist/types/src/styles/index.d.ts +0 -4
  289. package/dist/types/src/styles/index.d.ts.map +0 -1
  290. package/dist/types/src/styles/markdown.d.ts +0 -8
  291. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  292. package/dist/types/src/styles/theme.d.ts +0 -38
  293. package/dist/types/src/styles/theme.d.ts.map +0 -1
  294. package/dist/types/src/styles/tokens.d.ts +0 -3
  295. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  296. package/dist/types/src/types/index.d.ts +0 -2
  297. package/dist/types/src/types/index.d.ts.map +0 -1
  298. package/dist/types/src/types/types.d.ts +0 -21
  299. package/dist/types/src/types/types.d.ts.map +0 -1
  300. package/dist/types/src/util/cursor.d.ts +0 -31
  301. package/dist/types/src/util/cursor.d.ts.map +0 -1
  302. package/dist/types/src/util/debug.d.ts +0 -21
  303. package/dist/types/src/util/debug.d.ts.map +0 -1
  304. package/dist/types/src/util/decorations.d.ts +0 -4
  305. package/dist/types/src/util/decorations.d.ts.map +0 -1
  306. package/dist/types/src/util/dom.d.ts +0 -10
  307. package/dist/types/src/util/dom.d.ts.map +0 -1
  308. package/dist/types/src/util/facet.d.ts +0 -3
  309. package/dist/types/src/util/facet.d.ts.map +0 -1
  310. package/src/components/EditorContent/EditorContent.stories.tsx +0 -70
  311. package/src/components/EditorMenuProvider/util.ts +0 -31
  312. package/src/defaults.ts +0 -52
  313. package/src/extensions/annotations.ts +0 -55
  314. package/src/extensions/autocomplete/autocomplete.ts +0 -151
  315. package/src/extensions/autocomplete/index.ts +0 -8
  316. package/src/extensions/autocomplete/match.ts +0 -46
  317. package/src/extensions/autocomplete/placeholder.ts +0 -117
  318. package/src/extensions/autocomplete/typeahead.ts +0 -87
  319. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  320. package/src/extensions/automerge/automerge.test.tsx +0 -78
  321. package/src/extensions/automerge/automerge.ts +0 -105
  322. package/src/extensions/automerge/cursor.ts +0 -28
  323. package/src/extensions/automerge/defs.ts +0 -31
  324. package/src/extensions/automerge/index.ts +0 -5
  325. package/src/extensions/automerge/sync.ts +0 -79
  326. package/src/extensions/automerge/update-automerge.ts +0 -50
  327. package/src/extensions/automerge/update-codemirror.ts +0 -115
  328. package/src/extensions/autoscroll.ts +0 -163
  329. package/src/extensions/awareness/awareness-provider.ts +0 -127
  330. package/src/extensions/awareness/awareness.ts +0 -315
  331. package/src/extensions/awareness/index.ts +0 -6
  332. package/src/extensions/blast.ts +0 -363
  333. package/src/extensions/blocks.ts +0 -131
  334. package/src/extensions/bookmarks.ts +0 -75
  335. package/src/extensions/comments.ts +0 -598
  336. package/src/extensions/debug.ts +0 -15
  337. package/src/extensions/dnd.ts +0 -37
  338. package/src/extensions/factories.ts +0 -278
  339. package/src/extensions/focus.ts +0 -36
  340. package/src/extensions/folding.tsx +0 -43
  341. package/src/extensions/hashtag.tsx +0 -68
  342. package/src/extensions/index.ts +0 -35
  343. package/src/extensions/json.ts +0 -57
  344. package/src/extensions/listener.ts +0 -32
  345. package/src/extensions/markdown/action.ts +0 -117
  346. package/src/extensions/markdown/bundle.ts +0 -105
  347. package/src/extensions/markdown/changes.test.ts +0 -26
  348. package/src/extensions/markdown/changes.ts +0 -149
  349. package/src/extensions/markdown/debug.ts +0 -44
  350. package/src/extensions/markdown/decorate.ts +0 -601
  351. package/src/extensions/markdown/formatting.test.ts +0 -498
  352. package/src/extensions/markdown/formatting.ts +0 -1265
  353. package/src/extensions/markdown/highlight.ts +0 -183
  354. package/src/extensions/markdown/image.ts +0 -118
  355. package/src/extensions/markdown/index.ts +0 -13
  356. package/src/extensions/markdown/link.ts +0 -50
  357. package/src/extensions/markdown/parser.test.ts +0 -75
  358. package/src/extensions/markdown/styles.ts +0 -135
  359. package/src/extensions/markdown/table.ts +0 -150
  360. package/src/extensions/mention.ts +0 -41
  361. package/src/extensions/modal.ts +0 -24
  362. package/src/extensions/modes.ts +0 -41
  363. package/src/extensions/outliner/commands.ts +0 -270
  364. package/src/extensions/outliner/editor.test.ts +0 -33
  365. package/src/extensions/outliner/editor.ts +0 -184
  366. package/src/extensions/outliner/index.ts +0 -7
  367. package/src/extensions/outliner/menu.ts +0 -128
  368. package/src/extensions/outliner/outliner.test.ts +0 -100
  369. package/src/extensions/outliner/outliner.ts +0 -167
  370. package/src/extensions/outliner/selection.ts +0 -50
  371. package/src/extensions/outliner/tree.test.ts +0 -168
  372. package/src/extensions/outliner/tree.ts +0 -317
  373. package/src/extensions/preview/index.ts +0 -5
  374. package/src/extensions/preview/preview.ts +0 -193
  375. package/src/extensions/replacer.test.ts +0 -75
  376. package/src/extensions/replacer.ts +0 -93
  377. package/src/extensions/scrolling.ts +0 -189
  378. package/src/extensions/selection.ts +0 -100
  379. package/src/extensions/state.ts +0 -7
  380. package/src/extensions/submit.ts +0 -62
  381. package/src/extensions/tab.ts +0 -29
  382. package/src/extensions/tags/extended-markdown.test.ts +0 -262
  383. package/src/extensions/tags/extended-markdown.ts +0 -78
  384. package/src/extensions/tags/index.ts +0 -7
  385. package/src/extensions/tags/streamer.ts +0 -243
  386. package/src/extensions/tags/xml-tags.ts +0 -500
  387. package/src/extensions/tags/xml-util.ts +0 -94
  388. package/src/extensions/typewriter.ts +0 -68
  389. package/src/stories/CommandDialog.stories.tsx +0 -83
  390. package/src/styles/index.ts +0 -7
  391. package/src/styles/markdown.ts +0 -26
  392. package/src/styles/theme.ts +0 -269
  393. package/src/styles/tokens.ts +0 -17
  394. package/src/types/index.ts +0 -5
  395. package/src/types/types.ts +0 -32
  396. package/src/util/cursor.ts +0 -56
  397. package/src/util/debug.ts +0 -69
  398. package/src/util/decorations.ts +0 -21
  399. package/src/util/dom.ts +0 -34
  400. package/src/util/facet.ts +0 -13
@@ -1,500 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { syntaxTree } from '@codemirror/language';
6
- import { Prec } from '@codemirror/state';
7
- import { type EditorState, type Extension, RangeSetBuilder, StateEffect, StateField } from '@codemirror/state';
8
- import { keymap } from '@codemirror/view';
9
- import { Decoration, type DecorationSet, EditorView, ViewPlugin, type ViewUpdate, WidgetType } from '@codemirror/view';
10
- import { type ComponentType, type FC } from 'react';
11
-
12
- import { invariant } from '@dxos/invariant';
13
- import { log } from '@dxos/log';
14
-
15
- import { type Range } from '../../types';
16
- import { decorationSetToArray } from '../../util';
17
- import { scrollToLineEffect } from '../scrolling';
18
-
19
- import { nodeToJson } from './xml-util';
20
-
21
- /**
22
- * StateEffect for navigating to previous bookmark.
23
- */
24
- export const navigatePreviousEffect = StateEffect.define<void>();
25
-
26
- /**
27
- * StateEffect for navigating to next bookmark.
28
- */
29
- export const navigateNextEffect = StateEffect.define<void>();
30
-
31
- /**
32
- * Dispatch function for updating state.
33
- */
34
- export type StateDispatch<T> = T | ((state: T) => T);
35
-
36
- /**
37
- * Manages widget state.
38
- */
39
- export interface XmlWidgetStateManager {
40
- updateWidget<T>(id: string, props: StateDispatch<T>): void;
41
- }
42
-
43
- export type XmlEventHandler<TEvent = any> = (event: TEvent) => void;
44
-
45
- /**
46
- * Widget component.
47
- */
48
- export type XmlWidgetProps<TProps = any, TContext = any> = TProps & {
49
- _tag: string;
50
- context?: TContext;
51
- range?: { from: number; to: number };
52
- view?: EditorView;
53
- onEvent?: XmlEventHandler;
54
- };
55
-
56
- /**
57
- * Factory for creating widgets.
58
- */
59
- export type XmlWidgetFactory = (props: XmlWidgetProps, onEvent?: XmlEventHandler) => WidgetType | null;
60
-
61
- /**
62
- * Widget registry definition.
63
- */
64
- export type XmlWidgetDef = {
65
- /** Block widget. */
66
- block?: boolean;
67
-
68
- /** Native widget (rendered inline). */
69
- factory?: XmlWidgetFactory;
70
-
71
- /** React widget (rendered in portals outside of the editor). */
72
- Component?: FC<XmlWidgetProps>;
73
- };
74
-
75
- export type XmlWidgetRegistry = Record<string, XmlWidgetDef>;
76
-
77
- export const getXmlTextChild = (children: any[]): string | null => {
78
- const child = children?.[0];
79
- return typeof child === 'string' ? child : null;
80
- };
81
-
82
- /**
83
- * Update context.
84
- */
85
- export const xmlTagContextEffect = StateEffect.define<any>();
86
-
87
- /**
88
- * Reset all state.
89
- */
90
- export const xmlTagResetEffect = StateEffect.define();
91
-
92
- /**
93
- * Update widget.
94
- */
95
- export const xmlTagUpdateEffect = StateEffect.define<{ id: string; value: any }>();
96
-
97
- type WidgetDecorationSet = {
98
- from: number;
99
- decorations: DecorationSet;
100
- };
101
-
102
- type XmlWidgetStateMap = Record<string, any>;
103
-
104
- export type XmlWidgetState = {
105
- id: string;
106
- root: HTMLElement;
107
- props: any;
108
- Component: ComponentType<XmlWidgetProps>;
109
- };
110
-
111
- export interface XmlWidgetNotifier {
112
- mounted(widget: XmlWidgetState): void;
113
- unmounted(id: string): void;
114
- }
115
-
116
- /**
117
- * Context state.
118
- */
119
- const widgetContextStateField = StateField.define<any>({
120
- create: () => undefined,
121
- update: (value, tr) => {
122
- for (const effect of tr.effects) {
123
- if (effect.is(xmlTagContextEffect)) {
124
- return effect.value;
125
- }
126
- }
127
-
128
- return value;
129
- },
130
- });
131
-
132
- /**
133
- * Widget state management.
134
- */
135
- const widgetStateMapStateField = StateField.define<XmlWidgetStateMap>({
136
- create: () => ({}),
137
- update: (map, tr) => {
138
- for (const effect of tr.effects) {
139
- if (effect.is(xmlTagResetEffect)) {
140
- return {};
141
- }
142
-
143
- if (effect.is(xmlTagUpdateEffect)) {
144
- // Update accumulated widget props by id.
145
- const { id, value } = effect.value;
146
- log('widget updated', { id, value });
147
- const state = typeof value === 'function' ? value(map[id]) : value;
148
- return { ...map, [id]: state };
149
- }
150
- }
151
-
152
- return map;
153
- },
154
- });
155
-
156
- export type XmlTagsOptions = {
157
- /** Tag registry. */
158
- registry?: XmlWidgetRegistry;
159
-
160
- /** Called when widgets are mounted or unmounted. */
161
- setWidgets?: (widgets: XmlWidgetState[]) => void;
162
-
163
- /** Tags to bookmark. */
164
- bookmarks?: string[];
165
- };
166
-
167
- /**
168
- * Implements custom XML tags via CodeMirror-native Widgets and portaled React components.
169
- *
170
- * Basic mechanism:
171
- * - Decorations are created from XML tags that matched the provided Widget registry.
172
- * - Native widgets are rendered inline.
173
- * - React widgets are rendered in portals outside of the editor via the PlaceholderWidget.
174
- * - Widget state can be update via effects.
175
- * - NOTE: Widget state may be updated BEFORE the widget is mounted.
176
- */
177
- export const xmlTags = ({ registry, setWidgets, bookmarks }: XmlTagsOptions): Extension => {
178
- const notifier = createWidgetMap(setWidgets);
179
- const widgetDecorationsField = createWidgetDecorationsField(registry, notifier);
180
- return [
181
- widgetContextStateField,
182
- widgetStateMapStateField,
183
- widgetDecorationsField,
184
- createWidgetUpdatePlugin(widgetDecorationsField, notifier),
185
- createNavigationEffectPlugin(widgetDecorationsField, bookmarks),
186
- bookmarks?.length ? Prec.highest(keyHandlers) : [],
187
- ];
188
- };
189
-
190
- /**
191
- * Manages the collection of widgets.
192
- */
193
- const createWidgetMap = (setWidgets?: (widgets: XmlWidgetState[]) => void): XmlWidgetNotifier => {
194
- const widgets = new Map<string, XmlWidgetState>();
195
-
196
- // TODO(burdon): Batch updates?
197
- const notifier = {
198
- mounted: (state: XmlWidgetState) => {
199
- log('widget mounted', { id: state.id, tag: state.props._tag });
200
- widgets.set(state.id, state);
201
- setWidgets?.([...widgets.values()]);
202
- },
203
- unmounted: (id: string) => {
204
- const state = widgets.get(id);
205
- log('widget unmounted', { id, tag: state?.props._tag });
206
- widgets.delete(id);
207
- setWidgets?.([...widgets.values()]);
208
- },
209
- } satisfies XmlWidgetNotifier;
210
-
211
- return notifier;
212
- };
213
-
214
- /**
215
- * Navigation keys.
216
- */
217
- const keyHandlers = keymap.of([
218
- {
219
- key: 'Mod-ArrowUp',
220
- run: (view) => {
221
- view.dispatch({ effects: navigatePreviousEffect.of() });
222
- return true;
223
- },
224
- },
225
- {
226
- key: 'Mod-ArrowDown',
227
- run: (view) => {
228
- view.dispatch({ effects: navigateNextEffect.of() });
229
- return true;
230
- },
231
- },
232
- ]);
233
-
234
- /**
235
- * Effect processing plugin for navigation.
236
- * Handles navigation up/down effects.
237
- */
238
- const createNavigationEffectPlugin = (
239
- widgetDecorationsField: StateField<WidgetDecorationSet>,
240
- bookmarks?: string[],
241
- ) => {
242
- return EditorView.updateListener.of((update) => {
243
- update.transactions.forEach((transaction) => {
244
- for (const effect of transaction.effects) {
245
- if (effect.is(navigatePreviousEffect)) {
246
- const view = update.view;
247
- const cursorPos = view.state.doc.lineAt(view.state.selection.main.head).from;
248
- let widget: { from: number; to: number; tag: string } | null = null;
249
- const { decorations } = view.state.field(widgetDecorationsField);
250
- for (const range of decorationSetToArray(decorations)) {
251
- if (range.from < cursorPos) {
252
- const tag = range.value.spec.tag;
253
- if (bookmarks?.includes(tag)) {
254
- if (!widget || range.from > widget.from) {
255
- widget = { from: range.from, to: range.to, tag };
256
- }
257
- }
258
- }
259
- }
260
-
261
- const line = view.state.doc.lineAt(widget?.from ?? 0);
262
- view.dispatch({
263
- selection: { anchor: line.from, head: line.from },
264
- effects: scrollToLineEffect.of({ line: line.number, options: { offset: -16 } }),
265
- });
266
-
267
- continue;
268
- }
269
-
270
- if (effect.is(navigateNextEffect)) {
271
- const view = update.view;
272
- const cursorPos = view.state.doc.lineAt(view.state.selection.main.head).to;
273
- let widget: { from: number; to: number; tag: string } | null = null;
274
- const { decorations } = view.state.field(widgetDecorationsField);
275
- for (const range of decorationSetToArray(decorations)) {
276
- if (range.from > cursorPos) {
277
- const tag = range.value.spec.tag;
278
- if (bookmarks?.includes(tag)) {
279
- if (!widget || range.from < widget.from) {
280
- widget = { from: range.from, to: range.to, tag };
281
- }
282
- }
283
- }
284
- }
285
-
286
- if (widget) {
287
- const line = view.state.doc.lineAt(widget?.from);
288
- view.dispatch({
289
- selection: { anchor: line.to, head: line.to },
290
- effects: scrollToLineEffect.of({ line: line.number, options: { offset: -16 } }),
291
- });
292
- } else {
293
- const line = view.state.doc.lineAt(view.state.doc.length);
294
- view.dispatch({
295
- selection: { anchor: line.to, head: line.to },
296
- effects: scrollToLineEffect.of({ line: line.number, options: { position: 'end' } }),
297
- });
298
- }
299
-
300
- continue;
301
- }
302
- }
303
- });
304
- });
305
- };
306
-
307
- /**
308
- * Handles effect that updates widget state.
309
- */
310
- const createWidgetUpdatePlugin = (
311
- widgetDecorationsField: StateField<WidgetDecorationSet>,
312
- notifier: XmlWidgetNotifier,
313
- ) =>
314
- ViewPlugin.fromClass(
315
- class {
316
- update(update: ViewUpdate) {
317
- const widgetStateMap = update.state.field(widgetStateMapStateField);
318
- const { decorations } = update.state.field(widgetDecorationsField);
319
-
320
- // Check for widget update effects and re-render widgets.
321
- for (const effect of update.transactions.flatMap((tr) => tr.effects)) {
322
- if (effect.is(xmlTagUpdateEffect)) {
323
- const widgetState = widgetStateMap[effect.value.id];
324
-
325
- // Find and render widget.
326
- for (const range of decorationSetToArray(decorations)) {
327
- const deco = range.value;
328
- const widget = deco?.spec?.widget;
329
-
330
- // NOTE: If the widget has not yet been mounted, then the root will be null.
331
- if (widget && widget instanceof PlaceholderWidget && widget.id === effect.value.id && widget.root) {
332
- const props = { ...widget.props, ...widgetState };
333
- notifier.mounted({ id: widget.id, props, root: widget.root, Component: widget.Component });
334
- }
335
- }
336
- }
337
- }
338
- }
339
- },
340
- );
341
-
342
- /**
343
- * Builds and maintains decorations for XML widgets.
344
- * Must be a StateField because block decorations cannot be provided via ViewPlugin.
345
- */
346
- const createWidgetDecorationsField = (registry: XmlWidgetRegistry = {}, notifier: XmlWidgetNotifier) =>
347
- StateField.define<WidgetDecorationSet>({
348
- create: (state) => {
349
- return buildDecorations(state, { from: 0, to: state.doc.length }, registry, notifier);
350
- },
351
- update: ({ from, decorations }, tr) => {
352
- // Check for reset effect.
353
- for (const effect of tr.effects) {
354
- if (effect.is(xmlTagResetEffect)) {
355
- return { from: 0, decorations: Decoration.none };
356
- }
357
- }
358
-
359
- if (tr.docChanged) {
360
- const { state } = tr;
361
- // Flag if the transaction has modified the head of the document.
362
- const reset = tr.changes.touchesRange(0, from);
363
- if (reset) {
364
- log('document reset', { from, to: state.doc.length });
365
- // Full rebuild from start.
366
- return buildDecorations(state, { from: 0, to: state.doc.length }, registry, notifier);
367
- } else {
368
- // Append-only: rebuild decorations from after the last widget and merge with existing decorations.
369
- const result = buildDecorations(state, { from, to: state.doc.length }, registry, notifier);
370
- return {
371
- from: result.from,
372
- decorations: decorations.update({ add: decorationSetToArray(result.decorations) }),
373
- };
374
- }
375
- }
376
-
377
- return { from, decorations };
378
- },
379
- provide: (field) => [
380
- EditorView.decorations.from(field, (v) => v.decorations),
381
- EditorView.atomicRanges.of((view) => view.state.field(field).decorations || Decoration.none),
382
- ],
383
- });
384
-
385
- /**
386
- * Creates widget decorations for XML tags in the document using the syntax tree.
387
- */
388
- const buildDecorations = (
389
- state: EditorState,
390
- range: Range,
391
- registry: XmlWidgetRegistry,
392
- notifier: XmlWidgetNotifier,
393
- ): WidgetDecorationSet => {
394
- const context = state.field(widgetContextStateField, false);
395
- const widgetStateMap = state.field(widgetStateMapStateField, false) ?? {};
396
-
397
- const builder = new RangeSetBuilder<Decoration>();
398
- const tree = syntaxTree(state);
399
- if (!tree || (tree.type.name === 'Program' && tree.length === 0)) {
400
- return { from: range.from, decorations: Decoration.none };
401
- }
402
-
403
- let last = range.from;
404
- tree.iterate({
405
- from: range.from,
406
- to: range.to,
407
- enter: (node) => {
408
- switch (node.type.name) {
409
- // XML Element.
410
- case 'Element': {
411
- try {
412
- const args = nodeToJson(state, node.node);
413
- if (args) {
414
- const def = registry[args._tag];
415
- if (def) {
416
- // NOTE: The widget state may already have been updated before the widget is mounted.
417
- const { block, factory, Component } = def;
418
- const widgetState = args.id ? widgetStateMap[args.id] : undefined;
419
- const nodeRange = { from: node.node.from, to: node.node.to };
420
- const props = { context, range: nodeRange, ...args, ...widgetState } satisfies XmlWidgetProps;
421
-
422
- // Create widget.
423
- const widget: WidgetType | undefined = factory
424
- ? factory(props)
425
- : Component
426
- ? args.id && new PlaceholderWidget(args.id, Component, props, notifier)
427
- : undefined;
428
-
429
- // Add decoration.
430
- if (widget) {
431
- builder.add(
432
- nodeRange.from,
433
- nodeRange.to,
434
- Decoration.replace({
435
- widget,
436
- block,
437
- atomic: true,
438
- inclusive: true,
439
- tag: args._tag,
440
- }),
441
- );
442
-
443
- // Track last widget (NOTE: range is inclusive).
444
- last = nodeRange.to - 1;
445
- }
446
- }
447
- }
448
- } catch (err) {
449
- log.catch(err);
450
- }
451
-
452
- // Don't descend into children.
453
- return false;
454
- }
455
- }
456
- },
457
- });
458
-
459
- return { from: last, decorations: builder.finish() };
460
- };
461
-
462
- /**
463
- * Placeholder for React widgets.
464
- */
465
- class PlaceholderWidget<TProps extends XmlWidgetProps> extends WidgetType {
466
- private _root: HTMLElement | null = null;
467
-
468
- constructor(
469
- public readonly id: string,
470
- public readonly Component: FC<TProps>,
471
- public readonly props: TProps,
472
- private readonly notifier: XmlWidgetNotifier,
473
- ) {
474
- super();
475
- invariant(id);
476
- }
477
-
478
- get root(): HTMLElement | null {
479
- return this._root;
480
- }
481
-
482
- override eq(other: this) {
483
- return this.id === other.id;
484
- }
485
-
486
- override ignoreEvent() {
487
- return true;
488
- }
489
-
490
- override toDOM(_view: EditorView) {
491
- this._root = document.createElement('span');
492
- this.notifier.mounted({ id: this.id, root: this._root, props: this.props, Component: this.Component });
493
- return this._root;
494
- }
495
-
496
- override destroy(_dom: HTMLElement) {
497
- this.notifier.unmounted(this.id);
498
- this._root = null;
499
- }
500
- }
@@ -1,94 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type EditorState } from '@codemirror/state';
6
- import { type SyntaxNode } from '@lezer/common';
7
-
8
- import { invariant } from '@dxos/invariant';
9
-
10
- export type Tag = Record<string, any> & {
11
- _tag: string;
12
- };
13
-
14
- /**
15
- * Parse XML Element.
16
- */
17
- export const nodeToJson = (state: EditorState, node: SyntaxNode): Tag | undefined => {
18
- invariant(node.type.name === 'Element', 'Node is not an Element');
19
-
20
- // Find the opening tag.
21
- const openTag = node.node.getChild('OpenTag') || node.node.getChild('SelfClosingTag');
22
- if (openTag) {
23
- // Extract tag name.
24
- const tagName = openTag.getChild('TagName');
25
- if (!tagName) {
26
- return;
27
- }
28
-
29
- const tag: Tag = {
30
- _tag: state.doc.sliceString(tagName.from, tagName.to),
31
- };
32
-
33
- // Extract attributes.
34
- let attributeNode = openTag.getChild('Attribute');
35
- while (attributeNode) {
36
- const attrName = attributeNode.getChild('AttributeName');
37
- const attrValue = attributeNode.getChild('AttributeValue');
38
- if (attrName) {
39
- const attr = state.doc.sliceString(attrName.from, attrName.to);
40
-
41
- // Default for attributes without values.
42
- let value: string | boolean = true;
43
-
44
- if (attrValue) {
45
- const rawValue = state.doc.sliceString(attrValue.from, attrValue.to);
46
- // Remove quotes if present.
47
- if (
48
- (rawValue.startsWith('"') && rawValue.endsWith('"')) ||
49
- (rawValue.startsWith("'") && rawValue.endsWith("'"))
50
- ) {
51
- value = rawValue.slice(1, -1);
52
- } else {
53
- value = rawValue;
54
- }
55
- }
56
-
57
- tag[attr] = value;
58
- }
59
-
60
- // Get next sibling attribute.
61
- attributeNode = attributeNode.nextSibling;
62
- }
63
-
64
- // Extract children for non-self-closing tags.
65
- if (node.type.name === 'Element' && openTag.type.name !== 'SelfClosingTag') {
66
- const children: any[] = [];
67
- let child = node.node.firstChild;
68
-
69
- while (child) {
70
- // Skip the opening and closing tags.
71
- if (child.type.name !== 'OpenTag' && child.type.name !== 'CloseTag') {
72
- if (child.type.name === 'Text') {
73
- const text = state.doc.sliceString(child.from, child.to).trim();
74
- if (text) {
75
- children.push(text);
76
- }
77
- } else if (child.type.name === 'Element') {
78
- const data = nodeToJson(state, child);
79
- if (data) {
80
- children.push(data);
81
- }
82
- }
83
- }
84
- child = child.nextSibling;
85
- }
86
-
87
- if (children.length > 0) {
88
- tag.children = children;
89
- }
90
- }
91
-
92
- return tag;
93
- }
94
- };
@@ -1,68 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { type Extension } from '@codemirror/state';
6
- import { keymap } from '@codemirror/view';
7
-
8
- // TODO(burdon): Review https://github.com/sergeche/codemirror-movie?tab=readme-ov-file
9
-
10
- export type DemoOptions = {
11
- delay?: number;
12
- items?: string[];
13
- };
14
-
15
- const defaultItems = ['hello world!', 'this is a test.', 'this is [DXOS](https://dxos.org)'];
16
-
17
- /**
18
- * Configurable plugin that let's user cycle through pre-configured input script.
19
- */
20
- export const typewriter = ({ delay = 75, items = defaultItems }: DemoOptions = {}): Extension => {
21
- let t: any;
22
- let idx = 0; // TODO(burdon): Make global.
23
-
24
- return [
25
- keymap.of([
26
- {
27
- // Reset.
28
- key: "alt-meta-'",
29
- run: (view) => {
30
- clearTimeout(t);
31
- idx = 0;
32
- return true;
33
- },
34
- },
35
- {
36
- // Next prompt.
37
- // TODO(burdon): Press 1-9 to select prompt?
38
- key: "Shift-Meta-'",
39
- run: (view) => {
40
- clearTimeout(t);
41
- // TODO(burdon): Add space if needed.
42
- const text = items[idx++];
43
- if (idx === items?.length) {
44
- idx = 0;
45
- }
46
-
47
- let i = 0;
48
- const insert = (d = 0) => {
49
- t = setTimeout(() => {
50
- const pos = view.state.selection.main.head;
51
- view.dispatch({
52
- changes: { from: pos, insert: text[i++] },
53
- selection: { anchor: pos + 1 },
54
- });
55
-
56
- if (i < text.length) {
57
- insert(Math.random() * delay * (text[i] === ' ' ? 2 : 1));
58
- }
59
- }, d);
60
- };
61
-
62
- insert();
63
- return true;
64
- },
65
- },
66
- ]),
67
- ];
68
- };