@dxos/react-ui-editor 0.8.4-main.5ea62a8 → 0.8.4-main.60689f5b1c

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 (414) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +1416 -7865
  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 +1416 -7864
  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 +54 -15
  14. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  15. package/dist/types/src/components/Editor/Editor.stories.d.ts +23 -0
  16. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  17. package/dist/types/src/components/Editor/EditorView.d.ts +31 -0
  18. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  19. package/dist/types/src/components/Editor/controller.d.ts +10 -0
  20. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +34 -0
  22. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  24. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  26. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  28. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +47 -0
  30. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  32. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  34. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  35. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  36. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  37. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  38. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  40. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  42. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  44. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  46. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  48. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -17
  50. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  51. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  52. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  53. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  54. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  55. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  56. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  57. package/dist/types/src/components/index.d.ts +2 -2
  58. package/dist/types/src/components/index.d.ts.map +1 -1
  59. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  60. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  61. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  62. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  63. package/dist/types/src/extensions/index.d.ts +1 -22
  64. package/dist/types/src/extensions/index.d.ts.map +1 -1
  65. package/dist/types/src/hooks/index.d.ts +1 -0
  66. package/dist/types/src/hooks/index.d.ts.map +1 -1
  67. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  68. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  69. package/dist/types/src/hooks/useTextEditor.d.ts +6 -10
  70. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  71. package/dist/types/src/index.d.ts +0 -9
  72. package/dist/types/src/index.d.ts.map +1 -1
  73. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  74. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  75. package/dist/types/src/stories/Comments.stories.d.ts +4 -4
  76. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/EditorToolbar.stories.d.ts +30 -29
  78. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Experimental.stories.d.ts +5 -5
  80. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Markdown.stories.d.ts +4 -4
  82. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/Outliner.stories.d.ts +2 -3
  84. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  85. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -6
  86. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  87. package/dist/types/src/stories/Preview.stories.d.ts +5 -4
  88. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  89. package/dist/types/src/stories/{Command.stories.d.ts → Tags.stories.d.ts} +4 -3
  90. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -0
  91. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -5
  92. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  93. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  94. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  95. package/dist/types/src/stories/components/EditorStory.d.ts +11 -20
  96. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  97. package/dist/types/src/stories/components/util.d.ts +4 -3
  98. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  99. package/dist/types/src/translations.d.ts +26 -26
  100. package/dist/types/src/translations.d.ts.map +1 -1
  101. package/dist/types/src/util/index.d.ts +0 -4
  102. package/dist/types/src/util/index.d.ts.map +1 -1
  103. package/dist/types/src/util/react.d.ts +7 -6
  104. package/dist/types/src/util/react.d.ts.map +1 -1
  105. package/dist/types/tsconfig.tsbuildinfo +1 -1
  106. package/package.json +94 -84
  107. package/src/components/Editor/Editor.stories.tsx +89 -0
  108. package/src/components/Editor/Editor.tsx +171 -24
  109. package/src/components/Editor/EditorView.tsx +102 -0
  110. package/src/components/Editor/controller.ts +50 -0
  111. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +226 -0
  112. package/src/components/EditorMenuProvider/index.ts +10 -0
  113. package/src/components/EditorMenuProvider/menu-presets.ts +125 -0
  114. package/src/components/EditorMenuProvider/menu.ts +70 -0
  115. package/src/components/EditorMenuProvider/popover.ts +287 -0
  116. package/src/components/EditorMenuProvider/useEditorMenu.ts +180 -0
  117. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  118. package/src/components/EditorPreviewProvider/index.ts +5 -0
  119. package/src/components/EditorToolbar/EditorToolbar.tsx +90 -111
  120. package/src/components/EditorToolbar/blocks.ts +55 -47
  121. package/src/components/EditorToolbar/formatting.ts +44 -45
  122. package/src/components/EditorToolbar/headings.ts +47 -50
  123. package/src/components/EditorToolbar/image.ts +16 -14
  124. package/src/components/EditorToolbar/index.ts +2 -7
  125. package/src/components/EditorToolbar/lists.ts +42 -40
  126. package/src/components/EditorToolbar/search.ts +16 -14
  127. package/src/components/EditorToolbar/types.ts +8 -0
  128. package/src/components/EditorToolbar/view-mode.ts +37 -42
  129. package/src/components/index.ts +3 -2
  130. package/src/extensions/Assistant.stories.tsx +112 -0
  131. package/src/extensions/assistant-extension.tsx +223 -0
  132. package/src/extensions/index.ts +2 -23
  133. package/src/hooks/index.ts +1 -0
  134. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  135. package/src/hooks/useTextEditor.ts +39 -45
  136. package/src/index.ts +0 -13
  137. package/src/stories/Automerge.stories.tsx +177 -0
  138. package/src/stories/Comments.stories.tsx +52 -48
  139. package/src/stories/EditorToolbar.stories.tsx +46 -58
  140. package/src/stories/Experimental.stories.tsx +17 -19
  141. package/src/stories/Markdown.stories.tsx +19 -19
  142. package/src/stories/Outliner.stories.tsx +45 -39
  143. package/src/stories/Popover.stories.tsx +157 -0
  144. package/src/stories/Preview.stories.tsx +105 -88
  145. package/src/stories/Tags.stories.tsx +104 -0
  146. package/src/stories/TextEditor.stories.tsx +20 -49
  147. package/src/stories/Theme.stories.tsx +61 -0
  148. package/src/stories/components/EditorStory.tsx +47 -31
  149. package/src/stories/components/util.tsx +90 -59
  150. package/src/translations.ts +30 -25
  151. package/src/util/index.ts +1 -5
  152. package/src/util/react.tsx +9 -14
  153. package/dist/lib/browser/chunk-22UMM3QJ.mjs +0 -22
  154. package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +0 -7
  155. package/dist/lib/browser/testing/index.mjs +0 -6
  156. package/dist/lib/browser/testing/index.mjs.map +0 -7
  157. package/dist/lib/browser/types/index.mjs +0 -13
  158. package/dist/lib/browser/types/index.mjs.map +0 -7
  159. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs +0 -24
  160. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +0 -7
  161. package/dist/lib/node-esm/testing/index.mjs +0 -8
  162. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  163. package/dist/lib/node-esm/types/index.mjs +0 -14
  164. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  165. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  166. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  167. package/dist/types/src/components/Popover/CommandMenu.d.ts +0 -34
  168. package/dist/types/src/components/Popover/CommandMenu.d.ts.map +0 -1
  169. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts +0 -21
  170. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts.map +0 -1
  171. package/dist/types/src/components/Popover/RefPopover.d.ts +0 -34
  172. package/dist/types/src/components/Popover/RefPopover.d.ts.map +0 -1
  173. package/dist/types/src/components/Popover/index.d.ts +0 -4
  174. package/dist/types/src/components/Popover/index.d.ts.map +0 -1
  175. package/dist/types/src/defaults.d.ts +0 -14
  176. package/dist/types/src/defaults.d.ts.map +0 -1
  177. package/dist/types/src/extensions/annotations.d.ts +0 -9
  178. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  179. package/dist/types/src/extensions/autocomplete.d.ts +0 -13
  180. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  181. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  182. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  183. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  184. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  185. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  186. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  187. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  188. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  189. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  190. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  191. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  192. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  193. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  194. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  195. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  196. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  197. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  198. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  199. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  200. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  201. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  202. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  203. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  204. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  205. package/dist/types/src/extensions/blast.d.ts +0 -25
  206. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  207. package/dist/types/src/extensions/command/action.d.ts +0 -17
  208. package/dist/types/src/extensions/command/action.d.ts.map +0 -1
  209. package/dist/types/src/extensions/command/command-menu.d.ts +0 -20
  210. package/dist/types/src/extensions/command/command-menu.d.ts.map +0 -1
  211. package/dist/types/src/extensions/command/command.d.ts +0 -6
  212. package/dist/types/src/extensions/command/command.d.ts.map +0 -1
  213. package/dist/types/src/extensions/command/floating-menu.d.ts +0 -7
  214. package/dist/types/src/extensions/command/floating-menu.d.ts.map +0 -1
  215. package/dist/types/src/extensions/command/hint.d.ts +0 -24
  216. package/dist/types/src/extensions/command/hint.d.ts.map +0 -1
  217. package/dist/types/src/extensions/command/index.d.ts +0 -7
  218. package/dist/types/src/extensions/command/index.d.ts.map +0 -1
  219. package/dist/types/src/extensions/command/placeholder.d.ts +0 -10
  220. package/dist/types/src/extensions/command/placeholder.d.ts.map +0 -1
  221. package/dist/types/src/extensions/command/state.d.ts +0 -16
  222. package/dist/types/src/extensions/command/state.d.ts.map +0 -1
  223. package/dist/types/src/extensions/command/typeahead.d.ts +0 -22
  224. package/dist/types/src/extensions/command/typeahead.d.ts.map +0 -1
  225. package/dist/types/src/extensions/command/useCommandMenu.d.ts +0 -26
  226. package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +0 -1
  227. package/dist/types/src/extensions/comments.d.ts +0 -95
  228. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  229. package/dist/types/src/extensions/debug.d.ts +0 -3
  230. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  231. package/dist/types/src/extensions/dnd.d.ts +0 -9
  232. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  233. package/dist/types/src/extensions/factories.d.ts +0 -83
  234. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  235. package/dist/types/src/extensions/focus.d.ts +0 -7
  236. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  237. package/dist/types/src/extensions/folding.d.ts +0 -7
  238. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  239. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  240. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  241. package/dist/types/src/extensions/json.d.ts +0 -7
  242. package/dist/types/src/extensions/json.d.ts.map +0 -1
  243. package/dist/types/src/extensions/listener.d.ts +0 -11
  244. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  245. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  246. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  247. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -18
  248. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  249. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  250. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  251. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  252. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  253. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  254. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  255. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -17
  256. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  257. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  258. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  259. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  260. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  261. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  262. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  263. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  264. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  265. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  266. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  267. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  268. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  269. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  270. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  271. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  272. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  273. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  274. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  275. package/dist/types/src/extensions/mention.d.ts +0 -7
  276. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  277. package/dist/types/src/extensions/modes.d.ts +0 -10
  278. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  279. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  280. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  281. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  282. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  283. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  284. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  285. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  286. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  287. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  288. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  289. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  290. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  291. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  292. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  293. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  294. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  295. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  296. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  297. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  298. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  299. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  300. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  301. package/dist/types/src/extensions/selection.d.ts +0 -24
  302. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  303. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  304. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  305. package/dist/types/src/stories/Command.stories.d.ts.map +0 -1
  306. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  307. package/dist/types/src/styles/index.d.ts +0 -4
  308. package/dist/types/src/styles/index.d.ts.map +0 -1
  309. package/dist/types/src/styles/markdown.d.ts +0 -8
  310. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  311. package/dist/types/src/styles/theme.d.ts +0 -38
  312. package/dist/types/src/styles/theme.d.ts.map +0 -1
  313. package/dist/types/src/styles/tokens.d.ts +0 -3
  314. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  315. package/dist/types/src/testing/index.d.ts +0 -2
  316. package/dist/types/src/testing/index.d.ts.map +0 -1
  317. package/dist/types/src/testing/util.d.ts +0 -3
  318. package/dist/types/src/testing/util.d.ts.map +0 -1
  319. package/dist/types/src/types/index.d.ts +0 -2
  320. package/dist/types/src/types/index.d.ts.map +0 -1
  321. package/dist/types/src/types/types.d.ts +0 -21
  322. package/dist/types/src/types/types.d.ts.map +0 -1
  323. package/dist/types/src/util/cursor.d.ts +0 -31
  324. package/dist/types/src/util/cursor.d.ts.map +0 -1
  325. package/dist/types/src/util/debug.d.ts +0 -17
  326. package/dist/types/src/util/debug.d.ts.map +0 -1
  327. package/dist/types/src/util/dom.d.ts +0 -20
  328. package/dist/types/src/util/dom.d.ts.map +0 -1
  329. package/dist/types/src/util/facet.d.ts +0 -3
  330. package/dist/types/src/util/facet.d.ts.map +0 -1
  331. package/src/components/EditorToolbar/util.ts +0 -76
  332. package/src/components/Popover/CommandMenu.tsx +0 -279
  333. package/src/components/Popover/RefDropdownMenu.tsx +0 -85
  334. package/src/components/Popover/RefPopover.tsx +0 -99
  335. package/src/components/Popover/index.ts +0 -7
  336. package/src/defaults.ts +0 -52
  337. package/src/extensions/annotations.ts +0 -55
  338. package/src/extensions/autocomplete.ts +0 -69
  339. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  340. package/src/extensions/automerge/automerge.test.tsx +0 -78
  341. package/src/extensions/automerge/automerge.ts +0 -86
  342. package/src/extensions/automerge/cursor.ts +0 -28
  343. package/src/extensions/automerge/defs.ts +0 -31
  344. package/src/extensions/automerge/index.ts +0 -5
  345. package/src/extensions/automerge/sync.ts +0 -75
  346. package/src/extensions/automerge/update-automerge.ts +0 -50
  347. package/src/extensions/automerge/update-codemirror.ts +0 -115
  348. package/src/extensions/awareness/awareness-provider.ts +0 -127
  349. package/src/extensions/awareness/awareness.ts +0 -315
  350. package/src/extensions/awareness/index.ts +0 -6
  351. package/src/extensions/blast.ts +0 -363
  352. package/src/extensions/command/action.ts +0 -56
  353. package/src/extensions/command/command-menu.ts +0 -211
  354. package/src/extensions/command/command.ts +0 -34
  355. package/src/extensions/command/floating-menu.ts +0 -133
  356. package/src/extensions/command/hint.ts +0 -103
  357. package/src/extensions/command/index.ts +0 -10
  358. package/src/extensions/command/placeholder.ts +0 -113
  359. package/src/extensions/command/state.ts +0 -90
  360. package/src/extensions/command/typeahead.ts +0 -129
  361. package/src/extensions/command/useCommandMenu.ts +0 -119
  362. package/src/extensions/comments.ts +0 -593
  363. package/src/extensions/debug.ts +0 -15
  364. package/src/extensions/dnd.ts +0 -37
  365. package/src/extensions/factories.ts +0 -260
  366. package/src/extensions/focus.ts +0 -35
  367. package/src/extensions/folding.tsx +0 -46
  368. package/src/extensions/hashtag.tsx +0 -68
  369. package/src/extensions/json.ts +0 -57
  370. package/src/extensions/listener.ts +0 -38
  371. package/src/extensions/markdown/action.ts +0 -117
  372. package/src/extensions/markdown/bundle.ts +0 -74
  373. package/src/extensions/markdown/changes.test.ts +0 -26
  374. package/src/extensions/markdown/changes.ts +0 -149
  375. package/src/extensions/markdown/debug.ts +0 -44
  376. package/src/extensions/markdown/decorate.ts +0 -592
  377. package/src/extensions/markdown/formatting.test.ts +0 -498
  378. package/src/extensions/markdown/formatting.ts +0 -1267
  379. package/src/extensions/markdown/highlight.ts +0 -183
  380. package/src/extensions/markdown/image.ts +0 -119
  381. package/src/extensions/markdown/index.ts +0 -13
  382. package/src/extensions/markdown/link.ts +0 -47
  383. package/src/extensions/markdown/parser.test.ts +0 -75
  384. package/src/extensions/markdown/styles.ts +0 -135
  385. package/src/extensions/markdown/table.ts +0 -144
  386. package/src/extensions/mention.ts +0 -41
  387. package/src/extensions/modes.ts +0 -41
  388. package/src/extensions/outliner/commands.ts +0 -270
  389. package/src/extensions/outliner/editor.test.ts +0 -33
  390. package/src/extensions/outliner/editor.ts +0 -184
  391. package/src/extensions/outliner/index.ts +0 -7
  392. package/src/extensions/outliner/outliner.test.ts +0 -100
  393. package/src/extensions/outliner/outliner.ts +0 -167
  394. package/src/extensions/outliner/selection.ts +0 -50
  395. package/src/extensions/outliner/tree.test.ts +0 -168
  396. package/src/extensions/outliner/tree.ts +0 -317
  397. package/src/extensions/preview/index.ts +0 -5
  398. package/src/extensions/preview/preview.ts +0 -193
  399. package/src/extensions/selection.ts +0 -100
  400. package/src/extensions/typewriter.ts +0 -68
  401. package/src/stories/Command.stories.tsx +0 -101
  402. package/src/stories/CommandMenu.stories.tsx +0 -161
  403. package/src/styles/index.ts +0 -7
  404. package/src/styles/markdown.ts +0 -26
  405. package/src/styles/theme.ts +0 -267
  406. package/src/styles/tokens.ts +0 -17
  407. package/src/testing/index.ts +0 -5
  408. package/src/testing/util.ts +0 -7
  409. package/src/types/index.ts +0 -5
  410. package/src/types/types.ts +0 -32
  411. package/src/util/cursor.ts +0 -56
  412. package/src/util/debug.ts +0 -64
  413. package/src/util/dom.ts +0 -56
  414. package/src/util/facet.ts +0 -13
