@dxos/react-ui-editor 0.8.4-main.f9ba587 → 0.8.4-main.fcfe5033a5

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 +1384 -7468
  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 +1534 -7617
  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 +42 -15
  8. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  9. package/dist/types/src/components/Editor/Editor.stories.d.ts +23 -0
  10. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  11. package/dist/types/src/components/Editor/EditorView.d.ts +31 -0
  12. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  13. package/dist/types/src/components/Editor/controller.d.ts +10 -0
  14. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  15. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +34 -0
  16. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  17. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  18. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  20. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  22. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +46 -0
  24. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  26. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  28. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  30. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  32. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  33. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  34. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  35. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  36. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  37. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  38. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  40. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  42. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -17
  44. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  46. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/types.d.ts +5 -0
  48. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  49. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  50. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  51. package/dist/types/src/components/index.d.ts +2 -2
  52. package/dist/types/src/components/index.d.ts.map +1 -1
  53. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  54. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  55. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  56. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  57. package/dist/types/src/extensions/index.d.ts +1 -22
  58. package/dist/types/src/extensions/index.d.ts.map +1 -1
  59. package/dist/types/src/hooks/useTextEditor.d.ts +6 -10
  60. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  61. package/dist/types/src/index.d.ts +0 -7
  62. package/dist/types/src/index.d.ts.map +1 -1
  63. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  64. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  65. package/dist/types/src/stories/Comments.stories.d.ts +22 -10
  66. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  67. package/dist/types/src/stories/EditorToolbar.stories.d.ts +42 -4
  68. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  69. package/dist/types/src/stories/Experimental.stories.d.ts +23 -13
  70. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  71. package/dist/types/src/stories/Markdown.stories.d.ts +33 -43
  72. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  73. package/dist/types/src/stories/Outliner.stories.d.ts +16 -22
  74. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  75. package/dist/types/src/stories/Popover.stories.d.ts +20 -0
  76. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  77. package/dist/types/src/stories/Preview.stories.d.ts +23 -7
  78. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Tags.stories.d.ts +16 -0
  80. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -0
  81. package/dist/types/src/stories/TextEditor.stories.d.ts +38 -52
  82. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  84. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  85. package/dist/types/src/stories/components/EditorStory.d.ts +11 -23
  86. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  87. package/dist/types/src/stories/components/util.d.ts +3 -3
  88. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  89. package/dist/types/src/translations.d.ts +26 -26
  90. package/dist/types/src/translations.d.ts.map +1 -1
  91. package/dist/types/src/util/index.d.ts +0 -4
  92. package/dist/types/src/util/index.d.ts.map +1 -1
  93. package/dist/types/src/util/react.d.ts +7 -6
  94. package/dist/types/src/util/react.d.ts.map +1 -1
  95. package/dist/types/tsconfig.tsbuildinfo +1 -1
  96. package/package.json +87 -80
  97. package/src/components/Editor/Editor.stories.tsx +89 -0
  98. package/src/components/Editor/Editor.tsx +177 -24
  99. package/src/components/Editor/EditorView.tsx +83 -0
  100. package/src/components/Editor/controller.ts +50 -0
  101. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +226 -0
  102. package/src/components/EditorMenuProvider/index.ts +10 -0
  103. package/src/components/EditorMenuProvider/menu-presets.ts +125 -0
  104. package/src/components/EditorMenuProvider/menu.ts +70 -0
  105. package/src/components/EditorMenuProvider/popover.ts +285 -0
  106. package/src/components/EditorMenuProvider/useEditorMenu.ts +180 -0
  107. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  108. package/src/components/EditorPreviewProvider/index.ts +5 -0
  109. package/src/components/EditorToolbar/EditorToolbar.tsx +90 -103
  110. package/src/components/EditorToolbar/blocks.ts +52 -48
  111. package/src/components/EditorToolbar/formatting.ts +43 -48
  112. package/src/components/EditorToolbar/headings.ts +46 -45
  113. package/src/components/EditorToolbar/image.ts +16 -10
  114. package/src/components/EditorToolbar/index.ts +2 -7
  115. package/src/components/EditorToolbar/lists.ts +39 -41
  116. package/src/components/EditorToolbar/search.ts +16 -10
  117. package/src/components/EditorToolbar/types.ts +7 -0
  118. package/src/components/EditorToolbar/view-mode.ts +39 -40
  119. package/src/components/index.ts +3 -2
  120. package/src/extensions/Assistant.stories.tsx +111 -0
  121. package/src/extensions/assistant-extension.tsx +223 -0
  122. package/src/extensions/index.ts +2 -23
  123. package/src/hooks/useTextEditor.ts +39 -45
  124. package/src/index.ts +0 -9
  125. package/src/stories/Automerge.stories.tsx +173 -0
  126. package/src/stories/Comments.stories.tsx +58 -51
  127. package/src/stories/EditorToolbar.stories.tsx +48 -61
  128. package/src/stories/Experimental.stories.tsx +21 -19
  129. package/src/stories/Markdown.stories.tsx +37 -33
  130. package/src/stories/Outliner.stories.tsx +54 -44
  131. package/src/stories/Popover.stories.tsx +157 -0
  132. package/src/stories/Preview.stories.tsx +114 -95
  133. package/src/stories/Tags.stories.tsx +104 -0
  134. package/src/stories/TextEditor.stories.tsx +50 -75
  135. package/src/stories/Theme.stories.tsx +61 -0
  136. package/src/stories/components/EditorStory.tsx +48 -35
  137. package/src/stories/components/util.tsx +90 -59
  138. package/src/translations.ts +30 -25
  139. package/src/util/index.ts +1 -5
  140. package/src/util/react.tsx +9 -14
  141. package/dist/lib/browser/chunk-22UMM3QJ.mjs +0 -22
  142. package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +0 -7
  143. package/dist/lib/browser/testing/index.mjs +0 -6
  144. package/dist/lib/browser/testing/index.mjs.map +0 -7
  145. package/dist/lib/browser/types/index.mjs +0 -13
  146. package/dist/lib/browser/types/index.mjs.map +0 -7
  147. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs +0 -24
  148. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +0 -7
  149. package/dist/lib/node-esm/testing/index.mjs +0 -8
  150. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  151. package/dist/lib/node-esm/types/index.mjs +0 -14
  152. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  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/components/Popover/CommandMenu.d.ts +0 -34
  156. package/dist/types/src/components/Popover/CommandMenu.d.ts.map +0 -1
  157. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts +0 -21
  158. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts.map +0 -1
  159. package/dist/types/src/components/Popover/RefPopover.d.ts +0 -34
  160. package/dist/types/src/components/Popover/RefPopover.d.ts.map +0 -1
  161. package/dist/types/src/components/Popover/index.d.ts +0 -4
  162. package/dist/types/src/components/Popover/index.d.ts.map +0 -1
  163. package/dist/types/src/defaults.d.ts +0 -14
  164. package/dist/types/src/defaults.d.ts.map +0 -1
  165. package/dist/types/src/extensions/annotations.d.ts +0 -9
  166. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  167. package/dist/types/src/extensions/autocomplete.d.ts +0 -13
  168. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  169. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  170. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  171. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -56
  172. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  173. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  174. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  175. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  176. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  177. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  178. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  179. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  180. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  181. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  182. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  183. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  184. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  185. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  186. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  187. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  188. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  189. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  190. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  191. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  192. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  193. package/dist/types/src/extensions/blast.d.ts +0 -25
  194. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  195. package/dist/types/src/extensions/command/action.d.ts +0 -17
  196. package/dist/types/src/extensions/command/action.d.ts.map +0 -1
  197. package/dist/types/src/extensions/command/command-menu.d.ts +0 -20
  198. package/dist/types/src/extensions/command/command-menu.d.ts.map +0 -1
  199. package/dist/types/src/extensions/command/command.d.ts +0 -6
  200. package/dist/types/src/extensions/command/command.d.ts.map +0 -1
  201. package/dist/types/src/extensions/command/floating-menu.d.ts +0 -7
  202. package/dist/types/src/extensions/command/floating-menu.d.ts.map +0 -1
  203. package/dist/types/src/extensions/command/hint.d.ts +0 -24
  204. package/dist/types/src/extensions/command/hint.d.ts.map +0 -1
  205. package/dist/types/src/extensions/command/index.d.ts +0 -7
  206. package/dist/types/src/extensions/command/index.d.ts.map +0 -1
  207. package/dist/types/src/extensions/command/placeholder.d.ts +0 -10
  208. package/dist/types/src/extensions/command/placeholder.d.ts.map +0 -1
  209. package/dist/types/src/extensions/command/state.d.ts +0 -16
  210. package/dist/types/src/extensions/command/state.d.ts.map +0 -1
  211. package/dist/types/src/extensions/command/typeahead.d.ts +0 -22
  212. package/dist/types/src/extensions/command/typeahead.d.ts.map +0 -1
  213. package/dist/types/src/extensions/command/useCommandMenu.d.ts +0 -26
  214. package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +0 -1
  215. package/dist/types/src/extensions/comments.d.ts +0 -95
  216. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  217. package/dist/types/src/extensions/debug.d.ts +0 -3
  218. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  219. package/dist/types/src/extensions/dnd.d.ts +0 -9
  220. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  221. package/dist/types/src/extensions/factories.d.ts +0 -82
  222. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  223. package/dist/types/src/extensions/focus.d.ts +0 -7
  224. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  225. package/dist/types/src/extensions/folding.d.ts +0 -7
  226. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  227. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  228. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  229. package/dist/types/src/extensions/json.d.ts +0 -7
  230. package/dist/types/src/extensions/json.d.ts.map +0 -1
  231. package/dist/types/src/extensions/listener.d.ts +0 -11
  232. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  233. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  234. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  235. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -16
  236. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  237. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  238. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  239. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  240. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  241. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  242. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  243. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -17
  244. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  245. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  246. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  247. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  248. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  249. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  250. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  251. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  252. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  253. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  254. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  255. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  256. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  257. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  258. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  259. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  260. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  261. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  262. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  263. package/dist/types/src/extensions/mention.d.ts +0 -7
  264. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  265. package/dist/types/src/extensions/modes.d.ts +0 -10
  266. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  267. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  268. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  269. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  270. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  271. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  272. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  273. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  274. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  275. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  276. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  277. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  278. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  279. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  280. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  281. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  282. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  283. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  284. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  285. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  286. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  287. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  288. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  289. package/dist/types/src/extensions/selection.d.ts +0 -24
  290. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  291. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  292. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  293. package/dist/types/src/stories/Command.stories.d.ts +0 -7
  294. package/dist/types/src/stories/Command.stories.d.ts.map +0 -1
  295. package/dist/types/src/stories/CommandMenu.stories.d.ts +0 -13
  296. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  297. package/dist/types/src/styles/index.d.ts +0 -4
  298. package/dist/types/src/styles/index.d.ts.map +0 -1
  299. package/dist/types/src/styles/markdown.d.ts +0 -8
  300. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  301. package/dist/types/src/styles/theme.d.ts +0 -38
  302. package/dist/types/src/styles/theme.d.ts.map +0 -1
  303. package/dist/types/src/styles/tokens.d.ts +0 -3
  304. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  305. package/dist/types/src/testing/index.d.ts +0 -2
  306. package/dist/types/src/testing/index.d.ts.map +0 -1
  307. package/dist/types/src/testing/util.d.ts +0 -2
  308. package/dist/types/src/testing/util.d.ts.map +0 -1
  309. package/dist/types/src/types/index.d.ts +0 -2
  310. package/dist/types/src/types/index.d.ts.map +0 -1
  311. package/dist/types/src/types/types.d.ts +0 -21
  312. package/dist/types/src/types/types.d.ts.map +0 -1
  313. package/dist/types/src/util/cursor.d.ts +0 -31
  314. package/dist/types/src/util/cursor.d.ts.map +0 -1
  315. package/dist/types/src/util/debug.d.ts +0 -17
  316. package/dist/types/src/util/debug.d.ts.map +0 -1
  317. package/dist/types/src/util/dom.d.ts +0 -20
  318. package/dist/types/src/util/dom.d.ts.map +0 -1
  319. package/dist/types/src/util/facet.d.ts +0 -3
  320. package/dist/types/src/util/facet.d.ts.map +0 -1
  321. package/src/components/EditorToolbar/util.ts +0 -65
  322. package/src/components/Popover/CommandMenu.tsx +0 -279
  323. package/src/components/Popover/RefDropdownMenu.tsx +0 -85
  324. package/src/components/Popover/RefPopover.tsx +0 -99
  325. package/src/components/Popover/index.ts +0 -7
  326. package/src/defaults.ts +0 -49
  327. package/src/extensions/annotations.ts +0 -55
  328. package/src/extensions/autocomplete.ts +0 -69
  329. package/src/extensions/automerge/automerge.stories.tsx +0 -142
  330. package/src/extensions/automerge/automerge.test.tsx +0 -78
  331. package/src/extensions/automerge/automerge.ts +0 -85
  332. package/src/extensions/automerge/cursor.ts +0 -28
  333. package/src/extensions/automerge/defs.ts +0 -31
  334. package/src/extensions/automerge/index.ts +0 -5
  335. package/src/extensions/automerge/sync.ts +0 -75
  336. package/src/extensions/automerge/update-automerge.ts +0 -50
  337. package/src/extensions/automerge/update-codemirror.ts +0 -115
  338. package/src/extensions/awareness/awareness-provider.ts +0 -127
  339. package/src/extensions/awareness/awareness.ts +0 -315
  340. package/src/extensions/awareness/index.ts +0 -6
  341. package/src/extensions/blast.ts +0 -363
  342. package/src/extensions/command/action.ts +0 -56
  343. package/src/extensions/command/command-menu.ts +0 -210
  344. package/src/extensions/command/command.ts +0 -34
  345. package/src/extensions/command/floating-menu.ts +0 -133
  346. package/src/extensions/command/hint.ts +0 -102
  347. package/src/extensions/command/index.ts +0 -10
  348. package/src/extensions/command/placeholder.ts +0 -113
  349. package/src/extensions/command/state.ts +0 -89
  350. package/src/extensions/command/typeahead.ts +0 -129
  351. package/src/extensions/command/useCommandMenu.ts +0 -118
  352. package/src/extensions/comments.ts +0 -592
  353. package/src/extensions/debug.ts +0 -15
  354. package/src/extensions/dnd.ts +0 -37
  355. package/src/extensions/factories.ts +0 -259
  356. package/src/extensions/focus.ts +0 -35
  357. package/src/extensions/folding.tsx +0 -46
  358. package/src/extensions/hashtag.tsx +0 -68
  359. package/src/extensions/json.ts +0 -57
  360. package/src/extensions/listener.ts +0 -38
  361. package/src/extensions/markdown/action.ts +0 -116
  362. package/src/extensions/markdown/bundle.ts +0 -71
  363. package/src/extensions/markdown/changes.test.ts +0 -26
  364. package/src/extensions/markdown/changes.ts +0 -149
  365. package/src/extensions/markdown/debug.ts +0 -44
  366. package/src/extensions/markdown/decorate.ts +0 -591
  367. package/src/extensions/markdown/formatting.test.ts +0 -498
  368. package/src/extensions/markdown/formatting.ts +0 -1267
  369. package/src/extensions/markdown/highlight.ts +0 -183
  370. package/src/extensions/markdown/image.ts +0 -119
  371. package/src/extensions/markdown/index.ts +0 -13
  372. package/src/extensions/markdown/link.ts +0 -47
  373. package/src/extensions/markdown/parser.test.ts +0 -75
  374. package/src/extensions/markdown/styles.ts +0 -135
  375. package/src/extensions/markdown/table.ts +0 -144
  376. package/src/extensions/mention.ts +0 -41
  377. package/src/extensions/modes.ts +0 -41
  378. package/src/extensions/outliner/commands.ts +0 -270
  379. package/src/extensions/outliner/editor.test.ts +0 -33
  380. package/src/extensions/outliner/editor.ts +0 -184
  381. package/src/extensions/outliner/index.ts +0 -7
  382. package/src/extensions/outliner/outliner.test.ts +0 -99
  383. package/src/extensions/outliner/outliner.ts +0 -166
  384. package/src/extensions/outliner/selection.ts +0 -50
  385. package/src/extensions/outliner/tree.test.ts +0 -167
  386. package/src/extensions/outliner/tree.ts +0 -317
  387. package/src/extensions/preview/index.ts +0 -5
  388. package/src/extensions/preview/preview.ts +0 -193
  389. package/src/extensions/selection.ts +0 -100
  390. package/src/extensions/typewriter.ts +0 -68
  391. package/src/stories/Command.stories.tsx +0 -97
  392. package/src/stories/CommandMenu.stories.tsx +0 -159
  393. package/src/styles/index.ts +0 -7
  394. package/src/styles/markdown.ts +0 -26
  395. package/src/styles/theme.ts +0 -266
  396. package/src/styles/tokens.ts +0 -17
  397. package/src/testing/index.ts +0 -5
  398. package/src/testing/util.ts +0 -5
  399. package/src/types/index.ts +0 -5
  400. package/src/types/types.ts +0 -32
  401. package/src/util/cursor.ts +0 -55
  402. package/src/util/debug.ts +0 -64
  403. package/src/util/dom.ts +0 -56
  404. package/src/util/facet.ts +0 -13
