@dxos/react-ui-editor 0.8.4-main.ae835ea → 0.8.4-main.bc2380dfbc

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 (432) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +1466 -8456
  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 +1466 -8455
  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 +53 -29
  14. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  15. package/dist/types/src/components/Editor/Editor.stories.d.ts +16 -20
  16. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/Editor/EditorView.d.ts +31 -0
  18. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  19. package/dist/types/src/components/Editor/controller.d.ts +10 -0
  20. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  21. package/dist/types/src/{extensions/popover/PopoverMenuProvider.d.ts → components/EditorMenuProvider/EditorMenuProvider.d.ts} +7 -9
  22. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  24. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  26. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  28. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  29. package/dist/types/src/{extensions/popover → components/EditorMenuProvider}/popover.d.ts +2 -2
  30. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  32. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  34. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  35. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  36. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  37. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +14 -3
  38. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  40. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  42. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  44. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  46. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  48. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -17
  50. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  51. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  52. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  53. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  54. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  55. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  56. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  57. package/dist/types/src/components/index.d.ts +2 -1
  58. package/dist/types/src/components/index.d.ts.map +1 -1
  59. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  60. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  61. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  62. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  63. package/dist/types/src/extensions/index.d.ts +1 -25
  64. package/dist/types/src/extensions/index.d.ts.map +1 -1
  65. package/dist/types/src/hooks/index.d.ts +1 -0
  66. package/dist/types/src/hooks/index.d.ts.map +1 -1
  67. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  68. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  69. package/dist/types/src/hooks/useTextEditor.d.ts +2 -2
  70. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  71. package/dist/types/src/index.d.ts +0 -9
  72. package/dist/types/src/index.d.ts.map +1 -1
  73. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  74. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  75. package/dist/types/src/stories/Comments.stories.d.ts +4 -3
  76. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  78. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Experimental.stories.d.ts +5 -4
  80. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Markdown.stories.d.ts +4 -3
  82. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  84. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  85. package/dist/types/src/stories/Popover.stories.d.ts +3 -3
  86. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  87. package/dist/types/src/stories/Preview.stories.d.ts +5 -3
  88. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  89. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  90. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -3
  91. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  92. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  93. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  94. package/dist/types/src/stories/components/EditorStory.d.ts +11 -20
  95. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  96. package/dist/types/src/stories/components/util.d.ts +4 -3
  97. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  98. package/dist/types/src/translations.d.ts +26 -26
  99. package/dist/types/src/translations.d.ts.map +1 -1
  100. package/dist/types/src/util/index.d.ts +0 -5
  101. package/dist/types/src/util/index.d.ts.map +1 -1
  102. package/dist/types/src/util/react.d.ts +6 -5
  103. package/dist/types/src/util/react.d.ts.map +1 -1
  104. package/dist/types/tsconfig.tsbuildinfo +1 -1
  105. package/package.json +80 -77
  106. package/src/components/Editor/Editor.stories.tsx +69 -49
  107. package/src/components/Editor/Editor.tsx +165 -61
  108. package/src/components/Editor/EditorView.tsx +102 -0
  109. package/src/components/Editor/controller.ts +50 -0
  110. package/src/{extensions/popover/PopoverMenuProvider.tsx → components/EditorMenuProvider/EditorMenuProvider.tsx} +48 -42
  111. package/src/components/EditorMenuProvider/index.ts +10 -0
  112. package/src/{extensions/popover → components/EditorMenuProvider}/menu-presets.ts +20 -19
  113. package/src/{extensions/popover → components/EditorMenuProvider}/menu.ts +21 -18
  114. package/src/{extensions/popover → components/EditorMenuProvider}/popover.ts +5 -7
  115. package/src/{extensions/popover/usePopoverMenu.ts → components/EditorMenuProvider/useEditorMenu.ts} +29 -22
  116. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  117. package/src/components/EditorPreviewProvider/index.ts +5 -0
  118. package/src/components/EditorToolbar/EditorToolbar.tsx +47 -69
  119. package/src/components/EditorToolbar/blocks.ts +55 -47
  120. package/src/components/EditorToolbar/formatting.ts +44 -45
  121. package/src/components/EditorToolbar/headings.ts +45 -50
  122. package/src/components/EditorToolbar/image.ts +16 -14
  123. package/src/components/EditorToolbar/index.ts +2 -7
  124. package/src/components/EditorToolbar/lists.ts +42 -40
  125. package/src/components/EditorToolbar/search.ts +16 -14
  126. package/src/components/EditorToolbar/types.ts +8 -0
  127. package/src/components/EditorToolbar/view-mode.ts +37 -42
  128. package/src/components/index.ts +3 -1
  129. package/src/extensions/Assistant.stories.tsx +112 -0
  130. package/src/extensions/assistant-extension.tsx +223 -0
  131. package/src/extensions/index.ts +2 -26
  132. package/src/hooks/index.ts +1 -0
  133. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  134. package/src/hooks/useTextEditor.ts +13 -7
  135. package/src/index.ts +0 -13
  136. package/src/stories/Automerge.stories.tsx +177 -0
  137. package/src/stories/Comments.stories.tsx +49 -45
  138. package/src/stories/EditorToolbar.stories.tsx +41 -53
  139. package/src/stories/Experimental.stories.tsx +14 -16
  140. package/src/stories/Markdown.stories.tsx +16 -16
  141. package/src/stories/Outliner.stories.tsx +20 -29
  142. package/src/stories/Popover.stories.tsx +47 -53
  143. package/src/stories/Preview.stories.tsx +91 -80
  144. package/src/stories/Tags.stories.tsx +36 -13
  145. package/src/stories/TextEditor.stories.tsx +13 -19
  146. package/src/stories/Theme.stories.tsx +61 -0
  147. package/src/stories/components/EditorStory.tsx +46 -32
  148. package/src/stories/components/util.tsx +90 -59
  149. package/src/translations.ts +30 -25
  150. package/src/util/index.ts +1 -6
  151. package/src/util/react.tsx +8 -13
  152. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  153. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  154. package/dist/lib/browser/testing/index.mjs +0 -76
  155. package/dist/lib/browser/testing/index.mjs.map +0 -7
  156. package/dist/lib/browser/types/index.mjs +0 -13
  157. package/dist/lib/browser/types/index.mjs.map +0 -7
  158. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  159. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  160. package/dist/lib/node-esm/testing/index.mjs +0 -78
  161. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  162. package/dist/lib/node-esm/types/index.mjs +0 -14
  163. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  164. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -37
  165. package/dist/types/src/components/EditorToolbar/util.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 -26
  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 -10
  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/comments.d.ts +0 -95
  209. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  210. package/dist/types/src/extensions/debug.d.ts +0 -3
  211. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  212. package/dist/types/src/extensions/dnd.d.ts +0 -9
  213. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  214. package/dist/types/src/extensions/factories.d.ts +0 -83
  215. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  216. package/dist/types/src/extensions/focus.d.ts +0 -7
  217. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  218. package/dist/types/src/extensions/folding.d.ts +0 -7
  219. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  220. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  221. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  222. package/dist/types/src/extensions/json.d.ts +0 -7
  223. package/dist/types/src/extensions/json.d.ts.map +0 -1
  224. package/dist/types/src/extensions/listener.d.ts +0 -13
  225. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  226. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  227. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  228. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  229. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  230. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  231. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  232. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  233. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  234. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  235. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  236. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  237. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  238. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -62
  239. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  240. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  241. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  243. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  245. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  247. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  249. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  251. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  253. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  255. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  256. package/dist/types/src/extensions/mention.d.ts +0 -7
  257. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  258. package/dist/types/src/extensions/modes.d.ts +0 -10
  259. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  260. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  261. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  262. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  263. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  264. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  265. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  266. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  267. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  268. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  269. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  270. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  271. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  272. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  273. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  274. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  275. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  277. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  279. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  280. package/dist/types/src/extensions/popover/PopoverMenuProvider.d.ts.map +0 -1
  281. package/dist/types/src/extensions/popover/index.d.ts +0 -8
  282. package/dist/types/src/extensions/popover/index.d.ts.map +0 -1
  283. package/dist/types/src/extensions/popover/menu-presets.d.ts +0 -4
  284. package/dist/types/src/extensions/popover/menu-presets.d.ts.map +0 -1
  285. package/dist/types/src/extensions/popover/menu.d.ts +0 -24
  286. package/dist/types/src/extensions/popover/menu.d.ts.map +0 -1
  287. package/dist/types/src/extensions/popover/modal.d.ts +0 -7
  288. package/dist/types/src/extensions/popover/modal.d.ts.map +0 -1
  289. package/dist/types/src/extensions/popover/popover.d.ts.map +0 -1
  290. package/dist/types/src/extensions/popover/usePopoverMenu.d.ts +0 -34
  291. package/dist/types/src/extensions/popover/usePopoverMenu.d.ts.map +0 -1
  292. package/dist/types/src/extensions/popover/util.d.ts +0 -8
  293. package/dist/types/src/extensions/popover/util.d.ts.map +0 -1
  294. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  295. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  296. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  297. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  298. package/dist/types/src/extensions/selection.d.ts +0 -24
  299. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  300. package/dist/types/src/extensions/state.d.ts +0 -2
  301. package/dist/types/src/extensions/state.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 -72
  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/testing/PreviewPopover.d.ts +0 -20
  327. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  328. package/dist/types/src/testing/index.d.ts +0 -3
  329. package/dist/types/src/testing/index.d.ts.map +0 -1
  330. package/dist/types/src/testing/util.d.ts +0 -3
  331. package/dist/types/src/testing/util.d.ts.map +0 -1
  332. package/dist/types/src/types/index.d.ts +0 -2
  333. package/dist/types/src/types/index.d.ts.map +0 -1
  334. package/dist/types/src/types/types.d.ts +0 -21
  335. package/dist/types/src/types/types.d.ts.map +0 -1
  336. package/dist/types/src/util/cursor.d.ts +0 -31
  337. package/dist/types/src/util/cursor.d.ts.map +0 -1
  338. package/dist/types/src/util/debug.d.ts +0 -17
  339. package/dist/types/src/util/debug.d.ts.map +0 -1
  340. package/dist/types/src/util/decorations.d.ts +0 -4
  341. package/dist/types/src/util/decorations.d.ts.map +0 -1
  342. package/dist/types/src/util/dom.d.ts +0 -10
  343. package/dist/types/src/util/dom.d.ts.map +0 -1
  344. package/dist/types/src/util/facet.d.ts +0 -3
  345. package/dist/types/src/util/facet.d.ts.map +0 -1
  346. package/src/components/EditorToolbar/util.ts +0 -60
  347. package/src/defaults.ts +0 -52
  348. package/src/extensions/annotations.ts +0 -55
  349. package/src/extensions/autocomplete/autocomplete.ts +0 -220
  350. package/src/extensions/autocomplete/index.ts +0 -8
  351. package/src/extensions/autocomplete/match.ts +0 -46
  352. package/src/extensions/autocomplete/placeholder.ts +0 -117
  353. package/src/extensions/autocomplete/typeahead.ts +0 -87
  354. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  355. package/src/extensions/automerge/automerge.test.tsx +0 -78
  356. package/src/extensions/automerge/automerge.ts +0 -105
  357. package/src/extensions/automerge/cursor.ts +0 -28
  358. package/src/extensions/automerge/defs.ts +0 -31
  359. package/src/extensions/automerge/index.ts +0 -5
  360. package/src/extensions/automerge/sync.ts +0 -79
  361. package/src/extensions/automerge/update-automerge.ts +0 -50
  362. package/src/extensions/automerge/update-codemirror.ts +0 -115
  363. package/src/extensions/autoscroll.ts +0 -157
  364. package/src/extensions/awareness/awareness-provider.ts +0 -127
  365. package/src/extensions/awareness/awareness.ts +0 -315
  366. package/src/extensions/awareness/index.ts +0 -6
  367. package/src/extensions/blast.ts +0 -363
  368. package/src/extensions/comments.ts +0 -597
  369. package/src/extensions/debug.ts +0 -15
  370. package/src/extensions/dnd.ts +0 -37
  371. package/src/extensions/factories.ts +0 -277
  372. package/src/extensions/focus.ts +0 -36
  373. package/src/extensions/folding.tsx +0 -44
  374. package/src/extensions/hashtag.tsx +0 -68
  375. package/src/extensions/json.ts +0 -57
  376. package/src/extensions/listener.ts +0 -32
  377. package/src/extensions/markdown/action.ts +0 -117
  378. package/src/extensions/markdown/bundle.ts +0 -105
  379. package/src/extensions/markdown/changes.test.ts +0 -26
  380. package/src/extensions/markdown/changes.ts +0 -149
  381. package/src/extensions/markdown/debug.ts +0 -44
  382. package/src/extensions/markdown/decorate.ts +0 -601
  383. package/src/extensions/markdown/formatting.test.ts +0 -498
  384. package/src/extensions/markdown/formatting.ts +0 -1267
  385. package/src/extensions/markdown/highlight.ts +0 -183
  386. package/src/extensions/markdown/image.ts +0 -118
  387. package/src/extensions/markdown/index.ts +0 -13
  388. package/src/extensions/markdown/link.ts +0 -50
  389. package/src/extensions/markdown/parser.test.ts +0 -75
  390. package/src/extensions/markdown/styles.ts +0 -135
  391. package/src/extensions/markdown/table.ts +0 -150
  392. package/src/extensions/mention.ts +0 -41
  393. package/src/extensions/modes.ts +0 -41
  394. package/src/extensions/outliner/commands.ts +0 -270
  395. package/src/extensions/outliner/editor.test.ts +0 -33
  396. package/src/extensions/outliner/editor.ts +0 -184
  397. package/src/extensions/outliner/index.ts +0 -7
  398. package/src/extensions/outliner/menu.ts +0 -128
  399. package/src/extensions/outliner/outliner.test.ts +0 -100
  400. package/src/extensions/outliner/outliner.ts +0 -167
  401. package/src/extensions/outliner/selection.ts +0 -50
  402. package/src/extensions/outliner/tree.test.ts +0 -168
  403. package/src/extensions/outliner/tree.ts +0 -317
  404. package/src/extensions/popover/index.ts +0 -12
  405. package/src/extensions/popover/modal.ts +0 -24
  406. package/src/extensions/popover/util.ts +0 -29
  407. package/src/extensions/preview/index.ts +0 -5
  408. package/src/extensions/preview/preview.ts +0 -193
  409. package/src/extensions/selection.ts +0 -100
  410. package/src/extensions/state.ts +0 -7
  411. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  412. package/src/extensions/tags/extended-markdown.ts +0 -78
  413. package/src/extensions/tags/index.ts +0 -7
  414. package/src/extensions/tags/streamer.ts +0 -243
  415. package/src/extensions/tags/xml-tags.ts +0 -393
  416. package/src/extensions/tags/xml-util.ts +0 -94
  417. package/src/extensions/typewriter.ts +0 -68
  418. package/src/stories/CommandDialog.stories.tsx +0 -78
  419. package/src/styles/index.ts +0 -7
  420. package/src/styles/markdown.ts +0 -26
  421. package/src/styles/theme.ts +0 -269
  422. package/src/styles/tokens.ts +0 -17
  423. package/src/testing/PreviewPopover.tsx +0 -80
  424. package/src/testing/index.ts +0 -6
  425. package/src/testing/util.ts +0 -7
  426. package/src/types/index.ts +0 -5
  427. package/src/types/types.ts +0 -32
  428. package/src/util/cursor.ts +0 -56
  429. package/src/util/debug.ts +0 -64
  430. package/src/util/decorations.ts +0 -21
  431. package/src/util/dom.ts +0 -34
  432. package/src/util/facet.ts +0 -13
