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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +1080 -8837
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/translations.mjs +39 -0
  7. package/dist/lib/browser/translations.mjs.map +7 -0
  8. package/dist/lib/node-esm/index.mjs +1080 -8836
  9. package/dist/lib/node-esm/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/lib/node-esm/translations.mjs +41 -0
  12. package/dist/lib/node-esm/translations.mjs.map +7 -0
  13. package/dist/types/src/components/Editor/Editor.d.ts +41 -24
  14. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  15. package/dist/types/src/components/Editor/Editor.stories.d.ts +7 -4
  16. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/{EditorContent/EditorContent.d.ts → Editor/EditorView.d.ts} +9 -7
  18. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  19. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  20. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +2 -4
  21. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorMenuProvider/index.d.ts +0 -1
  23. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -1
  24. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -1
  25. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -1
  26. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +2 -2
  27. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -1
  28. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -1
  29. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +1 -1
  30. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -1
  31. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +8 -6
  32. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  33. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  34. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  35. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  36. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  37. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  38. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  40. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -2
  42. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/lists.d.ts +6 -0
  44. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -0
  45. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  46. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  48. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  49. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  50. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  51. package/dist/types/src/components/index.d.ts +0 -2
  52. package/dist/types/src/components/index.d.ts.map +1 -1
  53. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  54. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  55. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  56. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  57. package/dist/types/src/extensions/index.d.ts +1 -31
  58. package/dist/types/src/extensions/index.d.ts.map +1 -1
  59. package/dist/types/src/hooks/index.d.ts +1 -0
  60. package/dist/types/src/hooks/index.d.ts.map +1 -1
  61. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  62. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  63. package/dist/types/src/hooks/useTextEditor.d.ts +1 -1
  64. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  65. package/dist/types/src/index.d.ts +0 -9
  66. package/dist/types/src/index.d.ts.map +1 -1
  67. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  68. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  69. package/dist/types/src/stories/Comments.stories.d.ts +3 -2
  70. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  71. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  72. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  73. package/dist/types/src/stories/Experimental.stories.d.ts +4 -3
  74. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  75. package/dist/types/src/stories/Markdown.stories.d.ts +3 -2
  76. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  78. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Popover.stories.d.ts +2 -2
  80. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Preview.stories.d.ts +3 -2
  82. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  84. package/dist/types/src/stories/TextEditor.stories.d.ts +3 -2
  85. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  86. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  87. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  88. package/dist/types/src/stories/components/EditorStory.d.ts +9 -20
  89. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  90. package/dist/types/src/stories/components/util.d.ts +4 -3
  91. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  92. package/dist/types/src/translations.d.ts +26 -26
  93. package/dist/types/src/translations.d.ts.map +1 -1
  94. package/dist/types/src/util/index.d.ts +0 -5
  95. package/dist/types/src/util/index.d.ts.map +1 -1
  96. package/dist/types/src/util/react.d.ts +6 -5
  97. package/dist/types/src/util/react.d.ts.map +1 -1
  98. package/dist/types/tsconfig.tsbuildinfo +1 -1
  99. package/package.json +79 -71
  100. package/src/components/Editor/Editor.stories.tsx +26 -26
  101. package/src/components/Editor/Editor.tsx +67 -55
  102. package/src/components/Editor/EditorView.tsx +102 -0
  103. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +23 -30
  104. package/src/components/EditorMenuProvider/index.ts +0 -1
  105. package/src/components/EditorMenuProvider/menu-presets.ts +3 -1
  106. package/src/components/EditorMenuProvider/menu.ts +1 -2
  107. package/src/components/EditorMenuProvider/popover.ts +3 -3
  108. package/src/components/EditorMenuProvider/useEditorMenu.ts +9 -4
  109. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +6 -9
  110. package/src/components/EditorToolbar/EditorToolbar.tsx +37 -68
  111. package/src/components/EditorToolbar/blocks.ts +55 -48
  112. package/src/components/EditorToolbar/formatting.ts +44 -46
  113. package/src/components/EditorToolbar/headings.ts +45 -51
  114. package/src/components/EditorToolbar/image.ts +16 -14
  115. package/src/components/EditorToolbar/index.ts +2 -3
  116. package/src/components/EditorToolbar/lists.ts +58 -0
  117. package/src/components/EditorToolbar/search.ts +16 -14
  118. package/src/components/EditorToolbar/types.ts +8 -0
  119. package/src/components/EditorToolbar/view-mode.ts +37 -43
  120. package/src/components/index.ts +0 -5
  121. package/src/extensions/Assistant.stories.tsx +112 -0
  122. package/src/extensions/assistant-extension.tsx +223 -0
  123. package/src/extensions/index.ts +2 -32
  124. package/src/hooks/index.ts +1 -0
  125. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  126. package/src/hooks/useTextEditor.ts +9 -3
  127. package/src/index.ts +0 -13
  128. package/src/stories/Automerge.stories.tsx +177 -0
  129. package/src/stories/Comments.stories.tsx +48 -43
  130. package/src/stories/EditorToolbar.stories.tsx +40 -53
  131. package/src/stories/Experimental.stories.tsx +14 -16
  132. package/src/stories/Markdown.stories.tsx +16 -16
  133. package/src/stories/Outliner.stories.tsx +8 -10
  134. package/src/stories/Popover.stories.tsx +27 -32
  135. package/src/stories/Preview.stories.tsx +67 -53
  136. package/src/stories/Tags.stories.tsx +24 -15
  137. package/src/stories/TextEditor.stories.tsx +13 -19
  138. package/src/stories/Theme.stories.tsx +61 -0
  139. package/src/stories/components/EditorStory.tsx +33 -30
  140. package/src/stories/components/util.tsx +51 -52
  141. package/src/translations.ts +30 -25
  142. package/src/util/index.ts +1 -6
  143. package/src/util/react.tsx +8 -13
  144. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  145. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  146. package/dist/lib/browser/types/index.mjs +0 -13
  147. package/dist/lib/browser/types/index.mjs.map +0 -7
  148. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  149. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  150. package/dist/lib/node-esm/types/index.mjs +0 -14
  151. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  152. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +0 -1
  153. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +0 -26
  154. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +0 -1
  155. package/dist/types/src/components/EditorContent/controller.d.ts.map +0 -1
  156. package/dist/types/src/components/EditorContent/index.d.ts +0 -3
  157. package/dist/types/src/components/EditorContent/index.d.ts.map +0 -1
  158. package/dist/types/src/components/EditorMenuProvider/util.d.ts +0 -8
  159. package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +0 -1
  160. package/dist/types/src/components/EditorToolbar/actions.d.ts +0 -39
  161. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +0 -1
  162. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +0 -11
  163. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +0 -1
  164. package/dist/types/src/defaults.d.ts +0 -14
  165. package/dist/types/src/defaults.d.ts.map +0 -1
  166. package/dist/types/src/extensions/annotations.d.ts +0 -9
  167. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  168. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -17
  169. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  170. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  171. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  172. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  173. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  174. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  175. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  176. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  177. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  178. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  179. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  180. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  181. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  182. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  183. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  184. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  185. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  186. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  187. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  188. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  189. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  190. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  191. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  192. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  193. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  194. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  195. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  196. package/dist/types/src/extensions/autoscroll.d.ts +0 -20
  197. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  198. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  199. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  200. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  201. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  202. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  203. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  204. package/dist/types/src/extensions/blast.d.ts +0 -25
  205. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  206. package/dist/types/src/extensions/blocks.d.ts +0 -2
  207. package/dist/types/src/extensions/blocks.d.ts.map +0 -1
  208. package/dist/types/src/extensions/bookmarks.d.ts +0 -12
  209. package/dist/types/src/extensions/bookmarks.d.ts.map +0 -1
  210. package/dist/types/src/extensions/comments.d.ts +0 -95
  211. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  212. package/dist/types/src/extensions/debug.d.ts +0 -3
  213. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  214. package/dist/types/src/extensions/dnd.d.ts +0 -9
  215. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  216. package/dist/types/src/extensions/factories.d.ts +0 -83
  217. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  218. package/dist/types/src/extensions/focus.d.ts +0 -7
  219. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  220. package/dist/types/src/extensions/folding.d.ts +0 -7
  221. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  222. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  223. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  224. package/dist/types/src/extensions/json.d.ts +0 -7
  225. package/dist/types/src/extensions/json.d.ts.map +0 -1
  226. package/dist/types/src/extensions/listener.d.ts +0 -13
  227. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  228. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  229. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  230. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  231. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  232. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  233. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  234. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  235. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  236. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  237. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  238. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  239. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  240. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -61
  241. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  243. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  245. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  247. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  249. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  251. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  253. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  255. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  256. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  257. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  258. package/dist/types/src/extensions/mention.d.ts +0 -7
  259. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  260. package/dist/types/src/extensions/modal.d.ts +0 -7
  261. package/dist/types/src/extensions/modal.d.ts.map +0 -1
  262. package/dist/types/src/extensions/modes.d.ts +0 -10
  263. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  264. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  265. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  266. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  267. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  268. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  269. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  270. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  271. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  272. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  273. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  274. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  275. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  277. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  279. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  280. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  281. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  282. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  283. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  284. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  285. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  286. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  287. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  288. package/dist/types/src/extensions/replacer.d.ts +0 -21
  289. package/dist/types/src/extensions/replacer.d.ts.map +0 -1
  290. package/dist/types/src/extensions/replacer.test.d.ts +0 -2
  291. package/dist/types/src/extensions/replacer.test.d.ts.map +0 -1
  292. package/dist/types/src/extensions/scrolling.d.ts +0 -78
  293. package/dist/types/src/extensions/scrolling.d.ts.map +0 -1
  294. package/dist/types/src/extensions/selection.d.ts +0 -24
  295. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  296. package/dist/types/src/extensions/state.d.ts +0 -2
  297. package/dist/types/src/extensions/state.d.ts.map +0 -1
  298. package/dist/types/src/extensions/submit.d.ts +0 -10
  299. package/dist/types/src/extensions/submit.d.ts.map +0 -1
  300. package/dist/types/src/extensions/tab.d.ts +0 -4
  301. package/dist/types/src/extensions/tab.d.ts.map +0 -1
  302. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  303. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  304. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  305. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  306. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  307. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  308. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  309. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  310. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -97
  311. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  312. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  313. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  314. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  315. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  316. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  317. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  318. package/dist/types/src/styles/index.d.ts +0 -4
  319. package/dist/types/src/styles/index.d.ts.map +0 -1
  320. package/dist/types/src/styles/markdown.d.ts +0 -8
  321. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  322. package/dist/types/src/styles/theme.d.ts +0 -38
  323. package/dist/types/src/styles/theme.d.ts.map +0 -1
  324. package/dist/types/src/styles/tokens.d.ts +0 -3
  325. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  326. package/dist/types/src/types/index.d.ts +0 -2
  327. package/dist/types/src/types/index.d.ts.map +0 -1
  328. package/dist/types/src/types/types.d.ts +0 -21
  329. package/dist/types/src/types/types.d.ts.map +0 -1
  330. package/dist/types/src/util/cursor.d.ts +0 -31
  331. package/dist/types/src/util/cursor.d.ts.map +0 -1
  332. package/dist/types/src/util/debug.d.ts +0 -21
  333. package/dist/types/src/util/debug.d.ts.map +0 -1
  334. package/dist/types/src/util/decorations.d.ts +0 -4
  335. package/dist/types/src/util/decorations.d.ts.map +0 -1
  336. package/dist/types/src/util/dom.d.ts +0 -10
  337. package/dist/types/src/util/dom.d.ts.map +0 -1
  338. package/dist/types/src/util/facet.d.ts +0 -3
  339. package/dist/types/src/util/facet.d.ts.map +0 -1
  340. package/src/components/EditorContent/EditorContent.stories.tsx +0 -70
  341. package/src/components/EditorContent/EditorContent.tsx +0 -70
  342. package/src/components/EditorContent/index.ts +0 -6
  343. package/src/components/EditorMenuProvider/util.ts +0 -31
  344. package/src/components/EditorToolbar/actions.ts +0 -86
  345. package/src/components/EditorToolbar/useEditorToolbar.ts +0 -20
  346. package/src/defaults.ts +0 -52
  347. package/src/extensions/annotations.ts +0 -55
  348. package/src/extensions/autocomplete/autocomplete.ts +0 -151
  349. package/src/extensions/autocomplete/index.ts +0 -8
  350. package/src/extensions/autocomplete/match.ts +0 -46
  351. package/src/extensions/autocomplete/placeholder.ts +0 -117
  352. package/src/extensions/autocomplete/typeahead.ts +0 -87
  353. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  354. package/src/extensions/automerge/automerge.test.tsx +0 -78
  355. package/src/extensions/automerge/automerge.ts +0 -105
  356. package/src/extensions/automerge/cursor.ts +0 -28
  357. package/src/extensions/automerge/defs.ts +0 -31
  358. package/src/extensions/automerge/index.ts +0 -5
  359. package/src/extensions/automerge/sync.ts +0 -79
  360. package/src/extensions/automerge/update-automerge.ts +0 -50
  361. package/src/extensions/automerge/update-codemirror.ts +0 -115
  362. package/src/extensions/autoscroll.ts +0 -163
  363. package/src/extensions/awareness/awareness-provider.ts +0 -127
  364. package/src/extensions/awareness/awareness.ts +0 -315
  365. package/src/extensions/awareness/index.ts +0 -6
  366. package/src/extensions/blast.ts +0 -363
  367. package/src/extensions/blocks.ts +0 -131
  368. package/src/extensions/bookmarks.ts +0 -75
  369. package/src/extensions/comments.ts +0 -598
  370. package/src/extensions/debug.ts +0 -15
  371. package/src/extensions/dnd.ts +0 -37
  372. package/src/extensions/factories.ts +0 -278
  373. package/src/extensions/focus.ts +0 -36
  374. package/src/extensions/folding.tsx +0 -43
  375. package/src/extensions/hashtag.tsx +0 -68
  376. package/src/extensions/json.ts +0 -57
  377. package/src/extensions/listener.ts +0 -32
  378. package/src/extensions/markdown/action.ts +0 -117
  379. package/src/extensions/markdown/bundle.ts +0 -105
  380. package/src/extensions/markdown/changes.test.ts +0 -26
  381. package/src/extensions/markdown/changes.ts +0 -149
  382. package/src/extensions/markdown/debug.ts +0 -44
  383. package/src/extensions/markdown/decorate.ts +0 -601
  384. package/src/extensions/markdown/formatting.test.ts +0 -498
  385. package/src/extensions/markdown/formatting.ts +0 -1265
  386. package/src/extensions/markdown/highlight.ts +0 -183
  387. package/src/extensions/markdown/image.ts +0 -118
  388. package/src/extensions/markdown/index.ts +0 -13
  389. package/src/extensions/markdown/link.ts +0 -50
  390. package/src/extensions/markdown/parser.test.ts +0 -75
  391. package/src/extensions/markdown/styles.ts +0 -135
  392. package/src/extensions/markdown/table.ts +0 -150
  393. package/src/extensions/mention.ts +0 -41
  394. package/src/extensions/modal.ts +0 -24
  395. package/src/extensions/modes.ts +0 -41
  396. package/src/extensions/outliner/commands.ts +0 -270
  397. package/src/extensions/outliner/editor.test.ts +0 -33
  398. package/src/extensions/outliner/editor.ts +0 -184
  399. package/src/extensions/outliner/index.ts +0 -7
  400. package/src/extensions/outliner/menu.ts +0 -128
  401. package/src/extensions/outliner/outliner.test.ts +0 -100
  402. package/src/extensions/outliner/outliner.ts +0 -167
  403. package/src/extensions/outliner/selection.ts +0 -50
  404. package/src/extensions/outliner/tree.test.ts +0 -168
  405. package/src/extensions/outliner/tree.ts +0 -317
  406. package/src/extensions/preview/index.ts +0 -5
  407. package/src/extensions/preview/preview.ts +0 -193
  408. package/src/extensions/replacer.test.ts +0 -75
  409. package/src/extensions/replacer.ts +0 -93
  410. package/src/extensions/scrolling.ts +0 -189
  411. package/src/extensions/selection.ts +0 -100
  412. package/src/extensions/state.ts +0 -7
  413. package/src/extensions/submit.ts +0 -62
  414. package/src/extensions/tab.ts +0 -29
  415. package/src/extensions/tags/extended-markdown.test.ts +0 -262
  416. package/src/extensions/tags/extended-markdown.ts +0 -78
  417. package/src/extensions/tags/index.ts +0 -7
  418. package/src/extensions/tags/streamer.ts +0 -243
  419. package/src/extensions/tags/xml-tags.ts +0 -500
  420. package/src/extensions/tags/xml-util.ts +0 -94
  421. package/src/extensions/typewriter.ts +0 -68
  422. package/src/stories/CommandDialog.stories.tsx +0 -83
  423. package/src/styles/index.ts +0 -7
  424. package/src/styles/markdown.ts +0 -26
  425. package/src/styles/theme.ts +0 -269
  426. package/src/styles/tokens.ts +0 -17
  427. package/src/types/index.ts +0 -5
  428. package/src/types/types.ts +0 -32
  429. package/src/util/cursor.ts +0 -56
  430. package/src/util/debug.ts +0 -69
  431. package/src/util/decorations.ts +0 -21
  432. package/src/util/dom.ts +0 -34
  433. package/src/util/facet.ts +0 -13
  434. /package/dist/types/src/components/{EditorContent → Editor}/controller.d.ts +0 -0
  435. /package/src/components/{EditorContent → Editor}/controller.ts +0 -0
