@dxos/react-ui-editor 0.8.4-main.406dc2a → 0.8.4-main.4a85c3132b

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 (416) hide show
  1. package/dist/lib/browser/index.mjs +1184 -8481
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +1184 -8480
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/components/Editor/Editor.d.ts +43 -30
  8. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  9. package/dist/types/src/components/Editor/Editor.stories.d.ts +13 -20
  10. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  11. package/dist/types/src/components/EditorContent/EditorContent.d.ts +31 -0
  12. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +1 -0
  13. package/dist/types/src/components/EditorContent/controller.d.ts +10 -0
  14. package/dist/types/src/components/EditorContent/controller.d.ts.map +1 -0
  15. package/dist/types/src/components/EditorContent/index.d.ts +3 -0
  16. package/dist/types/src/components/EditorContent/index.d.ts.map +1 -0
  17. package/dist/types/src/{extensions/popover/PopoverMenuProvider.d.ts → components/EditorMenuProvider/EditorMenuProvider.d.ts} +6 -6
  18. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  20. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  22. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  24. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  25. package/dist/types/src/{extensions/popover → components/EditorMenuProvider}/popover.d.ts +1 -2
  26. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  28. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  30. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  32. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  34. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  35. package/dist/types/src/components/EditorToolbar/actions.d.ts +25 -0
  36. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +1 -0
  37. package/dist/types/src/components/EditorToolbar/blocks.d.ts +9 -7
  38. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/formatting.d.ts +9 -7
  40. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/headings.d.ts +9 -7
  42. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/image.d.ts +5 -11
  44. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/index.d.ts +2 -1
  46. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/search.d.ts +5 -11
  48. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +11 -0
  50. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -0
  51. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +10 -8
  52. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  53. package/dist/types/src/components/index.d.ts +4 -1
  54. package/dist/types/src/components/index.d.ts.map +1 -1
  55. package/dist/types/src/hooks/useTextEditor.d.ts +2 -2
  56. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  57. package/dist/types/src/index.d.ts +0 -8
  58. package/dist/types/src/index.d.ts.map +1 -1
  59. package/dist/types/src/{extensions/automerge/automerge.stories.d.ts → stories/Automerge.stories.d.ts} +5 -8
  60. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  61. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -1
  62. package/dist/types/src/stories/Comments.stories.d.ts +4 -3
  63. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  64. package/dist/types/src/stories/EditorToolbar.stories.d.ts +4 -4
  65. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  66. package/dist/types/src/stories/Experimental.stories.d.ts +4 -3
  67. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  68. package/dist/types/src/stories/Markdown.stories.d.ts +4 -3
  69. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  70. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  71. package/dist/types/src/stories/Popover.stories.d.ts +2 -2
  72. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  73. package/dist/types/src/stories/Preview.stories.d.ts +5 -3
  74. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  75. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  76. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -3
  77. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  78. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  79. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  80. package/dist/types/src/stories/components/EditorStory.d.ts +10 -19
  81. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  82. package/dist/types/src/stories/components/util.d.ts +3 -3
  83. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  84. package/dist/types/src/translations.d.ts +5 -5
  85. package/dist/types/src/translations.d.ts.map +1 -1
  86. package/dist/types/src/util/index.d.ts +0 -5
  87. package/dist/types/src/util/index.d.ts.map +1 -1
  88. package/dist/types/src/util/react.d.ts +6 -5
  89. package/dist/types/src/util/react.d.ts.map +1 -1
  90. package/dist/types/tsconfig.tsbuildinfo +1 -1
  91. package/package.json +67 -71
  92. package/src/components/Editor/Editor.stories.tsx +75 -52
  93. package/src/components/Editor/Editor.tsx +166 -63
  94. package/src/components/EditorContent/EditorContent.tsx +83 -0
  95. package/src/components/EditorContent/controller.ts +50 -0
  96. package/src/components/EditorContent/index.ts +6 -0
  97. package/src/{extensions/popover/PopoverMenuProvider.tsx → components/EditorMenuProvider/EditorMenuProvider.tsx} +47 -40
  98. package/src/components/EditorMenuProvider/index.ts +10 -0
  99. package/src/{extensions/popover → components/EditorMenuProvider}/menu-presets.ts +19 -19
  100. package/src/{extensions/popover → components/EditorMenuProvider}/menu.ts +21 -18
  101. package/src/{extensions/popover → components/EditorMenuProvider}/popover.ts +3 -11
  102. package/src/{extensions/popover/usePopoverMenu.ts → components/EditorMenuProvider/useEditorMenu.ts} +27 -21
  103. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  104. package/src/components/EditorPreviewProvider/index.ts +5 -0
  105. package/src/components/EditorToolbar/EditorToolbar.tsx +102 -105
  106. package/src/components/EditorToolbar/{lists.ts → actions.ts} +48 -17
  107. package/src/components/EditorToolbar/blocks.ts +7 -7
  108. package/src/components/EditorToolbar/formatting.ts +7 -7
  109. package/src/components/EditorToolbar/headings.ts +20 -17
  110. package/src/components/EditorToolbar/image.ts +10 -3
  111. package/src/components/EditorToolbar/index.ts +3 -7
  112. package/src/components/EditorToolbar/search.ts +10 -3
  113. package/src/components/EditorToolbar/useEditorToolbar.ts +20 -0
  114. package/src/components/EditorToolbar/view-mode.ts +7 -6
  115. package/src/components/index.ts +6 -1
  116. package/src/hooks/useTextEditor.ts +13 -7
  117. package/src/index.ts +0 -10
  118. package/src/stories/Automerge.stories.tsx +174 -0
  119. package/src/stories/CommandDialog.stories.tsx +16 -13
  120. package/src/stories/Comments.stories.tsx +48 -44
  121. package/src/stories/EditorToolbar.stories.tsx +36 -21
  122. package/src/stories/Experimental.stories.tsx +6 -8
  123. package/src/stories/Markdown.stories.tsx +16 -16
  124. package/src/stories/Outliner.stories.tsx +18 -26
  125. package/src/stories/Popover.stories.tsx +42 -47
  126. package/src/stories/Preview.stories.tsx +100 -81
  127. package/src/stories/Tags.stories.tsx +36 -13
  128. package/src/stories/TextEditor.stories.tsx +15 -21
  129. package/src/stories/Theme.stories.tsx +61 -0
  130. package/src/stories/components/EditorStory.tsx +32 -27
  131. package/src/stories/components/util.tsx +60 -31
  132. package/src/translations.ts +4 -4
  133. package/src/util/index.ts +1 -6
  134. package/src/util/react.tsx +8 -13
  135. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  136. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  137. package/dist/lib/browser/testing/index.mjs +0 -76
  138. package/dist/lib/browser/testing/index.mjs.map +0 -7
  139. package/dist/lib/browser/types/index.mjs +0 -13
  140. package/dist/lib/browser/types/index.mjs.map +0 -7
  141. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  142. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  143. package/dist/lib/node-esm/testing/index.mjs +0 -78
  144. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  145. package/dist/lib/node-esm/types/index.mjs +0 -14
  146. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  147. package/dist/types/src/components/EditorToolbar/lists.d.ts +0 -19
  148. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +0 -1
  149. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  150. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  151. package/dist/types/src/defaults.d.ts +0 -14
  152. package/dist/types/src/defaults.d.ts.map +0 -1
  153. package/dist/types/src/extensions/annotations.d.ts +0 -9
  154. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  155. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -26
  156. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  157. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  158. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  159. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  160. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  161. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  162. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  163. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  164. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  165. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  166. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  167. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  168. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  169. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  170. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  171. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  172. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  173. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  174. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  175. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  176. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  177. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  178. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  179. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  180. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  181. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  182. package/dist/types/src/extensions/autoscroll.d.ts +0 -10
  183. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  184. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  185. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  186. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  187. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  188. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  189. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  190. package/dist/types/src/extensions/blast.d.ts +0 -25
  191. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  192. package/dist/types/src/extensions/comments.d.ts +0 -95
  193. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  194. package/dist/types/src/extensions/debug.d.ts +0 -3
  195. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  196. package/dist/types/src/extensions/dnd.d.ts +0 -9
  197. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  198. package/dist/types/src/extensions/factories.d.ts +0 -83
  199. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  200. package/dist/types/src/extensions/focus.d.ts +0 -7
  201. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  202. package/dist/types/src/extensions/folding.d.ts +0 -7
  203. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  204. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  205. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  206. package/dist/types/src/extensions/index.d.ts +0 -26
  207. package/dist/types/src/extensions/index.d.ts.map +0 -1
  208. package/dist/types/src/extensions/json.d.ts +0 -7
  209. package/dist/types/src/extensions/json.d.ts.map +0 -1
  210. package/dist/types/src/extensions/listener.d.ts +0 -11
  211. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  212. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  213. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  214. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  215. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  216. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  217. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  218. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  219. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  220. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  221. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  222. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  223. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  224. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  225. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  226. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  227. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  228. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  229. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  230. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  231. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  232. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  233. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  234. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  235. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  236. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  237. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  238. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  239. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  240. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  241. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  242. package/dist/types/src/extensions/mention.d.ts +0 -7
  243. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  244. package/dist/types/src/extensions/modes.d.ts +0 -10
  245. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  246. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  247. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  248. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  249. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  250. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  251. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  252. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  253. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  254. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  255. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  256. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  257. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  258. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  259. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  260. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  261. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  262. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  263. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  264. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  265. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  266. package/dist/types/src/extensions/popover/PopoverMenuProvider.d.ts.map +0 -1
  267. package/dist/types/src/extensions/popover/index.d.ts +0 -8
  268. package/dist/types/src/extensions/popover/index.d.ts.map +0 -1
  269. package/dist/types/src/extensions/popover/menu-presets.d.ts +0 -4
  270. package/dist/types/src/extensions/popover/menu-presets.d.ts.map +0 -1
  271. package/dist/types/src/extensions/popover/menu.d.ts +0 -24
  272. package/dist/types/src/extensions/popover/menu.d.ts.map +0 -1
  273. package/dist/types/src/extensions/popover/modal.d.ts +0 -7
  274. package/dist/types/src/extensions/popover/modal.d.ts.map +0 -1
  275. package/dist/types/src/extensions/popover/popover.d.ts.map +0 -1
  276. package/dist/types/src/extensions/popover/usePopoverMenu.d.ts +0 -34
  277. package/dist/types/src/extensions/popover/usePopoverMenu.d.ts.map +0 -1
  278. package/dist/types/src/extensions/popover/util.d.ts +0 -8
  279. package/dist/types/src/extensions/popover/util.d.ts.map +0 -1
  280. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  281. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  282. package/dist/types/src/extensions/preview/preview.d.ts +0 -28
  283. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  284. package/dist/types/src/extensions/selection.d.ts +0 -24
  285. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  286. package/dist/types/src/extensions/state.d.ts +0 -2
  287. package/dist/types/src/extensions/state.d.ts.map +0 -1
  288. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  289. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  290. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  291. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  292. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  293. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  294. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  295. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  296. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -72
  297. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  298. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  299. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  300. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  301. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  302. package/dist/types/src/styles/index.d.ts +0 -4
  303. package/dist/types/src/styles/index.d.ts.map +0 -1
  304. package/dist/types/src/styles/markdown.d.ts +0 -8
  305. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  306. package/dist/types/src/styles/theme.d.ts +0 -38
  307. package/dist/types/src/styles/theme.d.ts.map +0 -1
  308. package/dist/types/src/styles/tokens.d.ts +0 -3
  309. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  310. package/dist/types/src/testing/PreviewPopover.d.ts +0 -20
  311. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  312. package/dist/types/src/testing/index.d.ts +0 -3
  313. package/dist/types/src/testing/index.d.ts.map +0 -1
  314. package/dist/types/src/testing/util.d.ts +0 -3
  315. package/dist/types/src/testing/util.d.ts.map +0 -1
  316. package/dist/types/src/types/index.d.ts +0 -2
  317. package/dist/types/src/types/index.d.ts.map +0 -1
  318. package/dist/types/src/types/types.d.ts +0 -21
  319. package/dist/types/src/types/types.d.ts.map +0 -1
  320. package/dist/types/src/util/cursor.d.ts +0 -31
  321. package/dist/types/src/util/cursor.d.ts.map +0 -1
  322. package/dist/types/src/util/debug.d.ts +0 -17
  323. package/dist/types/src/util/debug.d.ts.map +0 -1
  324. package/dist/types/src/util/decorations.d.ts +0 -4
  325. package/dist/types/src/util/decorations.d.ts.map +0 -1
  326. package/dist/types/src/util/dom.d.ts +0 -10
  327. package/dist/types/src/util/dom.d.ts.map +0 -1
  328. package/dist/types/src/util/facet.d.ts +0 -3
  329. package/dist/types/src/util/facet.d.ts.map +0 -1
  330. package/src/components/EditorToolbar/util.ts +0 -76
  331. package/src/defaults.ts +0 -52
  332. package/src/extensions/annotations.ts +0 -55
  333. package/src/extensions/autocomplete/autocomplete.ts +0 -220
  334. package/src/extensions/autocomplete/index.ts +0 -8
  335. package/src/extensions/autocomplete/match.ts +0 -46
  336. package/src/extensions/autocomplete/placeholder.ts +0 -117
  337. package/src/extensions/autocomplete/typeahead.ts +0 -87
  338. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  339. package/src/extensions/automerge/automerge.test.tsx +0 -78
  340. package/src/extensions/automerge/automerge.ts +0 -105
  341. package/src/extensions/automerge/cursor.ts +0 -28
  342. package/src/extensions/automerge/defs.ts +0 -31
  343. package/src/extensions/automerge/index.ts +0 -5
  344. package/src/extensions/automerge/sync.ts +0 -79
  345. package/src/extensions/automerge/update-automerge.ts +0 -50
  346. package/src/extensions/automerge/update-codemirror.ts +0 -115
  347. package/src/extensions/autoscroll.ts +0 -157
  348. package/src/extensions/awareness/awareness-provider.ts +0 -127
  349. package/src/extensions/awareness/awareness.ts +0 -315
  350. package/src/extensions/awareness/index.ts +0 -6
  351. package/src/extensions/blast.ts +0 -363
  352. package/src/extensions/comments.ts +0 -597
  353. package/src/extensions/debug.ts +0 -15
  354. package/src/extensions/dnd.ts +0 -37
  355. package/src/extensions/factories.ts +0 -276
  356. package/src/extensions/focus.ts +0 -36
  357. package/src/extensions/folding.tsx +0 -44
  358. package/src/extensions/hashtag.tsx +0 -68
  359. package/src/extensions/index.ts +0 -29
  360. package/src/extensions/json.ts +0 -57
  361. package/src/extensions/listener.ts +0 -38
  362. package/src/extensions/markdown/action.ts +0 -117
  363. package/src/extensions/markdown/bundle.ts +0 -95
  364. package/src/extensions/markdown/changes.test.ts +0 -26
  365. package/src/extensions/markdown/changes.ts +0 -149
  366. package/src/extensions/markdown/debug.ts +0 -44
  367. package/src/extensions/markdown/decorate.ts +0 -601
  368. package/src/extensions/markdown/formatting.test.ts +0 -498
  369. package/src/extensions/markdown/formatting.ts +0 -1267
  370. package/src/extensions/markdown/highlight.ts +0 -183
  371. package/src/extensions/markdown/image.ts +0 -118
  372. package/src/extensions/markdown/index.ts +0 -13
  373. package/src/extensions/markdown/link.ts +0 -50
  374. package/src/extensions/markdown/parser.test.ts +0 -75
  375. package/src/extensions/markdown/styles.ts +0 -135
  376. package/src/extensions/markdown/table.ts +0 -150
  377. package/src/extensions/mention.ts +0 -41
  378. package/src/extensions/modes.ts +0 -41
  379. package/src/extensions/outliner/commands.ts +0 -270
  380. package/src/extensions/outliner/editor.test.ts +0 -33
  381. package/src/extensions/outliner/editor.ts +0 -184
  382. package/src/extensions/outliner/index.ts +0 -7
  383. package/src/extensions/outliner/menu.ts +0 -128
  384. package/src/extensions/outliner/outliner.test.ts +0 -100
  385. package/src/extensions/outliner/outliner.ts +0 -167
  386. package/src/extensions/outliner/selection.ts +0 -50
  387. package/src/extensions/outliner/tree.test.ts +0 -168
  388. package/src/extensions/outliner/tree.ts +0 -317
  389. package/src/extensions/popover/index.ts +0 -12
  390. package/src/extensions/popover/modal.ts +0 -24
  391. package/src/extensions/popover/util.ts +0 -29
  392. package/src/extensions/preview/index.ts +0 -5
  393. package/src/extensions/preview/preview.ts +0 -188
  394. package/src/extensions/selection.ts +0 -100
  395. package/src/extensions/state.ts +0 -7
  396. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  397. package/src/extensions/tags/extended-markdown.ts +0 -78
  398. package/src/extensions/tags/index.ts +0 -7
  399. package/src/extensions/tags/streamer.ts +0 -243
  400. package/src/extensions/tags/xml-tags.ts +0 -393
  401. package/src/extensions/tags/xml-util.ts +0 -94
  402. package/src/extensions/typewriter.ts +0 -68
  403. package/src/styles/index.ts +0 -7
  404. package/src/styles/markdown.ts +0 -26
  405. package/src/styles/theme.ts +0 -269
  406. package/src/styles/tokens.ts +0 -17
  407. package/src/testing/PreviewPopover.tsx +0 -80
  408. package/src/testing/index.ts +0 -6
  409. package/src/testing/util.ts +0 -7
  410. package/src/types/index.ts +0 -5
  411. package/src/types/types.ts +0 -32
  412. package/src/util/cursor.ts +0 -56
  413. package/src/util/debug.ts +0 -64
  414. package/src/util/decorations.ts +0 -21
  415. package/src/util/dom.ts +0 -34
  416. package/src/util/facet.ts +0 -13