@@ -2,8 +2,6 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { syntaxTree } from '@codemirror/language';
8
6
  import { type EditorView } from '@codemirror/view';
9
7
  import { type Meta, type StoryObj } from '@storybook/react-vite';
@@ -11,22 +9,28 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
11
9
  import { createPortal } from 'react-dom';
12
10
 
13
11
  import { invariant } from '@dxos/invariant';
14
- import { faker } from '@dxos/random';
15
- import { Popover } from '@dxos/react-ui';
16
- import { Card } from '@dxos/react-ui-stack';
17
- import { hoverableControlItem, hoverableControlItemTransition, hoverableControls } from '@dxos/react-ui-theme';
18
- import { withLayout, withTheme } from '@dxos/storybook-utils';
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';
16
+ import {
17
+ type PreviewBlock,
18
+ type PreviewLinkRef,
19
+ type PreviewLinkTarget,
20
+ getLinkRef,
21
+ image,
22
+ preview,
23
+ } from '@dxos/ui-editor';
24
+ import { hoverableControls } from '@dxos/ui-theme';
19
25
  import { trim } from '@dxos/util';
20
26
 
21
- import { PreviewProvider, useRefPopover } from '../components';
22
- import { type PreviewLinkRef, type PreviewLinkTarget, getLinkRef, image, preview } from '../extensions';
23
-
27
+ import { type EditorController, EditorPreviewProvider, useEditorPreview } from '../components';
24
28
  import { EditorStory } from './components';
