@dxos/react-ui-editor 0.8.4-main.c4373fc → 0.8.4-main.c85a9c8dae

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 (422) hide show
  1. package/dist/lib/browser/index.mjs +1143 -8424
  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 +1143 -8423
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/components/Editor/Editor.d.ts +43 -21
  8. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  9. package/dist/types/src/components/Editor/Editor.stories.d.ts +23 -0
  10. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  11. package/dist/types/src/components/EditorContent/EditorContent.d.ts +31 -0
  12. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +1 -0
  13. package/dist/types/src/components/EditorContent/controller.d.ts +10 -0
  14. package/dist/types/src/components/EditorContent/controller.d.ts.map +1 -0
  15. package/dist/types/src/components/EditorContent/index.d.ts +3 -0
  16. package/dist/types/src/components/EditorContent/index.d.ts.map +1 -0
  17. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +36 -0
  18. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  20. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  22. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  24. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +46 -0
  26. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  28. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  30. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  32. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  34. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  35. package/dist/types/src/components/EditorToolbar/actions.d.ts +25 -0
  36. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +1 -0
  37. package/dist/types/src/components/EditorToolbar/blocks.d.ts +9 -7
  38. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/formatting.d.ts +9 -7
  40. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/headings.d.ts +9 -7
  42. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/image.d.ts +5 -11
  44. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/index.d.ts +2 -1
  46. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/search.d.ts +5 -11
  48. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +11 -0
  50. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -0
  51. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +10 -8
  52. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  53. package/dist/types/src/components/index.d.ts +4 -2
  54. package/dist/types/src/components/index.d.ts.map +1 -1
  55. package/dist/types/src/hooks/useTextEditor.d.ts +4 -8
  56. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  57. package/dist/types/src/index.d.ts +0 -8
  58. package/dist/types/src/index.d.ts.map +1 -1
  59. package/dist/types/src/{extensions/automerge/automerge.stories.d.ts → stories/Automerge.stories.d.ts} +5 -8
  60. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  61. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -1
  62. package/dist/types/src/stories/Comments.stories.d.ts +4 -3
  63. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  64. package/dist/types/src/stories/EditorToolbar.stories.d.ts +4 -4
  65. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  66. package/dist/types/src/stories/Experimental.stories.d.ts +4 -3
  67. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  68. package/dist/types/src/stories/Markdown.stories.d.ts +4 -3
  69. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  70. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  71. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -5
  72. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  73. package/dist/types/src/stories/Preview.stories.d.ts +5 -3
  74. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  75. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  76. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -4
  77. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  78. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  79. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  80. package/dist/types/src/stories/components/EditorStory.d.ts +9 -18
  81. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  82. package/dist/types/src/stories/components/util.d.ts +3 -3
  83. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  84. package/dist/types/src/translations.d.ts +5 -5
  85. package/dist/types/src/translations.d.ts.map +1 -1
  86. package/dist/types/src/util/index.d.ts +0 -5
  87. package/dist/types/src/util/index.d.ts.map +1 -1
  88. package/dist/types/src/util/react.d.ts +6 -5
  89. package/dist/types/src/util/react.d.ts.map +1 -1
  90. package/dist/types/tsconfig.tsbuildinfo +1 -1
  91. package/package.json +68 -72
  92. package/src/components/Editor/Editor.stories.tsx +95 -0
  93. package/src/components/Editor/Editor.tsx +167 -56
  94. package/src/components/EditorContent/EditorContent.tsx +83 -0
  95. package/src/components/EditorContent/controller.ts +50 -0
  96. package/src/components/EditorContent/index.ts +6 -0
  97. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +228 -0
  98. package/src/components/EditorMenuProvider/index.ts +10 -0
  99. package/src/components/EditorMenuProvider/menu-presets.ts +124 -0
  100. package/src/components/EditorMenuProvider/menu.ts +70 -0
  101. package/src/components/EditorMenuProvider/popover.ts +285 -0
  102. package/src/components/EditorMenuProvider/useEditorMenu.ts +179 -0
  103. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  104. package/src/components/EditorPreviewProvider/index.ts +5 -0
  105. package/src/components/EditorToolbar/EditorToolbar.tsx +102 -105
  106. package/src/components/EditorToolbar/{lists.ts → actions.ts} +48 -17
  107. package/src/components/EditorToolbar/blocks.ts +7 -7
  108. package/src/components/EditorToolbar/formatting.ts +7 -7
  109. package/src/components/EditorToolbar/headings.ts +20 -17
  110. package/src/components/EditorToolbar/image.ts +10 -3
  111. package/src/components/EditorToolbar/index.ts +3 -7
  112. package/src/components/EditorToolbar/search.ts +10 -3
  113. package/src/components/EditorToolbar/useEditorToolbar.ts +20 -0
  114. package/src/components/EditorToolbar/view-mode.ts +7 -6
  115. package/src/components/index.ts +6 -2
  116. package/src/hooks/useTextEditor.ts +33 -27
  117. package/src/index.ts +0 -10
  118. package/src/stories/Automerge.stories.tsx +174 -0
  119. package/src/stories/CommandDialog.stories.tsx +18 -26
  120. package/src/stories/Comments.stories.tsx +48 -44
  121. package/src/stories/EditorToolbar.stories.tsx +36 -21
  122. package/src/stories/Experimental.stories.tsx +6 -8
  123. package/src/stories/Markdown.stories.tsx +16 -16
  124. package/src/stories/Outliner.stories.tsx +20 -21
  125. package/src/stories/Popover.stories.tsx +158 -0
  126. package/src/stories/Preview.stories.tsx +100 -81
  127. package/src/stories/Tags.stories.tsx +36 -13
  128. package/src/stories/TextEditor.stories.tsx +16 -48
  129. package/src/stories/Theme.stories.tsx +61 -0
  130. package/src/stories/components/EditorStory.tsx +32 -25
  131. package/src/stories/components/util.tsx +60 -31
  132. package/src/translations.ts +4 -4
  133. package/src/util/index.ts +1 -6
  134. package/src/util/react.tsx +8 -13
  135. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  136. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  137. package/dist/lib/browser/testing/index.mjs +0 -76
  138. package/dist/lib/browser/testing/index.mjs.map +0 -7
  139. package/dist/lib/browser/types/index.mjs +0 -13
  140. package/dist/lib/browser/types/index.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  142. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  143. package/dist/lib/node-esm/testing/index.mjs +0 -78
  144. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  145. package/dist/lib/node-esm/types/index.mjs +0 -14
  146. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  147. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts +0 -38
  148. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts.map +0 -1
  149. package/dist/types/src/components/CommandMenu/index.d.ts +0 -2
  150. package/dist/types/src/components/CommandMenu/index.d.ts.map +0 -1
  151. package/dist/types/src/components/EditorToolbar/lists.d.ts +0 -19
  152. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +0 -1
  153. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  154. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  155. package/dist/types/src/defaults.d.ts +0 -14
  156. package/dist/types/src/defaults.d.ts.map +0 -1
  157. package/dist/types/src/extensions/annotations.d.ts +0 -9
  158. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  159. package/dist/types/src/extensions/autocomplete.d.ts +0 -26
  160. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  161. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  162. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  163. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  164. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  165. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  166. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  167. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  168. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  169. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  170. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  171. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  172. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  173. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  174. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  175. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  176. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  177. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  178. package/dist/types/src/extensions/autoscroll.d.ts +0 -10
  179. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  180. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  181. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  182. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  183. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  184. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  185. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  186. package/dist/types/src/extensions/blast.d.ts +0 -25
  187. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  188. package/dist/types/src/extensions/command-dialog/action.d.ts +0 -17
  189. package/dist/types/src/extensions/command-dialog/action.d.ts.map +0 -1
  190. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts +0 -6
  191. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts.map +0 -1
  192. package/dist/types/src/extensions/command-dialog/hint.d.ts +0 -19
  193. package/dist/types/src/extensions/command-dialog/hint.d.ts.map +0 -1
  194. package/dist/types/src/extensions/command-dialog/index.d.ts +0 -4
  195. package/dist/types/src/extensions/command-dialog/index.d.ts.map +0 -1
  196. package/dist/types/src/extensions/command-dialog/state.d.ts +0 -16
  197. package/dist/types/src/extensions/command-dialog/state.d.ts.map +0 -1
  198. package/dist/types/src/extensions/command-dialog/typeahead.d.ts +0 -22
  199. package/dist/types/src/extensions/command-dialog/typeahead.d.ts.map +0 -1
  200. package/dist/types/src/extensions/command-menu/command-menu.d.ts +0 -20
  201. package/dist/types/src/extensions/command-menu/command-menu.d.ts.map +0 -1
  202. package/dist/types/src/extensions/command-menu/index.d.ts +0 -3
  203. package/dist/types/src/extensions/command-menu/index.d.ts.map +0 -1
  204. package/dist/types/src/extensions/command-menu/placeholder.d.ts +0 -10
  205. package/dist/types/src/extensions/command-menu/placeholder.d.ts.map +0 -1
  206. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts +0 -24
  207. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts.map +0 -1
  208. package/dist/types/src/extensions/comments.d.ts +0 -95
  209. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  210. package/dist/types/src/extensions/debug.d.ts +0 -3
  211. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  212. package/dist/types/src/extensions/dnd.d.ts +0 -9
  213. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  214. package/dist/types/src/extensions/factories.d.ts +0 -83
  215. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  216. package/dist/types/src/extensions/floating-menu.d.ts +0 -7
  217. package/dist/types/src/extensions/floating-menu.d.ts.map +0 -1
  218. package/dist/types/src/extensions/focus.d.ts +0 -7
  219. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  220. package/dist/types/src/extensions/folding.d.ts +0 -7
  221. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  222. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  223. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  224. package/dist/types/src/extensions/index.d.ts +0 -27
  225. package/dist/types/src/extensions/index.d.ts.map +0 -1
  226. package/dist/types/src/extensions/json.d.ts +0 -7
  227. package/dist/types/src/extensions/json.d.ts.map +0 -1
  228. package/dist/types/src/extensions/listener.d.ts +0 -11
  229. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  230. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  231. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  232. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  233. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  234. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  235. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  236. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  237. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  238. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  239. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  240. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  241. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  243. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  245. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  247. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  249. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  251. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  253. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  255. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  256. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  257. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  258. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  259. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  260. package/dist/types/src/extensions/mention.d.ts +0 -7
  261. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  262. package/dist/types/src/extensions/modes.d.ts +0 -10
  263. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  264. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  265. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  266. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  267. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  268. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  269. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  270. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  271. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  272. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  273. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  274. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  275. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  277. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  279. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  280. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  281. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  282. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  283. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  284. package/dist/types/src/extensions/preview/preview.d.ts +0 -29
  285. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  286. package/dist/types/src/extensions/selection.d.ts +0 -24
  287. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  288. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  289. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  290. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  291. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  292. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  293. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  294. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  295. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  296. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -72
  297. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  298. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  299. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  300. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  301. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  302. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  303. package/dist/types/src/styles/index.d.ts +0 -4
  304. package/dist/types/src/styles/index.d.ts.map +0 -1
  305. package/dist/types/src/styles/markdown.d.ts +0 -8
  306. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  307. package/dist/types/src/styles/theme.d.ts +0 -38
  308. package/dist/types/src/styles/theme.d.ts.map +0 -1
  309. package/dist/types/src/styles/tokens.d.ts +0 -3
  310. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  311. package/dist/types/src/testing/PreviewPopover.d.ts +0 -20
  312. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  313. package/dist/types/src/testing/index.d.ts +0 -3
  314. package/dist/types/src/testing/index.d.ts.map +0 -1
  315. package/dist/types/src/testing/util.d.ts +0 -3
  316. package/dist/types/src/testing/util.d.ts.map +0 -1
  317. package/dist/types/src/types/index.d.ts +0 -2
  318. package/dist/types/src/types/index.d.ts.map +0 -1
  319. package/dist/types/src/types/types.d.ts +0 -21
  320. package/dist/types/src/types/types.d.ts.map +0 -1
  321. package/dist/types/src/util/cursor.d.ts +0 -31
  322. package/dist/types/src/util/cursor.d.ts.map +0 -1
  323. package/dist/types/src/util/debug.d.ts +0 -17
  324. package/dist/types/src/util/debug.d.ts.map +0 -1
  325. package/dist/types/src/util/decorations.d.ts +0 -4
  326. package/dist/types/src/util/decorations.d.ts.map +0 -1
  327. package/dist/types/src/util/dom.d.ts +0 -10
  328. package/dist/types/src/util/dom.d.ts.map +0 -1
  329. package/dist/types/src/util/facet.d.ts +0 -3
  330. package/dist/types/src/util/facet.d.ts.map +0 -1
  331. package/src/components/CommandMenu/CommandMenu.tsx +0 -348
  332. package/src/components/CommandMenu/index.ts +0 -5
  333. package/src/components/EditorToolbar/util.ts +0 -76
  334. package/src/defaults.ts +0 -52
  335. package/src/extensions/annotations.ts +0 -55
  336. package/src/extensions/autocomplete.ts +0 -219
  337. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  338. package/src/extensions/automerge/automerge.test.tsx +0 -78
  339. package/src/extensions/automerge/automerge.ts +0 -86
  340. package/src/extensions/automerge/cursor.ts +0 -28
  341. package/src/extensions/automerge/defs.ts +0 -31
  342. package/src/extensions/automerge/index.ts +0 -5
  343. package/src/extensions/automerge/sync.ts +0 -75
  344. package/src/extensions/automerge/update-automerge.ts +0 -50
  345. package/src/extensions/automerge/update-codemirror.ts +0 -115
  346. package/src/extensions/autoscroll.ts +0 -157
  347. package/src/extensions/awareness/awareness-provider.ts +0 -127
  348. package/src/extensions/awareness/awareness.ts +0 -315
  349. package/src/extensions/awareness/index.ts +0 -6
  350. package/src/extensions/blast.ts +0 -363
  351. package/src/extensions/command-dialog/action.ts +0 -55
  352. package/src/extensions/command-dialog/command-dialog.ts +0 -34
  353. package/src/extensions/command-dialog/hint.ts +0 -103
  354. package/src/extensions/command-dialog/index.ts +0 -7
  355. package/src/extensions/command-dialog/state.ts +0 -90
  356. package/src/extensions/command-dialog/typeahead.ts +0 -129
  357. package/src/extensions/command-menu/command-menu.ts +0 -210
  358. package/src/extensions/command-menu/index.ts +0 -6
  359. package/src/extensions/command-menu/placeholder.ts +0 -113
  360. package/src/extensions/command-menu/useCommandMenu.ts +0 -134
  361. package/src/extensions/comments.ts +0 -597
  362. package/src/extensions/debug.ts +0 -15
  363. package/src/extensions/dnd.ts +0 -37
  364. package/src/extensions/factories.ts +0 -284
  365. package/src/extensions/floating-menu.ts +0 -126
  366. package/src/extensions/focus.ts +0 -36
  367. package/src/extensions/folding.tsx +0 -44
  368. package/src/extensions/hashtag.tsx +0 -68
  369. package/src/extensions/index.ts +0 -30
  370. package/src/extensions/json.ts +0 -57
  371. package/src/extensions/listener.ts +0 -38
  372. package/src/extensions/markdown/action.ts +0 -117
  373. package/src/extensions/markdown/bundle.ts +0 -93
  374. package/src/extensions/markdown/changes.test.ts +0 -26
  375. package/src/extensions/markdown/changes.ts +0 -149
  376. package/src/extensions/markdown/debug.ts +0 -44
  377. package/src/extensions/markdown/decorate.ts +0 -601
  378. package/src/extensions/markdown/formatting.test.ts +0 -498
  379. package/src/extensions/markdown/formatting.ts +0 -1267
  380. package/src/extensions/markdown/highlight.ts +0 -183
  381. package/src/extensions/markdown/image.ts +0 -118
  382. package/src/extensions/markdown/index.ts +0 -13
  383. package/src/extensions/markdown/link.ts +0 -50
  384. package/src/extensions/markdown/parser.test.ts +0 -75
  385. package/src/extensions/markdown/styles.ts +0 -135
  386. package/src/extensions/markdown/table.ts +0 -150
  387. package/src/extensions/mention.ts +0 -41
  388. package/src/extensions/modes.ts +0 -41
  389. package/src/extensions/outliner/commands.ts +0 -270
  390. package/src/extensions/outliner/editor.test.ts +0 -33
  391. package/src/extensions/outliner/editor.ts +0 -184
  392. package/src/extensions/outliner/index.ts +0 -7
  393. package/src/extensions/outliner/outliner.test.ts +0 -100
  394. package/src/extensions/outliner/outliner.ts +0 -167
  395. package/src/extensions/outliner/selection.ts +0 -50
  396. package/src/extensions/outliner/tree.test.ts +0 -168
  397. package/src/extensions/outliner/tree.ts +0 -317
  398. package/src/extensions/preview/index.ts +0 -5
  399. package/src/extensions/preview/preview.ts +0 -190
  400. package/src/extensions/selection.ts +0 -100
  401. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  402. package/src/extensions/tags/extended-markdown.ts +0 -78
  403. package/src/extensions/tags/index.ts +0 -7
  404. package/src/extensions/tags/streamer.ts +0 -243
  405. package/src/extensions/tags/xml-tags.ts +0 -393
  406. package/src/extensions/tags/xml-util.ts +0 -94
  407. package/src/extensions/typewriter.ts +0 -68
  408. package/src/stories/CommandMenu.stories.tsx +0 -158
  409. package/src/styles/index.ts +0 -7
  410. package/src/styles/markdown.ts +0 -26
  411. package/src/styles/theme.ts +0 -268
  412. package/src/styles/tokens.ts +0 -17
  413. package/src/testing/PreviewPopover.tsx +0 -78
  414. package/src/testing/index.ts +0 -6
  415. package/src/testing/util.ts +0 -7
  416. package/src/types/index.ts +0 -5
  417. package/src/types/types.ts +0 -32
  418. package/src/util/cursor.ts +0 -56
  419. package/src/util/debug.ts +0 -64
  420. package/src/util/decorations.ts +0 -21
  421. package/src/util/dom.ts +0 -34
  422. package/src/util/facet.ts +0 -13
