@dxos/react-ui-editor 0.8.4-main.66e292d → 0.8.4-main.69d29f4

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 (397) hide show
  1. package/dist/lib/browser/index.mjs +466 -8269
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +465 -8267
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/components/Editor/Editor.d.ts +8 -2
  8. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  9. package/dist/types/src/components/Editor/Editor.stories.d.ts +4 -1
  10. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  11. package/dist/types/src/components/EditorContent/EditorContent.d.ts +4 -2
  12. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +1 -1
  13. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +1 -1
  14. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -1
  15. package/dist/types/src/components/EditorMenuProvider/index.d.ts +0 -1
  16. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -1
  17. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -1
  18. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -1
  19. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +1 -2
  20. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -1
  21. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +1 -1
  23. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -1
  24. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +7 -5
  25. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  26. package/dist/types/src/components/EditorToolbar/actions.d.ts +8 -23
  27. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +1 -1
  28. package/dist/types/src/components/EditorToolbar/blocks.d.ts +6 -5
  29. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  30. package/dist/types/src/components/EditorToolbar/formatting.d.ts +6 -5
  31. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  32. package/dist/types/src/components/EditorToolbar/headings.d.ts +6 -5
  33. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  34. package/dist/types/src/components/EditorToolbar/image.d.ts +4 -11
  35. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  36. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  37. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  38. package/dist/types/src/components/EditorToolbar/search.d.ts +4 -11
  39. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  40. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +4 -4
  41. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -1
  42. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +7 -6
  43. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  44. package/dist/types/src/components/index.d.ts.map +1 -1
  45. package/dist/types/src/hooks/useTextEditor.d.ts +1 -1
  46. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  47. package/dist/types/src/index.d.ts +0 -8
  48. package/dist/types/src/index.d.ts.map +1 -1
  49. package/dist/types/src/{extensions/automerge/automerge.stories.d.ts → stories/Automerge.stories.d.ts} +5 -9
  50. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  51. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -1
  52. package/dist/types/src/stories/Comments.stories.d.ts +3 -2
  53. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  54. package/dist/types/src/stories/EditorToolbar.stories.d.ts +4 -4
  55. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  56. package/dist/types/src/stories/Experimental.stories.d.ts +3 -2
  57. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  58. package/dist/types/src/stories/Markdown.stories.d.ts +3 -2
  59. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  60. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  61. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  62. package/dist/types/src/stories/Preview.stories.d.ts +3 -2
  63. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  64. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  65. package/dist/types/src/stories/TextEditor.stories.d.ts +3 -2
  66. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  67. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  68. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  69. package/dist/types/src/stories/components/EditorStory.d.ts +8 -20
  70. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  71. package/dist/types/src/stories/components/util.d.ts +3 -3
  72. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  73. package/dist/types/src/translations.d.ts +5 -5
  74. package/dist/types/src/translations.d.ts.map +1 -1
  75. package/dist/types/src/util/index.d.ts +0 -5
  76. package/dist/types/src/util/index.d.ts.map +1 -1
  77. package/dist/types/src/util/react.d.ts +5 -1
  78. package/dist/types/src/util/react.d.ts.map +1 -1
  79. package/dist/types/tsconfig.tsbuildinfo +1 -1
  80. package/package.json +61 -63
  81. package/src/components/Editor/Editor.stories.tsx +14 -8
  82. package/src/components/Editor/Editor.tsx +9 -4
  83. package/src/components/EditorContent/EditorContent.tsx +19 -6
  84. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +2 -2
  85. package/src/components/EditorMenuProvider/index.ts +0 -1
  86. package/src/components/EditorMenuProvider/menu-presets.ts +2 -1
  87. package/src/components/EditorMenuProvider/menu.ts +1 -2
  88. package/src/components/EditorMenuProvider/popover.ts +1 -3
  89. package/src/components/EditorMenuProvider/useEditorMenu.ts +1 -3
  90. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +1 -2
  91. package/src/components/EditorToolbar/EditorToolbar.tsx +18 -14
  92. package/src/components/EditorToolbar/actions.ts +8 -7
  93. package/src/components/EditorToolbar/blocks.ts +3 -4
  94. package/src/components/EditorToolbar/formatting.ts +3 -4
  95. package/src/components/EditorToolbar/headings.ts +3 -3
  96. package/src/components/EditorToolbar/image.ts +8 -1
  97. package/src/components/EditorToolbar/index.ts +1 -1
  98. package/src/components/EditorToolbar/search.ts +8 -1
  99. package/src/components/EditorToolbar/useEditorToolbar.ts +6 -6
  100. package/src/components/EditorToolbar/view-mode.ts +3 -3
  101. package/src/components/index.ts +0 -2
  102. package/src/hooks/useTextEditor.ts +9 -3
  103. package/src/index.ts +0 -10
  104. package/src/stories/Automerge.stories.tsx +175 -0
  105. package/src/stories/CommandDialog.stories.tsx +3 -5
  106. package/src/stories/Comments.stories.tsx +44 -39
  107. package/src/stories/EditorToolbar.stories.tsx +28 -13
  108. package/src/stories/Experimental.stories.tsx +4 -6
  109. package/src/stories/Markdown.stories.tsx +14 -14
  110. package/src/stories/Outliner.stories.tsx +4 -5
  111. package/src/stories/Popover.stories.tsx +17 -21
  112. package/src/stories/Preview.stories.tsx +51 -46
  113. package/src/stories/Tags.stories.tsx +19 -10
  114. package/src/stories/TextEditor.stories.tsx +11 -17
  115. package/src/stories/Theme.stories.tsx +61 -0
  116. package/src/stories/components/EditorStory.tsx +17 -19
  117. package/src/stories/components/util.tsx +3 -3
  118. package/src/translations.ts +4 -4
  119. package/src/util/index.ts +1 -6
  120. package/src/util/react.tsx +6 -2
  121. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  122. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  123. package/dist/lib/browser/types/index.mjs +0 -13
  124. package/dist/lib/browser/types/index.mjs.map +0 -7
  125. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  126. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  127. package/dist/lib/node-esm/types/index.mjs +0 -14
  128. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  129. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +0 -26
  130. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +0 -1
  131. package/dist/types/src/components/EditorMenuProvider/util.d.ts +0 -8
  132. package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +0 -1
  133. package/dist/types/src/defaults.d.ts +0 -14
  134. package/dist/types/src/defaults.d.ts.map +0 -1
  135. package/dist/types/src/extensions/annotations.d.ts +0 -9
  136. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  137. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -17
  138. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  139. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  140. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  141. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  142. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  143. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  144. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  145. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  146. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  147. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  148. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  149. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  150. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  151. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  152. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  153. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  154. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  155. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  156. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  157. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  158. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  159. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  160. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  161. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  162. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  163. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  164. package/dist/types/src/extensions/autoscroll.d.ts +0 -20
  165. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  166. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  167. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  168. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  169. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  170. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  171. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  172. package/dist/types/src/extensions/blast.d.ts +0 -25
  173. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  174. package/dist/types/src/extensions/blocks.d.ts +0 -2
  175. package/dist/types/src/extensions/blocks.d.ts.map +0 -1
  176. package/dist/types/src/extensions/bookmarks.d.ts +0 -12
  177. package/dist/types/src/extensions/bookmarks.d.ts.map +0 -1
  178. package/dist/types/src/extensions/comments.d.ts +0 -95
  179. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  180. package/dist/types/src/extensions/debug.d.ts +0 -3
  181. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  182. package/dist/types/src/extensions/dnd.d.ts +0 -9
  183. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  184. package/dist/types/src/extensions/factories.d.ts +0 -84
  185. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  186. package/dist/types/src/extensions/focus.d.ts +0 -7
  187. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  188. package/dist/types/src/extensions/folding.d.ts +0 -7
  189. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  190. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  191. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  192. package/dist/types/src/extensions/index.d.ts +0 -32
  193. package/dist/types/src/extensions/index.d.ts.map +0 -1
  194. package/dist/types/src/extensions/json.d.ts +0 -7
  195. package/dist/types/src/extensions/json.d.ts.map +0 -1
  196. package/dist/types/src/extensions/listener.d.ts +0 -13
  197. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  198. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  199. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  200. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  201. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  202. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  203. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  204. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  205. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  206. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  207. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  208. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  209. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  210. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -61
  211. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  212. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  213. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  214. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  215. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  216. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  217. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  218. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  219. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  220. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  221. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  222. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  223. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  224. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  225. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  226. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  227. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  228. package/dist/types/src/extensions/mention.d.ts +0 -7
  229. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  230. package/dist/types/src/extensions/modal.d.ts +0 -7
  231. package/dist/types/src/extensions/modal.d.ts.map +0 -1
  232. package/dist/types/src/extensions/modes.d.ts +0 -10
  233. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  234. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  235. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  236. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  237. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  238. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  239. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  240. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  241. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  242. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  243. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  244. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  245. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  246. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  247. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  248. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  249. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  250. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  251. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  252. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  253. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  254. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  255. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  256. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  257. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  258. package/dist/types/src/extensions/replacer.d.ts +0 -21
  259. package/dist/types/src/extensions/replacer.d.ts.map +0 -1
  260. package/dist/types/src/extensions/replacer.test.d.ts +0 -2
  261. package/dist/types/src/extensions/replacer.test.d.ts.map +0 -1
  262. package/dist/types/src/extensions/scrolling.d.ts +0 -78
  263. package/dist/types/src/extensions/scrolling.d.ts.map +0 -1
  264. package/dist/types/src/extensions/selection.d.ts +0 -24
  265. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  266. package/dist/types/src/extensions/state.d.ts +0 -2
  267. package/dist/types/src/extensions/state.d.ts.map +0 -1
  268. package/dist/types/src/extensions/submit.d.ts +0 -10
  269. package/dist/types/src/extensions/submit.d.ts.map +0 -1
  270. package/dist/types/src/extensions/tab.d.ts +0 -4
  271. package/dist/types/src/extensions/tab.d.ts.map +0 -1
  272. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  273. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  274. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  275. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  276. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  277. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  278. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  279. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  280. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -97
  281. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  282. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  283. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  284. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  285. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  286. package/dist/types/src/styles/index.d.ts +0 -4
  287. package/dist/types/src/styles/index.d.ts.map +0 -1
  288. package/dist/types/src/styles/markdown.d.ts +0 -8
  289. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  290. package/dist/types/src/styles/theme.d.ts +0 -38
  291. package/dist/types/src/styles/theme.d.ts.map +0 -1
  292. package/dist/types/src/styles/tokens.d.ts +0 -3
  293. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  294. package/dist/types/src/types/index.d.ts +0 -2
  295. package/dist/types/src/types/index.d.ts.map +0 -1
  296. package/dist/types/src/types/types.d.ts +0 -21
  297. package/dist/types/src/types/types.d.ts.map +0 -1
  298. package/dist/types/src/util/cursor.d.ts +0 -31
  299. package/dist/types/src/util/cursor.d.ts.map +0 -1
  300. package/dist/types/src/util/debug.d.ts +0 -21
  301. package/dist/types/src/util/debug.d.ts.map +0 -1
  302. package/dist/types/src/util/decorations.d.ts +0 -4
  303. package/dist/types/src/util/decorations.d.ts.map +0 -1
  304. package/dist/types/src/util/dom.d.ts +0 -10
  305. package/dist/types/src/util/dom.d.ts.map +0 -1
  306. package/dist/types/src/util/facet.d.ts +0 -3
  307. package/dist/types/src/util/facet.d.ts.map +0 -1
  308. package/src/components/EditorContent/EditorContent.stories.tsx +0 -70
  309. package/src/components/EditorMenuProvider/util.ts +0 -31
  310. package/src/defaults.ts +0 -52
  311. package/src/extensions/annotations.ts +0 -55
  312. package/src/extensions/autocomplete/autocomplete.ts +0 -151
  313. package/src/extensions/autocomplete/index.ts +0 -8
  314. package/src/extensions/autocomplete/match.ts +0 -46
  315. package/src/extensions/autocomplete/placeholder.ts +0 -117
  316. package/src/extensions/autocomplete/typeahead.ts +0 -87
  317. package/src/extensions/automerge/automerge.stories.tsx +0 -150
  318. package/src/extensions/automerge/automerge.test.tsx +0 -78
  319. package/src/extensions/automerge/automerge.ts +0 -105
  320. package/src/extensions/automerge/cursor.ts +0 -28
  321. package/src/extensions/automerge/defs.ts +0 -31
  322. package/src/extensions/automerge/index.ts +0 -5
  323. package/src/extensions/automerge/sync.ts +0 -79
  324. package/src/extensions/automerge/update-automerge.ts +0 -50
  325. package/src/extensions/automerge/update-codemirror.ts +0 -115
  326. package/src/extensions/autoscroll.ts +0 -163
  327. package/src/extensions/awareness/awareness-provider.ts +0 -127
  328. package/src/extensions/awareness/awareness.ts +0 -315
  329. package/src/extensions/awareness/index.ts +0 -6
  330. package/src/extensions/blast.ts +0 -363
  331. package/src/extensions/blocks.ts +0 -131
  332. package/src/extensions/bookmarks.ts +0 -75
  333. package/src/extensions/comments.ts +0 -598
  334. package/src/extensions/debug.ts +0 -15
  335. package/src/extensions/dnd.ts +0 -37
  336. package/src/extensions/factories.ts +0 -282
  337. package/src/extensions/focus.ts +0 -36
  338. package/src/extensions/folding.tsx +0 -43
  339. package/src/extensions/hashtag.tsx +0 -68
  340. package/src/extensions/index.ts +0 -35
  341. package/src/extensions/json.ts +0 -57
  342. package/src/extensions/listener.ts +0 -32
  343. package/src/extensions/markdown/action.ts +0 -117
  344. package/src/extensions/markdown/bundle.ts +0 -105
  345. package/src/extensions/markdown/changes.test.ts +0 -26
  346. package/src/extensions/markdown/changes.ts +0 -149
  347. package/src/extensions/markdown/debug.ts +0 -44
  348. package/src/extensions/markdown/decorate.ts +0 -601
  349. package/src/extensions/markdown/formatting.test.ts +0 -498
  350. package/src/extensions/markdown/formatting.ts +0 -1265
  351. package/src/extensions/markdown/highlight.ts +0 -183
  352. package/src/extensions/markdown/image.ts +0 -118
  353. package/src/extensions/markdown/index.ts +0 -13
  354. package/src/extensions/markdown/link.ts +0 -50
  355. package/src/extensions/markdown/parser.test.ts +0 -75
  356. package/src/extensions/markdown/styles.ts +0 -135
  357. package/src/extensions/markdown/table.ts +0 -150
  358. package/src/extensions/mention.ts +0 -41
  359. package/src/extensions/modal.ts +0 -24
  360. package/src/extensions/modes.ts +0 -41
  361. package/src/extensions/outliner/commands.ts +0 -270
  362. package/src/extensions/outliner/editor.test.ts +0 -33
  363. package/src/extensions/outliner/editor.ts +0 -184
  364. package/src/extensions/outliner/index.ts +0 -7
  365. package/src/extensions/outliner/menu.ts +0 -128
  366. package/src/extensions/outliner/outliner.test.ts +0 -100
  367. package/src/extensions/outliner/outliner.ts +0 -167
  368. package/src/extensions/outliner/selection.ts +0 -50
  369. package/src/extensions/outliner/tree.test.ts +0 -168
  370. package/src/extensions/outliner/tree.ts +0 -317
  371. package/src/extensions/preview/index.ts +0 -5
  372. package/src/extensions/preview/preview.ts +0 -193
  373. package/src/extensions/replacer.test.ts +0 -75
  374. package/src/extensions/replacer.ts +0 -93
  375. package/src/extensions/scrolling.ts +0 -189
  376. package/src/extensions/selection.ts +0 -100
  377. package/src/extensions/state.ts +0 -7
  378. package/src/extensions/submit.ts +0 -62
  379. package/src/extensions/tab.ts +0 -29
  380. package/src/extensions/tags/extended-markdown.test.ts +0 -262
  381. package/src/extensions/tags/extended-markdown.ts +0 -78
  382. package/src/extensions/tags/index.ts +0 -7
  383. package/src/extensions/tags/streamer.ts +0 -243
  384. package/src/extensions/tags/xml-tags.ts +0 -500
  385. package/src/extensions/tags/xml-util.ts +0 -94
  386. package/src/extensions/typewriter.ts +0 -68
  387. package/src/styles/index.ts +0 -7
  388. package/src/styles/markdown.ts +0 -26
  389. package/src/styles/theme.ts +0 -269
  390. package/src/styles/tokens.ts +0 -17
  391. package/src/types/index.ts +0 -5
  392. package/src/types/types.ts +0 -32
  393. package/src/util/cursor.ts +0 -56
  394. package/src/util/debug.ts +0 -69
  395. package/src/util/decorations.ts +0 -21
  396. package/src/util/dom.ts +0 -34
  397. package/src/util/facet.ts +0 -13
