@dxos/react-ui-editor 0.8.4-main.dedc0f3 → 0.8.4-main.dfabb4ec29

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 (440) hide show
  1. package/dist/lib/browser/index.mjs +1416 -8735
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/browser/translations.mjs +39 -0
  5. package/dist/lib/browser/translations.mjs.map +7 -0
  6. package/dist/lib/node-esm/index.mjs +1416 -8734
  7. package/dist/lib/node-esm/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/meta.json +1 -1
  9. package/dist/lib/node-esm/translations.mjs +41 -0
  10. package/dist/lib/node-esm/translations.mjs.map +7 -0
  11. package/dist/types/src/components/Editor/Editor.d.ts +54 -15
  12. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  13. package/dist/types/src/components/Editor/Editor.stories.d.ts +23 -0
  14. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  15. package/dist/types/src/components/Editor/EditorView.d.ts +31 -0
  16. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  17. package/dist/types/src/components/Editor/controller.d.ts +10 -0
  18. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +34 -0
  20. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  22. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  24. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  26. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +47 -0
  28. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  30. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  32. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  34. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  35. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  36. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  37. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  38. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  40. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  42. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  44. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  46. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -17
  48. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  50. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  51. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  52. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  53. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  54. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  55. package/dist/types/src/components/index.d.ts +2 -2
  56. package/dist/types/src/components/index.d.ts.map +1 -1
  57. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  58. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  59. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  60. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  61. package/dist/types/src/extensions/index.d.ts +1 -24
  62. package/dist/types/src/extensions/index.d.ts.map +1 -1
  63. package/dist/types/src/hooks/index.d.ts +1 -0
  64. package/dist/types/src/hooks/index.d.ts.map +1 -1
  65. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  66. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  67. package/dist/types/src/hooks/useTextEditor.d.ts +6 -10
  68. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  69. package/dist/types/src/index.d.ts +0 -9
  70. package/dist/types/src/index.d.ts.map +1 -1
  71. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  72. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  73. package/dist/types/src/stories/Comments.stories.d.ts +4 -4
  74. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  75. package/dist/types/src/stories/EditorToolbar.stories.d.ts +30 -29
  76. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/Experimental.stories.d.ts +5 -5
  78. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Markdown.stories.d.ts +4 -4
  80. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Outliner.stories.d.ts +2 -3
  82. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -6
  84. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  85. package/dist/types/src/stories/Preview.stories.d.ts +5 -4
  86. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  87. package/dist/types/src/stories/Tags.stories.d.ts +0 -1
  88. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  89. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -5
  90. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  91. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  92. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  93. package/dist/types/src/stories/components/EditorStory.d.ts +11 -20
  94. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  95. package/dist/types/src/stories/components/util.d.ts +4 -3
  96. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  97. package/dist/types/src/translations.d.ts +26 -26
  98. package/dist/types/src/translations.d.ts.map +1 -1
  99. package/dist/types/src/util/index.d.ts +0 -6
  100. package/dist/types/src/util/index.d.ts.map +1 -1
  101. package/dist/types/src/util/react.d.ts +6 -5
  102. package/dist/types/src/util/react.d.ts.map +1 -1
  103. package/dist/types/tsconfig.tsbuildinfo +1 -1
  104. package/package.json +85 -78
  105. package/src/components/Editor/Editor.stories.tsx +89 -0
  106. package/src/components/Editor/Editor.tsx +171 -24
  107. package/src/components/Editor/EditorView.tsx +102 -0
  108. package/src/components/Editor/controller.ts +50 -0
  109. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +226 -0
  110. package/src/components/EditorMenuProvider/index.ts +10 -0
  111. package/src/components/EditorMenuProvider/menu-presets.ts +125 -0
  112. package/src/components/EditorMenuProvider/menu.ts +70 -0
  113. package/src/components/EditorMenuProvider/popover.ts +287 -0
  114. package/src/components/EditorMenuProvider/useEditorMenu.ts +180 -0
  115. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  116. package/src/components/EditorPreviewProvider/index.ts +5 -0
  117. package/src/components/EditorToolbar/EditorToolbar.tsx +90 -111
  118. package/src/components/EditorToolbar/blocks.ts +55 -47
  119. package/src/components/EditorToolbar/formatting.ts +44 -45
  120. package/src/components/EditorToolbar/headings.ts +47 -50
  121. package/src/components/EditorToolbar/image.ts +16 -14
  122. package/src/components/EditorToolbar/index.ts +2 -7
  123. package/src/components/EditorToolbar/lists.ts +42 -40
  124. package/src/components/EditorToolbar/search.ts +16 -14
  125. package/src/components/EditorToolbar/types.ts +8 -0
  126. package/src/components/EditorToolbar/view-mode.ts +37 -42
  127. package/src/components/index.ts +3 -2
  128. package/src/extensions/Assistant.stories.tsx +112 -0
  129. package/src/extensions/assistant-extension.tsx +223 -0
  130. package/src/extensions/index.ts +2 -25
  131. package/src/hooks/index.ts +1 -0
  132. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  133. package/src/hooks/useTextEditor.ts +39 -45
  134. package/src/index.ts +0 -13
  135. package/src/stories/Automerge.stories.tsx +174 -0
  136. package/src/stories/Comments.stories.tsx +52 -48
  137. package/src/stories/EditorToolbar.stories.tsx +46 -58
  138. package/src/stories/Experimental.stories.tsx +17 -19
  139. package/src/stories/Markdown.stories.tsx +19 -19
  140. package/src/stories/Outliner.stories.tsx +45 -38
  141. package/src/stories/Popover.stories.tsx +157 -0
  142. package/src/stories/Preview.stories.tsx +105 -87
  143. package/src/stories/Tags.stories.tsx +39 -16
  144. package/src/stories/TextEditor.stories.tsx +20 -51
  145. package/src/stories/Theme.stories.tsx +61 -0
  146. package/src/stories/components/EditorStory.tsx +46 -30
  147. package/src/stories/components/util.tsx +90 -59
  148. package/src/translations.ts +30 -25
  149. package/src/util/index.ts +1 -7
  150. package/src/util/react.tsx +8 -13
  151. package/dist/lib/browser/chunk-22UMM3QJ.mjs +0 -22
  152. package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +0 -7
  153. package/dist/lib/browser/testing/index.mjs +0 -6
  154. package/dist/lib/browser/testing/index.mjs.map +0 -7
  155. package/dist/lib/browser/types/index.mjs +0 -13
  156. package/dist/lib/browser/types/index.mjs.map +0 -7
  157. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs +0 -24
  158. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +0 -7
  159. package/dist/lib/node-esm/testing/index.mjs +0 -8
  160. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  161. package/dist/lib/node-esm/types/index.mjs +0 -14
  162. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  163. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  164. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  165. package/dist/types/src/components/Popover/CommandMenu.d.ts +0 -34
  166. package/dist/types/src/components/Popover/CommandMenu.d.ts.map +0 -1
  167. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts +0 -14
  168. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts.map +0 -1
  169. package/dist/types/src/components/Popover/RefPopover.d.ts +0 -37
  170. package/dist/types/src/components/Popover/RefPopover.d.ts.map +0 -1
  171. package/dist/types/src/components/Popover/index.d.ts +0 -4
  172. package/dist/types/src/components/Popover/index.d.ts.map +0 -1
  173. package/dist/types/src/defaults.d.ts +0 -14
  174. package/dist/types/src/defaults.d.ts.map +0 -1
  175. package/dist/types/src/extensions/annotations.d.ts +0 -9
  176. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  177. package/dist/types/src/extensions/autocomplete.d.ts +0 -26
  178. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  179. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  180. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  181. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  182. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  183. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  184. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  185. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  186. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  187. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  188. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  189. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  190. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  191. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  192. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  193. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  194. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  195. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  196. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  197. package/dist/types/src/extensions/autoscroll.d.ts +0 -10
  198. package/dist/types/src/extensions/autoscroll.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 -19
  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 -78
  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 -22
  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 -25
  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 -30
  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/tags/extended-markdown.d.ts +0 -10
  304. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  305. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  306. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  307. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  308. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  309. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  310. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  311. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -71
  312. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  313. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  314. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  315. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  316. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  317. package/dist/types/src/stories/Command.stories.d.ts +0 -15
  318. package/dist/types/src/stories/Command.stories.d.ts.map +0 -1
  319. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  320. package/dist/types/src/styles/index.d.ts +0 -4
  321. package/dist/types/src/styles/index.d.ts.map +0 -1
  322. package/dist/types/src/styles/markdown.d.ts +0 -8
  323. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  324. package/dist/types/src/styles/theme.d.ts +0 -38
  325. package/dist/types/src/styles/theme.d.ts.map +0 -1
  326. package/dist/types/src/styles/tokens.d.ts +0 -3
  327. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  328. package/dist/types/src/testing/index.d.ts +0 -2
  329. package/dist/types/src/testing/index.d.ts.map +0 -1
  330. package/dist/types/src/testing/util.d.ts +0 -3
  331. package/dist/types/src/testing/util.d.ts.map +0 -1
  332. package/dist/types/src/types/index.d.ts +0 -2
  333. package/dist/types/src/types/index.d.ts.map +0 -1
  334. package/dist/types/src/types/types.d.ts +0 -21
  335. package/dist/types/src/types/types.d.ts.map +0 -1
  336. package/dist/types/src/util/cursor.d.ts +0 -31
  337. package/dist/types/src/util/cursor.d.ts.map +0 -1
  338. package/dist/types/src/util/debug.d.ts +0 -17
  339. package/dist/types/src/util/debug.d.ts.map +0 -1
  340. package/dist/types/src/util/decorations.d.ts +0 -4
  341. package/dist/types/src/util/decorations.d.ts.map +0 -1
  342. package/dist/types/src/util/dom.d.ts +0 -10
  343. package/dist/types/src/util/dom.d.ts.map +0 -1
  344. package/dist/types/src/util/domino.d.ts +0 -18
  345. package/dist/types/src/util/domino.d.ts.map +0 -1
  346. package/dist/types/src/util/facet.d.ts +0 -3
  347. package/dist/types/src/util/facet.d.ts.map +0 -1
  348. package/src/components/EditorToolbar/util.ts +0 -76
  349. package/src/components/Popover/CommandMenu.tsx +0 -279
  350. package/src/components/Popover/RefDropdownMenu.tsx +0 -89
  351. package/src/components/Popover/RefPopover.tsx +0 -117
  352. package/src/components/Popover/index.ts +0 -7
  353. package/src/defaults.ts +0 -52
  354. package/src/extensions/annotations.ts +0 -55
  355. package/src/extensions/autocomplete.ts +0 -219
  356. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  357. package/src/extensions/automerge/automerge.test.tsx +0 -78
  358. package/src/extensions/automerge/automerge.ts +0 -86
  359. package/src/extensions/automerge/cursor.ts +0 -28
  360. package/src/extensions/automerge/defs.ts +0 -31
  361. package/src/extensions/automerge/index.ts +0 -5
  362. package/src/extensions/automerge/sync.ts +0 -75
  363. package/src/extensions/automerge/update-automerge.ts +0 -50
  364. package/src/extensions/automerge/update-codemirror.ts +0 -115
  365. package/src/extensions/autoscroll.ts +0 -151
  366. package/src/extensions/awareness/awareness-provider.ts +0 -127
  367. package/src/extensions/awareness/awareness.ts +0 -315
  368. package/src/extensions/awareness/index.ts +0 -6
  369. package/src/extensions/blast.ts +0 -363
  370. package/src/extensions/command/action.ts +0 -56
  371. package/src/extensions/command/command-menu.ts +0 -211
  372. package/src/extensions/command/command.ts +0 -34
  373. package/src/extensions/command/floating-menu.ts +0 -133
  374. package/src/extensions/command/hint.ts +0 -103
  375. package/src/extensions/command/index.ts +0 -10
  376. package/src/extensions/command/placeholder.ts +0 -113
  377. package/src/extensions/command/state.ts +0 -90
  378. package/src/extensions/command/typeahead.ts +0 -129
  379. package/src/extensions/command/useCommandMenu.ts +0 -119
  380. package/src/extensions/comments.ts +0 -597
  381. package/src/extensions/debug.ts +0 -15
  382. package/src/extensions/dnd.ts +0 -37
  383. package/src/extensions/factories.ts +0 -247
  384. package/src/extensions/focus.ts +0 -35
  385. package/src/extensions/folding.tsx +0 -46
  386. package/src/extensions/hashtag.tsx +0 -68
  387. package/src/extensions/json.ts +0 -57
  388. package/src/extensions/listener.ts +0 -38
  389. package/src/extensions/markdown/action.ts +0 -117
  390. package/src/extensions/markdown/bundle.ts +0 -93
  391. package/src/extensions/markdown/changes.test.ts +0 -26
  392. package/src/extensions/markdown/changes.ts +0 -149
  393. package/src/extensions/markdown/debug.ts +0 -44
  394. package/src/extensions/markdown/decorate.ts +0 -600
  395. package/src/extensions/markdown/formatting.test.ts +0 -498
  396. package/src/extensions/markdown/formatting.ts +0 -1267
  397. package/src/extensions/markdown/highlight.ts +0 -183
  398. package/src/extensions/markdown/image.ts +0 -118
  399. package/src/extensions/markdown/index.ts +0 -13
  400. package/src/extensions/markdown/link.ts +0 -47
  401. package/src/extensions/markdown/parser.test.ts +0 -75
  402. package/src/extensions/markdown/styles.ts +0 -135
  403. package/src/extensions/markdown/table.ts +0 -150
  404. package/src/extensions/mention.ts +0 -41
  405. package/src/extensions/modes.ts +0 -41
  406. package/src/extensions/outliner/commands.ts +0 -270
  407. package/src/extensions/outliner/editor.test.ts +0 -33
  408. package/src/extensions/outliner/editor.ts +0 -184
  409. package/src/extensions/outliner/index.ts +0 -7
  410. package/src/extensions/outliner/outliner.test.ts +0 -100
  411. package/src/extensions/outliner/outliner.ts +0 -167
  412. package/src/extensions/outliner/selection.ts +0 -50
  413. package/src/extensions/outliner/tree.test.ts +0 -168
  414. package/src/extensions/outliner/tree.ts +0 -317
  415. package/src/extensions/preview/index.ts +0 -5
  416. package/src/extensions/preview/preview.ts +0 -193
  417. package/src/extensions/selection.ts +0 -100
  418. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  419. package/src/extensions/tags/extended-markdown.ts +0 -78
  420. package/src/extensions/tags/index.ts +0 -7
  421. package/src/extensions/tags/streamer.ts +0 -244
  422. package/src/extensions/tags/xml-tags.ts +0 -335
  423. package/src/extensions/tags/xml-util.ts +0 -94
  424. package/src/extensions/typewriter.ts +0 -68
  425. package/src/stories/Command.stories.tsx +0 -90
  426. package/src/stories/CommandMenu.stories.tsx +0 -160
  427. package/src/styles/index.ts +0 -7
  428. package/src/styles/markdown.ts +0 -26
  429. package/src/styles/theme.ts +0 -267
  430. package/src/styles/tokens.ts +0 -17
  431. package/src/testing/index.ts +0 -5
  432. package/src/testing/util.ts +0 -7
  433. package/src/types/index.ts +0 -5
  434. package/src/types/types.ts +0 -32
  435. package/src/util/cursor.ts +0 -56
  436. package/src/util/debug.ts +0 -64
  437. package/src/util/decorations.ts +0 -21
  438. package/src/util/dom.ts +0 -34
  439. package/src/util/domino.ts +0 -51
  440. 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,61 +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 }[]>([]);
