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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (438) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +1410 -8668
  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 +1410 -8667
  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 +53 -20
  14. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  15. package/dist/types/src/components/Editor/Editor.stories.d.ts +23 -0
  16. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  17. package/dist/types/src/components/Editor/EditorView.d.ts +31 -0
  18. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  19. package/dist/types/src/components/Editor/controller.d.ts +10 -0
  20. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +34 -0
  22. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  24. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  26. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  28. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +47 -0
  30. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  32. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  34. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  35. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  36. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  37. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  38. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  40. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  42. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  44. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  46. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  48. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -17
  50. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  51. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  52. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  53. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  54. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  55. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  56. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  57. package/dist/types/src/components/index.d.ts +2 -2
  58. package/dist/types/src/components/index.d.ts.map +1 -1
  59. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  60. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  61. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  62. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  63. package/dist/types/src/extensions/index.d.ts +1 -26
  64. package/dist/types/src/extensions/index.d.ts.map +1 -1
  65. package/dist/types/src/hooks/index.d.ts +1 -0
  66. package/dist/types/src/hooks/index.d.ts.map +1 -1
  67. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  68. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  69. package/dist/types/src/hooks/useTextEditor.d.ts +4 -8
  70. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  71. package/dist/types/src/index.d.ts +0 -9
  72. package/dist/types/src/index.d.ts.map +1 -1
  73. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  74. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  75. package/dist/types/src/stories/Comments.stories.d.ts +4 -3
  76. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  78. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Experimental.stories.d.ts +5 -4
  80. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Markdown.stories.d.ts +4 -3
  82. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  84. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  85. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -5
  86. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  87. package/dist/types/src/stories/Preview.stories.d.ts +5 -3
  88. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  89. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  90. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -4
  91. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  92. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  93. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  94. package/dist/types/src/stories/components/EditorStory.d.ts +11 -20
  95. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  96. package/dist/types/src/stories/components/util.d.ts +4 -3
  97. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  98. package/dist/types/src/translations.d.ts +26 -26
  99. package/dist/types/src/translations.d.ts.map +1 -1
  100. package/dist/types/src/util/index.d.ts +0 -5
  101. package/dist/types/src/util/index.d.ts.map +1 -1
  102. package/dist/types/src/util/react.d.ts +6 -5
  103. package/dist/types/src/util/react.d.ts.map +1 -1
  104. package/dist/types/tsconfig.tsbuildinfo +1 -1
  105. package/package.json +82 -77
  106. package/src/components/Editor/Editor.stories.tsx +89 -0
  107. package/src/components/Editor/Editor.tsx +166 -54
  108. package/src/components/Editor/EditorView.tsx +102 -0
  109. package/src/components/Editor/controller.ts +50 -0
  110. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +226 -0
  111. package/src/components/EditorMenuProvider/index.ts +10 -0
  112. package/src/components/EditorMenuProvider/menu-presets.ts +125 -0
  113. package/src/components/EditorMenuProvider/menu.ts +70 -0
  114. package/src/components/EditorMenuProvider/popover.ts +287 -0
  115. package/src/components/EditorMenuProvider/useEditorMenu.ts +180 -0
  116. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  117. package/src/components/EditorPreviewProvider/index.ts +5 -0
  118. package/src/components/EditorToolbar/EditorToolbar.tsx +90 -112
  119. package/src/components/EditorToolbar/blocks.ts +55 -47
  120. package/src/components/EditorToolbar/formatting.ts +44 -45
  121. package/src/components/EditorToolbar/headings.ts +47 -50
  122. package/src/components/EditorToolbar/image.ts +16 -14
  123. package/src/components/EditorToolbar/index.ts +2 -7
  124. package/src/components/EditorToolbar/lists.ts +42 -40
  125. package/src/components/EditorToolbar/search.ts +16 -14
  126. package/src/components/EditorToolbar/types.ts +8 -0
  127. package/src/components/EditorToolbar/view-mode.ts +37 -42
  128. package/src/components/index.ts +3 -2
  129. package/src/extensions/Assistant.stories.tsx +112 -0
  130. package/src/extensions/assistant-extension.tsx +223 -0
  131. package/src/extensions/index.ts +2 -27
  132. package/src/hooks/index.ts +1 -0
  133. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  134. package/src/hooks/useTextEditor.ts +33 -27
  135. package/src/index.ts +0 -13
  136. package/src/stories/Automerge.stories.tsx +177 -0
  137. package/src/stories/Comments.stories.tsx +49 -45
  138. package/src/stories/EditorToolbar.stories.tsx +42 -55
  139. package/src/stories/Experimental.stories.tsx +14 -16
  140. package/src/stories/Markdown.stories.tsx +16 -16
  141. package/src/stories/Outliner.stories.tsx +22 -24
  142. package/src/stories/Popover.stories.tsx +157 -0
  143. package/src/stories/Preview.stories.tsx +102 -84
  144. package/src/stories/Tags.stories.tsx +36 -13
  145. package/src/stories/TextEditor.stories.tsx +16 -48
  146. package/src/stories/Theme.stories.tsx +61 -0
  147. package/src/stories/components/EditorStory.tsx +46 -30
  148. package/src/stories/components/util.tsx +90 -59
  149. package/src/translations.ts +30 -25
  150. package/src/util/index.ts +1 -6
  151. package/src/util/react.tsx +8 -13
  152. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  153. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  154. package/dist/lib/browser/testing/index.mjs +0 -76
  155. package/dist/lib/browser/testing/index.mjs.map +0 -7
  156. package/dist/lib/browser/types/index.mjs +0 -13
  157. package/dist/lib/browser/types/index.mjs.map +0 -7
  158. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  159. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  160. package/dist/lib/node-esm/testing/index.mjs +0 -78
  161. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  162. package/dist/lib/node-esm/types/index.mjs +0 -14
  163. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  164. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts +0 -38
  165. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts.map +0 -1
  166. package/dist/types/src/components/CommandMenu/index.d.ts +0 -2
  167. package/dist/types/src/components/CommandMenu/index.d.ts.map +0 -1
  168. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  169. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  170. package/dist/types/src/defaults.d.ts +0 -14
  171. package/dist/types/src/defaults.d.ts.map +0 -1
  172. package/dist/types/src/extensions/annotations.d.ts +0 -9
  173. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  174. package/dist/types/src/extensions/autocomplete.d.ts +0 -26
  175. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  176. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  177. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  178. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  179. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  180. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  181. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  182. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  183. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  184. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  185. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  186. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  187. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  188. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  189. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  190. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  191. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  192. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  193. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  194. package/dist/types/src/extensions/autoscroll.d.ts +0 -10
  195. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  196. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  197. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  198. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  199. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  200. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  201. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  202. package/dist/types/src/extensions/blast.d.ts +0 -25
  203. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  204. package/dist/types/src/extensions/command-dialog/action.d.ts +0 -17
  205. package/dist/types/src/extensions/command-dialog/action.d.ts.map +0 -1
  206. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts +0 -6
  207. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts.map +0 -1
  208. package/dist/types/src/extensions/command-dialog/hint.d.ts +0 -19
  209. package/dist/types/src/extensions/command-dialog/hint.d.ts.map +0 -1
  210. package/dist/types/src/extensions/command-dialog/index.d.ts +0 -4
  211. package/dist/types/src/extensions/command-dialog/index.d.ts.map +0 -1
  212. package/dist/types/src/extensions/command-dialog/state.d.ts +0 -16
  213. package/dist/types/src/extensions/command-dialog/state.d.ts.map +0 -1
  214. package/dist/types/src/extensions/command-dialog/typeahead.d.ts +0 -22
  215. package/dist/types/src/extensions/command-dialog/typeahead.d.ts.map +0 -1
  216. package/dist/types/src/extensions/command-menu/command-menu.d.ts +0 -20
  217. package/dist/types/src/extensions/command-menu/command-menu.d.ts.map +0 -1
  218. package/dist/types/src/extensions/command-menu/index.d.ts +0 -3
  219. package/dist/types/src/extensions/command-menu/index.d.ts.map +0 -1
  220. package/dist/types/src/extensions/command-menu/placeholder.d.ts +0 -10
  221. package/dist/types/src/extensions/command-menu/placeholder.d.ts.map +0 -1
  222. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts +0 -24
  223. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts.map +0 -1
  224. package/dist/types/src/extensions/comments.d.ts +0 -95
  225. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  226. package/dist/types/src/extensions/debug.d.ts +0 -3
  227. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  228. package/dist/types/src/extensions/dnd.d.ts +0 -9
  229. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  230. package/dist/types/src/extensions/factories.d.ts +0 -83
  231. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  232. package/dist/types/src/extensions/floating-menu.d.ts +0 -7
  233. package/dist/types/src/extensions/floating-menu.d.ts.map +0 -1
  234. package/dist/types/src/extensions/focus.d.ts +0 -7
  235. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  236. package/dist/types/src/extensions/folding.d.ts +0 -7
  237. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  238. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  239. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  240. package/dist/types/src/extensions/json.d.ts +0 -7
  241. package/dist/types/src/extensions/json.d.ts.map +0 -1
  242. package/dist/types/src/extensions/listener.d.ts +0 -11
  243. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  245. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  247. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  249. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  251. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  253. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  255. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  256. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  257. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  258. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  259. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  260. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  261. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  262. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  263. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  264. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  265. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  266. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  267. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  268. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  269. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  270. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  271. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  272. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  273. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  274. package/dist/types/src/extensions/mention.d.ts +0 -7
  275. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  276. package/dist/types/src/extensions/modes.d.ts +0 -10
  277. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  279. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  280. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  281. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  282. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  283. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  284. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  285. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  286. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  287. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  288. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  289. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  290. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  291. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  292. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  293. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  294. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  295. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  296. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  297. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  298. package/dist/types/src/extensions/preview/preview.d.ts +0 -29
  299. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  300. package/dist/types/src/extensions/selection.d.ts +0 -24
  301. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  302. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  303. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  304. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  305. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  306. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  307. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  308. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  309. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  310. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -72
  311. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  312. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  313. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  314. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  315. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  316. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  317. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  318. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  319. package/dist/types/src/styles/index.d.ts +0 -4
  320. package/dist/types/src/styles/index.d.ts.map +0 -1
  321. package/dist/types/src/styles/markdown.d.ts +0 -8
  322. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  323. package/dist/types/src/styles/theme.d.ts +0 -38
  324. package/dist/types/src/styles/theme.d.ts.map +0 -1
  325. package/dist/types/src/styles/tokens.d.ts +0 -3
  326. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  327. package/dist/types/src/testing/PreviewPopover.d.ts +0 -20
  328. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  329. package/dist/types/src/testing/index.d.ts +0 -3
  330. package/dist/types/src/testing/index.d.ts.map +0 -1
  331. package/dist/types/src/testing/util.d.ts +0 -3
  332. package/dist/types/src/testing/util.d.ts.map +0 -1
  333. package/dist/types/src/types/index.d.ts +0 -2
  334. package/dist/types/src/types/index.d.ts.map +0 -1
  335. package/dist/types/src/types/types.d.ts +0 -21
  336. package/dist/types/src/types/types.d.ts.map +0 -1
  337. package/dist/types/src/util/cursor.d.ts +0 -31
  338. package/dist/types/src/util/cursor.d.ts.map +0 -1
  339. package/dist/types/src/util/debug.d.ts +0 -17
  340. package/dist/types/src/util/debug.d.ts.map +0 -1
  341. package/dist/types/src/util/decorations.d.ts +0 -4
  342. package/dist/types/src/util/decorations.d.ts.map +0 -1
  343. package/dist/types/src/util/dom.d.ts +0 -10
  344. package/dist/types/src/util/dom.d.ts.map +0 -1
  345. package/dist/types/src/util/facet.d.ts +0 -3
  346. package/dist/types/src/util/facet.d.ts.map +0 -1
  347. package/src/components/CommandMenu/CommandMenu.tsx +0 -348
  348. package/src/components/CommandMenu/index.ts +0 -5
  349. package/src/components/EditorToolbar/util.ts +0 -76
  350. package/src/defaults.ts +0 -52
  351. package/src/extensions/annotations.ts +0 -55
  352. package/src/extensions/autocomplete.ts +0 -219
  353. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  354. package/src/extensions/automerge/automerge.test.tsx +0 -78
  355. package/src/extensions/automerge/automerge.ts +0 -86
  356. package/src/extensions/automerge/cursor.ts +0 -28
  357. package/src/extensions/automerge/defs.ts +0 -31
  358. package/src/extensions/automerge/index.ts +0 -5
  359. package/src/extensions/automerge/sync.ts +0 -75
  360. package/src/extensions/automerge/update-automerge.ts +0 -50
  361. package/src/extensions/automerge/update-codemirror.ts +0 -115
  362. package/src/extensions/autoscroll.ts +0 -157
  363. package/src/extensions/awareness/awareness-provider.ts +0 -127
  364. package/src/extensions/awareness/awareness.ts +0 -315
  365. package/src/extensions/awareness/index.ts +0 -6
  366. package/src/extensions/blast.ts +0 -363
  367. package/src/extensions/command-dialog/action.ts +0 -55
  368. package/src/extensions/command-dialog/command-dialog.ts +0 -34
  369. package/src/extensions/command-dialog/hint.ts +0 -103
  370. package/src/extensions/command-dialog/index.ts +0 -7
  371. package/src/extensions/command-dialog/state.ts +0 -90
  372. package/src/extensions/command-dialog/typeahead.ts +0 -129
  373. package/src/extensions/command-menu/command-menu.ts +0 -210
  374. package/src/extensions/command-menu/index.ts +0 -6
  375. package/src/extensions/command-menu/placeholder.ts +0 -113
  376. package/src/extensions/command-menu/useCommandMenu.ts +0 -134
  377. package/src/extensions/comments.ts +0 -597
  378. package/src/extensions/debug.ts +0 -15
  379. package/src/extensions/dnd.ts +0 -37
  380. package/src/extensions/factories.ts +0 -284
  381. package/src/extensions/floating-menu.ts +0 -126
  382. package/src/extensions/focus.ts +0 -36
  383. package/src/extensions/folding.tsx +0 -44
  384. package/src/extensions/hashtag.tsx +0 -68
  385. package/src/extensions/json.ts +0 -57
  386. package/src/extensions/listener.ts +0 -38
  387. package/src/extensions/markdown/action.ts +0 -117
  388. package/src/extensions/markdown/bundle.ts +0 -93
  389. package/src/extensions/markdown/changes.test.ts +0 -26
  390. package/src/extensions/markdown/changes.ts +0 -149
  391. package/src/extensions/markdown/debug.ts +0 -44
  392. package/src/extensions/markdown/decorate.ts +0 -601
  393. package/src/extensions/markdown/formatting.test.ts +0 -498
  394. package/src/extensions/markdown/formatting.ts +0 -1267
  395. package/src/extensions/markdown/highlight.ts +0 -183
  396. package/src/extensions/markdown/image.ts +0 -118
  397. package/src/extensions/markdown/index.ts +0 -13
  398. package/src/extensions/markdown/link.ts +0 -50
  399. package/src/extensions/markdown/parser.test.ts +0 -75
  400. package/src/extensions/markdown/styles.ts +0 -135
  401. package/src/extensions/markdown/table.ts +0 -150
  402. package/src/extensions/mention.ts +0 -41
  403. package/src/extensions/modes.ts +0 -41
  404. package/src/extensions/outliner/commands.ts +0 -270
  405. package/src/extensions/outliner/editor.test.ts +0 -33
  406. package/src/extensions/outliner/editor.ts +0 -184
  407. package/src/extensions/outliner/index.ts +0 -7
  408. package/src/extensions/outliner/outliner.test.ts +0 -100
  409. package/src/extensions/outliner/outliner.ts +0 -167
  410. package/src/extensions/outliner/selection.ts +0 -50
  411. package/src/extensions/outliner/tree.test.ts +0 -168
  412. package/src/extensions/outliner/tree.ts +0 -317
  413. package/src/extensions/preview/index.ts +0 -5
  414. package/src/extensions/preview/preview.ts +0 -190
  415. package/src/extensions/selection.ts +0 -100
  416. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  417. package/src/extensions/tags/extended-markdown.ts +0 -78
  418. package/src/extensions/tags/index.ts +0 -7
  419. package/src/extensions/tags/streamer.ts +0 -243
  420. package/src/extensions/tags/xml-tags.ts +0 -393
  421. package/src/extensions/tags/xml-util.ts +0 -94
  422. package/src/extensions/typewriter.ts +0 -68
  423. package/src/stories/CommandDialog.stories.tsx +0 -89
  424. package/src/stories/CommandMenu.stories.tsx +0 -158
  425. package/src/styles/index.ts +0 -7
  426. package/src/styles/markdown.ts +0 -26
  427. package/src/styles/theme.ts +0 -268
  428. package/src/styles/tokens.ts +0 -17
  429. package/src/testing/PreviewPopover.tsx +0 -78
  430. package/src/testing/index.ts +0 -6
  431. package/src/testing/util.ts +0 -7
  432. package/src/types/index.ts +0 -5
  433. package/src/types/types.ts +0 -32
  434. package/src/util/cursor.ts +0 -56
  435. package/src/util/debug.ts +0 -64
  436. package/src/util/decorations.ts +0 -21
  437. package/src/util/dom.ts +0 -34
  438. package/src/util/facet.ts +0 -13