@@ -2,43 +2,55 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import { RegistryContext, useAtomValue } from '@effect-atom/atom-react';
5
6
  import { type Meta, type StoryObj } from '@storybook/react-vite';
6
- import React, { useCallback, useState } from 'react';
7
+ import React, { useCallback, useContext, useState } from 'react';
7
8
 
8
9
  import { invariant } from '@dxos/invariant';
9
10
  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, useEditorToolbarState } from '../components';
14
- import { editorWidth } from '../defaults';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
+ import { withRegistry } from '@dxos/storybook-utils';
15
13
  import {
14
+ type EditorInputMode,
15
+ type EditorViewMode,
16
16
  InputModeExtensions,
17
17
  createBasicExtensions,
18
18
  createMarkdownExtensions,
19
19
  createThemeExtensions,
20
20
  decorateMarkdown,
21
+ editorWidth,
21
22
  formattingKeymap,
22
- useFormattingState,
23
- } from '../extensions';
23
+ formattingListener,
24
+ } from '@dxos/ui-editor';
25
+ import { mx } from '@dxos/ui-theme';
26
+
27
+ import { EditorToolbar, type EditorToolbarState, useEditorToolbar } from '../components';
24
28
  import { type UseTextEditorProps, useTextEditor } from '../hooks';
25
29
  import { translations } from '../translations';
