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

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 (435) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +1080 -8837
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/translations.mjs +39 -0
  7. package/dist/lib/browser/translations.mjs.map +7 -0
  8. package/dist/lib/node-esm/index.mjs +1080 -8836
  9. package/dist/lib/node-esm/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/lib/node-esm/translations.mjs +41 -0
  12. package/dist/lib/node-esm/translations.mjs.map +7 -0
  13. package/dist/types/src/components/Editor/Editor.d.ts +41 -24
  14. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  15. package/dist/types/src/components/Editor/Editor.stories.d.ts +7 -4
  16. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/{EditorContent/EditorContent.d.ts → Editor/EditorView.d.ts} +9 -7
  18. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  19. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  20. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +2 -4
  21. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorMenuProvider/index.d.ts +0 -1
  23. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -1
  24. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -1
  25. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -1
  26. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +2 -2
  27. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -1
  28. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -1
  29. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +1 -1
  30. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -1
  31. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +8 -6
  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 -2
  42. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/lists.d.ts +6 -0
  44. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -0
  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 +6 -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 +0 -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 -31
  58. package/dist/types/src/extensions/index.d.ts.map +1 -1
  59. package/dist/types/src/hooks/index.d.ts +1 -0
  60. package/dist/types/src/hooks/index.d.ts.map +1 -1
  61. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  62. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  63. package/dist/types/src/hooks/useTextEditor.d.ts +1 -1
  64. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  65. package/dist/types/src/index.d.ts +0 -9
  66. package/dist/types/src/index.d.ts.map +1 -1
  67. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  68. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  69. package/dist/types/src/stories/Comments.stories.d.ts +3 -2
  70. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  71. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  72. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  73. package/dist/types/src/stories/Experimental.stories.d.ts +4 -3
  74. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  75. package/dist/types/src/stories/Markdown.stories.d.ts +3 -2
  76. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  78. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Popover.stories.d.ts +2 -2
  80. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Preview.stories.d.ts +3 -2
  82. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  84. package/dist/types/src/stories/TextEditor.stories.d.ts +3 -2
  85. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  86. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  87. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  88. package/dist/types/src/stories/components/EditorStory.d.ts +9 -20
  89. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  90. package/dist/types/src/stories/components/util.d.ts +4 -3
  91. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  92. package/dist/types/src/translations.d.ts +26 -26
  93. package/dist/types/src/translations.d.ts.map +1 -1
  94. package/dist/types/src/util/index.d.ts +0 -5
  95. package/dist/types/src/util/index.d.ts.map +1 -1
  96. package/dist/types/src/util/react.d.ts +6 -5
  97. package/dist/types/src/util/react.d.ts.map +1 -1
  98. package/dist/types/tsconfig.tsbuildinfo +1 -1
  99. package/package.json +79 -71
  100. package/src/components/Editor/Editor.stories.tsx +26 -26
  101. package/src/components/Editor/Editor.tsx +67 -55
  102. package/src/components/Editor/EditorView.tsx +102 -0
  103. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +23 -30
  104. package/src/components/EditorMenuProvider/index.ts +0 -1
  105. package/src/components/EditorMenuProvider/menu-presets.ts +3 -1
  106. package/src/components/EditorMenuProvider/menu.ts +1 -2
  107. package/src/components/EditorMenuProvider/popover.ts +3 -3
  108. package/src/components/EditorMenuProvider/useEditorMenu.ts +9 -4
  109. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +6 -9
  110. package/src/components/EditorToolbar/EditorToolbar.tsx +37 -68
  111. package/src/components/EditorToolbar/blocks.ts +55 -48
  112. package/src/components/EditorToolbar/formatting.ts +44 -46
  113. package/src/components/EditorToolbar/headings.ts +45 -51
  114. package/src/components/EditorToolbar/image.ts +16 -14
  115. package/src/components/EditorToolbar/index.ts +2 -3
  116. package/src/components/EditorToolbar/lists.ts +58 -0
  117. package/src/components/EditorToolbar/search.ts +16 -14
  118. package/src/components/EditorToolbar/types.ts +8 -0
  119. package/src/components/EditorToolbar/view-mode.ts +37 -43
  120. package/src/components/index.ts +0 -5
  121. package/src/extensions/Assistant.stories.tsx +112 -0
  122. package/src/extensions/assistant-extension.tsx +223 -0
  123. package/src/extensions/index.ts +2 -32
  124. package/src/hooks/index.ts +1 -0
  125. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  126. package/src/hooks/useTextEditor.ts +9 -3
  127. package/src/index.ts +0 -13
  128. package/src/stories/Automerge.stories.tsx +177 -0
  129. package/src/stories/Comments.stories.tsx +48 -43
  130. package/src/stories/EditorToolbar.stories.tsx +40 -53
  131. package/src/stories/Experimental.stories.tsx +14 -16
  132. package/src/stories/Markdown.stories.tsx +16 -16
  133. package/src/stories/Outliner.stories.tsx +8 -10
  134. package/src/stories/Popover.stories.tsx +27 -32
  135. package/src/stories/Preview.stories.tsx +67 -53
  136. package/src/stories/Tags.stories.tsx +24 -15
  137. package/src/stories/TextEditor.stories.tsx +13 -19
  138. package/src/stories/Theme.stories.tsx +61 -0
  139. package/src/stories/components/EditorStory.tsx +33 -30
  140. package/src/stories/components/util.tsx +51 -52
  141. package/src/translations.ts +30 -25
  142. package/src/util/index.ts +1 -6
  143. package/src/util/react.tsx +8 -13
  144. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  145. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  146. package/dist/lib/browser/types/index.mjs +0 -13
  147. package/dist/lib/browser/types/index.mjs.map +0 -7
  148. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  149. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  150. package/dist/lib/node-esm/types/index.mjs +0 -14
  151. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  152. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +0 -1
  153. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +0 -26
  154. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +0 -1
  155. package/dist/types/src/components/EditorContent/controller.d.ts.map +0 -1
  156. package/dist/types/src/components/EditorContent/index.d.ts +0 -3
  157. package/dist/types/src/components/EditorContent/index.d.ts.map +0 -1
  158. package/dist/types/src/components/EditorMenuProvider/util.d.ts +0 -8
  159. package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +0 -1
  160. package/dist/types/src/components/EditorToolbar/actions.d.ts +0 -39
  161. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +0 -1
  162. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +0 -11
  163. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +0 -1
  164. package/dist/types/src/defaults.d.ts +0 -14
  165. package/dist/types/src/defaults.d.ts.map +0 -1
  166. package/dist/types/src/extensions/annotations.d.ts +0 -9
  167. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  168. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -17
  169. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  170. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  171. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  172. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  173. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  174. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  175. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  176. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  177. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  178. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  179. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  180. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  181. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  182. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  183. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  184. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  185. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  186. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  187. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  188. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  189. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  190. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  191. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  192. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  193. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  194. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  195. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  196. package/dist/types/src/extensions/autoscroll.d.ts +0 -20
  197. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  198. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  199. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  200. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  201. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  202. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  203. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  204. package/dist/types/src/extensions/blast.d.ts +0 -25
  205. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  206. package/dist/types/src/extensions/blocks.d.ts +0 -2
  207. package/dist/types/src/extensions/blocks.d.ts.map +0 -1
  208. package/dist/types/src/extensions/bookmarks.d.ts +0 -12
  209. package/dist/types/src/extensions/bookmarks.d.ts.map +0 -1
  210. package/dist/types/src/extensions/comments.d.ts +0 -95
  211. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  212. package/dist/types/src/extensions/debug.d.ts +0 -3
  213. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  214. package/dist/types/src/extensions/dnd.d.ts +0 -9
  215. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  216. package/dist/types/src/extensions/factories.d.ts +0 -83
  217. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  218. package/dist/types/src/extensions/focus.d.ts +0 -7
  219. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  220. package/dist/types/src/extensions/folding.d.ts +0 -7
  221. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  222. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  223. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  224. package/dist/types/src/extensions/json.d.ts +0 -7
  225. package/dist/types/src/extensions/json.d.ts.map +0 -1
  226. package/dist/types/src/extensions/listener.d.ts +0 -13
  227. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  228. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  229. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  230. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  231. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  232. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  233. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  234. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  235. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  236. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  237. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  238. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  239. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  240. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -61
  241. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  243. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  245. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  247. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  249. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  251. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  253. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  255. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  256. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  257. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  258. package/dist/types/src/extensions/mention.d.ts +0 -7
  259. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  260. package/dist/types/src/extensions/modal.d.ts +0 -7
  261. package/dist/types/src/extensions/modal.d.ts.map +0 -1
  262. package/dist/types/src/extensions/modes.d.ts +0 -10
  263. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  264. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  265. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  266. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  267. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  268. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  269. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  270. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  271. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  272. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  273. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  274. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  275. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  277. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  279. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  280. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  281. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  282. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  283. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  284. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  285. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  286. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  287. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  288. package/dist/types/src/extensions/replacer.d.ts +0 -21
  289. package/dist/types/src/extensions/replacer.d.ts.map +0 -1
  290. package/dist/types/src/extensions/replacer.test.d.ts +0 -2
  291. package/dist/types/src/extensions/replacer.test.d.ts.map +0 -1
  292. package/dist/types/src/extensions/scrolling.d.ts +0 -78
  293. package/dist/types/src/extensions/scrolling.d.ts.map +0 -1
  294. package/dist/types/src/extensions/selection.d.ts +0 -24
  295. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  296. package/dist/types/src/extensions/state.d.ts +0 -2
  297. package/dist/types/src/extensions/state.d.ts.map +0 -1
  298. package/dist/types/src/extensions/submit.d.ts +0 -10
  299. package/dist/types/src/extensions/submit.d.ts.map +0 -1
  300. package/dist/types/src/extensions/tab.d.ts +0 -4
  301. package/dist/types/src/extensions/tab.d.ts.map +0 -1
  302. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  303. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  304. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  305. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  306. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  307. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  308. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  309. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  310. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -97
  311. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  312. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  313. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  314. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  315. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  316. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  317. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  318. package/dist/types/src/styles/index.d.ts +0 -4
  319. package/dist/types/src/styles/index.d.ts.map +0 -1
  320. package/dist/types/src/styles/markdown.d.ts +0 -8
  321. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  322. package/dist/types/src/styles/theme.d.ts +0 -38
  323. package/dist/types/src/styles/theme.d.ts.map +0 -1
  324. package/dist/types/src/styles/tokens.d.ts +0 -3
  325. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  326. package/dist/types/src/types/index.d.ts +0 -2
  327. package/dist/types/src/types/index.d.ts.map +0 -1
  328. package/dist/types/src/types/types.d.ts +0 -21
  329. package/dist/types/src/types/types.d.ts.map +0 -1
  330. package/dist/types/src/util/cursor.d.ts +0 -31
  331. package/dist/types/src/util/cursor.d.ts.map +0 -1
  332. package/dist/types/src/util/debug.d.ts +0 -21
  333. package/dist/types/src/util/debug.d.ts.map +0 -1
  334. package/dist/types/src/util/decorations.d.ts +0 -4
  335. package/dist/types/src/util/decorations.d.ts.map +0 -1
  336. package/dist/types/src/util/dom.d.ts +0 -10
  337. package/dist/types/src/util/dom.d.ts.map +0 -1
  338. package/dist/types/src/util/facet.d.ts +0 -3
  339. package/dist/types/src/util/facet.d.ts.map +0 -1
  340. package/src/components/EditorContent/EditorContent.stories.tsx +0 -70
  341. package/src/components/EditorContent/EditorContent.tsx +0 -70
  342. package/src/components/EditorContent/index.ts +0 -6
  343. package/src/components/EditorMenuProvider/util.ts +0 -31
  344. package/src/components/EditorToolbar/actions.ts +0 -86
  345. package/src/components/EditorToolbar/useEditorToolbar.ts +0 -20
  346. package/src/defaults.ts +0 -52
  347. package/src/extensions/annotations.ts +0 -55
  348. package/src/extensions/autocomplete/autocomplete.ts +0 -151
  349. package/src/extensions/autocomplete/index.ts +0 -8
  350. package/src/extensions/autocomplete/match.ts +0 -46
  351. package/src/extensions/autocomplete/placeholder.ts +0 -117
  352. package/src/extensions/autocomplete/typeahead.ts +0 -87
  353. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  354. package/src/extensions/automerge/automerge.test.tsx +0 -78
  355. package/src/extensions/automerge/automerge.ts +0 -105
  356. package/src/extensions/automerge/cursor.ts +0 -28
  357. package/src/extensions/automerge/defs.ts +0 -31
  358. package/src/extensions/automerge/index.ts +0 -5
  359. package/src/extensions/automerge/sync.ts +0 -79
  360. package/src/extensions/automerge/update-automerge.ts +0 -50
  361. package/src/extensions/automerge/update-codemirror.ts +0 -115
  362. package/src/extensions/autoscroll.ts +0 -163
  363. package/src/extensions/awareness/awareness-provider.ts +0 -127
  364. package/src/extensions/awareness/awareness.ts +0 -315
  365. package/src/extensions/awareness/index.ts +0 -6
  366. package/src/extensions/blast.ts +0 -363
  367. package/src/extensions/blocks.ts +0 -131
  368. package/src/extensions/bookmarks.ts +0 -75
  369. package/src/extensions/comments.ts +0 -598
  370. package/src/extensions/debug.ts +0 -15
  371. package/src/extensions/dnd.ts +0 -37
  372. package/src/extensions/factories.ts +0 -278
  373. package/src/extensions/focus.ts +0 -36
  374. package/src/extensions/folding.tsx +0 -43
  375. package/src/extensions/hashtag.tsx +0 -68
  376. package/src/extensions/json.ts +0 -57
  377. package/src/extensions/listener.ts +0 -32
  378. package/src/extensions/markdown/action.ts +0 -117
  379. package/src/extensions/markdown/bundle.ts +0 -105
  380. package/src/extensions/markdown/changes.test.ts +0 -26
  381. package/src/extensions/markdown/changes.ts +0 -149
  382. package/src/extensions/markdown/debug.ts +0 -44
  383. package/src/extensions/markdown/decorate.ts +0 -601
  384. package/src/extensions/markdown/formatting.test.ts +0 -498
  385. package/src/extensions/markdown/formatting.ts +0 -1265
  386. package/src/extensions/markdown/highlight.ts +0 -183
  387. package/src/extensions/markdown/image.ts +0 -118
  388. package/src/extensions/markdown/index.ts +0 -13
  389. package/src/extensions/markdown/link.ts +0 -50
  390. package/src/extensions/markdown/parser.test.ts +0 -75
  391. package/src/extensions/markdown/styles.ts +0 -135
  392. package/src/extensions/markdown/table.ts +0 -150
  393. package/src/extensions/mention.ts +0 -41
  394. package/src/extensions/modal.ts +0 -24
  395. package/src/extensions/modes.ts +0 -41
  396. package/src/extensions/outliner/commands.ts +0 -270
  397. package/src/extensions/outliner/editor.test.ts +0 -33
  398. package/src/extensions/outliner/editor.ts +0 -184
  399. package/src/extensions/outliner/index.ts +0 -7
  400. package/src/extensions/outliner/menu.ts +0 -128
  401. package/src/extensions/outliner/outliner.test.ts +0 -100
  402. package/src/extensions/outliner/outliner.ts +0 -167
  403. package/src/extensions/outliner/selection.ts +0 -50
  404. package/src/extensions/outliner/tree.test.ts +0 -168
  405. package/src/extensions/outliner/tree.ts +0 -317
  406. package/src/extensions/preview/index.ts +0 -5
  407. package/src/extensions/preview/preview.ts +0 -193
  408. package/src/extensions/replacer.test.ts +0 -75
  409. package/src/extensions/replacer.ts +0 -93
  410. package/src/extensions/scrolling.ts +0 -189
  411. package/src/extensions/selection.ts +0 -100
  412. package/src/extensions/state.ts +0 -7
  413. package/src/extensions/submit.ts +0 -62
  414. package/src/extensions/tab.ts +0 -29
  415. package/src/extensions/tags/extended-markdown.test.ts +0 -262
  416. package/src/extensions/tags/extended-markdown.ts +0 -78
  417. package/src/extensions/tags/index.ts +0 -7
  418. package/src/extensions/tags/streamer.ts +0 -243
  419. package/src/extensions/tags/xml-tags.ts +0 -500
  420. package/src/extensions/tags/xml-util.ts +0 -94
  421. package/src/extensions/typewriter.ts +0 -68
  422. package/src/stories/CommandDialog.stories.tsx +0 -83
  423. package/src/styles/index.ts +0 -7
  424. package/src/styles/markdown.ts +0 -26
  425. package/src/styles/theme.ts +0 -269
  426. package/src/styles/tokens.ts +0 -17
  427. package/src/types/index.ts +0 -5
  428. package/src/types/types.ts +0 -32
  429. package/src/util/cursor.ts +0 -56
  430. package/src/util/debug.ts +0 -69
  431. package/src/util/decorations.ts +0 -21
  432. package/src/util/dom.ts +0 -34
  433. package/src/util/facet.ts +0 -13
  434. /package/dist/types/src/components/{EditorContent → Editor}/controller.d.ts +0 -0
  435. /package/src/components/{EditorContent → Editor}/controller.ts +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"facet.d.ts","sourceRoot":"","sources":["../../../../src/util/facet.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,eAAO,MAAM,gBAAgB,GAAI,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,eAAe,CAAC,gBAMvD,CAAC"}
