@dxos/react-ui-editor 0.8.4-main.e098934 → 0.8.4-main.e8ec1fe

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 (312) hide show
  1. package/dist/lib/browser/{chunk-22UMM3QJ.mjs → chunk-HL3YF6WC.mjs} +2 -2
  2. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +7 -0
  3. package/dist/lib/browser/index.mjs +4960 -4414
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/types/index.mjs +1 -1
  7. package/dist/lib/node-esm/{chunk-YXYQPV6R.mjs → chunk-YJZGD3LY.mjs} +2 -2
  8. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +7 -0
  9. package/dist/lib/node-esm/index.mjs +4960 -4414
  10. package/dist/lib/node-esm/index.mjs.map +4 -4
  11. package/dist/lib/node-esm/meta.json +1 -1
  12. package/dist/lib/node-esm/types/index.mjs +1 -1
  13. package/dist/types/src/components/Editor/Editor.d.ts +37 -15
  14. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  15. package/dist/types/src/components/Editor/Editor.stories.d.ts +20 -0
  16. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  17. package/dist/types/src/components/EditorContent/EditorContent.d.ts +29 -0
  18. package/dist/types/src/components/EditorContent/EditorContent.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts +26 -0
  20. package/dist/types/src/components/EditorContent/EditorContent.stories.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorContent/controller.d.ts +10 -0
  22. package/dist/types/src/components/EditorContent/controller.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorContent/index.d.ts +3 -0
  24. package/dist/types/src/components/EditorContent/index.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +36 -0
  26. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/index.d.ts +7 -0
  28. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  30. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  32. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +47 -0
  34. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  35. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  36. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  37. package/dist/types/src/components/EditorMenuProvider/util.d.ts +8 -0
  38. package/dist/types/src/components/EditorMenuProvider/util.d.ts.map +1 -0
  39. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  40. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  41. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  42. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  43. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +26 -2
  44. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/actions.d.ts +39 -0
  46. package/dist/types/src/components/EditorToolbar/actions.d.ts.map +1 -0
  47. package/dist/types/src/components/EditorToolbar/blocks.d.ts +3 -3
  48. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/formatting.d.ts +3 -3
  50. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  51. package/dist/types/src/components/EditorToolbar/headings.d.ts +3 -3
  52. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  53. package/dist/types/src/components/EditorToolbar/index.d.ts +2 -1
  54. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  55. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +11 -0
  56. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -0
  57. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +3 -3
  58. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  59. package/dist/types/src/components/index.d.ts +4 -2
  60. package/dist/types/src/components/index.d.ts.map +1 -1
  61. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +17 -0
  62. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +1 -0
  63. package/dist/types/src/extensions/autocomplete/index.d.ts +5 -0
  64. package/dist/types/src/extensions/autocomplete/index.d.ts.map +1 -0
  65. package/dist/types/src/extensions/autocomplete/match.d.ts +13 -0
  66. package/dist/types/src/extensions/autocomplete/match.d.ts.map +1 -0
  67. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +20 -0
  68. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +1 -0
  69. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +10 -0
  70. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +1 -0
  71. package/dist/types/src/extensions/automerge/automerge.d.ts +1 -1
  72. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  73. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +1 -1
  74. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
  75. package/dist/types/src/extensions/automerge/cursor.d.ts +1 -1
  76. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
  77. package/dist/types/src/extensions/automerge/sync.d.ts +3 -3
  78. package/dist/types/src/extensions/automerge/sync.d.ts.map +1 -1
  79. package/dist/types/src/extensions/automerge/update-automerge.d.ts +1 -1
  80. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
  81. package/dist/types/src/extensions/autoscroll.d.ts +14 -4
  82. package/dist/types/src/extensions/autoscroll.d.ts.map +1 -1
  83. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +1 -1
  84. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +1 -1
  85. package/dist/types/src/extensions/blocks.d.ts +2 -0
  86. package/dist/types/src/extensions/blocks.d.ts.map +1 -0
  87. package/dist/types/src/extensions/bookmarks.d.ts +12 -0
  88. package/dist/types/src/extensions/bookmarks.d.ts.map +1 -0
  89. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  90. package/dist/types/src/extensions/factories.d.ts +10 -5
  91. package/dist/types/src/extensions/factories.d.ts.map +1 -1
  92. package/dist/types/src/extensions/focus.d.ts.map +1 -1
  93. package/dist/types/src/extensions/folding.d.ts.map +1 -1
  94. package/dist/types/src/extensions/index.d.ts +8 -1
  95. package/dist/types/src/extensions/index.d.ts.map +1 -1
  96. package/dist/types/src/extensions/json.d.ts +1 -1
  97. package/dist/types/src/extensions/json.d.ts.map +1 -1
  98. package/dist/types/src/extensions/listener.d.ts +8 -6
  99. package/dist/types/src/extensions/listener.d.ts.map +1 -1
  100. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  101. package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
  102. package/dist/types/src/extensions/markdown/formatting.d.ts +1 -3
  103. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
  104. package/dist/types/src/extensions/modal.d.ts +7 -0
  105. package/dist/types/src/extensions/modal.d.ts.map +1 -0
  106. package/dist/types/src/extensions/modes.d.ts +1 -1
  107. package/dist/types/src/extensions/modes.d.ts.map +1 -1
  108. package/dist/types/src/extensions/outliner/menu.d.ts +8 -0
  109. package/dist/types/src/extensions/outliner/menu.d.ts.map +1 -0
  110. package/dist/types/src/extensions/preview/preview.d.ts +6 -3
  111. package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
  112. package/dist/types/src/extensions/replacer.d.ts +21 -0
  113. package/dist/types/src/extensions/replacer.d.ts.map +1 -0
  114. package/dist/types/src/extensions/replacer.test.d.ts +2 -0
  115. package/dist/types/src/extensions/replacer.test.d.ts.map +1 -0
  116. package/dist/types/src/extensions/scrolling.d.ts +78 -0
  117. package/dist/types/src/extensions/scrolling.d.ts.map +1 -0
  118. package/dist/types/src/extensions/state.d.ts +2 -0
  119. package/dist/types/src/extensions/state.d.ts.map +1 -0
  120. package/dist/types/src/extensions/submit.d.ts +10 -0
  121. package/dist/types/src/extensions/submit.d.ts.map +1 -0
  122. package/dist/types/src/extensions/tab.d.ts +4 -0
  123. package/dist/types/src/extensions/tab.d.ts.map +1 -0
  124. package/dist/types/src/extensions/tags/streamer.d.ts.map +1 -1
  125. package/dist/types/src/extensions/tags/xml-tags.d.ts +42 -16
  126. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +1 -1
  127. package/dist/types/src/hooks/useTextEditor.d.ts +5 -9
  128. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  129. package/dist/types/src/stories/{Command.stories.d.ts → CommandDialog.stories.d.ts} +2 -3
  130. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -0
  131. package/dist/types/src/stories/Comments.stories.d.ts +3 -4
  132. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  133. package/dist/types/src/stories/EditorToolbar.stories.d.ts +1 -2
  134. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  135. package/dist/types/src/stories/Experimental.stories.d.ts +3 -4
  136. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  137. package/dist/types/src/stories/Markdown.stories.d.ts +3 -4
  138. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  139. package/dist/types/src/stories/Outliner.stories.d.ts +0 -1
  140. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  141. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -6
  142. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  143. package/dist/types/src/stories/Preview.stories.d.ts +4 -4
  144. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  145. package/dist/types/src/stories/Tags.stories.d.ts +0 -1
  146. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  147. package/dist/types/src/stories/TextEditor.stories.d.ts +3 -5
  148. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  149. package/dist/types/src/stories/components/EditorStory.d.ts +7 -5
  150. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  151. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  152. package/dist/types/src/styles/theme.d.ts.map +1 -1
  153. package/dist/types/src/types/types.d.ts +1 -1
  154. package/dist/types/src/types/types.d.ts.map +1 -1
  155. package/dist/types/src/util/debug.d.ts +4 -0
  156. package/dist/types/src/util/debug.d.ts.map +1 -1
  157. package/dist/types/src/util/index.d.ts +0 -1
  158. package/dist/types/src/util/index.d.ts.map +1 -1
  159. package/dist/types/tsconfig.tsbuildinfo +1 -1
  160. package/package.json +57 -58
  161. package/src/components/Editor/Editor.stories.tsx +89 -0
  162. package/src/components/Editor/Editor.tsx +160 -25
  163. package/src/components/EditorContent/EditorContent.stories.tsx +70 -0
  164. package/src/components/EditorContent/EditorContent.tsx +70 -0
  165. package/src/components/EditorContent/controller.ts +50 -0
  166. package/src/components/EditorContent/index.ts +6 -0
  167. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +233 -0
  168. package/src/components/EditorMenuProvider/index.ts +11 -0
  169. package/src/components/EditorMenuProvider/menu-presets.ts +123 -0
  170. package/src/components/EditorMenuProvider/menu.ts +71 -0
  171. package/src/components/EditorMenuProvider/popover.ts +287 -0
  172. package/src/components/EditorMenuProvider/useEditorMenu.ts +175 -0
  173. package/src/components/EditorMenuProvider/util.ts +31 -0
  174. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +82 -0
  175. package/src/components/EditorPreviewProvider/index.ts +5 -0
  176. package/src/components/EditorToolbar/EditorToolbar.tsx +101 -91
  177. package/src/components/EditorToolbar/{lists.ts → actions.ts} +46 -16
  178. package/src/components/EditorToolbar/blocks.ts +2 -1
  179. package/src/components/EditorToolbar/formatting.ts +2 -1
  180. package/src/components/EditorToolbar/headings.ts +8 -5
  181. package/src/components/EditorToolbar/image.ts +1 -1
  182. package/src/components/EditorToolbar/index.ts +3 -7
  183. package/src/components/EditorToolbar/search.ts +1 -1
  184. package/src/components/EditorToolbar/useEditorToolbar.ts +20 -0
  185. package/src/components/EditorToolbar/view-mode.ts +2 -1
  186. package/src/components/index.ts +8 -2
  187. package/src/extensions/{autocomplete.ts → autocomplete/autocomplete.ts} +8 -76
  188. package/src/extensions/autocomplete/index.ts +8 -0
  189. package/src/extensions/autocomplete/match.ts +46 -0
  190. package/src/extensions/{command → autocomplete}/placeholder.ts +21 -17
  191. package/src/extensions/{command → autocomplete}/typeahead.ts +6 -48
  192. package/src/extensions/automerge/automerge.stories.tsx +9 -9
  193. package/src/extensions/automerge/automerge.ts +28 -9
  194. package/src/extensions/automerge/cursor.ts +1 -1
  195. package/src/extensions/automerge/sync.ts +8 -4
  196. package/src/extensions/automerge/update-automerge.ts +1 -1
  197. package/src/extensions/autoscroll.ts +98 -92
  198. package/src/extensions/awareness/awareness-provider.ts +2 -2
  199. package/src/extensions/blocks.ts +131 -0
  200. package/src/extensions/bookmarks.ts +75 -0
  201. package/src/extensions/comments.ts +2 -1
  202. package/src/extensions/factories.ts +47 -16
  203. package/src/extensions/focus.ts +5 -4
  204. package/src/extensions/folding.tsx +3 -6
  205. package/src/extensions/hashtag.tsx +2 -2
  206. package/src/extensions/index.ts +8 -1
  207. package/src/extensions/json.ts +1 -1
  208. package/src/extensions/listener.ts +14 -20
  209. package/src/extensions/markdown/bundle.ts +16 -4
  210. package/src/extensions/markdown/decorate.ts +9 -8
  211. package/src/extensions/markdown/formatting.ts +8 -10
  212. package/src/extensions/markdown/highlight.ts +1 -1
  213. package/src/extensions/markdown/image.ts +2 -2
  214. package/src/extensions/markdown/table.ts +6 -6
  215. package/src/extensions/modal.ts +24 -0
  216. package/src/extensions/modes.ts +2 -2
  217. package/src/extensions/{command/floating-menu.ts → outliner/menu.ts} +9 -9
  218. package/src/extensions/outliner/outliner.test.ts +1 -1
  219. package/src/extensions/outliner/outliner.ts +3 -3
  220. package/src/extensions/outliner/tree.test.ts +1 -1
  221. package/src/extensions/preview/index.ts +1 -1
  222. package/src/extensions/preview/preview.ts +14 -11
  223. package/src/extensions/replacer.test.ts +75 -0
  224. package/src/extensions/replacer.ts +93 -0
  225. package/src/extensions/scrolling.ts +189 -0
  226. package/src/extensions/selection.ts +3 -3
  227. package/src/extensions/state.ts +7 -0
  228. package/src/extensions/submit.ts +62 -0
  229. package/src/extensions/tab.ts +29 -0
  230. package/src/extensions/tags/extended-markdown.test.ts +2 -1
  231. package/src/extensions/tags/streamer.ts +4 -5
  232. package/src/extensions/tags/xml-tags.ts +320 -155
  233. package/src/extensions/typewriter.ts +1 -1
  234. package/src/hooks/useTextEditor.ts +31 -31
  235. package/src/stories/{Command.stories.tsx → CommandDialog.stories.tsx} +20 -27
  236. package/src/stories/Comments.stories.tsx +8 -9
  237. package/src/stories/EditorToolbar.stories.tsx +14 -13
  238. package/src/stories/Experimental.stories.tsx +7 -7
  239. package/src/stories/Markdown.stories.tsx +6 -6
  240. package/src/stories/Outliner.stories.tsx +20 -20
  241. package/src/stories/Popover.stories.tsx +162 -0
  242. package/src/stories/Preview.stories.tsx +46 -42
  243. package/src/stories/Tags.stories.tsx +24 -10
  244. package/src/stories/TextEditor.stories.tsx +10 -35
  245. package/src/stories/components/EditorStory.tsx +29 -16
  246. package/src/stories/components/util.tsx +40 -8
  247. package/src/styles/markdown.ts +1 -1
  248. package/src/styles/theme.ts +13 -11
  249. package/src/types/types.ts +1 -1
  250. package/src/util/debug.ts +5 -0
  251. package/src/util/index.ts +0 -1
  252. package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +0 -7
  253. package/dist/lib/browser/testing/index.mjs +0 -76
  254. package/dist/lib/browser/testing/index.mjs.map +0 -7
  255. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +0 -7
  256. package/dist/lib/node-esm/testing/index.mjs +0 -78
  257. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  258. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts +0 -38
  259. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts.map +0 -1
  260. package/dist/types/src/components/CommandMenu/index.d.ts +0 -2
  261. package/dist/types/src/components/CommandMenu/index.d.ts.map +0 -1
  262. package/dist/types/src/components/EditorToolbar/lists.d.ts +0 -19
  263. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +0 -1
  264. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  265. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  266. package/dist/types/src/extensions/autocomplete.d.ts +0 -26
  267. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  268. package/dist/types/src/extensions/command/action.d.ts +0 -17
  269. package/dist/types/src/extensions/command/action.d.ts.map +0 -1
  270. package/dist/types/src/extensions/command/command-menu.d.ts +0 -20
  271. package/dist/types/src/extensions/command/command-menu.d.ts.map +0 -1
  272. package/dist/types/src/extensions/command/command.d.ts +0 -6
  273. package/dist/types/src/extensions/command/command.d.ts.map +0 -1
  274. package/dist/types/src/extensions/command/floating-menu.d.ts +0 -7
  275. package/dist/types/src/extensions/command/floating-menu.d.ts.map +0 -1
  276. package/dist/types/src/extensions/command/hint.d.ts +0 -19
  277. package/dist/types/src/extensions/command/hint.d.ts.map +0 -1
  278. package/dist/types/src/extensions/command/index.d.ts +0 -7
  279. package/dist/types/src/extensions/command/index.d.ts.map +0 -1
  280. package/dist/types/src/extensions/command/placeholder.d.ts +0 -10
  281. package/dist/types/src/extensions/command/placeholder.d.ts.map +0 -1
  282. package/dist/types/src/extensions/command/state.d.ts +0 -16
  283. package/dist/types/src/extensions/command/state.d.ts.map +0 -1
  284. package/dist/types/src/extensions/command/typeahead.d.ts +0 -22
  285. package/dist/types/src/extensions/command/typeahead.d.ts.map +0 -1
  286. package/dist/types/src/extensions/command/useCommandMenu.d.ts +0 -25
  287. package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +0 -1
  288. package/dist/types/src/stories/Command.stories.d.ts.map +0 -1
  289. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  290. package/dist/types/src/testing/PreviewPopover.d.ts +0 -20
  291. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  292. package/dist/types/src/testing/index.d.ts +0 -3
  293. package/dist/types/src/testing/index.d.ts.map +0 -1
  294. package/dist/types/src/testing/util.d.ts +0 -3
  295. package/dist/types/src/testing/util.d.ts.map +0 -1
  296. package/dist/types/src/util/domino.d.ts +0 -18
  297. package/dist/types/src/util/domino.d.ts.map +0 -1
  298. package/src/components/CommandMenu/CommandMenu.tsx +0 -346
  299. package/src/components/CommandMenu/index.ts +0 -5
  300. package/src/components/EditorToolbar/util.ts +0 -76
  301. package/src/extensions/command/action.ts +0 -55
  302. package/src/extensions/command/command-menu.ts +0 -211
  303. package/src/extensions/command/command.ts +0 -34
  304. package/src/extensions/command/hint.ts +0 -103
  305. package/src/extensions/command/index.ts +0 -10
  306. package/src/extensions/command/state.ts +0 -90
  307. package/src/extensions/command/useCommandMenu.ts +0 -115
  308. package/src/stories/CommandMenu.stories.tsx +0 -158
  309. package/src/testing/PreviewPopover.tsx +0 -78
  310. package/src/testing/index.ts +0 -6
  311. package/src/testing/util.ts +0 -7
  312. package/src/util/domino.ts +0 -51