25
29
 
26
- const handlePreviewLookup = async ({ label, ref }: PreviewLinkRef): Promise<PreviewLinkTarget> => {
30
+ const handlePreviewLookup = async ({ dxn, label }: PreviewLinkRef): Promise<PreviewLinkTarget> => {
27
31
  // Random text.
28
- faker.seed(ref.split('').reduce((acc: number, char: string) => acc + char.charCodeAt(0), 1));
29
- 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');
30
34
  return {
31
35
  label,
32
36
  text,
@@ -45,15 +49,27 @@ const useRefTarget = (link: PreviewLinkRef): PreviewLinkTarget | undefined => {
45
49
  };
46
50
 
47
51
  const PreviewCard = () => {
48
- const { target } = useRefPopover('PreviewCard');
52
+ const { target } = useEditorPreview('PreviewCard');
53
+ if (!target) {
54
+ return null;
55
+ }
56
+
49
57
  return (
50
58
  <Popover.Portal>
51
59
  <Popover.Content onOpenAutoFocus={(event) => event.preventDefault()}>
52
- <Popover.Viewport>
53
- <Card.SurfaceRoot role='card--popover'>
54
- <Card.Heading>{target?.label}</Card.Heading>
55
- {target && <Card.Text classNames='line-clamp-3'>{target.text}</Card.Text>}
56
- </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>
57
73
  </Popover.Viewport>
58
74
  <Popover.Arrow />
59
75
  </Popover.Content>
@@ -72,7 +88,7 @@ type PreviewAction =
72
88
  link: PreviewLinkRef;
73
89
  };
74
90
 
75
- const PreviewBlock = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElement; view?: EditorView }) => {
91
+ const PreviewBlockComponent = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElement; view?: EditorView }) => {
76
92
  const target = useRefTarget(link);
77
93
 
78
94
  const handleAction = useCallback(
@@ -85,7 +101,7 @@ const PreviewBlock = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElemen
85
101
  }
86
102
 
87
103
  const link = getLinkRef(view.state, node);
88
- if (link?.ref !== action.link.ref) {
104
+ if (link?.dxn !== action.link.dxn) {
89
105
  return;
90
106
  }
91
107
 
@@ -127,41 +143,45 @@ const PreviewBlock = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElemen
127
143
  }
128
144
  }, [handleAction, link, target]);