@@ -4,48 +4,22 @@
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
6
 
7
- import { type NodeArg } from '@dxos/app-graph';
8
- import { type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
7
+ import { type ActionGroupBuilderFn, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
8
+ import { setHeading } from '@dxos/ui-editor';
9
9
 
10
- import { setHeading } from '../../extensions';
11
- import { translationKey } from '../../translations';
10
+ import { translationKey } from '#translations';
12
11
 
13
- import { type EditorToolbarState, createEditorAction, createEditorActionGroup } from './util';
12
+ import { type EditorToolbarState } from './types';
14
13
 
15
- const createHeadingGroupAction = (value: string) =>
16
- createEditorActionGroup(
17
- 'heading',
18
- {
19
- variant: 'dropdownMenu',
20
- applyActive: true,
21
- selectCardinality: 'single',
22
- // TODO(wittjosiah): Remove? Not sure this does anything.
23
- value,
24
- } as ToolbarMenuActionGroupProperties,
25
- 'ph--text-h--regular',
26
- );
27
-
28
- const createHeadingActions = (currentLevel: string, getView: () => EditorView) =>
29
- Object.entries({
30
- '0': 'ph--paragraph--regular',
31
- '1': 'ph--text-h-one--regular',
32
- '2': 'ph--text-h-two--regular',
33
- '3': 'ph--text-h-three--regular',
34
- '4': 'ph--text-h-four--regular',
35
- '5': 'ph--text-h-five--regular',
36
- '6': 'ph--text-h-six--regular',
37
- }).map(([levelStr, icon]) => {
38
- const level = parseInt(levelStr);
39
- return createEditorAction(
40
- `heading--${levelStr}`,
41
- {
42
- label: ['heading level label', { count: level, ns: translationKey }],
43
- icon,
44
- checked: levelStr === currentLevel,
45
- },
46
- () => setHeading(level)(getView()),
47
- );
48
- });
14
+ const headingIcons: Record<string, string> = {
15
+ 0: 'ph--paragraph--regular',
16
+ 1: 'ph--text-h-one--regular',
17
+ 2: 'ph--text-h-two--regular',
18
+ 3: 'ph--text-h-three--regular',
19
+ 4: 'ph--text-h-four--regular',
20
+ 5: 'ph--text-h-five--regular',
21
+ 6: 'ph--text-h-six--regular',
22
+ };
49
23
 
50
24
  const computeHeadingValue = (state: EditorToolbarState) => {
51
25
  const blockType = state ? state.blockType : 'paragraph';
@@ -53,15 +27,36 @@ const computeHeadingValue = (state: EditorToolbarState) => {
53
27
  return heading ? heading[1] : blockType === 'paragraph' || !blockType ? '0' : '';
54
28
  };
55
29
 
56
- export const createHeadings = (state: EditorToolbarState, getView: () => EditorView) => {
57
- const headingValue = computeHeadingValue(state);
58
- const headingGroupAction = createHeadingGroupAction(headingValue);
59
- const headingActions = createHeadingActions(headingValue, getView);
60
- return {
61
- nodes: [headingGroupAction as NodeArg<any>, ...headingActions],
62
- edges: [
63
- { source: 'root', target: 'heading' },
64
- ...headingActions.map(({ id }) => ({ source: headingGroupAction.id, target: id })),
65
- ],
30
+ /** Add heading actions to the builder. */
31
+ export const addHeadings =
32
+ (state: EditorToolbarState, getView: () => EditorView): ActionGroupBuilderFn =>
33
+ (builder) => {
34
+ const headingValue = computeHeadingValue(state);
35
+ builder.group(
36
+ 'heading',
37
+ {
38
+ label: ['heading.label', { ns: translationKey }],
39
+ icon: 'ph--text-h--regular',
40
+ iconOnly: true,
41
+ variant: 'dropdownMenu',
42
+ applyActive: true,
43
+ selectCardinality: 'single',
44
+ // TODO(wittjosiah): Remove? Not sure this does anything.
45
+ value: headingValue,
46
+ } as ToolbarMenuActionGroupProperties,
47
+ (group) => {
48
+ for (const [levelStr, icon] of Object.entries(headingIcons)) {
49
+ const level = parseInt(levelStr);
50
+ group.action(
51
+ `heading--${levelStr}`,
52
+ {
53
+ label: ['heading-level.label', { count: level, ns: translationKey }],
54
+ icon,
55
+ checked: levelStr === headingValue,
56
+ },
57
+ () => setHeading(level)(getView()),
58
+ );
59
+ }
60
+ },
61
+ );
66
62
  };
67
- };
@@ -2,19 +2,21 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { createEditorAction } from './util';
5
+ import { type ActionGroupBuilderFn } from '@dxos/react-ui-menu';
6
6
 
7
- const createImageUploadAction = (onImageUpload: () => void) =>
8
- createEditorAction(
9
- 'image',
10
- {
11
- testId: 'editor.toolbar.image',
12
- icon: 'ph--image-square--regular',
13
- },
14
- onImageUpload,
15
- );
7
+ import { translationKey } from '#translations';
16
8
 
17
- export const createImageUpload = (onImageUpload: () => void) => ({
18
- nodes: [createImageUploadAction(onImageUpload)],
19
- edges: [{ source: 'root', target: 'image' }],
20
- });
9
+ /** Add image upload action to the builder. */
10
+ export const addImageUpload =
11
+ (onImageUpload: () => void): ActionGroupBuilderFn =>
12
+ (builder) => {
13
+ builder.action(
14
+ 'image',
15
+ {
16
+ label: ['image.label', { ns: translationKey }],
17
+ testId: 'editor.toolbar.image',
18
+ icon: 'ph--image-square--regular',
19
+ },
20
+ onImageUpload,
21
+ );
22
+ };
@@ -2,11 +2,6 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ export * from './types';
6
+
5
7
  export * from './EditorToolbar';
6
- export {
7
- type EditorToolbarState,
8
- type EditorToolbarActionGraphProps,
9
- useEditorToolbarState,
10
- createEditorAction,
11
- createEditorActionGroup,
12
- } from './util';
@@ -4,12 +4,12 @@
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
6
 
7
- import { type NodeArg } from '@dxos/app-graph';
8
- import { type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
7
+ import { type ActionGroupBuilderFn, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
8
+ import { List, addList, removeList } from '@dxos/ui-editor';
9
9
 
10
- import { List, addList, removeList } from '../../extensions';
10
+ import { translationKey } from '#translations';
11
11
 
12
- import { type EditorToolbarState, createEditorAction, createEditorActionGroup } from './util';
12
+ import { type EditorToolbarState } from './types';
13
13
 
14
14
  const listStyles = {
15
15
  bullet: 'ph--list-bullets--regular',
@@ -17,40 +17,42 @@ const listStyles = {
17
17
  task: 'ph--list-checks--regular',
18
18
  };
19
19
 
20
- const createListGroupAction = (value: string) =>
21
- createEditorActionGroup('list', {
22
- variant: 'toggleGroup',
23
- selectCardinality: 'single',
24
- value,
25
- } as ToolbarMenuActionGroupProperties);
26
-
27
- const createListActions = (value: string, getView: () => EditorView) =>
28
- Object.entries(listStyles).map(([listStyle, icon]) => {
29
- const checked = value === listStyle;
30
- return createEditorAction(`list-${listStyle}`, { checked, icon }, () => {
31
- const view = getView();
32
- if (!view) {
33
- return;
34
- }
35
-
36
- const listType = listStyle === 'ordered' ? List.Ordered : listStyle === 'bullet' ? List.Bullet : List.Task;
37
- if (checked) {
38
- removeList(listType)(view);
39
- } else {
40
- addList(listType)(view);
41
- }
42
- });
43
- });
44
-
45
- export const createLists = (state: EditorToolbarState, getView: () => EditorView) => {
46
- const value = state.listStyle ?? '';
47
- const listGroupAction = createListGroupAction(value);
48
- const listActionsMap = createListActions(value, getView);
49
- return {
50
- nodes: [listGroupAction as NodeArg<any>, ...listActionsMap],
51
- edges: [
52
- { source: 'root', target: 'list' },
53
- ...listActionsMap.map(({ id }) => ({ source: listGroupAction.id, target: id })),
54
- ],
20
+ /** Add list actions to the builder. */
21
+ export const addLists =
22
+ (state: EditorToolbarState, getView: () => EditorView): ActionGroupBuilderFn =>
23
+ (builder) => {
24
+ const value = state.listStyle ?? '';
25
+ builder.group(
26
+ 'list',
27
+ {
28
+ label: ['list.label', { ns: translationKey }],
29
+ iconOnly: true,
30
+ variant: 'toggleGroup',
31
+ selectCardinality: 'single',
32
+ value,
33
+ } as ToolbarMenuActionGroupProperties,
34
+ (group) => {
35
+ for (const [listStyle, icon] of Object.entries(listStyles)) {
36
+ const checked = value === listStyle;
37
+ group.action(
38
+ `list-${listStyle}`,
39
+ { label: [`list.${listStyle}.label`, { ns: translationKey }], checked, icon },
40
+ () => {
41
+ const view = getView();
42
+ if (!view) {
43
+ return;
44
+ }
45
+
46
+ const listType =
47
+ listStyle === 'ordered' ? List.Ordered : listStyle === 'bullet' ? List.Bullet : List.Task;
48
+ if (checked) {
49
+ removeList(listType)(view);
50
+ } else {
51
+ addList(listType)(view);
52
+ }
53
+ },
54
+ );
55
+ }
56
+ },
57
+ );
55
58
  };
56
- };
@@ -5,19 +5,21 @@
5
5
  import { openSearchPanel } from '@codemirror/search';
6
6
  import { type EditorView } from '@codemirror/view';
7
7
 
8
- import { createEditorAction } from './util';
8
+ import { type ActionGroupBuilderFn } from '@dxos/react-ui-menu';
9
9
 
10
- const createSearchAction = (getView: () => EditorView) =>
11
- createEditorAction(
12
- 'search',
13
- {
14
- testId: 'editor.toolbar.search',
15
- icon: 'ph--magnifying-glass--regular',
16
- },
17
- () => openSearchPanel(getView()),
18
- );
10
+ import { translationKey } from '#translations';
19
11
 
20
- export const createSearch = (getView: () => EditorView) => ({
21
- nodes: [createSearchAction(getView)],
22
- edges: [{ source: 'root', target: 'search' }],
23
- });
12
+ /** Add search action to the builder. */
13
+ export const addSearch =
14
+ (getView: () => EditorView): ActionGroupBuilderFn =>
15
+ (builder) => {
16
+ builder.action(
17
+ 'search',
18
+ {
19
+ label: ['search.label', { ns: translationKey }],
20
+ testId: 'editor.toolbar.search',
21
+ icon: 'ph--magnifying-glass--regular',
22
+ },
23
+ () => openSearchPanel(getView()),
24
+ );
25
+ };
@@ -0,0 +1,8 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Formatting } from '@dxos/ui-editor';
6
+ import { type EditorViewMode } from '@dxos/ui-editor/types';
7
+
8
+ export type EditorToolbarState = Formatting & { viewMode?: EditorViewMode };
@@ -2,53 +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 { type EditorToolbarState, createEditorAction, createEditorActionGroup } from './util';
10
+ import { type EditorToolbarState } from './types';
12
11
 
13
- const createViewModeGroupAction = (value: string) =>
14
- createEditorActionGroup(
15
- 'viewMode',
16
- {
17
- variant: 'dropdownMenu',
18
- applyActive: true,
19
- selectCardinality: 'single',
20
- value,
21
- } as ToolbarMenuActionGroupProperties,
22
- 'ph--eye--regular',
23
- );
12
+ const viewModes = {
13
+ preview: 'ph--eye--regular',
14
+ source: 'ph--pencil-simple--regular',
15
+ readonly: 'ph--pencil-slash--regular',
16
+ };
24
17
 
25
- const createViewModeActions = (value: string, onViewModeChange: (mode: EditorViewMode) => void) =>
26
- Object.entries({
27
- preview: 'ph--eye--regular',
28
- source: 'ph--pencil-simple--regular',
29
- readonly: 'ph--pencil-slash--regular',
30
- }).map(([viewMode, icon]) => {
31
- const checked = viewMode === value;
32
- return createEditorAction(
33
- `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',
34
25
  {
35
- label: [`${viewMode} mode label`, { ns: translationKey }],
36
- checked,
37
- 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
+ }
38
47
  },
39
- () => onViewModeChange(viewMode as EditorViewMode),
40
48
  );
41
- });
42
-
43
- export const createViewMode = (state: EditorToolbarState, onViewModeChange: (mode: EditorViewMode) => void) => {
44
- const value = state.viewMode ?? 'source';
45
- const viewModeGroupAction = createViewModeGroupAction(value);
46
- const viewModeActions = createViewModeActions(value, onViewModeChange);
47
- return {
48
- nodes: [viewModeGroupAction as NodeArg<any>, ...viewModeActions],
49
- edges: [
50
- { source: 'root', target: 'viewMode' },
51
- ...viewModeActions.map(({ id }) => ({ source: viewModeGroupAction.id, target: id })),
52
- ],
53
49
  };
54
- };
@@ -3,4 +3,6 @@
3
3
  //
4
4
 
5
5
  export * from './Editor';
6
- export * from './EditorToolbar';
6
+
7
+ export * from './EditorMenuProvider';
8
+ export * from './EditorPreviewProvider';
@@ -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('@anthropic/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
+ };