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

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 (422) hide show
  1. package/dist/lib/browser/index.mjs +1143 -8424
  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 +1143 -8423
  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 +43 -21
  8. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  9. package/dist/types/src/components/Editor/Editor.stories.d.ts +23 -0
  10. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  11. package/dist/types/src/components/EditorContent/EditorContent.d.ts +31 -0
  12. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +1 -0
  13. package/dist/types/src/components/EditorContent/controller.d.ts +10 -0
  14. package/dist/types/src/components/EditorContent/controller.d.ts.map +1 -0
  15. package/dist/types/src/components/EditorContent/index.d.ts +3 -0
  16. package/dist/types/src/components/EditorContent/index.d.ts.map +1 -0
  17. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +36 -0
  18. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  20. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  22. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  24. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +46 -0
  26. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  28. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  30. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  32. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  34. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  35. package/dist/types/src/components/EditorToolbar/actions.d.ts +25 -0
  36. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +1 -0
  37. package/dist/types/src/components/EditorToolbar/blocks.d.ts +9 -7
  38. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/formatting.d.ts +9 -7
  40. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/headings.d.ts +9 -7
  42. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/image.d.ts +5 -11
  44. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/index.d.ts +2 -1
  46. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/search.d.ts +5 -11
  48. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +11 -0
  50. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -0
  51. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +10 -8
  52. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  53. package/dist/types/src/components/index.d.ts +4 -2
  54. package/dist/types/src/components/index.d.ts.map +1 -1
  55. package/dist/types/src/hooks/useTextEditor.d.ts +4 -8
  56. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  57. package/dist/types/src/index.d.ts +0 -8
  58. package/dist/types/src/index.d.ts.map +1 -1
  59. package/dist/types/src/{extensions/automerge/automerge.stories.d.ts → stories/Automerge.stories.d.ts} +5 -8
  60. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  61. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -1
  62. package/dist/types/src/stories/Comments.stories.d.ts +4 -3
  63. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  64. package/dist/types/src/stories/EditorToolbar.stories.d.ts +4 -4
  65. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  66. package/dist/types/src/stories/Experimental.stories.d.ts +4 -3
  67. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  68. package/dist/types/src/stories/Markdown.stories.d.ts +4 -3
  69. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  70. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  71. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -5
  72. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  73. package/dist/types/src/stories/Preview.stories.d.ts +5 -3
  74. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  75. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  76. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -4
  77. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  78. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  79. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  80. package/dist/types/src/stories/components/EditorStory.d.ts +9 -18
  81. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  82. package/dist/types/src/stories/components/util.d.ts +3 -3
  83. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  84. package/dist/types/src/translations.d.ts +5 -5
  85. package/dist/types/src/translations.d.ts.map +1 -1
  86. package/dist/types/src/util/index.d.ts +0 -5
  87. package/dist/types/src/util/index.d.ts.map +1 -1
  88. package/dist/types/src/util/react.d.ts +6 -5
  89. package/dist/types/src/util/react.d.ts.map +1 -1
  90. package/dist/types/tsconfig.tsbuildinfo +1 -1
  91. package/package.json +68 -72
  92. package/src/components/Editor/Editor.stories.tsx +95 -0
  93. package/src/components/Editor/Editor.tsx +167 -56
  94. package/src/components/EditorContent/EditorContent.tsx +83 -0
  95. package/src/components/EditorContent/controller.ts +50 -0
  96. package/src/components/EditorContent/index.ts +6 -0
  97. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +228 -0
  98. package/src/components/EditorMenuProvider/index.ts +10 -0
  99. package/src/components/EditorMenuProvider/menu-presets.ts +124 -0
  100. package/src/components/EditorMenuProvider/menu.ts +70 -0
  101. package/src/components/EditorMenuProvider/popover.ts +285 -0
  102. package/src/components/EditorMenuProvider/useEditorMenu.ts +179 -0
  103. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  104. package/src/components/EditorPreviewProvider/index.ts +5 -0
  105. package/src/components/EditorToolbar/EditorToolbar.tsx +102 -105
  106. package/src/components/EditorToolbar/{lists.ts → actions.ts} +48 -17
  107. package/src/components/EditorToolbar/blocks.ts +7 -7
  108. package/src/components/EditorToolbar/formatting.ts +7 -7
  109. package/src/components/EditorToolbar/headings.ts +20 -17
  110. package/src/components/EditorToolbar/image.ts +10 -3
  111. package/src/components/EditorToolbar/index.ts +3 -7
  112. package/src/components/EditorToolbar/search.ts +10 -3
  113. package/src/components/EditorToolbar/useEditorToolbar.ts +20 -0
  114. package/src/components/EditorToolbar/view-mode.ts +7 -6
  115. package/src/components/index.ts +6 -2
  116. package/src/hooks/useTextEditor.ts +33 -27
  117. package/src/index.ts +0 -10
  118. package/src/stories/Automerge.stories.tsx +174 -0
  119. package/src/stories/CommandDialog.stories.tsx +18 -26
  120. package/src/stories/Comments.stories.tsx +48 -44
  121. package/src/stories/EditorToolbar.stories.tsx +36 -21
  122. package/src/stories/Experimental.stories.tsx +6 -8
  123. package/src/stories/Markdown.stories.tsx +16 -16
  124. package/src/stories/Outliner.stories.tsx +20 -21
  125. package/src/stories/Popover.stories.tsx +158 -0
  126. package/src/stories/Preview.stories.tsx +100 -81
  127. package/src/stories/Tags.stories.tsx +36 -13
  128. package/src/stories/TextEditor.stories.tsx +16 -48
  129. package/src/stories/Theme.stories.tsx +61 -0
  130. package/src/stories/components/EditorStory.tsx +32 -25
  131. package/src/stories/components/util.tsx +60 -31
  132. package/src/translations.ts +4 -4
  133. package/src/util/index.ts +1 -6
  134. package/src/util/react.tsx +8 -13
  135. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  136. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  137. package/dist/lib/browser/testing/index.mjs +0 -76
  138. package/dist/lib/browser/testing/index.mjs.map +0 -7
  139. package/dist/lib/browser/types/index.mjs +0 -13
  140. package/dist/lib/browser/types/index.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  142. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  143. package/dist/lib/node-esm/testing/index.mjs +0 -78
  144. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  145. package/dist/lib/node-esm/types/index.mjs +0 -14
  146. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  147. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts +0 -38
  148. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts.map +0 -1
  149. package/dist/types/src/components/CommandMenu/index.d.ts +0 -2
  150. package/dist/types/src/components/CommandMenu/index.d.ts.map +0 -1
  151. package/dist/types/src/components/EditorToolbar/lists.d.ts +0 -19
  152. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +0 -1
  153. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  154. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  155. package/dist/types/src/defaults.d.ts +0 -14
  156. package/dist/types/src/defaults.d.ts.map +0 -1
  157. package/dist/types/src/extensions/annotations.d.ts +0 -9
  158. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  159. package/dist/types/src/extensions/autocomplete.d.ts +0 -26
  160. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  161. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  162. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  163. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  164. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  165. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  166. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  167. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  168. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  169. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  170. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  171. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  172. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  173. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  174. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  175. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  176. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  177. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  178. package/dist/types/src/extensions/autoscroll.d.ts +0 -10
  179. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  180. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  181. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  182. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  183. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  184. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  185. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  186. package/dist/types/src/extensions/blast.d.ts +0 -25
  187. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  188. package/dist/types/src/extensions/command-dialog/action.d.ts +0 -17
  189. package/dist/types/src/extensions/command-dialog/action.d.ts.map +0 -1
  190. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts +0 -6
  191. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts.map +0 -1
  192. package/dist/types/src/extensions/command-dialog/hint.d.ts +0 -19
  193. package/dist/types/src/extensions/command-dialog/hint.d.ts.map +0 -1
  194. package/dist/types/src/extensions/command-dialog/index.d.ts +0 -4
  195. package/dist/types/src/extensions/command-dialog/index.d.ts.map +0 -1
  196. package/dist/types/src/extensions/command-dialog/state.d.ts +0 -16
  197. package/dist/types/src/extensions/command-dialog/state.d.ts.map +0 -1
  198. package/dist/types/src/extensions/command-dialog/typeahead.d.ts +0 -22
  199. package/dist/types/src/extensions/command-dialog/typeahead.d.ts.map +0 -1
  200. package/dist/types/src/extensions/command-menu/command-menu.d.ts +0 -20
  201. package/dist/types/src/extensions/command-menu/command-menu.d.ts.map +0 -1
  202. package/dist/types/src/extensions/command-menu/index.d.ts +0 -3
  203. package/dist/types/src/extensions/command-menu/index.d.ts.map +0 -1
  204. package/dist/types/src/extensions/command-menu/placeholder.d.ts +0 -10
  205. package/dist/types/src/extensions/command-menu/placeholder.d.ts.map +0 -1
  206. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts +0 -24
  207. package/dist/types/src/extensions/command-menu/useCommandMenu.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/floating-menu.d.ts +0 -7
  217. package/dist/types/src/extensions/floating-menu.d.ts.map +0 -1
  218. package/dist/types/src/extensions/focus.d.ts +0 -7
  219. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  220. package/dist/types/src/extensions/folding.d.ts +0 -7
  221. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  222. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  223. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  224. package/dist/types/src/extensions/index.d.ts +0 -27
  225. package/dist/types/src/extensions/index.d.ts.map +0 -1
  226. package/dist/types/src/extensions/json.d.ts +0 -7
  227. package/dist/types/src/extensions/json.d.ts.map +0 -1
  228. package/dist/types/src/extensions/listener.d.ts +0 -11
  229. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  230. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  231. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  232. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  233. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  234. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  235. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  236. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  237. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  238. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  239. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  240. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  241. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  243. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  245. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  247. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  249. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  251. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  253. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  255. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  256. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  257. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  258. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  259. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  260. package/dist/types/src/extensions/mention.d.ts +0 -7
  261. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  262. package/dist/types/src/extensions/modes.d.ts +0 -10
  263. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  264. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  265. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  266. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  267. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  268. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  269. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  270. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  271. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  272. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  273. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  274. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  275. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  277. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  279. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  280. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  281. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  282. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  283. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  284. package/dist/types/src/extensions/preview/preview.d.ts +0 -29
  285. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  286. package/dist/types/src/extensions/selection.d.ts +0 -24
  287. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  288. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  289. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  290. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  291. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  292. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  293. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  294. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  295. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  296. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -72
  297. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  298. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  299. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  300. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  301. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  302. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  303. package/dist/types/src/styles/index.d.ts +0 -4
  304. package/dist/types/src/styles/index.d.ts.map +0 -1
  305. package/dist/types/src/styles/markdown.d.ts +0 -8
  306. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  307. package/dist/types/src/styles/theme.d.ts +0 -38
  308. package/dist/types/src/styles/theme.d.ts.map +0 -1
  309. package/dist/types/src/styles/tokens.d.ts +0 -3
  310. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  311. package/dist/types/src/testing/PreviewPopover.d.ts +0 -20
  312. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  313. package/dist/types/src/testing/index.d.ts +0 -3
  314. package/dist/types/src/testing/index.d.ts.map +0 -1
  315. package/dist/types/src/testing/util.d.ts +0 -3
  316. package/dist/types/src/testing/util.d.ts.map +0 -1
  317. package/dist/types/src/types/index.d.ts +0 -2
  318. package/dist/types/src/types/index.d.ts.map +0 -1
  319. package/dist/types/src/types/types.d.ts +0 -21
  320. package/dist/types/src/types/types.d.ts.map +0 -1
  321. package/dist/types/src/util/cursor.d.ts +0 -31
  322. package/dist/types/src/util/cursor.d.ts.map +0 -1
  323. package/dist/types/src/util/debug.d.ts +0 -17
  324. package/dist/types/src/util/debug.d.ts.map +0 -1
  325. package/dist/types/src/util/decorations.d.ts +0 -4
  326. package/dist/types/src/util/decorations.d.ts.map +0 -1
  327. package/dist/types/src/util/dom.d.ts +0 -10
  328. package/dist/types/src/util/dom.d.ts.map +0 -1
  329. package/dist/types/src/util/facet.d.ts +0 -3
  330. package/dist/types/src/util/facet.d.ts.map +0 -1
  331. package/src/components/CommandMenu/CommandMenu.tsx +0 -348
  332. package/src/components/CommandMenu/index.ts +0 -5
  333. package/src/components/EditorToolbar/util.ts +0 -76
  334. package/src/defaults.ts +0 -52
  335. package/src/extensions/annotations.ts +0 -55
  336. package/src/extensions/autocomplete.ts +0 -219
  337. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  338. package/src/extensions/automerge/automerge.test.tsx +0 -78
  339. package/src/extensions/automerge/automerge.ts +0 -86
  340. package/src/extensions/automerge/cursor.ts +0 -28
  341. package/src/extensions/automerge/defs.ts +0 -31
  342. package/src/extensions/automerge/index.ts +0 -5
  343. package/src/extensions/automerge/sync.ts +0 -75
  344. package/src/extensions/automerge/update-automerge.ts +0 -50
  345. package/src/extensions/automerge/update-codemirror.ts +0 -115
  346. package/src/extensions/autoscroll.ts +0 -157
  347. package/src/extensions/awareness/awareness-provider.ts +0 -127
  348. package/src/extensions/awareness/awareness.ts +0 -315
  349. package/src/extensions/awareness/index.ts +0 -6
  350. package/src/extensions/blast.ts +0 -363
  351. package/src/extensions/command-dialog/action.ts +0 -55
  352. package/src/extensions/command-dialog/command-dialog.ts +0 -34
  353. package/src/extensions/command-dialog/hint.ts +0 -103
  354. package/src/extensions/command-dialog/index.ts +0 -7
  355. package/src/extensions/command-dialog/state.ts +0 -90
  356. package/src/extensions/command-dialog/typeahead.ts +0 -129
  357. package/src/extensions/command-menu/command-menu.ts +0 -210
  358. package/src/extensions/command-menu/index.ts +0 -6
  359. package/src/extensions/command-menu/placeholder.ts +0 -113
  360. package/src/extensions/command-menu/useCommandMenu.ts +0 -134
  361. package/src/extensions/comments.ts +0 -597
  362. package/src/extensions/debug.ts +0 -15
  363. package/src/extensions/dnd.ts +0 -37
  364. package/src/extensions/factories.ts +0 -284
  365. package/src/extensions/floating-menu.ts +0 -126
  366. package/src/extensions/focus.ts +0 -36
  367. package/src/extensions/folding.tsx +0 -44
  368. package/src/extensions/hashtag.tsx +0 -68
  369. package/src/extensions/index.ts +0 -30
  370. package/src/extensions/json.ts +0 -57
  371. package/src/extensions/listener.ts +0 -38
  372. package/src/extensions/markdown/action.ts +0 -117
  373. package/src/extensions/markdown/bundle.ts +0 -93
  374. package/src/extensions/markdown/changes.test.ts +0 -26
  375. package/src/extensions/markdown/changes.ts +0 -149
  376. package/src/extensions/markdown/debug.ts +0 -44
  377. package/src/extensions/markdown/decorate.ts +0 -601
  378. package/src/extensions/markdown/formatting.test.ts +0 -498
  379. package/src/extensions/markdown/formatting.ts +0 -1267
  380. package/src/extensions/markdown/highlight.ts +0 -183
  381. package/src/extensions/markdown/image.ts +0 -118
  382. package/src/extensions/markdown/index.ts +0 -13
  383. package/src/extensions/markdown/link.ts +0 -50
  384. package/src/extensions/markdown/parser.test.ts +0 -75
  385. package/src/extensions/markdown/styles.ts +0 -135
  386. package/src/extensions/markdown/table.ts +0 -150
  387. package/src/extensions/mention.ts +0 -41
  388. package/src/extensions/modes.ts +0 -41
  389. package/src/extensions/outliner/commands.ts +0 -270
  390. package/src/extensions/outliner/editor.test.ts +0 -33
  391. package/src/extensions/outliner/editor.ts +0 -184
  392. package/src/extensions/outliner/index.ts +0 -7
  393. package/src/extensions/outliner/outliner.test.ts +0 -100
  394. package/src/extensions/outliner/outliner.ts +0 -167
  395. package/src/extensions/outliner/selection.ts +0 -50
  396. package/src/extensions/outliner/tree.test.ts +0 -168
  397. package/src/extensions/outliner/tree.ts +0 -317
  398. package/src/extensions/preview/index.ts +0 -5
  399. package/src/extensions/preview/preview.ts +0 -190
  400. package/src/extensions/selection.ts +0 -100
  401. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  402. package/src/extensions/tags/extended-markdown.ts +0 -78
  403. package/src/extensions/tags/index.ts +0 -7
  404. package/src/extensions/tags/streamer.ts +0 -243
  405. package/src/extensions/tags/xml-tags.ts +0 -393
  406. package/src/extensions/tags/xml-util.ts +0 -94
  407. package/src/extensions/typewriter.ts +0 -68
  408. package/src/stories/CommandMenu.stories.tsx +0 -158
  409. package/src/styles/index.ts +0 -7
  410. package/src/styles/markdown.ts +0 -26
  411. package/src/styles/theme.ts +0 -268
  412. package/src/styles/tokens.ts +0 -17
  413. package/src/testing/PreviewPopover.tsx +0 -78
  414. package/src/testing/index.ts +0 -6
  415. package/src/testing/util.ts +0 -7
  416. package/src/types/index.ts +0 -5
  417. package/src/types/types.ts +0 -32
  418. package/src/util/cursor.ts +0 -56
  419. package/src/util/debug.ts +0 -64
  420. package/src/util/decorations.ts +0 -21
  421. package/src/util/dom.ts +0 -34
  422. package/src/util/facet.ts +0 -13