129
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
+
130
164
  return createPortal(
131
- <Card.StaticRoot classNames={hoverableControls}>
132
- <div className='flex items-start'>
165
+ <Menu.Root>
166
+ <Card.Root classNames={hoverableControls}>
133
167
  {!view?.state.readOnly && (
134
- <Card.Toolbar classNames='is-min p-[--dx-cardSpacingInline]'>
135
- {(link.suggest && (
136
- <>
137
- <Card.ToolbarIconButton label='Discard' icon='ph--x--regular' onClick={handleDelete} />
138
- {target && (
139
- <Card.ToolbarIconButton
140
- classNames='bg-successSurface text-successSurfaceText'
141
- label='Apply'
142
- icon='ph--check--regular'
143
- onClick={handleInsert}
144
- />
145
- )}
146
- </>
147
- )) || (
148
- <Card.ToolbarIconButton
149
- iconOnly
150
- label='Delete'
151
- icon='ph--x--regular'
152
- classNames={[hoverableControlItem, hoverableControlItemTransition]}
153
- onClick={handleDelete}
154
- />
155
- )}
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} />
156
176
  </Card.Toolbar>
157
177
  )}
158
- <Card.Heading classNames='grow order-first mie-0'>
159
- {/* <span className='text-xs text-subdued mie-2'>Prompt</span> */}
160
- {link.label}
161
- </Card.Heading>
162
- </div>
163
- {target && <Card.Text classNames='line-clamp-3 mbs-0'>{target.text}</Card.Text>}
164
- </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>,
165
185
  el,
