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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/dist/lib/browser/index.mjs +1414 -8669
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/browser/translations.mjs +39 -0
  5. package/dist/lib/browser/translations.mjs.map +7 -0
  6. package/dist/lib/node-esm/index.mjs +1414 -8668
  7. package/dist/lib/node-esm/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/meta.json +1 -1
  9. package/dist/lib/node-esm/translations.mjs +41 -0
  10. package/dist/lib/node-esm/translations.mjs.map +7 -0
  11. package/dist/types/src/components/Editor/Editor.d.ts +53 -20
  12. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  13. package/dist/types/src/components/Editor/Editor.stories.d.ts +23 -0
  14. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  15. package/dist/types/src/components/Editor/EditorView.d.ts +31 -0
  16. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  17. package/dist/types/src/components/Editor/controller.d.ts +10 -0
  18. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +34 -0
  20. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  22. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  24. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  26. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +47 -0
  28. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  30. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  32. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  34. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  35. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  36. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  37. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  38. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  40. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  42. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  44. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  46. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -17
  48. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  50. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  51. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  52. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  53. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  54. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  55. package/dist/types/src/components/index.d.ts +2 -2
  56. package/dist/types/src/components/index.d.ts.map +1 -1
  57. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  58. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  59. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  60. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  61. package/dist/types/src/extensions/index.d.ts +1 -26
  62. package/dist/types/src/extensions/index.d.ts.map +1 -1
  63. package/dist/types/src/hooks/index.d.ts +1 -0
  64. package/dist/types/src/hooks/index.d.ts.map +1 -1
  65. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  66. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  67. package/dist/types/src/hooks/useTextEditor.d.ts +4 -8
  68. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  69. package/dist/types/src/index.d.ts +0 -9
  70. package/dist/types/src/index.d.ts.map +1 -1
  71. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  72. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  73. package/dist/types/src/stories/Comments.stories.d.ts +4 -3
  74. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  75. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  76. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/Experimental.stories.d.ts +5 -4
  78. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Markdown.stories.d.ts +4 -3
  80. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  82. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -5
  84. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  85. package/dist/types/src/stories/Preview.stories.d.ts +5 -3
  86. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  87. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  88. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -4
  89. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  90. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  91. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  92. package/dist/types/src/stories/components/EditorStory.d.ts +11 -20
  93. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  94. package/dist/types/src/stories/components/util.d.ts +4 -3
  95. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  96. package/dist/types/src/translations.d.ts +26 -26
  97. package/dist/types/src/translations.d.ts.map +1 -1
  98. package/dist/types/src/util/index.d.ts +0 -5
  99. package/dist/types/src/util/index.d.ts.map +1 -1
  100. package/dist/types/src/util/react.d.ts +6 -5
  101. package/dist/types/src/util/react.d.ts.map +1 -1
  102. package/dist/types/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +80 -75
  104. package/src/components/Editor/Editor.stories.tsx +89 -0
  105. package/src/components/Editor/Editor.tsx +170 -54
  106. package/src/components/Editor/EditorView.tsx +103 -0
  107. package/src/components/Editor/controller.ts +50 -0
  108. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +226 -0
  109. package/src/components/EditorMenuProvider/index.ts +10 -0
  110. package/src/components/EditorMenuProvider/menu-presets.ts +125 -0
  111. package/src/components/EditorMenuProvider/menu.ts +70 -0
  112. package/src/components/EditorMenuProvider/popover.ts +286 -0
  113. package/src/components/EditorMenuProvider/useEditorMenu.ts +180 -0
  114. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  115. package/src/components/EditorPreviewProvider/index.ts +5 -0
  116. package/src/components/EditorToolbar/EditorToolbar.tsx +90 -112
  117. package/src/components/EditorToolbar/blocks.ts +55 -47
  118. package/src/components/EditorToolbar/formatting.ts +44 -45
  119. package/src/components/EditorToolbar/headings.ts +47 -50
  120. package/src/components/EditorToolbar/image.ts +16 -14
  121. package/src/components/EditorToolbar/index.ts +2 -7
  122. package/src/components/EditorToolbar/lists.ts +42 -40
  123. package/src/components/EditorToolbar/search.ts +16 -14
  124. package/src/components/EditorToolbar/types.ts +8 -0
  125. package/src/components/EditorToolbar/view-mode.ts +37 -42
  126. package/src/components/index.ts +3 -2
  127. package/src/extensions/Assistant.stories.tsx +112 -0
  128. package/src/extensions/assistant-extension.tsx +223 -0
  129. package/src/extensions/index.ts +2 -27
  130. package/src/hooks/index.ts +1 -0
  131. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  132. package/src/hooks/useTextEditor.ts +33 -27
  133. package/src/index.ts +0 -13
  134. package/src/stories/Automerge.stories.tsx +174 -0
  135. package/src/stories/Comments.stories.tsx +49 -45
  136. package/src/stories/EditorToolbar.stories.tsx +42 -55
  137. package/src/stories/Experimental.stories.tsx +14 -16
  138. package/src/stories/Markdown.stories.tsx +16 -16
  139. package/src/stories/Outliner.stories.tsx +22 -24
  140. package/src/stories/Popover.stories.tsx +157 -0
  141. package/src/stories/Preview.stories.tsx +102 -84
  142. package/src/stories/Tags.stories.tsx +36 -13
  143. package/src/stories/TextEditor.stories.tsx +16 -48
  144. package/src/stories/Theme.stories.tsx +61 -0
  145. package/src/stories/components/EditorStory.tsx +46 -30
  146. package/src/stories/components/util.tsx +90 -59
  147. package/src/translations.ts +30 -25
  148. package/src/util/index.ts +1 -6
  149. package/src/util/react.tsx +8 -13
  150. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  151. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  152. package/dist/lib/browser/testing/index.mjs +0 -76
  153. package/dist/lib/browser/testing/index.mjs.map +0 -7
  154. package/dist/lib/browser/types/index.mjs +0 -13
  155. package/dist/lib/browser/types/index.mjs.map +0 -7
  156. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  157. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  158. package/dist/lib/node-esm/testing/index.mjs +0 -78
  159. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  160. package/dist/lib/node-esm/types/index.mjs +0 -14
  161. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  162. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts +0 -38
  163. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts.map +0 -1
  164. package/dist/types/src/components/CommandMenu/index.d.ts +0 -2
  165. package/dist/types/src/components/CommandMenu/index.d.ts.map +0 -1
  166. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  167. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  168. package/dist/types/src/defaults.d.ts +0 -14
  169. package/dist/types/src/defaults.d.ts.map +0 -1
  170. package/dist/types/src/extensions/annotations.d.ts +0 -9
  171. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  172. package/dist/types/src/extensions/autocomplete.d.ts +0 -26
  173. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  174. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  175. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  176. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  177. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  178. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  179. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  180. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  181. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  182. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  183. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  184. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  185. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  186. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  187. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  188. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  189. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  190. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  191. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  192. package/dist/types/src/extensions/autoscroll.d.ts +0 -10
  193. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  194. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  195. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  196. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  197. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  198. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  199. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  200. package/dist/types/src/extensions/blast.d.ts +0 -25
  201. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  202. package/dist/types/src/extensions/command-dialog/action.d.ts +0 -17
  203. package/dist/types/src/extensions/command-dialog/action.d.ts.map +0 -1
  204. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts +0 -6
  205. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts.map +0 -1
  206. package/dist/types/src/extensions/command-dialog/hint.d.ts +0 -19
  207. package/dist/types/src/extensions/command-dialog/hint.d.ts.map +0 -1
  208. package/dist/types/src/extensions/command-dialog/index.d.ts +0 -4
  209. package/dist/types/src/extensions/command-dialog/index.d.ts.map +0 -1
  210. package/dist/types/src/extensions/command-dialog/state.d.ts +0 -16
  211. package/dist/types/src/extensions/command-dialog/state.d.ts.map +0 -1
  212. package/dist/types/src/extensions/command-dialog/typeahead.d.ts +0 -22
  213. package/dist/types/src/extensions/command-dialog/typeahead.d.ts.map +0 -1
  214. package/dist/types/src/extensions/command-menu/command-menu.d.ts +0 -20
  215. package/dist/types/src/extensions/command-menu/command-menu.d.ts.map +0 -1
  216. package/dist/types/src/extensions/command-menu/index.d.ts +0 -3
  217. package/dist/types/src/extensions/command-menu/index.d.ts.map +0 -1
  218. package/dist/types/src/extensions/command-menu/placeholder.d.ts +0 -10
  219. package/dist/types/src/extensions/command-menu/placeholder.d.ts.map +0 -1
  220. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts +0 -24
  221. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts.map +0 -1
  222. package/dist/types/src/extensions/comments.d.ts +0 -95
  223. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  224. package/dist/types/src/extensions/debug.d.ts +0 -3
  225. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  226. package/dist/types/src/extensions/dnd.d.ts +0 -9
  227. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  228. package/dist/types/src/extensions/factories.d.ts +0 -83
  229. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  230. package/dist/types/src/extensions/floating-menu.d.ts +0 -7
  231. package/dist/types/src/extensions/floating-menu.d.ts.map +0 -1
  232. package/dist/types/src/extensions/focus.d.ts +0 -7
  233. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  234. package/dist/types/src/extensions/folding.d.ts +0 -7
  235. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  236. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  237. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  238. package/dist/types/src/extensions/json.d.ts +0 -7
  239. package/dist/types/src/extensions/json.d.ts.map +0 -1
  240. package/dist/types/src/extensions/listener.d.ts +0 -11
  241. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  243. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  245. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  247. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  249. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  251. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  253. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  255. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  256. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  257. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  258. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  259. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  260. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  261. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  262. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  263. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  264. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  265. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  266. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  267. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  268. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  269. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  270. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  271. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  272. package/dist/types/src/extensions/mention.d.ts +0 -7
  273. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  274. package/dist/types/src/extensions/modes.d.ts +0 -10
  275. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  277. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  279. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  280. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  281. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  282. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  283. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  284. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  285. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  286. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  287. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  288. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  289. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  290. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  291. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  292. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  293. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  294. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  295. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  296. package/dist/types/src/extensions/preview/preview.d.ts +0 -29
  297. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  298. package/dist/types/src/extensions/selection.d.ts +0 -24
  299. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  300. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  301. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  302. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  303. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  304. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  305. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  306. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  307. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  308. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -72
  309. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  310. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  311. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  312. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  313. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  314. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  315. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  316. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  317. package/dist/types/src/styles/index.d.ts +0 -4
  318. package/dist/types/src/styles/index.d.ts.map +0 -1
  319. package/dist/types/src/styles/markdown.d.ts +0 -8
  320. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  321. package/dist/types/src/styles/theme.d.ts +0 -38
  322. package/dist/types/src/styles/theme.d.ts.map +0 -1
  323. package/dist/types/src/styles/tokens.d.ts +0 -3
  324. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  325. package/dist/types/src/testing/PreviewPopover.d.ts +0 -20
  326. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  327. package/dist/types/src/testing/index.d.ts +0 -3
  328. package/dist/types/src/testing/index.d.ts.map +0 -1
  329. package/dist/types/src/testing/util.d.ts +0 -3
  330. package/dist/types/src/testing/util.d.ts.map +0 -1
  331. package/dist/types/src/types/index.d.ts +0 -2
  332. package/dist/types/src/types/index.d.ts.map +0 -1
  333. package/dist/types/src/types/types.d.ts +0 -21
  334. package/dist/types/src/types/types.d.ts.map +0 -1
  335. package/dist/types/src/util/cursor.d.ts +0 -31
  336. package/dist/types/src/util/cursor.d.ts.map +0 -1
  337. package/dist/types/src/util/debug.d.ts +0 -17
  338. package/dist/types/src/util/debug.d.ts.map +0 -1
  339. package/dist/types/src/util/decorations.d.ts +0 -4
  340. package/dist/types/src/util/decorations.d.ts.map +0 -1
  341. package/dist/types/src/util/dom.d.ts +0 -10
  342. package/dist/types/src/util/dom.d.ts.map +0 -1
  343. package/dist/types/src/util/facet.d.ts +0 -3
  344. package/dist/types/src/util/facet.d.ts.map +0 -1
  345. package/src/components/CommandMenu/CommandMenu.tsx +0 -348
  346. package/src/components/CommandMenu/index.ts +0 -5
  347. package/src/components/EditorToolbar/util.ts +0 -76
  348. package/src/defaults.ts +0 -52
  349. package/src/extensions/annotations.ts +0 -55
  350. package/src/extensions/autocomplete.ts +0 -219
  351. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  352. package/src/extensions/automerge/automerge.test.tsx +0 -78
  353. package/src/extensions/automerge/automerge.ts +0 -86
  354. package/src/extensions/automerge/cursor.ts +0 -28
  355. package/src/extensions/automerge/defs.ts +0 -31
  356. package/src/extensions/automerge/index.ts +0 -5
  357. package/src/extensions/automerge/sync.ts +0 -75
  358. package/src/extensions/automerge/update-automerge.ts +0 -50
  359. package/src/extensions/automerge/update-codemirror.ts +0 -115
  360. package/src/extensions/autoscroll.ts +0 -157
  361. package/src/extensions/awareness/awareness-provider.ts +0 -127
  362. package/src/extensions/awareness/awareness.ts +0 -315
  363. package/src/extensions/awareness/index.ts +0 -6
  364. package/src/extensions/blast.ts +0 -363
  365. package/src/extensions/command-dialog/action.ts +0 -55
  366. package/src/extensions/command-dialog/command-dialog.ts +0 -34
  367. package/src/extensions/command-dialog/hint.ts +0 -103
  368. package/src/extensions/command-dialog/index.ts +0 -7
  369. package/src/extensions/command-dialog/state.ts +0 -90
  370. package/src/extensions/command-dialog/typeahead.ts +0 -129
  371. package/src/extensions/command-menu/command-menu.ts +0 -210
  372. package/src/extensions/command-menu/index.ts +0 -6
  373. package/src/extensions/command-menu/placeholder.ts +0 -113
  374. package/src/extensions/command-menu/useCommandMenu.ts +0 -134
  375. package/src/extensions/comments.ts +0 -597
  376. package/src/extensions/debug.ts +0 -15
  377. package/src/extensions/dnd.ts +0 -37
  378. package/src/extensions/factories.ts +0 -284
  379. package/src/extensions/floating-menu.ts +0 -126
  380. package/src/extensions/focus.ts +0 -36
  381. package/src/extensions/folding.tsx +0 -44
  382. package/src/extensions/hashtag.tsx +0 -68
  383. package/src/extensions/json.ts +0 -57
  384. package/src/extensions/listener.ts +0 -38
  385. package/src/extensions/markdown/action.ts +0 -117
  386. package/src/extensions/markdown/bundle.ts +0 -93
  387. package/src/extensions/markdown/changes.test.ts +0 -26
  388. package/src/extensions/markdown/changes.ts +0 -149
  389. package/src/extensions/markdown/debug.ts +0 -44
  390. package/src/extensions/markdown/decorate.ts +0 -601
  391. package/src/extensions/markdown/formatting.test.ts +0 -498
  392. package/src/extensions/markdown/formatting.ts +0 -1267
  393. package/src/extensions/markdown/highlight.ts +0 -183
  394. package/src/extensions/markdown/image.ts +0 -118
  395. package/src/extensions/markdown/index.ts +0 -13
  396. package/src/extensions/markdown/link.ts +0 -50
  397. package/src/extensions/markdown/parser.test.ts +0 -75
  398. package/src/extensions/markdown/styles.ts +0 -135
  399. package/src/extensions/markdown/table.ts +0 -150
  400. package/src/extensions/mention.ts +0 -41
  401. package/src/extensions/modes.ts +0 -41
  402. package/src/extensions/outliner/commands.ts +0 -270
  403. package/src/extensions/outliner/editor.test.ts +0 -33
  404. package/src/extensions/outliner/editor.ts +0 -184
  405. package/src/extensions/outliner/index.ts +0 -7
  406. package/src/extensions/outliner/outliner.test.ts +0 -100
  407. package/src/extensions/outliner/outliner.ts +0 -167
  408. package/src/extensions/outliner/selection.ts +0 -50
  409. package/src/extensions/outliner/tree.test.ts +0 -168
  410. package/src/extensions/outliner/tree.ts +0 -317
  411. package/src/extensions/preview/index.ts +0 -5
  412. package/src/extensions/preview/preview.ts +0 -190
  413. package/src/extensions/selection.ts +0 -100
  414. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  415. package/src/extensions/tags/extended-markdown.ts +0 -78
  416. package/src/extensions/tags/index.ts +0 -7
  417. package/src/extensions/tags/streamer.ts +0 -243
  418. package/src/extensions/tags/xml-tags.ts +0 -393
  419. package/src/extensions/tags/xml-util.ts +0 -94
  420. package/src/extensions/typewriter.ts +0 -68
  421. package/src/stories/CommandDialog.stories.tsx +0 -89
  422. package/src/stories/CommandMenu.stories.tsx +0 -158
  423. package/src/styles/index.ts +0 -7
  424. package/src/styles/markdown.ts +0 -26
  425. package/src/styles/theme.ts +0 -268
  426. package/src/styles/tokens.ts +0 -17
  427. package/src/testing/PreviewPopover.tsx +0 -78
  428. package/src/testing/index.ts +0 -6
  429. package/src/testing/util.ts +0 -7
  430. package/src/types/index.ts +0 -5
  431. package/src/types/types.ts +0 -32
  432. package/src/util/cursor.ts +0 -56
  433. package/src/util/debug.ts +0 -64
  434. package/src/util/decorations.ts +0 -21
  435. package/src/util/dom.ts +0 -34
  436. package/src/util/facet.ts +0 -13
