@dxos/react-ui-editor 0.8.4-main.fffef41 → 0.9.0

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 (436) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +1126 -8845
  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 +1126 -8844
  9. package/dist/lib/node-esm/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/lib/node-esm/translations.mjs +41 -0
  12. package/dist/lib/node-esm/translations.mjs.map +7 -0
  13. package/dist/types/src/components/Editor/Editor.d.ts +41 -24
  14. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  15. package/dist/types/src/components/Editor/Editor.stories.d.ts +7 -4
  16. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/{EditorContent/EditorContent.d.ts → Editor/EditorView.d.ts} +9 -7
  18. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  19. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  20. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +3 -5
  21. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -1
  22. package/dist/types/src/components/EditorMenuProvider/index.d.ts +0 -1
  23. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -1
  24. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -1
  25. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -1
  26. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +9 -3
  27. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -1
  28. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +3 -3
  29. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -1
  30. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +1 -1
  31. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -1
  32. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +8 -6
  33. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  34. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  35. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  36. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  37. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  38. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  39. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  40. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  41. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  42. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -2
  43. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  44. package/dist/types/src/components/EditorToolbar/lists.d.ts +6 -0
  45. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -0
  46. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  47. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  48. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  49. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  50. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  51. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  52. package/dist/types/src/components/index.d.ts +0 -2
  53. package/dist/types/src/components/index.d.ts.map +1 -1
  54. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  55. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  56. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  57. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  58. package/dist/types/src/extensions/index.d.ts +1 -31
  59. package/dist/types/src/extensions/index.d.ts.map +1 -1
  60. package/dist/types/src/hooks/index.d.ts +1 -0
  61. package/dist/types/src/hooks/index.d.ts.map +1 -1
  62. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  63. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  64. package/dist/types/src/hooks/useTextEditor.d.ts +1 -1
  65. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  66. package/dist/types/src/index.d.ts +0 -9
  67. package/dist/types/src/index.d.ts.map +1 -1
  68. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  69. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  70. package/dist/types/src/stories/Comments.stories.d.ts +3 -2
  71. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  72. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  73. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  74. package/dist/types/src/stories/Experimental.stories.d.ts +4 -3
  75. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  76. package/dist/types/src/stories/Markdown.stories.d.ts +3 -2
  77. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  78. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  79. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  80. package/dist/types/src/stories/Popover.stories.d.ts +2 -2
  81. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  82. package/dist/types/src/stories/Preview.stories.d.ts +3 -2
  83. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  84. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  85. package/dist/types/src/stories/TextEditor.stories.d.ts +3 -2
  86. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  87. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  88. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  89. package/dist/types/src/stories/components/EditorStory.d.ts +9 -20
  90. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  91. package/dist/types/src/stories/components/util.d.ts +4 -3
  92. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  93. package/dist/types/src/translations.d.ts +26 -26
  94. package/dist/types/src/translations.d.ts.map +1 -1
  95. package/dist/types/src/util/index.d.ts +0 -5
  96. package/dist/types/src/util/index.d.ts.map +1 -1
  97. package/dist/types/src/util/react.d.ts +6 -5
  98. package/dist/types/src/util/react.d.ts.map +1 -1
  99. package/dist/types/tsconfig.tsbuildinfo +1 -1
  100. package/package.json +93 -86
  101. package/src/components/Editor/Editor.stories.tsx +26 -26
  102. package/src/components/Editor/Editor.tsx +68 -55
  103. package/src/components/Editor/EditorView.tsx +99 -0
  104. package/src/components/{EditorContent → Editor}/controller.ts +13 -4
  105. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +40 -39
  106. package/src/components/EditorMenuProvider/index.ts +0 -1
  107. package/src/components/EditorMenuProvider/menu-presets.ts +3 -1
  108. package/src/components/EditorMenuProvider/menu.ts +1 -2
  109. package/src/components/EditorMenuProvider/popover.ts +42 -9
  110. package/src/components/EditorMenuProvider/useEditorMenu.ts +21 -7
  111. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +6 -9
  112. package/src/components/EditorToolbar/EditorToolbar.tsx +37 -68
  113. package/src/components/EditorToolbar/blocks.ts +55 -48
  114. package/src/components/EditorToolbar/formatting.ts +44 -46
  115. package/src/components/EditorToolbar/headings.ts +45 -51
  116. package/src/components/EditorToolbar/image.ts +16 -14
  117. package/src/components/EditorToolbar/index.ts +2 -3
  118. package/src/components/EditorToolbar/lists.ts +58 -0
  119. package/src/components/EditorToolbar/search.ts +16 -14
  120. package/src/components/EditorToolbar/types.ts +8 -0
  121. package/src/components/EditorToolbar/view-mode.ts +37 -43
  122. package/src/components/index.ts +0 -5
  123. package/src/extensions/Assistant.stories.tsx +112 -0
  124. package/src/extensions/assistant-extension.tsx +223 -0
  125. package/src/extensions/index.ts +2 -32
  126. package/src/hooks/index.ts +1 -0
  127. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  128. package/src/hooks/useTextEditor.ts +9 -3
  129. package/src/index.ts +0 -13
  130. package/src/stories/Automerge.stories.tsx +177 -0
  131. package/src/stories/Comments.stories.tsx +48 -43
  132. package/src/stories/EditorToolbar.stories.tsx +40 -53
  133. package/src/stories/Experimental.stories.tsx +14 -16
  134. package/src/stories/Markdown.stories.tsx +16 -16
  135. package/src/stories/Outliner.stories.tsx +11 -12
  136. package/src/stories/Popover.stories.tsx +30 -34
  137. package/src/stories/Preview.stories.tsx +72 -58
  138. package/src/stories/Tags.stories.tsx +24 -15
  139. package/src/stories/TextEditor.stories.tsx +13 -19
  140. package/src/stories/Theme.stories.tsx +61 -0
  141. package/src/stories/components/EditorStory.tsx +33 -30
  142. package/src/stories/components/util.tsx +51 -52
  143. package/src/translations.ts +30 -25
  144. package/src/util/index.ts +1 -6
  145. package/src/util/react.tsx +8 -13
  146. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  147. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  148. package/dist/lib/browser/types/index.mjs +0 -13
  149. package/dist/lib/browser/types/index.mjs.map +0 -7
  150. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  151. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  152. package/dist/lib/node-esm/types/index.mjs +0 -14
  153. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  154. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +0 -1
  155. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +0 -26
  156. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +0 -1
  157. package/dist/types/src/components/EditorContent/controller.d.ts.map +0 -1
  158. package/dist/types/src/components/EditorContent/index.d.ts +0 -3
  159. package/dist/types/src/components/EditorContent/index.d.ts.map +0 -1
  160. package/dist/types/src/components/EditorMenuProvider/util.d.ts +0 -8
  161. package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +0 -1
  162. package/dist/types/src/components/EditorToolbar/actions.d.ts +0 -39
  163. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +0 -1
  164. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +0 -11
  165. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +0 -1
  166. package/dist/types/src/defaults.d.ts +0 -14
  167. package/dist/types/src/defaults.d.ts.map +0 -1
  168. package/dist/types/src/extensions/annotations.d.ts +0 -9
  169. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  170. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -17
  171. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  172. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  173. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  174. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  175. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  176. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  177. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  178. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  179. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  180. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  181. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  182. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  183. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  184. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  185. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  186. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  187. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  188. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  189. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  190. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  191. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  192. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  193. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  194. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  195. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  196. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  197. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  198. package/dist/types/src/extensions/autoscroll.d.ts +0 -20
  199. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  200. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  201. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  202. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  203. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  204. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  205. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  206. package/dist/types/src/extensions/blast.d.ts +0 -25
  207. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  208. package/dist/types/src/extensions/blocks.d.ts +0 -2
  209. package/dist/types/src/extensions/blocks.d.ts.map +0 -1
  210. package/dist/types/src/extensions/bookmarks.d.ts +0 -12
  211. package/dist/types/src/extensions/bookmarks.d.ts.map +0 -1
  212. package/dist/types/src/extensions/comments.d.ts +0 -95
  213. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  214. package/dist/types/src/extensions/debug.d.ts +0 -3
  215. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  216. package/dist/types/src/extensions/dnd.d.ts +0 -9
  217. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  218. package/dist/types/src/extensions/factories.d.ts +0 -83
  219. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  220. package/dist/types/src/extensions/focus.d.ts +0 -7
  221. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  222. package/dist/types/src/extensions/folding.d.ts +0 -7
  223. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  224. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  225. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  226. package/dist/types/src/extensions/json.d.ts +0 -7
  227. package/dist/types/src/extensions/json.d.ts.map +0 -1
  228. package/dist/types/src/extensions/listener.d.ts +0 -13
  229. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  230. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  231. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  232. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  233. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  234. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  235. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  236. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  237. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  238. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  239. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  240. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  241. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -61
  243. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  245. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  247. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  249. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  251. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  253. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  255. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  256. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  257. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  258. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  259. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  260. package/dist/types/src/extensions/mention.d.ts +0 -7
  261. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  262. package/dist/types/src/extensions/modal.d.ts +0 -7
  263. package/dist/types/src/extensions/modal.d.ts.map +0 -1
  264. package/dist/types/src/extensions/modes.d.ts +0 -10
  265. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  266. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  267. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  268. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  269. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  270. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  271. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  272. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  273. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  274. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  275. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  277. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  279. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  280. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  281. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  282. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  283. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  284. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  285. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  286. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  287. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  288. package/dist/types/src/extensions/preview/preview.d.ts +0 -32
  289. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  290. package/dist/types/src/extensions/replacer.d.ts +0 -21
  291. package/dist/types/src/extensions/replacer.d.ts.map +0 -1
  292. package/dist/types/src/extensions/replacer.test.d.ts +0 -2
  293. package/dist/types/src/extensions/replacer.test.d.ts.map +0 -1
  294. package/dist/types/src/extensions/scrolling.d.ts +0 -78
  295. package/dist/types/src/extensions/scrolling.d.ts.map +0 -1
  296. package/dist/types/src/extensions/selection.d.ts +0 -24
  297. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  298. package/dist/types/src/extensions/state.d.ts +0 -2
  299. package/dist/types/src/extensions/state.d.ts.map +0 -1
  300. package/dist/types/src/extensions/submit.d.ts +0 -10
  301. package/dist/types/src/extensions/submit.d.ts.map +0 -1
  302. package/dist/types/src/extensions/tab.d.ts +0 -4
  303. package/dist/types/src/extensions/tab.d.ts.map +0 -1
  304. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  305. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  306. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  307. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  308. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  309. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  310. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  311. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  312. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -97
  313. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  314. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  315. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  316. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  317. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  318. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  319. package/dist/types/src/stories/CommandDialog.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/types/index.d.ts +0 -2
  329. package/dist/types/src/types/index.d.ts.map +0 -1
  330. package/dist/types/src/types/types.d.ts +0 -21
  331. package/dist/types/src/types/types.d.ts.map +0 -1
  332. package/dist/types/src/util/cursor.d.ts +0 -31
  333. package/dist/types/src/util/cursor.d.ts.map +0 -1
  334. package/dist/types/src/util/debug.d.ts +0 -21
  335. package/dist/types/src/util/debug.d.ts.map +0 -1
  336. package/dist/types/src/util/decorations.d.ts +0 -4
  337. package/dist/types/src/util/decorations.d.ts.map +0 -1
  338. package/dist/types/src/util/dom.d.ts +0 -10
  339. package/dist/types/src/util/dom.d.ts.map +0 -1
  340. package/dist/types/src/util/facet.d.ts +0 -3
  341. package/dist/types/src/util/facet.d.ts.map +0 -1
  342. package/src/components/EditorContent/EditorContent.stories.tsx +0 -70
  343. package/src/components/EditorContent/EditorContent.tsx +0 -70
  344. package/src/components/EditorContent/index.ts +0 -6
  345. package/src/components/EditorMenuProvider/util.ts +0 -31
  346. package/src/components/EditorToolbar/actions.ts +0 -86
  347. package/src/components/EditorToolbar/useEditorToolbar.ts +0 -20
  348. package/src/defaults.ts +0 -52
  349. package/src/extensions/annotations.ts +0 -55
  350. package/src/extensions/autocomplete/autocomplete.ts +0 -151
  351. package/src/extensions/autocomplete/index.ts +0 -8
  352. package/src/extensions/autocomplete/match.ts +0 -46
  353. package/src/extensions/autocomplete/placeholder.ts +0 -117
  354. package/src/extensions/autocomplete/typeahead.ts +0 -87
  355. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  356. package/src/extensions/automerge/automerge.test.tsx +0 -78
  357. package/src/extensions/automerge/automerge.ts +0 -105
  358. package/src/extensions/automerge/cursor.ts +0 -28
  359. package/src/extensions/automerge/defs.ts +0 -31
  360. package/src/extensions/automerge/index.ts +0 -5
  361. package/src/extensions/automerge/sync.ts +0 -79
  362. package/src/extensions/automerge/update-automerge.ts +0 -50
  363. package/src/extensions/automerge/update-codemirror.ts +0 -115
  364. package/src/extensions/autoscroll.ts +0 -163
  365. package/src/extensions/awareness/awareness-provider.ts +0 -127
  366. package/src/extensions/awareness/awareness.ts +0 -315
  367. package/src/extensions/awareness/index.ts +0 -6
  368. package/src/extensions/blast.ts +0 -363
  369. package/src/extensions/blocks.ts +0 -131
  370. package/src/extensions/bookmarks.ts +0 -75
  371. package/src/extensions/comments.ts +0 -598
  372. package/src/extensions/debug.ts +0 -15
  373. package/src/extensions/dnd.ts +0 -37
  374. package/src/extensions/factories.ts +0 -278
  375. package/src/extensions/focus.ts +0 -36
  376. package/src/extensions/folding.tsx +0 -43
  377. package/src/extensions/hashtag.tsx +0 -68
  378. package/src/extensions/json.ts +0 -57
  379. package/src/extensions/listener.ts +0 -32
  380. package/src/extensions/markdown/action.ts +0 -117
  381. package/src/extensions/markdown/bundle.ts +0 -105
  382. package/src/extensions/markdown/changes.test.ts +0 -26
  383. package/src/extensions/markdown/changes.ts +0 -149
  384. package/src/extensions/markdown/debug.ts +0 -44
  385. package/src/extensions/markdown/decorate.ts +0 -601
  386. package/src/extensions/markdown/formatting.test.ts +0 -498
  387. package/src/extensions/markdown/formatting.ts +0 -1265
  388. package/src/extensions/markdown/highlight.ts +0 -183
  389. package/src/extensions/markdown/image.ts +0 -118
  390. package/src/extensions/markdown/index.ts +0 -13
  391. package/src/extensions/markdown/link.ts +0 -50
  392. package/src/extensions/markdown/parser.test.ts +0 -75
  393. package/src/extensions/markdown/styles.ts +0 -135
  394. package/src/extensions/markdown/table.ts +0 -150
  395. package/src/extensions/mention.ts +0 -41
  396. package/src/extensions/modal.ts +0 -24
  397. package/src/extensions/modes.ts +0 -41
  398. package/src/extensions/outliner/commands.ts +0 -270
  399. package/src/extensions/outliner/editor.test.ts +0 -33
  400. package/src/extensions/outliner/editor.ts +0 -184
  401. package/src/extensions/outliner/index.ts +0 -7
  402. package/src/extensions/outliner/menu.ts +0 -128
  403. package/src/extensions/outliner/outliner.test.ts +0 -100
  404. package/src/extensions/outliner/outliner.ts +0 -167
  405. package/src/extensions/outliner/selection.ts +0 -50
  406. package/src/extensions/outliner/tree.test.ts +0 -168
  407. package/src/extensions/outliner/tree.ts +0 -317
  408. package/src/extensions/preview/index.ts +0 -5
  409. package/src/extensions/preview/preview.ts +0 -193
  410. package/src/extensions/replacer.test.ts +0 -75
  411. package/src/extensions/replacer.ts +0 -93
  412. package/src/extensions/scrolling.ts +0 -189
  413. package/src/extensions/selection.ts +0 -100
  414. package/src/extensions/state.ts +0 -7
  415. package/src/extensions/submit.ts +0 -62
  416. package/src/extensions/tab.ts +0 -29
  417. package/src/extensions/tags/extended-markdown.test.ts +0 -262
  418. package/src/extensions/tags/extended-markdown.ts +0 -78
  419. package/src/extensions/tags/index.ts +0 -7
  420. package/src/extensions/tags/streamer.ts +0 -243
  421. package/src/extensions/tags/xml-tags.ts +0 -500
  422. package/src/extensions/tags/xml-util.ts +0 -94
  423. package/src/extensions/typewriter.ts +0 -68
  424. package/src/stories/CommandDialog.stories.tsx +0 -83
  425. package/src/styles/index.ts +0 -7
  426. package/src/styles/markdown.ts +0 -26
  427. package/src/styles/theme.ts +0 -269
  428. package/src/styles/tokens.ts +0 -17
  429. package/src/types/index.ts +0 -5
  430. package/src/types/types.ts +0 -32
  431. package/src/util/cursor.ts +0 -56
  432. package/src/util/debug.ts +0 -69
  433. package/src/util/decorations.ts +0 -21
  434. package/src/util/dom.ts +0 -34
  435. package/src/util/facet.ts +0 -13
  436. /package/dist/types/src/components/{EditorContent → Editor}/controller.d.ts +0 -0