26
- import { type EditorInputMode, type EditorViewMode } from '../types';
27
30
 
28
31
  type StoryProps = { placeholder?: string } & UseTextEditorProps;
29
32
 
30
33
  const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
31
34
  const { themeMode } = useThemeContext();
32
- const toolbarState = useEditorToolbarState({ viewMode: 'source' });
33
- const viewMode = toolbarState.viewMode;
34
- const trackFormatting = useFormattingState(toolbarState);
35
+ const registry = useContext(RegistryContext);
36
+
37
+ const toolbarState = useEditorToolbar({ viewMode: 'source' });
38
+ const { viewMode } = useAtomValue(toolbarState);
39
+
40
+ const updateToolbarState = useCallback(
41
+ (formatting: EditorToolbarState) => {
42
+ registry.update(toolbarState, (state) => ({ ...state, ...formatting }));
43
+ },
44
+ [registry, toolbarState],
45
+ );
46
+
35
47
  // TODO(wittjosiah): Provide way to change the input mode.
36
48
  const [editorInputMode, _setEditorInputMode] = useState<EditorInputMode>('default');
37
49
  const { parentRef, view } = useTextEditor(
38
50
  () => ({
39
51
  autoFocus,
40
52
  initialValue,
41
- moveToEndOfLine: true,
53
+ selectionEnd: true,
42
54
  extensions: [
43
55
  editorInputMode ? InputModeExtensions[editorInputMode] : [],
44
56
  createBasicExtensions({ placeholder, lineWrapping: true, readOnly: viewMode === 'readonly', search: true }),
@@ -46,7 +58,7 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
46
58
  createThemeExtensions({ themeMode, syntaxHighlighting: true }),
47
59
  viewMode === 'source' ? [] : decorateMarkdown(),
48
60
  formattingKeymap(),
49
- trackFormatting,
61
+ formattingListener(updateToolbarState),
50
62
  ],
51
63
  }),
52
64
  [editorInputMode, viewMode, themeMode, placeholder],
@@ -57,16 +69,19 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
57
69
  return view;
58
70
  }, [view]);