@@ -9,14 +9,10 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
9
9
  import { createPortal } from 'react-dom';
10
10
 
11
11
  import { invariant } from '@dxos/invariant';
12
- import { faker } from '@dxos/random';
13
- import { Popover } from '@dxos/react-ui';
14
- import { withTheme } from '@dxos/react-ui/testing';
15
- import { Card } from '@dxos/react-ui-stack';
16
- import { hoverableControlItem, hoverableControlItemTransition, hoverableControls } from '@dxos/react-ui-theme';
17
- import { trim } from '@dxos/util';
18
-
19
- import { type EditorController, EditorPreviewProvider, useEditorPreview } from '../components';
12
+ import { random } from '@dxos/random';
13
+ import { Card, Popover, Toolbar } from '@dxos/react-ui';
14
+ import { Menu, createMenuAction } from '@dxos/react-ui-menu';
15
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
20
16
  import {
21
17
  type PreviewBlock,
22
18
  type PreviewLinkRef,
@@ -24,14 +20,17 @@ import {
24
20
  getLinkRef,
25
21
  image,
26
22
  preview,
27
- } from '../extensions';
23
+ } from '@dxos/ui-editor';
24
+ import { hoverableControls } from '@dxos/ui-theme';
25
+ import { trim } from '@dxos/util';
28
26
 