@@ -1,601 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { syntaxTree } from '@codemirror/language';
6
- import { type EditorState, Prec, RangeSetBuilder, StateEffect } from '@codemirror/state';
7
- import { Decoration, type DecorationSet, EditorView, ViewPlugin, type ViewUpdate, WidgetType } from '@codemirror/view';
8
- import { type SyntaxNodeRef } from '@lezer/common';
9
-
10
- import { invariant } from '@dxos/invariant';
11
- import { mx } from '@dxos/react-ui-theme';
12
-
13
- import { type HeadingLevel, theme } from '../../styles';
14
- import { type RenderCallback } from '../../types';
15
- import { wrapWithCatch } from '../../util';
16
-
17
- import { adjustChanges } from './changes';
18
- import { image } from './image';
19
- import { bulletListIndentationWidth, formattingStyles, orderedListIndentationWidth } from './styles';
20
- import { table } from './table';
21
-
22
- /**
23
- * Unicode characters.
24
- * NOTE: Depends on font.
25
- * https://www.compart.com/en/unicode (nice resource).
26
- * https://en.wikipedia.org/wiki/List_of_Unicode_characters
27
- */
28
- const Unicode = {
29
- emDash: '\u2014',
30
- bullet: '\u2022',
31
- bulletSmall: '\u2219',
32
- bulletSquare: '\u2b1d',
33
- };
34
-
35
- //
36
- // Widgets
37
- //
38
-
39
- class HorizontalRuleWidget extends WidgetType {
40
- override toDOM(): HTMLSpanElement {
41
- const el = document.createElement('span');
42
- el.className = 'cm-hr';
43
- return el;
44
- }
45
- }
46
-
47
- class LinkButton extends WidgetType {
48
- constructor(
49
- private readonly url: string,
50
- private readonly render: RenderCallback<{ url: string }>,
51
- ) {
52
- super();
53
- }
54
-
55
- override eq(other: this): boolean {
56
- return this.url === other.url;
57
- }
58
-
59
- // TODO(burdon): Create icon and link directly without react?
60
- override toDOM(view: EditorView): HTMLSpanElement {
61
- const el = document.createElement('span');
62
- this.render(el, { url: this.url }, view);
63
- return el;
64
- }
65
- }
66
-
67
- class CheckboxWidget extends WidgetType {
68
- constructor(private _checked: boolean) {
69
- super();
70
- }
71
-
72
- override eq(other: this): boolean {
73
- return this._checked === other._checked;
74
- }
75
-
76
- override toDOM(view: EditorView): HTMLSpanElement {
77
- const input = document.createElement('input');
78
- input.className = 'cm-task-checkbox dx-checkbox';
79
- input.type = 'checkbox';
80
- input.tabIndex = -1;
81
- input.checked = this._checked;
82
- if (view.state.readOnly) {
83
- input.setAttribute('disabled', 'true');
84
- } else {
85
- input.onmousedown = (event: Event) => {
86
- // Could be beginning of line.
87
- const line = view.state.doc.lineAt(view.posAtDOM(span));
88
- const text = view.state.sliceDoc(line.from, line.to);
89
- const match = text.match(/^\s*- (\[[xX ]]).*/);
90
- if (match) {
91
- const [, checked] = match;
92
- const pos = line.from + text.indexOf(checked);
93
- this._checked = checked !== '[ ]';
94
- view.dispatch({
95
- changes: { from: pos + 1, to: pos + 2, insert: this._checked ? ' ' : 'x' },
96
- });
97
-
98
- event.preventDefault();
99
- }
100
- };
101
- }
102
-
103
- const span = document.createElement('span');
104
- span.className = 'cm-task';
105
- span.appendChild(input);
106
- return span;
107
- }
108
-
109
- override ignoreEvent(): boolean {
110
- return false;
111
- }
112
- }
113
-
114
- class TextWidget extends WidgetType {
115
- constructor(
116
- private readonly text: string,
117
- private readonly className?: string,
118
- ) {
119
- super();
120
- }
121
-
122
- override toDOM(): HTMLSpanElement {
123
- const el = document.createElement('span');
124
- if (this.className) {
125
- el.className = this.className;
126
- }
127
- el.innerText = this.text;
128
- return el;
129
- }
130
- }
131
-
132
- const hide = Decoration.replace({});
133
- const blockQuote = Decoration.line({ class: 'cm-blockquote' });
134
- const fencedCodeLine = Decoration.line({ class: 'cm-code cm-codeblock-line' });
135
- const fencedCodeLineFirst = Decoration.line({ class: mx('cm-code cm-codeblock-line', 'cm-codeblock-start') });
136
- const fencedCodeLineLast = Decoration.line({ class: mx('cm-code cm-codeblock-line', 'cm-codeblock-end') });
137
- const commentBlockLine = fencedCodeLine;
138
- const commentBlockLineFirst = fencedCodeLineFirst;
139
- const commentBlockLineLast = fencedCodeLineLast;
140
- const horizontalRule = Decoration.replace({ widget: new HorizontalRuleWidget() });
141
- const checkedTask = Decoration.replace({ widget: new CheckboxWidget(true) });
142
- const uncheckedTask = Decoration.replace({ widget: new CheckboxWidget(false) });
143
-
144
- /**
145
- * Checks if cursor is inside text.
146
- */
147
- const editingRange = (state: EditorState, range: { from: number; to: number }, focus: boolean) => {
148
- const {
149
- readOnly,
150
- selection: {
151
- main: { head },
152
- },
153
- } = state;
154
- return focus && !readOnly && head >= range.from && head <= range.to;
155
- };
156
-
157
- const autoHideTags = new Set([
158
- 'CodeMark',
159
- 'CodeInfo',
160
- 'EmphasisMark',
161
- 'StrikethroughMark',
162
- 'SubscriptMark',
163
- 'SuperscriptMark',
164
- ]);
165
-
166
- /**
167
- * Markdown list level.
168
- */
169
- type NumberingLevel = { type: string; from: number; to: number; level: number; number: number };
170
-
171
- const buildDecorations = (view: EditorView, options: DecorateOptions, focus: boolean) => {
172
- const deco = new RangeSetBuilder<Decoration>();
173
- const atomicDeco = new RangeSetBuilder<Decoration>();
174
- const { state } = view;
175
-
176
- // Header numbering.
177
- // TODO(burdon): Pre-parse headers to allow virtualization.
178
- const headerLevels: (NumberingLevel | null)[] = [];
179
- const getHeaderLevels = (node: SyntaxNodeRef, level: number): (NumberingLevel | null)[] => {
180
- invariant(level > 0);
181
- if (level > headerLevels.length) {
182
- const len = headerLevels.length;
183
- headerLevels.length = level;
184
- headerLevels.fill(null, len);
185
- headerLevels[level - 1] = { type: node.name, from: node.from, to: node.to, level, number: 0 };
186
- } else {
187
- headerLevels.splice(level);
188
- }
189
-
190
- return headerLevels.slice(0, level);
191
- };
192
-
193
- // List numbering and indentation.
194
- const listLevels: NumberingLevel[] = [];
195
- const enterList = (node: SyntaxNodeRef) => {
196
- listLevels.push({ type: node.name, from: node.from, to: node.to, level: listLevels.length, number: 0 });
197
- };
198
- const leaveList = () => {
199
- listLevels.pop();
200
- };
201
- const getCurrentListLevel = (): NumberingLevel => {
202
- invariant(listLevels.length);
203
- return listLevels[listLevels.length - 1];
204
- };
205
-
206
- // let count = 0;
207
- const enterNode = (node: SyntaxNodeRef) => {
208
- // console.log(`[${count++}]`, { node: node.name, from: node.from, to: node.to });
209
- switch (node.name) {
210
- // ATXHeading > HeaderMark > Paragraph
211
- // NOTE: Numbering requires processing the entire document since otherwise only the visible range will be
212
- // processed and the numbering will be incorrect.
213
- case 'ATXHeading1':
214
- case 'ATXHeading2':
215
- case 'ATXHeading3':
216
- case 'ATXHeading4':
217
- case 'ATXHeading5':
218
- case 'ATXHeading6': {
219
- const level = parseInt(node.name['ATXHeading'.length]) as HeadingLevel;
220
- const headers = getHeaderLevels(node, level);
221
- if (options.numberedHeadings?.from !== undefined) {
222
- const header = headers[level - 1];
223
- // TODO(burdon): Header will be missing if headers are out of order (e.g., ## header then # header).
224
- if (header) {
225
- header.number++;
226
- }
227
- }
228
-
229
- const editing = editingRange(state, node, focus);
230
- if (editing) {
231
- break;
232
- }
233
-
234
- const mark = node.node.firstChild!;
235
- if (mark?.name === 'HeaderMark') {
236
- const { from, to = 6 } = options.numberedHeadings ?? {};
237
- const text = state.sliceDoc(node.from, node.to);
238
- const len = text.match(/[#\s]+/)![0].length;
239
- if (!from || level < from || level > to) {
240
- atomicDeco.add(mark.from, mark.from + len, hide);
241
- } else {
242
- // TODO(burdon): Number format/style.
243
- const num =
244
- headers
245
- .slice(from - 1)
246
- .map((level) => level?.number ?? 0)
247
- .join('.') + ' ';
248
-
249
- if (num.length) {
250
- atomicDeco.add(
251
- mark.from,
252
- mark.from + len,
253
- Decoration.replace({
254
- widget: new TextWidget(num, theme.heading(level)),
255
- }),
256
- );
257
- }
258
- }
259
- }
260
-
261
- return false;
262
- }
263
-
264
- //
265
- // Lists.
266
- // [BulletList | OrderedList] > (ListItem > ListMark) > (Task > TaskMarker)?
267
- //
268
-
269
- case 'BulletList':
270
- case 'OrderedList': {
271
- enterList(node);
272
- break;
273
- }
274
-
275
- case 'ListItem': {
276
- const line = state.doc.lineAt(node.from);
277
-
278
- // Set indentation.
279
- const list = getCurrentListLevel();
280
- const width = list.type === 'OrderedList' ? orderedListIndentationWidth : bulletListIndentationWidth;
281
- const offset = (options?.listPaddingLeft ?? 0) + ((list.level ?? 0) + 1) * width;
282
- if (node.from === line.to - 1) {
283
- // Abort if only the hyphen is typed.
284
- return false;
285
- }
286
-
287
- // Add line decoration for the continuation indent.
288
- // TODO(burdon): Bug if indentation is more than one indentation unit (e.g., 4 spaces) from the previous line.
289
- deco.add(
290
- line.from,
291
- line.from,
292
- Decoration.line({
293
- class: 'cm-list-item',
294
- attributes: {
295
- style: `padding-left: ${offset}px; text-indent: -${width}px;`,
296
- },
297
- }),
298
- );
299
-
300
- break;
301
- }
302
-
303
- case 'ListMark': {
304
- const list = getCurrentListLevel();
305
-
306
- // Look-ahead for task marker.
307
- // NOTE: Requires space to exist (otherwise the text is parsed as the start of a link).
308
- const next = tree.resolve(node.to + 1, 1);
309
- if (next?.name === 'TaskMarker') {
310
- break;
311
- }
312
-
313
- // TODO(burdon): Option to make hierarchical; or a), i), etc.
314
- const label = list.type === 'OrderedList' ? `${++list.number}.` : Unicode.bulletSmall;
315
- const line = state.doc.lineAt(node.from);
316
- const to = state.doc.sliceString(node.to, node.to + 1) === ' ' ? node.to + 1 : node.to;
317
- atomicDeco.add(
318
- line.from,
319
- to,
320
- Decoration.replace({
321
- widget: new TextWidget(
322
- label,
323
- list.type === 'OrderedList' ? 'cm-list-mark cm-list-mark-ordered' : 'cm-list-mark cm-list-mark-bullet',
324
- ),
325
- }),
326
- );
327
- break;
328
- }
329
-
330
- case 'TaskMarker': {
331
- const checked = state.doc.sliceString(node.from + 1, node.to - 1) === 'x';
332
- // Check if the next character is a space and if so, include it in the replacement.
333
- const line = state.doc.lineAt(node.from);
334
- const to = state.doc.sliceString(node.to, node.to + 1) === ' ' ? node.to + 1 : node.to;
335
- atomicDeco.add(line.from, to, checked ? checkedTask : uncheckedTask);
336
- break;
337
- }
338
-
339
- //
340
- // Blockquote > QuoteMark > Paragraph
341
- //
342
-
343
- case 'Blockquote': {
344
- const editing = editingRange(state, node, focus);
345
- const quoteMark = node.node.getChild('QuoteMark');
346
- const paragraph = node.node.getChild('Paragraph');
347
- if (!editing && quoteMark && paragraph) {
348
- atomicDeco.add(quoteMark.from, paragraph.from, hide);
349
- }
350
-
351
- for (const block of view.viewportLineBlocks) {
352
- if (block.to < node.from) {
353
- continue;
354
- }
355
- if (block.from > node.to) {
356
- break;
357
- }
358
-
359
- deco.add(block.from, block.from, blockQuote);
360
- }
361
-
362
- break;
363
- }
364
-
365
- //
366
- // CommentBlock
367
- //
368
-
369
- case 'CommentBlock': {
370
- const editing = editingRange(state, node, focus);
371
- for (const block of view.viewportLineBlocks) {
372
- if (block.to < node.from) {
373
- continue;
374
- }
375
- if (block.from > node.to) {
376
- break;
377
- }
378
-
379
- const isFirst = block.from <= node.from;
380
- const isLast = block.to >= node.to && /^(\s>)*-->$/.test(state.doc.sliceString(block.from, block.to));
381
-
382
- deco.add(
383
- block.from,
384
- block.from,
385
- isFirst ? commentBlockLineFirst : isLast ? commentBlockLineLast : commentBlockLine,
386
- );
387
-
388
- if (!editing && (isFirst || isLast)) {
389
- atomicDeco.add(block.from, block.to, hide);
390
- }
391
- }
392
- break;
393
- }
394
-
395
- //
396
- // FencedCode > CodeMark > [CodeInfo] > CodeText > CodeMark
397
- //
398
-
399
- case 'FencedCode': {
400
- for (const block of view.viewportLineBlocks) {
401
- if (block.to < node.from) {
402
- continue;
403
- }
404
- if (block.from > node.to) {
405
- break;
406
- }
407
-
408
- const first = block.from <= node.from;
409
- const last = block.to >= node.to && /```$/.test(state.doc.sliceString(block.from, block.to));
410
- deco.add(block.from, block.from, first ? fencedCodeLineFirst : last ? fencedCodeLineLast : fencedCodeLine);
411
-
412
- const editing = editingRange(state, node, focus);
413
- if (!editing && (first || last)) {
414
- atomicDeco.add(block.from, block.to, hide);
415
- }
416
- }
417
- return false;
418
- }
419
-
420
- //
421
- // Link > [LinkMark, URL]
422
- //
423
-
424
- case 'Link': {
425
- const marks = node.node.getChildren('LinkMark');
426
- const urlNode = node.node.getChild('URL');
427
- const editing = editingRange(state, node, focus);
428
- if (urlNode && marks.length >= 2) {
429
- const url = state.sliceDoc(urlNode.from, urlNode.to);
430
- if (options.skip?.({ name: 'Link', url })) {
431
- break;
432
- }
433
- if (!editing) {
434
- atomicDeco.add(node.from, marks[0].to, hide);
435
- }
436
-
437
- deco.add(
438
- marks[0].to,
439
- marks[1].from,
440
- Decoration.mark({
441
- tagName: 'a',
442
- attributes: {
443
- class: 'cm-link',
444
- href: url,
445
- rel: 'noreferrer',
446
- target: '_blank',
447
- },
448
- }),
449
- );
450
-
451
- if (!editing) {
452
- atomicDeco.add(
453
- marks[1].from,
454
- node.to,
455
- options.renderLinkButton
456
- ? Decoration.replace({ widget: new LinkButton(url, options.renderLinkButton) })
457
- : hide,
458
- );
459
- }
460
- }
461
- break;
462
- }
463
-
464
- //
465
- // HR
466
- //
467
-
468
- case 'HorizontalRule': {
469
- if (!editingRange(state, node, focus)) {
470
- deco.add(node.from, node.to, horizontalRule);
471
- }
472
- break;
473
- }
474
-
475
- default: {
476
- if (autoHideTags.has(node.name)) {
477
- if (!editingRange(state, node.node.parent!, focus)) {
478
- atomicDeco.add(node.from, node.to, hide);
479
- }
480
- }
481
- }
482
- }
483
- };
484
-
485
- const leaveNode = (node: SyntaxNodeRef) => {
486
- switch (node.name) {
487
- case 'BulletList':
488
- case 'OrderedList': {
489
- leaveList();
490
- break;
491
- }
492
- }
493
- };
494
-
495
- const tree = syntaxTree(state);
496
- if (options.numberedHeadings?.from === undefined) {
497
- for (const { from, to } of view.visibleRanges) {
498
- tree.iterate({
499
- from,
500
- to,
501
- enter: wrapWithCatch(enterNode, 'decorate.enter'),
502
- leave: wrapWithCatch(leaveNode, 'decorate.leave'),
503
- });
504
- }
505
- } else {
506
- // NOTE: If line numbering then we must iterate from the start of document.
507
- tree.iterate({
508
- enter: wrapWithCatch(enterNode, 'decorate.enter'),
509
- leave: wrapWithCatch(leaveNode, 'decorate.leave'),
510
- });
511
- }
512
-
513
- return {
514
- deco: deco.finish(),
515
- atomicDeco: atomicDeco.finish(),
516
- };
517
- };
518
-
519
- const forceUpdate = StateEffect.define<null>();
520
-
521
- export type NodeData = { name: 'Link'; url: string } | { name: 'Image'; url: string };
522
-
523
- export interface DecorateOptions {
524
- /**
525
- * Prevents triggering decorations as the cursor moves through the document.
526
- */
527
- selectionChangeDelay?: number;
528
- numberedHeadings?: { from: number; to?: number };
529
- // TODO(burdon): Additional padding for each line.
530
- listPaddingLeft?: number;
531
- // TODO(burdon): Use consistently.
532
- skip?: (node: NodeData) => boolean;
533
- // TODO(burdon): Remove.
534
- renderLinkButton?: RenderCallback<{ url: string }>;
535
- }
536
-
537
- export const decorateMarkdown = (options: DecorateOptions = {}) => {
538
- return [
539
- ViewPlugin.fromClass(
540
- class {
541
- deco: DecorationSet;
542
- atomicDeco: DecorationSet;
543
- pendingUpdate?: NodeJS.Timeout;
544
-
545
- constructor(view: EditorView) {
546
- ({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations(view, options, view.hasFocus));
547
- }
548
-
549
- update(update: ViewUpdate) {
550
- if (
551
- update.docChanged ||
552
- update.viewportChanged ||
553
- update.focusChanged ||
554
- update.transactions.some((tr) => tr.effects.some((effect) => effect.is(forceUpdate))) ||
555
- (update.selectionSet && !options.selectionChangeDelay)
556
- ) {
557
- ({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations(
558
- update.view,
559
- options,
560
- update.view.hasFocus,
561
- ));
562
-
563
- this.clearUpdate();
564
- } else if (update.selectionSet) {
565
- this.scheduleUpdate(update.view);
566
- }
567
- }
568
-
569
- // Defer update in case moving through the document.
570
- scheduleUpdate(view: EditorView) {
571
- this.clearUpdate();
572
- this.pendingUpdate = setTimeout(() => {
573
- view.dispatch({ effects: forceUpdate.of(null) });
574
- }, options.selectionChangeDelay);
575
- }
576
-
577
- clearUpdate() {
578
- if (this.pendingUpdate) {
579
- clearTimeout(this.pendingUpdate);
580
- this.pendingUpdate = undefined;
581
- }
582
- }
583
-
584
- destroy() {
585
- this.clearUpdate();
586
- }
587
- },
588
- {
589
- provide: (plugin) => [
590
- Prec.low(EditorView.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration.none)),
591
- EditorView.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration.none),
592
- EditorView.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration.none),
593
- ],
594
- },
595
- ),
596
- image(),
597
- table(),
598
- adjustChanges(),
599
- formattingStyles,
600
- ];
601
- };