@dxos/react-ui-editor 0.8.4-main.c4373fc → 0.8.4-main.cb12b3f963

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (436) hide show
  1. package/dist/lib/browser/index.mjs +1414 -8669
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/browser/translations.mjs +39 -0
  5. package/dist/lib/browser/translations.mjs.map +7 -0
  6. package/dist/lib/node-esm/index.mjs +1414 -8668
  7. package/dist/lib/node-esm/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/meta.json +1 -1
  9. package/dist/lib/node-esm/translations.mjs +41 -0
  10. package/dist/lib/node-esm/translations.mjs.map +7 -0
  11. package/dist/types/src/components/Editor/Editor.d.ts +53 -20
  12. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  13. package/dist/types/src/components/Editor/Editor.stories.d.ts +23 -0
  14. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  15. package/dist/types/src/components/Editor/EditorView.d.ts +31 -0
  16. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  17. package/dist/types/src/components/Editor/controller.d.ts +10 -0
  18. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +34 -0
  20. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  22. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  24. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  26. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +47 -0
  28. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  30. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  32. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  34. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  35. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  36. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  37. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  38. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  40. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  42. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  44. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  46. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -17
  48. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  50. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  51. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  52. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  53. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  54. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  55. package/dist/types/src/components/index.d.ts +2 -2
  56. package/dist/types/src/components/index.d.ts.map +1 -1
  57. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  58. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  59. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  60. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  61. package/dist/types/src/extensions/index.d.ts +1 -26
  62. package/dist/types/src/extensions/index.d.ts.map +1 -1
  63. package/dist/types/src/hooks/index.d.ts +1 -0
  64. package/dist/types/src/hooks/index.d.ts.map +1 -1
  65. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  66. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  67. package/dist/types/src/hooks/useTextEditor.d.ts +4 -8
  68. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  69. package/dist/types/src/index.d.ts +0 -9
  70. package/dist/types/src/index.d.ts.map +1 -1
  71. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  72. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  73. package/dist/types/src/stories/Comments.stories.d.ts +4 -3
  74. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  75. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  76. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/Experimental.stories.d.ts +5 -4
  78. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Markdown.stories.d.ts +4 -3
  80. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  82. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -5
  84. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  85. package/dist/types/src/stories/Preview.stories.d.ts +5 -3
  86. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  87. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  88. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -4
  89. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  90. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  91. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  92. package/dist/types/src/stories/components/EditorStory.d.ts +11 -20
  93. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  94. package/dist/types/src/stories/components/util.d.ts +4 -3
  95. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  96. package/dist/types/src/translations.d.ts +26 -26
  97. package/dist/types/src/translations.d.ts.map +1 -1
  98. package/dist/types/src/util/index.d.ts +0 -5
  99. package/dist/types/src/util/index.d.ts.map +1 -1
  100. package/dist/types/src/util/react.d.ts +6 -5
  101. package/dist/types/src/util/react.d.ts.map +1 -1
  102. package/dist/types/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +80 -75
  104. package/src/components/Editor/Editor.stories.tsx +89 -0
  105. package/src/components/Editor/Editor.tsx +170 -54
  106. package/src/components/Editor/EditorView.tsx +103 -0
  107. package/src/components/Editor/controller.ts +50 -0
  108. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +226 -0
  109. package/src/components/EditorMenuProvider/index.ts +10 -0
  110. package/src/components/EditorMenuProvider/menu-presets.ts +125 -0
  111. package/src/components/EditorMenuProvider/menu.ts +70 -0
  112. package/src/components/EditorMenuProvider/popover.ts +286 -0
  113. package/src/components/EditorMenuProvider/useEditorMenu.ts +180 -0
  114. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  115. package/src/components/EditorPreviewProvider/index.ts +5 -0
  116. package/src/components/EditorToolbar/EditorToolbar.tsx +90 -112
  117. package/src/components/EditorToolbar/blocks.ts +55 -47
  118. package/src/components/EditorToolbar/formatting.ts +44 -45
  119. package/src/components/EditorToolbar/headings.ts +47 -50
  120. package/src/components/EditorToolbar/image.ts +16 -14
  121. package/src/components/EditorToolbar/index.ts +2 -7
  122. package/src/components/EditorToolbar/lists.ts +42 -40
  123. package/src/components/EditorToolbar/search.ts +16 -14
  124. package/src/components/EditorToolbar/types.ts +8 -0
  125. package/src/components/EditorToolbar/view-mode.ts +37 -42
  126. package/src/components/index.ts +3 -2
  127. package/src/extensions/Assistant.stories.tsx +112 -0
  128. package/src/extensions/assistant-extension.tsx +223 -0
  129. package/src/extensions/index.ts +2 -27
  130. package/src/hooks/index.ts +1 -0
  131. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  132. package/src/hooks/useTextEditor.ts +33 -27
  133. package/src/index.ts +0 -13
  134. package/src/stories/Automerge.stories.tsx +174 -0
  135. package/src/stories/Comments.stories.tsx +49 -45
  136. package/src/stories/EditorToolbar.stories.tsx +42 -55
  137. package/src/stories/Experimental.stories.tsx +14 -16
  138. package/src/stories/Markdown.stories.tsx +16 -16
  139. package/src/stories/Outliner.stories.tsx +22 -24
  140. package/src/stories/Popover.stories.tsx +157 -0
  141. package/src/stories/Preview.stories.tsx +102 -84
  142. package/src/stories/Tags.stories.tsx +36 -13
  143. package/src/stories/TextEditor.stories.tsx +16 -48
  144. package/src/stories/Theme.stories.tsx +61 -0
  145. package/src/stories/components/EditorStory.tsx +46 -30
  146. package/src/stories/components/util.tsx +90 -59
  147. package/src/translations.ts +30 -25
  148. package/src/util/index.ts +1 -6
  149. package/src/util/react.tsx +8 -13
  150. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  151. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  152. package/dist/lib/browser/testing/index.mjs +0 -76
  153. package/dist/lib/browser/testing/index.mjs.map +0 -7
  154. package/dist/lib/browser/types/index.mjs +0 -13
  155. package/dist/lib/browser/types/index.mjs.map +0 -7
  156. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  157. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  158. package/dist/lib/node-esm/testing/index.mjs +0 -78
  159. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  160. package/dist/lib/node-esm/types/index.mjs +0 -14
  161. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  162. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts +0 -38
  163. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts.map +0 -1
  164. package/dist/types/src/components/CommandMenu/index.d.ts +0 -2
  165. package/dist/types/src/components/CommandMenu/index.d.ts.map +0 -1
  166. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  167. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  168. package/dist/types/src/defaults.d.ts +0 -14
  169. package/dist/types/src/defaults.d.ts.map +0 -1
  170. package/dist/types/src/extensions/annotations.d.ts +0 -9
  171. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  172. package/dist/types/src/extensions/autocomplete.d.ts +0 -26
  173. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  174. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  175. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  176. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  177. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  178. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  179. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  180. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  181. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  182. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  183. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  184. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  185. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  186. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  187. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  188. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  189. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  190. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  191. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  192. package/dist/types/src/extensions/autoscroll.d.ts +0 -10
  193. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  194. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  195. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  196. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  197. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  198. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  199. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  200. package/dist/types/src/extensions/blast.d.ts +0 -25
  201. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  202. package/dist/types/src/extensions/command-dialog/action.d.ts +0 -17
  203. package/dist/types/src/extensions/command-dialog/action.d.ts.map +0 -1
  204. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts +0 -6
  205. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts.map +0 -1
  206. package/dist/types/src/extensions/command-dialog/hint.d.ts +0 -19
  207. package/dist/types/src/extensions/command-dialog/hint.d.ts.map +0 -1
  208. package/dist/types/src/extensions/command-dialog/index.d.ts +0 -4
  209. package/dist/types/src/extensions/command-dialog/index.d.ts.map +0 -1
  210. package/dist/types/src/extensions/command-dialog/state.d.ts +0 -16
  211. package/dist/types/src/extensions/command-dialog/state.d.ts.map +0 -1
  212. package/dist/types/src/extensions/command-dialog/typeahead.d.ts +0 -22
  213. package/dist/types/src/extensions/command-dialog/typeahead.d.ts.map +0 -1
  214. package/dist/types/src/extensions/command-menu/command-menu.d.ts +0 -20
  215. package/dist/types/src/extensions/command-menu/command-menu.d.ts.map +0 -1
  216. package/dist/types/src/extensions/command-menu/index.d.ts +0 -3
  217. package/dist/types/src/extensions/command-menu/index.d.ts.map +0 -1
  218. package/dist/types/src/extensions/command-menu/placeholder.d.ts +0 -10
  219. package/dist/types/src/extensions/command-menu/placeholder.d.ts.map +0 -1
  220. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts +0 -24
  221. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts.map +0 -1
  222. package/dist/types/src/extensions/comments.d.ts +0 -95
  223. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  224. package/dist/types/src/extensions/debug.d.ts +0 -3
  225. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  226. package/dist/types/src/extensions/dnd.d.ts +0 -9
  227. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  228. package/dist/types/src/extensions/factories.d.ts +0 -83
  229. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  230. package/dist/types/src/extensions/floating-menu.d.ts +0 -7
  231. package/dist/types/src/extensions/floating-menu.d.ts.map +0 -1
  232. package/dist/types/src/extensions/focus.d.ts +0 -7
  233. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  234. package/dist/types/src/extensions/folding.d.ts +0 -7
  235. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  236. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  237. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  238. package/dist/types/src/extensions/json.d.ts +0 -7
  239. package/dist/types/src/extensions/json.d.ts.map +0 -1
  240. package/dist/types/src/extensions/listener.d.ts +0 -11
  241. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  243. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  245. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  247. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  249. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  251. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  253. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  255. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  256. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  257. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  258. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  259. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  260. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  261. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  262. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  263. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  264. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  265. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  266. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  267. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  268. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  269. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  270. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  271. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  272. package/dist/types/src/extensions/mention.d.ts +0 -7
  273. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  274. package/dist/types/src/extensions/modes.d.ts +0 -10
  275. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  277. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  279. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  280. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  281. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  282. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  283. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  284. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  285. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  286. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  287. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  288. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  289. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  290. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  291. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  292. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  293. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  294. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  295. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  296. package/dist/types/src/extensions/preview/preview.d.ts +0 -29
  297. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  298. package/dist/types/src/extensions/selection.d.ts +0 -24
  299. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  300. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  301. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  302. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  303. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  304. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  305. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  306. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  307. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  308. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -72
  309. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  310. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  311. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  312. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  313. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  314. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  315. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  316. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  317. package/dist/types/src/styles/index.d.ts +0 -4
  318. package/dist/types/src/styles/index.d.ts.map +0 -1
  319. package/dist/types/src/styles/markdown.d.ts +0 -8
  320. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  321. package/dist/types/src/styles/theme.d.ts +0 -38
  322. package/dist/types/src/styles/theme.d.ts.map +0 -1
  323. package/dist/types/src/styles/tokens.d.ts +0 -3
  324. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  325. package/dist/types/src/testing/PreviewPopover.d.ts +0 -20
  326. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  327. package/dist/types/src/testing/index.d.ts +0 -3
  328. package/dist/types/src/testing/index.d.ts.map +0 -1
  329. package/dist/types/src/testing/util.d.ts +0 -3
  330. package/dist/types/src/testing/util.d.ts.map +0 -1
  331. package/dist/types/src/types/index.d.ts +0 -2
  332. package/dist/types/src/types/index.d.ts.map +0 -1
  333. package/dist/types/src/types/types.d.ts +0 -21
  334. package/dist/types/src/types/types.d.ts.map +0 -1
  335. package/dist/types/src/util/cursor.d.ts +0 -31
  336. package/dist/types/src/util/cursor.d.ts.map +0 -1
  337. package/dist/types/src/util/debug.d.ts +0 -17
  338. package/dist/types/src/util/debug.d.ts.map +0 -1
  339. package/dist/types/src/util/decorations.d.ts +0 -4
  340. package/dist/types/src/util/decorations.d.ts.map +0 -1
  341. package/dist/types/src/util/dom.d.ts +0 -10
  342. package/dist/types/src/util/dom.d.ts.map +0 -1
  343. package/dist/types/src/util/facet.d.ts +0 -3
  344. package/dist/types/src/util/facet.d.ts.map +0 -1
  345. package/src/components/CommandMenu/CommandMenu.tsx +0 -348
  346. package/src/components/CommandMenu/index.ts +0 -5
  347. package/src/components/EditorToolbar/util.ts +0 -76
  348. package/src/defaults.ts +0 -52
  349. package/src/extensions/annotations.ts +0 -55
  350. package/src/extensions/autocomplete.ts +0 -219
  351. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  352. package/src/extensions/automerge/automerge.test.tsx +0 -78
  353. package/src/extensions/automerge/automerge.ts +0 -86
  354. package/src/extensions/automerge/cursor.ts +0 -28
  355. package/src/extensions/automerge/defs.ts +0 -31
  356. package/src/extensions/automerge/index.ts +0 -5
  357. package/src/extensions/automerge/sync.ts +0 -75
  358. package/src/extensions/automerge/update-automerge.ts +0 -50
  359. package/src/extensions/automerge/update-codemirror.ts +0 -115
  360. package/src/extensions/autoscroll.ts +0 -157
  361. package/src/extensions/awareness/awareness-provider.ts +0 -127
  362. package/src/extensions/awareness/awareness.ts +0 -315
  363. package/src/extensions/awareness/index.ts +0 -6
  364. package/src/extensions/blast.ts +0 -363
  365. package/src/extensions/command-dialog/action.ts +0 -55
  366. package/src/extensions/command-dialog/command-dialog.ts +0 -34
  367. package/src/extensions/command-dialog/hint.ts +0 -103
  368. package/src/extensions/command-dialog/index.ts +0 -7
  369. package/src/extensions/command-dialog/state.ts +0 -90
  370. package/src/extensions/command-dialog/typeahead.ts +0 -129
  371. package/src/extensions/command-menu/command-menu.ts +0 -210
  372. package/src/extensions/command-menu/index.ts +0 -6
  373. package/src/extensions/command-menu/placeholder.ts +0 -113
  374. package/src/extensions/command-menu/useCommandMenu.ts +0 -134
  375. package/src/extensions/comments.ts +0 -597
  376. package/src/extensions/debug.ts +0 -15
  377. package/src/extensions/dnd.ts +0 -37
  378. package/src/extensions/factories.ts +0 -284
  379. package/src/extensions/floating-menu.ts +0 -126
  380. package/src/extensions/focus.ts +0 -36
  381. package/src/extensions/folding.tsx +0 -44
  382. package/src/extensions/hashtag.tsx +0 -68
  383. package/src/extensions/json.ts +0 -57
  384. package/src/extensions/listener.ts +0 -38
  385. package/src/extensions/markdown/action.ts +0 -117
  386. package/src/extensions/markdown/bundle.ts +0 -93
  387. package/src/extensions/markdown/changes.test.ts +0 -26
  388. package/src/extensions/markdown/changes.ts +0 -149
  389. package/src/extensions/markdown/debug.ts +0 -44
  390. package/src/extensions/markdown/decorate.ts +0 -601
  391. package/src/extensions/markdown/formatting.test.ts +0 -498
  392. package/src/extensions/markdown/formatting.ts +0 -1267
  393. package/src/extensions/markdown/highlight.ts +0 -183
  394. package/src/extensions/markdown/image.ts +0 -118
  395. package/src/extensions/markdown/index.ts +0 -13
  396. package/src/extensions/markdown/link.ts +0 -50
  397. package/src/extensions/markdown/parser.test.ts +0 -75
  398. package/src/extensions/markdown/styles.ts +0 -135
  399. package/src/extensions/markdown/table.ts +0 -150
  400. package/src/extensions/mention.ts +0 -41
  401. package/src/extensions/modes.ts +0 -41
  402. package/src/extensions/outliner/commands.ts +0 -270
  403. package/src/extensions/outliner/editor.test.ts +0 -33
  404. package/src/extensions/outliner/editor.ts +0 -184
  405. package/src/extensions/outliner/index.ts +0 -7
  406. package/src/extensions/outliner/outliner.test.ts +0 -100
  407. package/src/extensions/outliner/outliner.ts +0 -167
  408. package/src/extensions/outliner/selection.ts +0 -50
  409. package/src/extensions/outliner/tree.test.ts +0 -168
  410. package/src/extensions/outliner/tree.ts +0 -317
  411. package/src/extensions/preview/index.ts +0 -5
  412. package/src/extensions/preview/preview.ts +0 -190
  413. package/src/extensions/selection.ts +0 -100
  414. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  415. package/src/extensions/tags/extended-markdown.ts +0 -78
  416. package/src/extensions/tags/index.ts +0 -7
  417. package/src/extensions/tags/streamer.ts +0 -243
  418. package/src/extensions/tags/xml-tags.ts +0 -393
  419. package/src/extensions/tags/xml-util.ts +0 -94
  420. package/src/extensions/typewriter.ts +0 -68
  421. package/src/stories/CommandDialog.stories.tsx +0 -89
  422. package/src/stories/CommandMenu.stories.tsx +0 -158
  423. package/src/styles/index.ts +0 -7
  424. package/src/styles/markdown.ts +0 -26
  425. package/src/styles/theme.ts +0 -268
  426. package/src/styles/tokens.ts +0 -17
  427. package/src/testing/PreviewPopover.tsx +0 -78
  428. package/src/testing/index.ts +0 -6
  429. package/src/testing/util.ts +0 -7
  430. package/src/types/index.ts +0 -5
  431. package/src/types/types.ts +0 -32
  432. package/src/util/cursor.ts +0 -56
  433. package/src/util/debug.ts +0 -64
  434. package/src/util/decorations.ts +0 -21
  435. package/src/util/dom.ts +0 -34
  436. package/src/util/facet.ts +0 -13