@@ -1,70 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React from 'react';
7
- import { useMemo } from 'react';
8
-
9
- import { createDocAccessor, createObject } from '@dxos/client/echo';
10
- import { useThemeContext } from '@dxos/react-ui';
11
- import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
- import { Text } from '@dxos/schema';
13
-
14
- import { automerge, createBasicExtensions, createThemeExtensions } from '../../extensions';
15
-
16
- import { EditorContent } from './EditorContent';
17
-
18
- const meta = {
19
- title: 'ui/react-ui-editor/EditorComponent',
20
- component: EditorContent,
21
- decorators: [withTheme, withLayout({ container: 'column' })],
22
- } satisfies Meta<typeof EditorContent>;
23
-
24
- export default meta;
25
-
26
- type Story = StoryObj<typeof meta>;
27
-
28
- export const Default: Story = {
29
- render: (args) => {
30
- const { themeMode } = useThemeContext();
31
- const extensions = useMemo(
32
- () => [
33
- // Basic extensions.
34
- createBasicExtensions(),
35
- createThemeExtensions({ themeMode }),
36
- ],
37
- [],
38
- );
39
-
40
- return <EditorContent classNames='p-2' {...args} extensions={extensions} />;
41
- },
42
- args: {
43
- selectionEnd: true,
44
- value: 'Hello world!',
45
- onChange: (value) => console.log(value),
46
- },
47
- };
48
-
49
- export const Automerge: Story = {
50
- render: ({ value, ...props }) => {
51
- const { themeMode } = useThemeContext();
52
- const extensions = useMemo(
53
- () => [
54
- // Basic extensions.
55
- createBasicExtensions(),
56
- createThemeExtensions({ themeMode }),
57
- automerge(createDocAccessor(createObject(Text.make(value)), ['content'])),
58
- ],
59
- [],
60
- );
61
-
62
- // TODO(burdon): Remove the need for initialValue.
63
- return <EditorContent classNames='p-2' {...props} initialValue={value} extensions={extensions} />;
64
- },
65
- args: {
66
- selectionEnd: true,
67
- value: 'Hello world!',
68
- onChange: (value) => console.log(value),
69
- },
70
- };
@@ -1,70 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { Transaction } from '@codemirror/state';
6
- import { EditorView } from '@codemirror/view';
7
- import React, { forwardRef, useEffect, useImperativeHandle } from 'react';
8
-
9
- import { type ThemedClassName } from '@dxos/react-ui';
10
- import { mx } from '@dxos/react-ui-theme';
11
-
12
- import { initialSync } from '../../extensions';
13
- import { type UseTextEditorProps, useTextEditor } from '../../hooks';
14
-
15
- import { type EditorController, createEditorController } from './controller';
16
-
17
- export type EditorContentProps = ThemedClassName<
18
- {
19
- value?: string;
20
- onChange?: (value: string) => void;
21
- } & UseTextEditorProps
22
- >;
23
-
24
- /**
25
- * Minimal text editor.
26
- * NOTE: This shouold not be used with the automerge extension.
27
- * @deprecated Use Editor.Content
28
- */
29
- export const EditorContent = forwardRef<EditorController, EditorContentProps>(
30
- ({ classNames, id, extensions, selectionEnd, value, onChange, ...props }, forwardedRef) => {
31
- const { parentRef, focusAttributes, view } = useTextEditor(
32
- () => ({
33
- id,
34
- initialValue: value,
35
- selectionEnd,
36
- extensions: [
37
- extensions ?? [],
38
- EditorView.updateListener.of(({ view, docChanged, transactions }) => {
39
- const isInitialSync = transactions.some((tr) => tr.annotation(Transaction.userEvent) === initialSync.value);
40
- if (!isInitialSync && docChanged) {
41
- onChange?.(view.state.doc.toString());
42
- }
43
- }),
44
- ],
45
- ...props,
46
- }),
47
- [id, extensions, onChange, selectionEnd],
48
- );
49
-
50
- // External controller.
51
- useImperativeHandle(forwardedRef, () => {
52
- return createEditorController(view);
53
- }, [id, view]);
54
-
55
- // Set initial value and cursor position.
56
- useEffect(() => {
57
- requestAnimationFrame(() => {
58
- view?.dispatch({
59
- annotations: initialSync,
60
- changes: value ? [{ from: 0, to: view?.state.doc.length ?? 0, insert: value ?? '' }] : [],
61
- selection: selectionEnd ? { anchor: view?.state.doc.length ?? 0 } : undefined,
62
- });
63
-
64
- view?.focus();
65
- });
66
- }, [view, value, selectionEnd]);
67
-
68
- return <div role='none' className={mx('is-full', classNames)} {...focusAttributes} ref={parentRef} />;
69
- },
70
- );
@@ -1,6 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- export * from './controller';
6
- export * from './EditorContent';
@@ -1,31 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type EditorView } from '@codemirror/view';
6
-
7
- // TODO(burdon): Factor out.
8
-
9
- export const insertAtCursor = (view: EditorView, from: number, insert: string) => {
10
- view.dispatch({
11
- changes: { from, to: from, insert },
12
- selection: { anchor: from + insert.length, head: from + insert.length },
13
- });
14
- };
15
-
16
- /**
17
- * If the cursor is at the start of a line, insert the text at the cursor.
18
- * Otherwise, insert the text on a new line.
19
- */
20
- export const insertAtLineStart = (view: EditorView, from: number, insert: string) => {
21
- const line = view.state.doc.lineAt(from);
22
- if (line.from === from) {
23
- insertAtCursor(view, from, insert);
24
- } else {
25
- insert = '\n' + insert;
26
- view.dispatch({
27
- changes: { from: line.to, to: line.to, insert },
28
- selection: { anchor: line.to + insert.length, head: line.to + insert.length },
29
- });
30
- }
31
- };
@@ -1,86 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type EditorView } from '@codemirror/view';
6
-
7
- import { type Action, type NodeArg } from '@dxos/app-graph';
8
- import {
9
- type MenuActionProperties,
10
- type ToolbarMenuActionGroupProperties,
11
- createMenuAction,
12
- createMenuItemGroup,
13
- } from '@dxos/react-ui-menu';
14
-
15
- import { List, addList, removeList } from '../../extensions';
16
- import { translationKey } from '../../translations';
17
-
18
- import { type EditorToolbarState } from './useEditorToolbar';
19
-
20
- const listStyles = {
21
- bullet: 'ph--list-bullets--regular',
22
- ordered: 'ph--list-numbers--regular',
23
- task: 'ph--list-checks--regular',
24
- };
25
-
26
- export const createLists = (state: EditorToolbarState, getView: () => EditorView) => {
27
- const value = state.listStyle ?? '';
28
- const listGroupAction = createListGroupAction(value);
29
- const listActionsMap = createListActions(value, getView);
30
- return {
31
- nodes: [listGroupAction as NodeArg<any>, ...listActionsMap],
32
- edges: [
33
- { source: 'root', target: 'list' },
34
- ...listActionsMap.map(({ id }) => ({ source: listGroupAction.id, target: id })),
35
- ],
36
- };
37
- };
38
-
39
- export const createEditorAction = (id: string, props: Partial<MenuActionProperties>, invoke: () => void) => {
40
- const { label = [`${id} label`, { ns: translationKey }], ...rest } = props;
41
-
42
- return createMenuAction(id, invoke, {
43
- label,
44
- ...rest,
45
- }) as Action<MenuActionProperties>;
46
- };
47
-
48
- export const createEditorActionGroup = (
49
- id: string,
50
- props: Omit<ToolbarMenuActionGroupProperties, 'icon'>,
51
- icon?: string,
52
- ) => {
53
- const { label = [`${id} label`, { ns: translationKey }], ...rest } = props;
54
-
55
- return createMenuItemGroup(id, {
56
- label,
57
- icon,
58
- iconOnly: true,
59
- ...rest,
60
- });
61
- };
62
-
63
- const createListGroupAction = (value: string) =>
64
- createEditorActionGroup('list', {
65
- variant: 'toggleGroup',
66
- selectCardinality: 'single',
67
- value,
68
- } as ToolbarMenuActionGroupProperties);
69
-
70
- const createListActions = (value: string, getView: () => EditorView) =>
71
- Object.entries(listStyles).map(([listStyle, icon]) => {
72
- const checked = value === listStyle;
73
- return createEditorAction(`list-${listStyle}`, { checked, icon }, () => {
74
- const view = getView();
75
- if (!view) {
76
- return;
77
- }
78
-
79
- const listType = listStyle === 'ordered' ? List.Ordered : listStyle === 'bullet' ? List.Bullet : List.Task;
80
- if (checked) {
81
- removeList(listType)(view);
82
- } else {
83
- addList(listType)(view);
84
- }
85
- });
86
- });
@@ -1,20 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { useMemo } from 'react';
6
-
7
- import { type Live, live } from '@dxos/live-object';
8
-
9
- import { type Formatting } from '../../extensions';
10
- import { type EditorViewMode } from '../../types';
11
-
12
- // TODO(burdon): Move to extensions.
13
- export type EditorToolbarState = { viewMode?: EditorViewMode } & Formatting;
14
-
15
- /**
16
- * @deprecated Use Editor.Root
17
- */
18
- export const useEditorToolbar = (initialState: Partial<EditorToolbarState> = {}): Live<EditorToolbarState> => {
19
- return useMemo(() => live<EditorToolbarState>(initialState), []);
20
- };
package/src/defaults.ts DELETED
@@ -1,52 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { EditorView } from '@codemirror/view';
6
-
7
- import { mx } from '@dxos/react-ui-theme';
8
-
9
- import { type ThemeExtensionsOptions } from './extensions';
10
- import { fontMono } from './styles';
11
-
12
- /**
13
- * CodeMirror content width.
14
- * 40rem = 640px. Corresponds to initial plank width (Google docs, Stashpad, etc.)
15
- * 50rem = 800px. Maximum content width for solo mode.
16
- * NOTE: Max width - 4rem = 2rem left/right margin (or 2rem gutter plus 1rem left/right margin).
17
- */
18
- export const editorWidth = '!mli-auto is-full max-is-[min(50rem,100%-4rem)]';
19
-
20
- export const editorSlots: ThemeExtensionsOptions['slots'] = {
21
- scroll: {
22
- className: 'pbs-2',
23
- },
24
- content: {
25
- className: editorWidth,
26
- },
27
- };
28
-
29
- export const editorGutter = EditorView.theme({
30
- '.cm-gutters': {
31
- // NOTE: Color required to cover content if scrolling horizontally.
32
- // TODO(burdon): Non-transparent background clips the focus ring.
33
- background: 'var(--dx-baseSurface) !important',
34
- paddingRight: '1rem',
35
- },
36
- });
37
-
38
- export const editorMonospace = EditorView.theme({
39
- '.cm-content': {
40
- fontFamily: fontMono,
41
- },
42
- });
43
-
44
- export const editorWithToolbarLayout =
45
- 'grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden';
46
-
47
- // NOTE: Padding is added to the editor to account for the focus ring (since otherwise the CM gutter will clip it)
48
- export const stackItemContentEditorClassNames = (role?: string) =>
49
- mx(
50
- 'p-0.5 dx-focus-ring-inset attention-surface data-[toolbar=disabled]:pbs-2',
51
- role === 'section' ? '[&_.cm-scroller]:overflow-hidden [&_.cm-scroller]:min-bs-24' : 'min-bs-0',
52
- );
@@ -1,55 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type Extension, RangeSetBuilder } from '@codemirror/state';
6
- import { Decoration, type DecorationSet, EditorView, ViewPlugin, type ViewUpdate } from '@codemirror/view';
7
-
8
- const annotationMark = Decoration.mark({ class: 'cm-annotation' });
9
-
10
- export type AnnotationOptions = {
11
- match?: RegExp; // TODO(burdon): Update via hook (e.g., for search).
12
- };
13
-
14
- /**
15
- *
16
- */
17
- export const annotations = ({ match }: AnnotationOptions = {}): Extension => {
18
- return [
19
- ViewPlugin.fromClass(
20
- class {
21
- decorations: DecorationSet = Decoration.none;
22
- update(update: ViewUpdate) {
23
- const builder = new RangeSetBuilder<Decoration>();
24
- if (match) {
25
- // Only process visible lines.
26
- const { from, to } = update.view.viewport;
27
- const text = update.state.doc.sliceString(from, to);
28
- const matches = text.matchAll(match);
29
- for (const m of matches) {
30
- if (m.index !== undefined) {
31
- // Adjust match position relative to viewport.
32
- const start = from + m.index;
33
- const end = start + m[0].length;
34
- builder.add(start, end, annotationMark);
35
- }
36
- }
37
- }
38
-
39
- this.decorations = builder.finish();
40
- }
41
- },
42
- {
43
- decorations: (v) => v.decorations,
44
- },
45
- ),
46
-
47
- EditorView.theme({
48
- '.cm-annotation': {
49
- textDecoration: 'underline',
50
- textDecorationStyle: 'wavy',
51
- textDecorationColor: 'var(--dx-errorText)',
52
- },
53
- }),
54
- ];
55
- };
@@ -1,151 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type Extension, Prec } from '@codemirror/state';
6
- import {
7
- Decoration,
8
- type DecorationSet,
9
- EditorView,
10
- ViewPlugin,
11
- type ViewUpdate,
12
- WidgetType,
13
- keymap,
14
- } from '@codemirror/view';
15
-
16
- export type AutocompleteOptions = {
17
- /**
18
- * Function that returns a list of suggestions based on the current text.
19
- * @param text The current text before the cursor
20
- * @returns Array of suggestion strings
21
- */
22
- onSuggest?: (text: string) => string[];
23
- };
24
-
25
- /**
26
- * Creates an autocomplete extension that shows inline suggestions.
27
- * Pressing Tab will complete the suggestion.
28
- *
29
- * @deprecated Use typeahead.
30
- */
31
- export const autocomplete = ({ onSuggest }: AutocompleteOptions = {}): Extension => {
32
- const suggest = ViewPlugin.fromClass(
33
- class {
34
- _decorations: DecorationSet;
35
- _currentSuggestion: string | null = null;
36
-
37
- constructor(view: EditorView) {
38
- this._decorations = this.computeDecorations(view);
39
- }
40
-
41
- update(update: ViewUpdate) {
42
- if (update.docChanged || update.selectionSet) {
43
- this._decorations = this.computeDecorations(update.view);
44
- }
45
- }
46
-
47
- private computeDecorations(view: EditorView): DecorationSet {
48
- const text = view.state.doc.toString();
49
- const suggestions = onSuggest?.(text) ?? [];
50
- if (!suggestions.length) {
51
- this._currentSuggestion = null;
52
- return Decoration.none;
53
- }
54
-
55
- // Get the first suggestion.
56
- this._currentSuggestion = suggestions[0];
57
- const suffix = this._currentSuggestion.slice(text.length);
58
- if (!suffix) {
59
- return Decoration.none;
60
- }
61
-
62
- // Always show ghost text at the end of the document.
63
- return Decoration.set([
64
- Decoration.widget({
65
- widget: new InlineSuggestionWidget(suffix),
66
- side: 1,
67
- }).range(view.state.doc.length),
68
- ]);
69
- }
70
-
71
- completeSuggestion(view: EditorView): boolean {
72
- if (!this._currentSuggestion) {
73
- return false;
74
- }
75
-
76
- const text = view.state.doc.toString();
77
- const suffix = this._currentSuggestion.slice(text.length);
78
- if (!suffix) {
79
- return false;
80
- }
81
-
82
- view.dispatch({
83
- changes: {
84
- from: view.state.doc.length,
85
- insert: suffix,
86
- },
87
- selection: {
88
- anchor: view.state.doc.length + suffix.length,
89
- },
90
- });
91
-
92
- return true;
93
- }
94
- },
95
- {
96
- decorations: (v) => v._decorations,
97
- },
98
- );
99
-
100
- return [
101
- suggest,
102
- EditorView.theme({
103
- '.cm-inline-suggestion': {
104
- opacity: 0.4,
105
- },
106
- }),
107
-
108
- Prec.highest(
109
- keymap.of([
110
- {
111
- key: 'Tab',
112
- preventDefault: true,
113
- run: (view) => {
114
- const plugin = view.plugin(suggest);
115
- return plugin?.completeSuggestion(view) ?? false;
116
- },
117
- },
118
- {
119
- key: 'ArrowRight',
120
- preventDefault: true,
121
- run: (view) => {
122
- // Only complete if cursor is at the end
123
- if (view.state.selection.main.head !== view.state.doc.length) {
124
- return false;
125
- }
126
-
127
- const plugin = view.plugin(suggest);
128
- return plugin?.completeSuggestion(view) ?? false;
129
- },
130
- },
131
- ]),
132
- ),
133
- ];
134
- };
135
-
136
- class InlineSuggestionWidget extends WidgetType {
137
- constructor(private suffix: string) {
138
- super();
139
- }
140
-
141
- override eq(other: this) {
142
- return this.suffix === other.suffix;
143
- }
144
-
145
- override toDOM() {
146
- const span = document.createElement('span');
147
- span.textContent = this.suffix;
148
- span.className = 'cm-inline-suggestion';
149
- return span;
150
- }
151
- }
@@ -1,8 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export * from './autocomplete';
6
- export * from './match';
7
- export * from './placeholder';
8
- export * from './typeahead';
@@ -1,46 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- export type CompoetionContext = { line: string };
6
-
7
- export type CompletionOptions = {
8
- default?: string;
9
- minLength?: number;
10
- };
11
-
12
- /**
13
- * Util to match current line to a static list of completions.
14
- */
15
- export const staticCompletion =
16
- (completions: string[], options: CompletionOptions = {}) =>
17
- ({ line }: CompoetionContext) => {
18
- if (line.length === 0 && options.default) {
19
- return options.default;
20
- }
21
-
22
- const parts = line.split(/\s+/).filter(Boolean);
23
- if (parts.length) {
24
- const str = parts.at(-1)!;
25
- if (str.length >= (options.minLength ?? 0)) {
26
- for (const completion of completions) {
27
- const match = matchCompletion(completion, str);
28
- if (match) {
29
- return match;
30
- }
31
- }
32
- }
33
- }
34
- };
35
-
36
- export const matchCompletion = (completion: string, str: string, minLength = 0): string | undefined => {
37
- if (
38
- str.length >= minLength &&
39
- completion.length > str.length &&
40
- completion.startsWith(str)
41
- // TODO(burdon): If case insensitive, need to replace existing chars.
42
- // completion.toLowerCase().startsWith(str.toLowerCase())
43
- ) {
44
- return completion.slice(str.length);
45
- }
46
- };