27
+ import { type EditorController, EditorPreviewProvider, useEditorPreview } from '../components';
29
28
  import { EditorStory } from './components';
30
29
 
31
- const handlePreviewLookup = async ({ label, ref }: PreviewLinkRef): Promise<PreviewLinkTarget> => {
30
+ const handlePreviewLookup = async ({ dxn, label }: PreviewLinkRef): Promise<PreviewLinkTarget> => {
32
31
  // Random text.
33
- faker.seed(ref.split('').reduce((acc: number, char: string) => acc + char.charCodeAt(0), 1));
34
- const text = Array.from({ length: 2 }, () => faker.lorem.paragraphs()).join('\n\n');
32
+ random.seed(dxn.split('').reduce((acc: number, char: string) => acc + char.charCodeAt(0), 1));
33
+ const text = Array.from({ length: 2 }, () => random.lorem.paragraphs()).join('\n\n');
35
34
  return {
36
35
  label,
37
36
  text,
@@ -51,14 +50,26 @@ const useRefTarget = (link: PreviewLinkRef): PreviewLinkTarget | undefined => {
51
50
 
52
51
  const PreviewCard = () => {
53
52
  const { target } = useEditorPreview('PreviewCard');
53
+ if (!target) {
54
+ return null;
55
+ }
56
+
54
57
  return (
55
58
  <Popover.Portal>
56
59
  <Popover.Content onOpenAutoFocus={(event) => event.preventDefault()}>
57
- <Popover.Viewport>
58
- <Card.SurfaceRoot role='card--popover'>
59
- <Card.Heading>{target?.label}</Card.Heading>
60
- {target && <Card.Text classNames='line-clamp-3'>{target.text}</Card.Text>}
61
- </Card.SurfaceRoot>
60
+ <Popover.Viewport classNames='dx-card-popover-width'>
61
+ <Card.Root border={false}>
62
+ <Card.Toolbar>
63
+ <Card.Icon icon='ph--file-text--regular' />
64
+ <Card.Title>{target.label}</Card.Title>
65
+ <Popover.Close asChild>
66
+ <Card.CloseIconButton />
67
+ </Popover.Close>
68
+ </Card.Toolbar>
69
+ <Card.Row>
70
+ <Card.Text variant='description'>{target.text}</Card.Text>
71
+ </Card.Row>
72
+ </Card.Root>
62
73
  </Popover.Viewport>
63
74
  <Popover.Arrow />
64
75
  </Popover.Content>
@@ -90,7 +101,7 @@ const PreviewBlockComponent = ({ link, el, view }: { link: PreviewLinkRef; el: H
90
101
  }
91
102
 
92
103
  const link = getLinkRef(view.state, node);
93
- if (link?.ref !== action.link.ref) {
104
+ if (link?.dxn !== action.link.dxn) {
94
105
  return;
95
106
  }
96
107
 
@@ -132,41 +143,45 @@ const PreviewBlockComponent = ({ link, el, view }: { link: PreviewLinkRef; el: H
132
143
  }
133
144
  }, [handleAction, link, target]);
134
145
 
146
+ const menuItems = useMemo(
147
+ () => [
148
+ createMenuAction('delete', handleDelete, {
149
+ label: link.suggest ? 'Discard' : 'Delete',
150
+ icon: 'ph--x--regular',
151
+ }),
152
+ ...(target
153
+ ? [
154
+ createMenuAction('apply', handleInsert, {
155
+ label: 'Apply',
156
+ icon: 'ph--check--regular',
157
+ }),
158
+ ]
159
+ : []),
160
+ ],
161
+ [handleDelete, handleInsert, link.suggest, target],
162
+ );
163
+
135
164
  return createPortal(
136
- <Card.StaticRoot classNames={hoverableControls}>
137
- <div className='flex items-start'>
165
+ <Menu.Root>
166
+ <Card.Root classNames={hoverableControls}>
138
167
  {!view?.state.readOnly && (
139
- <Card.Toolbar classNames='is-min p-[--dx-cardSpacingInline]'>
140
- {(link.suggest && (
141
- <>
142
- <Card.ToolbarIconButton label='Discard' icon='ph--x--regular' onClick={handleDelete} />
143
- {target && (
144
- <Card.ToolbarIconButton
145
- classNames='bg-successSurface text-successSurfaceText'
146
- label='Apply'
147
- icon='ph--check--regular'
148
- onClick={handleInsert}
149
- />
150
- )}
151
- </>
152
- )) || (
153
- <Card.ToolbarIconButton
154
- iconOnly
155
- label='Delete'
156
- icon='ph--x--regular'
157
- classNames={[hoverableControlItem, hoverableControlItemTransition]}
158
- onClick={handleDelete}
159
- />
160
- )}
168
+ <Card.Toolbar>
169
+ <Card.Icon icon='ph--bookmark--regular' />
170
+ <Card.Title>{link.label}</Card.Title>
171
+ {/* TODO(wittjosiah): Reconcile with Card.Menu. */}
172
+ <Menu.Trigger asChild disabled={!menuItems?.length}>
173
+ <Toolbar.IconButton iconOnly variant='ghost' icon='ph--dots-three-vertical--regular' label='Menu' />
174
+ </Menu.Trigger>
175
+ <Menu.Content items={menuItems} />
161
176
  </Card.Toolbar>
162
177
  )}
163
- <Card.Heading classNames='grow order-first mie-0'>
164
- {/* <span className='text-xs text-subdued mie-2'>Prompt</span> */}
165
- {link.label}
166
- </Card.Heading>
167
- </div>
168
- {target && <Card.Text classNames='line-clamp-3 mbs-0'>{target.text}</Card.Text>}
169
- </Card.StaticRoot>,
178
+ {target && (
179
+ <Card.Row>
180
+ <Card.Text className='text-description'>{target.text}</Card.Text>
181
+ </Card.Row>
182
+ )}
183
+ </Card.Root>
184
+ </Menu.Root>,
170
185
  el,
171
186
  );
172
187
  };
@@ -174,7 +189,7 @@ const PreviewBlockComponent = ({ link, el, view }: { link: PreviewLinkRef; el: H
174
189
  const meta = {
175
190
  title: 'ui/react-ui-editor/Preview',
176
191
  component: EditorStory,
177
- decorators: [withTheme],
192
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
178
193
  parameters: {
179
194
  layout: 'fullscreen',
180
195
  },
@@ -211,21 +226,20 @@ export const Default: Story = {
211
226
  setPreviewBlocks((prev) => [...prev, block]);
212
227
  },
213
228
  removeBlockContainer: (block) => {
214
- setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== block.link.ref));
229
+ setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.dxn !== block.link.dxn));
215
230
  },
216
231
  }),
217
232
  ];
218
233
  }, []);
