@dxos/react-ui-editor 0.8.4-main.406dc2a → 0.8.4-main.422d1c7879

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 (426) hide show
  1. package/dist/lib/browser/index.mjs +1156 -8352
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/node-esm/index.mjs +1148 -8343
  5. package/dist/lib/node-esm/index.mjs.map +4 -4
  6. package/dist/lib/node-esm/meta.json +1 -1
  7. package/dist/types/src/components/Editor/Editor.d.ts +41 -29
  8. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  9. package/dist/types/src/components/Editor/Editor.stories.d.ts +13 -20
  10. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  11. package/dist/types/src/components/Editor/EditorView.d.ts +31 -0
  12. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  13. package/dist/types/src/components/Editor/controller.d.ts +10 -0
  14. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  15. package/dist/types/src/{extensions/popover/PopoverMenuProvider.d.ts → components/EditorMenuProvider/EditorMenuProvider.d.ts} +7 -9
  16. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  17. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  18. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  20. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  22. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  23. package/dist/types/src/{extensions/popover → components/EditorMenuProvider}/popover.d.ts +1 -2
  24. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  26. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  28. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  30. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  32. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  33. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  34. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  35. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  36. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  37. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  38. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  40. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  42. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -17
  44. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  46. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/types.d.ts +5 -0
  48. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  49. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  50. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  51. package/dist/types/src/components/index.d.ts +2 -1
  52. package/dist/types/src/components/index.d.ts.map +1 -1
  53. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  54. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  55. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  56. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  57. package/dist/types/src/extensions/index.d.ts +1 -25
  58. package/dist/types/src/extensions/index.d.ts.map +1 -1
  59. package/dist/types/src/hooks/index.d.ts +1 -0
  60. package/dist/types/src/hooks/index.d.ts.map +1 -1
  61. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  62. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  63. package/dist/types/src/hooks/useTextEditor.d.ts +2 -2
  64. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  65. package/dist/types/src/index.d.ts +0 -7
  66. package/dist/types/src/index.d.ts.map +1 -1
  67. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  68. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  69. package/dist/types/src/stories/Comments.stories.d.ts +4 -3
  70. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  71. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  72. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  73. package/dist/types/src/stories/Experimental.stories.d.ts +4 -3
  74. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  75. package/dist/types/src/stories/Markdown.stories.d.ts +4 -3
  76. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  78. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Popover.stories.d.ts +3 -3
  80. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Preview.stories.d.ts +5 -3
  82. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  84. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -3
  85. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  86. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  87. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  88. package/dist/types/src/stories/components/EditorStory.d.ts +11 -20
  89. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  90. package/dist/types/src/stories/components/util.d.ts +3 -3
  91. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  92. package/dist/types/src/translations.d.ts +26 -26
  93. package/dist/types/src/translations.d.ts.map +1 -1
  94. package/dist/types/src/util/index.d.ts +0 -5
  95. package/dist/types/src/util/index.d.ts.map +1 -1
  96. package/dist/types/src/util/react.d.ts +6 -5
  97. package/dist/types/src/util/react.d.ts.map +1 -1
  98. package/dist/types/tsconfig.tsbuildinfo +1 -1
  99. package/package.json +70 -74
  100. package/src/components/Editor/Editor.stories.tsx +68 -51
  101. package/src/components/Editor/Editor.tsx +171 -61
  102. package/src/components/Editor/EditorView.tsx +83 -0
  103. package/src/components/Editor/controller.ts +50 -0
  104. package/src/{extensions/popover/PopoverMenuProvider.tsx → components/EditorMenuProvider/EditorMenuProvider.tsx} +49 -44
  105. package/src/components/EditorMenuProvider/index.ts +10 -0
  106. package/src/{extensions/popover → components/EditorMenuProvider}/menu-presets.ts +20 -19
  107. package/src/{extensions/popover → components/EditorMenuProvider}/menu.ts +21 -18
  108. package/src/{extensions/popover → components/EditorMenuProvider}/popover.ts +3 -11
  109. package/src/{extensions/popover/usePopoverMenu.ts → components/EditorMenuProvider/useEditorMenu.ts} +29 -22
  110. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  111. package/src/components/EditorPreviewProvider/index.ts +5 -0
  112. package/src/components/EditorToolbar/EditorToolbar.tsx +88 -112
  113. package/src/components/EditorToolbar/blocks.ts +55 -48
  114. package/src/components/EditorToolbar/formatting.ts +46 -48
  115. package/src/components/EditorToolbar/headings.ts +47 -51
  116. package/src/components/EditorToolbar/image.ts +16 -14
  117. package/src/components/EditorToolbar/index.ts +2 -7
  118. package/src/components/EditorToolbar/lists.ts +42 -41
  119. package/src/components/EditorToolbar/search.ts +16 -14
  120. package/src/components/EditorToolbar/types.ts +7 -0
  121. package/src/components/EditorToolbar/view-mode.ts +36 -42
  122. package/src/components/index.ts +3 -1
  123. package/src/extensions/Assistant.stories.tsx +111 -0
  124. package/src/extensions/assistant-extension.tsx +223 -0
  125. package/src/extensions/index.ts +2 -26
  126. package/src/hooks/index.ts +1 -0
  127. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  128. package/src/hooks/useTextEditor.ts +13 -7
  129. package/src/index.ts +0 -9
  130. package/src/stories/Automerge.stories.tsx +173 -0
  131. package/src/stories/Comments.stories.tsx +48 -45
  132. package/src/stories/EditorToolbar.stories.tsx +40 -54
  133. package/src/stories/Experimental.stories.tsx +10 -12
  134. package/src/stories/Markdown.stories.tsx +16 -16
  135. package/src/stories/Outliner.stories.tsx +20 -29
  136. package/src/stories/Popover.stories.tsx +47 -53
  137. package/src/stories/Preview.stories.tsx +102 -84
  138. package/src/stories/Tags.stories.tsx +36 -13
  139. package/src/stories/TextEditor.stories.tsx +15 -21
  140. package/src/stories/Theme.stories.tsx +61 -0
  141. package/src/stories/components/EditorStory.tsx +46 -32
  142. package/src/stories/components/util.tsx +90 -59
  143. package/src/translations.ts +30 -25
  144. package/src/util/index.ts +1 -6
  145. package/src/util/react.tsx +8 -13
  146. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  147. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  148. package/dist/lib/browser/testing/index.mjs +0 -76
  149. package/dist/lib/browser/testing/index.mjs.map +0 -7
  150. package/dist/lib/browser/types/index.mjs +0 -13
  151. package/dist/lib/browser/types/index.mjs.map +0 -7
  152. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  153. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  154. package/dist/lib/node-esm/testing/index.mjs +0 -78
  155. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  156. package/dist/lib/node-esm/types/index.mjs +0 -14
  157. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  158. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  159. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  160. package/dist/types/src/defaults.d.ts +0 -14
  161. package/dist/types/src/defaults.d.ts.map +0 -1
  162. package/dist/types/src/extensions/annotations.d.ts +0 -9
  163. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  164. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -26
  165. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  166. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  167. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  168. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  169. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  170. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  171. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  172. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  173. package/dist/types/src/extensions/autocomplete/typeahead.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/comments.d.ts +0 -95
  203. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  204. package/dist/types/src/extensions/debug.d.ts +0 -3
  205. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  206. package/dist/types/src/extensions/dnd.d.ts +0 -9
  207. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  208. package/dist/types/src/extensions/factories.d.ts +0 -83
  209. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  210. package/dist/types/src/extensions/focus.d.ts +0 -7
  211. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  212. package/dist/types/src/extensions/folding.d.ts +0 -7
  213. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  214. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  215. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  216. package/dist/types/src/extensions/json.d.ts +0 -7
  217. package/dist/types/src/extensions/json.d.ts.map +0 -1
  218. package/dist/types/src/extensions/listener.d.ts +0 -11
  219. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  220. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  221. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  222. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  223. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  224. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  225. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  226. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  227. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  228. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  229. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  230. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  231. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  232. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  233. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  234. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  235. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  236. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  237. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  238. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  239. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  240. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  241. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  243. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  245. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  247. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  249. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  250. package/dist/types/src/extensions/mention.d.ts +0 -7
  251. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  252. package/dist/types/src/extensions/modes.d.ts +0 -10
  253. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  254. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  255. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  256. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  257. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  258. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  259. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  260. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  261. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  262. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  263. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  264. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  265. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  266. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  267. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  268. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  269. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  270. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  271. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  272. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  273. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  274. package/dist/types/src/extensions/popover/PopoverMenuProvider.d.ts.map +0 -1
  275. package/dist/types/src/extensions/popover/index.d.ts +0 -8
  276. package/dist/types/src/extensions/popover/index.d.ts.map +0 -1
  277. package/dist/types/src/extensions/popover/menu-presets.d.ts +0 -4
  278. package/dist/types/src/extensions/popover/menu-presets.d.ts.map +0 -1
  279. package/dist/types/src/extensions/popover/menu.d.ts +0 -24
  280. package/dist/types/src/extensions/popover/menu.d.ts.map +0 -1
  281. package/dist/types/src/extensions/popover/modal.d.ts +0 -7
  282. package/dist/types/src/extensions/popover/modal.d.ts.map +0 -1
  283. package/dist/types/src/extensions/popover/popover.d.ts.map +0 -1
  284. package/dist/types/src/extensions/popover/usePopoverMenu.d.ts +0 -34
  285. package/dist/types/src/extensions/popover/usePopoverMenu.d.ts.map +0 -1
  286. package/dist/types/src/extensions/popover/util.d.ts +0 -8
  287. package/dist/types/src/extensions/popover/util.d.ts.map +0 -1
  288. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  289. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  290. package/dist/types/src/extensions/preview/preview.d.ts +0 -28
  291. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  292. package/dist/types/src/extensions/selection.d.ts +0 -24
  293. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  294. package/dist/types/src/extensions/state.d.ts +0 -2
  295. package/dist/types/src/extensions/state.d.ts.map +0 -1
  296. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  297. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  298. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  299. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  300. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  301. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  302. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  303. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  304. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -72
  305. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  306. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  307. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  308. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  309. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  310. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  311. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  312. package/dist/types/src/styles/index.d.ts +0 -4
  313. package/dist/types/src/styles/index.d.ts.map +0 -1
  314. package/dist/types/src/styles/markdown.d.ts +0 -8
  315. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  316. package/dist/types/src/styles/theme.d.ts +0 -38
  317. package/dist/types/src/styles/theme.d.ts.map +0 -1
  318. package/dist/types/src/styles/tokens.d.ts +0 -3
  319. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  320. package/dist/types/src/testing/PreviewPopover.d.ts +0 -20
  321. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  322. package/dist/types/src/testing/index.d.ts +0 -3
  323. package/dist/types/src/testing/index.d.ts.map +0 -1
  324. package/dist/types/src/testing/util.d.ts +0 -3
  325. package/dist/types/src/testing/util.d.ts.map +0 -1
  326. package/dist/types/src/types/index.d.ts +0 -2
  327. package/dist/types/src/types/index.d.ts.map +0 -1
  328. package/dist/types/src/types/types.d.ts +0 -21
  329. package/dist/types/src/types/types.d.ts.map +0 -1
  330. package/dist/types/src/util/cursor.d.ts +0 -31
  331. package/dist/types/src/util/cursor.d.ts.map +0 -1
  332. package/dist/types/src/util/debug.d.ts +0 -17
  333. package/dist/types/src/util/debug.d.ts.map +0 -1
  334. package/dist/types/src/util/decorations.d.ts +0 -4
  335. package/dist/types/src/util/decorations.d.ts.map +0 -1
  336. package/dist/types/src/util/dom.d.ts +0 -10
  337. package/dist/types/src/util/dom.d.ts.map +0 -1
  338. package/dist/types/src/util/facet.d.ts +0 -3
  339. package/dist/types/src/util/facet.d.ts.map +0 -1
  340. package/src/components/EditorToolbar/util.ts +0 -76
  341. package/src/defaults.ts +0 -52
  342. package/src/extensions/annotations.ts +0 -55
  343. package/src/extensions/autocomplete/autocomplete.ts +0 -220
  344. package/src/extensions/autocomplete/index.ts +0 -8
  345. package/src/extensions/autocomplete/match.ts +0 -46
  346. package/src/extensions/autocomplete/placeholder.ts +0 -117
  347. package/src/extensions/autocomplete/typeahead.ts +0 -87
  348. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  349. package/src/extensions/automerge/automerge.test.tsx +0 -78
  350. package/src/extensions/automerge/automerge.ts +0 -105
  351. package/src/extensions/automerge/cursor.ts +0 -28
  352. package/src/extensions/automerge/defs.ts +0 -31
  353. package/src/extensions/automerge/index.ts +0 -5
  354. package/src/extensions/automerge/sync.ts +0 -79
  355. package/src/extensions/automerge/update-automerge.ts +0 -50
  356. package/src/extensions/automerge/update-codemirror.ts +0 -115
  357. package/src/extensions/autoscroll.ts +0 -157
  358. package/src/extensions/awareness/awareness-provider.ts +0 -127
  359. package/src/extensions/awareness/awareness.ts +0 -315
  360. package/src/extensions/awareness/index.ts +0 -6
  361. package/src/extensions/blast.ts +0 -363
  362. package/src/extensions/comments.ts +0 -597
  363. package/src/extensions/debug.ts +0 -15
  364. package/src/extensions/dnd.ts +0 -37
  365. package/src/extensions/factories.ts +0 -276
  366. package/src/extensions/focus.ts +0 -36
  367. package/src/extensions/folding.tsx +0 -44
  368. package/src/extensions/hashtag.tsx +0 -68
  369. package/src/extensions/json.ts +0 -57
  370. package/src/extensions/listener.ts +0 -38
  371. package/src/extensions/markdown/action.ts +0 -117
  372. package/src/extensions/markdown/bundle.ts +0 -95
  373. package/src/extensions/markdown/changes.test.ts +0 -26
  374. package/src/extensions/markdown/changes.ts +0 -149
  375. package/src/extensions/markdown/debug.ts +0 -44
  376. package/src/extensions/markdown/decorate.ts +0 -601
  377. package/src/extensions/markdown/formatting.test.ts +0 -498
  378. package/src/extensions/markdown/formatting.ts +0 -1267
  379. package/src/extensions/markdown/highlight.ts +0 -183
  380. package/src/extensions/markdown/image.ts +0 -118
  381. package/src/extensions/markdown/index.ts +0 -13
  382. package/src/extensions/markdown/link.ts +0 -50
  383. package/src/extensions/markdown/parser.test.ts +0 -75
  384. package/src/extensions/markdown/styles.ts +0 -135
  385. package/src/extensions/markdown/table.ts +0 -150
  386. package/src/extensions/mention.ts +0 -41
  387. package/src/extensions/modes.ts +0 -41
  388. package/src/extensions/outliner/commands.ts +0 -270
  389. package/src/extensions/outliner/editor.test.ts +0 -33
  390. package/src/extensions/outliner/editor.ts +0 -184
  391. package/src/extensions/outliner/index.ts +0 -7
  392. package/src/extensions/outliner/menu.ts +0 -128
  393. package/src/extensions/outliner/outliner.test.ts +0 -100
  394. package/src/extensions/outliner/outliner.ts +0 -167
  395. package/src/extensions/outliner/selection.ts +0 -50
  396. package/src/extensions/outliner/tree.test.ts +0 -168
  397. package/src/extensions/outliner/tree.ts +0 -317
  398. package/src/extensions/popover/index.ts +0 -12
  399. package/src/extensions/popover/modal.ts +0 -24
  400. package/src/extensions/popover/util.ts +0 -29
  401. package/src/extensions/preview/index.ts +0 -5
  402. package/src/extensions/preview/preview.ts +0 -188
  403. package/src/extensions/selection.ts +0 -100
  404. package/src/extensions/state.ts +0 -7
  405. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  406. package/src/extensions/tags/extended-markdown.ts +0 -78
  407. package/src/extensions/tags/index.ts +0 -7
  408. package/src/extensions/tags/streamer.ts +0 -243
  409. package/src/extensions/tags/xml-tags.ts +0 -393
  410. package/src/extensions/tags/xml-util.ts +0 -94
  411. package/src/extensions/typewriter.ts +0 -68
  412. package/src/stories/CommandDialog.stories.tsx +0 -78
  413. package/src/styles/index.ts +0 -7
  414. package/src/styles/markdown.ts +0 -26
  415. package/src/styles/theme.ts +0 -269
  416. package/src/styles/tokens.ts +0 -17
  417. package/src/testing/PreviewPopover.tsx +0 -80
  418. package/src/testing/index.ts +0 -6
  419. package/src/testing/util.ts +0 -7
  420. package/src/types/index.ts +0 -5
  421. package/src/types/types.ts +0 -32
  422. package/src/util/cursor.ts +0 -56
  423. package/src/util/debug.ts +0 -64
  424. package/src/util/decorations.ts +0 -21
  425. package/src/util/dom.ts +0 -34
  426. package/src/util/facet.ts +0 -13