@@ -1,317 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { syntaxTree } from '@codemirror/language';
6
- import { type EditorState, type Extension, StateField, type Transaction } from '@codemirror/state';
7
- import { Facet } from '@codemirror/state';
8
- import { type SyntaxNode } from '@lezer/common';
9
-
10
- import { invariant } from '@dxos/invariant';
11
-
12
- import { type Range } from '../../types';
13
-
14
- /**
15
- * Represents a single item in the tree.
16
- */
17
- export interface Item {
18
- type: 'root' | 'bullet' | 'task' | 'unknown';
19
- index: number;
20
- level: number;
21
- node: SyntaxNode;
22
- parent?: Item;
23
- nextSibling?: Item;
24
- prevSibling?: Item;
25
- children: Item[];
26
- /**
27
- * Actual range.
28
- * Starts at the start of the line containing the item and ends at the end of the line before the
29
- * first child or next sibling.
30
- */
31
- lineRange: Range;
32
- /**
33
- * Range of the editable content.
34
- * This doesn't include the list or task marker or indentation.
35
- */
36
- contentRange: Range;
37
- }
38
-
39
- export const itemToJSON = ({ type, index, level, lineRange, contentRange, children }: Item): any => {
40
- return { type, index, level, lineRange, contentRange, children: children.map(itemToJSON) };
41
- };
42
-
43
- /**
44
- * Tree assumes the entire document is a single contiguous well-formed hierarchy of markdown LiteItem nodes.
45
- */
46
- export class Tree implements Item {
47
- type: Item['type'] = 'root';
48
- index = -1;
49
- level = -1;
50
- node: Item['node'];
51
- lineRange: Item['lineRange'];
52
- contentRange: Item['contentRange'];
53
- children: Item['children'] = [];
54
-
55
- constructor(node: SyntaxNode) {
56
- this.node = node;
57
- this.lineRange = { from: node.from, to: node.to };
58
- this.contentRange = this.lineRange;
59
- }
60
-
61
- toJSON() {
62
- return itemToJSON(this);
63
- }
64
-
65
- get root(): Item {
66
- return this;
67
- }
68
-
69
- traverse<T = any>(cb: (item: Item, level: number) => T | void): T | undefined;
70
- traverse<T = any>(item: Item, cb: (item: Item, level: number) => T | void): T | undefined;
71
- traverse<T = any>(
72
- itemOrCb: Item | ((item: Item, level: number) => T | undefined | void),
73
- maybeCb?: (item: Item, level: number) => T | undefined | void,
74
- ): T | undefined {
75
- if (typeof itemOrCb === 'function') {
76
- return traverse<T>(this, itemOrCb);
77
- } else {
78
- return traverse<T>(itemOrCb, maybeCb!);
79
- }
80
- }
81
-
82
- /**
83
- * Return the closest item.
84
- */
85
- find(pos: number): Item | undefined {
86
- return this.traverse<Item>((item) => (item.lineRange.from <= pos && item.lineRange.to >= pos ? item : undefined));
87
- }
88
-
89
- /**
90
- * Return the first child, next sibling, or parent's next sibling.
91
- */
92
- next(item: Item, enter = true): Item | undefined {
93
- if (enter && item.children.length > 0) {
94
- return item.children[0];
95
- }
96
-
97
- if (item.nextSibling) {
98
- return item.nextSibling;
99
- }
100
-
101
- if (item.parent) {
102
- return this.next(item.parent, false);
103
- }
104
-
105
- return undefined;
106
- }
107
-
108
- /**
109
- * Return the previous sibling, or parent.
110
- */
111
- prev(item: Item): Item | undefined {
112
- if (item.prevSibling) {
113
- return this.lastDescendant(item.prevSibling);
114
- }
115
-
116
- return item.parent?.type === 'root' ? undefined : item.parent;
117
- }
118
-
119
- /**
120
- * Return the last descendant of the item, or the item itself if it has no children.
121
- */
122
- lastDescendant(item: Item): Item {
123
- return item.children.length > 0 ? this.lastDescendant(item.children.at(-1)!) : item;
124
- }
125
- }
126
-
127
- export const getRange = (tree: Tree, item: Item): [number, number] => {
128
- const lastDescendant = tree.lastDescendant(item);
129
- return [item.lineRange.from, lastDescendant.lineRange.to];
130
- };
131
-
132
- /**
133
- * Traverse the tree, calling the callback for each item.
134
- * If the callback returns a value, the traversal is stopped and the value is returned.
135
- */
136
- export const traverse = <T = any>(root: Item, cb: (item: Item, level: number) => T | void): T | undefined => {
137
- const t = (item: Item, level: number): T | undefined => {
138
- if (item.type !== 'root') {
139
- const value = cb(item, level);
140
- if (value != null) {
141
- return value;
142
- }
143
- }
144
-
145
- for (const child of item.children) {
146
- const value = t(child, level + 1);
147
- if (value != null) {
148
- return value;
149
- }
150
- }
151
-
152
- return undefined;
153
- };
154
-
155
- return t(root, root.type === 'root' ? -1 : 0);
156
- };
157
-
158
- export const getListItemContent = (state: EditorState, item: Item): string => {
159
- return state.doc.sliceString(item.contentRange.from, item.contentRange.to);
160
- };
161
-
162
- export const listItemToString = (item: Item, level = 0) => {
163
- const indent = ' '.repeat(level);
164
- const data = {
165
- i: item.index,
166
- n: item.nextSibling?.index ?? '∅',
167
- p: item.prevSibling?.index ?? '∅',
168
- level: item.level,
169
- node: format([item.node.from, item.node.to]),
170
- line: format([item.lineRange.from, item.lineRange.to]),
171
- content: format([item.contentRange.from, item.contentRange.to]),
172
- };
173
-
174
- return `${indent}${item.type[0].toUpperCase()}(${Object.entries(data)
175
- .map(([k, v]) => `${k}=${v}`)
176
- .join(', ')})`;
177
- };
178
-
179
- const format = (value: any) =>
180
- JSON.stringify(value, (key: string, value: any) => {
181
- if (typeof value === 'number') {
182
- return value.toString().padStart(3, ' ');
183
- }
184
- return value;
185
- }).replaceAll('"', '');
186
-
187
- export const treeFacet = Facet.define<Tree, Tree>({
188
- combine: (values) => values[0],
189
- });
190
-
191
- export type TreeOptions = {};
192
-
193
- /**
194
- * Creates a shadow tree of `ListItem` nodes whenever the document changes.
195
- * This adds overhead relative to the markdown AST, but allows for efficient traversal of the list items.
196
- * NOTE: Requires markdown parser to be enabled.
197
- */
198
- export const outlinerTree = (_options: TreeOptions = {}): Extension => {
199
- const buildTree = (state: EditorState): Tree => {
200
- let tree: Tree | undefined;
201
- let parent: Item | undefined;
202
- let current: Item | undefined;
203
- let prev: Item | undefined;
204
- let level = -1;
205
- let index = -1;
206
-
207
- // Array to track previous siblings at each level.
208
- const prevSiblings: (Item | undefined)[] = [];
209
-
210
- syntaxTree(state).iterate({
211
- enter: (node) => {
212
- switch (node.name) {
213
- case 'Document': {
214
- tree = new Tree(node.node);
215
- current = tree;
216
- break;
217
- }
218
- case 'BulletList': {
219
- invariant(current);
220
- parent = current;
221
- if (current) {
222
- current.lineRange.to = current.node.from;
223
- }
224
- prevSiblings[++level] = undefined;
225
- break;
226
- }
227
- case 'ListItem': {
228
- invariant(parent);
229
-
230
- // Include all content up to the next sibling or the end of the document.
231
- const nextSibling = node.node.nextSibling ?? node.node.parent?.nextSibling;
232
- const docRange: Range = {
233
- from: state.doc.lineAt(node.from).from,
234
- to: nextSibling ? nextSibling.from - 1 : state.doc.length,
235
- };
236
-
237
- current = {
238
- type: 'unknown',
239
- index: ++index,
240
- level,
241
- node: node.node,
242
- lineRange: docRange,
243
- contentRange: { ...docRange },
244
- parent,
245
- prevSibling: prevSiblings[level],
246
- children: [],
247
- };
248
-
249
- // Update sibling refs.
250
- if (current.prevSibling) {
251
- current.prevSibling.nextSibling = current;
252
- }
253
-
254
- // Update previous siblings array at current level.
255
- prevSiblings[level] = current;
256
-
257
- // Update previous item (not sibling).
258
- if (prev) {
259
- prev.lineRange.to = prev.contentRange.to = current.lineRange.from - 1;
260
- }
261
- prev = current;
262
-
263
- // Update parent.
264
- parent.children.push(current);
265
- if (parent.lineRange.to === parent.node.from) {
266
- parent.lineRange.to = parent.contentRange.to = current.lineRange.from - 1;
267
- }
268
-
269
- break;
270
- }
271
- case 'ListMark': {
272
- invariant(current);
273
- current.type = 'bullet';
274
- current.contentRange.from = node.from + '- '.length;
275
- break;
276
- }
277
- case 'Task': {
278
- invariant(current);
279
- current.type = 'task';
280
- break;
281
- }
282
- case 'TaskMarker': {
283
- invariant(current);
284
- current.contentRange.from = node.from + '[ ] '.length;
285
- break;
286
- }
287
- }
288
- },
289
- leave: (node) => {
290
- if (node.name === 'BulletList') {
291
- invariant(parent);
292
- prevSiblings[level--] = undefined;
293
- parent = parent.parent;
294
- }
295
- },
296
- });
297
-
298
- invariant(tree);
299
- return tree;
300
- };
301
-
302
- return [
303
- StateField.define<Tree | undefined>({
304
- create: (state) => {
305
- return buildTree(state);
306
- },
307
- update: (value: Tree | undefined, tr: Transaction) => {
308
- if (!tr.docChanged) {
309
- return value;
310
- }
311
-
312
- return buildTree(tr.state);
313
- },
314
- provide: (field) => treeFacet.from(field),
315
- }),
316
- ];
317
- };
@@ -1,5 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- export * from './preview';
@@ -1,190 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { syntaxTree } from '@codemirror/language';
6
- import { type EditorState, type Extension, RangeSetBuilder, StateField } from '@codemirror/state';
7
- import { Decoration, type DecorationSet, EditorView, WidgetType } from '@codemirror/view';
8
- import { type SyntaxNode } from '@lezer/common';
9
-
10
- export type PreviewLinkRef = {
11
- /** @deprecated */
12
- // TODO(burdon): Remove?
13
- suggest?: boolean;
14
- block?: boolean;
15
- label: string;
16
- ref: string;
17
- };
18
-
19
- export type PreviewLinkTarget = {
20
- label: string;
21
- text?: string;
22
- object?: any;
23
- };
24
-
25
- export type PreviewOptions = {
26
- addBlockContainer?: (link: PreviewLinkRef, el: HTMLElement) => void;
27
- removeBlockContainer?: (link: PreviewLinkRef) => void;
28
- };
29
-
30
- /**
31
- * Create preview decorations.
32
- */
33
- export const preview = (options: PreviewOptions = {}): Extension => {
34
- return [
35
- // NOTE: Atomic block decorations must be created from a state field, now a widget, otherwise it results in the following error:
36
- // "Block decorations may not be specified via plugins".
37
- StateField.define<DecorationSet>({
38
- create: (state) => buildDecorations(state, options),
39
- update: (decorations, tr) => {
40
- if (tr.docChanged) {
41
- return buildDecorations(tr.state, options);
42
- }
43
-
44
- return decorations.map(tr.changes);
45
- },
46
- provide: (field) => [
47
- EditorView.decorations.from(field),
48
- EditorView.atomicRanges.of((view) => view.state.field(field)),
49
- ],
50
- }),
51
- ];
52
- };
53
-
54
- /**
55
- * Echo references are represented as markdown reference links.
56
- * https://www.markdownguide.org/basic-syntax/#reference-style-links
57
- */
58
- const buildDecorations = (state: EditorState, options: PreviewOptions): DecorationSet => {
59
- const builder = new RangeSetBuilder<Decoration>();
60
-
61
- syntaxTree(state).iterate({
62
- enter: (node) => {
63
- switch (node.name) {
64
- //
65
- // Inline widget.
66
- // [Label](dxn:echo:123)
67
- //
68
- case 'Link': {
69
- const link = getLinkRef(state, node.node);
70
- if (link) {
71
- builder.add(
72
- node.from,
73
- node.to,
74
- Decoration.replace({
75
- widget: new PreviewInlineWidget(options, link),
76
- side: 1,
77
- }),
78
- );
79
- }
80
- return false;
81
- }
82
-
83
- //
84
- // Block widget (transclusion).
85
- // ![Label](dxn:echo:123)
86
- //
87
- case 'Image': {
88
- if (options.addBlockContainer && options.removeBlockContainer) {
89
- const link = getLinkRef(state, node.node);
90
- if (link) {
91
- builder.add(
92
- node.from,
93
- node.to,
94
- Decoration.replace({
95
- block: true,
96
- widget: new PreviewBlockWidget(options, link),
97
- }),
98
- );
99
- }
100
- }
101
- return false;
102
- }
103
- }
104
- },
105
- });
106
-
107
- return builder.finish();
108
- };
109
-
110
- /**
111
- * Link references.
112
- * [Label](dxn:echo:123) Inline reference
113
- * ![Label](dxn:echo:123) Block reference
114
- */
115
- export const getLinkRef = (state: EditorState, node: SyntaxNode): PreviewLinkRef | undefined => {
116
- const mark = node.getChildren('LinkMark');
117
- const urlNode = node.getChild('URL');
118
- if (mark && urlNode) {
119
- const url = state.sliceDoc(urlNode.from, urlNode.to);
120
- if (url.startsWith('dxn:')) {
121
- const label = state.sliceDoc(mark[0].to, mark[1].from);
122
- return {
123
- block: state.sliceDoc(mark[0].from, mark[0].from + 1) === '!',
124
- label,
125
- ref: url,
126
- };
127
- }
128
- }
129
- };
130
-
131
- /**
132
- * Inline widget.
133
- * [Label](dxn:echo:123)
134
- */
135
- class PreviewInlineWidget extends WidgetType {
136
- constructor(
137
- readonly _options: PreviewOptions,
138
- readonly _link: PreviewLinkRef,
139
- ) {
140
- super();
141
- }
142
-
143
- // override ignoreEvent() {
144
- // return false;
145
- // }
146
-
147
- override eq(other: this): boolean {
148
- return this._link.ref === other._link.ref && this._link.label === other._link.label;
149
- }
150
-
151
- override toDOM(_view: EditorView): HTMLElement {
152
- const root = document.createElement('dx-anchor');
153
- root.classList.add('dx-tag--anchor');
154
- root.textContent = this._link.label;
155
- root.setAttribute('refId', this._link.ref);
156
- return root;
157
- }
158
- }
159
-
160
- /**
161
- * Block widget (e.g., for surfaces).
162
- * ![Label][dxn:echo:123]
163
- */
164
- class PreviewBlockWidget extends WidgetType {
165
- constructor(
166
- readonly _options: PreviewOptions,
167
- readonly _link: PreviewLinkRef,
168
- ) {
169
- super();
170
- }
171
-
172
- // override ignoreEvent() {
173
- // return true;
174
- // }
175
-
176
- override eq(other: this): boolean {
177
- return this._link.ref === other._link.ref;
178
- }
179
-
180
- override toDOM(_view: EditorView): HTMLDivElement {
181
- const root = document.createElement('div');
182
- root.classList.add('cm-preview-block', 'density-coarse');
183
- this._options.addBlockContainer?.(this._link, root);
184
- return root;
185
- }
186
-
187
- override destroy() {
188
- this._options.removeBlockContainer?.(this._link);
189
- }
190
- }
@@ -1,100 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type Extension, Transaction, type TransactionSpec } from '@codemirror/state';
6
- import { EditorView, keymap } from '@codemirror/view';
7
-
8
- import { debounce } from '@dxos/async';
9
- import { invariant } from '@dxos/invariant';
10
- import { isTruthy } from '@dxos/util';
11
-
12
- import { singleValueFacet } from '../util';
13
-
14
- /**
15
- * Currently edited document id as FQ string.
16
- */
17
- export const documentId = singleValueFacet<string>();
18
-
19
- export type EditorSelection = {
20
- anchor: number;
21
- head?: number;
22
- };
23
-
24
- export type EditorSelectionState = {
25
- scrollTo?: number;
26
- selection?: EditorSelection;
27
- };
28
-
29
- export type EditorStateStore = {
30
- setState: (id: string, state: EditorSelectionState) => void;
31
- getState: (id: string) => EditorSelectionState | undefined;
32
- };
33
-
34
- const stateRestoreAnnotation = 'dxos.org/cm/state-restore';
35
-
36
- export const createEditorStateTransaction = ({ scrollTo, selection }: EditorSelectionState): TransactionSpec => {
37
- return {
38
- selection,
39
- scrollIntoView: !scrollTo,
40
- effects: scrollTo ? EditorView.scrollIntoView(scrollTo, { yMargin: 96 }) : undefined,
41
- annotations: Transaction.userEvent.of(stateRestoreAnnotation),
42
- };
43
- };
44
-
45
- export const createEditorStateStore = (keyPrefix: string): EditorStateStore => ({
46
- getState: (id) => {
47
- invariant(id);
48
- const state = localStorage.getItem(`${keyPrefix}/${id}`);
49
- return state ? JSON.parse(state) : undefined;
50
- },
51
-
52
- setState: (id, state) => {
53
- invariant(id);
54
- localStorage.setItem(`${keyPrefix}/${id}`, JSON.stringify(state));
55
- },
56
- });
57
-
58
- /**
59
- * Track scrolling and selection state to be restored when switching to document.
60
- */
61
- export const selectionState = ({ getState, setState }: Partial<EditorStateStore> = {}): Extension => {
62
- const setStateDebounced = debounce(setState!, 1_000);
63
-
64
- return [
65
- // TODO(burdon): Track scrolling (currently only updates when cursor moves).
66
- // EditorView.domEventHandlers({
67
- // scroll: (event) => {
68
- // setStateDebounced(id, {});
69
- // },
70
- // }),
71
- EditorView.updateListener.of(({ view, transactions }) => {
72
- const id = view.state.facet(documentId);
73
- if (!id || transactions.some((tr) => tr.isUserEvent(stateRestoreAnnotation))) {
74
- return;
75
- }
76
-
77
- if (setState) {
78
- const { scrollTop } = view.scrollDOM;
79
- const pos = view.posAtCoords({ x: 0, y: scrollTop });
80
- if (pos !== null) {
81
- const { anchor, head } = view.state.selection.main;
82
- setStateDebounced(id, { scrollTo: pos, selection: { anchor, head } });
83
- }
84
- }
85
- }),
86
- getState &&
87
- keymap.of([
88
- {
89
- key: 'ctrl-r', // TODO(burdon): Setting to jump back to selection.
90
- run: (view) => {
91
- const state = getState(view.state.facet(documentId));
92
- if (state) {
93
- view.dispatch(createEditorStateTransaction(state));
94
- }
95
- return true;
96
- },
97
- },
98
- ]),
99
- ].filter(isTruthy);
100
- };