@@ -2,134 +2,112 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Rx } from '@effect-rx/rx-react';
5
+ import { type EditorView } from '@codemirror/view';
6
+ import { Atom } from '@effect-atom/atom-react';
6
7
  import React, { memo, useMemo } from 'react';
7
8
 
8
- import { rxFromSignal } from '@dxos/app-graph';
9
- import { ElevationProvider } from '@dxos/react-ui';
10
- import {
11
- type ActionGraphProps,
12
- MenuProvider,
13
- ToolbarMenu,
14
- createGapSeparator,
15
- useMenuActions,
16
- } from '@dxos/react-ui-menu';
9
+ import { type Node } from '@dxos/app-graph';
10
+ import { ElevationProvider, type ThemedClassName } from '@dxos/react-ui';
11
+ import { type ActionGraphProps, Menu, type MenuAction, MenuBuilder, useMenuActions } from '@dxos/react-ui-menu';
12
+ import { type EditorViewMode } from '@dxos/ui-editor/types';
17
13
 
18
- import { createBlocks } from './blocks';
19
- import { createFormatting } from './formatting';
20
- import { createHeadings } from './headings';
21
- import { createImageUpload } from './image';
22
- import { createLists } from './lists';
23
- import { createSearch } from './search';
24
- import { type EditorToolbarActionGraphProps, type EditorToolbarFeatureFlags, type EditorToolbarProps } from './util';
25
- import { createViewMode } from './view-mode';
14
+ import { addBlocks } from './blocks';
15
+ import { addFormatting } from './formatting';
16
+ import { addHeadings } from './headings';
17
+ import { addImageUpload } from './image';
18
+ import { addLists } from './lists';
19
+ import { addSearch } from './search';
20
+ import { type EditorToolbarState } from './types';
21
+ import { addViewMode } from './view-mode';
26
22
 
