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

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 (356) hide show
  1. package/dist/lib/browser/{chunk-22UMM3QJ.mjs → chunk-HL3YF6WC.mjs} +2 -2
  2. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +7471 -5897
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/types/index.mjs +1 -1
  7. package/dist/lib/node-esm/{chunk-YXYQPV6R.mjs → chunk-YJZGD3LY.mjs} +2 -2
  8. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +7 -0
  9. package/dist/lib/node-esm/index.mjs +7471 -5897
  10. package/dist/lib/node-esm/index.mjs.map +4 -4
  11. package/dist/lib/node-esm/meta.json +1 -1
  12. package/dist/lib/node-esm/types/index.mjs +1 -1
  13. package/dist/types/src/components/Editor/Editor.d.ts +37 -15
  14. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  15. package/dist/types/src/components/Editor/Editor.stories.d.ts +20 -0
  16. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  17. package/dist/types/src/components/EditorContent/EditorContent.d.ts +29 -0
  18. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +26 -0
  20. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorContent/controller.d.ts +10 -0
  22. package/dist/types/src/components/EditorContent/controller.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorContent/index.d.ts +3 -0
  24. package/dist/types/src/components/EditorContent/index.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +36 -0
  26. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/index.d.ts +7 -0
  28. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  30. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  32. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +47 -0
  34. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  35. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  36. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  37. package/dist/types/src/components/EditorMenuProvider/util.d.ts +8 -0
  38. package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +1 -0
  39. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  40. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  41. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  42. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  43. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +26 -2
  44. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/actions.d.ts +39 -0
  46. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +1 -0
  47. package/dist/types/src/components/EditorToolbar/blocks.d.ts +3 -3
  48. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/formatting.d.ts +3 -3
  50. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  51. package/dist/types/src/components/EditorToolbar/headings.d.ts +3 -3
  52. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  53. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  54. package/dist/types/src/components/EditorToolbar/index.d.ts +2 -1
  55. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  56. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  57. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +11 -0
  58. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -0
  59. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +3 -3
  60. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  61. package/dist/types/src/components/index.d.ts +4 -2
  62. package/dist/types/src/components/index.d.ts.map +1 -1
  63. package/dist/types/src/defaults.d.ts.map +1 -1
  64. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +17 -0
  65. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +1 -0
  66. package/dist/types/src/extensions/autocomplete/index.d.ts +5 -0
  67. package/dist/types/src/extensions/autocomplete/index.d.ts.map +1 -0
  68. package/dist/types/src/extensions/autocomplete/match.d.ts +13 -0
  69. package/dist/types/src/extensions/autocomplete/match.d.ts.map +1 -0
  70. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +20 -0
  71. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +1 -0
  72. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +10 -0
  73. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +1 -0
  74. package/dist/types/src/extensions/automerge/automerge.d.ts +1 -1
  75. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  76. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +10 -19
  77. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
  78. package/dist/types/src/extensions/automerge/cursor.d.ts +1 -1
  79. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
  80. package/dist/types/src/extensions/automerge/sync.d.ts +3 -3
  81. package/dist/types/src/extensions/automerge/sync.d.ts.map +1 -1
  82. package/dist/types/src/extensions/automerge/update-automerge.d.ts +1 -1
  83. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
  84. package/dist/types/src/extensions/autoscroll.d.ts +20 -0
  85. package/dist/types/src/extensions/autoscroll.d.ts.map +1 -0
  86. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +1 -1
  87. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +1 -1
  88. package/dist/types/src/extensions/blocks.d.ts +2 -0
  89. package/dist/types/src/extensions/blocks.d.ts.map +1 -0
  90. package/dist/types/src/extensions/bookmarks.d.ts +12 -0
  91. package/dist/types/src/extensions/bookmarks.d.ts.map +1 -0
  92. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  93. package/dist/types/src/extensions/factories.d.ts +11 -11
  94. package/dist/types/src/extensions/factories.d.ts.map +1 -1
  95. package/dist/types/src/extensions/focus.d.ts.map +1 -1
  96. package/dist/types/src/extensions/folding.d.ts.map +1 -1
  97. package/dist/types/src/extensions/index.d.ts +10 -1
  98. package/dist/types/src/extensions/index.d.ts.map +1 -1
  99. package/dist/types/src/extensions/json.d.ts +1 -1
  100. package/dist/types/src/extensions/json.d.ts.map +1 -1
  101. package/dist/types/src/extensions/listener.d.ts +8 -6
  102. package/dist/types/src/extensions/listener.d.ts.map +1 -1
  103. package/dist/types/src/extensions/markdown/bundle.d.ts +8 -2
  104. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  105. package/dist/types/src/extensions/markdown/changes.d.ts +1 -1
  106. package/dist/types/src/extensions/markdown/changes.d.ts.map +1 -1
  107. package/dist/types/src/extensions/markdown/decorate.d.ts +9 -1
  108. package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
  109. package/dist/types/src/extensions/markdown/formatting.d.ts +1 -3
  110. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
  111. package/dist/types/src/extensions/markdown/image.d.ts.map +1 -1
  112. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
  113. package/dist/types/src/extensions/modal.d.ts +7 -0
  114. package/dist/types/src/extensions/modal.d.ts.map +1 -0
  115. package/dist/types/src/extensions/modes.d.ts +1 -1
  116. package/dist/types/src/extensions/modes.d.ts.map +1 -1
  117. package/dist/types/src/extensions/outliner/menu.d.ts +8 -0
  118. package/dist/types/src/extensions/outliner/menu.d.ts.map +1 -0
  119. package/dist/types/src/extensions/outliner/outliner.d.ts +1 -1
  120. package/dist/types/src/extensions/outliner/outliner.d.ts.map +1 -1
  121. package/dist/types/src/extensions/outliner/tree.d.ts +1 -1
  122. package/dist/types/src/extensions/outliner/tree.d.ts.map +1 -1
  123. package/dist/types/src/extensions/preview/preview.d.ts +8 -8
  124. package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
  125. package/dist/types/src/extensions/replacer.d.ts +21 -0
  126. package/dist/types/src/extensions/replacer.d.ts.map +1 -0
  127. package/dist/types/src/extensions/replacer.test.d.ts +2 -0
  128. package/dist/types/src/extensions/replacer.test.d.ts.map +1 -0
  129. package/dist/types/src/extensions/scrolling.d.ts +78 -0
  130. package/dist/types/src/extensions/scrolling.d.ts.map +1 -0
  131. package/dist/types/src/extensions/state.d.ts +2 -0
  132. package/dist/types/src/extensions/state.d.ts.map +1 -0
  133. package/dist/types/src/extensions/submit.d.ts +10 -0
  134. package/dist/types/src/extensions/submit.d.ts.map +1 -0
  135. package/dist/types/src/extensions/tab.d.ts +4 -0
  136. package/dist/types/src/extensions/tab.d.ts.map +1 -0
  137. package/dist/types/src/extensions/tags/extended-markdown.d.ts +10 -0
  138. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +1 -0
  139. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +2 -0
  140. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +1 -0
  141. package/dist/types/src/extensions/tags/index.d.ts +4 -0
  142. package/dist/types/src/extensions/tags/index.d.ts.map +1 -0
  143. package/dist/types/src/extensions/tags/streamer.d.ts +12 -0
  144. package/dist/types/src/extensions/tags/streamer.d.ts.map +1 -0
  145. package/dist/types/src/extensions/tags/xml-tags.d.ts +97 -0
  146. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +1 -0
  147. package/dist/types/src/extensions/tags/xml-util.d.ts +10 -0
  148. package/dist/types/src/extensions/tags/xml-util.d.ts.map +1 -0
  149. package/dist/types/src/hooks/useTextEditor.d.ts +5 -9
  150. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  151. package/dist/types/src/stories/CommandDialog.stories.d.ts +14 -0
  152. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -0
  153. package/dist/types/src/stories/Comments.stories.d.ts +21 -10
  154. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  155. package/dist/types/src/stories/EditorToolbar.stories.d.ts +39 -3
  156. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  157. package/dist/types/src/stories/Experimental.stories.d.ts +22 -13
  158. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  159. package/dist/types/src/stories/Markdown.stories.d.ts +32 -43
  160. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  161. package/dist/types/src/stories/Outliner.stories.d.ts +15 -21
  162. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  163. package/dist/types/src/stories/Popover.stories.d.ts +20 -0
  164. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  165. package/dist/types/src/stories/Preview.stories.d.ts +22 -7
  166. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  167. package/dist/types/src/stories/Tags.stories.d.ts +16 -0
  168. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -0
  169. package/dist/types/src/stories/TextEditor.stories.d.ts +37 -52
  170. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  171. package/dist/types/src/stories/components/EditorStory.d.ts +8 -9
  172. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  173. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  174. package/dist/types/src/styles/theme.d.ts.map +1 -1
  175. package/dist/types/src/translations.d.ts +1 -1
  176. package/dist/types/src/types/types.d.ts +2 -2
  177. package/dist/types/src/types/types.d.ts.map +1 -1
  178. package/dist/types/src/util/debug.d.ts +5 -1
  179. package/dist/types/src/util/debug.d.ts.map +1 -1
  180. package/dist/types/src/util/decorations.d.ts +4 -0
  181. package/dist/types/src/util/decorations.d.ts.map +1 -0
  182. package/dist/types/src/util/dom.d.ts +2 -12
  183. package/dist/types/src/util/dom.d.ts.map +1 -1
  184. package/dist/types/src/util/index.d.ts +1 -0
  185. package/dist/types/src/util/index.d.ts.map +1 -1
  186. package/dist/types/src/util/react.d.ts +1 -1
  187. package/dist/types/src/util/react.d.ts.map +1 -1
  188. package/dist/types/tsconfig.tsbuildinfo +1 -1
  189. package/package.json +70 -68
  190. package/src/components/Editor/Editor.stories.tsx +89 -0
  191. package/src/components/Editor/Editor.tsx +160 -25
  192. package/src/components/EditorContent/EditorContent.stories.tsx +70 -0
  193. package/src/components/EditorContent/EditorContent.tsx +70 -0
  194. package/src/components/EditorContent/controller.ts +50 -0
  195. package/src/components/EditorContent/index.ts +6 -0
  196. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +233 -0
  197. package/src/components/EditorMenuProvider/index.ts +11 -0
  198. package/src/components/EditorMenuProvider/menu-presets.ts +123 -0
  199. package/src/components/EditorMenuProvider/menu.ts +71 -0
  200. package/src/components/EditorMenuProvider/popover.ts +287 -0
  201. package/src/components/EditorMenuProvider/useEditorMenu.ts +175 -0
  202. package/src/components/EditorMenuProvider/util.ts +31 -0
  203. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +82 -0
  204. package/src/components/EditorPreviewProvider/index.ts +5 -0
  205. package/src/components/EditorToolbar/EditorToolbar.tsx +116 -96
  206. package/src/components/EditorToolbar/actions.ts +86 -0
  207. package/src/components/EditorToolbar/blocks.ts +20 -23
  208. package/src/components/EditorToolbar/formatting.ts +21 -24
  209. package/src/components/EditorToolbar/headings.ts +16 -9
  210. package/src/components/EditorToolbar/image.ts +9 -5
  211. package/src/components/EditorToolbar/index.ts +3 -7
  212. package/src/components/EditorToolbar/search.ts +9 -5
  213. package/src/components/EditorToolbar/useEditorToolbar.ts +20 -0
  214. package/src/components/EditorToolbar/view-mode.ts +11 -6
  215. package/src/components/index.ts +8 -2
  216. package/src/defaults.ts +5 -2
  217. package/src/extensions/autocomplete/autocomplete.ts +151 -0
  218. package/src/extensions/autocomplete/index.ts +8 -0
  219. package/src/extensions/autocomplete/match.ts +46 -0
  220. package/src/extensions/{command → autocomplete}/placeholder.ts +21 -17
  221. package/src/extensions/{command → autocomplete}/typeahead.ts +6 -48
  222. package/src/extensions/automerge/automerge.stories.tsx +28 -21
  223. package/src/extensions/automerge/automerge.ts +28 -9
  224. package/src/extensions/automerge/cursor.ts +1 -1
  225. package/src/extensions/automerge/sync.ts +8 -4
  226. package/src/extensions/automerge/update-automerge.ts +1 -1
  227. package/src/extensions/autoscroll.ts +163 -0
  228. package/src/extensions/awareness/awareness-provider.ts +2 -2
  229. package/src/extensions/blocks.ts +131 -0
  230. package/src/extensions/bookmarks.ts +75 -0
  231. package/src/extensions/comments.ts +13 -8
  232. package/src/extensions/factories.ts +50 -32
  233. package/src/extensions/focus.ts +5 -4
  234. package/src/extensions/folding.tsx +3 -6
  235. package/src/extensions/hashtag.tsx +2 -2
  236. package/src/extensions/index.ts +10 -1
  237. package/src/extensions/json.ts +1 -1
  238. package/src/extensions/listener.ts +14 -20
  239. package/src/extensions/markdown/bundle.ts +39 -5
  240. package/src/extensions/markdown/decorate.ts +26 -17
  241. package/src/extensions/markdown/formatting.ts +8 -10
  242. package/src/extensions/markdown/highlight.ts +1 -1
  243. package/src/extensions/markdown/image.ts +5 -6
  244. package/src/extensions/markdown/link.ts +3 -0
  245. package/src/extensions/markdown/table.ts +13 -7
  246. package/src/extensions/modal.ts +24 -0
  247. package/src/extensions/modes.ts +2 -2
  248. package/src/extensions/{command/floating-menu.ts → outliner/menu.ts} +16 -21
  249. package/src/extensions/outliner/outliner.test.ts +1 -1
  250. package/src/extensions/outliner/outliner.ts +5 -5
  251. package/src/extensions/outliner/tree.test.ts +1 -1
  252. package/src/extensions/outliner/tree.ts +1 -1
  253. package/src/extensions/preview/index.ts +1 -1
  254. package/src/extensions/preview/preview.ts +69 -69
  255. package/src/extensions/replacer.test.ts +75 -0
  256. package/src/extensions/replacer.ts +93 -0
  257. package/src/extensions/scrolling.ts +189 -0
  258. package/src/extensions/selection.ts +3 -3
  259. package/src/extensions/state.ts +7 -0
  260. package/src/extensions/submit.ts +62 -0
  261. package/src/extensions/tab.ts +29 -0
  262. package/src/extensions/tags/extended-markdown.test.ts +262 -0
  263. package/src/extensions/tags/extended-markdown.ts +78 -0
  264. package/src/extensions/tags/index.ts +7 -0
  265. package/src/extensions/tags/streamer.ts +243 -0
  266. package/src/extensions/tags/xml-tags.ts +500 -0
  267. package/src/extensions/tags/xml-util.ts +94 -0
  268. package/src/extensions/typewriter.ts +1 -1
  269. package/src/hooks/useTextEditor.ts +31 -43
  270. package/src/stories/CommandDialog.stories.tsx +83 -0
  271. package/src/stories/Comments.stories.tsx +15 -13
  272. package/src/stories/EditorToolbar.stories.tsx +18 -17
  273. package/src/stories/Experimental.stories.tsx +15 -12
  274. package/src/stories/Markdown.stories.tsx +24 -21
  275. package/src/stories/Outliner.stories.tsx +50 -39
  276. package/src/stories/Popover.stories.tsx +162 -0
  277. package/src/stories/Preview.stories.tsx +52 -46
  278. package/src/stories/Tags.stories.tsx +95 -0
  279. package/src/stories/TextEditor.stories.tsx +30 -50
  280. package/src/stories/components/EditorStory.tsx +32 -20
  281. package/src/stories/components/util.tsx +40 -8
  282. package/src/styles/markdown.ts +1 -1
  283. package/src/styles/theme.ts +16 -13
  284. package/src/translations.ts +1 -1
  285. package/src/types/types.ts +1 -1
  286. package/src/util/debug.ts +7 -2
  287. package/src/util/decorations.ts +21 -0
  288. package/src/util/dom.ts +5 -27
  289. package/src/util/index.ts +1 -0
  290. package/src/util/react.tsx +1 -1
  291. package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +0 -7
  292. package/dist/lib/browser/testing/index.mjs +0 -6
  293. package/dist/lib/browser/testing/index.mjs.map +0 -7
  294. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +0 -7
  295. package/dist/lib/node-esm/testing/index.mjs +0 -8
  296. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  297. package/dist/types/src/components/EditorToolbar/lists.d.ts +0 -19
  298. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +0 -1
  299. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  300. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  301. package/dist/types/src/components/Popover/CommandMenu.d.ts +0 -34
  302. package/dist/types/src/components/Popover/CommandMenu.d.ts.map +0 -1
  303. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts +0 -21
  304. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts.map +0 -1
  305. package/dist/types/src/components/Popover/RefPopover.d.ts +0 -34
  306. package/dist/types/src/components/Popover/RefPopover.d.ts.map +0 -1
  307. package/dist/types/src/components/Popover/index.d.ts +0 -4
  308. package/dist/types/src/components/Popover/index.d.ts.map +0 -1
  309. package/dist/types/src/extensions/autocomplete.d.ts +0 -13
  310. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  311. package/dist/types/src/extensions/command/action.d.ts +0 -17
  312. package/dist/types/src/extensions/command/action.d.ts.map +0 -1
  313. package/dist/types/src/extensions/command/command-menu.d.ts +0 -20
  314. package/dist/types/src/extensions/command/command-menu.d.ts.map +0 -1
  315. package/dist/types/src/extensions/command/command.d.ts +0 -6
  316. package/dist/types/src/extensions/command/command.d.ts.map +0 -1
  317. package/dist/types/src/extensions/command/floating-menu.d.ts +0 -7
  318. package/dist/types/src/extensions/command/floating-menu.d.ts.map +0 -1
  319. package/dist/types/src/extensions/command/hint.d.ts +0 -24
  320. package/dist/types/src/extensions/command/hint.d.ts.map +0 -1
  321. package/dist/types/src/extensions/command/index.d.ts +0 -7
  322. package/dist/types/src/extensions/command/index.d.ts.map +0 -1
  323. package/dist/types/src/extensions/command/placeholder.d.ts +0 -10
  324. package/dist/types/src/extensions/command/placeholder.d.ts.map +0 -1
  325. package/dist/types/src/extensions/command/state.d.ts +0 -16
  326. package/dist/types/src/extensions/command/state.d.ts.map +0 -1
  327. package/dist/types/src/extensions/command/typeahead.d.ts +0 -22
  328. package/dist/types/src/extensions/command/typeahead.d.ts.map +0 -1
  329. package/dist/types/src/extensions/command/useCommandMenu.d.ts +0 -26
  330. package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +0 -1
  331. package/dist/types/src/stories/Command.stories.d.ts +0 -7
  332. package/dist/types/src/stories/Command.stories.d.ts.map +0 -1
  333. package/dist/types/src/stories/CommandMenu.stories.d.ts +0 -13
  334. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  335. package/dist/types/src/testing/index.d.ts +0 -2
  336. package/dist/types/src/testing/index.d.ts.map +0 -1
  337. package/dist/types/src/testing/util.d.ts +0 -3
  338. package/dist/types/src/testing/util.d.ts.map +0 -1
  339. package/src/components/EditorToolbar/lists.ts +0 -60
  340. package/src/components/EditorToolbar/util.ts +0 -65
  341. package/src/components/Popover/CommandMenu.tsx +0 -279
  342. package/src/components/Popover/RefDropdownMenu.tsx +0 -85
  343. package/src/components/Popover/RefPopover.tsx +0 -99
  344. package/src/components/Popover/index.ts +0 -7
  345. package/src/extensions/autocomplete.ts +0 -69
  346. package/src/extensions/command/action.ts +0 -56
  347. package/src/extensions/command/command-menu.ts +0 -211
  348. package/src/extensions/command/command.ts +0 -34
  349. package/src/extensions/command/hint.ts +0 -103
  350. package/src/extensions/command/index.ts +0 -10
  351. package/src/extensions/command/state.ts +0 -90
  352. package/src/extensions/command/useCommandMenu.ts +0 -119
  353. package/src/stories/Command.stories.tsx +0 -98
  354. package/src/stories/CommandMenu.stories.tsx +0 -160
  355. package/src/testing/index.ts +0 -5
  356. package/src/testing/util.ts +0 -7
