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

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 (404) hide show
  1. package/dist/lib/browser/index.mjs +718 -8598
  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 +711 -8590
  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/blocks.d.ts +3 -16
  27. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  28. package/dist/types/src/components/EditorToolbar/formatting.d.ts +3 -16
  29. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  30. package/dist/types/src/components/EditorToolbar/headings.d.ts +3 -16
  31. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  32. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  33. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  34. package/dist/types/src/components/EditorToolbar/index.d.ts +0 -1
  35. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  36. package/dist/types/src/components/EditorToolbar/lists.d.ts +6 -0
  37. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -0
  38. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  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 +4 -17
  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/stories/Automerge.stories.d.ts +44 -0
  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 +27 -27
  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 +26 -26
  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 +17 -12
  83. package/src/components/Editor/Editor.tsx +21 -10
  84. package/src/components/EditorContent/EditorContent.tsx +19 -7
  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 +33 -66
  93. package/src/components/EditorToolbar/blocks.ts +54 -48
  94. package/src/components/EditorToolbar/formatting.ts +45 -48
  95. package/src/components/EditorToolbar/headings.ts +43 -50
  96. package/src/components/EditorToolbar/image.ts +16 -14
  97. package/src/components/EditorToolbar/index.ts +0 -1
  98. package/src/components/EditorToolbar/lists.ts +57 -0
  99. package/src/components/EditorToolbar/search.ts +16 -14
  100. package/src/components/EditorToolbar/useEditorToolbar.ts +6 -6
  101. package/src/components/EditorToolbar/view-mode.ts +35 -42
  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 -43
  107. package/src/stories/EditorToolbar.stories.tsx +57 -27
  108. package/src/stories/Experimental.stories.tsx +10 -12
  109. package/src/stories/Markdown.stories.tsx +16 -16
  110. package/src/stories/Outliner.stories.tsx +8 -10
  111. package/src/stories/Popover.stories.tsx +27 -32
  112. package/src/stories/Preview.stories.tsx +67 -53
  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 +31 -30
  117. package/src/stories/components/util.tsx +51 -52
  118. package/src/translations.ts +30 -25
  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/components/EditorToolbar/actions.d.ts +0 -39
  134. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +0 -1
  135. package/dist/types/src/defaults.d.ts +0 -14
  136. package/dist/types/src/defaults.d.ts.map +0 -1
  137. package/dist/types/src/extensions/annotations.d.ts +0 -9
  138. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  139. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -17
  140. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  141. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  142. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  143. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  144. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  145. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  146. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  147. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  148. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  149. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  150. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  151. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  152. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  153. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  154. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  155. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  156. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  157. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  158. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  159. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  160. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  161. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  162. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  163. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  164. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  165. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  166. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  167. package/dist/types/src/extensions/autoscroll.d.ts +0 -20
  168. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  169. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  170. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  171. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  172. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  173. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  174. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  175. package/dist/types/src/extensions/blast.d.ts +0 -25
  176. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  177. package/dist/types/src/extensions/blocks.d.ts +0 -2
  178. package/dist/types/src/extensions/blocks.d.ts.map +0 -1
  179. package/dist/types/src/extensions/bookmarks.d.ts +0 -12
  180. package/dist/types/src/extensions/bookmarks.d.ts.map +0 -1
  181. package/dist/types/src/extensions/comments.d.ts +0 -95
  182. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  183. package/dist/types/src/extensions/debug.d.ts +0 -3
  184. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  185. package/dist/types/src/extensions/dnd.d.ts +0 -9
  186. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  187. package/dist/types/src/extensions/factories.d.ts +0 -83
  188. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  189. package/dist/types/src/extensions/focus.d.ts +0 -7
  190. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  191. package/dist/types/src/extensions/folding.d.ts +0 -7
  192. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  193. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  194. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  195. package/dist/types/src/extensions/index.d.ts +0 -32
  196. package/dist/types/src/extensions/index.d.ts.map +0 -1
  197. package/dist/types/src/extensions/json.d.ts +0 -7
  198. package/dist/types/src/extensions/json.d.ts.map +0 -1
  199. package/dist/types/src/extensions/listener.d.ts +0 -13
  200. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  201. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  202. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  203. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  204. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  205. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  206. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  207. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  208. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  209. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  210. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  211. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  212. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  213. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -61
  214. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  215. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  216. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  217. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  218. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  219. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  220. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  221. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  222. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  223. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  224. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  225. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  226. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  227. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  228. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  229. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  230. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  231. package/dist/types/src/extensions/mention.d.ts +0 -7
  232. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  233. package/dist/types/src/extensions/modal.d.ts +0 -7
  234. package/dist/types/src/extensions/modal.d.ts.map +0 -1
  235. package/dist/types/src/extensions/modes.d.ts +0 -10
  236. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  237. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  238. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  239. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  240. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  241. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  242. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  243. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  244. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  245. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  246. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  247. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  248. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  249. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  250. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  251. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  252. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  253. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  254. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  255. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  256. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  257. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  258. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  259. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  260. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  261. package/dist/types/src/extensions/replacer.d.ts +0 -21
  262. package/dist/types/src/extensions/replacer.d.ts.map +0 -1
  263. package/dist/types/src/extensions/replacer.test.d.ts +0 -2
  264. package/dist/types/src/extensions/replacer.test.d.ts.map +0 -1
  265. package/dist/types/src/extensions/scrolling.d.ts +0 -78
  266. package/dist/types/src/extensions/scrolling.d.ts.map +0 -1
  267. package/dist/types/src/extensions/selection.d.ts +0 -24
  268. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  269. package/dist/types/src/extensions/state.d.ts +0 -2
  270. package/dist/types/src/extensions/state.d.ts.map +0 -1
  271. package/dist/types/src/extensions/submit.d.ts +0 -10
  272. package/dist/types/src/extensions/submit.d.ts.map +0 -1
  273. package/dist/types/src/extensions/tab.d.ts +0 -4
  274. package/dist/types/src/extensions/tab.d.ts.map +0 -1
  275. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  276. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  277. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  278. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  279. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  280. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  281. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  282. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  283. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -97
  284. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  285. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  286. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  287. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  288. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  289. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  290. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  291. package/dist/types/src/styles/index.d.ts +0 -4
  292. package/dist/types/src/styles/index.d.ts.map +0 -1
  293. package/dist/types/src/styles/markdown.d.ts +0 -8
  294. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  295. package/dist/types/src/styles/theme.d.ts +0 -38
  296. package/dist/types/src/styles/theme.d.ts.map +0 -1
  297. package/dist/types/src/styles/tokens.d.ts +0 -3
  298. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  299. package/dist/types/src/types/index.d.ts +0 -2
  300. package/dist/types/src/types/index.d.ts.map +0 -1
  301. package/dist/types/src/types/types.d.ts +0 -21
  302. package/dist/types/src/types/types.d.ts.map +0 -1
  303. package/dist/types/src/util/cursor.d.ts +0 -31
  304. package/dist/types/src/util/cursor.d.ts.map +0 -1
  305. package/dist/types/src/util/debug.d.ts +0 -21
  306. package/dist/types/src/util/debug.d.ts.map +0 -1
  307. package/dist/types/src/util/decorations.d.ts +0 -4
  308. package/dist/types/src/util/decorations.d.ts.map +0 -1
  309. package/dist/types/src/util/dom.d.ts +0 -10
  310. package/dist/types/src/util/dom.d.ts.map +0 -1
  311. package/dist/types/src/util/facet.d.ts +0 -3
  312. package/dist/types/src/util/facet.d.ts.map +0 -1
  313. package/src/components/EditorContent/EditorContent.stories.tsx +0 -70
  314. package/src/components/EditorMenuProvider/util.ts +0 -31
  315. package/src/components/EditorToolbar/actions.ts +0 -86
  316. package/src/defaults.ts +0 -52
  317. package/src/extensions/annotations.ts +0 -55
  318. package/src/extensions/autocomplete/autocomplete.ts +0 -151
  319. package/src/extensions/autocomplete/index.ts +0 -8
  320. package/src/extensions/autocomplete/match.ts +0 -46
  321. package/src/extensions/autocomplete/placeholder.ts +0 -117
  322. package/src/extensions/autocomplete/typeahead.ts +0 -87
  323. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  324. package/src/extensions/automerge/automerge.test.tsx +0 -78
  325. package/src/extensions/automerge/automerge.ts +0 -105
  326. package/src/extensions/automerge/cursor.ts +0 -28
  327. package/src/extensions/automerge/defs.ts +0 -31
  328. package/src/extensions/automerge/index.ts +0 -5
  329. package/src/extensions/automerge/sync.ts +0 -79
  330. package/src/extensions/automerge/update-automerge.ts +0 -50
  331. package/src/extensions/automerge/update-codemirror.ts +0 -115
  332. package/src/extensions/autoscroll.ts +0 -163
  333. package/src/extensions/awareness/awareness-provider.ts +0 -127
  334. package/src/extensions/awareness/awareness.ts +0 -315
  335. package/src/extensions/awareness/index.ts +0 -6
  336. package/src/extensions/blast.ts +0 -363
  337. package/src/extensions/blocks.ts +0 -131
  338. package/src/extensions/bookmarks.ts +0 -75
  339. package/src/extensions/comments.ts +0 -598
  340. package/src/extensions/debug.ts +0 -15
  341. package/src/extensions/dnd.ts +0 -37
  342. package/src/extensions/factories.ts +0 -278
  343. package/src/extensions/focus.ts +0 -36
  344. package/src/extensions/folding.tsx +0 -43
  345. package/src/extensions/hashtag.tsx +0 -68
  346. package/src/extensions/index.ts +0 -35
  347. package/src/extensions/json.ts +0 -57
  348. package/src/extensions/listener.ts +0 -32
  349. package/src/extensions/markdown/action.ts +0 -117
  350. package/src/extensions/markdown/bundle.ts +0 -105
  351. package/src/extensions/markdown/changes.test.ts +0 -26
  352. package/src/extensions/markdown/changes.ts +0 -149
  353. package/src/extensions/markdown/debug.ts +0 -44
  354. package/src/extensions/markdown/decorate.ts +0 -601
  355. package/src/extensions/markdown/formatting.test.ts +0 -498
  356. package/src/extensions/markdown/formatting.ts +0 -1265
  357. package/src/extensions/markdown/highlight.ts +0 -183
  358. package/src/extensions/markdown/image.ts +0 -118
  359. package/src/extensions/markdown/index.ts +0 -13
  360. package/src/extensions/markdown/link.ts +0 -50
  361. package/src/extensions/markdown/parser.test.ts +0 -75
  362. package/src/extensions/markdown/styles.ts +0 -135
  363. package/src/extensions/markdown/table.ts +0 -150
  364. package/src/extensions/mention.ts +0 -41
  365. package/src/extensions/modal.ts +0 -24
  366. package/src/extensions/modes.ts +0 -41
  367. package/src/extensions/outliner/commands.ts +0 -270
  368. package/src/extensions/outliner/editor.test.ts +0 -33
  369. package/src/extensions/outliner/editor.ts +0 -184
  370. package/src/extensions/outliner/index.ts +0 -7
  371. package/src/extensions/outliner/menu.ts +0 -128
  372. package/src/extensions/outliner/outliner.test.ts +0 -100
  373. package/src/extensions/outliner/outliner.ts +0 -167
  374. package/src/extensions/outliner/selection.ts +0 -50
  375. package/src/extensions/outliner/tree.test.ts +0 -168
  376. package/src/extensions/outliner/tree.ts +0 -317
  377. package/src/extensions/preview/index.ts +0 -5
  378. package/src/extensions/preview/preview.ts +0 -193
  379. package/src/extensions/replacer.test.ts +0 -75
  380. package/src/extensions/replacer.ts +0 -93
  381. package/src/extensions/scrolling.ts +0 -189
  382. package/src/extensions/selection.ts +0 -100
  383. package/src/extensions/state.ts +0 -7
  384. package/src/extensions/submit.ts +0 -62
  385. package/src/extensions/tab.ts +0 -29
  386. package/src/extensions/tags/extended-markdown.test.ts +0 -262
  387. package/src/extensions/tags/extended-markdown.ts +0 -78
  388. package/src/extensions/tags/index.ts +0 -7
  389. package/src/extensions/tags/streamer.ts +0 -243
  390. package/src/extensions/tags/xml-tags.ts +0 -500
  391. package/src/extensions/tags/xml-util.ts +0 -94
  392. package/src/extensions/typewriter.ts +0 -68
  393. package/src/stories/CommandDialog.stories.tsx +0 -83
  394. package/src/styles/index.ts +0 -7
  395. package/src/styles/markdown.ts +0 -26
  396. package/src/styles/theme.ts +0 -269
  397. package/src/styles/tokens.ts +0 -17
  398. package/src/types/index.ts +0 -5
  399. package/src/types/types.ts +0 -32
  400. package/src/util/cursor.ts +0 -56
  401. package/src/util/debug.ts +0 -69
  402. package/src/util/decorations.ts +0 -21
  403. package/src/util/dom.ts +0 -34
  404. 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
- };