27
- const createToolbarActions = ({
28
- getView,
29
- state,
30
- customActions,
31
- ...features
32
- }: EditorToolbarFeatureFlags &
33
- Pick<EditorToolbarActionGraphProps, 'getView' | 'state' | 'customActions'>): Rx.Rx<ActionGraphProps> => {
34
- return Rx.make((get) => {
35
- const graph: ActionGraphProps = {
36
- nodes: [],
37
- edges: [],
38
- };
23
+ // TODO(burdon): Enable toolbar variants (e.g., markdown, code).
39
24
 
40
- if (features.headings ?? true) {
41
- const headings = get(rxFromSignal(() => createHeadings(state, getView)));
42
- graph.nodes.push(...headings.nodes);
43
- graph.edges.push(...headings.edges);
44
- }
45
- if (features.formatting ?? true) {
46
- const formatting = get(rxFromSignal(() => createFormatting(state, getView)));
47
- graph.nodes.push(...formatting.nodes);
48
- graph.edges.push(...formatting.edges);
49
- }
50
- if (features.lists ?? true) {
51
- const lists = get(rxFromSignal(() => createLists(state, getView)));
52
- graph.nodes.push(...lists.nodes);
53
- graph.edges.push(...lists.edges);
54
- }
55
- if (features.blocks ?? true) {
56
- const blocks = get(rxFromSignal(() => createBlocks(state, getView)));
57
- graph.nodes.push(...blocks.nodes);
58
- graph.edges.push(...blocks.edges);
59
- }
60
- if (features.image) {
61
- const image = get(rxFromSignal(() => createImageUpload(features.image!)));
62
- graph.nodes.push(...image.nodes);
63
- graph.edges.push(...image.edges);
64
- }
65
- {
66
- const gap = createGapSeparator();
67
- graph.nodes.push(...gap.nodes);
68
- graph.edges.push(...gap.edges);
69
- }
70
- if (customActions) {
71
- const custom = get(customActions);
72
- graph.nodes.push(...custom.nodes);
73
- graph.edges.push(...custom.edges);
74
- }
75
- if (features.search ?? true) {
76
- const search = get(rxFromSignal(() => createSearch(getView)));
77
- graph.nodes.push(...search.nodes);
78
- graph.edges.push(...search.edges);
79
- }
80
- if (features.viewMode) {
81
- const viewMode = get(rxFromSignal(() => createViewMode(state, features.viewMode!)));
82
- graph.nodes.push(...viewMode.nodes);
83
- graph.edges.push(...viewMode.edges);
84
- }
25
+ export type EditorToolbarFeatureFlags = Partial<{
26
+ showHeadings: boolean;
27
+ showFormatting: boolean;
28
+ showLists: boolean;
29
+ showBlocks: boolean;
30
+ showSearch: boolean;
85
31
 
86
- return graph;
87
- });
32
+ // TODO(wittjosiah): Factor out (depends on plugin-level capabilities.)
33
+ onImageUpload: () => void;
34
+ onViewModeChange: (mode: EditorViewMode) => void;
35
+ }>;
36
+
37
+ export type EditorToolbarActionGraphProps = {
38
+ state: Atom.Atom<EditorToolbarState>;
39
+ getView: () => EditorView;
40
+ // TODO(wittjosiah): Control positioning.
41
+ customActions?: Atom.Atom<ActionGraphProps>;
88
42
  };
89
43
 
44
+ export type EditorToolbarProps = ThemedClassName<
45
+ {
46
+ role?: string;
47
+ attendableId?: string;
48
+ /** Handler for executing actions. Required when customActions use Operation.invoke. */
49
+ onAction?: (action: MenuAction, params: Node.InvokeProps) => void;
50
+ } & (EditorToolbarActionGraphProps & EditorToolbarFeatureFlags)
51
+ >;
52
+
53
+ export const EditorToolbar = memo(({ classNames, role, attendableId, onAction, ...props }: EditorToolbarProps) => {
54
+ const menuActions = useMarkdownMenuActions(props);
55
+
56
+ return (
57
+ <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>
58
+ <Menu.Root {...menuActions} attendableId={attendableId} onAction={onAction}>
59
+ <Menu.Toolbar classNames={classNames} />
60
+ </Menu.Root>
61
+ </ElevationProvider>
62
+ );
63
+ });
64
+
65
+ type ToolbarActionsProps = Pick<EditorToolbarActionGraphProps, 'state' | 'getView' | 'customActions'> &
66
+ EditorToolbarFeatureFlags;
67
+
68
+ // TODO(burdon): Some actions should toggle the state (e.g., toggle bullets on/off depending on the current state).
90
69
  // TODO(wittjosiah): Toolbar re-rendering is causing this graph to be recreated and breaking reactivity in some cases.
91
70
  // E.g. for toolbar dropdowns which use active icon, the icon is not updated when the active item changes.
92
71
  // This is currently only happening in the markdown plugin usage and should be reproduced in an editor story.
93
- const useEditorToolbarActionGraph = (props: EditorToolbarProps) => {
72
+ const useMarkdownMenuActions = ({ state, getView, customActions, ...features }: ToolbarActionsProps) => {
94
73
  const menuCreator = useMemo(
95
- () =>
96
- createToolbarActions({
97
- getView: props.getView,
98
- state: props.state,
99
- customActions: props.customActions,
100
- headings: props.headings,
101
- formatting: props.formatting,
102
- lists: props.lists,
103
- blocks: props.blocks,
104
- image: props.image,
105
- search: props.search,
106
- viewMode: props.viewMode,
107
- }),
74
+ () => createMarkdownActions({ state, getView, customActions, ...features }),
108
75
  [
109
- props.getView,
110
- props.state,
111
- props.customActions,
112
- props.headings,
113
- props.formatting,
114
- props.lists,
115
- props.blocks,
116
- props.image,
117
- props.search,
118
- props.viewMode,
76
+ state,
77
+ getView,
78
+ customActions,
79
+ features?.showHeadings,
80
+ features?.showFormatting,
81
+ features?.showLists,
82
+ features?.showBlocks,
83
+ features?.showSearch,
84
+ features?.onImageUpload,
85
+ features?.onViewModeChange,
119
86
  ],
120
87
  );
121
88
 
122
89
  return useMenuActions(menuCreator);
123
90
  };
124
91
 
125
- export const EditorToolbar = memo(({ classNames, attendableId, role, ...props }: EditorToolbarProps) => {
126
- const menuProps = useEditorToolbarActionGraph(props);
127
-
128
- return (
129
- <ElevationProvider elevation={role === 'section' ? 'positioned' : 'base'}>
130
- <MenuProvider {...menuProps} attendableId={attendableId}>
131
- <ToolbarMenu classNames={classNames} textBlockWidth />
132
- </MenuProvider>
133
- </ElevationProvider>
134
- );
135
- });
92
+ const createMarkdownActions = ({
93
+ state,
94
+ getView,
95
+ customActions,
96
+ ...features
97
+ }: ToolbarActionsProps): Atom.Atom<ActionGraphProps> => {
98
+ return Atom.make((get) => {
99
+ // Subscribe to state changes.
100
+ const stateSnapshot = get(state);
101
+ return MenuBuilder.make()
102
+ .subgraph(features?.showHeadings !== false && addHeadings(stateSnapshot, getView))
103
+ .subgraph(features?.showFormatting !== false && addFormatting(stateSnapshot, getView))
104
+ .subgraph(features?.showLists !== false && addLists(stateSnapshot, getView))
105
+ .subgraph(features?.showBlocks !== false && addBlocks(stateSnapshot, getView))
106
+ .subgraph(features?.onImageUpload && addImageUpload(features.onImageUpload))
107
+ .separator('gap')
108
+ .subgraph(customActions && get(customActions))
109
+ .subgraph(features?.showSearch !== false && addSearch(getView))
110
+ .subgraph(features?.onViewModeChange && addViewMode(stateSnapshot, features.onViewModeChange))
111
+ .build();
112
+ });
113
+ };
@@ -4,56 +4,64 @@
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
6
 
7
- import { type NodeArg } from '@dxos/app-graph';
8
- import { type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
7
+ import { type ActionGroupBuilderFn, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
8
+ import { addBlockquote, addCodeblock, insertTable, removeBlockquote, removeCodeblock } from '@dxos/ui-editor';
9
9
 
10
- import { addBlockquote, addCodeblock, insertTable, removeBlockquote, removeCodeblock } from '../../extensions';
10
+ import { translationKey } from '#translations';
11
11
 
12
- import { type EditorToolbarState, createEditorAction, createEditorActionGroup } from './util';
12
+ import { type EditorToolbarState } from './types';
13
13
 
14
- const createBlockGroupAction = (value: string) =>
15
- createEditorActionGroup('block', {
16
- variant: 'toggleGroup',
17
- selectCardinality: 'single',
18
- value,
19
- } as ToolbarMenuActionGroupProperties);
20
-
21
- const createBlockActions = (value: string, getView: () => EditorView, blankLine?: boolean) =>
22
- Object.entries({
23
- blockquote: 'ph--quotes--regular',
24
- codeblock: 'ph--code-block--regular',
25
- table: 'ph--table--regular',
26
- }).map(([type, icon]) => {
27
- const checked = type === value;
28
- return createEditorAction(type, { checked, ...(type === 'table' && { disabled: !!blankLine }), icon }, () => {
29
- const view = getView();
30
- if (!view) {
31
- return;
32
- }
14
+ const blockTypes = {
15
+ blockquote: 'ph--quotes--regular',
16
+ codeblock: 'ph--code-block--regular',
17
+ table: 'ph--table--regular',
18
+ };
33
19
 
34
- switch (type) {
35
- case 'blockquote':
36
- checked ? removeBlockquote(view) : addBlockquote(view);
37
- break;
38
- case 'codeblock':
39
- checked ? removeCodeblock(view) : addCodeblock(view);
40
- break;
41
- case 'table':
42
- insertTable(view);
43
- break;
44
- }
45
- });
46
- });
20
+ /** Add block actions to the builder. */
21
+ export const addBlocks =
22
+ (state: EditorToolbarState, getView: () => EditorView): ActionGroupBuilderFn =>
23
+ (builder) => {
24
+ const value = state?.blockQuote ? 'blockquote' : (state.blockType ?? '');
25
+ builder.group(
26
+ 'block',
27
+ {
28
+ label: ['block.label', { ns: translationKey }],
29
+ iconOnly: true,
30
+ variant: 'toggleGroup',
31
+ selectCardinality: 'single',
32
+ value,
33
+ } as ToolbarMenuActionGroupProperties,
34
+ (group) => {
35
+ for (const [type, icon] of Object.entries(blockTypes)) {
36
+ const checked = type === value;
37
+ group.action(
38
+ type,
39
+ {
40
+ label: [`block.${type}.label`, { ns: translationKey }],
41
+ checked,
42
+ ...(type === 'table' && { disabled: !!state.blankLine }),
43
+ icon,
44
+ },
45
+ () => {
46
+ const view = getView();
47
+ if (!view) {
48
+ return;
49
+ }
47
50
 
48
- export const createBlocks = (state: EditorToolbarState, getView: () => EditorView) => {
49
- const value = state?.blockQuote ? 'blockquote' : (state.blockType ?? '');
50
- const blockGroupAction = createBlockGroupAction(value);
51
- const blockActions = createBlockActions(value, getView, state.blankLine);
52
- return {
53
- nodes: [blockGroupAction as NodeArg<any>, ...blockActions],
54
- edges: [
55
- { source: 'root', target: 'block' },
56
- ...blockActions.map(({ id }) => ({ source: blockGroupAction.id, target: id })),
57
- ],
51
+ switch (type) {
52
+ case 'blockquote':
53
+ checked ? removeBlockquote(view) : addBlockquote(view);
54
+ break;
55
+ case 'codeblock':
56
+ checked ? removeCodeblock(view) : addCodeblock(view);
57
+ break;
58
+ case 'table':
59
+ insertTable(view);
60
+ break;
61
+ }
62
+ },
63
+ );
64
+ }
65
+ },
66
+ );
58
67
  };
59
- };
@@ -4,12 +4,12 @@
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
6
 
7
- import { type NodeArg } from '@dxos/app-graph';
8
- import { type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
7
+ import { type ActionGroupBuilderFn, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
8
+ import { type Formatting, Inline, addLink, removeLink, setStyle } from '@dxos/ui-editor';
9
9
 
10
- import { type Formatting, Inline, addLink, removeLink, setStyle } from '../../extensions';
10
+ import { translationKey } from '#translations';
11
11
 
12
- import { type EditorToolbarState, createEditorAction, createEditorActionGroup } from './util';
12
+ import { type EditorToolbarState } from './types';
13
13
 
14
14
  const formats = {
15
15
  strong: 'ph--text-b--regular',
@@ -19,47 +19,46 @@ const formats = {
19
19
  link: 'ph--link--regular',
20
20
  };
21
21
 
22
- const createFormattingGroup = (formatting: Formatting) =>
23
- createEditorActionGroup('formatting', {
24
- variant: 'toggleGroup',
25
- selectCardinality: 'multiple',
26
- value: Object.keys(formats).filter((key) => !!formatting[key as keyof Formatting]),
27
- } as ToolbarMenuActionGroupProperties);
22
+ /** Add formatting actions to the builder. */
23
+ export const addFormatting =
24
+ (state: EditorToolbarState, getView: () => EditorView): ActionGroupBuilderFn =>
25
+ (builder) => {
26
+ const formatting: Formatting = state;
27
+ builder.group(
28
+ 'formatting',
29
+ {
30
+ label: ['formatting.label', { ns: translationKey }],
31
+ iconOnly: true,
32
+ variant: 'toggleGroup',
33
+ selectCardinality: 'multiple',
34
+ value: Object.keys(formats).filter((key) => !!formatting[key as keyof Formatting]),
35
+ } as ToolbarMenuActionGroupProperties,
36
+ (group) => {
37
+ for (const [type, icon] of Object.entries(formats)) {
38
+ const checked = !!formatting[type as keyof Formatting];
39
+ group.action(type, { label: [`formatting.${type}.label`, { ns: translationKey }], checked, icon }, () => {
40
+ const view = getView();
41
+ if (!view) {
42
+ return;
43
+ }
28
44
 
29
- const createFormattingActions = (formatting: Formatting, getView: () => EditorView) =>
30
- Object.entries(formats).map(([type, icon]) => {
31
- const checked = !!formatting[type as keyof Formatting];
32
- return createEditorAction(type, { checked, icon }, () => {
33
- const view = getView();
34
- if (!view) {
35
- return;
36
- }
45
+ if (type === 'link') {
46
+ checked ? removeLink(view) : addLink()(view);
47
+ return;
48
+ }
37
49
 
38
- if (type === 'link') {
39
- checked ? removeLink(view) : addLink()(view);
40
- return;
41
- }
42
-
43
- const inlineType =
44
- type === 'strong'
45
- ? Inline.Strong
46
- : type === 'emphasis'
47
- ? Inline.Emphasis
48
- : type === 'strikethrough'
49
- ? Inline.Strikethrough
50
- : Inline.Code;
51
- setStyle(inlineType, !checked)(view);
52
- });
53
- });
54
-
55
- export const createFormatting = (state: EditorToolbarState, getView: () => EditorView) => {
56
- const formattingGroupAction = createFormattingGroup(state);
57
- const formattingActions = createFormattingActions(state, getView);
58
- return {
59
- nodes: [formattingGroupAction as NodeArg<any>, ...formattingActions],
60
- edges: [
61
- { source: 'root', target: 'formatting' },
62
- ...formattingActions.map(({ id }) => ({ source: formattingGroupAction.id, target: id })),
63
- ],
50
+ setStyle(
51
+ type === 'strong'
52
+ ? Inline.Strong
53
+ : type === 'emphasis'
54
+ ? Inline.Emphasis
55
+ : type === 'strikethrough'
56
+ ? Inline.Strikethrough
57
+ : Inline.Code,
58
+ !checked,
59
+ )(view);
60
+ });
61
+ }
62
+ },
63
+ );
64
64
  };
65
- };
@@ -4,62 +4,59 @@
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
6
 
7
- import { type NodeArg } from '@dxos/app-graph';
8
- import { type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
7
+ import { type ActionGroupBuilderFn, type ToolbarMenuActionGroupProperties } from '@dxos/react-ui-menu';
8
+ import { setHeading } from '@dxos/ui-editor';
9
9
 
10
- import { setHeading } from '../../extensions';
11
- import { translationKey } from '../../translations';
10
+ import { translationKey } from '#translations';
12
11
 
13
- import { type EditorToolbarState, createEditorAction, createEditorActionGroup } from './util';
12
+ import { type EditorToolbarState } from './types';
14
13
 
15
- const createHeadingGroupAction = (value: string) =>
16
- createEditorActionGroup(
17
- 'heading',
18
- {
19
- variant: 'dropdownMenu',
20
- applyActive: true,
21
- selectCardinality: 'single',
22
- value,
23
- } as ToolbarMenuActionGroupProperties,
24
- 'ph--text-h--regular',
25
- );
26
-
27
- const createHeadingActions = (getView: () => EditorView) =>
28
- Object.entries({
29
- '0': 'ph--paragraph--regular',
30
- '1': 'ph--text-h-one--regular',
31
- '2': 'ph--text-h-two--regular',
32
- '3': 'ph--text-h-three--regular',
33
- '4': 'ph--text-h-four--regular',
34
- '5': 'ph--text-h-five--regular',
35
- '6': 'ph--text-h-six--regular',
36
- }).map(([levelStr, icon]) => {
37
- const level = parseInt(levelStr);
38
- return createEditorAction(
39
- `heading--${levelStr}`,
40
- {
41
- label: ['heading level label', { count: level, ns: translationKey }],
42
- icon,
43
- },
44
- () => setHeading(level)(getView()),
45
- );
46
- });
14
+ const headingIcons: Record<string, string> = {
15
+ 0: 'ph--paragraph--regular',
16
+ 1: 'ph--text-h-one--regular',
17
+ 2: 'ph--text-h-two--regular',
18
+ 3: 'ph--text-h-three--regular',
19
+ 4: 'ph--text-h-four--regular',
20
+ 5: 'ph--text-h-five--regular',
21
+ 6: 'ph--text-h-six--regular',
22
+ };
47
23
 
48
24
  const computeHeadingValue = (state: EditorToolbarState) => {
49
25
  const blockType = state ? state.blockType : 'paragraph';
50
- const header = blockType && /heading(\d)/.exec(blockType);
51
- return header ? header[1] : blockType === 'paragraph' || !blockType ? '0' : '';
26
+ const heading = blockType && /heading(\d)/.exec(blockType);
27
+ return heading ? heading[1] : blockType === 'paragraph' || !blockType ? '0' : '';
52
28
  };
53
29
 
54
- export const createHeadings = (state: EditorToolbarState, getView: () => EditorView) => {
55
- const headingValue = computeHeadingValue(state);
56
- const headingGroupAction = createHeadingGroupAction(headingValue);
57
- const headingActions = createHeadingActions(getView);
58
- return {
59
- nodes: [headingGroupAction as NodeArg<any>, ...headingActions],
60
- edges: [
61
- { source: 'root', target: 'heading' },
62
- ...headingActions.map(({ id }) => ({ source: headingGroupAction.id, target: id })),
63
- ],
30
+ /** Add heading actions to the builder. */
31
+ export const addHeadings =
32
+ (state: EditorToolbarState, getView: () => EditorView): ActionGroupBuilderFn =>
33
+ (builder) => {
34
+ const headingValue = computeHeadingValue(state);
35
+ builder.group(
36
+ 'heading',
37
+ {
38
+ label: ['heading.label', { ns: translationKey }],
39
+ icon: 'ph--text-h--regular',
40
+ iconOnly: true,
41
+ variant: 'dropdownMenu',
42
+ applyActive: true,
43
+ selectCardinality: 'single',
44
+ // TODO(wittjosiah): Remove? Not sure this does anything.
45
+ value: headingValue,
46
+ } as ToolbarMenuActionGroupProperties,
47
+ (group) => {
48
+ for (const [levelStr, icon] of Object.entries(headingIcons)) {
49
+ const level = parseInt(levelStr);
50
+ group.action(
51
+ `heading--${levelStr}`,
52
+ {
53
+ label: ['heading-level.label', { count: level, ns: translationKey }],
54
+ icon,
55
+ checked: levelStr === headingValue,
56
+ },
57
+ () => setHeading(level)(getView()),
58
+ );
59
+ }
60
+ },
61
+ );
64
62
  };
65
- };
@@ -2,19 +2,21 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { createEditorAction } from './util';
5
+ import { type ActionGroupBuilderFn } from '@dxos/react-ui-menu';
6
6
 
7
- const createImageUploadAction = (onImageUpload: () => void) =>
8
- createEditorAction(
9
- 'image',
10
- {
11
- testId: 'editor.toolbar.image',
12
- icon: 'ph--image-square--regular',
13
- },
14
- onImageUpload,
15
- );
7
+ import { translationKey } from '#translations';
16
8
 
17
- export const createImageUpload = (onImageUpload: () => void) => ({
18
- nodes: [createImageUploadAction(onImageUpload)],
19
- edges: [{ source: 'root', target: 'image' }],
20
- });
9
+ /** Add image upload action to the builder. */
10
+ export const addImageUpload =
11
+ (onImageUpload: () => void): ActionGroupBuilderFn =>
12
+ (builder) => {
13
+ builder.action(
14
+ 'image',
15
+ {
16
+ label: ['image.label', { ns: translationKey }],
17
+ testId: 'editor.toolbar.image',
18
+ icon: 'ph--image-square--regular',
19
+ },
20
+ onImageUpload,
21
+ );
22
+ };
@@ -2,11 +2,6 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ export * from './types';
6
+
5
7
  export * from './EditorToolbar';
6
- export {
7
- type EditorToolbarState,
8
- type EditorToolbarActionGraphProps,
9
- useEditorToolbarState,
10
- createEditorAction,
11
- createEditorActionGroup,
12
- } from './util';