@@ -0,0 +1,177 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { Repo, initSubduction } from '@automerge/automerge-repo';
6
+ import { BroadcastChannelNetworkAdapter } from '@automerge/automerge-repo-network-broadcastchannel';
7
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
+ import React, { useCallback, useEffect, useState } from 'react';
9
+
10
+ import { Obj, Query, Ref } from '@dxos/echo';
11
+ import { DocAccessor, createDocAccessor } from '@dxos/echo-client';
12
+ import { TestSchema } from '@dxos/echo/testing';
13
+ import { log } from '@dxos/log';
14
+ import { type Messenger } from '@dxos/protocols';
15
+ import { useQuery, useSpace } from '@dxos/react-client/echo';
16
+ import { type Identity, useIdentity } from '@dxos/react-client/halo';
17
+ import { useClientStory, withMultiClientProvider } from '@dxos/react-client/testing';
18
+ import { Button, useThemeContext } from '@dxos/react-ui';
19
+ import { withLayout, withTheme, Loading } from '@dxos/react-ui/testing';
20
+ import { createBasicExtensions, createDataExtensions, createThemeExtensions } from '@dxos/ui-editor';
21
+
22
+ import { translations } from '#translations';
23
+
24
+ import { useTextEditor } from '../hooks';
25
+
26
+ const initialContent = 'Hello world!';
27
+
28
+ type TestObject = {
29
+ text: string;
30
+ };
31
+
32
+ type EditorProps = {
33
+ source: DocAccessor;
34
+ messenger?: Messenger;
35
+ identity?: Identity;
36
+ autoFocus?: boolean;
37
+ };
38
+
39
+ const Editor = ({ source, messenger, identity, autoFocus }: EditorProps) => {
40
+ const { themeMode } = useThemeContext();
41
+ const { parentRef } = useTextEditor(
42
+ () => ({
43
+ autoFocus,
44
+ initialValue: DocAccessor.getValue(source),
45
+ extensions: [
46
+ createBasicExtensions({ placeholder: 'Type here...', search: true }),
47
+ createThemeExtensions({ themeMode, slots: { scroller: { className: 'p-2' } } }),
48
+ createDataExtensions({ id: 'test', text: source, messenger, identity }),
49
+ ],
50
+ }),
51
+ [source, themeMode],
52
+ );
53
+
54
+ return <div ref={parentRef} className='flex w-full' />;
55
+ };
56
+
57
+ const DefaultStory = () => {
58
+ const [object1, setObject1] = useState<DocAccessor<TestObject>>();
59
+ const [object2, setObject2] = useState<DocAccessor<TestObject>>();
60
+
61
+ useEffect(() => {
62
+ queueMicrotask(async () => {
63
+ // Subduction-fork `Repo` constructs a `MemorySigner` internally; WASM must be
64
+ // initialized first or the constructor throws `'set_subduction_logger' of undefined`.
65
+ await initSubduction();
66
+ const repo1 = new Repo({ network: [new BroadcastChannelNetworkAdapter()] });
67
+ const repo2 = new Repo({ network: [new BroadcastChannelNetworkAdapter()] });
68
+
69
+ const object1 = repo1.create<TestObject>();
70
+ object1.change((doc: TestObject) => {
71
+ doc.text = initialContent;
72
+ });
73
+
74
+ const object2 = await repo2.find<TestObject>(object1.url);
75
+ await object2.whenReady();
76
+
77
+ setObject1({ handle: object1, path: ['text'] });
78
+ setObject2({ handle: object2, path: ['text'] });
79
+ });
80
+ }, []);
81
+
82
+ if (!object1 || !object2) {
83
+ return <Loading data={{ object1: !!object1, object2: !!object2 }} />;
84
+ }
85
+
86
+ return (
87
+ <div className='h-full w-full grid grid-cols-2 gap-4'>
88
+ <Editor source={object1} autoFocus />
89
+ <Editor source={object2} />
90
+ </div>
91
+ );
92
+ };
93
+
94
+ const EchoStory = () => {
95
+ const { spaceId, index } = useClientStory();
96
+ const identity = useIdentity();
97
+ const space = useSpace(spaceId);
98
+ const objects = useQuery(space?.db, Query.type(TestSchema.Expando, { type: 'test' }));
99
+
100
+ const [source, setSource] = useState<DocAccessor>();
101
+ const init = useCallback(() => {
102
+ const content = objects[0]?.content.target;
103
+ if (!content) {
104
+ if (objects.length) {
105
+ // TODO(burdon): Initially ref isn't ready.
106
+ log.warn('no content', { index, objects: JSON.stringify(objects) });
107
+ }
108
+ return;
109
+ }
110
+
111
+ setSource(createDocAccessor(content, ['content']));
112
+ }, [objects]);
113
+
114
+ useEffect(() => {
115
+ if (source) {
116
+ return;
117
+ }
118
+
119
+ init();
120
+ }, [objects, source]);
121
+
122
+ return (
123
+ <div className='h-full w-full flex flex-col overflow-hidden'>
124
+ <pre className='p-2 text-xs text-subdued'>
125
+ {JSON.stringify({ index, identity: identity?.identityKey.truncate(), spaceId, objects }, null, 2)}
126
+ </pre>
127
+ {identity && source ? (
128
+ <div className='p-2 flex grow overflow-hidden'>
129
+ <Editor identity={identity} messenger={space} source={source} />
130
+ </div>
131
+ ) : (
132
+ <div className='p-2'>
133
+ <Button onClick={init}>Init</Button>
134
+ </div>
135
+ )}
136
+ </div>
137
+ );
138
+ };
139
+
140
+ const meta = {
141
+ title: 'ui/react-ui-editor/Automerge',
142
+ component: Editor as any,
143
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
144
+ parameters: {
145
+ layout: 'fullscreen',
146
+ translations,
147
+ },
148
+ } satisfies Meta<typeof DefaultStory>;
149
+
150
+ export default meta;
151
+
152
+ type Story = StoryObj<typeof meta>;
153
+
154
+ // TODO(burdon): ERROR: factories.ts:126 Error: Non-base58 character
155
+ export const Default: Story = {
156
+ render: DefaultStory,
157
+ };
158
+
159
+ // TODO(burdon): Failing (doesn't sync)
160
+ export const WithEcho: Story = {
161
+ decorators: [
162
+ withMultiClientProvider({
163
+ numClients: 2,
164
+ createIdentity: true,
165
+ createSpace: true,
166
+ onCreateSpace: async ({ space }) => {
167
+ space.db.add(
168
+ Obj.make(TestSchema.Expando, {
169
+ type: 'test',
170
+ content: Ref.make(Obj.make(TestSchema.Expando, { content: initialContent })),
171
+ }),
172
+ );
173
+ },
174
+ }),
175
+ ],
176
+ render: EchoStory,
177
+ };
@@ -2,25 +2,25 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { effect, useSignal } from '@preact/signals-react';
5
+ import { Atom, RegistryContext } from '@effect-atom/atom-react';
6
6
  import { type Meta, type StoryObj } from '@storybook/react-vite';