@@ -1,144 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { syntaxTree } from '@codemirror/language';
6
- import {
7
- type EditorState,
8
- type Extension,
9
- type RangeSet,
10
- RangeSetBuilder,
11
- StateField,
12
- type Transaction,
13
- } from '@codemirror/state';
14
- import { Decoration, EditorView, WidgetType } from '@codemirror/view';
15
-
16
- // TODO(burdon): Snippet to create basic table.
17
- // https://codemirror.net/docs/ref/#autocomplete.snippet
18
- // TODO(burdon): Advanced formatting (left/right/center).
19
- // TODO(burdon): Editor to auto balance columns.
20
-
21
- export type TableOptions = {};
22
-
23
- /**
24
- * GFM tables.
25
- * https://github.github.com/gfm/#tables-extension
26
- */
27
- export const table = (options: TableOptions = {}): Extension => {
28
- return StateField.define<RangeSet<Decoration>>({
29
- create: (state) => update(state, options),
30
- update: (_: RangeSet<Decoration>, tr: Transaction) => update(tr.state, options),
31
- provide: (field) => EditorView.decorations.from(field),
32
- });
33
- };
34
-
35
- type Table = {
36
- from: number;
37
- to: number;
38
- header?: string[];
39
- rows?: string[][];
40
- };
41
-
42
- const update = (state: EditorState, _options: TableOptions) => {
43
- const builder = new RangeSetBuilder<Decoration>();
44
- const cursor = state.selection.main.head;
45
-
46
- const tables: Table[] = [];
47
- const getTable = () => tables[tables.length - 1];
48
- const getRow = () => {
49
- const table = getTable();
50
- return table.rows?.[table.rows.length - 1];
51
- };
52
-
53
- // Parse table.
54
- syntaxTree(state).iterate({
55
- enter: (node) => {
56
- // Check if cursor is inside text.
57
- switch (node.name) {
58
- case 'Table': {
59
- tables.push({ from: node.from, to: node.to });
60
- break;
61
- }
62
- case 'TableHeader': {
63
- getTable().header = [];
64
- break;
65
- }
66
- case 'TableRow': {
67
- (getTable().rows ??= []).push([]);
68
- break;
69
- }
70
- case 'TableCell': {
71
- const row = getRow();
72
- if (row) {
73
- row.push(state.sliceDoc(node.from, node.to));
74
- } else {
75
- getTable().header?.push(state.sliceDoc(node.from, node.to));
76
- }
77
- break;
78
- }
79
- }
80
- },
81
- });
82
-
83
- tables.forEach((table) => {
84
- const replace = state.readOnly || cursor < table.from || cursor > table.to;
85
- if (replace) {
86
- builder.add(
87
- table.from,
88
- table.to,
89
- Decoration.replace({
90
- block: true,
91
- widget: new TableWidget(table),
92
- }),
93
- );
94
- } else {
95
- // Add class for styling.
96
- // TODO(burdon): Apply to each line?
97
- builder.add(table.from, table.to, Decoration.mark({ class: 'cm-table' }));
98
- }
99
- });
100
-
101
- return builder.finish();
102
- };
103
-
104
- class TableWidget extends WidgetType {
105
- constructor(readonly _table: Table) {
106
- super();
107
- }
108
-
109
- override eq(other: this): boolean {
110
- return (
111
- this._table.header?.join() === other._table.header?.join() &&
112
- this._table.rows?.join() === other._table.rows?.join()
113
- );
114
- }
115
-
116
- override toDOM(view: EditorView): HTMLDivElement {
117
- const div = document.createElement('div');
118
- const table = div.appendChild(document.createElement('table'));
119
-
120
- const header = table.appendChild(document.createElement('thead'));
121
- const tr = header.appendChild(document.createElement('tr'));
122
- this._table.header?.forEach((cell) => {
123
- const th = document.createElement('th');
124
- th.setAttribute('class', 'cm-table-head');
125
- tr.appendChild(th).textContent = cell;
126
- });
127
-
128
- const body = table.appendChild(document.createElement('tbody'));
129
- this._table.rows?.forEach((row) => {
130
- const tr = body.appendChild(document.createElement('tr'));
131
- row.forEach((cell) => {
132
- const td = document.createElement('td');
133
- td.setAttribute('class', 'cm-table-cell');
134
- tr.appendChild(td).textContent = cell;
135
- });
136
- });
137
-
138
- return div;
139
- }
140
-
141
- override ignoreEvent(e: Event): boolean {
142
- return !/^mouse/.test(e.type);
143
- }
144
- }
@@ -1,41 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { autocompletion, type CompletionContext, type CompletionResult } from '@codemirror/autocomplete';
6
- import type { Extension } from '@codemirror/state';
7
-
8
- import { log } from '@dxos/log';
9
-
10
- export type MentionOptions = {
11
- debug?: boolean;
12
- onSearch: (text: string) => string[];
13
- };
14
-
15
- // TODO(burdon): Can only have a single autocompletion. Merge configuration with autocomplete.
16
- export const mention = ({ debug, onSearch }: MentionOptions): Extension => {
17
- return autocompletion({
18
- // TODO(burdon): Not working.
19
- activateOnTyping: true,
20
- // activateOnTypingDelay: 100,
21
- // selectOnOpen: true,
22
- closeOnBlur: !debug,
23
- // defaultKeymap: false,
24
- icons: false,
25
- override: [
26
- (context: CompletionContext): CompletionResult | null => {
27
- log.info('completion context', { context });
28
-
29
- const match = context.matchBefore(/@(\w+)?/);
30
- if (!match || (match.from === match.to && !context.explicit)) {
31
- return null;
32
- }
33
-
34
- return {
35
- from: match.from,
36
- options: onSearch(match.text.slice(1).toLowerCase()).map((value) => ({ label: `@${value}` })),
37
- };
38
- },
39
- ],
40
- });
41
- };
@@ -1,41 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type Extension } from '@codemirror/state';
6
- import { keymap } from '@codemirror/view';
7
- import { vim } from '@replit/codemirror-vim';
8
- import { vscodeKeymap } from '@replit/codemirror-vscode-keymap';
9
-
10
- import { singleValueFacet } from '../util';
11
-
12
- export type EditorInputConfig = {
13
- type?: string;
14
- noTabster?: boolean;
15
- };
16
-
17
- export const editorInputMode = singleValueFacet<EditorInputConfig>({});
18
-
19
- export const InputModeExtensions: { [mode: string]: Extension } = {
20
- default: [],
21
- vscode: [
22
- // https://github.com/replit/codemirror-vscode-keymap
23
- editorInputMode.of({ type: 'vscode' }),
24
- keymap.of(vscodeKeymap),
25
- ],
26
- vim: [
27
- // https://github.com/replit/codemirror-vim
28
- vim(),
29
- editorInputMode.of({ type: 'vim', noTabster: true }),
30
- keymap.of([
31
- {
32
- key: 'Alt-Escape',
33
- run: (view) => {
34
- // Focus container for tab navigation.
35
- view.dom.parentElement?.focus();
36
- return true;
37
- },
38
- },
39
- ]),
40
- ],
41
- };
@@ -1,270 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { indentMore } from '@codemirror/commands';
6
- import { getIndentUnit } from '@codemirror/language';
7
- import { type ChangeSpec, EditorSelection, type Extension } from '@codemirror/state';
8
- import { type Command, type EditorView, keymap } from '@codemirror/view';
9
-
10
- import { getSelection, selectAll, selectDown, selectNone, selectUp } from './selection';
11
- import { getRange, treeFacet } from './tree';
12
-
13
- //
14
- // Indentation comnmands.
15
- //
16
-
17
- export const indentItemMore: Command = (view: EditorView) => {
18
- const pos = getSelection(view.state).from;
19
- const tree = view.state.facet(treeFacet);
20
- const current = tree.find(pos);
21
- if (current) {
22
- const previous = tree.prev(current);
23
- if (previous && current.level <= previous.level) {
24
- // TODO(burdon): Indent descendants?
25
- indentMore(view);
26
- }
27
- }
28
-
29
- return true;
30
- };
31
-
32
- export const indentItemLess: Command = (view: EditorView) => {
33
- const pos = getSelection(view.state).from;
34
- const tree = view.state.facet(treeFacet);
35
- const current = tree.find(pos);
36
- if (current) {
37
- if (current.level > 0) {
38
- // Unindent current line and all descendants.
39
- // NOTE: The markdown extension doesn't provide an indentation service.
40
- const indentUnit = getIndentUnit(view.state);
41
- const changes: ChangeSpec[] = [];
42
- tree.traverse(current, (item) => {
43
- const line = view.state.doc.lineAt(item.lineRange.from);
44
- changes.push({ from: line.from, to: line.from + indentUnit });
45
- });
46
-
47
- if (changes.length > 0) {
48
- view.dispatch({ changes });
49
- }
50
- }
51
- }
52
-
53
- return true;
54
- };
55
-
56
- //
57
- // Moving commands.
58
- //
59
-
60
- export const moveItemDown: Command = (view: EditorView) => {
61
- const pos = getSelection(view.state)?.from;
62
- const tree = view.state.facet(treeFacet);
63
- const current = tree.find(pos);
64
- if (current && current.nextSibling) {
65
- const next = current.nextSibling;
66
- const currentContent = view.state.doc.sliceString(...getRange(tree, current));
67
- const nextContent = view.state.doc.sliceString(...getRange(tree, next));
68
- const changes: ChangeSpec[] = [
69
- {
70
- from: current.lineRange.from,
71
- to: current.lineRange.from + currentContent.length,
72
- insert: nextContent,
73
- },
74
- {
75
- from: next.lineRange.from,
76
- to: next.lineRange.from + nextContent.length,
77
- insert: currentContent,
78
- },
79
- ];
80
-
81
- view.dispatch({
82
- changes,
83
- selection: EditorSelection.cursor(pos + nextContent.length + 1),
84
- scrollIntoView: true,
85
- });
86
- }
87
-
88
- return true;
89
- };
90
-
91
- export const moveItemUp: Command = (view: EditorView) => {
92
- const pos = getSelection(view.state)?.from;
93
- const tree = view.state.facet(treeFacet);
94
- const current = tree.find(pos);
95
- if (current && current.prevSibling) {
96
- const prev = current.prevSibling;
97
- const currentContent = view.state.doc.sliceString(...getRange(tree, current));
98
- const prevContent = view.state.doc.sliceString(...getRange(tree, prev));
99
- const changes: ChangeSpec[] = [
100
- {
101
- from: prev.lineRange.from,
102
- to: prev.lineRange.from + prevContent.length,
103
- insert: currentContent,
104
- },
105
- {
106
- from: current.lineRange.from,
107
- to: current.lineRange.from + currentContent.length,
108
- insert: prevContent,
109
- },
110
- ];
111
-
112
- view.dispatch({
113
- changes,
114
- selection: EditorSelection.cursor(pos - prevContent.length - 1),
115
- scrollIntoView: true,
116
- });
117
- }
118
-
119
- return true;
120
- };
121
-
122
- //
123
- // Misc commands.
124
- //
125
-
126
- export const deleteItem: Command = (view: EditorView) => {
127
- const tree = view.state.facet(treeFacet);
128
- const pos = getSelection(view.state).from;
129
- const current = tree.find(pos);
130
- if (current) {
131
- view.dispatch({
132
- selection: EditorSelection.cursor(current.lineRange.from),
133
- changes: [
134
- {
135
- from: current.lineRange.from,
136
- to: Math.min(current.lineRange.to + 1, view.state.doc.length),
137
- },
138
- ],
139
- });
140
- }
141
-
142
- return true;
143
- };
144
-
145
- export const toggleTask: Command = (view: EditorView) => {
146
- const tree = view.state.facet(treeFacet);
147
- const pos = getSelection(view.state)?.from;
148
- const current = tree.find(pos);
149
- if (current) {
150
- const type = current.type === 'task' ? 'bullet' : 'task';
151
- const indent = ' '.repeat(getIndentUnit(view.state) * current.level);
152
- view.dispatch({
153
- changes: [
154
- {
155
- from: current.lineRange.from,
156
- to: current.contentRange.from,
157
- insert: indent + (type === 'task' ? '- [ ] ' : '- '),
158
- },
159
- ],
160
- });
161
- }
162
-
163
- return true;
164
- };
165
-
166
- export const commands = (): Extension =>
167
- keymap.of([
168
- //
169
- // Indentation.
170
- //
171
- {
172
- key: 'Tab',
173
- preventDefault: true,
174
- run: indentItemMore,
175
- shift: indentItemLess,
176
- },
177
-
178
- //
179
- // Continuation.
180
- //
181
- {
182
- key: 'Enter',
183
- shift: (view) => {
184
- const pos = getSelection(view.state).from;
185
- const insert = '\n '; // TODO(burdon): Fix parsing.
186
- view.dispatch({
187
- changes: [{ from: pos, to: pos, insert }],
188
- selection: EditorSelection.cursor(pos + insert.length),
189
- });
190
- return true;
191
- },
192
- },
193
-
194
- //
195
- // Navigation.
196
- //
197
- {
198
- key: 'ArrowDown',
199
- // Jump to next item (default moves to end of currentline).
200
- run: (view) => {
201
- const tree = view.state.facet(treeFacet);
202
- const item = tree.find(getSelection(view.state).from);
203
- if (
204
- item &&
205
- view.state.doc.lineAt(item.lineRange.to).number - view.state.doc.lineAt(item.lineRange.from).number === 0
206
- ) {
207
- const next = tree.next(item);
208
- if (next) {
209
- view.dispatch({ selection: EditorSelection.cursor(next.contentRange.from) });
210
- return true;
211
- }
212
- }
213
-
214
- return false;
215
- },
216
- },
217
-
218
- //
219
- // Line selection.
220
- // TODO(burdon): Shortcut to select current item?
221
- //
222
- {
223
- key: 'Mod-a',
224
- preventDefault: true,
225
- run: selectAll,
226
- },
227
- {
228
- key: 'Escape',
229
- preventDefault: true,
230
- run: selectNone,
231
- },
232
- {
233
- key: 'ArrowUp',
234
- shift: selectUp,
235
- },
236
- {
237
- key: 'ArrowDown',
238
- shift: selectDown,
239
- },
240
-
241
- //
242
- // Move.
243
- //
244
- {
245
- key: 'Alt-ArrowDown',
246
- preventDefault: true,
247
- run: moveItemDown,
248
- },
249
- {
250
- key: 'Alt-ArrowUp',
251
- preventDefault: true,
252
- run: moveItemUp,
253
- },
254
- //
255
- // Delete.
256
- //
257
- {
258
- key: 'Mod-Backspace',
259
- preventDefault: true,
260
- run: deleteItem,
261
- },
262
- //
263
- // Misc.
264
- //
265
- {
266
- key: 'Alt-t',
267
- preventDefault: true,
268
- run: toggleTask,
269
- },
270
- ]);
@@ -1,33 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { markdown, markdownLanguage } from '@codemirror/lang-markdown';
6
- import { EditorSelection, EditorState } from '@codemirror/state';
7
- import { describe, test } from 'vitest';
8
-
9
- import { editor } from './editor';
10
- import { outlinerTree, treeFacet } from './tree';
11
-
12
- const extensions = [markdown({ base: markdownLanguage }), outlinerTree(), editor()];
13
-
14
- describe('editor', () => {
15
- test('empty', ({ expect }) => {
16
- const state = EditorState.create({ extensions });
17
- const tree = state.facet(treeFacet);
18
- expect(tree).to.exist;
19
- });
20
-
21
- test('prevent moving out of range', ({ expect }) => {
22
- const state = EditorState.create({ doc: '- [ ] ', extensions });
23
- const spec = state.update({ selection: EditorSelection.cursor(1) });
24
- expect(spec.state.selection.ranges[0].from).to.eq(6);
25
- });
26
-
27
- test.skip('prevent deleting task marker', ({ expect }) => {
28
- const state = EditorState.create({ doc: '- [ ] ', extensions });
29
- state.update({ selection: EditorSelection.cursor(6) });
30
- const spec = state.update({ changes: { from: 5, to: 6 } });
31
- expect(spec.state.doc.toString()).to.eq('- [ ] ');
32
- });
33
- });
@@ -1,184 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type ChangeSpec, EditorSelection, EditorState } from '@codemirror/state';
6
- import { type EditorView, ViewPlugin } from '@codemirror/view';
7
-
8
- import { log } from '@dxos/log';
9
-
10
- import { getSelection } from './selection';
11
- import { treeFacet } from './tree';
12
-
13
- const LIST_ITEM_REGEX = /^\s*- (\[ \]|\[x\])? /;
14
-
15
- /**
16
- * Initialize empty document.
17
- */
18
- const initialize = () => {
19
- return ViewPlugin.fromClass(
20
- class {
21
- constructor(view: EditorView) {
22
- const first = view.state.doc.lineAt(0);
23
- const text = view.state.sliceDoc(first.from, first.to);
24
- const match = text.match(LIST_ITEM_REGEX);
25
- if (!match) {
26
- setTimeout(() => {
27
- const insert = '- [ ] ';
28
- view.dispatch({
29
- changes: [{ from: 0, to: 0, insert }],
30
- selection: EditorSelection.cursor(insert.length),
31
- });
32
- });
33
- }
34
- }
35
- },
36
- );
37
- };
38
-
39
- /**
40
- * Handle cursor movement, selection, and editing.
41
- */
42
- export const editor = () => [
43
- initialize(),
44
-
45
- EditorState.transactionFilter.of((tr) => {
46
- const tree = tr.state.facet(treeFacet);
47
-
48
- //
49
- // Check cursor is in a valid position.
50
- //
51
- if (!tr.docChanged) {
52
- const current = getSelection(tr.state).from;
53
- if (current != null) {
54
- const currentItem = tree.find(current);
55
- if (!currentItem) {
56
- return [];
57
- }
58
-
59
- // Check if outside of editable range.
60
- if (current < currentItem.contentRange.from || current > currentItem.contentRange.to) {
61
- const prev = getSelection(tr.startState).from;
62
- const prevItem = prev != null ? tree.find(prev) : undefined;
63
- if (!prevItem) {
64
- return [{ selection: EditorSelection.cursor(currentItem.contentRange.from) }];
65
- } else {
66
- if (currentItem.index < prevItem.index) {
67
- // Moving line up.
68
- return [{ selection: EditorSelection.cursor(currentItem.contentRange.to) }];
69
- } else if (currentItem.index > prevItem.index) {
70
- // Moving line down.
71
- return [{ selection: EditorSelection.cursor(currentItem.contentRange.from) }];
72
- } else {
73
- // Moving left.
74
- if (current < prev) {
75
- if (currentItem.index === 0) {
76
- // At start of the list.
77
- return [];
78
- } else {
79
- // Go to previous line.
80
- return [{ selection: EditorSelection.cursor(currentItem.lineRange.from - 1) }];
81
- }
82
- } else {
83
- // Go to end of line.
84
- return [{ selection: EditorSelection.cursor(currentItem.contentRange.to) }];
85
- }
86
- }
87
- }
88
- }
89
- }
90
-
91
- return tr;
92
- }
93
-
94
- //
95
- // Validate changes that don't break the tree.
96
- //
97
- let cancel = false;
98
- const changes: ChangeSpec[] = [];
99
- tr.changes.iterChanges((fromA, toA, fromB, toB, insert) => {
100
- const line = tr.startState.doc.lineAt(fromA);
101
- const match = line.text.match(LIST_ITEM_REGEX);
102
- if (match) {
103
- // Check cursor was in a valid position.
104
- const startTree = tr.startState.facet(treeFacet);
105
- const startItem = startTree.find(tr.startState.selection.main.from);
106
-
107
- // Check if entire line was deleted (which is ok).
108
- const deleteLine = fromA === startItem?.lineRange.from && toA === startItem?.lineRange.to + 1;
109
- if (deleteLine) {
110
- return;
111
- }
112
-
113
- // if (!deleteLine && (!startItem || fromA < startItem.contentRange.from || toA > startItem.contentRange.to)) {
114
- // cancel = true;
115
- // return;
116
- // }
117
-
118
- // Check valid item.
119
- const currentItem = tree.find(tr.state.selection.main.from);
120
- if (!currentItem?.contentRange) {
121
- cancel = true;
122
- return;
123
- }
124
-
125
- // Detect and cancel replacement of task marker with continuation indent.
126
- // Task markers are atomic so will be deleted when backspace is pressed.
127
- // The markdown extension inserts 2 or 6 spaces when deleting a list or task marker in order to create a continuation.
128
- // - [ ] <- backspace here deletes the task marker.
129
- // - [ ] <- backspace here inserts 6 spaces (creates continuation).
130
- // - [ ] <- backspace here deletes the task marker.
131
- const start = line.from + (match?.[0]?.length ?? 0);
132
- const replace = start === toA && toA - fromA === insert.length;
133
- if (replace) {
134
- changes.push({ from: line.from - 1, to: toA });
135
- return;
136
- }
137
-
138
- // Detect deletion of marker.
139
- if (fromB === toB) {
140
- if (toA === line.to) {
141
- const line = tr.state.doc.lineAt(fromA);
142
- if (line.text.match(/^\s*$/)) {
143
- if (line.from === 0) {
144
- // Don't delete first line.
145
- cancel = true;
146
- return;
147
- } else {
148
- // Delete indent and marker.
149
- changes.push({ from: line.from - 1, to: toA });
150
- return;
151
- }
152
- }
153
- }
154
- return;
155
- }
156
-
157
- // Prevent newline if line is empty.
158
- const item = tree.find(fromA);
159
- if (item?.contentRange.from === item?.contentRange.to && fromA === toA) {
160
- cancel = true;
161
- return;
162
- }
163
-
164
- log('change', {
165
- item,
166
- line: { from: line.from, to: line.to },
167
- a: [fromA, toA],
168
- b: [fromB, toB],
169
- insert: { text: insert.toString(), length: insert.length },
170
- });
171
- }
172
- });
173
-
174
- if (changes.length > 0) {
175
- log('modified,', { changes });
176
- return [{ changes }];
177
- } else if (cancel) {
178
- log('cancel');
179
- return [];
180
- }
181
-
182
- return tr;
183
- }),
184
- ];