166
186
  );
167
187
  };
@@ -169,62 +189,59 @@ const PreviewBlock = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElemen
169
189
  const meta = {
170
190
  title: 'ui/react-ui-editor/Preview',
171
191
  component: EditorStory,
172
- decorators: [withTheme, withLayout({ fullscreen: true })],
173
- parameters: { layout: 'fullscreen' },
192
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
193
+ parameters: {
194
+ layout: 'fullscreen',
195
+ },
174
196
  } satisfies Meta<typeof EditorStory>;
175
197
 
176
198
  export default meta;
177
199
 
178
200
  type Story = StoryObj<typeof meta>;
179
201
 
202
+ const text = trim`
203
+ # Preview
204
+
205
+ This project is part of the [DXOS](dxn:queue:data:123) SDK.
206
+
207
+ ![DXOS](dxn:queue:data:123)
208
+
209
+ It consists of [ECHO](dxn:queue:data:echo), [HALO](dxn:queue:data:halo), and [MESH](dxn:queue:data:mesh).
210
+
211
+ ## Deep dive
212
+
213
+ ![ECHO](dxn:queue:data:echo)
214
+
215
+ `;
216
+
180
217
  export const Default: Story = {
181
218
  render: () => {
182
- const [view, setView] = useState<EditorView>();
183
- const [previewBlocks, setPreviewBlocks] = useState<{ link: PreviewLinkRef; el: HTMLElement }[]>([]);
184
-
219
+ const [controller, setController] = useState<EditorController | null>(null);
220
+ const [previewBlocks, setPreviewBlocks] = useState<PreviewBlock[]>([]);
185
221
  const extensions = useMemo(() => {
186
222
  return [
187
223
  image(),
188
224
  preview({
189
- addBlockContainer: (link, el) => {
190
- setPreviewBlocks((prev) => [...prev, { link, el }]);
225
+ addBlockContainer: (block) => {
226
+ setPreviewBlocks((prev) => [...prev, block]);
191
227
  },
192
- removeBlockContainer: (link) => {
193
- setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== link.ref));
228
+ removeBlockContainer: (block) => {
229
+ setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.dxn !== block.link.dxn));
194
230
  },
195
231
  }),
196
232
  ];
197
233
  }, []);
