@dxos/react-ui-editor 0.8.4-main.fffef41 → 0.9.0

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/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +1126 -8845
  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 +1126 -8844
  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 +3 -5
  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 +9 -3
  27. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -1
  28. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +3 -3
  29. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -1
  30. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +1 -1
  31. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -1
  32. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +8 -6
  33. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  34. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  35. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  36. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  37. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  38. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  39. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  40. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  41. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  42. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -2
  43. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  44. package/dist/types/src/components/EditorToolbar/lists.d.ts +6 -0
  45. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -0
  46. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  47. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  48. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  49. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  50. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  51. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  52. package/dist/types/src/components/index.d.ts +0 -2
  53. package/dist/types/src/components/index.d.ts.map +1 -1
  54. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  55. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  56. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  57. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  58. package/dist/types/src/extensions/index.d.ts +1 -31
  59. package/dist/types/src/extensions/index.d.ts.map +1 -1
  60. package/dist/types/src/hooks/index.d.ts +1 -0
  61. package/dist/types/src/hooks/index.d.ts.map +1 -1
  62. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  63. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  64. package/dist/types/src/hooks/useTextEditor.d.ts +1 -1
  65. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  66. package/dist/types/src/index.d.ts +0 -9
  67. package/dist/types/src/index.d.ts.map +1 -1
  68. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  69. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  70. package/dist/types/src/stories/Comments.stories.d.ts +3 -2
  71. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  72. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  73. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  74. package/dist/types/src/stories/Experimental.stories.d.ts +4 -3
  75. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  76. package/dist/types/src/stories/Markdown.stories.d.ts +3 -2
  77. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  78. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  79. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  80. package/dist/types/src/stories/Popover.stories.d.ts +2 -2
  81. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  82. package/dist/types/src/stories/Preview.stories.d.ts +3 -2
  83. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  84. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  85. package/dist/types/src/stories/TextEditor.stories.d.ts +3 -2
  86. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  87. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  88. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  89. package/dist/types/src/stories/components/EditorStory.d.ts +9 -20
  90. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  91. package/dist/types/src/stories/components/util.d.ts +4 -3
  92. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  93. package/dist/types/src/translations.d.ts +26 -26
  94. package/dist/types/src/translations.d.ts.map +1 -1
  95. package/dist/types/src/util/index.d.ts +0 -5
  96. package/dist/types/src/util/index.d.ts.map +1 -1
  97. package/dist/types/src/util/react.d.ts +6 -5
  98. package/dist/types/src/util/react.d.ts.map +1 -1
  99. package/dist/types/tsconfig.tsbuildinfo +1 -1
  100. package/package.json +93 -86
  101. package/src/components/Editor/Editor.stories.tsx +26 -26
  102. package/src/components/Editor/Editor.tsx +68 -55
  103. package/src/components/Editor/EditorView.tsx +99 -0
  104. package/src/components/{EditorContent → Editor}/controller.ts +13 -4
  105. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +40 -39
  106. package/src/components/EditorMenuProvider/index.ts +0 -1
  107. package/src/components/EditorMenuProvider/menu-presets.ts +3 -1
  108. package/src/components/EditorMenuProvider/menu.ts +1 -2
  109. package/src/components/EditorMenuProvider/popover.ts +42 -9
  110. package/src/components/EditorMenuProvider/useEditorMenu.ts +21 -7
  111. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +6 -9
  112. package/src/components/EditorToolbar/EditorToolbar.tsx +37 -68
  113. package/src/components/EditorToolbar/blocks.ts +55 -48
  114. package/src/components/EditorToolbar/formatting.ts +44 -46
  115. package/src/components/EditorToolbar/headings.ts +45 -51
  116. package/src/components/EditorToolbar/image.ts +16 -14
  117. package/src/components/EditorToolbar/index.ts +2 -3
  118. package/src/components/EditorToolbar/lists.ts +58 -0
  119. package/src/components/EditorToolbar/search.ts +16 -14
  120. package/src/components/EditorToolbar/types.ts +8 -0
  121. package/src/components/EditorToolbar/view-mode.ts +37 -43
  122. package/src/components/index.ts +0 -5
  123. package/src/extensions/Assistant.stories.tsx +112 -0
  124. package/src/extensions/assistant-extension.tsx +223 -0
  125. package/src/extensions/index.ts +2 -32
  126. package/src/hooks/index.ts +1 -0
  127. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  128. package/src/hooks/useTextEditor.ts +9 -3
  129. package/src/index.ts +0 -13
  130. package/src/stories/Automerge.stories.tsx +177 -0
  131. package/src/stories/Comments.stories.tsx +48 -43
  132. package/src/stories/EditorToolbar.stories.tsx +40 -53
  133. package/src/stories/Experimental.stories.tsx +14 -16
  134. package/src/stories/Markdown.stories.tsx +16 -16
  135. package/src/stories/Outliner.stories.tsx +11 -12
  136. package/src/stories/Popover.stories.tsx +30 -34
  137. package/src/stories/Preview.stories.tsx +72 -58
  138. package/src/stories/Tags.stories.tsx +24 -15
  139. package/src/stories/TextEditor.stories.tsx +13 -19
  140. package/src/stories/Theme.stories.tsx +61 -0
  141. package/src/stories/components/EditorStory.tsx +33 -30
  142. package/src/stories/components/util.tsx +51 -52
  143. package/src/translations.ts +30 -25
  144. package/src/util/index.ts +1 -6
  145. package/src/util/react.tsx +8 -13
  146. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  147. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  148. package/dist/lib/browser/types/index.mjs +0 -13
  149. package/dist/lib/browser/types/index.mjs.map +0 -7
  150. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  151. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  152. package/dist/lib/node-esm/types/index.mjs +0 -14
  153. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  154. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +0 -1
  155. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +0 -26
  156. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +0 -1
  157. package/dist/types/src/components/EditorContent/controller.d.ts.map +0 -1
  158. package/dist/types/src/components/EditorContent/index.d.ts +0 -3
  159. package/dist/types/src/components/EditorContent/index.d.ts.map +0 -1
  160. package/dist/types/src/components/EditorMenuProvider/util.d.ts +0 -8
  161. package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +0 -1
  162. package/dist/types/src/components/EditorToolbar/actions.d.ts +0 -39
  163. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +0 -1
  164. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +0 -11
  165. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +0 -1
  166. package/dist/types/src/defaults.d.ts +0 -14
  167. package/dist/types/src/defaults.d.ts.map +0 -1
  168. package/dist/types/src/extensions/annotations.d.ts +0 -9
  169. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  170. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -17
  171. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  172. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  173. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  174. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  175. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  176. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  177. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  178. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  179. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  180. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  181. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  182. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  183. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  184. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  185. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  186. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  187. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  188. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  189. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  190. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  191. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  192. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  193. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  194. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  195. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  196. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  197. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  198. package/dist/types/src/extensions/autoscroll.d.ts +0 -20
  199. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  200. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  201. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  202. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  203. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  204. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  205. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  206. package/dist/types/src/extensions/blast.d.ts +0 -25
  207. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  208. package/dist/types/src/extensions/blocks.d.ts +0 -2
  209. package/dist/types/src/extensions/blocks.d.ts.map +0 -1
  210. package/dist/types/src/extensions/bookmarks.d.ts +0 -12
  211. package/dist/types/src/extensions/bookmarks.d.ts.map +0 -1
  212. package/dist/types/src/extensions/comments.d.ts +0 -95
  213. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  214. package/dist/types/src/extensions/debug.d.ts +0 -3
  215. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  216. package/dist/types/src/extensions/dnd.d.ts +0 -9
  217. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  218. package/dist/types/src/extensions/factories.d.ts +0 -83
  219. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  220. package/dist/types/src/extensions/focus.d.ts +0 -7
  221. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  222. package/dist/types/src/extensions/folding.d.ts +0 -7
  223. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  224. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  225. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  226. package/dist/types/src/extensions/json.d.ts +0 -7
  227. package/dist/types/src/extensions/json.d.ts.map +0 -1
  228. package/dist/types/src/extensions/listener.d.ts +0 -13
  229. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  230. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  231. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  232. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  233. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  234. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  235. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  236. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  237. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  238. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  239. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  240. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  241. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -61
  243. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  245. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  247. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  249. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  251. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  253. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  255. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  256. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  257. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  258. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  259. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  260. package/dist/types/src/extensions/mention.d.ts +0 -7
  261. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  262. package/dist/types/src/extensions/modal.d.ts +0 -7
  263. package/dist/types/src/extensions/modal.d.ts.map +0 -1
  264. package/dist/types/src/extensions/modes.d.ts +0 -10
  265. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  266. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  267. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  268. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  269. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  270. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  271. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  272. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  273. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  274. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  275. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  277. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  279. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  280. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  281. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  282. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  283. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  284. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  285. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  286. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  287. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  288. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  289. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  290. package/dist/types/src/extensions/replacer.d.ts +0 -21
  291. package/dist/types/src/extensions/replacer.d.ts.map +0 -1
  292. package/dist/types/src/extensions/replacer.test.d.ts +0 -2
  293. package/dist/types/src/extensions/replacer.test.d.ts.map +0 -1
  294. package/dist/types/src/extensions/scrolling.d.ts +0 -78
  295. package/dist/types/src/extensions/scrolling.d.ts.map +0 -1
  296. package/dist/types/src/extensions/selection.d.ts +0 -24
  297. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  298. package/dist/types/src/extensions/state.d.ts +0 -2
  299. package/dist/types/src/extensions/state.d.ts.map +0 -1
  300. package/dist/types/src/extensions/submit.d.ts +0 -10
  301. package/dist/types/src/extensions/submit.d.ts.map +0 -1
  302. package/dist/types/src/extensions/tab.d.ts +0 -4
  303. package/dist/types/src/extensions/tab.d.ts.map +0 -1
  304. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  305. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  306. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  307. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  308. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  309. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  310. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  311. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  312. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -97
  313. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  314. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  315. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  316. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  317. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  318. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  319. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  320. package/dist/types/src/styles/index.d.ts +0 -4
  321. package/dist/types/src/styles/index.d.ts.map +0 -1
  322. package/dist/types/src/styles/markdown.d.ts +0 -8
  323. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  324. package/dist/types/src/styles/theme.d.ts +0 -38
  325. package/dist/types/src/styles/theme.d.ts.map +0 -1
  326. package/dist/types/src/styles/tokens.d.ts +0 -3
  327. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  328. package/dist/types/src/types/index.d.ts +0 -2
  329. package/dist/types/src/types/index.d.ts.map +0 -1
  330. package/dist/types/src/types/types.d.ts +0 -21
  331. package/dist/types/src/types/types.d.ts.map +0 -1
  332. package/dist/types/src/util/cursor.d.ts +0 -31
  333. package/dist/types/src/util/cursor.d.ts.map +0 -1
  334. package/dist/types/src/util/debug.d.ts +0 -21
  335. package/dist/types/src/util/debug.d.ts.map +0 -1
  336. package/dist/types/src/util/decorations.d.ts +0 -4
  337. package/dist/types/src/util/decorations.d.ts.map +0 -1
  338. package/dist/types/src/util/dom.d.ts +0 -10
  339. package/dist/types/src/util/dom.d.ts.map +0 -1
  340. package/dist/types/src/util/facet.d.ts +0 -3
  341. package/dist/types/src/util/facet.d.ts.map +0 -1
  342. package/src/components/EditorContent/EditorContent.stories.tsx +0 -70
  343. package/src/components/EditorContent/EditorContent.tsx +0 -70
  344. package/src/components/EditorContent/index.ts +0 -6
  345. package/src/components/EditorMenuProvider/util.ts +0 -31
  346. package/src/components/EditorToolbar/actions.ts +0 -86
  347. package/src/components/EditorToolbar/useEditorToolbar.ts +0 -20
  348. package/src/defaults.ts +0 -52
  349. package/src/extensions/annotations.ts +0 -55
  350. package/src/extensions/autocomplete/autocomplete.ts +0 -151
  351. package/src/extensions/autocomplete/index.ts +0 -8
  352. package/src/extensions/autocomplete/match.ts +0 -46
  353. package/src/extensions/autocomplete/placeholder.ts +0 -117
  354. package/src/extensions/autocomplete/typeahead.ts +0 -87
  355. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  356. package/src/extensions/automerge/automerge.test.tsx +0 -78
  357. package/src/extensions/automerge/automerge.ts +0 -105
  358. package/src/extensions/automerge/cursor.ts +0 -28
  359. package/src/extensions/automerge/defs.ts +0 -31
  360. package/src/extensions/automerge/index.ts +0 -5
  361. package/src/extensions/automerge/sync.ts +0 -79
  362. package/src/extensions/automerge/update-automerge.ts +0 -50
  363. package/src/extensions/automerge/update-codemirror.ts +0 -115
  364. package/src/extensions/autoscroll.ts +0 -163
  365. package/src/extensions/awareness/awareness-provider.ts +0 -127
  366. package/src/extensions/awareness/awareness.ts +0 -315
  367. package/src/extensions/awareness/index.ts +0 -6
  368. package/src/extensions/blast.ts +0 -363
  369. package/src/extensions/blocks.ts +0 -131
  370. package/src/extensions/bookmarks.ts +0 -75
  371. package/src/extensions/comments.ts +0 -598
  372. package/src/extensions/debug.ts +0 -15
  373. package/src/extensions/dnd.ts +0 -37
  374. package/src/extensions/factories.ts +0 -278
  375. package/src/extensions/focus.ts +0 -36
  376. package/src/extensions/folding.tsx +0 -43
  377. package/src/extensions/hashtag.tsx +0 -68
  378. package/src/extensions/json.ts +0 -57
  379. package/src/extensions/listener.ts +0 -32
  380. package/src/extensions/markdown/action.ts +0 -117
  381. package/src/extensions/markdown/bundle.ts +0 -105
  382. package/src/extensions/markdown/changes.test.ts +0 -26
  383. package/src/extensions/markdown/changes.ts +0 -149
  384. package/src/extensions/markdown/debug.ts +0 -44
  385. package/src/extensions/markdown/decorate.ts +0 -601
  386. package/src/extensions/markdown/formatting.test.ts +0 -498
  387. package/src/extensions/markdown/formatting.ts +0 -1265
  388. package/src/extensions/markdown/highlight.ts +0 -183
  389. package/src/extensions/markdown/image.ts +0 -118
  390. package/src/extensions/markdown/index.ts +0 -13
  391. package/src/extensions/markdown/link.ts +0 -50
  392. package/src/extensions/markdown/parser.test.ts +0 -75
  393. package/src/extensions/markdown/styles.ts +0 -135
  394. package/src/extensions/markdown/table.ts +0 -150
  395. package/src/extensions/mention.ts +0 -41
  396. package/src/extensions/modal.ts +0 -24
  397. package/src/extensions/modes.ts +0 -41
  398. package/src/extensions/outliner/commands.ts +0 -270
  399. package/src/extensions/outliner/editor.test.ts +0 -33
  400. package/src/extensions/outliner/editor.ts +0 -184
  401. package/src/extensions/outliner/index.ts +0 -7
  402. package/src/extensions/outliner/menu.ts +0 -128
  403. package/src/extensions/outliner/outliner.test.ts +0 -100
  404. package/src/extensions/outliner/outliner.ts +0 -167
  405. package/src/extensions/outliner/selection.ts +0 -50
  406. package/src/extensions/outliner/tree.test.ts +0 -168
  407. package/src/extensions/outliner/tree.ts +0 -317
  408. package/src/extensions/preview/index.ts +0 -5
  409. package/src/extensions/preview/preview.ts +0 -193
  410. package/src/extensions/replacer.test.ts +0 -75
  411. package/src/extensions/replacer.ts +0 -93
  412. package/src/extensions/scrolling.ts +0 -189
  413. package/src/extensions/selection.ts +0 -100
  414. package/src/extensions/state.ts +0 -7
  415. package/src/extensions/submit.ts +0 -62
  416. package/src/extensions/tab.ts +0 -29
  417. package/src/extensions/tags/extended-markdown.test.ts +0 -262
  418. package/src/extensions/tags/extended-markdown.ts +0 -78
  419. package/src/extensions/tags/index.ts +0 -7
  420. package/src/extensions/tags/streamer.ts +0 -243
  421. package/src/extensions/tags/xml-tags.ts +0 -500
  422. package/src/extensions/tags/xml-util.ts +0 -94
  423. package/src/extensions/typewriter.ts +0 -68
  424. package/src/stories/CommandDialog.stories.tsx +0 -83
  425. package/src/styles/index.ts +0 -7
  426. package/src/styles/markdown.ts +0 -26
  427. package/src/styles/theme.ts +0 -269
  428. package/src/styles/tokens.ts +0 -17
  429. package/src/types/index.ts +0 -5
  430. package/src/types/types.ts +0 -32
  431. package/src/util/cursor.ts +0 -56
  432. package/src/util/debug.ts +0 -69
  433. package/src/util/decorations.ts +0 -21
  434. package/src/util/dom.ts +0 -34
  435. package/src/util/facet.ts +0 -13
  436. /package/dist/types/src/components/{EditorContent → Editor}/controller.d.ts +0 -0