219
+ const [controller, setController] = useState<EditorController | null>(null);
220
+ const [previewBlocks, setPreviewBlocks] = useState<PreviewBlock[]>([]);
184
221
  const extensions = useMemo(() => {
185
222
  return [
186
223
  image(),
187
224
  preview({
188
- addBlockContainer: (link, el) => {
189
- setPreviewBlocks((prev) => [...prev, { link, el }]);
225
+ addBlockContainer: (block) => {
226
+ setPreviewBlocks((prev) => [...prev, block]);
190
227
  },
191
- removeBlockContainer: (link) => {
192
- 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));
193
230
  },
194
231
  }),
195
232
  ];
196
233
  }, []);
197
234
 
198
- const handleViewRef = useCallback((instance?: EditorView | null) => {
199
- setView(instance ?? undefined);
200
- }, []);
201
-
235
+ // TODO(burdon): Migrate to Editor.Root.
202
236
  return (
203
- <PreviewProvider onLookup={handlePreviewLookup}>
204
- <EditorStory
205
- ref={handleViewRef}
206
- text={trim`
207
- # Preview
208
-
209
- This project is part of the [DXOS](dxn:queue:data:123) SDK.
210
-
211
- ![DXOS](dxn:queue:data:123)
212
-
213
- It consists of [ECHO](dxn:queue:data:echo), [HALO](dxn:queue:data:halo), and [MESH](dxn:queue:data:mesh).
214
-
215
- ## Deep dive
216
-
217
- ![ECHO](dxn:queue:data:echo)
218
-
219
- `}
220
- extensions={extensions}
221
- />
237
+ <EditorPreviewProvider onLookup={handlePreviewLookup}>
238
+ <EditorStory ref={setController} text={text} extensions={extensions} />
222
239
  <PreviewCard />
223
- {previewBlocks.map(({ link, el }) => (
224
- <PreviewBlock key={link.ref} link={link} el={el} view={view} />
225
- ))}
226
- </PreviewProvider>
240
+ {controller?.view &&
241
+ previewBlocks.map(({ link, el }) => (
242
+ <PreviewBlockComponent key={link.dxn} link={link} el={el} view={controller.view!} />
243
+ ))}
244
+ </EditorPreviewProvider>
227
245
  );