@@ -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,27 +2,25 @@
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';
10
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';
11
11
 
12
- import { type CommandMenuGroup, type CommandMenuItem, CommandMenuProvider } from '../components';
13
- import { deleteItem, hashtag, listItemToString, outliner, treeFacet } from '../extensions';
14
- import { str } from '../testing';
15
-
12
+ import { type EditorController, type EditorMenuGroup, EditorMenuProvider } from '../components';
16
13
  import { EditorStory } from './components';
17
14
 
18
- type StoryProps = {
15
+ type DefaultStoryProps = {
19
16
  text?: string;
20
17
  };
21
18
 
22
- const DefaultStory = ({ text }: StoryProps) => {
23
- const viewRef = useRef<EditorView>(null);
19
+ const DefaultStory = ({ text }: DefaultStoryProps) => {
20
+ const [controller, setController] = useState<EditorController | null>(null);
24
21
 
25
- const commandGroups: CommandMenuGroup[] = useMemo(
22
+ const extensions = useMemo(() => [outliner(), hashtag()], []);
23
+ const commandGroups: EditorMenuGroup[] = useMemo(
26
24
  () => [
27
25
  {
28
26
  id: 'outliner-actions',
@@ -30,7 +28,7 @@ const DefaultStory = ({ text }: StoryProps) => {
30
28
  {
31
29
  id: 'delete-row',
32
30
  label: 'Delete',
33
- onSelect: (view: EditorView) => {
31
+ onSelect: ({ view }) => {
34
32
  deleteItem(view);
35
33
  },
36
34
  },
@@ -41,19 +39,19 @@ const DefaultStory = ({ text }: StoryProps) => {
41
39
  );
42
40
 
43
41
  return (
44
- <CommandMenuProvider
42
+ <EditorMenuProvider
43
+ view={controller?.view}
45
44
  groups={commandGroups}
46
- onSelect={(item: CommandMenuItem) => {
47
- if (viewRef.current && item.onSelect) {
48
- return item.onSelect(viewRef.current, viewRef.current.state.selection.main.head);
45
+ onSelect={({ view, item }) => {
46
+ if (item.onSelect) {
47
+ return item.onSelect({ view, head: view.state.selection.main.head });
49
48
  }
50
49
  }}
51
50
  >
52
51
  <EditorStory
53
- ref={viewRef}
52
+ ref={setController}
54
53
  text={text}
55
- extensions={[outliner(), hashtag()]}
56
- placeholder=''
54
+ extensions={extensions}
57
55
  debug='raw+tree'
58
56
  debugCustom={(view) => {
59
57
  const tree = view.state.facet(treeFacet);
@@ -62,14 +60,14 @@ const DefaultStory = ({ text }: StoryProps) => {
62
60
  return <pre className='p-1 overflow-auto text-xs text-green-800 dark:text-green-200'>{lines.join('\n')}</pre>;
63
61
  }}
64
62
  />
65
- </CommandMenuProvider>
63
+ </EditorMenuProvider>
66
64
  );
67
65
  };
68
66
 
69
67
  const meta = {
70
68
  title: 'ui/react-ui-editor/Outliner',
71
69
  render: DefaultStory,
72
- decorators: [withTheme, withAttention],
70
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' }), withAttention()],
73
71
  parameters: {
74
72
  layout: 'fullscreen',
75
73
  },
@@ -85,7 +83,7 @@ export const Empty: Story = {
85
83
 
86
84
  export const Basic: Story = {
87
85
  args: {
88
- text: str(
86
+ text: join(
89
87
  //
90
88
  '- [ ] A',
91
89
  '- [ ] B',
@@ -100,7 +98,7 @@ export const Basic: Story = {
100
98
 
101
99
  export const Nested: Story = {
102
100
  args: {
103
- text: str(
101
+ text: join(
104
102
  //
105
103
  '- [ ] A',
106
104
  ' - [ ] B',
@@ -115,7 +113,7 @@ export const Nested: Story = {
115
113
 
116
114
  export const Continuation: Story = {
117
115
  args: {
118
- text: str(
116
+ text: join(
119
117
  //
120
118
  '- [ ] A',
121
119
  '- [ ] B',
@@ -0,0 +1,157 @@
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 { random } from '@dxos/random';
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
+
16
+ import {
17
+ type EditorController,
18
+ type EditorMenuGroup,
19
+ type EditorMenuItem,
20
+ EditorMenuProvider,
21
+ type UseEditorMenuProps,
22
+ createMenuGroup,
23
+ filterMenuGroups,
24
+ formattingCommands,
25
+ linkSlashCommands,
26
+ useEditorMenu,
27
+ } from '../components';
28
+ import { EditorStory } from './components';
29
+
30
+ const generator: ValueGenerator = random as any;
31
+
32
+ const customCompletions: EditorMenuGroup = createMenuGroup({
33
+ id: 'test',
34
+ items: ['Hello world!', 'Hello DXOS', 'Hello Composer', 'https://dxos.org'],
35
+ });
36
+
37
+ const placeholder = (trigger: string[]) => {
38
+ const pressEl = Domino.of('span').text('Press');
39
+ const triggerEls = trigger.map((trigger) =>
40
+ Domino.of('span').classNames(mx('border border-separator rounded-xs mx-1 px-1 py-[2px] pb-[3px]')).text(trigger),
41
+ );
42
+ const forCommandsEl = Domino.of('span').text('for commands');
43
+ return Domino.of('div').append(pressEl, ...triggerEls, forCommandsEl).root;
44
+ };
45
+
46
+ type DefaultStoryProps = Omit<UseEditorMenuProps, 'viewRef'> & { text: string };
47
+
48
+ const DefaultStory = ({ text, ...props }: DefaultStoryProps) => {
49
+ const [controller, setController] = useState<EditorController | null>(null);
50
+ const { groupsRef, extension, ...menuProps } = useEditorMenu(props);
51
+
52
+ return (
53
+ <EditorMenuProvider view={controller?.view} groups={groupsRef.current} {...menuProps}>
54
+ <EditorStory ref={setController} text={text} extensions={extension} />
55
+ </EditorMenuProvider>
56
+ );
57
+ };
58
+
59
+ const LinkStory = (args: DefaultStoryProps) => {
60
+ const { space } = useClientStory();
61
+
62
+ const getMenu = useCallback<NonNullable<UseEditorMenuProps['getMenu']>>(
63
+ async ({ text, trigger }): Promise<EditorMenuGroup[]> => {
64
+ if (trigger === '/') {
65
+ return filterMenuGroups([linkSlashCommands], (item) =>
66
+ text ? (item.label as string).toLowerCase().includes(text.toLowerCase()) : true,
67
+ );
68
+ }
69
+
70
+ if (!space) {
71
+ return [];
72
+ }
73
+
74
+ const name = text?.startsWith('@') ? text.slice(1).toLowerCase() : (text?.toLowerCase() ?? '');
75
+ const result = await space?.db.query(Query.type(TestSchema.Person)).run();
76
+ const items = result
77
+ .filter((object) => object.name.toLowerCase().includes(name))
78
+ .map(
79
+ (object): EditorMenuItem => ({
80
+ id: object.id,
81
+ label: object.name,
82
+ icon: 'ph--user--regular',
83
+ onSelect: ({ view, head }) => {
84
+ const link = `[${object.name}](${Obj.getDXN(object)})`;
85
+ if (text?.startsWith('@')) {
86
+ insertAtLineStart(view, head, `!${link}\n`);
87
+ } else {
88
+ insertAtCursor(view, head, `${link} `);
89
+ }
90
+ },
91
+ }),
92
+ );
93
+
94
+ return [{ id: 'test', items }];
95
+ },
96
+ [space],
97
+ );
98
+
99
+ return <DefaultStory {...args} getMenu={getMenu} />;
100
+ };
101
+
102
+ const meta = {
103
+ title: 'ui/react-ui-editor/Popover',
104
+ render: DefaultStory,
105
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
106
+ parameters: {
107
+ layout: 'fullscreen',
108
+ },
109
+ } satisfies Meta<typeof DefaultStory>;
110
+
111
+ export default meta;
112
+
113
+ type Story = StoryObj<typeof meta>;
114
+
115
+ export const Default: Story = {
116
+ args: {
117
+ text: join('# Autocomplete', '', ''),
118
+ triggerKey: 'Ctrl-Space',
119
+ filter: true,
120
+ getMenu: () => [customCompletions],
121
+ },
122
+ };
123
+
124
+ export const Formatting: Story = {
125
+ args: {
126
+ text: join('# Slash command', '', ''),
127
+ trigger: '/',
128
+ placeholder: {
129
+ content: () => placeholder(['/']),
130
+ },
131
+ getMenu: () => [formattingCommands],
132
+ },
133
+ };
134
+
135
+ export const Link: Story = {
136
+ render: LinkStory,
137
+ decorators: [
138
+ withClientProvider({
139
+ createSpace: true,
140
+ onInitialized: async (client) => {
141
+ await client.addTypes([TestSchema.Person]);
142
+ },
143
+ onCreateSpace: async ({ space }) => {
144
+ const createObjects = createObjectFactory(space.db, generator);
145
+ await createObjects([{ type: TestSchema.Person, count: 10 }]);
146
+ await space.db.flush({ indexes: true });
147
+ },
148
+ }),
149
+ ],
150
+ args: {
151
+ text: join('# Links', '', ''),
152
+ trigger: ['/', '@'],
153
+ placeholder: {
154
+ content: () => placeholder(['/', '@']),
155
+ },
156
+ },
157
+ };
@@ -9,22 +9,28 @@ import React, { useCallback, useEffect, useMemo, useState } from 'react';
9
9
  import { createPortal } from 'react-dom';
10
10
 
11
11
  import { invariant } from '@dxos/invariant';
12
- import { faker } from '@dxos/random';
13
- import { Popover } from '@dxos/react-ui';
14
- import { withTheme } from '@dxos/react-ui/testing';
15
- import { Card } from '@dxos/react-ui-stack';
16
- import { hoverableControlItem, hoverableControlItemTransition, hoverableControls } from '@dxos/react-ui-theme';
12
+ import { random } from '@dxos/random';
13
+ import { Card, Popover, Toolbar } from '@dxos/react-ui';
14
+ import { Menu, createMenuAction } from '@dxos/react-ui-menu';
15
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
16
+ import {
17
+ type PreviewBlock,
18
+ type PreviewLinkRef,
19
+ type PreviewLinkTarget,
20
+ getLinkRef,
21
+ image,
22
+ preview,
23
+ } from '@dxos/ui-editor';
24
+ import { hoverableControls } from '@dxos/ui-theme';
17
25
  import { trim } from '@dxos/util';
18
26
 
19
- import { type PreviewLinkRef, type PreviewLinkTarget, getLinkRef, image, preview } from '../extensions';
20
- import { PreviewPopoverProvider, usePreviewPopover } from '../testing';
21
-
27
+ import { type EditorController, EditorPreviewProvider, useEditorPreview } from '../components';
22
28
  import { EditorStory } from './components';
23
29
 
24
- const handlePreviewLookup = async ({ label, ref }: PreviewLinkRef): Promise<PreviewLinkTarget> => {
30
+ const handlePreviewLookup = async ({ dxn, label }: PreviewLinkRef): Promise<PreviewLinkTarget> => {
25
31
  // Random text.
26
- faker.seed(ref.split('').reduce((acc: number, char: string) => acc + char.charCodeAt(0), 1));
27
- const text = Array.from({ length: 2 }, () => faker.lorem.paragraphs()).join('\n\n');
32
+ random.seed(dxn.split('').reduce((acc: number, char: string) => acc + char.charCodeAt(0), 1));
33
+ const text = Array.from({ length: 2 }, () => random.lorem.paragraphs()).join('\n\n');
28
34
  return {
29
35
  label,
30
36
  text,
@@ -43,15 +49,27 @@ const useRefTarget = (link: PreviewLinkRef): PreviewLinkTarget | undefined => {
43
49
  };
44
50
 
45
51
  const PreviewCard = () => {
46
- const { target } = usePreviewPopover('PreviewCard');
52
+ const { target } = useEditorPreview('PreviewCard');
53
+ if (!target) {
54
+ return null;
55
+ }
56
+
47
57
  return (
48
58
  <Popover.Portal>
49
59
  <Popover.Content onOpenAutoFocus={(event) => event.preventDefault()}>
50
- <Popover.Viewport>
51
- <Card.SurfaceRoot role='card--popover'>
52
- <Card.Heading>{target?.label}</Card.Heading>
53
- {target && <Card.Text classNames='line-clamp-3'>{target.text}</Card.Text>}
54
- </Card.SurfaceRoot>
60
+ <Popover.Viewport classNames='dx-card-popover-width'>
61
+ <Card.Root border={false}>
62
+ <Card.Toolbar>
63
+ <Card.Icon icon='ph--file-text--regular' />
64
+ <Card.Title>{target.label}</Card.Title>
65
+ <Popover.Close asChild>
66
+ <Card.CloseIconButton />
67
+ </Popover.Close>
68
+ </Card.Toolbar>
69
+ <Card.Row>
70
+ <Card.Text variant='description'>{target.text}</Card.Text>
71
+ </Card.Row>
72
+ </Card.Root>
55
73
  </Popover.Viewport>
56
74
  <Popover.Arrow />
57
75
  </Popover.Content>
@@ -70,7 +88,7 @@ type PreviewAction =
70
88
  link: PreviewLinkRef;
71
89
  };
72
90
 
73
- const PreviewBlock = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElement; view?: EditorView }) => {
91
+ const PreviewBlockComponent = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElement; view?: EditorView }) => {
74
92
  const target = useRefTarget(link);
75
93
 
76
94
  const handleAction = useCallback(
@@ -83,7 +101,7 @@ const PreviewBlock = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElemen
83
101
  }
84
102
 
85
103
  const link = getLinkRef(view.state, node);
86
- if (link?.ref !== action.link.ref) {
104
+ if (link?.dxn !== action.link.dxn) {
87
105
  return;
88
106
  }
89
107
 
@@ -125,41 +143,45 @@ const PreviewBlock = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElemen
125
143
  }
126
144
  }, [handleAction, link, target]);
127
145
 
146
+ const menuItems = useMemo(
147
+ () => [
148
+ createMenuAction('delete', handleDelete, {
149
+ label: link.suggest ? 'Discard' : 'Delete',
150
+ icon: 'ph--x--regular',
151
+ }),
152
+ ...(target
153
+ ? [
154
+ createMenuAction('apply', handleInsert, {
155
+ label: 'Apply',
156
+ icon: 'ph--check--regular',
157
+ }),
158
+ ]
159
+ : []),
160
+ ],
161
+ [handleDelete, handleInsert, link.suggest, target],
162
+ );
163
+
128
164
  return createPortal(
129
- <Card.StaticRoot classNames={hoverableControls}>
130
- <div className='flex items-start'>
165
+ <Menu.Root>
166
+ <Card.Root classNames={hoverableControls}>
131
167
  {!view?.state.readOnly && (
132
- <Card.Toolbar classNames='is-min p-[--dx-cardSpacingInline]'>
133
- {(link.suggest && (
134
- <>
135
- <Card.ToolbarIconButton label='Discard' icon='ph--x--regular' onClick={handleDelete} />
136
- {target && (
137
- <Card.ToolbarIconButton
138
- classNames='bg-successSurface text-successSurfaceText'
139
- label='Apply'
140
- icon='ph--check--regular'
141
- onClick={handleInsert}
142
- />
143
- )}
144
- </>
145
- )) || (
146
- <Card.ToolbarIconButton
147
- iconOnly
148
- label='Delete'
149
- icon='ph--x--regular'
150
- classNames={[hoverableControlItem, hoverableControlItemTransition]}
151
- onClick={handleDelete}
152
- />
153
- )}
168
+ <Card.Toolbar>
169
+ <Card.Icon icon='ph--bookmark--regular' />
170
+ <Card.Title>{link.label}</Card.Title>
171
+ {/* TODO(wittjosiah): Reconcile with Card.Menu. */}
172
+ <Menu.Trigger asChild disabled={!menuItems?.length}>
173
+ <Toolbar.IconButton iconOnly variant='ghost' icon='ph--dots-three-vertical--regular' label='Menu' />
174
+ </Menu.Trigger>
175
+ <Menu.Content items={menuItems} />
154
176
  </Card.Toolbar>
155
177
  )}
156
- <Card.Heading classNames='grow order-first mie-0'>
157
- {/* <span className='text-xs text-subdued mie-2'>Prompt</span> */}
158
- {link.label}
159
- </Card.Heading>
160
- </div>
161
- {target && <Card.Text classNames='line-clamp-3 mbs-0'>{target.text}</Card.Text>}
162
- </Card.StaticRoot>,
178
+ {target && (
179
+ <Card.Row>
180
+ <Card.Text className='text-description'>{target.text}</Card.Text>
181
+ </Card.Row>
182
+ )}
183
+ </Card.Root>
184
+ </Menu.Root>,
163
185
  el,
164
186
  );
165
187
  };
@@ -167,7 +189,7 @@ const PreviewBlock = ({ link, el, view }: { link: PreviewLinkRef; el: HTMLElemen
167
189
  const meta = {
168
190
  title: 'ui/react-ui-editor/Preview',
169
191
  component: EditorStory,
170
- decorators: [withTheme],
192
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
171
193
  parameters: {
172
194
  layout: 'fullscreen',
173
195
  },
@@ -177,53 +199,49 @@ export default meta;
177
199
 
178
200
  type Story = StoryObj<typeof meta>;
179
201
 
202
+ const text = trim`
203
+ # Preview
204
+
205
+ This project is part of the [DXOS](dxn:queue:data:123) SDK.
206
+
207
+ ![DXOS](dxn:queue:data:123)
208
+
209
+ It consists of [ECHO](dxn:queue:data:echo), [HALO](dxn:queue:data:halo), and [MESH](dxn:queue:data:mesh).
210
+
211
+ ## Deep dive
212
+
213
+ ![ECHO](dxn:queue:data:echo)
214
+
215
+ `;
216
+
180
217
  export const Default: Story = {
181
218
  render: () => {
182
- const [view, setView] = useState<EditorView>();
183
- const [previewBlocks, setPreviewBlocks] = useState<{ link: PreviewLinkRef; el: HTMLElement }[]>([]);
219
+ const [controller, setController] = useState<EditorController | null>(null);
220
+ const [previewBlocks, setPreviewBlocks] = useState<PreviewBlock[]>([]);
184
221
  const extensions = useMemo(() => {
185
222
  return [
186
223
  image(),
187
224
  preview({
188
- addBlockContainer: (link, el) => {
189
- setPreviewBlocks((prev) => [...prev, { link, el }]);
225
+ addBlockContainer: (block) => {
226
+ setPreviewBlocks((prev) => [...prev, block]);
190
227
  },
191
- removeBlockContainer: (link) => {
192
- setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.ref !== link.ref));
228
+ removeBlockContainer: (block) => {
229
+ setPreviewBlocks((prev) => prev.filter(({ link: prevLink }) => prevLink.dxn !== block.link.dxn));
193
230
  },
194
231
  }),
195
232
  ];
196
233
  }, []);
197
234
 
198
- const handleViewRef = useCallback((instance?: EditorView | null) => {
199
- setView(instance ?? undefined);
200
- }, []);
201
-
235
+ // TODO(burdon): Migrate to Editor.Root.
202
236
  return (
203
- <PreviewPopoverProvider onLookup={handlePreviewLookup}>
204
- <EditorStory
205
- ref={handleViewRef}
206
- text={trim`
207
- # Preview
208
-
209
- This project is part of the [DXOS](dxn:queue:data:123) SDK.
210
-
211
- ![DXOS](dxn:queue:data:123)
212
-
213
- It consists of [ECHO](dxn:queue:data:echo), [HALO](dxn:queue:data:halo), and [MESH](dxn:queue:data:mesh).
214
-
215
- ## Deep dive
216
-
217
- ![ECHO](dxn:queue:data:echo)
218
-
219
- `}
220
- extensions={extensions}
221
- />
237
+ <EditorPreviewProvider onLookup={handlePreviewLookup}>
238
+ <EditorStory ref={setController} text={text} extensions={extensions} />
222
239
  <PreviewCard />
223
- {previewBlocks.map(({ link, el }) => (
224
- <PreviewBlock key={link.ref} link={link} el={el} view={view} />
225
- ))}
226
- </PreviewPopoverProvider>
240
+ {controller?.view &&
241
+ previewBlocks.map(({ link, el }) => (
242
+ <PreviewBlockComponent key={link.dxn} link={link} el={el} view={controller.view!} />
243
+ ))}
244
+ </EditorPreviewProvider>
227
245
  );
228
246
  },
229
247
  };