198
234
 
199
- const handleViewRef = useCallback((instance?: EditorView | null) => {
200
- setView(instance ?? undefined);
201
- }, []);
202
-
235
+ // TODO(burdon): Migrate to Editor.Root.
203
236
  return (
204
- <PreviewProvider onLookup={handlePreviewLookup}>
205
- <EditorStory
206
- ref={handleViewRef}
207
- text={trim`
208
- # Preview
209
-
210
- This project is part of the [DXOS][dxn:queue:data:123] SDK.
211
-
212
- ![DXOS][?dxn:queue:data:123]
213
-
214
- It consists of [ECHO][dxn:queue:data:echo], [HALO][dxn:queue:data:halo], and [MESH][dxn:queue:data:mesh].
215
-
216
- ## Deep dive
217
-
218
- ![ECHO][dxn:queue:data:echo]
219
-
220
- `}
221
- extensions={extensions}
222
- />
237
+ <EditorPreviewProvider onLookup={handlePreviewLookup}>
238
+ <EditorStory ref={setController} text={text} extensions={extensions} />
223
239
  <PreviewCard />
224
- {previewBlocks.map(({ link, el }) => (
225
- <PreviewBlock key={link.ref} link={link} el={el} view={view} />
226
- ))}
227
- </PreviewProvider>
240
+ {controller?.view &&
241
+ previewBlocks.map(({ link, el }) => (
242
+ <PreviewBlockComponent key={link.dxn} link={link} el={el} view={controller.view!} />
243
+ ))}
244
+ </EditorPreviewProvider>
228
245
  );
229
246
  },
230
247
  };