228
246
  },
229
247
  };
@@ -2,16 +2,12 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
8
- import React, { useState } from 'react';
6
+ import React, { useEffect, useState } from 'react';
9
7
  import { createPortal } from 'react-dom';
10
8
 
11
9
  import { useThemeContext } from '@dxos/react-ui';
12
- import { withLayout, withTheme } from '@dxos/storybook-utils';
13
- import { trim } from '@dxos/util';
14
-
10
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
15
11
  import {
16
12
  type XmlWidgetRegistry,
17
13
  type XmlWidgetState,
@@ -20,14 +16,35 @@ import {
20
16
  decorateMarkdown,
21
17
  extendedMarkdown,
22
18
  xmlTags,
23
- } from '../extensions';
19
+ } from '@dxos/ui-editor';
20
+ import { safeParseInt, trim } from '@dxos/util';
21
+
24
22
  import { useTextEditor } from '../hooks';
25
23
 
26
24
  const registry = {
27
- // <test/>
28
- ['test' as const]: {
25
+ /**
26
+ * Custom tag: <test/>
27
+ */
28
+ test: {
29
29
  block: true,
30
- Component: () => <div className='p-2 border border-separator rounded'>Test</div>,
30
+ Component: ({ start = '0' }) => {
31
+ const [count, setCount] = useState<number>(safeParseInt(start, 0));
32
+ useEffect(() => {
33
+ const interval = setInterval(() => {
34
+ setCount((prev) => {
35
+ if (prev >= 200) {
36
+ clearInterval(interval);
37
+ return prev;
38
+ }
39
+
40
+ return prev + 1;
41
+ });
42
+ }, 100);
43
+ return () => clearInterval(interval);
44
+ }, []);
45
+
46
+ return <div className='p-2 border border-separator rounded-sm'>Test {count}</div>;
47
+ },
31
48
  },
32
49
  } satisfies XmlWidgetRegistry;
33
50
 
@@ -38,7 +55,7 @@ const DefaultStory = ({ text }: { text?: string }) => {
38
55
  initialValue: text,
39
56
  extensions: [
40
57
  createThemeExtensions({ themeMode }),
41
- createBasicExtensions({ lineWrapping: true, readOnly: true }),
58
+ createBasicExtensions({ lineWrapping: true }),
42
59
  decorateMarkdown(),
43
60
  extendedMarkdown({ registry }),
44
61
  xmlTags({ registry, setWidgets }),
@@ -47,8 +64,8 @@ const DefaultStory = ({ text }: { text?: string }) => {
47
64
 
48
65
  return (
49
66
  <>
50
- <div ref={parentRef} className='is-full p-4' />
51
- {widgets.map(({ Component, root, id, ...props }) => (
67
+ <div ref={parentRef} className='w-full p-4' />
68
+ {widgets.map(({ id, root, Component, props }) => (
52
69
  <div key={id}>{createPortal(<Component {...props} />, root)}</div>
53
70
  ))}
54
71
  </>
@@ -58,7 +75,11 @@ const DefaultStory = ({ text }: { text?: string }) => {
58
75
  const text = trim`
59
76
  # Tags
60
77
 
61
- <test id="123" />
78
+ React widget below.
79
+
80
+ <test id="t-1" />
81
+
82
+ <test id="t-2" start="100" />
62
83
 
63
84
  React widget above.
64
85
  `;
@@ -66,8 +87,10 @@ const text = trim`
66
87
  const meta = {
67
88
  title: 'ui/react-ui-editor/Tags',
68
89
  render: DefaultStory,
69
- decorators: [withTheme, withLayout({ fullscreen: true })],
70
- parameters: { layout: 'fullscreen' },
90
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
91
+ parameters: {
92
+ layout: 'fullscreen',
93
+ },
71
94
  } satisfies Meta<typeof DefaultStory>;
72
95
 
73
96
  export default meta;
@@ -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,33 +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
- onSuggest: (text) => {
203
- return links
204
- .filter(({ label }) => label.toLowerCase().includes(text.toLowerCase()))
205
- .map(({ label }) => label);
206
- },
207
- }),
208
- ]}
209
- />
179
+ <EditorStory text={content.typescript} lineNumbers monospace extensions={javascript({ typescript: true })} />
210
180
  ),
211
181
  };
212
182
 
@@ -214,14 +184,13 @@ export const Autocomplete: Story = {
214
184
  // Typeahead
215
185
  //
216
186
 
217
- const completions = ['type', 'AND', 'OR', 'NOT', 'dxos.org'];
187
+ const completions = ['hello world!', 'dxos.org'];
218
188
 
219
189
  export const Typeahead: Story = {
220
190
  render: () => (
221
191
  <EditorStory
222
- text={str('# Typeahead', '')}
192
+ text={join('# Typeahead', '')}
223
193
  extensions={[
224
- decorateMarkdown({ renderLinkButton }),
225
194
  typeahead({
226
195
  onComplete: staticCompletion(completions, { minLength: 2 }),
227
196
  }),
@@ -237,7 +206,7 @@ export const Typeahead: Story = {
237
206
  export const Mention: Story = {
238
207
  render: () => (
239
208
  <EditorStory
240
- text={str('# Mention', '', 'Type @...', content.footer)}
209
+ text={join('# Mention', '', 'Type @...', content.footer)}
241
210
  extensions={[
242
211
  mention({
243
212
  onSearch: (text) => names.filter((name) => name.toLowerCase().startsWith(text.toLowerCase())),
@@ -254,7 +223,7 @@ export const Mention: Story = {
254
223
  export const Search: Story = {
255
224
  render: () => (
256
225
  <EditorStory
257
- text={str('# Search', text)}
226
+ text={join('# Search', text)}
258
227
  extensions={defaultExtensions}
259
228
  onReady={(view) => openSearchPanel(view)}
260
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
+ };