@@ -4,10 +4,9 @@
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
6
 
7
- import { type NodeArg } from '@dxos/app-graph';
7
+ import { type Node } from '@dxos/app-graph';
8
8
  import { type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
9
-
10
- import { type Formatting, Inline, addLink, removeLink, setStyle } from '../../extensions';
9
+ import { type Formatting, Inline, addLink, removeLink, setStyle } from '@dxos/ui-editor';
11
10
 
12
11
  import { createEditorAction, createEditorActionGroup } from './actions';
13
12
  import { type EditorToolbarState } from './useEditorToolbar';
@@ -57,7 +56,7 @@ export const createFormatting = (state: EditorToolbarState, getView: () => Edito
57
56
  const formattingGroupAction = createFormattingGroup(state);
58
57
  const formattingActions = createFormattingActions(state, getView);
59
58
  return {
60
- nodes: [formattingGroupAction as NodeArg<any>, ...formattingActions],
59
+ nodes: [formattingGroupAction as Node.NodeArg<any>, ...formattingActions],
61
60
  edges: [
62
61
  { source: 'root', target: 'formatting' },
63
62
  ...formattingActions.map(({ id }) => ({ source: formattingGroupAction.id, target: id })),
@@ -4,10 +4,10 @@
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
6
 
7
- import { type NodeArg } from '@dxos/app-graph';
7
+ import { type Node } from '@dxos/app-graph';
8
8
  import { type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
9
+ import { setHeading } from '@dxos/ui-editor';
9
10
 
10
- import { setHeading } from '../../extensions';
11
11
  import { translationKey } from '../../translations';
12
12
 
13
13
  import { createEditorAction, createEditorActionGroup } from './actions';
@@ -59,7 +59,7 @@ export const createHeadings = (state: EditorToolbarState, getView: () => EditorV
59
59
  const headingGroupAction = createHeadingGroupAction(headingValue);
60
60
  const headingActions = createHeadingActions(headingValue, getView);
61
61
  return {
62
- nodes: [headingGroupAction as NodeArg<any>, ...headingActions],
62
+ nodes: [headingGroupAction as Node.NodeArg<any>, ...headingActions],
63
63
  edges: [
64
64
  { source: 'root', target: 'heading' },
65
65
  ...headingActions.map(({ id }) => ({ source: headingGroupAction.id, target: id })),
@@ -2,6 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import { type Node } from '@dxos/app-graph';
6
+
5
7
  import { createEditorAction } from './actions';
6
8
 
7
9
  const createImageUploadAction = (onImageUpload: () => void) =>
@@ -14,7 +16,12 @@ const createImageUploadAction = (onImageUpload: () => void) =>
14
16
  onImageUpload,
15
17
  );
16
18
 
17
- export const createImageUpload = (onImageUpload: () => void) => ({
19
+ export const createImageUpload = (
20
+ onImageUpload: () => void,
21
+ ): {
22
+ nodes: Node.NodeArg<any>[];
23
+ edges: Array<{ source: string; target: string }>;
24
+ } => ({
18
25
  nodes: [createImageUploadAction(onImageUpload)],
19
26
  edges: [{ source: 'root', target: 'image' }],
20
27
  });
@@ -4,5 +4,5 @@
4
4
 
5
5
  export * from './EditorToolbar';
6
6
 
7
- export { type EditorToolbarState, useEditorToolbar } from './useEditorToolbar';
8
7
  export { createEditorAction, createEditorActionGroup } from './actions';
8
+ export { type EditorToolbarState, useEditorToolbar } from './useEditorToolbar';
@@ -5,6 +5,8 @@
5
5
  import { openSearchPanel } from '@codemirror/search';
6
6
  import { type EditorView } from '@codemirror/view';
7
7
 
8
+ import { type Node } from '@dxos/app-graph';
9
+
8
10
  import { createEditorAction } from './actions';
9
11
 
10
12
  const createSearchAction = (getView: () => EditorView) =>
@@ -17,7 +19,12 @@ const createSearchAction = (getView: () => EditorView) =>
17
19
  () => openSearchPanel(getView()),
18
20
  );
19
21
 
20
- export const createSearch = (getView: () => EditorView) => ({
22
+ export const createSearch = (
23
+ getView: () => EditorView,
24
+ ): {
25
+ nodes: Node.NodeArg<any>[];
26
+ edges: Array<{ source: string; target: string }>;
27
+ } => ({
21
28
  nodes: [createSearchAction(getView)],
22
29
  edges: [{ source: 'root', target: 'search' }],
23
30
  });
@@ -2,19 +2,19 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ import { Atom } from '@effect-atom/atom-react';
5
6
  import { useMemo } from 'react';
6
7
 
7
- import { type Live, live } from '@dxos/live-object';
8
-
9
- import { type Formatting } from '../../extensions';
10
- import { type EditorViewMode } from '../../types';
8
+ import { type EditorViewMode, type Formatting } from '@dxos/ui-editor';
11
9
 
12
10
  // TODO(burdon): Move to extensions.
13
11
  export type EditorToolbarState = { viewMode?: EditorViewMode } & Formatting;
14
12
 
15
13
  /**
14
+ * Creates an atom for editor toolbar state.
16
15
  * @deprecated Use Editor.Root
17
16
  */
18
- export const useEditorToolbar = (initialState: Partial<EditorToolbarState> = {}): Live<EditorToolbarState> => {
19
- return useMemo(() => live<EditorToolbarState>(initialState), []);
17
+ export const useEditorToolbar = (initialState: EditorToolbarState = {}): Atom.Writable<EditorToolbarState> => {
18
+ // TODO(wittjosiah): Including initialState in the deps causes reactivity issues.
19
+ return useMemo(() => Atom.make<EditorToolbarState>(initialState), []);
20
20
  };
@@ -2,11 +2,11 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type NodeArg } from '@dxos/app-graph';
5
+ import { type Node } from '@dxos/app-graph';
6
6
  import { type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
7
+ import { type EditorViewMode } from '@dxos/ui-editor';
7
8
 
8
9
  import { translationKey } from '../../translations';
9
- import { type EditorViewMode } from '../../types';
10
10
 
11
11
  import { createEditorAction, createEditorActionGroup } from './actions';
12
12
  import { type EditorToolbarState } from './useEditorToolbar';
@@ -46,7 +46,7 @@ export const createViewMode = (state: EditorToolbarState, onViewModeChange: (mod
46
46
  const viewModeGroupAction = createViewModeGroupAction(value);
47
47
  const viewModeActions = createViewModeActions(value, onViewModeChange);
48
48
  return {
49
- nodes: [viewModeGroupAction as NodeArg<any>, ...viewModeActions],
49
+ nodes: [viewModeGroupAction as Node.NodeArg<any>, ...viewModeActions],
50
50
  edges: [
51
51
  { source: 'root', target: 'viewMode' },
52
52
  ...viewModeActions.map(({ id }) => ({ source: viewModeGroupAction.id, target: id })),
@@ -4,8 +4,6 @@
4
4
 
5
5
  export * from './Editor';
6
6
 
7
- // export { type GetMenuContext } from './EditorMenuProvider';
8
-
9
7
  // TODO(burdon): Remove once Editor is fully migrated.
10
8
  export { EditorContent, createEditorController } from './EditorContent';
11
9
  export * from './EditorMenuProvider';
@@ -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
@@ -4,17 +4,7 @@
4
4
 
5
5
  import { translations } from './translations';
6
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
7
  export * from './components';
14
- export * from './defaults';
15
- export * from './extensions';
16
8
  export * from './hooks';
17
- export * from './types';
18
- export * from './util';
19
9
 
20
10
  export { translations };
@@ -0,0 +1,175 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { Repo } from '@automerge/automerge-repo';
6
+ import { BroadcastChannelNetworkAdapter } from '@automerge/automerge-repo-network-broadcastchannel';
7
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
+ import React, { useCallback, useEffect, useState } from 'react';
9
+
10
+ import { Obj, Ref } from '@dxos/echo';
11
+ import { TestSchema } from '@dxos/echo/testing';
12
+ import { DocAccessor, createDocAccessor } from '@dxos/echo-db';
13
+ import { log } from '@dxos/log';
14
+ import { type Messenger } from '@dxos/protocols';
15
+ import { Query, useQuery, useSpace } from '@dxos/react-client/echo';
16
+ import { type Identity, useIdentity } from '@dxos/react-client/halo';
17
+ import { useClientStory, withMultiClientProvider } from '@dxos/react-client/testing';
18
+ import { Button, useThemeContext } from '@dxos/react-ui';
19
+ import { withTheme } from '@dxos/react-ui/testing';
20
+ import { render } from '@dxos/storybook-utils';
21
+ import { createBasicExtensions, createDataExtensions, createThemeExtensions } from '@dxos/ui-editor';
22
+
23
+ import { useTextEditor } from '../hooks';
24
+ import { translations } from '../translations';
25
+
26
+ const initialContent = 'Hello world!';
27
+
28
+ type TestObject = {
29
+ text: string;
30
+ };
31
+
32
+ type EditorProps = {
33
+ source: DocAccessor;
34
+ messenger?: Messenger;
35
+ identity?: Identity;
36
+ autoFocus?: boolean;
37
+ };
38
+
39
+ const Editor = ({ source, messenger, identity, autoFocus }: EditorProps) => {
40
+ const { themeMode } = useThemeContext();
41
+ const { parentRef } = useTextEditor(
42
+ () => ({
43
+ autoFocus,
44
+ initialValue: DocAccessor.getValue(source),
45
+ extensions: [
46
+ createBasicExtensions({ placeholder: 'Type here...', search: true }),
47
+ createThemeExtensions({ themeMode, slots: { scroll: { className: 'p-2' } } }),
48
+ createDataExtensions({ id: 'test', text: source, messenger, identity }),
49
+ ],
50
+ }),
51
+ [source, themeMode],
52
+ );
53
+
54
+ return <div ref={parentRef} className='flex is-full' />;
55
+ };
56
+
57
+ const DefaultStory = () => {
58
+ const [object1, setObject1] = useState<DocAccessor<TestObject>>();
59
+ const [object2, setObject2] = useState<DocAccessor<TestObject>>();
60
+
61
+ useEffect(() => {
62
+ queueMicrotask(async () => {
63
+ const repo1 = new Repo({ network: [new BroadcastChannelNetworkAdapter()] });
64
+ const repo2 = new Repo({ network: [new BroadcastChannelNetworkAdapter()] });
65
+
66
+ const object1 = repo1.create<TestObject>();
67
+ object1.change((doc: TestObject) => {
68
+ doc.text = initialContent;
69
+ });
70
+
71
+ const object2 = await repo2.find<TestObject>(object1.url);
72
+ await object2.whenReady();
73
+
74
+ setObject1({ handle: object1, path: ['text'] });
75
+ setObject2({ handle: object2, path: ['text'] });
76
+ });
77
+ }, []);
78
+
79
+ if (!object1 || !object2) {
80
+ return null;
81
+ }
82
+
83
+ return (
84
+ <div className='bs-full is-full grid grid-cols-2 gap-4'>
85
+ <Editor source={object1} autoFocus />
86
+ <Editor source={object2} />
87
+ </div>
88
+ );
89
+ };
90
+
91
+ const EchoStory = () => {
92
+ const { spaceId, index } = useClientStory();
93
+ const identity = useIdentity();
94
+ const space = useSpace(spaceId);
95
+ const objects = useQuery(space?.db, Query.type(TestSchema.Expando, { type: 'test' }));
96
+
97
+ const [source, setSource] = useState<DocAccessor>();
98
+ const init = useCallback(() => {
99
+ const content = objects[0]?.content.target;
100
+ if (!content) {
101
+ if (objects.length) {
102
+ // TODO(burdon): Initially ref isn't ready.
103
+ log.warn('no content', { index, objects: JSON.stringify(objects) });
104
+ }
105
+ return;
106
+ }
107
+
108
+ setSource(createDocAccessor(content, ['content']));
109
+ }, [objects]);
110
+
111
+ useEffect(() => {
112
+ if (source) {
113
+ return;
114
+ }
115
+
116
+ init();
117
+ }, [objects, source]);
118
+
119
+ return (
120
+ <div className='bs-full is-full flex flex-col overflow-hidden'>
121
+ <pre className='p-2 text-xs text-subdued'>
122
+ {JSON.stringify({ index, identity: identity?.identityKey.truncate(), spaceId, objects }, null, 2)}
123
+ </pre>
124
+ {identity && source ? (
125
+ <div className='p-2 flex grow overflow-hidden'>
126
+ <Editor identity={identity} messenger={space} source={source} />
127
+ </div>
128
+ ) : (
129
+ <div className='p-2'>
130
+ <Button onClick={init}>Init</Button>
131
+ </div>
132
+ )}
133
+ </div>
134
+ );
135
+ };
136
+
137
+ const meta = {
138
+ title: 'ui/react-ui-editor/Automerge',
139
+ component: Editor as any,
140
+ parameters: {
141
+ layout: 'fullscreen',
142
+ translations,
143
+ },
144
+ } satisfies Meta<typeof DefaultStory>;
145
+
146
+ export default meta;
147
+
148
+ type Story = StoryObj<typeof meta>;
149
+
150
+ // TODO(burdon): ERROR: factories.ts:126 Error: Non-base58 character
151
+ export const Default: Story = {
152
+ decorators: [withTheme],
153
+ render: render(DefaultStory),
154
+ };
155
+
156
+ // TODO(burdon): Failing (doesn't sync)
157
+ export const WithEcho: Story = {
158
+ decorators: [
159
+ withTheme,
160
+ withMultiClientProvider({
161
+ numClients: 2,
162
+ createIdentity: true,
163
+ createSpace: true,
164
+ onCreateSpace: async ({ space }) => {
165
+ space.db.add(
166
+ Obj.make(TestSchema.Expando, {
167
+ type: 'test',
168
+ content: Ref.make(Obj.make(TestSchema.Expando, { content: initialContent })),
169
+ }),
170
+ );
171
+ },
172
+ }),
173
+ ],
174
+ render: render(EchoStory),
175
+ };
@@ -7,10 +7,8 @@ import React, { type KeyboardEvent, useState } from 'react';
7
7
 
8
8
  import { type Button, IconButton, Input } from '@dxos/react-ui';
9
9
  import { withTheme } from '@dxos/react-ui/testing';
10
- import { mx } from '@dxos/react-ui-theme';
11
-
12
- import { editorWidth } from '../defaults';
13
- import { str } from '../util';
10
+ import { editorWidth, join } from '@dxos/ui-editor';
11
+ import { mx } from '@dxos/ui-theme';
14
12
 
15
13
  import { EditorStory } from './components';
16
14
 
@@ -69,7 +67,7 @@ const CommandDialog = ({ onAction }: { onAction: (action?: any) => void }) => {
69
67
 
70
68
  const meta = {
71
69
  title: 'ui/react-ui-editor/CommandDialog',
72
- render: () => <EditorStory text={str('# Command', '', '')} extensions={[]} />,
70
+ render: () => <EditorStory text={join('# Command', '', '')} extensions={[]} />,
73
71
  decorators: [withTheme],
74
72
  parameters: {
75
73
  layout: 'fullscreen',
@@ -2,17 +2,17 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { effect, useSignal } from '@preact/signals-react';
5
+ import { Atom, RegistryContext } from '@effect-atom/atom-react';
6
6
  import { type Meta, type StoryObj } from '@storybook/react-vite';
7
- import React, { type FC } from 'react';
7
+ import React, { type FC, useContext, useMemo } from 'react';
8
8
 
9
9
  import { keySymbols, parseShortcut } from '@dxos/keyboard';
10
10
  import { PublicKey } from '@dxos/keys';
11
11
  import { log } from '@dxos/log';
12
12
  import { withTheme } from '@dxos/react-ui/testing';
13
+ import { withRegistry } from '@dxos/storybook-utils';
14
+ import { type Comment, annotations, comments, createExternalCommentSync } from '@dxos/ui-editor';
13
15
 
14
- import { annotations, comments, createExternalCommentSync } from '../extensions';
15
- import { type Comment } from '../types';
16
16
  import { createRenderer, str } from '../util';
17
17
 
18
18
  import { EditorStory, content, longText } from './components';
@@ -20,7 +20,7 @@ import { EditorStory, content, longText } from './components';
20
20
  const meta = {
21
21
  title: 'ui/react-ui-editor/Comments',
22
22
  component: EditorStory,
23
- decorators: [withTheme],
23
+ decorators: [withRegistry, withTheme],
24
24
  parameters: {
25
25
  layout: 'fullscreen',
26
26
  },
@@ -34,41 +34,46 @@ type Story = StoryObj<typeof meta>;
34
34
  // Comments
35
35
  //
36
36
 
37
+ const CommentsStory = () => {
38
+ const registry = useContext(RegistryContext);
39
+ const commentsAtom = useMemo(() => Atom.make<Comment[]>([]), []);
40
+
41
+ return (
42
+ <EditorStory
43
+ text={str('# Comments', '', content.paragraphs, content.footer)}
44
+ extensions={[
45
+ createExternalCommentSync(
46
+ 'test',
47
+ (sink) => registry.subscribe(commentsAtom, () => sink()),
48
+ () => registry.get(commentsAtom),
49
+ ),
50
+ comments({
51
+ id: 'test',
52
+ renderTooltip: createRenderer(CommentTooltip),
53
+ onCreate: ({ cursor }) => {
54
+ const id = PublicKey.random().toHex();
55
+ const current = registry.get(commentsAtom);
56
+ registry.set(commentsAtom, [...current, { id, cursor }]);
57
+ return id;
58
+ },
59
+ onSelect: (state) => {
60
+ const debug = false;
61
+ if (debug) {
62
+ log.info('update', {
63
+ comments: state.comments.length,
64
+ active: state.selection.current?.slice(0, 8),
65
+ closest: state.selection.closest?.slice(0, 8),
66
+ });
67
+ }
68
+ },
69
+ }),
70
+ ]}
71
+ />
72
+ );
73
+ };
74
+
37
75
  export const Comments: Story = {
38
- render: () => {
39
- const _comments = useSignal<Comment[]>([]);
40
- return (
41
- <EditorStory
42
- text={str('# Comments', '', content.paragraphs, content.footer)}
43
- extensions={[
44
- createExternalCommentSync(
45
- 'test',
46
- (sink) => effect(() => sink()),
47
- () => _comments.value,
48
- ),
49
- comments({
50
- id: 'test',
51
- renderTooltip: createRenderer(CommentTooltip),
52
- onCreate: ({ cursor }) => {
53
- const id = PublicKey.random().toHex();
54
- _comments.value = [..._comments.value, { id, cursor }];
55
- return id;
56
- },
57
- onSelect: (state) => {
58
- const debug = false;
59
- if (debug) {
60
- log.info('update', {
61
- comments: state.comments.length,
62
- active: state.selection.current?.slice(0, 8),
63
- closest: state.selection.closest?.slice(0, 8),
64
- });
65
- }
66
- },
67
- }),
68
- ]}
69
- />
70
- );
71
- },
76
+ render: () => <CommentsStory />,
72
77
  };
73
78
 
74
79
  const Key: FC<{ char: string }> = ({ char }) => (
@@ -2,36 +2,48 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { RegistryContext, useAtomValue } from '@effect-atom/atom-react';
5
6
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React, { useCallback, useState } from 'react';
7
+ import React, { useCallback, useContext, useState } from 'react';
7
8
 
8
9
  import { invariant } from '@dxos/invariant';
9
10
  import { useThemeContext } from '@dxos/react-ui';
10
11
  import { withTheme } from '@dxos/react-ui/testing';
11
- import { attentionSurface, mx } from '@dxos/react-ui-theme';
12
-
13
- import { EditorToolbar, useEditorToolbar } from '../components';
14
- import { editorWidth } from '../defaults';
12
+ import { withRegistry } from '@dxos/storybook-utils';
15
13
  import {
14
+ type EditorInputMode,
15
+ type EditorViewMode,
16
16
  InputModeExtensions,
17
17
  createBasicExtensions,
18
18
  createMarkdownExtensions,
19
19
  createThemeExtensions,
20
20
  decorateMarkdown,
21
+ editorWidth,
21
22
  formattingKeymap,
22
23
  formattingListener,
23
- } from '../extensions';
24
+ } from '@dxos/ui-editor';
25
+ import { attentionSurface, mx } from '@dxos/ui-theme';
26
+
27
+ import { EditorToolbar, type EditorToolbarState, useEditorToolbar } from '../components';
24
28
  import { type UseTextEditorProps, useTextEditor } from '../hooks';
25
29
  import { translations } from '../translations';
26
- import { type EditorInputMode, type EditorViewMode } from '../types';
27
30
 
28
31
  type StoryProps = { placeholder?: string } & UseTextEditorProps;
29
32
 
30
33
  const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
31
34
  const { themeMode } = useThemeContext();
35
+ const registry = useContext(RegistryContext);
32
36
 
33
37
  const toolbarState = useEditorToolbar({ viewMode: 'source' });
34
- const viewMode = toolbarState.viewMode;
38
+ const { viewMode } = useAtomValue(toolbarState);
39
+
40
+ const updateToolbarState = useCallback(
41
+ (formatting: EditorToolbarState) => {
42
+ registry.update(toolbarState, (state) => ({ ...state, ...formatting }));
43
+ },
44
+ [registry, toolbarState],
45
+ );
46
+
35
47
  // TODO(wittjosiah): Provide way to change the input mode.
36
48
  const [editorInputMode, _setEditorInputMode] = useState<EditorInputMode>('default');
37
49
  const { parentRef, view } = useTextEditor(
@@ -46,7 +58,7 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
46
58
  createThemeExtensions({ themeMode, syntaxHighlighting: true }),
47
59
  viewMode === 'source' ? [] : decorateMarkdown(),
48
60
  formattingKeymap(),
49
- formattingListener(() => toolbarState),
61
+ formattingListener(updateToolbarState),
50
62
  ],
51
63
  }),
52
64
  [editorInputMode, viewMode, themeMode, placeholder],
@@ -57,9 +69,12 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
57
69
  return view;
58
70
  }, [view]);
59
71
 
60
- const handleViewModeChange = useCallback((mode: EditorViewMode) => {
61
- toolbarState.viewMode = mode;
62
- }, []);
72
+ const handleViewModeChange = useCallback(
73
+ (mode: EditorViewMode) => {
74
+ registry.update(toolbarState, (state) => ({ ...state, viewMode: mode }));
75
+ },
76
+ [registry, toolbarState],
77
+ );
63
78
 
64
79
  // TODO(marijn): This doesn't update the state on view changes.
65
80
  // Also not sure if view is even guaranteed to exist at this point.
@@ -76,7 +91,7 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
76
91
  const meta = {
77
92
  title: 'ui/react-ui-editor/EditorToolbar',
78
93
  render: DefaultStory,
79
- decorators: [withTheme],
94
+ decorators: [withRegistry, withTheme],
80
95
  parameters: {
81
96
  layout: 'fullscreen',
82
97
  translations,
@@ -9,9 +9,7 @@ import React from 'react';
9
9
  import { log } from '@dxos/log';
10
10
  import { faker } from '@dxos/random';
11
11
  import { withTheme } from '@dxos/react-ui/testing';
12
-
13
- import { blast, defaultOptions, dropFile, typewriter } from '../extensions';
14
- import { str } from '../util';
12
+ import { blast, defaultOptions, dropFile, join, typewriter } from '@dxos/ui-editor';
15
13
 
16
14
  import { EditorStory, content } from './components';
17
15
 
@@ -37,7 +35,7 @@ const typewriterItems = localStorage.getItem('dxos.org/testing/typewriter')?.spl
37
35
  export const Typewriter: Story = {
38
36
  render: () => (
39
37
  <EditorStory
40
- text={str('# Typewriter', '', content.paragraphs, content.footer)}
38
+ text={join('# Typewriter', '', content.paragraphs, content.footer)}
41
39
  extensions={[typewriter({ items: typewriterItems })]}
42
40
  />
43
41
  ),
@@ -50,7 +48,7 @@ export const Typewriter: Story = {
50
48
  export const Blast: Story = {
51
49
  render: () => (
52
50
  <EditorStory
53
- text={str('# Blast', '', content.paragraphs, content.codeblocks, content.paragraphs)}
51
+ text={join('# Blast', '', content.paragraphs, content.codeblocks, content.paragraphs)}
54
52
  extensions={[
55
53
  typewriter({ items: typewriterItems }),
56
54
  blast(
@@ -77,7 +75,7 @@ export const Blast: Story = {
77
75
  export const DND: Story = {
78
76
  render: () => (
79
77
  <EditorStory
80
- text={str('# DND', '')}
78
+ text={join('# DND', '')}
81
79
  extensions={[
82
80
  dropFile({
83
81
  onDrop: (view, event) => {