@@ -1 +0,0 @@
1
- {"version":3,"file":"command-menu.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command/command-menu.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsC,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGnF,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,KAAK,kBAAkB,EAAe,MAAM,eAAe,CAAC;AAErE,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAG1C,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,IAAI,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,IAAI,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IAErB,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CACxD,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,SAAS,kBAAkB,gFAmKtD,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,KAAK,CAAC;CACd,CAAC;AAGF,eAAO,MAAM,kBAAkB,kEAA4C,CAAC"}
@@ -1,6 +0,0 @@
1
- import { type Extension } from '@codemirror/state';
2
- import { type HintOptions } from './hint';
3
- import { type PopupOptions } from './state';
4
- export type CommandOptions = Partial<PopupOptions & HintOptions>;
5
- export declare const command: (options?: CommandOptions) => Extension;
6
- //# sourceMappingURL=command.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command/command.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAQ,MAAM,mBAAmB,CAAC;AAMzD,OAAO,EAAE,KAAK,WAAW,EAAQ,MAAM,QAAQ,CAAC;AAChD,OAAO,EAAE,KAAK,YAAY,EAA+B,MAAM,SAAS,CAAC;AAOzE,MAAM,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY,GAAG,WAAW,CAAC,CAAC;AAEjE,eAAO,MAAM,OAAO,GAAI,UAAS,cAAmB,KAAG,SAatD,CAAC"}
@@ -1,7 +0,0 @@
1
- export type FloatingMenuOptions = {
2
- icon?: string;
3
- height?: number;
4
- padding?: number;
5
- };
6
- export declare const floatingMenu: (options?: FloatingMenuOptions) => import("@codemirror/state").Extension[];
7
- //# sourceMappingURL=floating-menu.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"floating-menu.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command/floating-menu.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,UAAS,mBAAwB,4CA+G7D,CAAC"}
@@ -1,19 +0,0 @@
1
- import { ViewPlugin, type ViewUpdate, WidgetType } from '@codemirror/view';
2
- export type HintOptions = {
3
- delay?: number;
4
- onHint?: () => string | undefined;
5
- };
6
- export declare const hint: ({ delay, onHint }: HintOptions) => ViewPlugin<{
7
- decorations: import("@codemirror/view").DecorationSet;
8
- timeout: ReturnType<typeof setTimeout> | undefined;
9
- update(update: ViewUpdate): void;
10
- destroy(): void;
11
- }, undefined>;
12
- export declare class Hint extends WidgetType {
13
- readonly content: string | HTMLElement;
14
- constructor(content: string | HTMLElement);
15
- toDOM(): HTMLSpanElement;
16
- coordsAt(dom: HTMLElement): import("../..").Rect | null;
17
- ignoreEvent(): boolean;
18
- }
19
- //# sourceMappingURL=hint.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hint.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command/hint.ts"],"names":[],"mappings":"AAMA,OAAO,EAA0B,UAAU,EAAE,KAAK,UAAU,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAMnG,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACnC,CAAC;AAEF,eAAO,MAAM,IAAI,GAAI,mBAA2B,WAAW;;aAI5C,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,SAAS;mBAEnC,UAAU;;aAuC9B,CAAC;AAEF,qBAAa,IAAK,SAAQ,UAAU;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW;gBAA7B,OAAO,EAAE,MAAM,GAAG,WAAW;IAIlD,KAAK,IAAI,eAAe;IAcf,QAAQ,CAAC,GAAG,EAAE,WAAW;IAgBzB,WAAW,IAAI,OAAO;CAGhC"}
@@ -1,7 +0,0 @@
1
- export * from './action';
2
- export * from './command';
3
- export * from './command-menu';
4
- export * from './floating-menu';
5
- export * from './typeahead';
6
- export * from './useCommandMenu';
7
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,kBAAkB,CAAC"}
@@ -1,10 +0,0 @@
1
- import { type Extension } from '@codemirror/state';
2
- import { EditorView } from '@codemirror/view';
3
- type Content = string | HTMLElement | ((view: EditorView) => HTMLElement);
4
- export type PlaceholderOptions = {
5
- delay?: number;
6
- content: Content;
7
- };
8
- export declare const placeholder: ({ delay, content }: PlaceholderOptions) => Extension;
9
- export {};
10
- //# sourceMappingURL=placeholder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"placeholder.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command/placeholder.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAc,UAAU,EAA2C,MAAM,kBAAkB,CAAC;AAInG,KAAK,OAAO,GAAG,MAAM,GAAG,WAAW,GAAG,CAAC,CAAC,IAAI,EAAE,UAAU,KAAK,WAAW,CAAC,CAAC;AAE1E,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,oBAA4B,kBAAkB,KAAG,SAiD5E,CAAC"}
@@ -1,16 +0,0 @@
1
- import { StateField } from '@codemirror/state';
2
- import { type Tooltip } from '@codemirror/view';
3
- import { type RenderCallback } from '../../types';
4
- import { type Action } from './action';
5
- export declare const commandConfig: import("@codemirror/state").Facet<Partial<PopupOptions & import("./hint").HintOptions>, Partial<PopupOptions & import("./hint").HintOptions>>;
6
- export type PopupOptions = {
7
- renderDialog: RenderCallback<{
8
- onAction: (action?: Action) => void;
9
- }>;
10
- };
11
- type CommandState = {
12
- tooltip?: Tooltip;
13
- };
14
- export declare const commandState: StateField<CommandState>;
15
- export {};
16
- //# sourceMappingURL=state.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command/state.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAmB,KAAK,OAAO,EAAiC,MAAM,kBAAkB,CAAC;AAEhG,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,KAAK,MAAM,EAA2B,MAAM,UAAU,CAAC;AAGhE,eAAO,MAAM,aAAa,+IAAqC,CAAC;AAEhE,MAAM,MAAM,YAAY,GAAG;IACzB,YAAY,EAAE,cAAc,CAAC;QAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC,CAAC;CACvE,CAAC;AAEF,KAAK,YAAY,GAAG;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,eAAO,MAAM,YAAY,0BAkEvB,CAAC"}
@@ -1,22 +0,0 @@
1
- import { type Extension } from '@codemirror/state';
2
- export type TypeaheadContext = {
3
- line: string;
4
- };
5
- export type TypeaheadOptions = {
6
- onComplete?: (context: TypeaheadContext) => string | undefined;
7
- };
8
- /**
9
- * CodeMirror extension for typeahead completion.
10
- */
11
- export declare const typeahead: ({ onComplete }?: TypeaheadOptions) => Extension;
12
- type CompletionOptions = {
13
- default?: string;
14
- minLength?: number;
15
- };
16
- /**
17
- * Util to match current line to a static list of completions.
18
- */
19
- export declare const staticCompletion: (completions: string[], options?: CompletionOptions) => ({ line }: TypeaheadContext) => string | undefined;
20
- export declare const matchCompletion: (completion: string, str: string, minLength?: number) => string | undefined;
21
- export {};
22
- //# sourceMappingURL=typeahead.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"typeahead.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command/typeahead.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,SAAS,EAAyB,MAAM,mBAAmB,CAAC;AAa3F,MAAM,MAAM,gBAAgB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAGhD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,gBAAgB,KAAK,MAAM,GAAG,SAAS,CAAC;CAChE,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,GAAI,iBAAgB,gBAAqB,KAAG,SA4DjE,CAAC;AAEF,KAAK,iBAAiB,GAAG;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,gBAAgB,GAC1B,aAAa,MAAM,EAAE,EAAE,UAAS,iBAAsB,MACtD,UAAU,gBAAgB,uBAiB1B,CAAC;AAEJ,eAAO,MAAM,eAAe,GAAI,YAAY,MAAM,EAAE,KAAK,MAAM,EAAE,kBAAa,KAAG,MAAM,GAAG,SAUzF,CAAC"}
@@ -1,25 +0,0 @@
1
- import { type EditorView } from '@codemirror/view';
2
- import { type RefObject } from 'react';
3
- import { type DxAnchorActivate } from '@dxos/react-ui';
4
- import { type MaybePromise } from '@dxos/util';
5
- import { type CommandMenuGroup, type CommandMenuItem } from '../../components';
6
- import { type PlaceholderOptions } from './placeholder';
7
- export type UseCommandMenuOptions = {
8
- viewRef: RefObject<EditorView | undefined>;
9
- trigger: string | string[];
10
- placeholder?: Partial<PlaceholderOptions>;
11
- getMenu: (trigger: string, query?: string) => MaybePromise<CommandMenuGroup[]>;
12
- };
13
- export declare const useCommandMenu: ({ viewRef, trigger, placeholder, getMenu }: UseCommandMenuOptions) => {
14
- commandMenu: (import("@codemirror/state").Extension | import("@codemirror/state").StateField<{
15
- trigger: string;
16
- range: import("../..").Range;
17
- } | null>)[];
18
- currentItem: string | undefined;
19
- groupsRef: import("react").MutableRefObject<CommandMenuGroup[]>;
20
- open: boolean;
21
- onActivate: (event: DxAnchorActivate) => Promise<void>;
22
- onOpenChange: import("react").Dispatch<import("react").SetStateAction<boolean>>;
23
- onSelect: (item: CommandMenuItem) => void;
24
- };
25
- //# sourceMappingURL=useCommandMenu.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useCommandMenu.d.ts","sourceRoot":"","sources":["../../../../../src/extensions/command/useCommandMenu.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,KAAK,SAAS,EAA0C,MAAM,OAAO,CAAC;AAE/E,OAAO,EAAE,KAAK,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,OAAO,EAAE,KAAK,gBAAgB,EAAE,KAAK,eAAe,EAAyC,MAAM,kBAAkB,CAAC;AAGtH,OAAO,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAExD,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,SAAS,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;IAC3C,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAC1C,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,KAAK,YAAY,CAAC,gBAAgB,EAAE,CAAC,CAAC;CAChF,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,4CAA4C,qBAAqB;;;;;;;;wBAsB9E,gBAAgB;;qBAcQ,eAAe;CAwDxD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"Command.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/Command.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAErB,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAAuC,MAAM,OAAO,CAAC;AA4D5D,QAAA,MAAM,IAAI;;;;;;;CAgBqB,CAAC;AAEhC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAEnC,eAAO,MAAM,OAAO,EAAE,KAAU,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"CommandMenu.stories.d.ts","sourceRoot":"","sources":["../../../../src/stories/CommandMenu.stories.tsx"],"names":[],"mappings":"AAIA,OAAO,aAAa,CAAC;AAGrB,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjE,OAAO,KAA8B,MAAM,OAAO,CAAC;AAkBnD,OAAO,EAAE,KAAK,qBAAqB,EAAkB,MAAM,eAAe,CAAC;AAQ3E,KAAK,UAAU,GAAG,IAAI,CAAC,qBAAqB,EAAE,SAAS,CAAC,GAAG;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AA8B5E,QAAA,MAAM,IAAI;;mCA5BkC,UAAU;;;;;CAmCjB,CAAC;AAEtC,eAAe,IAAI,CAAC;AAEpB,KAAK,KAAK,GAAG,QAAQ,CAAC,OAAO,IAAI,CAAC,CAAC;AAGnC,eAAO,MAAM,KAAK,EAAE,KAkBnB,CAAC;AAEF,eAAO,MAAM,IAAI,EAAE,KA2DlB,CAAC"}
@@ -1,20 +0,0 @@
1
- import React, { type PropsWithChildren } from 'react';
2
- import { type PreviewLinkRef, type PreviewLinkTarget } from '../extensions';
3
- type PreviewLookup = (link: PreviewLinkRef) => Promise<PreviewLinkTarget | null | undefined>;
4
- type PreviewPopoverValue = Partial<{
5
- link: PreviewLinkRef;
6
- target: PreviewLinkTarget;
7
- pending: boolean;
8
- }>;
9
- declare const usePreviewPopover: (consumerName: string) => Partial<{
10
- link: PreviewLinkRef;
11
- target: PreviewLinkTarget;
12
- pending: boolean;
13
- }>;
14
- type PopoverLookupProviderProps = PropsWithChildren<{
15
- onLookup?: PreviewLookup;
16
- }>;
17
- declare const PreviewPopoverProvider: ({ children, onLookup }: PopoverLookupProviderProps) => React.JSX.Element;
18
- export { PreviewPopoverProvider, usePreviewPopover };
19
- export type { PopoverLookupProviderProps, PreviewPopoverValue };
20
- //# sourceMappingURL=PreviewPopover.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"PreviewPopover.d.ts","sourceRoot":"","sources":["../../../../src/testing/PreviewPopover.tsx"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,KAAK,iBAAiB,EAA4D,MAAM,OAAO,CAAC;AAKhH,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAE5E,KAAK,aAAa,GAAG,CAAC,IAAI,EAAE,cAAc,KAAK,OAAO,CAAC,iBAAiB,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;AAE7F,KAAK,mBAAmB,GAAG,OAAO,CAAC;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;CAClB,CAAC,CAAC;AAEH,QAAA,MAAsC,iBAAiB;UAL/C,cAAc;YACZ,iBAAiB;aAChB,OAAO;EAGiG,CAAC;AAEpH,KAAK,0BAA0B,GAAG,iBAAiB,CAAC;IAClD,QAAQ,CAAC,EAAE,aAAa,CAAC;CAC1B,CAAC,CAAC;AAEH,QAAA,MAAM,sBAAsB,GAAI,wBAAwB,0BAA0B,sBAgDjF,CAAC;AACF,OAAO,EAAE,sBAAsB,EAAE,iBAAiB,EAAE,CAAC;AAErD,YAAY,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,3 +0,0 @@
1
- export * from './util';
2
- export * from './PreviewPopover';
3
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/testing/index.ts"],"names":[],"mappings":"AAIA,cAAc,QAAQ,CAAC;AACvB,cAAc,kBAAkB,CAAC"}
@@ -1,3 +0,0 @@
1
- /** deprecated Replace with @dxos/util trim */
2
- export declare const str: (...lines: string[]) => string;
3
- //# sourceMappingURL=util.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/testing/util.ts"],"names":[],"mappings":"AAIA,8CAA8C;AAE9C,eAAO,MAAM,GAAG,GAAI,GAAG,OAAO,MAAM,EAAE,WAAqB,CAAC"}
@@ -1,18 +0,0 @@
1
- import { type ClassNameValue } from '@dxos/react-ui-types';
2
- /**
3
- * Super lightweight chainable DOM builder.
4
- */
5
- export declare class Domino<T extends HTMLElement> {
6
- static of<K extends keyof HTMLElementTagNameMap>(tag: K): Domino<HTMLElementTagNameMap[K]>;
7
- private readonly _el;
8
- constructor(tag: keyof HTMLElementTagNameMap);
9
- classNames(...classNames: ClassNameValue[]): this;
10
- text(value: string): this;
11
- data(key: string, value: string): this;
12
- style(styles: Partial<CSSStyleDeclaration>): this;
13
- attr<K extends keyof T>(key: K, value: T[K]): this;
14
- child<C extends HTMLElement>(...children: Domino<C>[]): this;
15
- on(event: string, handler: (e: Event) => void): this;
16
- build(): T;
17
- }
18
- //# sourceMappingURL=domino.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"domino.d.ts","sourceRoot":"","sources":["../../../../src/util/domino.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D;;GAEG;AACH,qBAAa,MAAM,CAAC,CAAC,SAAS,WAAW;IACvC,MAAM,CAAC,EAAE,CAAC,CAAC,SAAS,MAAM,qBAAqB,EAAE,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC;IAI1F,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAI;gBACZ,GAAG,EAAE,MAAM,qBAAqB;IAG5C,UAAU,CAAC,GAAG,UAAU,EAAE,cAAc,EAAE,GAAG,IAAI;IAIjD,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAIzB,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAItC,KAAK,CAAC,MAAM,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAIjD,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI;IAIlD,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,GAAG,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI;IAI5D,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,KAAK,KAAK,IAAI,GAAG,IAAI;IAIpD,KAAK,IAAI,CAAC;CAGX"}
@@ -1,346 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { type EditorView } from '@codemirror/view';
6
- import { useControllableState } from '@radix-ui/react-use-controllable-state';
7
- import React, { Fragment, type PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';
8
-
9
- import { addEventListener } from '@dxos/async';
10
- import {
11
- type DxAnchorActivate,
12
- Icon,
13
- type Label,
14
- Popover,
15
- toLocalizedString,
16
- useThemeContext,
17
- useTranslation,
18
- } from '@dxos/react-ui';
19
- import { type MaybePromise } from '@dxos/util';
20
-
21
- import { commandRangeEffect } from '../../extensions';
22
-
23
- export type CommandMenuGroup = {
24
- id: string;
25
- label?: Label;
26
- items: CommandMenuItem[];
27
- };
28
-
29
- export type CommandMenuItem = {
30
- id: string;
31
- label: Label;
32
- icon?: string;
33
- onSelect?: (view: EditorView, head: number) => MaybePromise<void>;
34
- };
35
-
36
- export type CommandMenuProps = PropsWithChildren<{
37
- groups: CommandMenuGroup[];
38
- onSelect: (item: CommandMenuItem) => void;
39
- onActivate?: (event: DxAnchorActivate) => void;
40
- currentItem?: string;
41
- open?: boolean;
42
- onOpenChange?: (nextOpen: boolean) => void;
43
- defaultOpen?: boolean;
44
- }>;
45
-
46
- // NOTE: Not using DropdownMenu because the command menu needs to manage focus explicitly.
47
- export const CommandMenuProvider = ({
48
- groups,
49
- onSelect,
50
- onActivate,
51
- currentItem,
52
- children,
53
- open: propsOpen,
54
- onOpenChange,
55
- defaultOpen,
56
- }: CommandMenuProps) => {
57
- const { tx } = useThemeContext();
58
- const groupsWithItems = groups.filter((group) => group.items.length > 0);
59
- const trigger = useRef<HTMLButtonElement | null>(null);
60
-
61
- const [open, setOpen] = useControllableState({
62
- prop: propsOpen,
63
- onChange: onOpenChange,
64
- defaultProp: defaultOpen,
65
- });
66
-
67
- const handleDxAnchorActivate = useCallback(
68
- (event: DxAnchorActivate) => {
69
- const { trigger: dxTrigger, refId } = event;
70
- // If this has a `refId`, then it’s probably a URL or DXN and out of scope for this component.
71
- if (!refId) {
72
- trigger.current = dxTrigger as HTMLButtonElement;
73
- if (onActivate) {
74
- onActivate(event);
75
- } else {
76
- queueMicrotask(() => setOpen(true));
77
- }
78
- }
79
- },
80
- [onActivate],
81
- );
82
-
83
- const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null);
84
-
85
- useEffect(() => {
86
- if (!rootRef || !handleDxAnchorActivate) {
87
- return;
88
- }
89
-
90
- return addEventListener(rootRef, 'dx-anchor-activate' as any, handleDxAnchorActivate, {
91
- capture: true,
92
- passive: false,
93
- });
94
- }, [rootRef, handleDxAnchorActivate]);
95
-
96
- return (
97
- <Popover.Root modal={false} open={open} onOpenChange={setOpen}>
98
- <Popover.Portal>
99
- <Popover.Content
100
- align='start'
101
- onOpenAutoFocus={(event) => event.preventDefault()}
102
- classNames={tx('menu.content', 'menu--exotic-unfocusable', { elevation: 'positioned' }, [
103
- 'max-bs-80 overflow-y-auto',
104
- ])}
105
- >
106
- <Popover.Viewport classNames={tx('menu.viewport', 'menu__viewport--exotic-unfocusable', {})}>
107
- <ul>
108
- {groupsWithItems.map((group, index) => (
109
- <Fragment key={group.id}>
110
- <CommandGroup group={group} currentItem={currentItem} onSelect={onSelect} />
111
- {index < groupsWithItems.length - 1 && <div className={tx('menu.separator', 'menu__item', {})} />}
112
- </Fragment>
113
- ))}
114
- </ul>
115
- </Popover.Viewport>
116
- <Popover.Arrow />
117
- </Popover.Content>
118
- </Popover.Portal>
119
- <Popover.VirtualTrigger virtualRef={trigger} />
120
- <div role='none' className='contents' ref={setRootRef}>
121
- {children}
122
- </div>
123
- </Popover.Root>
124
- );
125
- };
126
-
127
- const CommandGroup = ({
128
- group,
129
- currentItem,
130
- onSelect,
131
- }: {
132
- group: CommandMenuGroup;
133
- currentItem?: string;
134
- onSelect: (item: CommandMenuItem) => void;
135
- }) => {
136
- const { tx } = useThemeContext();
137
- const { t } = useTranslation();
138
- return (
139
- <>
140
- {group.label && (
141
- <div className={tx('menu.groupLabel', 'menu__group__label', {})}>
142
- <span>{toLocalizedString(group.label, t)}</span>
143
- </div>
144
- )}
145
- {group.items.map((item) => (
146
- <CommandItem key={item.id} item={item} current={currentItem === item.id} onSelect={onSelect} />
147
- ))}
148
- </>
149
- );
150
- };
151
-
152
- const CommandItem = ({
153
- item,
154
- current,
155
- onSelect,
156
- }: {
157
- item: CommandMenuItem;
158
- current: boolean;
159
- onSelect: (item: CommandMenuItem) => void;
160
- }) => {
161
- const ref = useRef<HTMLLIElement>(null);
162
- const { tx } = useThemeContext();
163
- const { t } = useTranslation();
164
- const handleSelect = useCallback(() => onSelect(item), [item, onSelect]);
165
-
166
- useEffect(() => {
167
- if (current && ref.current) {
168
- ref.current.scrollIntoView({ behavior: 'smooth', block: 'nearest' });
169
- }
170
- }, [current]);
171
-
172
- return (
173
- <li
174
- ref={ref}
175
- className={tx('menu.item', 'menu__item--exotic-unfocusable', {}, [current && 'bg-hoverSurface'])}
176
- onClick={handleSelect}
177
- >
178
- {item.icon && <Icon icon={item.icon} size={5} />}
179
- <span className='grow truncate'>{toLocalizedString(item.label, t)}</span>
180
- </li>
181
- );
182
- };
183
-
184
- // TODO(wittjosiah): Factor out into a separate file.
185
-
186
- //
187
- // Helpers
188
- //
189
-
190
- export const getItem = (groups: CommandMenuGroup[], id?: string): CommandMenuItem | undefined => {
191
- return groups.flatMap((group) => group.items).find((item) => item.id === id);
192
- };
193
-
194
- export const getNextItem = (groups: CommandMenuGroup[], id?: string): CommandMenuItem => {
195
- const items = groups.flatMap((group) => group.items);
196
- const index = items.findIndex((item) => item.id === id);
197
- return items[(index + 1) % items.length];
198
- };
199
-
200
- export const getPreviousItem = (groups: CommandMenuGroup[], id?: string): CommandMenuItem => {
201
- const items = groups.flatMap((group) => group.items);
202
- const index = items.findIndex((item) => item.id === id);
203
- return items[(index - 1 + items.length) % items.length];
204
- };
205
-
206
- export const filterItems = (
207
- groups: CommandMenuGroup[],
208
- filter: (item: CommandMenuItem) => boolean,
209
- ): CommandMenuGroup[] => {
210
- return groups.map((group) => ({
211
- ...group,
212
- items: group.items.filter(filter),
213
- }));
214
- };
215
-
216
- export const insertAtCursor = (view: EditorView, head: number, insert: string) => {
217
- view.dispatch({
218
- changes: { from: head, to: head, insert },
219
- selection: { anchor: head + insert.length, head: head + insert.length },
220
- });
221
- };
222
-
223
- /**
224
- * If the cursor is at the start of a line, insert the text at the cursor.
225
- * Otherwise, insert the text on a new line.
226
- */
227
- export const insertAtLineStart = (view: EditorView, head: number, insert: string) => {
228
- const line = view.state.doc.lineAt(head);
229
- if (line.from === head) {
230
- insertAtCursor(view, head, insert);
231
- } else {
232
- insert = '\n' + insert;
233
- view.dispatch({
234
- changes: { from: line.to, to: line.to, insert },
235
- selection: { anchor: line.to + insert.length, head: line.to + insert.length },
236
- });
237
- }
238
- };
239
-
240
- export const coreSlashCommands: CommandMenuGroup = {
241
- id: 'markdown',
242
- label: 'Markdown',
243
- items: [
244
- {
245
- id: 'heading-1',
246
- label: 'Heading 1',
247
- icon: 'ph--text-h-one--regular',
248
- onSelect: (view, head) => insertAtLineStart(view, head, '# '),
249
- },
250
- {
251
- id: 'heading-2',
252
- label: 'Heading 2',
253
- icon: 'ph--text-h-two--regular',
254
- onSelect: (view, head) => insertAtLineStart(view, head, '## '),
255
- },
256
- {
257
- id: 'heading-3',
258
- label: 'Heading 3',
259
- icon: 'ph--text-h-three--regular',
260
- onSelect: (view, head) => insertAtLineStart(view, head, '### '),
261
- },
262
- {
263
- id: 'heading-4',
264
- label: 'Heading 4',
265
- icon: 'ph--text-h-four--regular',
266
- onSelect: (view, head) => insertAtLineStart(view, head, '#### '),
267
- },
268
- {
269
- id: 'heading-5',
270
- label: 'Heading 5',
271
- icon: 'ph--text-h-five--regular',
272
- onSelect: (view, head) => insertAtLineStart(view, head, '##### '),
273
- },
274
- {
275
- id: 'heading-6',
276
- label: 'Heading 6',
277
- icon: 'ph--text-h-six--regular',
278
- onSelect: (view, head) => insertAtLineStart(view, head, '###### '),
279
- },
280
- {
281
- id: 'bullet-list',
282
- label: 'Bullet List',
283
- icon: 'ph--list-bullets--regular',
284
- onSelect: (view, head) => insertAtLineStart(view, head, '- '),
285
- },
286
- {
287
- id: 'numbered-list',
288
- label: 'Numbered List',
289
- icon: 'ph--list-numbers--regular',
290
- onSelect: (view, head) => insertAtLineStart(view, head, '1. '),
291
- },
292
- {
293
- id: 'task-list',
294
- label: 'Task List',
295
- icon: 'ph--list-checks--regular',
296
- onSelect: (view, head) => insertAtLineStart(view, head, '- [ ] '),
297
- },
298
- {
299
- id: 'quote',
300
- label: 'Quote',
301
- icon: 'ph--quotes--regular',
302
- onSelect: (view, head) => insertAtLineStart(view, head, '> '),
303
- },
304
- {
305
- id: 'code-block',
306
- label: 'Code Block',
307
- icon: 'ph--code-block--regular',
308
- onSelect: (view, head) => insertAtLineStart(view, head, '```\n\n```'),
309
- },
310
- {
311
- id: 'table',
312
- label: 'Table',
313
- icon: 'ph--table--regular',
314
- onSelect: (view, head) => insertAtLineStart(view, head, '| | | |\n|---|---|---|\n| | | |'),
315
- },
316
- ],
317
- };
318
-
319
- export const linkSlashCommands: CommandMenuGroup = {
320
- id: 'link',
321
- label: 'Link',
322
- items: [
323
- {
324
- id: 'inline-link',
325
- label: 'Inline link',
326
- icon: 'ph--link--regular',
327
- onSelect: (view, head) =>
328
- view.dispatch({
329
- changes: { from: head, insert: '@' },
330
- selection: { anchor: head + 1, head: head + 1 },
331
- effects: commandRangeEffect.of({ trigger: '@', range: { from: head, to: head + 1 } }),
332
- }),
333
- },
334
- {
335
- id: 'block-embed',
336
- label: 'Block embed',
337
- icon: 'ph--lego--regular',
338
- onSelect: (view, head) =>
339
- view.dispatch({
340
- changes: { from: head, insert: '@@' },
341
- selection: { anchor: head + 2, head: head + 2 },
342
- effects: commandRangeEffect.of({ trigger: '@', range: { from: head, to: head + 2 } }),
343
- }),
344
- },
345
- ],
346
- };
@@ -1,5 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- export * from './CommandMenu';