219
234
 
220
235
  // TODO(burdon): Migrate to Editor.Root.
221
- // TODO(burdon): Ranges must be sorted error (decorate.enter).
222
236
  return (
223
237
  <EditorPreviewProvider onLookup={handlePreviewLookup}>
224
238
  <EditorStory ref={setController} text={text} extensions={extensions} />
225
239
  <PreviewCard />
226
240
  {controller?.view &&
227
241
  previewBlocks.map(({ link, el }) => (
228
- <PreviewBlockComponent key={link.ref} link={link} el={el} view={controller.view!} />
242
+ <PreviewBlockComponent key={link.dxn} link={link} el={el} view={controller.view!} />
229
243
  ))}
230
244
  </EditorPreviewProvider>
231
245
  );
@@ -7,9 +7,7 @@ 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,25 +16,34 @@ 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
25
  /**
26
26
  * Custom tag: <test/>
27
27
  */
28
- ['test' as const]: {
28
+ test: {
29
29
  block: true,
30
- Component: () => {
31
- const [count, setCount] = useState(0);
30
+ Component: ({ start = '0' }) => {
31
+ const [count, setCount] = useState<number>(safeParseInt(start, 0));
32
32
  useEffect(() => {
33
33
  const interval = setInterval(() => {
34
- setCount((prev) => prev + 1);
35
- }, 1_000);
34
+ setCount((prev) => {
35
+ if (prev >= 200) {
36
+ clearInterval(interval);
37
+ return prev;
38
+ }
39
+
40
+ return prev + 1;
41
+ });
42
+ }, 100);
36
43
  return () => clearInterval(interval);
37
44
  }, []);
38
45
 
39
- return <div className='p-2 border border-separator rounded'>Test {count}</div>;
46
+ return <div className='p-2 border border-separator rounded-sm'>Test {count}</div>;
40
47
  },
41
48
  },
