@dxos/react-ui-editor 0.8.4-main.7ace549 → 0.8.4-main.8360d9e660

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (397) hide show
  1. package/dist/lib/browser/index.mjs +520 -8303
  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 +518 -8300
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/components/Editor/Editor.d.ts +8 -2
  8. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  9. package/dist/types/src/components/Editor/Editor.stories.d.ts +4 -1
  10. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  11. package/dist/types/src/components/EditorContent/EditorContent.d.ts +4 -2
  12. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +1 -1
  13. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +1 -1
  14. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -1
  15. package/dist/types/src/components/EditorMenuProvider/index.d.ts +0 -1
  16. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -1
  17. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -1
  18. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -1
  19. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +1 -2
  20. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -1
  21. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +1 -1
  23. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -1
  24. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +7 -5
  25. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  26. package/dist/types/src/components/EditorToolbar/actions.d.ts +9 -23
  27. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +1 -1
  28. package/dist/types/src/components/EditorToolbar/blocks.d.ts +7 -5
  29. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  30. package/dist/types/src/components/EditorToolbar/formatting.d.ts +7 -5
  31. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  32. package/dist/types/src/components/EditorToolbar/headings.d.ts +7 -5
  33. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  34. package/dist/types/src/components/EditorToolbar/image.d.ts +5 -11
  35. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  36. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  37. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  38. package/dist/types/src/components/EditorToolbar/search.d.ts +5 -11
  39. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  40. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +4 -4
  41. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -1
  42. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +8 -6
  43. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  44. package/dist/types/src/components/index.d.ts.map +1 -1
  45. package/dist/types/src/hooks/useTextEditor.d.ts +1 -1
  46. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  47. package/dist/types/src/index.d.ts +0 -8
  48. package/dist/types/src/index.d.ts.map +1 -1
  49. package/dist/types/src/{extensions/automerge/automerge.stories.d.ts → stories/Automerge.stories.d.ts} +5 -8
  50. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  51. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -1
  52. package/dist/types/src/stories/Comments.stories.d.ts +3 -2
  53. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  54. package/dist/types/src/stories/EditorToolbar.stories.d.ts +4 -4
  55. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  56. package/dist/types/src/stories/Experimental.stories.d.ts +3 -2
  57. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  58. package/dist/types/src/stories/Markdown.stories.d.ts +3 -2
  59. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  60. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  61. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  62. package/dist/types/src/stories/Preview.stories.d.ts +3 -2
  63. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  64. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  65. package/dist/types/src/stories/TextEditor.stories.d.ts +3 -2
  66. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  67. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  68. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  69. package/dist/types/src/stories/components/EditorStory.d.ts +8 -20
  70. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  71. package/dist/types/src/stories/components/util.d.ts +3 -3
  72. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  73. package/dist/types/src/translations.d.ts +5 -5
  74. package/dist/types/src/translations.d.ts.map +1 -1
  75. package/dist/types/src/util/index.d.ts +0 -5
  76. package/dist/types/src/util/index.d.ts.map +1 -1
  77. package/dist/types/src/util/react.d.ts +6 -5
  78. package/dist/types/src/util/react.d.ts.map +1 -1
  79. package/dist/types/tsconfig.tsbuildinfo +1 -1
  80. package/package.json +64 -66
  81. package/src/components/Editor/Editor.stories.tsx +14 -8
  82. package/src/components/Editor/Editor.tsx +21 -10
  83. package/src/components/EditorContent/EditorContent.tsx +19 -6
  84. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +21 -26
  85. package/src/components/EditorMenuProvider/index.ts +0 -1
  86. package/src/components/EditorMenuProvider/menu-presets.ts +2 -1
  87. package/src/components/EditorMenuProvider/menu.ts +1 -2
  88. package/src/components/EditorMenuProvider/popover.ts +1 -3
  89. package/src/components/EditorMenuProvider/useEditorMenu.ts +7 -3
  90. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +6 -9
  91. package/src/components/EditorToolbar/EditorToolbar.tsx +24 -36
  92. package/src/components/EditorToolbar/actions.ts +10 -9
  93. package/src/components/EditorToolbar/blocks.ts +5 -6
  94. package/src/components/EditorToolbar/formatting.ts +5 -6
  95. package/src/components/EditorToolbar/headings.ts +12 -12
  96. package/src/components/EditorToolbar/image.ts +9 -2
  97. package/src/components/EditorToolbar/index.ts +1 -1
  98. package/src/components/EditorToolbar/search.ts +9 -2
  99. package/src/components/EditorToolbar/useEditorToolbar.ts +6 -6
  100. package/src/components/EditorToolbar/view-mode.ts +5 -5
  101. package/src/components/index.ts +0 -2
  102. package/src/hooks/useTextEditor.ts +9 -3
  103. package/src/index.ts +0 -10
  104. package/src/stories/Automerge.stories.tsx +173 -0
  105. package/src/stories/CommandDialog.stories.tsx +8 -10
  106. package/src/stories/Comments.stories.tsx +47 -42
  107. package/src/stories/EditorToolbar.stories.tsx +30 -15
  108. package/src/stories/Experimental.stories.tsx +7 -9
  109. package/src/stories/Markdown.stories.tsx +16 -16
  110. package/src/stories/Outliner.stories.tsx +6 -7
  111. package/src/stories/Popover.stories.tsx +19 -23
  112. package/src/stories/Preview.stories.tsx +66 -51
  113. package/src/stories/Tags.stories.tsx +24 -15
  114. package/src/stories/TextEditor.stories.tsx +13 -19
  115. package/src/stories/Theme.stories.tsx +61 -0
  116. package/src/stories/components/EditorStory.tsx +19 -23
  117. package/src/stories/components/util.tsx +21 -24
  118. package/src/translations.ts +4 -4
  119. package/src/util/index.ts +1 -6
  120. package/src/util/react.tsx +8 -13
  121. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  122. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  123. package/dist/lib/browser/types/index.mjs +0 -13
  124. package/dist/lib/browser/types/index.mjs.map +0 -7
  125. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  126. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  127. package/dist/lib/node-esm/types/index.mjs +0 -14
  128. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  129. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +0 -26
  130. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +0 -1
  131. package/dist/types/src/components/EditorMenuProvider/util.d.ts +0 -8
  132. package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +0 -1
  133. package/dist/types/src/defaults.d.ts +0 -14
  134. package/dist/types/src/defaults.d.ts.map +0 -1
  135. package/dist/types/src/extensions/annotations.d.ts +0 -9
  136. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  137. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -17
  138. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  139. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  140. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  141. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  142. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  143. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  144. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  145. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  146. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  147. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  148. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  149. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  150. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  151. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  152. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  153. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  154. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  155. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  156. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  157. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  158. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  159. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  160. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  161. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  162. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  163. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  164. package/dist/types/src/extensions/autoscroll.d.ts +0 -20
  165. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  166. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  167. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  168. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  169. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  170. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  171. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  172. package/dist/types/src/extensions/blast.d.ts +0 -25
  173. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  174. package/dist/types/src/extensions/blocks.d.ts +0 -2
  175. package/dist/types/src/extensions/blocks.d.ts.map +0 -1
  176. package/dist/types/src/extensions/bookmarks.d.ts +0 -12
  177. package/dist/types/src/extensions/bookmarks.d.ts.map +0 -1
  178. package/dist/types/src/extensions/comments.d.ts +0 -95
  179. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  180. package/dist/types/src/extensions/debug.d.ts +0 -3
  181. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  182. package/dist/types/src/extensions/dnd.d.ts +0 -9
  183. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  184. package/dist/types/src/extensions/factories.d.ts +0 -84
  185. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  186. package/dist/types/src/extensions/focus.d.ts +0 -7
  187. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  188. package/dist/types/src/extensions/folding.d.ts +0 -7
  189. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  190. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  191. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  192. package/dist/types/src/extensions/index.d.ts +0 -32
  193. package/dist/types/src/extensions/index.d.ts.map +0 -1
  194. package/dist/types/src/extensions/json.d.ts +0 -7
  195. package/dist/types/src/extensions/json.d.ts.map +0 -1
  196. package/dist/types/src/extensions/listener.d.ts +0 -13
  197. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  198. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  199. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  200. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  201. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  202. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  203. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  204. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  205. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  206. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  207. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  208. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  209. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  210. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -61
  211. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  212. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  213. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  214. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  215. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  216. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  217. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  218. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  219. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  220. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  221. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  222. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  223. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  224. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  225. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  226. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  227. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  228. package/dist/types/src/extensions/mention.d.ts +0 -7
  229. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  230. package/dist/types/src/extensions/modal.d.ts +0 -7
  231. package/dist/types/src/extensions/modal.d.ts.map +0 -1
  232. package/dist/types/src/extensions/modes.d.ts +0 -10
  233. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  234. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  235. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  236. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  237. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  238. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  239. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  240. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  241. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  242. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  243. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  244. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  245. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  246. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  247. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  248. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  249. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  250. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  251. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  252. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  253. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  254. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  255. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  256. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  257. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  258. package/dist/types/src/extensions/replacer.d.ts +0 -21
  259. package/dist/types/src/extensions/replacer.d.ts.map +0 -1
  260. package/dist/types/src/extensions/replacer.test.d.ts +0 -2
  261. package/dist/types/src/extensions/replacer.test.d.ts.map +0 -1
  262. package/dist/types/src/extensions/scrolling.d.ts +0 -78
  263. package/dist/types/src/extensions/scrolling.d.ts.map +0 -1
  264. package/dist/types/src/extensions/selection.d.ts +0 -24
  265. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  266. package/dist/types/src/extensions/state.d.ts +0 -2
  267. package/dist/types/src/extensions/state.d.ts.map +0 -1
  268. package/dist/types/src/extensions/submit.d.ts +0 -10
  269. package/dist/types/src/extensions/submit.d.ts.map +0 -1
  270. package/dist/types/src/extensions/tab.d.ts +0 -4
  271. package/dist/types/src/extensions/tab.d.ts.map +0 -1
  272. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  273. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  274. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  275. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  276. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  277. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  278. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  279. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  280. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -97
  281. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  282. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  283. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  284. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  285. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  286. package/dist/types/src/styles/index.d.ts +0 -4
  287. package/dist/types/src/styles/index.d.ts.map +0 -1
  288. package/dist/types/src/styles/markdown.d.ts +0 -8
  289. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  290. package/dist/types/src/styles/theme.d.ts +0 -38
  291. package/dist/types/src/styles/theme.d.ts.map +0 -1
  292. package/dist/types/src/styles/tokens.d.ts +0 -3
  293. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  294. package/dist/types/src/types/index.d.ts +0 -2
  295. package/dist/types/src/types/index.d.ts.map +0 -1
  296. package/dist/types/src/types/types.d.ts +0 -21
  297. package/dist/types/src/types/types.d.ts.map +0 -1
  298. package/dist/types/src/util/cursor.d.ts +0 -31
  299. package/dist/types/src/util/cursor.d.ts.map +0 -1
  300. package/dist/types/src/util/debug.d.ts +0 -21
  301. package/dist/types/src/util/debug.d.ts.map +0 -1
  302. package/dist/types/src/util/decorations.d.ts +0 -4
  303. package/dist/types/src/util/decorations.d.ts.map +0 -1
  304. package/dist/types/src/util/dom.d.ts +0 -10
  305. package/dist/types/src/util/dom.d.ts.map +0 -1
  306. package/dist/types/src/util/facet.d.ts +0 -3
  307. package/dist/types/src/util/facet.d.ts.map +0 -1
  308. package/src/components/EditorContent/EditorContent.stories.tsx +0 -70
  309. package/src/components/EditorMenuProvider/util.ts +0 -31
  310. package/src/defaults.ts +0 -52
  311. package/src/extensions/annotations.ts +0 -55
  312. package/src/extensions/autocomplete/autocomplete.ts +0 -151
  313. package/src/extensions/autocomplete/index.ts +0 -8
  314. package/src/extensions/autocomplete/match.ts +0 -46
  315. package/src/extensions/autocomplete/placeholder.ts +0 -117
  316. package/src/extensions/autocomplete/typeahead.ts +0 -87
  317. package/src/extensions/automerge/automerge.stories.tsx +0 -150
  318. package/src/extensions/automerge/automerge.test.tsx +0 -78
  319. package/src/extensions/automerge/automerge.ts +0 -105
  320. package/src/extensions/automerge/cursor.ts +0 -28
  321. package/src/extensions/automerge/defs.ts +0 -31
  322. package/src/extensions/automerge/index.ts +0 -5
  323. package/src/extensions/automerge/sync.ts +0 -79
  324. package/src/extensions/automerge/update-automerge.ts +0 -50
  325. package/src/extensions/automerge/update-codemirror.ts +0 -115
  326. package/src/extensions/autoscroll.ts +0 -163
  327. package/src/extensions/awareness/awareness-provider.ts +0 -127
  328. package/src/extensions/awareness/awareness.ts +0 -315
  329. package/src/extensions/awareness/index.ts +0 -6
  330. package/src/extensions/blast.ts +0 -363
  331. package/src/extensions/blocks.ts +0 -131
  332. package/src/extensions/bookmarks.ts +0 -75
  333. package/src/extensions/comments.ts +0 -598
  334. package/src/extensions/debug.ts +0 -15
  335. package/src/extensions/dnd.ts +0 -37
  336. package/src/extensions/factories.ts +0 -282
  337. package/src/extensions/focus.ts +0 -36
  338. package/src/extensions/folding.tsx +0 -43
  339. package/src/extensions/hashtag.tsx +0 -68
  340. package/src/extensions/index.ts +0 -35
  341. package/src/extensions/json.ts +0 -57
  342. package/src/extensions/listener.ts +0 -32
  343. package/src/extensions/markdown/action.ts +0 -117
  344. package/src/extensions/markdown/bundle.ts +0 -105
  345. package/src/extensions/markdown/changes.test.ts +0 -26
  346. package/src/extensions/markdown/changes.ts +0 -149
  347. package/src/extensions/markdown/debug.ts +0 -44
  348. package/src/extensions/markdown/decorate.ts +0 -601
  349. package/src/extensions/markdown/formatting.test.ts +0 -498
  350. package/src/extensions/markdown/formatting.ts +0 -1265
  351. package/src/extensions/markdown/highlight.ts +0 -183
  352. package/src/extensions/markdown/image.ts +0 -118
  353. package/src/extensions/markdown/index.ts +0 -13
  354. package/src/extensions/markdown/link.ts +0 -50
  355. package/src/extensions/markdown/parser.test.ts +0 -75
  356. package/src/extensions/markdown/styles.ts +0 -135
  357. package/src/extensions/markdown/table.ts +0 -150
  358. package/src/extensions/mention.ts +0 -41
  359. package/src/extensions/modal.ts +0 -24
  360. package/src/extensions/modes.ts +0 -41
  361. package/src/extensions/outliner/commands.ts +0 -270
  362. package/src/extensions/outliner/editor.test.ts +0 -33
  363. package/src/extensions/outliner/editor.ts +0 -184
  364. package/src/extensions/outliner/index.ts +0 -7
  365. package/src/extensions/outliner/menu.ts +0 -128
  366. package/src/extensions/outliner/outliner.test.ts +0 -100
  367. package/src/extensions/outliner/outliner.ts +0 -167
  368. package/src/extensions/outliner/selection.ts +0 -50
  369. package/src/extensions/outliner/tree.test.ts +0 -168
  370. package/src/extensions/outliner/tree.ts +0 -317
  371. package/src/extensions/preview/index.ts +0 -5
  372. package/src/extensions/preview/preview.ts +0 -193
  373. package/src/extensions/replacer.test.ts +0 -75
  374. package/src/extensions/replacer.ts +0 -93
  375. package/src/extensions/scrolling.ts +0 -189
  376. package/src/extensions/selection.ts +0 -100
  377. package/src/extensions/state.ts +0 -7
  378. package/src/extensions/submit.ts +0 -62
  379. package/src/extensions/tab.ts +0 -29
  380. package/src/extensions/tags/extended-markdown.test.ts +0 -262
  381. package/src/extensions/tags/extended-markdown.ts +0 -78
  382. package/src/extensions/tags/index.ts +0 -7
  383. package/src/extensions/tags/streamer.ts +0 -243
  384. package/src/extensions/tags/xml-tags.ts +0 -500
  385. package/src/extensions/tags/xml-util.ts +0 -94
  386. package/src/extensions/typewriter.ts +0 -68
  387. package/src/styles/index.ts +0 -7
  388. package/src/styles/markdown.ts +0 -26
  389. package/src/styles/theme.ts +0 -269
  390. package/src/styles/tokens.ts +0 -17
  391. package/src/types/index.ts +0 -5
  392. package/src/types/types.ts +0 -32
  393. package/src/util/cursor.ts +0 -56
  394. package/src/util/debug.ts +0 -69
  395. package/src/util/decorations.ts +0 -21
  396. package/src/util/dom.ts +0 -34
  397. package/src/util/facet.ts +0 -13