@@ -2,54 +2,48 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type NodeArg } from '@dxos/app-graph';
6
- import { type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
5
+ import { type ActionGroupBuilderFn, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
6
+ import { type EditorViewMode } from '@dxos/ui-editor/types';
7
7
 
8
- import { translationKey } from '../../translations';
9
- import { type EditorViewMode } from '../../types';
8
+ import { translationKey } from '#translations';
10
9
 
11
- import { createEditorAction, createEditorActionGroup } from './actions';
12
- import { type EditorToolbarState } from './useEditorToolbar';
10
+ import { type EditorToolbarState } from './types';
13
11
 
14
- const createViewModeGroupAction = (value: string) =>
15
- createEditorActionGroup(
16
- 'viewMode',
17
- {
18
- variant: 'dropdownMenu',
19
- applyActive: true,
20
- selectCardinality: 'single',
21
- value,
22
- } as ToolbarMenuActionGroupProperties,
23
- 'ph--eye--regular',
24
- );
12
+ const viewModes = {
13
+ preview: 'ph--eye--regular',
14
+ source: 'ph--pencil-simple--regular',
15
+ readonly: 'ph--pencil-slash--regular',
16
+ };
25
17
 
26
- const createViewModeActions = (value: string, onViewModeChange: (mode: EditorViewMode) => void) =>
27
- Object.entries({
28
- preview: 'ph--eye--regular',
29
- source: 'ph--pencil-simple--regular',
30
- readonly: 'ph--pencil-slash--regular',
31
- }).map(([viewMode, icon]) => {
32
- const checked = viewMode === value;
33
- return createEditorAction(
34
- `view-mode--${viewMode}`,
18
+ /** Add view mode actions to the builder. */
19
+ export const addViewMode =
20
+ (state: EditorToolbarState, onViewModeChange: (mode: EditorViewMode) => void): ActionGroupBuilderFn =>
21
+ (builder) => {
22
+ const value = state.viewMode ?? 'source';
23
+ builder.group(
24
+ 'viewMode',
35
25
  {
36
- label: [`${viewMode} mode label`, { ns: translationKey }],
37
- checked,
38
- icon,
26
+ label: ['view-mode.label', { ns: translationKey }],
27
+ icon: 'ph--eye--regular',
28
+ iconOnly: true,
29
+ variant: 'dropdownMenu',
30
+ applyActive: true,
31
+ selectCardinality: 'single',
32
+ value,
33
+ } as ToolbarMenuActionGroupProperties,
34
+ (group) => {
35
+ for (const [viewMode, icon] of Object.entries(viewModes)) {
36
+ const checked = viewMode === value;
37
+ group.action(
38
+ `view-mode--${viewMode}`,
39
+ {
40
+ label: [`view-mode.${viewMode}.label`, { ns: translationKey }],
41
+ checked,
42
+ icon,
43
+ },
44
+ () => onViewModeChange(viewMode as EditorViewMode),
45
+ );
46
+ }
39
47
  },
40
- () => onViewModeChange(viewMode as EditorViewMode),
41
48
  );
42
- });
43
-
44
- export const createViewMode = (state: EditorToolbarState, onViewModeChange: (mode: EditorViewMode) => void) => {
45
- const value = state.viewMode ?? 'source';
46
- const viewModeGroupAction = createViewModeGroupAction(value);
47
- const viewModeActions = createViewModeActions(value, onViewModeChange);
48
- return {
49
- nodes: [viewModeGroupAction as NodeArg<any>, ...viewModeActions],
50
- edges: [
51
- { source: 'root', target: 'viewMode' },
52
- ...viewModeActions.map(({ id }) => ({ source: viewModeGroupAction.id, target: id })),
53
- ],
54
49
  };
55
- };
@@ -4,10 +4,5 @@
4
4
 
5
5
  export * from './Editor';
6
6
 
7
- // export { type GetMenuContext } from './EditorMenuProvider';
8
-
9
- // TODO(burdon): Remove once Editor is fully migrated.
10
- export { EditorContent, createEditorController } from './EditorContent';
11
7
  export * from './EditorMenuProvider';
12
8
  export * from './EditorPreviewProvider';
13
- export { EditorToolbar, type EditorToolbarProps, type EditorToolbarState, useEditorToolbar } from './EditorToolbar';
@@ -0,0 +1,112 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as LanguageModel from '@effect/ai/LanguageModel';
6
+ import type { Meta, StoryObj } from '@storybook/react-vite';
7
+ import * as Effect from 'effect/Effect';
8
+ import * as Layer from 'effect/Layer';
9
+ import * as ManagedRuntime from 'effect/ManagedRuntime';
10
+ import React, { useEffect, useMemo, useState } from 'react';
11
+
12
+ import { AiService } from '@dxos/ai';
13
+ import { AiServiceTestingPreset } from '@dxos/ai/testing';
14
+ import { useThemeContext } from '@dxos/react-ui';
15
+ import { Loading, withLayout, withTheme } from '@dxos/react-ui/testing';
16
+ import { compactSlots, createBasicExtensions, createThemeExtensions } from '@dxos/ui-editor';
17
+ import { trim } from '@dxos/util';
18
+
19
+ import { translations } from '#translations';
20
+
21
+ import { Editor, type EditorViewProps } from '../components';
22
+ import { assistant, type AssistantOptions } from './assistant-extension';
23
+
24
+ // TODO(burdon): Factor out.
25
+ const useTestGenerate = () => {
26
+ const [generate, setGenerate] = useState<AssistantOptions['generate']>();
27
+ useEffect(() => {
28
+ let disposed = false;
29
+ const rt = ManagedRuntime.make(
30
+ AiService.model('ai.claude.model.claude-haiku-4-5').pipe(
31
+ Layer.provide(AiServiceTestingPreset('edge-remote')),
32
+ Layer.orDie,
33
+ ),
34
+ );
35
+
36
+ if (!disposed) {
37
+ setGenerate(
38
+ () =>
39
+ ({ instructions, content }: { instructions: string; content: string }) =>
40
+ rt.runPromise(
41
+ Effect.gen(function* () {
42
+ const prompt = [instructions, content].join('\n\n');
43
+ const response = yield* LanguageModel.generateText({ prompt });
44
+ return response.text;
45
+ }),
46
+ ),
47
+ );
48
+ }
49
+
50
+ return () => {
51
+ disposed = true;
52
+ void rt.dispose();
53
+ };
54
+ }, []);
55
+
56
+ return generate;
57
+ };
58
+
59
+ type DefaultStoryProps = Pick<EditorViewProps, 'value'>;
60
+
61
+ const DefaultStory = (props: DefaultStoryProps) => {
62
+ const { themeMode } = useThemeContext();
63
+ const generate = useTestGenerate();
64
+ const extensions = useMemo(
65
+ () =>
66
+ generate
67
+ ? [
68
+ createBasicExtensions({ placeholder: 'Type here...' }),
69
+ createThemeExtensions({ themeMode, slots: compactSlots }),
70
+ assistant({ generate }),
71
+ ]
72
+ : [],
73
+ [generate, themeMode],
74
+ );
75
+
76
+ if (extensions.length === 0) {
77
+ return <Loading />;
78
+ }
79
+
80
+ return (
81
+ <Editor.Root>
82
+ <Editor.View {...props} classNames='dx-container border border-subdued-separator' extensions={extensions} />
83
+ </Editor.Root>
84
+ );
85
+ };
86
+
87
+ const meta: Meta<typeof DefaultStory> = {
88
+ title: 'ui/react-ui-editor/Assistant',
89
+ render: DefaultStory,
90
+ decorators: [withTheme(), withLayout({ layout: 'column' })],
91
+ tags: ['experimental'],
92
+ parameters: {
93
+ layout: 'fullscreen',
94
+ translations,
95
+ },
96
+ };
97
+
98
+ export default meta;
99
+
100
+ type Story = StoryObj<typeof meta>;
101
+
102
+ export const Default: Story = {
103
+ args: {
104
+ value: trim`
105
+ This text has a speling mistake.
106
+
107
+ And it grammatical errors.
108
+
109
+ But we can fix it.
110
+ `,
111
+ },
112
+ };
@@ -0,0 +1,223 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type Diagnostic, forEachDiagnostic, linter, setDiagnostics } from '@codemirror/lint';
6
+ import { ChangeSet, type Extension } from '@codemirror/state';
7
+ import { EditorView } from '@codemirror/view';
8
+
9
+ import { log } from '@dxos/log';
10
+ import { safeParseJson, trim } from '@dxos/util';
11
+
12
+ const DEFAULT_INSTRUCTIONS = trim`
13
+ Proofread the input text below.
14
+ Identify typos and grammatical errors.
15
+ Return ONLY a valid JSON array of objects with fields: "original" (string), "replacement" (string), "context" (string, 3-5 words around match).
16
+ --
17
+ `;
18
+
19
+ export type AssistantOptions = {
20
+ /**
21
+ * Invoke the language model with the given prompt and return the raw text response.
22
+ */
23
+ generate: (request: { instructions: string; content: string }) => Promise<string>;
24
+ /**
25
+ * Instructions to use for the language model.
26
+ */
27
+ instructions?: string;
28
+ /**
29
+ * Show panel automatically.
30
+ */
31
+ autoPanel?: boolean;
32
+ /**
33
+ * Debounce delay.
34
+ */
35
+ delay?: number;
36
+ };
37
+
38
+ const underline = (color: string) => {
39
+ const svg = trim`
40
+ <svg xmlns="http://www.w3.org/2000/svg" width="6" height="3">
41
+ <path d="m0 3 l2 -2 l1 0 l2 2 l1 0" stroke="${color}" fill="none" stroke-width="1"/>
42
+ </svg>
43
+ `;
44
+
45
+ return `url('data:image/svg+xml;base64,${btoa(svg)}') !important`;
46
+ };
47
+
48
+ export const assistant = (options: AssistantOptions): Extension[] => {
49
+ const styles = getComputedStyle(document.documentElement);
50
+ const style = {
51
+ info: styles.getPropertyValue('--color-green-500').trim(),
52
+ warning: styles.getPropertyValue('--color-orange-500').trim(),
53
+ error: styles.getPropertyValue('--color-rose-500').trim(),
54
+ };
55
+
56
+ return [
57
+ assistantLinter(options),
58
+ EditorView.baseTheme({
59
+ '.cm-lintRange-info': {
60
+ backgroundImage: underline(style.info),
61
+ },
62
+ '.cm-lintRange-warning': {
63
+ backgroundImage: underline(style.warning),
64
+ },
65
+ '.cm-lintRange-error': {
66
+ backgroundImage: underline(style.error),
67
+ },
68
+
69
+ '.cm-panels-bottom': {
70
+ borderTop: '1px solid var(--color-separator) !important',
71
+ },
72
+ '.cm-panel-lint .cm-panel': {
73
+ outline: 'none !important',
74
+ },
75
+ /** @apply dx-button */
76
+ '.cm-panel button': {
77
+ color: 'var(--color-base-fg) !important',
78
+ },
79
+ '.cm-panel.cm-panel-lint ul': {
80
+ color: 'var(--color-base-fg) !important',
81
+ backgroundColor: 'var(--color-base-surface) !important',
82
+ marginRight: '2rem !important',
83
+ },
84
+ '.cm-panel.cm-panel-lint ul [aria-selected]': {
85
+ color: 'var(--color-base-fg) !important',
86
+ backgroundColor: 'var(--color-base-surface) !important',
87
+ },
88
+ '.cm-panel.cm-panel-lint ul li': {
89
+ display: 'grid',
90
+ gridTemplateColumns: '1fr auto',
91
+ alignItems: 'center',
92
+ },
93
+ '.cm-panel.cm-panel-lint ul li .cm-diagnosticText': {
94
+ paddingRight: '8px !important',
95
+ },
96
+ '.cm-panel.cm-panel-lint ul li button.cm-diagnosticAction': {
97
+ margin: 'none !important',
98
+ },
99
+ '.cm-diagnostic': {
100
+ padding: '0px 8px !important',
101
+ whiteSpace: 'pre-wrap !important',
102
+ },
103
+ '.cm-diagnostic-info': {
104
+ border: 'none !important',
105
+ },
106
+ }),
107
+ ];
108
+ };
109
+
110
+ //
111
+ // Linter
112
+ //
113
+
114
+ type Suggestion = {
115
+ original: string;
116
+ replacement: string;
117
+ context: string;
118
+ };
119
+
120
+ const isSuggestion = (value: unknown): value is Suggestion =>
121
+ typeof value === 'object' &&
122
+ value !== null &&
123
+ typeof (value as Suggestion).original === 'string' &&
124
+ typeof (value as Suggestion).replacement === 'string' &&
125
+ typeof (value as Suggestion).context === 'string';
126
+
127
+ /**
128
+ * Find the index of `original` within `content`, using `context` to disambiguate when there are multiple occurrences.
129
+ */
130
+ const findSuggestionIndex = (content: string, suggestion: Suggestion): number => {
131
+ const firstIdx = content.indexOf(suggestion.original);
132
+ if (firstIdx === -1) {
133
+ return -1;
134
+ }
135
+
136
+ // Check for duplicate occurrences; use context to disambiguate.
137
+ const secondIdx = content.indexOf(suggestion.original, firstIdx + 1);
138
+ if (secondIdx === -1) {
139
+ return firstIdx;
140
+ }
141
+
142
+ // Find the occurrence whose surrounding text best matches the context.
143
+ const contextIdx = content.indexOf(suggestion.context);
144
+ if (contextIdx !== -1) {
145
+ const contextEnd = contextIdx + suggestion.context.length;
146
+ if (secondIdx >= contextIdx && secondIdx <= contextEnd) {
147
+ return secondIdx;
148
+ }
149
+ }
150
+
151
+ return firstIdx;
152
+ };
153
+
154
+ const replaceTextAndDropLintAtRange = (view: EditorView, from: number, to: number, insert: string) => {
155
+ const kept: Diagnostic[] = [];
156
+ forEachDiagnostic(view.state, (diagnostic, diagnosticFrom, diagnosticTo) => {
157
+ if (diagnosticFrom < to && diagnosticTo > from) {
158
+ return;
159
+ }
160
+ kept.push({ ...diagnostic, from: diagnosticFrom, to: diagnosticTo });
161
+ });
162
+ const changeSet = ChangeSet.of({ from, to, insert }, view.state.doc.length);
163
+ const next = kept.map((d) => ({
164
+ ...d,
165
+ from: changeSet.mapPos(d.from, 1),
166
+ to: changeSet.mapPos(d.to, -1),
167
+ }));
168
+ view.dispatch({
169
+ changes: { from, to, insert },
170
+ ...setDiagnostics(view.state, next),
171
+ });
172
+ };
173
+
174
+ const assistantLinter = ({
175
+ generate,
176
+ instructions = DEFAULT_INSTRUCTIONS,
177
+ autoPanel = true,
178
+ delay = 2_000,
179
+ }: AssistantOptions) =>
180
+ linter(
181
+ async (view) => {
182
+ try {
183
+ const content = view.state.doc.toString();
184
+ const result = await generate({ instructions, content });
185
+
186
+ const [match] = result.match(/\[.*\]/s) ?? [];
187
+ const parsed = match ? safeParseJson<unknown[]>(match, []) : [];
188
+ const suggestions = Array.isArray(parsed) ? parsed.filter(isSuggestion) : [];
189
+ if (suggestions && suggestions.length > 0) {
190
+ const diagnostics: Diagnostic[] = [];
191
+ for (const suggestion of suggestions) {
192
+ const idx = findSuggestionIndex(content, suggestion);
193
+ if (idx !== -1) {
194
+ diagnostics.push({
195
+ from: idx,
196
+ to: idx + suggestion.original.length,
197
+ severity: 'info',
198
+ message: `Suggestion: ${suggestion.replacement}`,
199
+ actions: [
200
+ {
201
+ name: 'Apply',
202
+ apply: (view, from, to) => {
203
+ replaceTextAndDropLintAtRange(view, from, to, suggestion.replacement);
204
+ },
205
+ },
206
+ ],
207
+ });
208
+ }
209
+ }
210
+
211
+ return diagnostics;
212
+ }
213
+ } catch (err) {
214
+ log.catch(err);
215
+ }
216
+
217
+ return [];
218
+ },
219
+ {
220
+ delay,
221
+ autoPanel,
222
+ },
223
+ );
@@ -1,35 +1,5 @@
1
1
  //
2
- // Copyright 2023 DXOS.org
2
+ // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
- export * from './annotations';
6
- export * from './autocomplete';
7
- export * from './autoscroll';
8
- export * from './automerge';
9
- export * from './awareness';
10
- export * from './blast';
11
- export * from './blocks';
12
- export * from './bookmarks';
13
- export * from './comments';
14
- export * from './debug';
15
- export * from './dnd';
16
- export * from './factories';
17
- export * from './focus';
18
- export * from './folding';
19
- export * from './hashtag';
20
- export * from './json';
21
- export * from './listener';
22
- export * from './markdown';
23
- export * from './mention';
24
- export * from './modal';
25
- export * from './modes';
26
- export * from './outliner';
27
- export * from './preview';
28
- export * from './replacer';
29
- export * from './selection';
30
- export * from './scrolling';
31
- export * from './state';
32
- export * from './submit';
33
- export * from './tab';
34
- export * from './tags';
35
- export * from './typewriter';
5
+ export * from './assistant-extension';
@@ -2,4 +2,5 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ export * from './useBasicMarkdownExtensions';
5
6
  export * from './useTextEditor';
@@ -0,0 +1,55 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { type Extension } from '@codemirror/state';
6
+ import { useMemo } from 'react';
7
+
8
+ import { useThemeContext } from '@dxos/react-ui';
9
+ import {
10
+ createBasicExtensions,
11
+ createMarkdownExtensions,
12
+ createThemeExtensions,
13
+ decorateMarkdown,
14
+ } from '@dxos/ui-editor';
15
+
16
+ export type UseBasicMarkdownExtensionsOptions = {
17
+ /** Placeholder text shown when the editor is empty. */
18
+ placeholder?: string;
19
+ /** Enables markdown visual decorations. Pass `false` to disable. Defaults to `true`. */
20
+ decorate?: boolean;
21
+ /**
22
+ * Extra extensions appended to the returned array.
23
+ * Callers must memoize this array — it is used as a dependency of {@link useMemo}.
24
+ */
25
+ extensions?: Extension[];
26
+ };
27
+
28
+ /**
29
+ * Returns the standard CodeMirror extension stack for an inline markdown editor:
30
+ * basic editor behaviors, themed syntax highlighting (theme mode read from {@link useThemeContext}),
31
+ * markdown parsing, and visual decorations.
32
+ *
33
+ * Used by surfaces such as `AgentProperties` and `MagazineProperties` to render the
34
+ * `instructions` field of an object as a small editable markdown block.
35
+ *
36
+ * The memoization depends on primitive option values plus the `extensions` array reference,
37
+ * so callers passing fresh option literals each render still hit the cache.
38
+ */
39
+ export const useBasicMarkdownExtensions = ({
40
+ placeholder,
41
+ decorate = true,
42
+ extensions,
43
+ }: UseBasicMarkdownExtensionsOptions = {}): Extension[] => {
44
+ const { themeMode } = useThemeContext();
45
+ return useMemo(
46
+ () => [
47
+ createBasicExtensions({ placeholder }),
48
+ createThemeExtensions({ syntaxHighlighting: true, themeMode }),
49
+ createMarkdownExtensions(),
50
+ ...(decorate ? [decorateMarkdown()] : []),
51
+ ...(extensions ?? []),
52
+ ],
53
+ [placeholder, themeMode, decorate, extensions],
54
+ );
55
+ };
@@ -17,11 +17,15 @@ import {
17
17
  } from 'react';
18
18
 
19
19
  import { log } from '@dxos/log';
20
+ import {
21
+ type EditorSelection,
22
+ createEditorStateTransaction,
23
+ debugDispatcher,
24
+ documentId,
25
+ modalStateField,
26
+ } from '@dxos/ui-editor';
20
27
  import { type MaybeProvider, getProviderValue, isTruthy } from '@dxos/util';
21
28
 
22
- import { type EditorSelection, createEditorStateTransaction, documentId, modalStateField } from '../extensions';
23
- import { debugDispatcher } from '../util';
24
-
25
29
  let instanceCount = 0;
26
30
 
27
31
  export type CursorInfo = {
@@ -156,7 +160,9 @@ export const useTextEditor = (
156
160
  element?.focus();
157
161
  break;
158
162
  }
163
+
159
164
  case 'Enter': {
165
+ event.preventDefault();
160
166
  if (target === currentTarget) {
161
167
  view?.focus();
162
168
  }
package/src/index.ts CHANGED
@@ -2,19 +2,6 @@
2
2
  // Copyright 2022 DXOS.org
3
3
  //
4
4
 
5
- import { translations } from './translations';
6
-
7
- export { type Extension, EditorState } from '@codemirror/state';
8
- export { EditorView, keymap } from '@codemirror/view';
9
- export { tags } from '@lezer/highlight';
10
-
11
- export { TextKind } from '@dxos/protocols/proto/dxos/echo/model/text';
12
-
13
5
  export * from './components';
14
- export * from './defaults';
15
6
  export * from './extensions';
16
7
  export * from './hooks';
17
- export * from './types';
18
- export * from './util';
19
-
20
- export { translations };