42
49
  } satisfies XmlWidgetRegistry;
@@ -57,8 +64,8 @@ const DefaultStory = ({ text }: { text?: string }) => {
57
64
 
58
65
  return (
59
66
  <>
60
- <div ref={parentRef} className='is-full p-4' />
61
- {widgets.map(({ Component, root, id, ...props }) => (
67
+ <div ref={parentRef} className='w-full p-4' />
68
+ {widgets.map(({ id, root, Component, props }) => (
62
69
  <div key={id}>{createPortal(<Component {...props} />, root)}</div>
63
70
  ))}
64
71
  </>
@@ -70,15 +77,17 @@ const text = trim`
70
77
 
71
78
  React widget below.
72
79
 
73
- <test id="123" />
80
+ <test id="t-1" />
81
+
82
+ <test id="t-2" start="100" />
74
83
 
75
84
  React widget above.
76
85
  `;
77
86
 
78
87
  const meta = {
79
- title: 'ui/react-ui-editor/XmlTags',
88
+ title: 'ui/react-ui-editor/Tags',
80
89
  render: DefaultStory,
81
- decorators: [withTheme],
90
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
82
91
  parameters: {
83
92
  layout: 'fullscreen',
84
93
  },
@@ -8,21 +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
14
  decorateMarkdown,
17
15
  folding,
18
16
  image,
17
+ join,
19
18
  listener,
20
19
  mention,
21
20
  selectionState,
22
21
  staticCompletion,
23
22
  typeahead,
24
- } from '../extensions';
25
- import { str } from '../util';
23
+ } from '@dxos/ui-editor';
26
24
 
27
25
  import {
28
26
  EditorStory,
@@ -39,7 +37,7 @@ import {
39
37
  const meta = {
40
38
  title: 'ui/react-ui-editor/TextEditor',
41
39
  component: EditorStory,
42
- decorators: [withTheme],
40
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
43
41
  parameters: {
44
42
  layout: 'fullscreen',
45
43
  controls: { disable: true },
@@ -97,7 +95,7 @@ export const NoExtensions: Story = {
97
95
  export const Vim: Story = {
98
96
  render: () => (
99
97
  <EditorStory
100
- 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)}
101
99
  extensions={[defaultExtensions, InputModeExtensions.vim]}
102
100
  />
103
101
  ),
@@ -110,7 +108,7 @@ export const Vim: Story = {
110
108
  export const Listener: Story = {
111
109
  render: () => (
112
110
  <EditorStory
113
- text={str('# Listener', '', content.footer)}
111
+ text={join('# Listener', '', content.footer)}
114
112
  extensions={[
115
113
  listener({
116
114
  onFocus: ({ focusing }) => {
@@ -140,7 +138,7 @@ export const Folding: Story = {
140
138
  export const Scrolling: Story = {
141
139
  render: () => (
142
140
  <EditorStory
143
- text={str('# Large Document', '', longText)}
141
+ text={join('# Large Document', '', longText)}
144
142
  extensions={selectionState({
145
143
  setState: (id, state) => global.set(id, state),
146
144
  getState: (id) => global.get(id),
@@ -151,7 +149,7 @@ export const Scrolling: Story = {
151
149
 
152
150
  export const ScrollingWithImages: Story = {
153
151
  render: () => (
154
- <EditorStory text={str('# Large Document', '', largeWithImages)} extensions={[decorateMarkdown(), image()]} />
152
+ <EditorStory text={join('# Large Document', '', largeWithImages)} extensions={[decorateMarkdown(), image()]} />
155
153
  ),
156
154
  };
157
155
 
@@ -159,7 +157,7 @@ export const ScrollTo: Story = {
159
157
  render: () => {
160
158
  // NOTE: Selection won't appear if text is reformatted.
161
159
  const word = 'Scroll to here...';
162
- const text = str('# Scroll To', longText, '', word, '', longText);
160
+ const text = join('# Scroll To', longText, '', word, '', longText);
163
161
  const idx = text.indexOf(word);
164
162
  return (
165
163
  <EditorStory
@@ -178,11 +176,7 @@ export const ScrollTo: Story = {
178
176
 
179
177
  export const Typescript: Story = {
180
178
  render: () => (
181
- <EditorStory
182
- text={content.typescript}
183
- lineNumbers
184
- extensions={[editorMonospace, javascript({ typescript: true })]}
185
- />
179
+ <EditorStory text={content.typescript} lineNumbers monospace extensions={javascript({ typescript: true })} />
186
180
  ),
187
181
  };
188
182
 
@@ -195,7 +189,7 @@ const completions = ['hello world!', 'dxos.org'];
195
189
  export const Typeahead: Story = {
196
190
  render: () => (
197
191
  <EditorStory
198
- text={str('# Typeahead', '')}
192
+ text={join('# Typeahead', '')}
199
193
  extensions={[
200
194
  typeahead({
201
195
  onComplete: staticCompletion(completions, { minLength: 2 }),
@@ -212,7 +206,7 @@ export const Typeahead: Story = {
212
206
  export const Mention: Story = {
213
207
  render: () => (
214
208
  <EditorStory
215
- text={str('# Mention', '', 'Type @...', content.footer)}
209
+ text={join('# Mention', '', 'Type @...', content.footer)}
216
210
  extensions={[
217
211
  mention({
218
212
  onSearch: (text) => names.filter((name) => name.toLowerCase().startsWith(text.toLowerCase())),
@@ -229,7 +223,7 @@ export const Mention: Story = {
229
223
  export const Search: Story = {
230
224
  render: () => (
231
225
  <EditorStory
232
- text={str('# Search', text)}
226
+ text={join('# Search', text)}
233
227
  extensions={defaultExtensions}
234
228
  onReady={(view) => openSearchPanel(view)}
235
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.View classNames='p-2' extensions={ext1} initialValue={createText(false)} />
38
+ </Editor.Root>
39
+ <Editor.Root>
40
+ <Editor.View 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
+ };
@@ -5,30 +5,27 @@
5
5
  import { type EditorView } from '@codemirror/view';
6
6
  import React, { type ReactNode, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
7
7
 
8
- import { createDocAccessor, createObject } from '@dxos/client/echo';
9
- import { Expando } from '@dxos/echo/internal';
10
- import { live } from '@dxos/echo/internal';
8
+ import { Obj } from '@dxos/echo';
9
+ import { TestSchema } from '@dxos/echo/testing';
11
10
  import { invariant } from '@dxos/invariant';
12
11
  import { PublicKey } from '@dxos/keys';
13
12
  import { log } from '@dxos/log';
14
13
  import { useMergeRefs, useThemeContext } from '@dxos/react-ui';
15
14
  import { useAttentionAttributes } from '@dxos/react-ui-attention';
16
- import { JsonFilter } from '@dxos/react-ui-syntax-highlighter';
17
- import { mx } from '@dxos/react-ui-theme';
18
- import { isNonNullable } from '@dxos/util';
19
-
20
- import { type EditorController, createEditorController } from '../../components';
21
- import { editorGutter, editorSlots } from '../../defaults';
15
+ import { Syntax } from '@dxos/react-ui-syntax-highlighter';
22
16
  import {
23
17
  type DebugNode,
24
18
  type ThemeExtensionsOptions,
25
19
  createBasicExtensions,
26
- createDataExtensions,
27
20
  createMarkdownExtensions,
28
21
  createThemeExtensions,
29
22
  debugTree,
30
- decorateMarkdown,
31
- } from '../../extensions';
23
+ documentSlots,
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';
32
29
  import { type UseTextEditorProps, useTextEditor } from '../../hooks';
33
30
 
34
31
  // Type definitions.
@@ -36,40 +33,41 @@ export type DebugMode = 'raw' | 'tree' | 'raw+tree';
36
33
 
37
34
  const defaultId = 'editor-' + PublicKey.random().toHex().slice(0, 8);
38
35
 
39
- export type StoryProps = Pick<UseTextEditorProps, 'id' | 'scrollTo' | 'selection' | 'extensions'> &
36
+ export type EditorStoryProps = Pick<UseTextEditorProps, 'id' | 'scrollTo' | 'selection' | 'extensions'> &
40
37
  Pick<ThemeExtensionsOptions, 'slots'> & {
41
38
  debug?: DebugMode;
42
39
  debugCustom?: (view: EditorView) => ReactNode;
43
40
  text?: string;
44
- object?: Expando;
41
+ object?: Obj.OfShape<TestSchema.Expando>;
45
42
  readOnly?: boolean;
46
43
  placeholder?: string;
47
44
  lineNumbers?: boolean;
45
+ monospace?: boolean;
48
46
  onReady?: (view: EditorView) => void;
49
47
  };
50
48
 
51
- export const EditorStory = forwardRef<EditorController, StoryProps>(
52
- ({ debug, debugCustom, text, extensions: extensionsParam, ...props }, forwardedRef) => {
49
+ export const EditorStory = forwardRef<EditorController, EditorStoryProps>(
50
+ ({ debug, debugCustom, text, extensions: extensionsProp, ...props }, forwardedRef) => {
53
51
  const controllerRef = useRef<EditorController>(null);
54
52
  const mergedRef = useMergeRefs([controllerRef, forwardedRef]);
55
53
 
56
54
  const attentionAttrs = useAttentionAttributes('test-panel');
57
55
  const [tree, setTree] = useState<DebugNode>();
58
- const [object] = useState(createObject(live(Expando, { content: text ?? '' })));
56
+ const [object] = useState(Obj.make(TestSchema.Expando, { content: text ?? '' }));
59
57
 
60
58
  const extensions = useMemo(
61
- () => (debug ? [extensionsParam, debugTree(setTree)].filter(isNonNullable) : extensionsParam),
62
- [debug, extensionsParam],
59
+ () => (debug ? [extensionsProp, debugTree(setTree)].filter(isNonNullable) : extensionsProp),
60
+ [debug, extensionsProp],
63
61
  );
64
62
 
65
63
  const view = controllerRef.current?.view;
66
64
  return (
67
- <div className={mx('is-full bs-full grid overflow-hidden', debug && 'grid-cols-2 lg:grid-cols-[1fr_600px]')}>
65
+ <div className={mx('dx-container grid', debug && 'grid-cols-2 lg:grid-cols-[1fr_600px]')}>
68
66
  <EditorComponent ref={mergedRef} object={object} text={text} extensions={extensions} {...props} />
69
67
 
70
68
  {debug && (
71
69
  <div
72
- className='grid bs-full auto-rows-fr border-l border-separator divide-y divide-separator overflow-hidden'
70
+ className='grid h-full auto-rows-fr border-l border-separator divide-y divide-separator overflow-hidden'
73
71
  {...attentionAttrs}
74
72
  >
75
73
  {view && debugCustom?.(view)}
@@ -78,7 +76,16 @@ export const EditorStory = forwardRef<EditorController, StoryProps>(
78
76
  {view?.state.doc.toString()}
79
77
  </pre>
80
78
  )}
81
- {(debug === 'tree' || debug === 'raw+tree') && <JsonFilter data={tree} classNames='p-1 text-xs' />}
79
+ {(debug === 'tree' || debug === 'raw+tree') && (
80
+ <Syntax.Root data={tree}>
81
+ <Syntax.Content>
82
+ <Syntax.Filter />
83
+ <Syntax.Viewport>
84
+ <Syntax.Code classNames='p-1 text-xs' />
85
+ </Syntax.Viewport>
86
+ </Syntax.Content>
87
+ </Syntax.Root>
88
+ )}
82
89
  </div>
83
90
  )}
84
91
  </div>
@@ -88,10 +95,8 @@ export const EditorStory = forwardRef<EditorController, StoryProps>(
88
95
 
89
96
  /**
90
97
  * Default story component.
91
- * @deprecated
92
98
  */
93
- // TODO(burdon): Replace with <Editor.Root>
94
- export const EditorComponent = forwardRef<EditorController, StoryProps>(
99
+ const EditorComponent = forwardRef<EditorController, EditorStoryProps>(
95
100
  (
96
101
  {
97
102
  id = defaultId,
@@ -100,10 +105,11 @@ export const EditorComponent = forwardRef<EditorController, StoryProps>(
100
105
  readOnly,
101
106
  placeholder = 'New document.',
102
107
  lineNumbers,
108
+ monospace,
103
109
  scrollTo,
104
110
  selection,
105
111
  extensions,
106
- slots = editorSlots,
112
+ slots = documentSlots,
107
113
  onReady,
108
114
  },
109
115
  forwardedRef,
@@ -118,12 +124,9 @@ export const EditorComponent = forwardRef<EditorController, StoryProps>(
118
124
  selection,
119
125
  initialValue: text,
120
126
  extensions: [
121
- createDataExtensions({ id, text: createDocAccessor(object, ['content']) }),
122
127
  createBasicExtensions({ readOnly, placeholder, lineNumbers, scrollPastEnd: true, search: true }),
128
+ createThemeExtensions({ monospace, themeMode, syntaxHighlighting: true, slots }),
123
129
  createMarkdownExtensions(),
124
- createThemeExtensions({ themeMode, syntaxHighlighting: true, slots }),
125
- decorateMarkdown(),
126
- editorGutter,
127
130
  extensions || [],
128
131
  ],
129
132
  }),