@@ -0,0 +1,104 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useEffect, useState } from 'react';
7
+ import { createPortal } from 'react-dom';
8
+
9
+ import { useThemeContext } from '@dxos/react-ui';
10
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
11
+ import {
12
+ type XmlWidgetRegistry,
13
+ type XmlWidgetState,
14
+ createBasicExtensions,
15
+ createThemeExtensions,
16
+ decorateMarkdown,
17
+ extendedMarkdown,
18
+ xmlTags,
19
+ } from '@dxos/ui-editor';
20
+ import { safeParseInt, trim } from '@dxos/util';
21
+
22
+ import { useTextEditor } from '../hooks';
23
+
24
+ const registry = {
25
+ /**
26
+ * Custom tag: <test/>
27
+ */
28
+ test: {
29
+ block: true,
30
+ Component: ({ start = '0' }) => {
31
+ const [count, setCount] = useState<number>(safeParseInt(start, 0));
32
+ useEffect(() => {
33
+ const interval = setInterval(() => {
34
+ setCount((prev) => {
35
+ if (prev >= 200) {
36
+ clearInterval(interval);
37
+ return prev;
38
+ }
39
+
40
+ return prev + 1;
41
+ });
42
+ }, 100);
43
+ return () => clearInterval(interval);
44
+ }, []);
45
+
46
+ return <div className='p-2 border border-separator rounded-sm'>Test {count}</div>;
47
+ },
48
+ },
49
+ } satisfies XmlWidgetRegistry;
50
+
51
+ const DefaultStory = ({ text }: { text?: string }) => {
52
+ const { themeMode } = useThemeContext();
53
+ const [widgets, setWidgets] = useState<XmlWidgetState[]>([]);
54
+ const { parentRef } = useTextEditor({
55
+ initialValue: text,
56
+ extensions: [
57
+ createThemeExtensions({ themeMode }),
58
+ createBasicExtensions({ lineWrapping: true }),
59
+ decorateMarkdown(),
60
+ extendedMarkdown({ registry }),
61
+ xmlTags({ registry, setWidgets }),
62
+ ],
63
+ });
64
+
65
+ return (
66
+ <>
67
+ <div ref={parentRef} className='w-full p-4' />
68
+ {widgets.map(({ id, root, Component, props }) => (
69
+ <div key={id}>{createPortal(<Component {...props} />, root)}</div>
70
+ ))}
71
+ </>
72
+ );
73
+ };
74
+
75
+ const text = trim`
76
+ # Tags
77
+
78
+ React widget below.
79
+
80
+ <test id="t-1" />
81
+
82
+ <test id="t-2" start="100" />
83
+
84
+ React widget above.
85
+ `;
86
+
87
+ const meta = {
88
+ title: 'ui/react-ui-editor/Tags',
89
+ render: DefaultStory,
90
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
91
+ parameters: {
92
+ layout: 'fullscreen',
93
+ },
94
+ } satisfies Meta<typeof DefaultStory>;
95
+
96
+ export default meta;
97
+
98
+ type Story = StoryObj<typeof meta>;
99
+
100
+ export const Default: Story = {
101
+ args: {
102
+ text,
103
+ },
104
+ };
@@ -2,30 +2,25 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { javascript } from '@codemirror/lang-javascript';
8
6
  import { openSearchPanel } from '@codemirror/search';
9
7
  import { type Meta, type StoryObj } from '@storybook/react-vite';
10
8
  import React from 'react';
11
9
 
12
10
  import { log } from '@dxos/log';
13
- import { withLayout, withTheme } from '@dxos/storybook-utils';
14
-
15
- import { editorMonospace } from '../defaults';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
16
12
  import {
17
13
  InputModeExtensions,
18
- autocomplete,
19
14
  decorateMarkdown,
20
15
  folding,
21
16
  image,
17
+ join,
22
18
  listener,
23
19
  mention,
24
20
  selectionState,
25
21
  staticCompletion,
26
22
  typeahead,
27
- } from '../extensions';
28
- import { str } from '../testing';
23
+ } from '@dxos/ui-editor';
29
24
 