@@ -0,0 +1,83 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { Transaction } from '@codemirror/state';
6
+ import { EditorView as NaturalEditorView } from '@codemirror/view';
7
+ import React, { forwardRef, useEffect, useImperativeHandle } from 'react';
8
+
9
+ import { type ThemedClassName } from '@dxos/react-ui';
10
+ import { initialSync } from '@dxos/ui-editor';
11
+ import { mx } from '@dxos/ui-theme';
12
+
13
+ import { type UseTextEditorProps, useTextEditor } from '../../hooks';
14
+ import { type EditorController, createEditorController, noopController } from './controller';
15
+
16
+ export type EditorViewProps = ThemedClassName<
17
+ {
18
+ focusable?: boolean;
19
+ value?: string;
20
+ onChange?: (value: string) => void;
21
+ } & UseTextEditorProps
22
+ >;
23
+
24
+ /**
25
+ * Minimal text editor.
26
+ * NOTE: This shouold not be used with the automerge extension.
27
+ */
28
+ export const EditorView = forwardRef<EditorController, EditorViewProps>(
29
+ ({ classNames, id, extensions, selectionEnd, focusable = true, value, onChange, ...props }, forwardedRef) => {
30
+ const { parentRef, focusAttributes, view } = useTextEditor(
31
+ () => ({
32
+ id,
33
+ initialValue: value,
34
+ selectionEnd,
35
+ extensions: [
36
+ extensions ?? [],
37
+ NaturalEditorView.updateListener.of(({ view, docChanged, transactions }) => {
38
+ const isInitialSync = transactions.some((tr) => tr.annotation(Transaction.userEvent) === initialSync.value);
39
+ if (!isInitialSync && docChanged) {
40
+ onChange?.(view.state.doc.toString());
41
+ }
42
+ }),
43
+ ],
44
+ ...props,
45
+ }),
46
+ [id, extensions, selectionEnd, onChange],
47
+ );
48
+
49
+ // External controller.
50
+ useImperativeHandle(forwardedRef, () => {
51
+ return createEditorController(view);
52
+ }, [id, view]);
53
+
54
+ // Set initial value and cursor position.
55
+ useEffect(() => {
56
+ requestAnimationFrame(() => {
57
+ view?.dispatch({
58
+ annotations: initialSync,
59
+ changes: value ? [{ from: 0, to: view?.state.doc.length ?? 0, insert: value ?? '' }] : [],
60
+ selection: selectionEnd ? { anchor: view?.state.doc.length ?? 0 } : undefined,
61
+ });
62
+
63
+ if (selectionEnd) {
64
+ view?.focus();
65
+ }
66
+ });
67
+ }, [view, value, selectionEnd]);
68
+
69
+ return (
70
+ <div
71
+ role='none'
72
+ className={mx(
73
+ 'w-full outline-hidden focus:border-accent-surface focus-within:border-neutral-focus-indicator',
74
+ classNames,
75
+ )}
76
+ {...(focusable ? focusAttributes : {})}
77
+ ref={parentRef}
78
+ />
79
+ );
80
+ },
81
+ );
82
+
83
+ export { type EditorController, createEditorController, noopController };
@@ -0,0 +1,50 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type EditorView } from '@codemirror/view';
6
+
7
+ export interface EditorController {
8
+ get view(): EditorView | null;
9
+ getText: () => string;
10
+ setText: (text: string, focus?: boolean) => void;
11
+ focus: () => void;
12
+ }
13
+
14
+ export const noopController: EditorController = {
15
+ get view() {
16
+ return null;
17
+ },
18
+ getText: () => '',
19
+ setText: () => {},
20
+ focus: () => {},
21
+ };
22
+
23
+ export const createEditorController = (view: EditorView | null): EditorController => {
24
+ return {
25
+ get view() {
26
+ return view;
27
+ },
28
+ getText: () => {
29
+ return view?.state.doc.toString() ?? '';
30
+ },
31
+ setText: (text: string, focus?: boolean) => {
32
+ view?.dispatch({
33
+ changes: {
34
+ from: 0,
35
+ to: view?.state.doc.length ?? 0,
36
+ insert: text,
37
+ },
38
+ selection: {
39
+ anchor: text.length,
40
+ head: text.length,
41
+ },
42
+ });
43
+
44
+ if (focus) {
45
+ view?.focus();
46
+ }
47
+ },
48
+ focus: () => view?.focus(),
49
+ };
50
+ };
@@ -9,56 +9,56 @@ import React, { Fragment, type PropsWithChildren, useCallback, useEffect, useRef
9
9
  import { addEventListener } from '@dxos/async';
10
10
  import { invariant } from '@dxos/invariant';
11
11
  import {
12
+ DX_ANCHOR_ACTIVATE,
12
13
  type DxAnchorActivate,
13
14
  Icon,
14
15
  Popover,
16
+ ScrollArea,
15
17
  toLocalizedString,
16
18
  useDynamicRef,
17
19
  useThemeContext,
18
20
  useTranslation,
19
21
  } from '@dxos/react-ui';
20
22
 
21
- import { type PopoverMenuGroup, type PopoverMenuItem } from './menu';
23
+ import { type EditorMenuGroup, type EditorMenuItem } from './menu';
22
24
 
23
- export type PopoverMenuProviderProps = PropsWithChildren<{
25
+ export type EditorMenuProviderProps = PropsWithChildren<{
24
26
  view?: EditorView | null;
25
- groups: PopoverMenuGroup[];
27
+ groups?: EditorMenuGroup[];
26
28
  currentItem?: string;
27
29
  open?: boolean;
28
30
  defaultOpen?: boolean;
29
31
  numItems?: number;
30
32
  onOpenChange?: (event: { view: EditorView; open: boolean; trigger?: string }) => void;
31
33
  onActivate?: (event: { view: EditorView; trigger?: string }) => void;
32
- onSelect?: (event: { view: EditorView; item: PopoverMenuItem }) => void;
34
+ onSelect?: (event: { view: EditorView; item: EditorMenuItem }) => void;
33
35
  onCancel?: (event: { view: EditorView }) => void;
34
36
  }>;
35
37
 
36
38
  /**
37
- * Implements the Popover and listens for the `dx-anchor-activate` event from the
38
- * `popover` extension's decoration.
39
- *
39
+ * Implements the Popover and listens for the `dx-anchor-activate` event from the `popover` extension's decoration.
40
40
  * NOTE: We don't use DropdownMenu because the command menu needs to manage focus explicitly.
41
41
  * I.e., focus must remain in the editor while displaying the menu (for type-ahead).
42
42
  */
43
- export const PopoverMenuProvider = ({
43
+ export const EditorMenuProvider = ({
44
44
  children,
45
45
  view,
46
46
  groups,
47
47
  currentItem,
48
- open: openParam,
48
+ open: openProp,
49
49
  defaultOpen,
50
50
  numItems = 8,
51
51
  onOpenChange,
52
52
  onActivate,
53
53
  onSelect,
54
54
  onCancel,
55
- }: PopoverMenuProviderProps) => {
55
+ }: EditorMenuProviderProps) => {
56
56
  const { tx } = useThemeContext();
57
57
  const triggerRef = useRef<HTMLButtonElement | null>(null);
58
- const [root, setRoot] = useState<HTMLDivElement | null>(null);
58
+
59
59
  const viewRef = useDynamicRef(view);
60
60
  const [open, setOpen] = useControllableState({
61
- prop: openParam,
61
+ prop: openProp,
62
62
  defaultProp: defaultOpen,
63
63
  onChange: (open) => {
64
64
  invariant(viewRef.current);
@@ -66,6 +66,7 @@ export const PopoverMenuProvider = ({
66
66
  },
67
67
  });
68
68
 
69
+ const [root, setRoot] = useState<HTMLDivElement | null>(null);
69
70
  useEffect(() => {
70
71
  if (!root) {
71
72
  return;
@@ -74,13 +75,10 @@ export const PopoverMenuProvider = ({
74
75
  // Listen for trigger.
75
76
  return addEventListener(
76
77
  root,
77
- 'dx-anchor-activate' as any,
78
+ DX_ANCHOR_ACTIVATE as any,
78
79
  (event: DxAnchorActivate) => {
79
- const { trigger, refId } = event;
80
- console.log('update', trigger, refId);
81
-
82
- // If this has a `refId`, then it’s probably a URL or DXN and out of scope for this component.
83
- if (!refId) {
80
+ const { trigger, dxn } = event;
81
+ if (!dxn) {
84
82
  triggerRef.current = trigger as HTMLButtonElement;
85
83
  if (onActivate) {
86
84
  onActivate({ view: viewRef.current!, trigger: trigger.getAttribute('data-trigger') ?? undefined });
@@ -104,39 +102,42 @@ export const PopoverMenuProvider = ({
104
102
  [viewRef, onSelect],
105
103
  );
106
104
 
107
- const menuGroups = groups.filter((group) => group.items.length > 0);
105
+ const menuGroups = groups?.filter((group) => group.items.length > 0) ?? [];
108
106
 
109
107
  return (
110
108
  <Popover.Root modal={false} open={open} onOpenChange={setOpen}>
111
109
  <Popover.VirtualTrigger virtualRef={triggerRef} />
110
+
111
+ {/* Menu. */}
112
112
  <Popover.Portal>
113
113
  <Popover.Content
114
114
  align='start'
115
- classNames={tx('menu.content', 'menu--exotic-unfocusable', { elevation: 'positioned' }, [
116
- 'overflow-y-auto',
117
- !menuGroups.length && 'hidden',
118
- ])}
115
+ classNames={['flex flex-col', !menuGroups.length && 'hidden']}
119
116
  style={{
120
117
  maxBlockSize: 36 * numItems + 10,
121
118
  }}
122
- /**
123
- * NOTE: We keep the focus in the editor, but Radix routes escape key.
124
- */
119
+ // NOTE: We keep the focus in the editor, but Radix routes escape key.
125
120
  onEscapeKeyDown={() => {
126
- // NOTE: Able to cancel if not in valid state.
127
- // event.preventDefault();
128
- onCancel?.({ view: view! });
121
+ const currentView = viewRef.current;
122
+ if (currentView) {
123
+ onCancel?.({ view: currentView });
124
+ }
129
125
  }}
130
126
  onOpenAutoFocus={(event) => event.preventDefault()}
131
127
  >
132
- <Popover.Viewport classNames={tx('menu.viewport', 'menu__viewport--exotic-unfocusable', {})}>
133
- <Menu groups={menuGroups} currentItem={currentItem} onSelect={handleSelect} />
128
+ <Popover.Viewport asChild classNames='dx-container'>
129
+ <ScrollArea.Root thin>
130
+ <ScrollArea.Viewport>
131
+ <Menu groups={menuGroups} currentItem={currentItem} onSelect={handleSelect} />
132
+ </ScrollArea.Viewport>
133
+ </ScrollArea.Root>
134
134
  </Popover.Viewport>
135
135
  <Popover.Arrow />
136
136
  </Popover.Content>
137
137
  </Popover.Portal>
138
138
 
139
- <div ref={setRoot} role='none' className='contents'>
139
+ {/* Content */}
140
+ <div role='none' className='contents' ref={setRoot}>
140
141
  {children}
141
142
  </div>
142
143
  </Popover.Root>
@@ -148,7 +149,7 @@ export const PopoverMenuProvider = ({
148
149
  //
149
150
 
150
151
  type MenuProps = {
151
- groups: PopoverMenuGroup[];
152
+ groups: EditorMenuGroup[];
152
153
  } & Pick<MenuGroupProps, 'currentItem' | 'onSelect'>;
153
154
 
154
155
  const Menu = ({ groups, currentItem, onSelect }: MenuProps) => {
@@ -158,15 +159,19 @@ const Menu = ({ groups, currentItem, onSelect }: MenuProps) => {
158
159
  {groups.map((group, index) => (
159
160
  <Fragment key={group.id}>
160
161
  <MenuGroup group={group} currentItem={currentItem} onSelect={onSelect} />
161
- {index < groups.length - 1 && <div className={tx('menu.separator', 'menu__item', {})} />}
162
+ {index < groups.length - 1 && <div className={tx('menu.separator', {})} />}
162
163
  </Fragment>
163
164
  ))}
164
165
  </ul>
165
166
  );
166
167
  };
167
168
 
169
+ //
170
+ // Menu Group
171
+ //
172
+
168
173
  type MenuGroupProps = {
169
- group: PopoverMenuGroup;
174
+ group: EditorMenuGroup;
170
175
  currentItem?: string;
171
176
  } & Pick<MenuItemProps, 'onSelect'>;
172
177
 
@@ -177,7 +182,7 @@ const MenuGroup = ({ group, currentItem, onSelect }: MenuGroupProps) => {
177
182
  return (
178
183
  <>
179
184
  {group.label && (
180
- <div className={tx('menu.groupLabel', 'menu__group__label', {})}>
185
+ <div className={tx('menu.groupLabel', {})}>
181
186
  <span>{toLocalizedString(group.label, t)}</span>
182
187
  </div>
183
188
  )}
@@ -189,10 +194,14 @@ const MenuGroup = ({ group, currentItem, onSelect }: MenuGroupProps) => {
189
194
  );
190
195
  };
191
196
 
197
+ //
198
+ // Menu Item
199
+ //
200
+
192
201
  type MenuItemProps = {
193
- item: PopoverMenuItem;
202
+ item: EditorMenuItem;
194
203
  current: boolean;
195
- onSelect?: (item: PopoverMenuItem) => void;
204
+ onSelect?: (item: EditorMenuItem) => void;
196
205
  };
197
206
 
198
207
  const MenuItem = ({ item, current, onSelect }: MenuItemProps) => {
@@ -209,12 +218,8 @@ const MenuItem = ({ item, current, onSelect }: MenuItemProps) => {
209
218
  const handleSelect = useCallback(() => onSelect?.(item), [item, onSelect]);
210
219
 
211
220
  return (
212
- <li
213
- ref={listRef}
214
- className={tx('menu.item', 'menu__item--exotic-unfocusable', {}, [current && 'bg-hoverSurface'])}
215
- onClick={handleSelect}
216
- >
217
- {item.icon && <Icon icon={item.icon} size={5} />}
221
+ <li ref={listRef} className={tx('menu.item', {}, [current && 'bg-hover-surface'])} onClick={handleSelect}>
222
+ {item.icon && <Icon icon={item.icon} />}
218
223
  <span className='grow truncate'>{toLocalizedString(item.label, t)}</span>
219
224
  </li>
220
225
  );
@@ -0,0 +1,10 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './menu';
6
+ export * from './menu-presets';
7
+ export * from './popover';
8
+
9
+ export * from './EditorMenuProvider';
10
+ export * from './useEditorMenu';
@@ -2,12 +2,12 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { popoverRangeEffect } from '../../extensions';
5
+ import { insertAtLineStart } from '@dxos/ui-editor';
6
6
 
7
- import { type PopoverMenuGroup } from './menu';
8
- import { insertAtLineStart } from './util';
7
+ import { type EditorMenuGroup } from './menu';
8
+ import { popoverRangeEffect } from './popover';
9
9
 
10
- export const formattingCommands: PopoverMenuGroup = {
10
+ export const formattingCommands: EditorMenuGroup = {
11
11
  id: 'markdown',
12
12
  label: 'Markdown',
13
13
  items: [
@@ -15,78 +15,78 @@ export const formattingCommands: PopoverMenuGroup = {
15
15
  id: 'heading-1',
16
16
  label: 'Heading 1',
17
17
  icon: 'ph--text-h-one--regular',
18
- onSelect: (view, head) => insertAtLineStart(view, head, '# '),
18
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '# '),
19
19
  },
20
20
  {
21
21
  id: 'heading-2',
22
22
  label: 'Heading 2',
23
23
  icon: 'ph--text-h-two--regular',
24
- onSelect: (view, head) => insertAtLineStart(view, head, '## '),
24
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '## '),
25
25
  },
26
26
  {
27
27
  id: 'heading-3',
28
28
  label: 'Heading 3',
29
29
  icon: 'ph--text-h-three--regular',
30
- onSelect: (view, head) => insertAtLineStart(view, head, '### '),
30
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '### '),
31
31
  },
32
32
  {
33
33
  id: 'heading-4',
34
34
  label: 'Heading 4',
35
35
  icon: 'ph--text-h-four--regular',
36
- onSelect: (view, head) => insertAtLineStart(view, head, '#### '),
36
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '#### '),
37
37
  },
38
38
  {
39
39
  id: 'heading-5',
40
40
  label: 'Heading 5',
41
41
  icon: 'ph--text-h-five--regular',
42
- onSelect: (view, head) => insertAtLineStart(view, head, '##### '),
42
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '##### '),
43
43
  },
44
44
  {
45
45
  id: 'heading-6',
46
46
  label: 'Heading 6',
47
47
  icon: 'ph--text-h-six--regular',
48
- onSelect: (view, head) => insertAtLineStart(view, head, '###### '),
48
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '###### '),
49
49
  },
50
50
  {
51
51
  id: 'bullet-list',
52
52
  label: 'Bullet List',
53
53
  icon: 'ph--list-bullets--regular',
54
- onSelect: (view, head) => insertAtLineStart(view, head, '- '),
54
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '- '),
55
55
  },
56
56
  {
57
57
  id: 'numbered-list',
58
58
  label: 'Numbered List',
59
59
  icon: 'ph--list-numbers--regular',
60
- onSelect: (view, head) => insertAtLineStart(view, head, '1. '),
60
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '1. '),
61
61
  },
62
62
  {
63
63
  id: 'task-list',
64
64
  label: 'Task List',
65
65
  icon: 'ph--list-checks--regular',
66
- onSelect: (view, head) => insertAtLineStart(view, head, '- [ ] '),
66
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '- [ ] '),
67
67
  },
68
68
  {
69
69
  id: 'quote',
70
70
  label: 'Quote',
71
71
  icon: 'ph--quotes--regular',
72
- onSelect: (view, head) => insertAtLineStart(view, head, '> '),
72
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '> '),
73
73
  },
74
74
  {
75
75
  id: 'code-block',
76
76
  label: 'Code Block',
77
77
  icon: 'ph--code-block--regular',
78
- onSelect: (view, head) => insertAtLineStart(view, head, '```\n\n```'),
78
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '```\n\n```'),
79
79
  },
80
80
  {
81
81
  id: 'table',
82
82
  label: 'Table',
83
83
  icon: 'ph--table--regular',
84
- onSelect: (view, head) => insertAtLineStart(view, head, '| | | |\n|---|---|---|\n| | | |'),
84
+ onSelect: ({ view, head }) => insertAtLineStart(view, head, '| | | |\n|---|---|---|\n| | | |'),
85
85
  },
86
86
  ],
87
87
  };
88
88
 
89
- export const linkSlashCommands: PopoverMenuGroup = {
89
+ export const linkSlashCommands: EditorMenuGroup = {
90
90
  id: 'link',
91
91
  label: 'Link',
92
92
  items: [
@@ -94,7 +94,7 @@ export const linkSlashCommands: PopoverMenuGroup = {
94
94
  id: 'inline-link',
95
95
  label: 'Inline link',
96
96
  icon: 'ph--link--regular',
97
- onSelect: (view, head) => {
97
+ onSelect: ({ view, head }) => {
98
98
  view.dispatch({
99
99
  changes: { from: head, insert: '@' },
100
100
  selection: { anchor: head + 1, head: head + 1 },
@@ -109,7 +109,8 @@ export const linkSlashCommands: PopoverMenuGroup = {
109
109
  id: 'block-embed',
110
110
  label: 'Block embed',
111
111
  icon: 'ph--lego--regular',
112
- onSelect: (view, head) => {
112
+ onSelect: ({ view, head }) => {
113
+ // Seed the same query shape as typing "@@" manually.
113
114
  view.dispatch({
114
115
  changes: { from: head, insert: '@@' },
115
116
  selection: { anchor: head + 2, head: head + 2 },
@@ -5,34 +5,33 @@
5
5
  import { type EditorView } from '@codemirror/view';
6
6
 
7
7
  import { type Label } from '@dxos/react-ui';
8
+ import { insertAtCursor } from '@dxos/ui-editor';
8
9
  import { type MaybePromise } from '@dxos/util';
9
10
 
10
- import { insertAtCursor } from './util';
11
-
12
- export type PopoverMenuGroup = {
11
+ export type EditorMenuGroup = {
13
12
  id: string;
14
13
  label?: Label;
15
- items: PopoverMenuItem[];
14
+ items: EditorMenuItem[];
16
15
  };
17
16
 
18
- export type PopoverMenuItem = {
17
+ export type EditorMenuItem = {
19
18
  id: string;
20
19
  label: Label;
21
20
  icon?: string;
22
- onSelect?: (view: EditorView, head: number) => MaybePromise<void>;
21
+ onSelect?: (event: { view: EditorView; head: number }) => MaybePromise<void>;
23
22
  };
24
23
 
25
- export const getMenuItem = (groups: PopoverMenuGroup[], id?: string): PopoverMenuItem | undefined => {
24
+ export const getMenuItem = (groups: EditorMenuGroup[], id?: string): EditorMenuItem | undefined => {
26
25
  return groups.flatMap((group) => group.items).find((item) => item.id === id);
27
26
  };
28
27
 
29
- export const getNextMenuItem = (groups: PopoverMenuGroup[], id?: string): PopoverMenuItem => {
28
+ export const getNextMenuItem = (groups: EditorMenuGroup[], id?: string): EditorMenuItem => {
30
29
  const items = groups.flatMap((group) => group.items);
31
30
  const index = items.findIndex((item) => item.id === id);
32
31
  return index < items.length - 1 ? items[index + 1] : items[index];
33
32
  };
34
33
 
35
- export const getPreviousMenuItem = (groups: PopoverMenuGroup[], id?: string): PopoverMenuItem => {
34
+ export const getPreviousMenuItem = (groups: EditorMenuGroup[], id?: string): EditorMenuItem => {
36
35
  const items = groups.flatMap((group) => group.items);
37
36
  const index = items.findIndex((item) => item.id === id);
38
37
  return index > 0 ? items[index - 1] : items[index];
@@ -41,25 +40,29 @@ export const getPreviousMenuItem = (groups: PopoverMenuGroup[], id?: string): Po
41
40
  export const createMenuGroup = ({
42
41
  id = 'menu',
43
42
  label,
43
+ filter,
44
44
  items,
45
45
  }: {
46
46
  id?: string;
47
47
  label?: Label;
48
+ filter?: string;
48
49
  items: string[];
49
- }): PopoverMenuGroup => ({
50
+ }): EditorMenuGroup => ({
50
51
  id,
51
52
  label,
52
- items: items.map((item, i) => ({
53
- id: `${id}-${i}`,
54
- label: item,
55
- onSelect: (view, head) => insertAtCursor(view, head, item),
56
- })),
53
+ items: items
54
+ .filter((item) => !filter || item.toLowerCase().includes(filter.toLowerCase()))
55
+ .map((item, i) => ({
56
+ id: `${id}-${i}`,
57
+ label: item,
58
+ onSelect: ({ view, head }) => insertAtCursor(view, head, item),
59
+ })),
57
60
  });
58
61
 
59
62
  export const filterMenuGroups = (
60
- groups: PopoverMenuGroup[],
61
- filter: (item: PopoverMenuItem) => boolean,
62
- ): PopoverMenuGroup[] => {
63
+ groups: EditorMenuGroup[],
64
+ filter: (item: EditorMenuItem) => boolean,
65
+ ): EditorMenuGroup[] => {
63
66
  return groups.map((group) => ({
64
67
  ...group,
65
68
  items: group.items.filter(filter),
@@ -13,13 +13,9 @@ import {
13
13
  keymap,
14
14
  } from '@codemirror/view';
15
15
 
16
+ import { type PlaceholderOptions, type Range, modalStateField, placeholder } from '@dxos/ui-editor';
16
17
  import { isNonNullable, isTruthy } from '@dxos/util';
17
18
 
18
- import { type Range } from '../../types';
19
- import { type PlaceholderOptions, placeholder } from '../autocomplete';
20
-
21
- import { modalStateField } from './modal';
22
-
23
19
  const DELIMITERS = [' ', ':'];
24
20
 
25
21
  export type PopoverOptions = {
@@ -107,8 +103,8 @@ const popoverKeymap = (options: PopoverOptions) => {
107
103
  key: trigger,
108
104
  run: (view: EditorView) => {
109
105
  // Determine if we should trigger the popover:
110
- // 1. Empty lines or at the beginning of a line
111
- // 2. When there's a preceding space
106
+ // 1. Empty lines or at the beginning of a line.
107
+ // 2. When there's a preceding space.
112
108
  const selection = view.state.selection.main;
113
109
  const line = view.state.doc.lineAt(selection.head);
114
110
  if (
@@ -149,7 +145,6 @@ const popoverKeymap = (options: PopoverOptions) => {
149
145
 
150
146
  // Create anchor even if zero length (append space).
151
147
  const from = line.from + idx;
152
- console.log('effect', from + 1, selection.head);
153
148
  view.dispatch({
154
149
  effects: popoverRangeEffect.of({ range: { from: from + 1, to: selection.head } }),
155
150
  changes:
@@ -223,7 +218,6 @@ const popoverAnchorDecoration = (options: PopoverOptions) => {
223
218
  // Check if we should show the widget (only if cursor is within the active command range).
224
219
  const selection = view.state.selection.main;
225
220
  const showWidget = selection.head >= range.from && selection.head <= range.to;
226
- console.log('update', showWidget, range.from, range.to + 1);
227
221
  if (showWidget) {
228
222
  builder.add(
229
223
  range.from,
@@ -246,8 +240,6 @@ const popoverAnchorDecoration = (options: PopoverOptions) => {
246
240
  const content = view.state.sliceDoc(range.from + (trigger ? trigger.length : 0), range.to);
247
241
  options.onTextChange?.({ view, pos: selection.head, text: content, trigger });
248
242
  }
249
- } else {
250
- console.log('remove');
251
243
  }
252
244
 
253
245
  this._decorations = builder.finish();