59
71
 
60
- const handleViewModeChange = useCallback((mode: EditorViewMode) => {
61
- toolbarState.viewMode = mode;
62
- }, []);
72
+ const handleViewModeChange = useCallback(
73
+ (mode: EditorViewMode) => {
74
+ registry.update(toolbarState, (state) => ({ ...state, viewMode: mode }));
75
+ },
76
+ [registry, toolbarState],
77
+ );
63
78
 
64
79
  // TODO(marijn): This doesn't update the state on view changes.
65
80
  // Also not sure if view is even guaranteed to exist at this point.
66
81
  return (
67
82
  <div role='none' className={mx('fixed inset-0 flex flex-col')}>
68
- {toolbarState && <EditorToolbar state={toolbarState} getView={getView} viewMode={handleViewModeChange} />}
69
- <div role='none' className={mx('grow overflow-hidden', attentionSurface)}>
83
+ {toolbarState && <EditorToolbar state={toolbarState} getView={getView} onViewModeChange={handleViewModeChange} />}
84
+ <div role='none' className='grow overflow-hidden'>
70
85
  <div className={mx(editorWidth)} ref={parentRef} />
71
86
  </div>
72
87
  </div>
@@ -76,7 +91,7 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
76
91
  const meta = {
77
92
  title: 'ui/react-ui-editor/EditorToolbar',
78
93
  render: DefaultStory,
79
- decorators: [withTheme],
94
+ decorators: [withRegistry, withTheme(), withLayout({ layout: 'fullscreen' })],
80
95
  parameters: {
81
96
  layout: 'fullscreen',
82
97
  translations,
@@ -91,6 +106,6 @@ export const Default: Story = {
91
106
  args: {
92
107
  autoFocus: true,
93
108
  placeholder: 'Text...',
94
- initialValue: '# Demo\n\nThis is a document.\n\n',
109
+ initialValue: '# Demo\n\nThis is a **document**.\n\n',
95
110
  },
96
111
  };
@@ -8,17 +8,15 @@ import React from 'react';
8
8
 
9
9
  import { log } from '@dxos/log';
10
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 '../testing';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
+ import { blast, defaultOptions, dropFile, join, typewriter } 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
  },
@@ -37,7 +35,7 @@ const typewriterItems = localStorage.getItem('dxos.org/testing/typewriter')?.spl
37
35
  export const Typewriter: Story = {
38
36
  render: () => (
39
37
  <EditorStory
40
- text={str('# Typewriter', '', content.paragraphs, content.footer)}
38
+ text={join('# Typewriter', '', content.paragraphs, content.footer)}
41
39
  extensions={[typewriter({ items: typewriterItems })]}
42
40
  />
43
41
  ),
@@ -50,7 +48,7 @@ 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
53
  typewriter({ items: typewriterItems }),
56
54
  blast(
@@ -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 '../testing';
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(),
@@ -2,23 +2,14 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type EditorView } from '@codemirror/view';
6
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
7
- import React, { useMemo, useRef } from 'react';
6
+ import React, { useMemo, useState } from 'react';
8
7
 
9
- import { withTheme } from '@dxos/react-ui/testing';
8
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
10
9
  import { withAttention } from '@dxos/react-ui-attention/testing';
10
+ import { deleteItem, hashtag, join, listItemToString, outliner, treeFacet } from '@dxos/ui-editor';
11
11
 
12
- import {
13
- type PopoverMenuGroup,
14
- PopoverMenuProvider,
15
- deleteItem,
16
- hashtag,
17
- listItemToString,
18
- outliner,
19
- treeFacet,
20
- } from '../extensions';
21
- import { str } from '../testing';
12
+ import { type EditorController, type EditorMenuGroup, EditorMenuProvider } from '../components';
22
13
 
23
14
  import { EditorStory } from './components';
24
15
 
@@ -27,9 +18,10 @@ type StoryProps = {
27
18
  };
28
19
 
29
20
  const DefaultStory = ({ text }: StoryProps) => {
30
- const viewRef = useRef<EditorView>(null);
21
+ const [controller, setController] = useState<EditorController | null>(null);
31
22
 
32
- const commandGroups: PopoverMenuGroup[] = useMemo(
23
+ const extensions = useMemo(() => [outliner(), hashtag()], []);
24
+ const commandGroups: EditorMenuGroup[] = useMemo(
33
25
  () => [
34
26
  {
35
27
  id: 'outliner-actions',
@@ -37,7 +29,7 @@ const DefaultStory = ({ text }: StoryProps) => {
37
29
  {
38
30
  id: 'delete-row',
39
31
  label: 'Delete',
40
- onSelect: (view: EditorView) => {
32
+ onSelect: ({ view }) => {
41
33
  deleteItem(view);
42
34
  },
43
35
  },
@@ -48,19 +40,19 @@ const DefaultStory = ({ text }: StoryProps) => {
48
40
  );
49
41
 
50
42
  return (
51
- <PopoverMenuProvider
52
- view={viewRef.current}
43
+ <EditorMenuProvider
44
+ view={controller?.view}
53
45
  groups={commandGroups}
54
46
  onSelect={({ view, item }) => {
55
47
  if (item.onSelect) {
56
- return item.onSelect(view, view.state.selection.main.head);
48
+ return item.onSelect({ view, head: view.state.selection.main.head });
57
49
  }
58
50
  }}
59
51
  >
60
52
  <EditorStory
61
- ref={viewRef}
53
+ ref={setController}
62
54
  text={text}
63
- extensions={[outliner(), hashtag()]}
55
+ extensions={extensions}
64
56
  debug='raw+tree'
65
57
  debugCustom={(view) => {
66
58
  const tree = view.state.facet(treeFacet);
@@ -69,14 +61,14 @@ const DefaultStory = ({ text }: StoryProps) => {
69
61
  return <pre className='p-1 overflow-auto text-xs text-green-800 dark:text-green-200'>{lines.join('\n')}</pre>;
70
62
  }}
71
63
  />
72
- </PopoverMenuProvider>
64
+ </EditorMenuProvider>
73
65
  );
74
66
  };
75
67
 
76
68
  const meta = {
77
69
  title: 'ui/react-ui-editor/Outliner',
78
70
  render: DefaultStory,
79
- decorators: [withTheme, withAttention],
71
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' }), withAttention()],
80
72
  parameters: {
81
73
  layout: 'fullscreen',
82
74
  },
@@ -92,7 +84,7 @@ export const Empty: Story = {
92
84
 
93
85
  export const Basic: Story = {
94
86
  args: {
95
- text: str(
87
+ text: join(
96
88
  //
97
89
  '- [ ] A',
98
90
  '- [ ] B',
@@ -107,7 +99,7 @@ export const Basic: Story = {
107
99
 
108
100
  export const Nested: Story = {
109
101
  args: {
110
- text: str(
102
+ text: join(
111
103
  //
112
104
  '- [ ] A',
113
105
  ' - [ ] B',
@@ -122,7 +114,7 @@ export const Nested: Story = {
122
114
 
123
115
  export const Continuation: Story = {
124
116
  args: {
125
- text: str(
117
+ text: join(
126
118
  //
127
119
  '- [ ] A',
128
120
  '- [ ] B',
@@ -2,71 +2,66 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type EditorView } from '@codemirror/view';
6
5
  import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import React, { useCallback, useState } from 'react';
8
7
 
9
8
  import { Obj, Query } from '@dxos/echo';
10
9
  import { faker } from '@dxos/random';
11
- import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
12
- import { Domino } from '@dxos/react-ui';
13
- import { withTheme } from '@dxos/react-ui/testing';
14
- import { Testing, type ValueGenerator, createObjectFactory } from '@dxos/schema/testing';
10
+ import { useClientStory, withClientProvider } from '@dxos/react-client/testing';
11
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
12
+ import { TestSchema, type ValueGenerator, createObjectFactory } from '@dxos/schema/testing';
13
+ import { Domino, mx } from '@dxos/ui';
14
+ import { insertAtCursor, insertAtLineStart, join } from '@dxos/ui-editor';
15
15
 
16
16
  import {
17
- type PopoverMenuGroup,
18
- type PopoverMenuItem,
19
- PopoverMenuProvider,
20
- type UsePopoverMenuProps,
17
+ type EditorController,
18
+ type EditorMenuGroup,
19
+ type EditorMenuItem,
20
+ EditorMenuProvider,
21
+ type UseEditorMenuProps,
21
22
  createMenuGroup,
22
23
  filterMenuGroups,
23
24
  formattingCommands,
24
- insertAtCursor,
25
- insertAtLineStart,
26
25
  linkSlashCommands,
27
- usePopoverMenu,
28
- } from '../extensions';
29
- import { str } from '../testing';
26
+ useEditorMenu,
27
+ } from '../components';
30
28
 
31
29
  import { EditorStory } from './components';
32
30
 
33
31
  const generator: ValueGenerator = faker as any;
34
32
 
35
- const customCompletions: PopoverMenuGroup = createMenuGroup({
33
+ const customCompletions: EditorMenuGroup = createMenuGroup({
36
34
  id: 'test',
37
35
  items: ['Hello world!', 'Hello DXOS', 'Hello Composer', 'https://dxos.org'],
38
36
  });
39
37
 
40
- const placeholder = (trigger: string[]) =>
41
- Domino.of('div')
42
- .children(
43
- Domino.of('span').text('Press'),
44
- ...trigger.map((trigger) =>
45
- Domino.of('span')
46
- .text(trigger)
47
- .classNames('border border-separator rounded-sm mx-1 pis-1 pie-1 pbs-[2px] pbe-[3px]'),
48
- ),
49
- Domino.of('span').text('for commands'),
50
- )
51
- .build();
52
-
53
- type StoryProps = Omit<UsePopoverMenuProps, 'viewRef'> & { text: string };
38
+ const placeholder = (trigger: string[]) => {
39
+ const pressEl = Domino.of('span').text('Press');
40
+ const triggerEls = trigger.map((trigger) =>
41
+ Domino.of('span').classNames(mx('border border-separator rounded-xs mx-1 px-1 py-[2px] pb-[3px]')).text(trigger),
42
+ );
43
+ const forCommandsEl = Domino.of('span').text('for commands');
44
+ return Domino.of('div').children(pressEl, ...triggerEls, forCommandsEl).root;
45
+ };
46
+
47
+ type StoryProps = Omit<UseEditorMenuProps, 'viewRef'> & { text: string };
54
48
 
55
49
  const DefaultStory = ({ text, ...props }: StoryProps) => {
56
- const [view, setView] = useState<EditorView | null>(null);
57
- const { groupsRef, extension, ...menuProps } = usePopoverMenu(props);
50
+ const [controller, setController] = useState<EditorController | null>(null);
51
+ const { groupsRef, extension, ...menuProps } = useEditorMenu(props);
58
52
 
59
53
  return (
60
- <PopoverMenuProvider view={view} groups={groupsRef.current} {...menuProps}>
61
- <EditorStory ref={setView} text={text} extensions={extension} />
62
- </PopoverMenuProvider>
54
+ <EditorMenuProvider view={controller?.view} groups={groupsRef.current} {...menuProps}>
55
+ <EditorStory ref={setController} text={text} extensions={extension} />
56
+ </EditorMenuProvider>
63
57
  );
64
58
  };
65
59
 
66
60
  const LinkStory = (args: StoryProps) => {
67
- const { space } = useClientProvider();
68
- const getMenu = useCallback<NonNullable<UsePopoverMenuProps['getMenu']>>(
69
- async ({ text, trigger }): Promise<PopoverMenuGroup[]> => {
61
+ const { space } = useClientStory();
62
+
63
+ const getMenu = useCallback<NonNullable<UseEditorMenuProps['getMenu']>>(
64
+ async ({ text, trigger }): Promise<EditorMenuGroup[]> => {
70
65
  if (trigger === '/') {
71
66
  return filterMenuGroups([linkSlashCommands], (item) =>
72
67
  text ? (item.label as string).toLowerCase().includes(text.toLowerCase()) : true,
@@ -78,15 +73,15 @@ const LinkStory = (args: StoryProps) => {
78
73
  }
79
74
 
80
75
  const name = text?.startsWith('@') ? text.slice(1).toLowerCase() : (text?.toLowerCase() ?? '');
81
- const result = await space?.db.query(Query.type(Testing.Contact)).run();
82
- const items = result.objects
76
+ const result = await space?.db.query(Query.type(TestSchema.Person)).run();
77
+ const items = result
83
78
  .filter((object) => object.name.toLowerCase().includes(name))
84
79
  .map(
85
- (object): PopoverMenuItem => ({
80
+ (object): EditorMenuItem => ({
86
81
  id: object.id,
87
82
  label: object.name,
88
83
  icon: 'ph--user--regular',
89
- onSelect: (view, head) => {
84
+ onSelect: ({ view, head }) => {
90
85
  const link = `[${object.name}](${Obj.getDXN(object)})`;
91
86
  if (text?.startsWith('@')) {
92
87
  insertAtLineStart(view, head, `!${link}\n`);
@@ -108,7 +103,7 @@ const LinkStory = (args: StoryProps) => {
108
103
  const meta = {
109
104
  title: 'ui/react-ui-editor/Popover',
110
105
  render: DefaultStory,
111
- decorators: [withTheme],
106
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
112
107
  parameters: {
113
108
  layout: 'fullscreen',
114
109
  },
@@ -120,7 +115,7 @@ type Story = StoryObj<typeof meta>;
120
115
 
121
116
  export const Default: Story = {
122
117
  args: {
123
- text: str('# Autocomplete', '', ''),
118
+ text: join('# Autocomplete', '', ''),
124
119
  triggerKey: 'Ctrl-Space',
125
120
  filter: true,
126
121
  getMenu: () => [customCompletions],
@@ -129,7 +124,7 @@ export const Default: Story = {
129
124
 
130
125
  export const Formatting: Story = {
131
126
  args: {
132
- text: str('# Slash command', '', ''),
127
+ text: join('# Slash command', '', ''),
133
128
  trigger: '/',
134
129
  placeholder: {
135
130
  content: () => placeholder(['/']),
@@ -144,17 +139,17 @@ export const Link: Story = {
144
139
  withClientProvider({
145
140
  createSpace: true,
146
141
  onInitialized: async (client) => {
147
- client.addTypes([Testing.Contact]);
142
+ await client.addTypes([TestSchema.Person]);
148
143
  },
149
144
  onCreateSpace: async ({ space }) => {
150
145
  const createObjects = createObjectFactory(space.db, generator);
151
- await createObjects([{ type: Testing.Contact, count: 10 }]);
146
+ await createObjects([{ type: TestSchema.Person, count: 10 }]);
152
147
  await space.db.flush({ indexes: true });
153
148
  },
154
149
  }),
155
150
  ],
156
151
  args: {
157
- text: str('# Links', '', ''),
152
+ text: join('# Links', '', ''),
158
153
  trigger: ['/', '@'],
159
154
  placeholder: {
160
155
  content: () => placeholder(['/', '@']),