30
25
  import {
31
26
  EditorStory,
@@ -34,18 +29,19 @@ import {
34
29
  defaultExtensions,
35
30
  global,
36
31
  largeWithImages,
37
- links,
38
32
  longText,
39
33
  names,
40
- renderLinkButton,
41
34
  text,
42
35
  } from './components';
43
36
 
44
37
  const meta = {
45
38
  title: 'ui/react-ui-editor/TextEditor',
46
39
  component: EditorStory,
47
- decorators: [withTheme, withLayout({ fullscreen: true })],
48
- parameters: { layout: 'fullscreen', controls: { disable: true } },
40
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
41
+ parameters: {
42
+ layout: 'fullscreen',
43
+ controls: { disable: true },
44
+ },
49
45
  } satisfies Meta<typeof EditorStory>;
50
46
 
51
47
  export default meta;
@@ -99,7 +95,7 @@ export const NoExtensions: Story = {
99
95
  export const Vim: Story = {
100
96
  render: () => (
101
97
  <EditorStory
102
- 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)}
103
99
  extensions={[defaultExtensions, InputModeExtensions.vim]}
104
100
  />
105
101
  ),
@@ -112,13 +108,13 @@ export const Vim: Story = {
112
108
  export const Listener: Story = {
113
109
  render: () => (
114
110
  <EditorStory
115
- text={str('# Listener', '', content.footer)}
111
+ text={join('# Listener', '', content.footer)}
116
112
  extensions={[
117
113
  listener({
118
- onFocus: (focusing) => {
114
+ onFocus: ({ focusing }) => {
119
115
  log.info('listener', { focusing });
120
116
  },
121
- onChange: (text) => {
117
+ onChange: ({ text }) => {
122
118
  log.info('listener', { text });
123
119
  },
124
120
  }),
@@ -142,7 +138,7 @@ export const Folding: Story = {
142
138
  export const Scrolling: Story = {
143
139
  render: () => (
144
140
  <EditorStory
145
- text={str('# Large Document', '', longText)}
141
+ text={join('# Large Document', '', longText)}
146
142
  extensions={selectionState({
147
143
  setState: (id, state) => global.set(id, state),
148
144
  getState: (id) => global.get(id),
@@ -153,7 +149,7 @@ export const Scrolling: Story = {
153
149
 
154
150
  export const ScrollingWithImages: Story = {
155
151
  render: () => (
156
- <EditorStory text={str('# Large Document', '', largeWithImages)} extensions={[decorateMarkdown(), image()]} />
152
+ <EditorStory text={join('# Large Document', '', largeWithImages)} extensions={[decorateMarkdown(), image()]} />
157
153
  ),
158
154
  };
159
155
 
@@ -161,7 +157,7 @@ export const ScrollTo: Story = {
161
157
  render: () => {
162
158
  // NOTE: Selection won't appear if text is reformatted.
163
159
  const word = 'Scroll to here...';
164
- const text = str('# Scroll To', longText, '', word, '', longText);
160
+ const text = join('# Scroll To', longText, '', word, '', longText);
165
161
  const idx = text.indexOf(word);
166
162
  return (
167
163
  <EditorStory
@@ -180,31 +176,7 @@ export const ScrollTo: Story = {
180
176
 
181
177
  export const Typescript: Story = {
182
178
  render: () => (
183
- <EditorStory
184
- text={content.typescript}
185
- lineNumbers
186
- extensions={[editorMonospace, javascript({ typescript: true })]}
187
- />
188
- ),
189
- };
190
-
191
- //
192
- // Autocomplete
193
- //
194
-
195
- export const Autocomplete: Story = {
196
- render: () => (
197
- <EditorStory
198
- text={str('# Autocomplete', '', 'Press Ctrl-Space...', content.footer)}
199
- extensions={[
200
- decorateMarkdown({ renderLinkButton }),
201
- autocomplete({
202
- onSearch: (text) => {
203
- return links.filter(({ label }) => label.toLowerCase().includes(text.toLowerCase()));
204
- },
205
- }),
206
- ]}
207
- />
179
+ <EditorStory text={content.typescript} lineNumbers monospace extensions={javascript({ typescript: true })} />
208
180
  ),
209
181
  };
210
182
 
@@ -212,14 +184,13 @@ export const Autocomplete: Story = {
212
184
  // Typeahead
213
185
  //
214
186
 
215
- const completions = ['type', 'AND', 'OR', 'NOT', 'dxos.org'];
187
+ const completions = ['hello world!', 'dxos.org'];
216
188
 
217
189
  export const Typeahead: Story = {
218
190
  render: () => (
219
191
  <EditorStory
220
- text={str('# Typeahead', '')}
192
+ text={join('# Typeahead', '')}
221
193
  extensions={[
222
- decorateMarkdown({ renderLinkButton }),
223
194
  typeahead({
224
195
  onComplete: staticCompletion(completions, { minLength: 2 }),
225
196
  }),
@@ -235,7 +206,7 @@ export const Typeahead: Story = {
235
206
  export const Mention: Story = {
236
207
  render: () => (
237
208
  <EditorStory
238
- text={str('# Mention', '', 'Type @...', content.footer)}
209
+ text={join('# Mention', '', 'Type @...', content.footer)}
239
210
  extensions={[
240
211
  mention({
241
212
  onSearch: (text) => names.filter((name) => name.toLowerCase().startsWith(text.toLowerCase())),
@@ -252,7 +223,7 @@ export const Mention: Story = {
252
223
  export const Search: Story = {
253
224
  render: () => (
254
225
  <EditorStory
255
- text={str('# Search', text)}
226
+ text={join('# Search', text)}
256
227
  extensions={defaultExtensions}
257
228
  onReady={(view) => openSearchPanel(view)}
258
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
+ };