@@ -2,42 +2,58 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useMemo, useState } from 'react';
6
7
 
7
- import { type EditorView } from '@codemirror/view';
8
- import React, { useRef } from 'react';
9
-
10
- import { DropdownMenu } from '@dxos/react-ui';
8
+ import { withTheme } from '@dxos/react-ui/testing';
11
9
  import { withAttention } from '@dxos/react-ui-attention/testing';
12
- import { type Meta, withLayout, withTheme } from '@dxos/storybook-utils';
13
10
 
14
- import { RefDropdownMenu } from '../components';
11
+ import { type EditorController, type EditorMenuGroup, EditorMenuProvider } from '../components';
15
12
  import { deleteItem, hashtag, listItemToString, outliner, treeFacet } from '../extensions';
16
- import { str } from '../testing';
13
+ import { str } from '../util';
17
14
 
18
15
  import { EditorStory } from './components';
19
16
 
20
17
  type StoryProps = {
21
- text: string;
18
+ text?: string;
22
19
  };
23
20
 
24
21
  const DefaultStory = ({ text }: StoryProps) => {
25
- const viewRef = useRef<EditorView>(null);
26
-
27
- const handleDelete = () => {
28
- if (viewRef.current) {
29
- deleteItem(viewRef.current);
30
- }
31
- };
22
+ const [controller, setController] = useState<EditorController | null>(null);
23
+
24
+ const extensions = useMemo(() => [outliner(), hashtag()], []);
25
+ const commandGroups: EditorMenuGroup[] = useMemo(
26
+ () => [
27
+ {
28
+ id: 'outliner-actions',
29
+ items: [
30
+ {
31
+ id: 'delete-row',
32
+ label: 'Delete',
33
+ onSelect: ({ view }) => {
34
+ deleteItem(view);
35
+ },
36
+ },
37
+ ],
38
+ },
39
+ ],
40
+ [],
41
+ );
32
42
 
33
43
  return (
34
- <RefDropdownMenu.Provider>
44
+ <EditorMenuProvider
45
+ view={controller?.view}
46
+ groups={commandGroups}
47
+ onSelect={({ view, item }) => {
48
+ if (item.onSelect) {
49
+ return item.onSelect({ view, head: view.state.selection.main.head });
50
+ }
51
+ }}
52
+ >
35
53
  <EditorStory
36
- ref={viewRef}
54
+ ref={setController}
37
55
  text={text}
38
- extensions={[outliner(), hashtag()]}
39
- placeholder=''
40
- slots={{}}
56
+ extensions={extensions}
41
57
  debug='raw+tree'
42
58
  debugCustom={(view) => {
43
59
  const tree = view.state.facet(treeFacet);
@@ -46,33 +62,28 @@ const DefaultStory = ({ text }: StoryProps) => {
46
62
  return <pre className='p-1 overflow-auto text-xs text-green-800 dark:text-green-200'>{lines.join('\n')}</pre>;
47
63
  }}
48
64
  />
49
-
50
- <DropdownMenu.Portal>
51
- <DropdownMenu.Content>
52
- <DropdownMenu.Viewport>
53
- <DropdownMenu.Item onClick={handleDelete}>Delete</DropdownMenu.Item>
54
- </DropdownMenu.Viewport>
55
- <DropdownMenu.Arrow />
56
- </DropdownMenu.Content>
57
- </DropdownMenu.Portal>
58
- </RefDropdownMenu.Provider>
65
+ </EditorMenuProvider>
59
66
  );
60
67
  };
61
68
 
62
- const meta: Meta<StoryProps> = {
69
+ const meta = {
63
70
  title: 'ui/react-ui-editor/Outliner',
64
71
  render: DefaultStory,
65
- decorators: [withAttention, withTheme, withLayout({ fullscreen: true })],
66
- parameters: { layout: 'fullscreen' },
67
- };
72
+ decorators: [withTheme, withAttention],
73
+ parameters: {
74
+ layout: 'fullscreen',
75
+ },
76
+ } satisfies Meta<typeof DefaultStory>;
68
77
 
69
78
  export default meta;
70
79
 
71
- export const Empty = {
80
+ type Story = StoryObj<typeof meta>;
81
+
82
+ export const Empty: Story = {
72
83
  args: {},
73
84
  };
74
85
 
75
- export const Basic = {
86
+ export const Basic: Story = {
76
87
  args: {
77
88
  text: str(
78
89
  //
@@ -87,7 +98,7 @@ export const Basic = {
87
98
  },
88
99
  };
89
100
 
90
- export const Nested = {
101
+ export const Nested: Story = {
91
102
  args: {
92
103
  text: str(
93
104
  //
@@ -102,7 +113,7 @@ export const Nested = {
102
113
  },
103
114
  };
104
115
 
105
- export const Continuation = {
116
+ export const Continuation: Story = {
106
117
  args: {
107
118
  text: str(
108
119
  //
@@ -0,0 +1,162 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useCallback, useState } from 'react';
7
+
8
+ import { Obj, Query } from '@dxos/echo';
9
+ import { faker } from '@dxos/random';
10
+ import { useClientProvider, withClientProvider } from '@dxos/react-client/testing';
11
+ import { Domino } from '@dxos/react-ui';
12
+ import { withTheme } from '@dxos/react-ui/testing';
13
+ import { Testing, type ValueGenerator, createObjectFactory } from '@dxos/schema/testing';
14
+
15
+ import {
16
+ type EditorController,
17
+ type EditorMenuGroup,
18
+ type EditorMenuItem,
19
+ EditorMenuProvider,
20
+ type UseEditorMenuProps,
21
+ createMenuGroup,
22
+ filterMenuGroups,
23
+ formattingCommands,
24
+ insertAtCursor,
25
+ insertAtLineStart,
26
+ linkSlashCommands,
27
+ useEditorMenu,
28
+ } from '../components';
29
+ import { str } from '../util';
30
+
31
+ import { EditorStory } from './components';
32
+
33
+ const generator: ValueGenerator = faker as any;
34
+
35
+ const customCompletions: EditorMenuGroup = createMenuGroup({
36
+ id: 'test',
37
+ items: ['Hello world!', 'Hello DXOS', 'Hello Composer', 'https://dxos.org'],
38
+ });
39
+
40
+ const placeholder = (trigger: string[]) =>
41
+ Domino.of('div')
42
+ .children(
43
+ Domino.of('span').text('Press'),
44
+ ...trigger.map((trigger) =>
45
+ Domino.of('span').text(trigger).classNames('border border-separator rounded-sm mx-1 pli-1 pbs-[2px] pbe-[3px]'),
46
+ ),
47
+ Domino.of('span').text('for commands'),
48
+ )
49
+ .build();
50
+
51
+ type StoryProps = Omit<UseEditorMenuProps, 'viewRef'> & { text: string };
52
+
53
+ const DefaultStory = ({ text, ...props }: StoryProps) => {
54
+ const [controller, setController] = useState<EditorController | null>(null);
55
+ const { groupsRef, extension, ...menuProps } = useEditorMenu(props);
56
+
57
+ return (
58
+ <EditorMenuProvider view={controller?.view} groups={groupsRef.current} {...menuProps}>
59
+ <EditorStory ref={setController} text={text} extensions={extension} />
60
+ </EditorMenuProvider>
61
+ );
62
+ };
63
+
64
+ const LinkStory = (args: StoryProps) => {
65
+ const { space } = useClientProvider();
66
+
67
+ const getMenu = useCallback<NonNullable<UseEditorMenuProps['getMenu']>>(
68
+ async ({ text, trigger }): Promise<EditorMenuGroup[]> => {
69
+ if (trigger === '/') {
70
+ return filterMenuGroups([linkSlashCommands], (item) =>
71
+ text ? (item.label as string).toLowerCase().includes(text.toLowerCase()) : true,
72
+ );
73
+ }
74
+
75
+ if (!space) {
76
+ return [];
77
+ }
78
+
79
+ const name = text?.startsWith('@') ? text.slice(1).toLowerCase() : (text?.toLowerCase() ?? '');
80
+ const result = await space?.db.query(Query.type(Testing.Person)).run();
81
+ const items = result.objects
82
+ .filter((object) => object.name.toLowerCase().includes(name))
83
+ .map(
84
+ (object): EditorMenuItem => ({
85
+ id: object.id,
86
+ label: object.name,
87
+ icon: 'ph--user--regular',
88
+ onSelect: ({ view, head }) => {
89
+ const link = `[${object.name}](${Obj.getDXN(object)})`;
90
+ if (text?.startsWith('@')) {
91
+ insertAtLineStart(view, head, `!${link}\n`);
92
+ } else {
93
+ insertAtCursor(view, head, `${link} `);
94
+ }
95
+ },
96
+ }),
97
+ );
98
+
99
+ return [{ id: 'test', items }];
100
+ },
101
+ [space],
102
+ );
103
+
104
+ return <DefaultStory {...args} getMenu={getMenu} />;
105
+ };
106
+
107
+ const meta = {
108
+ title: 'ui/react-ui-editor/Popover',
109
+ render: DefaultStory,
110
+ decorators: [withTheme],
111
+ parameters: {
112
+ layout: 'fullscreen',
113
+ },
114
+ } satisfies Meta<typeof DefaultStory>;
115
+
116
+ export default meta;
117
+
118
+ type Story = StoryObj<typeof meta>;
119
+
120
+ export const Default: Story = {
121
+ args: {
122
+ text: str('# Autocomplete', '', ''),
123
+ triggerKey: 'Ctrl-Space',
124
+ filter: true,
125
+ getMenu: () => [customCompletions],
126
+ },
127
+ };
128
+
129
+ export const Formatting: Story = {
130
+ args: {
131
+ text: str('# Slash command', '', ''),
132
+ trigger: '/',
133
+ placeholder: {
134
+ content: () => placeholder(['/']),
135
+ },
136
+ getMenu: () => [formattingCommands],
137
+ },
138
+ };
139
+
140
+ export const Link: Story = {
141
+ render: LinkStory,
142
+ decorators: [
143
+ withClientProvider({
144
+ createSpace: true,
145
+ onInitialized: async (client) => {
146
+ client.addTypes([Testing.Person]);
147
+ },
148
+ onCreateSpace: async ({ space }) => {
149
+ const createObjects = createObjectFactory(space.db, generator);
150
+ await createObjects([{ type: Testing.Person, count: 10 }]);
151
+ await space.db.flush({ indexes: true });
152
+ },
153
+ }),
154
+ ],
155
+ args: {
156
+ text: str('# Links', '', ''),
157
+ trigger: ['/', '@'],
158
+ placeholder: {
159
+ content: () => placeholder(['/', '@']),
160
+ },
161
+ },
162
+ };
@@ -2,23 +2,29 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { syntaxTree } from '@codemirror/language';
8
6
  import { type EditorView } from '@codemirror/view';
7
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
9
8
  import React, { useCallback, useEffect, useMemo, useState } from 'react';
10
9
  import { createPortal } from 'react-dom';
11
10
 
12
11
  import { invariant } from '@dxos/invariant';
13
12
  import { faker } from '@dxos/random';
14
13
  import { Popover } from '@dxos/react-ui';
14
+ import { withTheme } from '@dxos/react-ui/testing';
15
15
  import { Card } from '@dxos/react-ui-stack';
16
16
  import { hoverableControlItem, hoverableControlItemTransition, hoverableControls } from '@dxos/react-ui-theme';
17
- import { type Meta, withLayout, withTheme } from '@dxos/storybook-utils';
18
17
  import { trim } from '@dxos/util';
19
18
 
20
- import { PreviewProvider, useRefPopover } from '../components';
21
- import { type PreviewLinkRef, type PreviewLinkTarget, getLinkRef, image, preview } from '../extensions';
19
+ import { type EditorController, EditorPreviewProvider, useEditorPreview } from '../components';
20
+ import {
21
+ type PreviewBlock,
22
+ type PreviewLinkRef,
23
+ type PreviewLinkTarget,
24
+ getLinkRef,
25
+ image,
26
+ preview,
27
+ } from '../extensions';
22
28
 
23
29
  import { EditorStory } from './components';
24
30
 
@@ -44,7 +50,7 @@ const useRefTarget = (link: PreviewLinkRef): PreviewLinkTarget | undefined => {
44
50
  };
45
51
 
46
52
  const PreviewCard = () => {
47
- const { target } = useRefPopover('PreviewCard');
53
+ const { target } = useEditorPreview('PreviewCard');
48
54
  return (
49
55
  <Popover.Portal>
50
56
  <Popover.Content onOpenAutoFocus={(event) => event.preventDefault()}>
@@ -71,7 +77,7 @@ type PreviewAction =
71
77
  link: PreviewLinkRef;
72
78
  };
73
79
 
74
- const PreviewBlock = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElement; view?: EditorView }) => {
80
+ const PreviewBlockComponent = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElement; view?: EditorView }) => {
75
81
  const target = useRefTarget(link);
76
82
 
77
83
  const handleAction = useCallback(
@@ -165,63 +171,63 @@ const PreviewBlock = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElemen
165
171
  );
166
172
  };
167
173
 
168
- const meta: Meta<typeof EditorStory> = {
174
+ const meta = {
169
175
  title: 'ui/react-ui-editor/Preview',
170
176
  component: EditorStory,
171
- decorators: [withTheme, withLayout({ fullscreen: true })],
172
- parameters: { layout: 'fullscreen' },
173
- };
177
+ decorators: [withTheme],
178
+ parameters: {
179
+ layout: 'fullscreen',
180
+ },
181
+ } satisfies Meta<typeof EditorStory>;
174
182
 
175
183
  export default meta;
176
184
 
177
- export const Default = {
178
- render: () => {
179
- const [view, setView] = useState<EditorView>();
180
- const [previewBlocks, setPreviewBlocks] = useState<{ link: PreviewLinkRef; el: HTMLElement }[]>([]);
185
+ type Story = StoryObj<typeof meta>;
186
+
187
+ const text = trim`
188
+ # Preview
189
+
190
+ This project is part of the [DXOS](dxn:queue:data:123) SDK.
191
+
192
+ ![DXOS](dxn:queue:data:123)
193
+
194
+ It consists of [ECHO](dxn:queue:data:echo), [HALO](dxn:queue:data:halo), and [MESH](dxn:queue:data:mesh).
195
+
196
+ ## Deep dive
197
+
198
+ ![ECHO](dxn:queue:data:echo)
181
199
 
200
+ `;
201
+
202
+ export const Default: Story = {
203
+ render: () => {
204
+ const [controller, setController] = useState<EditorController | null>(null);
205
+ const [previewBlocks, setPreviewBlocks] = useState<PreviewBlock[]>([]);
182
206
  const extensions = useMemo(() => {
183
207
  return [
184
208
  image(),
185
209
  preview({
186
- addBlockContainer: (link, el) => {
187
- setPreviewBlocks((prev) => [...prev, { link, el }]);
210
+ addBlockContainer: (block) => {
211
+ setPreviewBlocks((prev) => [...prev, block]);
188
212
  },
189
- removeBlockContainer: (link) => {
190
- setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== link.ref));
213
+ removeBlockContainer: (block) => {
214
+ setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== block.link.ref));
191
215
  },
192
216
  }),
193
217
  ];
194
218
  }, []);
195
219
 
196
- const handleViewRef = useCallback((instance?: EditorView | null) => {
197
- setView(instance ?? undefined);
198
- }, []);
199
-
220
+ // TODO(burdon): Migrate to Editor.Root.
221
+ // TODO(burdon): Ranges must be sorted error (decorate.enter).
200
222
  return (
201
- <PreviewProvider onLookup={handlePreviewLookup}>
202
- <EditorStory
203
- ref={handleViewRef}
204
- text={trim`
205
- # Preview
206
-
207
- This project is part of the [DXOS][dxn:queue:data:123] SDK.
208
-
209
- ![DXOS][?dxn:queue:data:123]
210
-
211
- It consists of [ECHO][dxn:queue:data:echo], [HALO][dxn:queue:data:halo], and [MESH][dxn:queue:data:mesh].
212
-
213
- ## Deep dive
214
-
215
- ![ECHO][dxn:queue:data:echo]
216
-
217
- `}
218
- extensions={extensions}
219
- />
223
+ <EditorPreviewProvider onLookup={handlePreviewLookup}>
224
+ <EditorStory ref={setController} text={text} extensions={extensions} />
220
225
  <PreviewCard />
221
- {previewBlocks.map(({ link, el }) => (
222
- <PreviewBlock key={link.ref} link={link} el={el} view={view} />
223
- ))}
224
- </PreviewProvider>
226
+ {controller?.view &&
227
+ previewBlocks.map(({ link, el }) => (
228
+ <PreviewBlockComponent key={link.ref} link={link} el={el} view={controller.view!} />
229
+ ))}
230
+ </EditorPreviewProvider>
225
231
  );
226
232
  },
227
233
  };
@@ -0,0 +1,95 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useEffect, useState } from 'react';
7
+ import { createPortal } from 'react-dom';
8
+
9
+ import { useThemeContext } from '@dxos/react-ui';
10
+ import { withTheme } from '@dxos/react-ui/testing';
11
+ import { trim } from '@dxos/util';
12
+
13
+ import {
14
+ type XmlWidgetRegistry,
15
+ type XmlWidgetState,
16
+ createBasicExtensions,
17
+ createThemeExtensions,
18
+ decorateMarkdown,
19
+ extendedMarkdown,
20
+ xmlTags,
21
+ } from '../extensions';
22
+ import { useTextEditor } from '../hooks';
23
+
24
+ const registry = {
25
+ /**
26
+ * Custom tag: <test/>
27
+ */
28
+ ['test' as const]: {
29
+ block: true,
30
+ Component: () => {
31
+ const [count, setCount] = useState(0);
32
+ useEffect(() => {
33
+ const interval = setInterval(() => {
34
+ setCount((prev) => prev + 1);
35
+ }, 1_000);
36
+ return () => clearInterval(interval);
37
+ }, []);
38
+
39
+ return <div className='p-2 border border-separator rounded'>Test {count}</div>;
40
+ },
41
+ },
42
+ } satisfies XmlWidgetRegistry;
43
+
44
+ const DefaultStory = ({ text }: { text?: string }) => {
45
+ const { themeMode } = useThemeContext();
46
+ const [widgets, setWidgets] = useState<XmlWidgetState[]>([]);
47
+ const { parentRef } = useTextEditor({
48
+ initialValue: text,
49
+ extensions: [
50
+ createThemeExtensions({ themeMode }),
51
+ createBasicExtensions({ lineWrapping: true }),
52
+ decorateMarkdown(),
53
+ extendedMarkdown({ registry }),
54
+ xmlTags({ registry, setWidgets }),
55
+ ],
56
+ });
57
+
58
+ return (
59
+ <>
60
+ <div ref={parentRef} className='is-full p-4' />
61
+ {widgets.map(({ Component, root, id, ...props }) => (
62
+ <div key={id}>{createPortal(<Component {...props} />, root)}</div>
63
+ ))}
64
+ </>
65
+ );
66
+ };
67
+
68
+ const text = trim`
69
+ # Tags
70
+
71
+ React widget below.
72
+
73
+ <test id="123" />
74
+
75
+ React widget above.
76
+ `;
77
+
78
+ const meta = {
79
+ title: 'ui/react-ui-editor/XmlTags',
80
+ render: DefaultStory,
81
+ decorators: [withTheme],
82
+ parameters: {
83
+ layout: 'fullscreen',
84
+ },
85
+ } satisfies Meta<typeof DefaultStory>;
86
+
87
+ export default meta;
88
+
89
+ type Story = StoryObj<typeof meta>;
90
+
91
+ export const Default: Story = {
92
+ args: {
93
+ text,
94
+ },
95
+ };