@@ -7,10 +7,11 @@ import React, { useCallback, useState } from 'react';
7
7
 
8
8
  import { Obj, Query } from '@dxos/echo';
9
9
  import { faker } from '@dxos/random';
10
- import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
11
- import { Domino } from '@dxos/react-ui';
12
- import { withTheme } from '@dxos/react-ui/testing';
10
+ import { useClientStory, withClientProvider } from '@dxos/react-client/testing';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
13
12
  import { TestSchema, type ValueGenerator, createObjectFactory } from '@dxos/schema/testing';
13
+ import { Domino, mx } from '@dxos/ui';
14
+ import { insertAtCursor, insertAtLineStart, join } from '@dxos/ui-editor';
14
15
 
15
16
  import {
16
17
  type EditorController,
@@ -21,12 +22,9 @@ import {
21
22
  createMenuGroup,
22
23
  filterMenuGroups,
23
24
  formattingCommands,
24
- insertAtCursor,
25
- insertAtLineStart,
26
25
  linkSlashCommands,
27
26
  useEditorMenu,
28
27
  } from '../components';
29
- import { str } from '../util';
30
28
 
31
29
  import { EditorStory } from './components';
32
30
 
@@ -37,16 +35,14 @@ const customCompletions: EditorMenuGroup = createMenuGroup({
37
35
  items: ['Hello world!', 'Hello DXOS', 'Hello Composer', 'https://dxos.org'],
38
36
  });
39
37
 
40
- const placeholder = (trigger: string[]) =>
41
- Domino.of('div')
42
- .children(
43
- Domino.of('span').text('Press'),
44
- ...trigger.map((trigger) =>
45
- Domino.of('span').text(trigger).classNames('border border-separator rounded-sm mx-1 pli-1 pbs-[2px] pbe-[3px]'),
46
- ),
47
- Domino.of('span').text('for commands'),
48
- )
49
- .build();
38
+ const placeholder = (trigger: string[]) => {
39
+ const pressEl = Domino.of('span').text('Press');
40
+ const triggerEls = trigger.map((trigger) =>
41
+ Domino.of('span').classNames(mx('border border-separator rounded-xs mx-1 px-1 py-[2px] pb-[3px]')).text(trigger),
42
+ );
43
+ const forCommandsEl = Domino.of('span').text('for commands');
44
+ return Domino.of('div').children(pressEl, ...triggerEls, forCommandsEl).root;
45
+ };
50
46
 
51
47
  type StoryProps = Omit<UseEditorMenuProps, 'viewRef'> & { text: string };
52
48
 
@@ -62,7 +58,7 @@ const DefaultStory = ({ text, ...props }: StoryProps) => {
62
58
  };
63
59
 
64
60
  const LinkStory = (args: StoryProps) => {
65
- const { space } = useClientProvider();
61
+ const { space } = useClientStory();
66
62
 
67
63
  const getMenu = useCallback<NonNullable<UseEditorMenuProps['getMenu']>>(
68
64
  async ({ text, trigger }): Promise<EditorMenuGroup[]> => {
@@ -78,7 +74,7 @@ const LinkStory = (args: StoryProps) => {
78
74
 
79
75
  const name = text?.startsWith('@') ? text.slice(1).toLowerCase() : (text?.toLowerCase() ?? '');
80
76
  const result = await space?.db.query(Query.type(TestSchema.Person)).run();
81
- const items = result.objects
77
+ const items = result
82
78
  .filter((object) => object.name.toLowerCase().includes(name))
83
79
  .map(
84
80
  (object): EditorMenuItem => ({
@@ -107,7 +103,7 @@ const LinkStory = (args: StoryProps) => {
107
103
  const meta = {
108
104
  title: 'ui/react-ui-editor/Popover',
109
105
  render: DefaultStory,
110
- decorators: [withTheme],
106
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
111
107
  parameters: {
112
108
  layout: 'fullscreen',
113
109
  },
@@ -119,7 +115,7 @@ type Story = StoryObj<typeof meta>;
119
115
 
120
116
  export const Default: Story = {
121
117
  args: {
122
- text: str('# Autocomplete', '', ''),
118
+ text: join('# Autocomplete', '', ''),
123
119
  triggerKey: 'Ctrl-Space',
124
120
  filter: true,
125
121
  getMenu: () => [customCompletions],
@@ -128,7 +124,7 @@ export const Default: Story = {
128
124
 
129
125
  export const Formatting: Story = {
130
126
  args: {
131
- text: str('# Slash command', '', ''),
127
+ text: join('# Slash command', '', ''),
132
128
  trigger: '/',
133
129
  placeholder: {
134
130
  content: () => placeholder(['/']),
@@ -143,7 +139,7 @@ export const Link: Story = {
143
139
  withClientProvider({
144
140
  createSpace: true,
145
141
  onInitialized: async (client) => {
146
- client.addTypes([TestSchema.Person]);
142
+ await client.addTypes([TestSchema.Person]);
147
143
  },
148
144
  onCreateSpace: async ({ space }) => {
149
145
  const createObjects = createObjectFactory(space.db, generator);
@@ -153,7 +149,7 @@ export const Link: Story = {
153
149
  }),
154
150
  ],
155
151
  args: {
156
- text: str('# Links', '', ''),
152
+ text: join('# Links', '', ''),
157
153
  trigger: ['/', '@'],
158
154
  placeholder: {
159
155
  content: () => placeholder(['/', '@']),
@@ -10,13 +10,9 @@ import { createPortal } from 'react-dom';
10
10
 
11
11
  import { invariant } from '@dxos/invariant';
12
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';
13
+ import { Card, Popover, Toolbar } from '@dxos/react-ui';
14
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
15
+ import { Menu, createMenuAction } from '@dxos/react-ui-menu';
20
16
  import {
21
17
  type PreviewBlock,
22
18
  type PreviewLinkRef,
@@ -24,13 +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';
26
+
27
+ import { type EditorController, EditorPreviewProvider, useEditorPreview } from '../components';
28
28
 
29
29
  import { EditorStory } from './components';
30
30
 
31
- const handlePreviewLookup = async ({ label, ref }: PreviewLinkRef): Promise<PreviewLinkTarget> => {
31
+ const handlePreviewLookup = async ({ dxn, label }: PreviewLinkRef): Promise<PreviewLinkTarget> => {
32
32
  // Random text.
33
- faker.seed(ref.split('').reduce((acc: number, char: string) => acc + char.charCodeAt(0), 1));
33
+ faker.seed(dxn.split('').reduce((acc: number, char: string) => acc + char.charCodeAt(0), 1));
34
34
  const text = Array.from({ length: 2 }, () => faker.lorem.paragraphs()).join('\n\n');
35
35
  return {
36
36
  label,
@@ -51,14 +51,26 @@ const useRefTarget = (link: PreviewLinkRef): PreviewLinkTarget | undefined => {
51
51
 
52
52
  const PreviewCard = () => {
53
53
  const { target } = useEditorPreview('PreviewCard');
54
+ if (!target) {
55
+ return null;
56
+ }
57
+
54
58
  return (
55
59
  <Popover.Portal>
56
60
  <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>
61
+ <Popover.Viewport classNames='dx-card-popover-width'>
62
+ <Card.Root border={false}>
63
+ <Card.Toolbar>
64
+ <Card.Icon icon='ph--file-text--regular' />
65
+ <Card.Title>{target.label}</Card.Title>
66
+ <Popover.Close asChild>
67
+ <Card.CloseIconButton />
68
+ </Popover.Close>
69
+ </Card.Toolbar>
70
+ <Card.Row>
71
+ <Card.Text variant='description'>{target.text}</Card.Text>
72
+ </Card.Row>
73
+ </Card.Root>
62
74
  </Popover.Viewport>
63
75
  <Popover.Arrow />
64
76
  </Popover.Content>
@@ -90,7 +102,7 @@ const PreviewBlockComponent = ({ link, el, view }: { link: PreviewLinkRef; el: H
90
102
  }
91
103
 
92
104
  const link = getLinkRef(view.state, node);
93
- if (link?.ref !== action.link.ref) {
105
+ if (link?.dxn !== action.link.dxn) {
94
106
  return;
95
107
  }
96
108
 
@@ -132,41 +144,45 @@ const PreviewBlockComponent = ({ link, el, view }: { link: PreviewLinkRef; el: H
132
144
  }
133
145
  }, [handleAction, link, target]);
134
146
 
147
+ const menuItems = useMemo(
148
+ () => [
149
+ createMenuAction('delete', handleDelete, {
150
+ label: link.suggest ? 'Discard' : 'Delete',
151
+ icon: 'ph--x--regular',
152
+ }),
153
+ ...(target
154
+ ? [
155
+ createMenuAction('apply', handleInsert, {
156
+ label: 'Apply',
157
+ icon: 'ph--check--regular',
158
+ }),
159
+ ]
160
+ : []),
161
+ ],
162
+ [handleDelete, handleInsert, link.suggest, target],
163
+ );
164
+
135
165
  return createPortal(
136
- <Card.StaticRoot classNames={hoverableControls}>
137
- <div className='flex items-start'>
166
+ <Menu.Root>
167
+ <Card.Root classNames={hoverableControls}>
138
168
  {!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
- )}
169
+ <Card.Toolbar>
170
+ <Card.Icon icon='ph--bookmark--regular' />
171
+ <Card.Title>{link.label}</Card.Title>
172
+ {/* TODO(wittjosiah): Reconcile with Card.Menu. */}
173
+ <Menu.Trigger asChild disabled={!menuItems?.length}>
174
+ <Toolbar.IconButton iconOnly variant='ghost' icon='ph--dots-three-vertical--regular' label='Menu' />
175
+ </Menu.Trigger>
176
+ <Menu.Content items={menuItems} />
161
177
  </Card.Toolbar>
162
178
  )}
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>,
179
+ {target && (
180
+ <Card.Row>
181
+ <Card.Text className='text-description'>{target.text}</Card.Text>
182
+ </Card.Row>
183
+ )}
184
+ </Card.Root>
185
+ </Menu.Root>,
170
186
  el,
171
187
  );
172
188
  };
@@ -174,7 +190,7 @@ const PreviewBlockComponent = ({ link, el, view }: { link: PreviewLinkRef; el: H
174
190
  const meta = {
175
191
  title: 'ui/react-ui-editor/Preview',
176
192
  component: EditorStory,
177
- decorators: [withTheme],
193
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
178
194
  parameters: {
179
195
  layout: 'fullscreen',
180
196
  },
@@ -211,21 +227,20 @@ export const Default: Story = {
211
227
  setPreviewBlocks((prev) => [...prev, block]);
212
228
  },
213
229
  removeBlockContainer: (block) => {
214
- setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== block.link.ref));
230
+ setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.dxn !== block.link.dxn));
215
231
  },
216
232
  }),
217
233
  ];
218
234
  }, []);
219
235
 
220
236
  // TODO(burdon): Migrate to Editor.Root.
221
- // TODO(burdon): Ranges must be sorted error (decorate.enter).
222
237
  return (
223
238
  <EditorPreviewProvider onLookup={handlePreviewLookup}>
224
239
  <EditorStory ref={setController} text={text} extensions={extensions} />
225
240
  <PreviewCard />
226
241
  {controller?.view &&
227
242
  previewBlocks.map(({ link, el }) => (
228
- <PreviewBlockComponent key={link.ref} link={link} el={el} view={controller.view!} />
243
+ <PreviewBlockComponent key={link.dxn} link={link} el={el} view={controller.view!} />
229
244
  ))}
230
245
  </EditorPreviewProvider>
231
246
  );
@@ -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.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,21 +3,16 @@
3
3
  //
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
- import type * as Schema from 'effect/Schema';
7
6
  import React, { type ReactNode, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
8
7
 
9
- import { Obj, Type } from '@dxos/echo';
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
12
  import { log } from '@dxos/log';
13
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 { type EditorController, createEditorController } from '../../components';
20
- import { editorGutter, editorSlots } from '../../defaults';
21
16
  import {
22
17
  type DebugNode,
23
18
  type ThemeExtensionsOptions,
@@ -25,8 +20,12 @@ import {
25
20
  createMarkdownExtensions,
26
21
  createThemeExtensions,
27
22
  debugTree,
28
- decorateMarkdown,
29
- } 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';
30
29
  import { type UseTextEditorProps, useTextEditor } from '../../hooks';
31
30
 
32
31
  // Type definitions.
@@ -39,36 +38,36 @@ export type StoryProps = Pick<UseTextEditorProps, 'id' | 'scrollTo' | 'selection
39
38
  debug?: DebugMode;
40
39
  debugCustom?: (view: EditorView) => ReactNode;
41
40
  text?: string;
42
- // TODO(wittjosiah): Find a simpler way to define this type.
43
- object?: Obj.Obj<Schema.Schema.Type<typeof Type.Expando>>;
41
+ object?: Obj.OfShape<TestSchema.Expando>;
44
42
  readOnly?: boolean;
45
43
  placeholder?: string;
46
44
  lineNumbers?: boolean;
45
+ monospace?: boolean;
47
46
  onReady?: (view: EditorView) => void;
48
47
  };
49
48
 
50
49
  export const EditorStory = forwardRef<EditorController, StoryProps>(
51
- ({ debug, debugCustom, text, extensions: extensionsParam, ...props }, forwardedRef) => {
50
+ ({ debug, debugCustom, text, extensions: extensionsProp, ...props }, forwardedRef) => {
52
51
  const controllerRef = useRef<EditorController>(null);
53
52
  const mergedRef = useMergeRefs([controllerRef, forwardedRef]);
54
53
 
55
54
  const attentionAttrs = useAttentionAttributes('test-panel');
56
55
  const [tree, setTree] = useState<DebugNode>();
57
- const [object] = useState(Obj.make(Type.Expando, { content: text ?? '' }));
56
+ const [object] = useState(Obj.make(TestSchema.Expando, { content: text ?? '' }));
58
57
 
59
58
  const extensions = useMemo(
60
- () => (debug ? [extensionsParam, debugTree(setTree)].filter(isNonNullable) : extensionsParam),
61
- [debug, extensionsParam],
59
+ () => (debug ? [extensionsProp, debugTree(setTree)].filter(isNonNullable) : extensionsProp),
60
+ [debug, extensionsProp],
62
61
  );
63
62
 
64
63
  const view = controllerRef.current?.view;
65
64
  return (
66
- <div className={mx('is-full bs-full grid overflow-hidden', debug && 'grid-cols-2 lg:grid-cols-[1fr_600px]')}>
65
+ <div className={mx('w-full h-full grid overflow-hidden', debug && 'grid-cols-2 lg:grid-cols-[1fr_600px]')}>
67
66
  <EditorComponent ref={mergedRef} object={object} text={text} extensions={extensions} {...props} />
68
67
 
69
68
  {debug && (
70
69
  <div
71
- 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'
72
71
  {...attentionAttrs}
73
72
  >
74
73
  {view && debugCustom?.(view)}
@@ -87,10 +86,8 @@ export const EditorStory = forwardRef<EditorController, StoryProps>(
87
86
 
88
87
  /**
89
88
  * Default story component.
90
- * @deprecated
91
89
  */
92
- // TODO(burdon): Replace with <Editor.Root>
93
- export const EditorComponent = forwardRef<EditorController, StoryProps>(
90
+ const EditorComponent = forwardRef<EditorController, StoryProps>(
94
91
  (
95
92
  {
96
93
  id = defaultId,
@@ -99,6 +96,7 @@ export const EditorComponent = forwardRef<EditorController, StoryProps>(
99
96
  readOnly,
100
97
  placeholder = 'New document.',
101
98
  lineNumbers,
99
+ monospace,
102
100
  scrollTo,
103
101
  selection,
104
102
  extensions,
@@ -118,10 +116,8 @@ export const EditorComponent = forwardRef<EditorController, StoryProps>(
118
116
  initialValue: text,
119
117
  extensions: [
120
118
  createBasicExtensions({ readOnly, placeholder, lineNumbers, scrollPastEnd: true, search: true }),
119
+ createThemeExtensions({ monospace, themeMode, syntaxHighlighting: true, slots }),
121
120
  createMarkdownExtensions(),
122
- createThemeExtensions({ themeMode, syntaxHighlighting: true, slots }),
123
- decorateMarkdown(),
124
- editorGutter,
125
121
  extensions || [],
126
122
  ],
127
123
  }),