@@ -3,13 +3,11 @@
3
3
  //
4
4
 
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React, { useState } from 'react';
6
+ import React, { useEffect, useState } from 'react';
7
7
  import { createPortal } from 'react-dom';
8
8
 
9
9
  import { useThemeContext } from '@dxos/react-ui';
10
- import { withTheme } from '@dxos/react-ui/testing';
11
- import { trim } from '@dxos/util';
12
-
10
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
13
11
  import {
14
12
  type XmlWidgetRegistry,
15
13
  type XmlWidgetState,
@@ -18,14 +16,35 @@ import {
18
16
  decorateMarkdown,
19
17
  extendedMarkdown,
20
18
  xmlTags,
21
- } from '../extensions';
19
+ } from '@dxos/ui-editor';
20
+ import { safeParseInt, trim } from '@dxos/util';
21
+
22
22
  import { useTextEditor } from '../hooks';
23
23
 
24
24
  const registry = {
25
- // <test/>
26
- ['test' as const]: {
25
+ /**
26
+ * Custom tag: <test/>
27
+ */
28
+ test: {
27
29
  block: true,
28
- Component: () => <div className='p-2 border border-separator rounded'>Test</div>,
30
+ Component: ({ start = '0' }) => {
31
+ const [count, setCount] = useState<number>(safeParseInt(start, 0));
32
+ useEffect(() => {
33
+ const interval = setInterval(() => {
34
+ setCount((prev) => {
35
+ if (prev >= 200) {
36
+ clearInterval(interval);
37
+ return prev;
38
+ }
39
+
40
+ return prev + 1;
41
+ });
42
+ }, 100);
43
+ return () => clearInterval(interval);
44
+ }, []);
45
+
46
+ return <div className='p-2 border border-separator rounded-sm'>Test {count}</div>;
47
+ },
29
48
  },
30
49
  } satisfies XmlWidgetRegistry;
31
50
 
@@ -36,7 +55,7 @@ const DefaultStory = ({ text }: { text?: string }) => {
36
55
  initialValue: text,
37
56
  extensions: [
38
57
  createThemeExtensions({ themeMode }),
39
- createBasicExtensions({ lineWrapping: true, readOnly: true }),
58
+ createBasicExtensions({ lineWrapping: true }),
40
59
  decorateMarkdown(),
41
60
  extendedMarkdown({ registry }),
42
61
  xmlTags({ registry, setWidgets }),
@@ -45,8 +64,8 @@ const DefaultStory = ({ text }: { text?: string }) => {
45
64
 
46
65
  return (
47
66
  <>
48
- <div ref={parentRef} className='is-full p-4' />
49
- {widgets.map(({ Component, root, id, ...props }) => (
67
+ <div ref={parentRef} className='w-full p-4' />
68
+ {widgets.map(({ id, root, Component, props }) => (
50
69
  <div key={id}>{createPortal(<Component {...props} />, root)}</div>
51
70
  ))}
52
71
  </>
@@ -56,7 +75,11 @@ const DefaultStory = ({ text }: { text?: string }) => {
56
75
  const text = trim`
57
76
  # Tags
58
77
 
59
- <test id="123" />
78
+ React widget below.
79
+
80
+ <test id="t-1" />
81
+
82
+ <test id="t-2" start="100" />
60
83
 
61
84
  React widget above.
62
85
  `;
@@ -64,7 +87,7 @@ const text = trim`
64
87
  const meta = {
65
88
  title: 'ui/react-ui-editor/Tags',
66
89
  render: DefaultStory,
67
- decorators: [withTheme],
90
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
68
91
  parameters: {
69
92
  layout: 'fullscreen',
70
93
  },
@@ -8,22 +8,19 @@ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
8
  import React from 'react';
9
9
 
10
10
  import { log } from '@dxos/log';
11
- import { withTheme } from '@dxos/react-ui/testing';
12
-
13
- import { editorMonospace } from '../defaults';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
14
12
  import {
15
13
  InputModeExtensions,
16
- autocomplete,
17
14
  decorateMarkdown,
18
15
  folding,
19
16
  image,
17
+ join,
20
18
  listener,
21
19
  mention,
22
20
  selectionState,
23
21
  staticCompletion,
24
22
  typeahead,
25
- } from '../extensions';
26
- import { str } from '../testing';
23
+ } from '@dxos/ui-editor';
27
24
 
28
25
  import {
29
26
  EditorStory,
@@ -32,17 +29,15 @@ import {
32
29
  defaultExtensions,
33
30
  global,
34
31
  largeWithImages,
35
- links,
36
32
  longText,
37
33
  names,
38
- renderLinkButton,
39
34
  text,
40
35
  } from './components';
41
36
 
42
37
  const meta = {
43
38
  title: 'ui/react-ui-editor/TextEditor',
44
39
  component: EditorStory,
45
- decorators: [withTheme],
40
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
46
41
  parameters: {
47
42
  layout: 'fullscreen',
48
43
  controls: { disable: true },
@@ -100,7 +95,7 @@ export const NoExtensions: Story = {
100
95
  export const Vim: Story = {
101
96
  render: () => (
102
97
  <EditorStory
103
- text={str('# Vim Mode', '', 'The distant future. The year 2000.', '', content.paragraphs)}
98
+ text={join('# Vim Mode', '', 'The distant future. The year 2000.', '', content.paragraphs)}
104
99
  extensions={[defaultExtensions, InputModeExtensions.vim]}
105
100
  />
106
101
  ),
@@ -113,13 +108,13 @@ export const Vim: Story = {
113
108
  export const Listener: Story = {
114
109
  render: () => (
115
110
  <EditorStory
116
- text={str('# Listener', '', content.footer)}
111
+ text={join('# Listener', '', content.footer)}
117
112
  extensions={[
118
113
  listener({
119
- onFocus: (focusing) => {
114
+ onFocus: ({ focusing }) => {
120
115
  log.info('listener', { focusing });
121
116
  },
122
- onChange: (text) => {
117
+ onChange: ({ text }) => {
123
118
  log.info('listener', { text });
124
119
  },
125
120
  }),
@@ -143,7 +138,7 @@ export const Folding: Story = {
143
138
  export const Scrolling: Story = {
144
139
  render: () => (
145
140
  <EditorStory
146
- text={str('# Large Document', '', longText)}
141
+ text={join('# Large Document', '', longText)}
147
142
  extensions={selectionState({
148
143
  setState: (id, state) => global.set(id, state),
149
144
  getState: (id) => global.get(id),
@@ -154,7 +149,7 @@ export const Scrolling: Story = {
154
149
 
155
150
  export const ScrollingWithImages: Story = {
156
151
  render: () => (
157
- <EditorStory text={str('# Large Document', '', largeWithImages)} extensions={[decorateMarkdown(), image()]} />
152
+ <EditorStory text={join('# Large Document', '', largeWithImages)} extensions={[decorateMarkdown(), image()]} />
158
153
  ),
159
154
  };
160
155
 
@@ -162,7 +157,7 @@ export const ScrollTo: Story = {
162
157
  render: () => {
163
158
  // NOTE: Selection won't appear if text is reformatted.
164
159
  const word = 'Scroll to here...';
165
- const text = str('# Scroll To', longText, '', word, '', longText);
160
+ const text = join('# Scroll To', longText, '', word, '', longText);
166
161
  const idx = text.indexOf(word);
167
162
  return (
168
163
  <EditorStory
@@ -181,33 +176,7 @@ export const ScrollTo: Story = {
181
176
 
182
177
  export const Typescript: Story = {
183
178
  render: () => (
184
- <EditorStory
185
- text={content.typescript}
186
- lineNumbers
187
- extensions={[editorMonospace, javascript({ typescript: true })]}
188
- />
189
- ),
190
- };
191
-
192
- //
193
- // Autocomplete
194
- //
195
-
196
- export const Autocomplete: Story = {
197
- render: () => (
198
- <EditorStory
199
- text={str('# Autocomplete', '', 'Press Ctrl-Space...', content.footer)}
200
- extensions={[
201
- decorateMarkdown({ renderLinkButton }),
202
- autocomplete({
203
- onSuggest: (text) => {
204
- return links
205
- .filter(({ label }) => label.toLowerCase().includes(text.toLowerCase()))
206
- .map(({ label }) => label);
207
- },
208
- }),
209
- ]}
210
- />
179
+ <EditorStory text={content.typescript} lineNumbers monospace extensions={javascript({ typescript: true })} />
211
180
  ),
212
181
  };
213
182
 
@@ -215,14 +184,13 @@ export const Autocomplete: Story = {
215
184
  // Typeahead
216
185
  //
217
186
 
218
- const completions = ['type', 'AND', 'OR', 'NOT', 'dxos.org'];
187
+ const completions = ['hello world!', 'dxos.org'];
219
188
 
220
189
  export const Typeahead: Story = {
221
190
  render: () => (
222
191
  <EditorStory
223
- text={str('# Typeahead', '')}
192
+ text={join('# Typeahead', '')}
224
193
  extensions={[
225
- decorateMarkdown({ renderLinkButton }),
226
194
  typeahead({
227
195
  onComplete: staticCompletion(completions, { minLength: 2 }),
228
196
  }),
@@ -238,7 +206,7 @@ export const Typeahead: Story = {
238
206
  export const Mention: Story = {
239
207
  render: () => (
240
208
  <EditorStory
241
- text={str('# Mention', '', 'Type @...', content.footer)}
209
+ text={join('# Mention', '', 'Type @...', content.footer)}
242
210
  extensions={[
243
211
  mention({
244
212
  onSearch: (text) => names.filter((name) => name.toLowerCase().startsWith(text.toLowerCase())),
@@ -255,7 +223,7 @@ export const Mention: Story = {
255
223
  export const Search: Story = {
256
224
  render: () => (
257
225
  <EditorStory
258
- text={str('# Search', text)}
226
+ text={join('# Search', text)}
259
227
  extensions={defaultExtensions}
260
228
  onReady={(view) => openSearchPanel(view)}
261
229
  />
@@ -0,0 +1,61 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useMemo } from 'react';
7
+
8
+ import { useThemeContext } from '@dxos/react-ui';
9
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
10
+ import { createBasicExtensions, createThemeExtensions } from '@dxos/ui-editor';
11
+
12
+ import { Editor } from '../components';
13
+
14
+ const createText = (monospace?: boolean) =>
15
+ [`${monospace ? 'monospace' : 'body'}`, 'Hello world', '0123456789'].join('\n');
16
+
17
+ const DefaultStory = () => {
18
+ const { themeMode } = useThemeContext();
19
+ const [ext1, ext2] = useMemo(
20
+ () => [
21
+ //
22
+ [
23
+ createBasicExtensions({ placeholder: 'Enter text', search: true }),
24
+ createThemeExtensions({ themeMode, monospace: false }),
25
+ ],
26
+ [
27
+ createBasicExtensions({ placeholder: 'Enter text', search: true }),
28
+ createThemeExtensions({ themeMode, monospace: true }),
29
+ ],
30
+ ],
31
+ [],
32
+ );
33
+
34
+ return (
35
+ <div className='w-full grid grid-cols-2 gap-2'>
36
+ <Editor.Root>
37
+ <Editor.Content classNames='p-2' extensions={ext1} initialValue={createText(false)} />
38
+ </Editor.Root>
39
+ <Editor.Root>
40
+ <Editor.Content classNames='p-2' extensions={ext2} initialValue={createText(true)} />
41
+ </Editor.Root>
42
+ </div>
43
+ );
44
+ };
45
+
46
+ const meta: Meta<typeof DefaultStory> = {
47
+ title: 'ui/react-ui-editor/Theme',
48
+ component: DefaultStory,
49
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
50
+ parameters: {
51
+ layout: 'fullscreen',
52
+ },
53
+ };
54
+
55
+ export default meta;
56
+
57
+ type Story = StoryObj<typeof meta>;
58
+
59
+ export const Default: Story = {
60
+ args: {},
61
+ };
@@ -3,29 +3,29 @@
3
3
  //
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
- import React, { type ReactNode, forwardRef, useEffect, useImperativeHandle, useMemo, useState } from 'react';
6
+ import React, { type ReactNode, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
7
7
 
8
- import { Expando } from '@dxos/echo/internal';
9
- import { live } from '@dxos/echo/internal';
8
+ import { Obj } from '@dxos/echo';
9
+ import { TestSchema } from '@dxos/echo/testing';
10
10
  import { invariant } from '@dxos/invariant';
11
11
  import { PublicKey } from '@dxos/keys';
12
- import { createDocAccessor, createObject } from '@dxos/react-client/echo';
13
- import { useForwardedRef, useThemeContext } from '@dxos/react-ui';
12
+ import { log } from '@dxos/log';
13
+ import { useMergeRefs, useThemeContext } from '@dxos/react-ui';
14
14
  import { useAttentionAttributes } from '@dxos/react-ui-attention';
15
15
  import { JsonFilter } from '@dxos/react-ui-syntax-highlighter';
16
- import { mx } from '@dxos/react-ui-theme';
17
- import { isNonNullable } from '@dxos/util';
18
-
19
- import { editorGutter, editorSlots } from '../../defaults';
20
16
  import {
21
17
  type DebugNode,
22
18
  type ThemeExtensionsOptions,
23
19
  createBasicExtensions,
24
- createDataExtensions,
25
20
  createMarkdownExtensions,
26
21
  createThemeExtensions,
27
22
  debugTree,
28
- } from '../../extensions';
23
+ editorSlots,
24
+ } from '@dxos/ui-editor';
25
+ import { mx } from '@dxos/ui-theme';
26
+ import { isNonNullable } from '@dxos/util';
27
+
28
+ import { type EditorController, createEditorController } from '../../components';
29
29
  import { type UseTextEditorProps, useTextEditor } from '../../hooks';
30
30
 
31
31
  // Type definitions.
@@ -38,28 +38,32 @@ export type StoryProps = Pick<UseTextEditorProps, 'id' | 'scrollTo' | 'selection
38
38
  debug?: DebugMode;
39
39
  debugCustom?: (view: EditorView) => ReactNode;
40
40
  text?: string;
41
- object?: Expando;
41
+ object?: Obj.OfShape<TestSchema.Expando>;
42
42
  readOnly?: boolean;
43
43
  placeholder?: string;
44
44
  lineNumbers?: boolean;
45
+ monospace?: boolean;
45
46
  onReady?: (view: EditorView) => void;
46
47
  };
47
48
 
48
- export const EditorStory = forwardRef<EditorView | null, StoryProps>(
49
- ({ debug, debugCustom, text, extensions: _extensions, ...props }, forwardedRef) => {
49
+ export const EditorStory = forwardRef<EditorController, StoryProps>(
50
+ ({ debug, debugCustom, text, extensions: extensionsProp, ...props }, forwardedRef) => {
51
+ const controllerRef = useRef<EditorController>(null);
52
+ const mergedRef = useMergeRefs([controllerRef, forwardedRef]);
53
+
50
54
  const attentionAttrs = useAttentionAttributes('test-panel');
51
55
  const [tree, setTree] = useState<DebugNode>();
52
- const [object] = useState(createObject(live(Expando, { content: text ?? '' })));
53
- const viewRef = useForwardedRef(forwardedRef);
56
+ const [object] = useState(Obj.make(TestSchema.Expando, { content: text ?? '' }));
57
+
54
58
  const extensions = useMemo(
55
- () => (debug ? [_extensions, debugTree(setTree)].filter(isNonNullable) : _extensions),
56
- [debug, _extensions],
59
+ () => (debug ? [extensionsProp, debugTree(setTree)].filter(isNonNullable) : extensionsProp),
60
+ [debug, extensionsProp],
57
61
  );
58
62
 
59
- const view = viewRef.current;
63
+ const view = controllerRef.current?.view;
60
64
  return (
61
65
  <div className={mx('w-full h-full grid overflow-hidden', debug && 'grid-cols-2 lg:grid-cols-[1fr_600px]')}>
62
- <EditorComponent ref={viewRef} object={object} text={text} extensions={extensions} {...props} />
66
+ <EditorComponent ref={mergedRef} object={object} text={text} extensions={extensions} {...props} />
63
67
 
64
68
  {debug && (
65
69
  <div
@@ -83,7 +87,7 @@ export const EditorStory = forwardRef<EditorView | null, StoryProps>(
83
87
  /**
84
88
  * Default story component.
85
89
  */
86
- export const EditorComponent = forwardRef<EditorView | null, StoryProps>(
90
+ const EditorComponent = forwardRef<EditorController, StoryProps>(
87
91
  (
88
92
  {
89
93
  id = defaultId,
@@ -92,6 +96,7 @@ export const EditorComponent = forwardRef<EditorView | null, StoryProps>(
92
96
  readOnly,
93
97
  placeholder = 'New document.',
94
98
  lineNumbers,
99
+ monospace,
95
100
  scrollTo,
96
101
  selection,
97
102
  extensions,
@@ -110,18 +115,20 @@ export const EditorComponent = forwardRef<EditorView | null, StoryProps>(
110
115
  selection,
111
116
  initialValue: text,
112
117
  extensions: [
113
- createDataExtensions({ id, text: createDocAccessor(object, ['content']) }),
114
118
  createBasicExtensions({ readOnly, placeholder, lineNumbers, scrollPastEnd: true, search: true }),
119
+ createThemeExtensions({ monospace, themeMode, syntaxHighlighting: true, slots }),
115
120
  createMarkdownExtensions(),
116
- createThemeExtensions({ themeMode, syntaxHighlighting: true, slots }),
117
- editorGutter,
118
121
  extensions || [],
119
122
  ],
120
123
  }),
121
124
  [id, object, extensions, themeMode],
122
125
  );
123
126
 
124
- useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => view, [view]);
127
+ // External controller.
128
+ useImperativeHandle(forwardedRef, () => {
129
+ log.info('view updated', { id });
130
+ return createEditorController(view);
131
+ }, [id, view]);
125
132
 
126
133
  useEffect(() => {
127
134
  if (view) {
@@ -4,29 +4,29 @@
4
4
 
5
5
  import { type Completion } from '@codemirror/autocomplete';
6
6
  import { type Extension } from '@codemirror/state';
7
- import React, { type FC } from 'react';
8
7
 
9
8
  import { faker } from '@dxos/random';
10
- import { Icon } from '@dxos/react-ui';
11
- import { mx } from '@dxos/react-ui-theme';
12
-
9
+ import { Domino } from '@dxos/ui';
13
10
  import {
14
11
  type EditorSelectionState,
12
+ type RenderCallback,
15
13
  decorateMarkdown,
16
14
  folding,
17
15
  formattingKeymap,
18
16
  image,
19
17
  linkTooltip,
20
18
  table,
21
- } from '../../extensions';
22
- import { str } from '../../testing';
23
- import { createRenderer } from '../../util';
19
+ } from '@dxos/ui-editor';
20
+ import { safeUrl } from '@dxos/util';
21
+
22
+ import { str } from '../../util';
24
23
 
25
24
  export const num = () => faker.number.int({ min: 0, max: 9999 }).toLocaleString();
26
25
 
27
26
  export const img = '![dxos](https://dxos.network/dxos-logotype-blue.png)';
28
27
 
29
28
  export const code = str(
29
+ // prettier-ignore
30
30
  '// Code',
31
31
  'const Component = () => {',
32
32
  ' const x = 100;',
@@ -38,7 +38,7 @@ export const code = str(
38
38
  // Content blocks for stories
39
39
  export const content = {
40
40
  tasks: str(
41
- //
41
+ // prettier-ignore
42
42
  '### TaskList',
43
43
  '',
44
44
  `- [x] ${faker.lorem.sentences()}`,
@@ -50,7 +50,7 @@ export const content = {
50
50
  ),
51
51
 
52
52
  bullets: str(
53
- //
53
+ // prettier-ignore
54
54
  '### BulletList',
55
55
  '',
56
56
  `- ${faker.lorem.sentences()}`,
@@ -62,7 +62,7 @@ export const content = {
62
62
  ),
63
63
 
64
64
  numbered: str(
65
- //
65
+ // prettier-ignore
66
66
  '### OrderedList (part 1)',
67
67
  '',
68
68
  `1. ${faker.lorem.sentences()}`,
@@ -81,11 +81,34 @@ export const content = {
81
81
 
82
82
  typescript: code,
83
83
 
84
- codeblocks: str('### Code', '', '```bash', '$ ls -las', '```', '', '```tsx', code, '```', ''),
84
+ codeblocks: str(
85
+ // prettier-ignore
86
+ '### Code',
87
+ '',
88
+ '```bash',
89
+ '$ ls -las',
90
+ '```',
91
+ '',
92
+ '```tsx',
93
+ code,
94
+ '```',
95
+ '',
96
+ ),
85
97
 
86
- comment: str('<!--', 'A comment', '-->', '', 'No comment.', 'Partial comment. <!-- comment. -->'),
98
+ comment: str(
99
+ // prettier-ignore
100
+ '### Comment',
101
+ '',
102
+ '<!--',
103
+ 'A comment',
104
+ '-->',
105
+ '',
106
+ 'Partial comment. <!-- comment. -->',
107
+ '',
108
+ ),
87
109
 
88
110
  links: str(
111
+ // prettier-ignore
89
112
  '### Links',
90
113
  '',
91
114
  'This is a naked link https://dxos.org within a sentence.',
@@ -97,6 +120,7 @@ export const content = {
97
120
  ),
98
121
 
99
122
  table: str(
123
+ // prettier-ignore
100
124
  '### Tables',
101
125
  '',
102
126
  `| ${faker.lorem.word().padStart(12)} | ${faker.lorem.word().padStart(12)} | ${faker.lorem.word().padStart(12)} |`,
@@ -113,9 +137,16 @@ export const content = {
113
137
  ...[1, 2, 3, 4, 5, 6].map((level) => ['#'.repeat(level) + ` Heading ${level}`, faker.lorem.sentences(), '']).flat(),
114
138
  ),
115
139
 
116
- formatting: str('### Formatting', '', 'This this is **bold**, ~~strikethrough~~, _italic_, and `f(INLINE)`.', ''),
140
+ formatting: str(
141
+ // prettier-ignore
142
+ '### Formatting',
143
+ '',
144
+ 'This this is **bold**, ~~strikethrough~~, _italic_, and `f(INLINE)`.',
145
+ '',
146
+ ),
117
147
 
118
148
  blockquotes: str(
149
+ // prettier-ignore
119
150
  '### Blockquotes',
120
151
  '',
121
152
  '> This is a block quote.',
@@ -154,6 +185,7 @@ export const text = str(
154
185
  '---',
155
186
  '## Misc',
156
187
  content.codeblocks,
188
+ content.comment,
157
189
  content.table,
158
190
  content.image,
159
191
  content.footer,
@@ -172,30 +204,27 @@ export const links: Completion[] = [
172
204
  export const names = ['adam', 'alice', 'alison', 'bob', 'carol', 'charlie', 'sayuri', 'shoko'];
173
205
 
174
206
  const hover =
175
- 'rounded-sm text-baseText text-primary-600 hover:text-primary-500 dark:text-primary-300 hover:dark:text-primary-200';
176
-
177
- const LinkTooltip: FC<{ url: string }> = ({ url }) => {
178
- const web = new URL(url);
179
- return (
180
- <a href={url} target='_blank' rel='noreferrer' className={mx(hover, 'flex items-center gap-2')}>
181
- {web.origin}
182
- <Icon icon='ph--arrow-square-out--regular' size={4} />
183
- </a>
207
+ 'rounded-xs text-base-surface-text text-primary-600 hover:text-primary-500 dark:text-primary-300 hover:dark:text-primary-200';
208
+
209
+ export const renderLinkTooltip: RenderCallback<{ url: string }> = (el, { url }) => {
210
+ el.appendChild(
211
+ Domino.of('a')
212
+ .attributes({ href: url, target: '_blank', rel: 'noreferrer', 'aria-label': 'Open link' })
213
+ .classNames(hover, 'flex items-center gap-2')
214
+ .text(safeUrl(url)?.origin ?? url)
215
+ .children(Domino.svg('ph--arrow-square-out--regular')).root,
184
216
  );
185
217
  };
186
218
 
187
- export const renderLinkTooltip = createRenderer(LinkTooltip);
188
-
189
- const LinkButton: FC<{ url: string }> = ({ url }) => {
190
- return (
191
- <a href={url} target='_blank' rel='noreferrer' className={mx(hover)}>
192
- <Icon icon='ph--arrow-square-out--regular' size={4} classNames='inline-block mis-1 mb-[3px]' />
193
- </a>
219
+ export const renderLinkButton: RenderCallback<{ url: string }> = (el, { url }) => {
220
+ el.appendChild(
221
+ Domino.of('a')
222
+ .attributes({ href: url, target: '_blank', rel: 'noreferrer', 'aria-label': 'Open link' })
223
+ .classNames(hover, 'inline-block ms-1 align-[-0.125em]') // Center icon.
224
+ .children(Domino.svg('ph--arrow-square-out--regular')).root,
194
225
  );
195
226
  };
196
227
 
197
- export const renderLinkButton = createRenderer(LinkButton);
198
-
199
228
  // Shared extensions.
200
229
  export const defaultExtensions: Extension[] = [
201
230
  decorateMarkdown({ renderLinkButton, selectionChangeDelay: 100 }),
@@ -4,7 +4,7 @@
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
6
 
7
- export const translationKey = 'react-ui-editor';
7
+ export const translationKey = '@dxos/react-ui-editor';
8
8
 
9
9
  export const translations = [
10
10
  {
@@ -29,11 +29,11 @@ export const translations = [
29
29
  'heading level label_zero': 'Paragraph',
30
30
  'heading level label_one': 'Heading level {{count}}',
31
31
  'heading level label_other': 'Heading level {{count}}',
32
+ 'search label': 'Search',
32
33
  'view mode label': 'Editor view',
33
- 'preview mode label': 'Live preview',
34
+ 'preview mode label': 'Markdown',
34
35
  'readonly mode label': 'Read only',
35
- 'search label': 'Search',
36
- 'source mode label': 'Source',
36
+ 'source mode label': 'Plain text',
37
37
  },
38
38
  },
39
39
  },
package/src/util/index.ts CHANGED
@@ -1,10 +1,5 @@
1
1
  //
2
- // Copyright 2024 DXOS.org
2
+ // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './cursor';
6
- export * from './decorations';
7
- export * from './debug';
8
- export * from './dom';
9
- export * from './facet';
10
5
  export * from './react';