7
- import React, { type FC } from 'react';
7
+ import React, { type FC, useContext, useMemo } from 'react';
8
8
 
9
9
  import { keySymbols, parseShortcut } from '@dxos/keyboard';
10
10
  import { PublicKey } from '@dxos/keys';
11
11
  import { log } from '@dxos/log';
12
- import { withTheme } from '@dxos/react-ui/testing';
12
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
13
+ import { withRegistry } from '@dxos/storybook-utils';
14
+ import { annotations, comments, createExternalCommentSync } from '@dxos/ui-editor';
15
+ import { type Comment } from '@dxos/ui-editor/types';
13
16
 
14
- import { annotations, comments, createExternalCommentSync } from '../extensions';
15
- import { type Comment } from '../types';
16
17
  import { createRenderer, str } from '../util';
17
-
18
18
  import { EditorStory, content, longText } from './components';
19
19
 
20
20
  const meta = {
21
21
  title: 'ui/react-ui-editor/Comments',
22
22
  component: EditorStory,
23
- decorators: [withTheme],
23
+ decorators: [withRegistry, withTheme(), withLayout({ layout: 'fullscreen' })],
24
24
  parameters: {
25
25
  layout: 'fullscreen',
26
26
  },
@@ -34,52 +34,57 @@ type Story = StoryObj<typeof meta>;
34
34
  // Comments
35
35
  //
36
36
 
37
+ const CommentsStory = () => {
38
+ const registry = useContext(RegistryContext);
39
+ const commentsAtom = useMemo(() => Atom.make<Comment[]>([]), []);
40
+
41
+ return (
42
+ <EditorStory
43
+ text={str('# Comments', '', content.paragraphs, content.footer)}
44
+ extensions={[
45
+ createExternalCommentSync(
46
+ 'test',
47
+ (sink) => registry.subscribe(commentsAtom, () => sink()),
48
+ () => registry.get(commentsAtom),
49
+ ),
50
+ comments({
51
+ id: 'test',
52
+ renderTooltip: createRenderer(CommentTooltip),
53
+ onCreate: ({ cursor }) => {
54
+ const id = PublicKey.random().toHex();
55
+ const current = registry.get(commentsAtom);
56
+ registry.set(commentsAtom, [...current, { id, cursor }]);
57
+ return id;
58
+ },
59
+ onSelect: (state) => {
60
+ const debug = false;
61
+ if (debug) {
62
+ log.info('update', {
63
+ comments: state.comments.length,
64
+ active: state.selection.current?.slice(0, 8),
65
+ closest: state.selection.closest?.slice(0, 8),
66
+ });
67
+ }
68
+ },
69
+ }),
70
+ ]}
71
+ />
72
+ );
73
+ };
74
+
37
75
  export const Comments: Story = {
38
- render: () => {
39
- const _comments = useSignal<Comment[]>([]);
40
- return (
41
- <EditorStory
42
- text={str('# Comments', '', content.paragraphs, content.footer)}
43
- extensions={[
44
- createExternalCommentSync(
45
- 'test',
46
- (sink) => effect(() => sink()),
47
- () => _comments.value,
48
- ),
49
- comments({
50
- id: 'test',
51
- renderTooltip: createRenderer(CommentTooltip),
52
- onCreate: ({ cursor }) => {
53
- const id = PublicKey.random().toHex();
54
- _comments.value = [..._comments.value, { id, cursor }];
55
- return id;
56
- },
57
- onSelect: (state) => {
58
- const debug = false;
59
- if (debug) {
60
- log.info('update', {
61
- comments: state.comments.length,
62
- active: state.selection.current?.slice(0, 8),
63
- closest: state.selection.closest?.slice(0, 8),
64
- });
65
- }
66
- },
67
- }),
68
- ]}
69
- />
70
- );
71
- },
76
+ render: () => <CommentsStory />,
72
77
  };
73
78
 
74
79
  const Key: FC<{ char: string }> = ({ char }) => (
75
- <span className='flex justify-center items-center is-[24px] bs-[24px] rounded text-xs bg-neutral-200 text-black'>
80
+ <span className='flex justify-center items-center w-[24px] h-[24px] rounded-sm text-xs bg-neutral-200 text-black'>
76
81
  {char}
77
82
  </span>
78
83
  );
79
84
 
80
85
  const CommentTooltip: FC<{ shortcut: string }> = ({ shortcut }) => {
81
86
  return (
82
- <div className='flex items-center gap-2 pli-2 plb-2 bg-neutral-700 text-white text-xs rounded'>
87
+ <div className='flex items-center gap-2 px-2 py-2 bg-neutral-700 text-white text-xs rounded-sm'>
83
88
  <div>Create comment</div>
84
89
  <div className='flex gap-1'>
85
90
  {keySymbols(parseShortcut(shortcut)).map((char) => (
@@ -3,80 +3,67 @@
3
3
  //
4
4
 
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React, { useCallback, useState } from 'react';
6
+ import React, { useMemo } from 'react';
7
7
 
8
- import { invariant } from '@dxos/invariant';
9
8
  import { useThemeContext } from '@dxos/react-ui';
10
- import { withTheme } from '@dxos/react-ui/testing';
11
- import { attentionSurface, mx } from '@dxos/react-ui-theme';
12
-
13
- import { EditorToolbar, useEditorToolbar } from '../components';
14
- import { editorWidth } from '../defaults';
9
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
10
+ import { withRegistry } from '@dxos/storybook-utils';
15
11
  import {
16
- InputModeExtensions,
17
12
  createBasicExtensions,
18
13
  createMarkdownExtensions,
19
14
  createThemeExtensions,
20
15
  decorateMarkdown,
16
+ documentSlots,
21
17
  formattingKeymap,
22
- formattingListener,
23
- } from '../extensions';
24
- import { type UseTextEditorProps, useTextEditor } from '../hooks';
25
- import { translations } from '../translations';
26
- import { type EditorInputMode, type EditorViewMode } from '../types';
18
+ } from '@dxos/ui-editor';
19
+ import { type EditorViewMode } from '@dxos/ui-editor/types';
27
20
 
28
- type StoryProps = { placeholder?: string } & UseTextEditorProps;
21
+ import { translations } from '#translations';
29
22
 
30
- const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
31
- const { themeMode } = useThemeContext();
23
+ import { Editor } from '../components';
24
+ import { type UseTextEditorProps } from '../hooks';
32
25
 
33
- const toolbarState = useEditorToolbar({ viewMode: 'source' });
34
- const viewMode = toolbarState.viewMode;
35
- // TODO(wittjosiah): Provide way to change the input mode.
36
- const [editorInputMode, _setEditorInputMode] = useState<EditorInputMode>('default');
37
- const { parentRef, view } = useTextEditor(
38
- () => ({
39
- autoFocus,
40
- initialValue,
41
- selectionEnd: true,
42
- extensions: [
43
- editorInputMode ? InputModeExtensions[editorInputMode] : [],
44
- createBasicExtensions({ placeholder, lineWrapping: true, readOnly: viewMode === 'readonly', search: true }),
45
- createMarkdownExtensions(),
46
- createThemeExtensions({ themeMode, syntaxHighlighting: true }),
47
- viewMode === 'source' ? [] : decorateMarkdown(),
48
- formattingKeymap(),
49
- formattingListener(() => toolbarState),
50
- ],
51
- }),
52
- [editorInputMode, viewMode, themeMode, placeholder],
53
- );
26
+ type DefaultStoryProps = { placeholder?: string; viewMode?: EditorViewMode } & UseTextEditorProps;
54
27
 
55
- const getView = useCallback(() => {
56
- invariant(view);
57
- return view;
58
- }, [view]);
28
+ const DefaultStory = ({ autoFocus, initialValue, placeholder, viewMode = 'source' }: DefaultStoryProps) => {
29
+ const { themeMode } = useThemeContext();
59
30
 
60
- const handleViewModeChange = useCallback((mode: EditorViewMode) => {
61
- toolbarState.viewMode = mode;
62
- }, []);
31
+ const extensions = useMemo(
32
+ () => [
33
+ createBasicExtensions({
34
+ placeholder,
35
+ lineWrapping: true,
36
+ readOnly: viewMode === 'readonly',
37
+ search: true,
38
+ }),
39
+ createThemeExtensions({
40
+ themeMode,
41
+ syntaxHighlighting: true,
42
+ slots: documentSlots,
43
+ }),
44
+ createMarkdownExtensions(),
45
+ viewMode === 'source' ? [] : decorateMarkdown(),
46
+ formattingKeymap(),
47
+ ],
48
+ [viewMode, themeMode, placeholder],
49
+ );
63
50
 
64
- // TODO(marijn): This doesn't update the state on view changes.
65
- // Also not sure if view is even guaranteed to exist at this point.
66
51
  return (
67
- <div role='none' className={mx('fixed inset-0 flex flex-col')}>
68
- {toolbarState && <EditorToolbar state={toolbarState} getView={getView} onViewModeChange={handleViewModeChange} />}
69
- <div role='none' className={mx('grow overflow-hidden', attentionSurface)}>
70
- <div className={mx(editorWidth)} ref={parentRef} />
71
- </div>
72
- </div>
52
+ <Editor.Root extensions={extensions} viewMode={viewMode}>
53
+ <Editor.Content>
54
+ <Editor.Toolbar classNames='dx-document' />
55
+ <div className='dx-container dx-document bg-base-surface'>
56
+ <Editor.View autoFocus={autoFocus} initialValue={initialValue} selectionEnd />
57
+ </div>
58
+ </Editor.Content>
59
+ </Editor.Root>
73
60
  );
74
61
  };
75
62
 
76
63
  const meta = {
77
64
  title: 'ui/react-ui-editor/EditorToolbar',
78
65
  render: DefaultStory,
79
- decorators: [withTheme],
66
+ decorators: [withRegistry, withTheme(), withLayout({ layout: 'fullscreen', classNames: 'bg-sidebar-surface' })],
80
67
  parameters: {
81
68
  layout: 'fullscreen',
82
69
  translations,
@@ -7,18 +7,16 @@ import defaultsDeep from 'lodash.defaultsdeep';
7
7
  import React from 'react';
8
8
 
9
9
  import { log } from '@dxos/log';
10
- import { faker } from '@dxos/random';
11
- import { withTheme } from '@dxos/react-ui/testing';
12
-
13
- import { blast, defaultOptions, dropFile, typewriter } from '../extensions';
14
- import { str } from '../util';
10
+ import { random } from '@dxos/random';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
+ import { blast, defaultOptions, dropFile, join, snippets } from '@dxos/ui-editor';
15
13
 
16
14
  import { EditorStory, content } from './components';
17
15
 
18
16
  const meta = {
19
17
  title: 'ui/react-ui-editor/Experimental',
20
18
  component: EditorStory,
21
- decorators: [withTheme],
19
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
22
20
  parameters: {
23
21
  layout: 'fullscreen',
24
22
  },
@@ -29,16 +27,16 @@ export default meta;
29
27
  type Story = StoryObj<typeof meta>;
30
28
 
31
29
  //
32
- // Typewriter
30
+ // Snippets
33
31
  //
34
32
 
35
- const typewriterItems = localStorage.getItem('dxos.org/testing/typewriter')?.split(',');
33
+ const snippetItems = localStorage.getItem('org.dxos.testing.snippets')?.split(',');
36
34
 
37
- export const Typewriter: Story = {
35
+ export const Snippets: Story = {
38
36
  render: () => (
39
37
  <EditorStory
40
- text={str('# Typewriter', '', content.paragraphs, content.footer)}
41
- extensions={[typewriter({ items: typewriterItems })]}
38
+ text={join('# Snippets', '', content.paragraphs, content.footer)}
39
+ extensions={[snippets({ items: snippetItems })]}
42
40
  />
43
41
  ),
44
42
  };
@@ -50,17 +48,17 @@ export const Typewriter: Story = {
50
48
  export const Blast: Story = {
51
49
  render: () => (
52
50
  <EditorStory
53
- text={str('# Blast', '', content.paragraphs, content.codeblocks, content.paragraphs)}
51
+ text={join('# Blast', '', content.paragraphs, content.codeblocks, content.paragraphs)}
54
52
  extensions={[
55
- typewriter({ items: typewriterItems }),
53
+ snippets({ items: snippetItems }),
56
54
  blast(
57
55
  defaultsDeep(
58
56
  {
59
57
  effect: 2,
60
58
  particleGravity: 0.2,
61
59
  particleShrinkRate: 0.995,
62
- color: () => [faker.number.int({ min: 100, max: 200 }), 0, 0],
63
- // color: () => [faker.number.int(256), faker.number.int(256), faker.number.int(256)],
60
+ color: () => [random.number.int({ min: 100, max: 200 }), 0, 0],
61
+ // color: () => [random.number.int(256), random.number.int(256), random.number.int(256)],
64
62
  },
65
63
  defaultOptions,
66
64
  ),
@@ -77,7 +75,7 @@ export const Blast: Story = {
77
75
  export const DND: Story = {
78
76
  render: () => (
79
77
  <EditorStory
80
- text={str('# DND', '')}
78
+ text={join('# DND', '')}
81
79
  extensions={[
82
80
  dropFile({
83
81
  onDrop: (view, event) => {
@@ -6,17 +6,15 @@ import { markdown } from '@codemirror/lang-markdown';
6
6
  import { type Meta, type StoryObj } from '@storybook/react-vite';
7
7
  import React from 'react';
8
8
 
9
- import { withTheme } from '@dxos/react-ui/testing';
10
-
11
- import { decorateMarkdown, image, linkTooltip, table } from '../extensions';
12
- import { str } from '../util';
9
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
10
+ import { decorateMarkdown, image, join, linkTooltip, table } from '@dxos/ui-editor';
13
11
 
14
12
  import { EditorStory, content, defaultExtensions, headings, renderLinkTooltip, text } from './components';
15
13
 
16
14
  const meta = {
17
15
  title: 'ui/react-ui-editor/Markdown',
18
16
  component: EditorStory,
19
- decorators: [withTheme],
17
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
20
18
  parameters: {
21
19
  layout: 'fullscreen',
22
20
  },
@@ -37,7 +35,7 @@ export const Default: Story = {
37
35
  export const Blockquote: Story = {
38
36
  render: () => (
39
37
  <EditorStory
40
- text={str('> Blockquote', 'continuation', content.footer)}
38
+ text={join('> Blockquote', 'continuation', content.footer)}
41
39
  extensions={decorateMarkdown()}
42
40
  debug='raw'
43
41
  />
@@ -49,21 +47,23 @@ export const Headings: Story = {
49
47
  };
50
48
 
51
49
  export const Links: Story = {
52
- render: () => <EditorStory text={str(content.links, content.footer)} extensions={[linkTooltip(renderLinkTooltip)]} />,
50
+ render: () => (
51
+ <EditorStory text={join(content.links, content.footer)} extensions={[linkTooltip(renderLinkTooltip)]} />
52
+ ),
53
53
  };
54
54
 
55
55
  export const Image: Story = {
56
- render: () => <EditorStory text={str(content.image, content.footer)} extensions={[image()]} />,
56
+ render: () => <EditorStory text={join(content.image, content.footer)} extensions={[image()]} />,
57
57
  };
58
58
 
59
59
  export const Code: Story = {
60
- render: () => <EditorStory text={str(content.codeblocks, content.footer)} extensions={[decorateMarkdown()]} />,
60
+ render: () => <EditorStory text={join(content.codeblocks, content.footer)} extensions={[decorateMarkdown()]} />,
61
61
  };
62
62
 
63
63
  export const Lists: Story = {
64
64
  render: () => (
65
65
  <EditorStory
66
- text={str(content.tasks, '', content.bullets, '', content.numbered, content.footer)}
66
+ text={join(content.tasks, '', content.bullets, '', content.numbered, content.footer)}
67
67
  extensions={[decorateMarkdown()]}
68
68
  />
69
69
  ),
@@ -74,7 +74,7 @@ export const Lists: Story = {
74
74
  //
75
75
 
76
76
  export const BulletList: Story = {
77
- render: () => <EditorStory text={str(content.bullets, content.footer)} extensions={[decorateMarkdown()]} />,
77
+ render: () => <EditorStory text={join(content.bullets, content.footer)} extensions={[decorateMarkdown()]} />,
78
78
  };
79
79
 
80
80
  //
@@ -82,7 +82,7 @@ export const BulletList: Story = {
82
82
  //
83
83
 
84
84
  export const OrderedList: Story = {
85
- render: () => <EditorStory text={str(content.numbered, content.footer)} extensions={[decorateMarkdown()]} />,
85
+ render: () => <EditorStory text={join(content.numbered, content.footer)} extensions={[decorateMarkdown()]} />,
86
86
  };
87
87
 
88
88
  //
@@ -91,12 +91,12 @@ export const OrderedList: Story = {
91
91
 
92
92
  export const TaskList: Story = {
93
93
  render: () => (
94
- <EditorStory text={str(content.tasks, content.footer)} extensions={[decorateMarkdown()]} debug='raw+tree' />
94
+ <EditorStory text={join(content.tasks, content.footer)} extensions={[decorateMarkdown()]} debug='raw+tree' />
95
95
  ),
96
96
  };
97
97
 
98
98
  export const TaskListEmpty: Story = {
99
- render: () => <EditorStory text={str('- [ ] ')} extensions={[decorateMarkdown()]} debug='raw+tree' />,
99
+ render: () => <EditorStory text={join('- [ ] ')} extensions={[decorateMarkdown()]} debug='raw+tree' />,
100
100
  };
101
101
 
102
102
  //
@@ -104,7 +104,7 @@ export const TaskListEmpty: Story = {
104
104
  //
105
105
 
106
106
  export const Table: Story = {
107
- render: () => <EditorStory text={str(content.table, content.footer)} extensions={[decorateMarkdown(), table()]} />,
107
+ render: () => <EditorStory text={join(content.table, content.footer)} extensions={[decorateMarkdown(), table()]} />,
108
108
  };
109
109
 
110
110
  //
@@ -114,7 +114,7 @@ export const Table: Story = {
114
114
  export const CommentedOut: Story = {
115
115
  render: () => (
116
116
  <EditorStory
117
- text={str('# Commented out', '', content.comment, content.footer)}
117
+ text={join('# Commented out', '', content.comment, content.footer)}
118
118
  extensions={[
119
119
  decorateMarkdown(),
120
120
  markdown(),
@@ -3,22 +3,20 @@
3
3
  //
4
4
 
5
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React, { useMemo, useState } from 'react';
6
+ import React, { useCallback, useMemo, useState } from 'react';
7
7
 
8
- import { withTheme } from '@dxos/react-ui/testing';
9
8
  import { withAttention } from '@dxos/react-ui-attention/testing';
9
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
10
+ import { deleteItem, hashtag, join, listItemToString, outliner, treeFacet } from '@dxos/ui-editor';
10
11
 
11
12
  import { type EditorController, type EditorMenuGroup, EditorMenuProvider } from '../components';
12
- import { deleteItem, hashtag, listItemToString, outliner, treeFacet } from '../extensions';
13
- import { str } from '../util';
14
-
15
13
  import { EditorStory } from './components';
16
14
 
17
- type StoryProps = {
15
+ type DefaultStoryProps = {
18
16
  text?: string;
19
17
  };
20
18
 
21
- const DefaultStory = ({ text }: StoryProps) => {
19
+ const DefaultStory = ({ text }: DefaultStoryProps) => {
22
20
  const [controller, setController] = useState<EditorController | null>(null);
23
21
 
24
22
  const extensions = useMemo(() => [outliner(), hashtag()], []);
@@ -39,10 +37,11 @@ const DefaultStory = ({ text }: StoryProps) => {
39
37
  ],
40
38
  [],
41
39
  );
40
+ const getView = useCallback(() => controller?.view ?? null, [controller]);
42
41
 
43
42
  return (
44
43
  <EditorMenuProvider
45
- view={controller?.view}
44
+ getView={getView}
46
45
  groups={commandGroups}
47
46
  onSelect={({ view, item }) => {
48
47
  if (item.onSelect) {
@@ -69,7 +68,7 @@ const DefaultStory = ({ text }: StoryProps) => {
69
68
  const meta = {
70
69
  title: 'ui/react-ui-editor/Outliner',
71
70
  render: DefaultStory,
72
- decorators: [withTheme, withAttention],
71
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' }), withAttention()],
73
72
  parameters: {
74
73
  layout: 'fullscreen',
75
74
  },
@@ -85,7 +84,7 @@ export const Empty: Story = {
85
84
 
86
85
  export const Basic: Story = {
87
86
  args: {
88
- text: str(
87
+ text: join(
89
88
  //
90
89
  '- [ ] A',
91
90
  '- [ ] B',
@@ -100,7 +99,7 @@ export const Basic: Story = {
100
99
 
101
100
  export const Nested: Story = {
102
101
  args: {
103
- text: str(
102
+ text: join(
104
103
  //
105
104
  '- [ ] A',
106
105
  ' - [ ] B',
@@ -115,7 +114,7 @@ export const Nested: Story = {
115
114
 
116
115
  export const Continuation: Story = {
117
116
  args: {
118
- text: str(
117
+ text: join(
119
118
  //
120
119
  '- [ ] A',
121
120
  '- [ ] B',