@dxos/react-ui-editor 0.8.4-main.5ea62a8 → 0.8.4-main.72ec0f3

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 (347) 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 +5006 -3698
  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 +5006 -3698
  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 +20 -0
  82. package/dist/types/src/extensions/autoscroll.d.ts.map +1 -0
  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 +11 -11
  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 +10 -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 +6 -2
  101. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  102. package/dist/types/src/extensions/markdown/changes.d.ts +1 -1
  103. package/dist/types/src/extensions/markdown/changes.d.ts.map +1 -1
  104. package/dist/types/src/extensions/markdown/decorate.d.ts +9 -1
  105. package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
  106. package/dist/types/src/extensions/markdown/formatting.d.ts +1 -3
  107. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
  108. package/dist/types/src/extensions/markdown/image.d.ts.map +1 -1
  109. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
  110. package/dist/types/src/extensions/modal.d.ts +7 -0
  111. package/dist/types/src/extensions/modal.d.ts.map +1 -0
  112. package/dist/types/src/extensions/modes.d.ts +1 -1
  113. package/dist/types/src/extensions/modes.d.ts.map +1 -1
  114. package/dist/types/src/extensions/outliner/menu.d.ts +8 -0
  115. package/dist/types/src/extensions/outliner/menu.d.ts.map +1 -0
  116. package/dist/types/src/extensions/outliner/outliner.d.ts +1 -1
  117. package/dist/types/src/extensions/outliner/outliner.d.ts.map +1 -1
  118. package/dist/types/src/extensions/outliner/tree.d.ts +1 -1
  119. package/dist/types/src/extensions/outliner/tree.d.ts.map +1 -1
  120. package/dist/types/src/extensions/preview/preview.d.ts +8 -8
  121. package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
  122. package/dist/types/src/extensions/replacer.d.ts +21 -0
  123. package/dist/types/src/extensions/replacer.d.ts.map +1 -0
  124. package/dist/types/src/extensions/replacer.test.d.ts +2 -0
  125. package/dist/types/src/extensions/replacer.test.d.ts.map +1 -0
  126. package/dist/types/src/extensions/scrolling.d.ts +78 -0
  127. package/dist/types/src/extensions/scrolling.d.ts.map +1 -0
  128. package/dist/types/src/extensions/state.d.ts +2 -0
  129. package/dist/types/src/extensions/state.d.ts.map +1 -0
  130. package/dist/types/src/extensions/submit.d.ts +10 -0
  131. package/dist/types/src/extensions/submit.d.ts.map +1 -0
  132. package/dist/types/src/extensions/tab.d.ts +4 -0
  133. package/dist/types/src/extensions/tab.d.ts.map +1 -0
  134. package/dist/types/src/extensions/tags/extended-markdown.d.ts +10 -0
  135. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +1 -0
  136. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +2 -0
  137. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +1 -0
  138. package/dist/types/src/extensions/tags/index.d.ts +4 -0
  139. package/dist/types/src/extensions/tags/index.d.ts.map +1 -0
  140. package/dist/types/src/extensions/tags/streamer.d.ts +12 -0
  141. package/dist/types/src/extensions/tags/streamer.d.ts.map +1 -0
  142. package/dist/types/src/extensions/tags/xml-tags.d.ts +97 -0
  143. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +1 -0
  144. package/dist/types/src/extensions/tags/xml-util.d.ts +10 -0
  145. package/dist/types/src/extensions/tags/xml-util.d.ts.map +1 -0
  146. package/dist/types/src/hooks/useTextEditor.d.ts +5 -9
  147. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  148. package/dist/types/src/stories/{Command.stories.d.ts → CommandDialog.stories.d.ts} +2 -3
  149. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -0
  150. package/dist/types/src/stories/Comments.stories.d.ts +3 -4
  151. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  152. package/dist/types/src/stories/EditorToolbar.stories.d.ts +1 -2
  153. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  154. package/dist/types/src/stories/Experimental.stories.d.ts +3 -4
  155. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  156. package/dist/types/src/stories/Markdown.stories.d.ts +3 -4
  157. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  158. package/dist/types/src/stories/Outliner.stories.d.ts +0 -1
  159. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  160. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -6
  161. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  162. package/dist/types/src/stories/Preview.stories.d.ts +4 -4
  163. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  164. package/dist/types/src/stories/Tags.stories.d.ts +16 -0
  165. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -0
  166. package/dist/types/src/stories/TextEditor.stories.d.ts +3 -5
  167. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  168. package/dist/types/src/stories/components/EditorStory.d.ts +7 -5
  169. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  170. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  171. package/dist/types/src/styles/theme.d.ts.map +1 -1
  172. package/dist/types/src/types/types.d.ts +2 -2
  173. package/dist/types/src/types/types.d.ts.map +1 -1
  174. package/dist/types/src/util/debug.d.ts +5 -1
  175. package/dist/types/src/util/debug.d.ts.map +1 -1
  176. package/dist/types/src/util/decorations.d.ts +4 -0
  177. package/dist/types/src/util/decorations.d.ts.map +1 -0
  178. package/dist/types/src/util/dom.d.ts +2 -12
  179. package/dist/types/src/util/dom.d.ts.map +1 -1
  180. package/dist/types/src/util/index.d.ts +1 -0
  181. package/dist/types/src/util/index.d.ts.map +1 -1
  182. package/dist/types/src/util/react.d.ts +1 -1
  183. package/dist/types/src/util/react.d.ts.map +1 -1
  184. package/dist/types/tsconfig.tsbuildinfo +1 -1
  185. package/package.json +68 -66
  186. package/src/components/Editor/Editor.stories.tsx +89 -0
  187. package/src/components/Editor/Editor.tsx +160 -25
  188. package/src/components/EditorContent/EditorContent.stories.tsx +70 -0
  189. package/src/components/EditorContent/EditorContent.tsx +70 -0
  190. package/src/components/EditorContent/controller.ts +50 -0
  191. package/src/components/EditorContent/index.ts +6 -0
  192. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +233 -0
  193. package/src/components/EditorMenuProvider/index.ts +11 -0
  194. package/src/components/EditorMenuProvider/menu-presets.ts +123 -0
  195. package/src/components/EditorMenuProvider/menu.ts +71 -0
  196. package/src/components/EditorMenuProvider/popover.ts +287 -0
  197. package/src/components/EditorMenuProvider/useEditorMenu.ts +175 -0
  198. package/src/components/EditorMenuProvider/util.ts +31 -0
  199. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +82 -0
  200. package/src/components/EditorPreviewProvider/index.ts +5 -0
  201. package/src/components/EditorToolbar/EditorToolbar.tsx +101 -91
  202. package/src/components/EditorToolbar/{lists.ts → actions.ts} +46 -16
  203. package/src/components/EditorToolbar/blocks.ts +2 -1
  204. package/src/components/EditorToolbar/formatting.ts +2 -1
  205. package/src/components/EditorToolbar/headings.ts +8 -5
  206. package/src/components/EditorToolbar/image.ts +1 -1
  207. package/src/components/EditorToolbar/index.ts +3 -7
  208. package/src/components/EditorToolbar/search.ts +1 -1
  209. package/src/components/EditorToolbar/useEditorToolbar.ts +20 -0
  210. package/src/components/EditorToolbar/view-mode.ts +2 -1
  211. package/src/components/index.ts +8 -2
  212. package/src/extensions/autocomplete/autocomplete.ts +151 -0
  213. package/src/extensions/autocomplete/index.ts +8 -0
  214. package/src/extensions/autocomplete/match.ts +46 -0
  215. package/src/extensions/{command → autocomplete}/placeholder.ts +21 -17
  216. package/src/extensions/{command → autocomplete}/typeahead.ts +6 -48
  217. package/src/extensions/automerge/automerge.stories.tsx +9 -9
  218. package/src/extensions/automerge/automerge.ts +28 -9
  219. package/src/extensions/automerge/cursor.ts +1 -1
  220. package/src/extensions/automerge/sync.ts +8 -4
  221. package/src/extensions/automerge/update-automerge.ts +1 -1
  222. package/src/extensions/autoscroll.ts +163 -0
  223. package/src/extensions/awareness/awareness-provider.ts +2 -2
  224. package/src/extensions/blocks.ts +131 -0
  225. package/src/extensions/bookmarks.ts +75 -0
  226. package/src/extensions/comments.ts +7 -2
  227. package/src/extensions/factories.ts +50 -32
  228. package/src/extensions/focus.ts +5 -4
  229. package/src/extensions/folding.tsx +3 -6
  230. package/src/extensions/hashtag.tsx +2 -2
  231. package/src/extensions/index.ts +10 -1
  232. package/src/extensions/json.ts +1 -1
  233. package/src/extensions/listener.ts +14 -20
  234. package/src/extensions/markdown/bundle.ts +37 -6
  235. package/src/extensions/markdown/decorate.ts +26 -17
  236. package/src/extensions/markdown/formatting.ts +8 -10
  237. package/src/extensions/markdown/highlight.ts +1 -1
  238. package/src/extensions/markdown/image.ts +5 -6
  239. package/src/extensions/markdown/link.ts +3 -0
  240. package/src/extensions/markdown/table.ts +13 -7
  241. package/src/extensions/modal.ts +24 -0
  242. package/src/extensions/modes.ts +2 -2
  243. package/src/extensions/{command/floating-menu.ts → outliner/menu.ts} +16 -21
  244. package/src/extensions/outliner/outliner.test.ts +1 -1
  245. package/src/extensions/outliner/outliner.ts +5 -5
  246. package/src/extensions/outliner/tree.test.ts +1 -1
  247. package/src/extensions/outliner/tree.ts +1 -1
  248. package/src/extensions/preview/index.ts +1 -1
  249. package/src/extensions/preview/preview.ts +69 -69
  250. package/src/extensions/replacer.test.ts +75 -0
  251. package/src/extensions/replacer.ts +93 -0
  252. package/src/extensions/scrolling.ts +189 -0
  253. package/src/extensions/selection.ts +3 -3
  254. package/src/extensions/state.ts +7 -0
  255. package/src/extensions/submit.ts +62 -0
  256. package/src/extensions/tab.ts +29 -0
  257. package/src/extensions/tags/extended-markdown.test.ts +262 -0
  258. package/src/extensions/tags/extended-markdown.ts +78 -0
  259. package/src/extensions/tags/index.ts +7 -0
  260. package/src/extensions/tags/streamer.ts +243 -0
  261. package/src/extensions/tags/xml-tags.ts +500 -0
  262. package/src/extensions/tags/xml-util.ts +94 -0
  263. package/src/extensions/typewriter.ts +1 -1
  264. package/src/hooks/useTextEditor.ts +31 -43
  265. package/src/stories/CommandDialog.stories.tsx +83 -0
  266. package/src/stories/Comments.stories.tsx +8 -9
  267. package/src/stories/EditorToolbar.stories.tsx +15 -14
  268. package/src/stories/Experimental.stories.tsx +7 -7
  269. package/src/stories/Markdown.stories.tsx +6 -6
  270. package/src/stories/Outliner.stories.tsx +40 -32
  271. package/src/stories/Popover.stories.tsx +162 -0
  272. package/src/stories/Preview.stories.tsx +46 -43
  273. package/src/stories/Tags.stories.tsx +95 -0
  274. package/src/stories/TextEditor.stories.tsx +10 -33
  275. package/src/stories/components/EditorStory.tsx +30 -17
  276. package/src/stories/components/util.tsx +40 -8
  277. package/src/styles/markdown.ts +1 -1
  278. package/src/styles/theme.ts +13 -11
  279. package/src/types/types.ts +1 -1
  280. package/src/util/debug.ts +7 -2
  281. package/src/util/decorations.ts +21 -0
  282. package/src/util/dom.ts +5 -27
  283. package/src/util/index.ts +1 -0
  284. package/src/util/react.tsx +1 -1
  285. package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +0 -7
  286. package/dist/lib/browser/testing/index.mjs +0 -6
  287. package/dist/lib/browser/testing/index.mjs.map +0 -7
  288. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +0 -7
  289. package/dist/lib/node-esm/testing/index.mjs +0 -8
  290. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  291. package/dist/types/src/components/EditorToolbar/lists.d.ts +0 -19
  292. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +0 -1
  293. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  294. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  295. package/dist/types/src/components/Popover/CommandMenu.d.ts +0 -34
  296. package/dist/types/src/components/Popover/CommandMenu.d.ts.map +0 -1
  297. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts +0 -21
  298. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts.map +0 -1
  299. package/dist/types/src/components/Popover/RefPopover.d.ts +0 -34
  300. package/dist/types/src/components/Popover/RefPopover.d.ts.map +0 -1
  301. package/dist/types/src/components/Popover/index.d.ts +0 -4
  302. package/dist/types/src/components/Popover/index.d.ts.map +0 -1
  303. package/dist/types/src/extensions/autocomplete.d.ts +0 -13
  304. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  305. package/dist/types/src/extensions/command/action.d.ts +0 -17
  306. package/dist/types/src/extensions/command/action.d.ts.map +0 -1
  307. package/dist/types/src/extensions/command/command-menu.d.ts +0 -20
  308. package/dist/types/src/extensions/command/command-menu.d.ts.map +0 -1
  309. package/dist/types/src/extensions/command/command.d.ts +0 -6
  310. package/dist/types/src/extensions/command/command.d.ts.map +0 -1
  311. package/dist/types/src/extensions/command/floating-menu.d.ts +0 -7
  312. package/dist/types/src/extensions/command/floating-menu.d.ts.map +0 -1
  313. package/dist/types/src/extensions/command/hint.d.ts +0 -24
  314. package/dist/types/src/extensions/command/hint.d.ts.map +0 -1
  315. package/dist/types/src/extensions/command/index.d.ts +0 -7
  316. package/dist/types/src/extensions/command/index.d.ts.map +0 -1
  317. package/dist/types/src/extensions/command/placeholder.d.ts +0 -10
  318. package/dist/types/src/extensions/command/placeholder.d.ts.map +0 -1
  319. package/dist/types/src/extensions/command/state.d.ts +0 -16
  320. package/dist/types/src/extensions/command/state.d.ts.map +0 -1
  321. package/dist/types/src/extensions/command/typeahead.d.ts +0 -22
  322. package/dist/types/src/extensions/command/typeahead.d.ts.map +0 -1
  323. package/dist/types/src/extensions/command/useCommandMenu.d.ts +0 -26
  324. package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +0 -1
  325. package/dist/types/src/stories/Command.stories.d.ts.map +0 -1
  326. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  327. package/dist/types/src/testing/index.d.ts +0 -2
  328. package/dist/types/src/testing/index.d.ts.map +0 -1
  329. package/dist/types/src/testing/util.d.ts +0 -3
  330. package/dist/types/src/testing/util.d.ts.map +0 -1
  331. package/src/components/EditorToolbar/util.ts +0 -76
  332. package/src/components/Popover/CommandMenu.tsx +0 -279
  333. package/src/components/Popover/RefDropdownMenu.tsx +0 -85
  334. package/src/components/Popover/RefPopover.tsx +0 -99
  335. package/src/components/Popover/index.ts +0 -7
  336. package/src/extensions/autocomplete.ts +0 -69
  337. package/src/extensions/command/action.ts +0 -56
  338. package/src/extensions/command/command-menu.ts +0 -211
  339. package/src/extensions/command/command.ts +0 -34
  340. package/src/extensions/command/hint.ts +0 -103
  341. package/src/extensions/command/index.ts +0 -10
  342. package/src/extensions/command/state.ts +0 -90
  343. package/src/extensions/command/useCommandMenu.ts +0 -119
  344. package/src/stories/Command.stories.tsx +0 -101
  345. package/src/stories/CommandMenu.stories.tsx +0 -161
  346. package/src/testing/index.ts +0 -5
  347. package/src/testing/util.ts +0 -7
@@ -1,99 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { createContext } from '@radix-ui/react-context';
6
- import React, {
7
- type PropsWithChildren,
8
- type RefObject,
9
- forwardRef,
10
- useCallback,
11
- useEffect,
12
- useRef,
13
- useState,
14
- } from 'react';
15
-
16
- import { addEventListener } from '@dxos/async';
17
- import { type DxRefTag, type DxRefTagActivate } from '@dxos/lit-ui';
18
- import { Popover } from '@dxos/react-ui';
19
-
20
- import { type PreviewLinkRef, type PreviewLinkTarget, type PreviewLookup } from '../../extensions';
21
-
22
- const customEventOptions = { capture: true, passive: false };
23
-
24
- export type RefPopoverProps = PropsWithChildren<{
25
- modal?: boolean;
26
- open?: boolean;
27
- onOpenChange?: (open: boolean) => void;
28
- onActivate?: (event: DxRefTagActivate) => void;
29
- }>;
30
-
31
- export const RefPopover = forwardRef<DxRefTag | null, RefPopoverProps>(
32
- ({ children, open, onOpenChange, modal, onActivate }, ref) => {
33
- const [rootRef, setRootRef] = useState<HTMLDivElement | null>(null);
34
-
35
- useEffect(() => {
36
- if (!rootRef || !onActivate) {
37
- return;
38
- }
39
-
40
- return addEventListener(rootRef, 'dx-ref-tag-activate' as any, onActivate, customEventOptions);
41
- }, [rootRef, onActivate]);
42
-
43
- return (
44
- <Popover.Root open={open} onOpenChange={onOpenChange} modal={modal}>
45
- <Popover.VirtualTrigger virtualRef={ref as unknown as RefObject<HTMLButtonElement>} />
46
- <div role='none' className='contents' ref={setRootRef}>
47
- {children}
48
- </div>
49
- </Popover.Root>
50
- );
51
- },
52
- );
53
-
54
- // Create a context for the dxn value.
55
- type RefPopoverValue = Partial<{ link: PreviewLinkRef; target: PreviewLinkTarget; pending: boolean }>;
56
-
57
- const REF_POPOVER = 'RefPopover';
58
- const [RefPopoverContextProvider, useRefPopover] = createContext<RefPopoverValue>(REF_POPOVER, {});
59
-
60
- type PreviewProviderProps = PropsWithChildren<{ onLookup?: PreviewLookup }>;
61
-
62
- const PreviewProvider = ({ children, onLookup }: PreviewProviderProps) => {
63
- const trigger = useRef<DxRefTag | null>(null);
64
- const [value, setValue] = useState<RefPopoverValue>({});
65
- const [open, setOpen] = useState(false);
66
-
67
- const handleDxRefTagActivate = useCallback(
68
- (event: DxRefTagActivate) => {
69
- const { refId, label, trigger: dxTrigger } = event;
70
- setValue((value) => ({
71
- ...value,
72
- link: { label, ref: refId },
73
- pending: true,
74
- }));
75
- trigger.current = dxTrigger;
76
- queueMicrotask(() => setOpen(true));
77
- void onLookup?.({ label, ref: refId }).then((target) =>
78
- setValue((value) => ({
79
- ...value,
80
- target: target ?? undefined,
81
- pending: false,
82
- })),
83
- );
84
- },
85
- [onLookup],
86
- );
87
-
88
- return (
89
- <RefPopoverContextProvider pending={value.pending} link={value.link} target={value.target}>
90
- <RefPopover ref={trigger} open={open} onOpenChange={setOpen} onActivate={handleDxRefTagActivate}>
91
- {children}
92
- </RefPopover>
93
- </RefPopoverContextProvider>
94
- );
95
- };
96
-
97
- export { PreviewProvider, useRefPopover };
98
-
99
- export type { PreviewProviderProps, RefPopoverValue };
@@ -1,7 +0,0 @@
1
- //
2
- // Copyright 2022 DXOS.org
3
- //
4
-
5
- export * from './CommandMenu';
6
- export * from './RefPopover';
7
- export * from './RefDropdownMenu';
@@ -1,69 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import {
6
- type Completion,
7
- type CompletionContext,
8
- type CompletionResult,
9
- type CompletionSource,
10
- autocompletion,
11
- completionKeymap,
12
- } from '@codemirror/autocomplete';
13
- import { markdownLanguage } from '@codemirror/lang-markdown';
14
- import { type Extension } from '@codemirror/state';
15
- import { keymap } from '@codemirror/view';
16
-
17
- export type AutocompleteResult = Completion;
18
-
19
- export type AutocompleteOptions = {
20
- activateOnTyping?: boolean;
21
- override?: CompletionSource[];
22
- onSearch?: (text: string) => Completion[];
23
- };
24
-
25
- // https://codemirror.net/examples/autocompletion
26
- // https://codemirror.net/docs/ref/#autocomplete.autocompletion
27
- // https://codemirror.net/docs/ref/#autocomplete.Completion
28
-
29
- /**
30
- * Autocomplete extension.
31
- */
32
- export const autocomplete = ({ activateOnTyping, override, onSearch }: AutocompleteOptions = {}): Extension => {
33
- const extensions: Extension[] = [
34
- // https://codemirror.net/docs/ref/#view.keymap
35
- // https://discuss.codemirror.net/t/how-can-i-replace-the-default-autocompletion-keymap-v6/3322
36
- // TODO(burdon): Set custom keymap.
37
- keymap.of(completionKeymap),
38
-
39
- // https://codemirror.net/examples/autocompletion
40
- // https://codemirror.net/docs/ref/#autocomplete.autocompletion
41
- autocompletion({
42
- override,
43
- activateOnTyping,
44
- // closeOnBlur: false,
45
- // tooltipClass: () => 'rounded-be pbe-1 border-separator',
46
- }),
47
- ];
48
-
49
- if (onSearch) {
50
- extensions.push(
51
- // TODO(burdon): Optional decoration via addToOptions.
52
- markdownLanguage.data.of({
53
- autocomplete: (context: CompletionContext): CompletionResult | null => {
54
- const match = context.matchBefore(/\w*/);
55
- if (!match || (match.from === match.to && !context.explicit)) {
56
- return null;
57
- }
58
-
59
- return {
60
- from: match.from,
61
- options: onSearch(match.text.toLowerCase()),
62
- };
63
- },
64
- }),
65
- );
66
- }
67
-
68
- return extensions;
69
- };
@@ -1,56 +0,0 @@
1
- //
2
- // Copyright 2025 DXOS.org
3
- //
4
-
5
- import { StateEffect } from '@codemirror/state';
6
- import { type Command, type EditorView, type KeyBinding } from '@codemirror/view';
7
-
8
- import { commandState } from './state';
9
-
10
- export type Action =
11
- | {
12
- type: 'insert';
13
- text: string;
14
- }
15
- | {
16
- type: 'cancel';
17
- };
18
-
19
- export type ActionHandler = (action: Action) => void;
20
-
21
- export const openEffect = StateEffect.define<{ pos: number; fullWidth?: boolean }>();
22
- export const closeEffect = StateEffect.define<null>();
23
-
24
- export const openCommand: Command = (view: EditorView) => {
25
- if (view.state.field(commandState, false)) {
26
- const selection = view.state.selection.main;
27
- const line = view.state.doc.lineAt(selection.from);
28
- if (line.from === selection.from && line.from === line.to) {
29
- view.dispatch({ effects: openEffect.of({ pos: selection.anchor, fullWidth: true }) });
30
- return true;
31
- }
32
- }
33
-
34
- return false;
35
- };
36
-
37
- export const closeCommand: Command = (view: EditorView) => {
38
- if (view.state.field(commandState, false)) {
39
- view.dispatch({ effects: closeEffect.of(null) });
40
- return true;
41
- }
42
-
43
- return false;
44
- };
45
-
46
- export const commandKeyBindings: readonly KeyBinding[] = [
47
- {
48
- key: '/',
49
- preventDefault: true,
50
- run: openCommand,
51
- },
52
- {
53
- key: 'Escape',
54
- run: closeCommand,
55
- },
56
- ];
@@ -1,211 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { Prec, RangeSetBuilder, StateEffect, StateField } from '@codemirror/state';
6
- import { Decoration, type DecorationSet, EditorView, ViewPlugin, type ViewUpdate, keymap } from '@codemirror/view';
7
-
8
- import { type Range } from '../../types';
9
-
10
- import { type PlaceholderOptions, placeholder } from './placeholder';
11
-
12
- export type CommandMenuOptions = {
13
- trigger: string | string[];
14
- placeholder?: Partial<PlaceholderOptions>;
15
-
16
- // TODO(burdon): Replace with onKey?
17
- onClose?: () => void;
18
- onArrowDown?: () => void;
19
- onArrowUp?: () => void;
20
- onEnter?: () => void;
21
-
22
- onTextChange?: (trigger: string, text: string) => void;
23
- };
24
-
25
- export const commandMenu = (options: CommandMenuOptions) => {
26
- const commandMenuPlugin = ViewPlugin.fromClass(
27
- class {
28
- decorations: DecorationSet = Decoration.none;
29
-
30
- constructor(readonly view: EditorView) {}
31
-
32
- // TODO(wittjosiah): The decorations are repainted on every update, this occasionally causes menu to flicker.
33
- update(update: ViewUpdate) {
34
- const builder = new RangeSetBuilder<Decoration>();
35
- const selection = update.view.state.selection.main;
36
- const { range: activeRange, trigger } = update.view.state.field(commandMenuState) ?? {};
37
-
38
- // Check if we should show the widget - only if cursor is within the active command range.
39
- const shouldShowWidget = activeRange && selection.head >= activeRange.from && selection.head <= activeRange.to;
40
- if (shouldShowWidget) {
41
- // Create mark decoration that wraps the entire line content in a dx-ref-tag.
42
- builder.add(
43
- activeRange.from,
44
- activeRange.to,
45
- Decoration.mark({
46
- tagName: 'dx-ref-tag',
47
- class: 'cm-ref-tag',
48
- attributes: {
49
- 'data-auto-trigger': 'true',
50
- 'data-trigger': trigger!,
51
- },
52
- }),
53
- );
54
- }
55
-
56
- const activeRangeChanged = update.transactions.some((tr) =>
57
- tr.effects.some((effect) => effect.is(commandRangeEffect)),
58
- );
59
- if (activeRange && activeRangeChanged && trigger) {
60
- const content = update.view.state.sliceDoc(
61
- activeRange.from + 1, // Skip the trigger character.
62
- activeRange.to,
63
- );
64
- options.onTextChange?.(trigger, content);
65
- }
66
-
67
- this.decorations = builder.finish();
68
- }
69
- },
70
- {
71
- decorations: (v) => v.decorations,
72
- },
73
- );
74
-
75
- const triggers = Array.isArray(options.trigger) ? options.trigger : [options.trigger];
76
-
77
- const commandKeymap = keymap.of([
78
- ...triggers.map((trigger) => ({
79
- key: trigger,
80
- preventDefault: true,
81
- run: (view: EditorView) => {
82
- const selection = view.state.selection.main;
83
- const line = view.state.doc.lineAt(selection.head);
84
-
85
- // Check if we should trigger the command menu:
86
- // 1. Empty lines or at the beginning of a line
87
- // 2. When there's a preceding space
88
- if (
89
- line.text.trim() === '' ||
90
- selection.head === line.from ||
91
- (selection.head > line.from && line.text[selection.head - line.from - 1] === ' ')
92
- ) {
93
- // Insert and select the trigger.
94
- view.dispatch({
95
- changes: { from: selection.head, insert: trigger },
96
- selection: { anchor: selection.head + 1, head: selection.head + 1 },
97
- effects: commandRangeEffect.of({ trigger, range: { from: selection.head, to: selection.head + 1 } }),
98
- });
99
-
100
- return true;
101
- }
102
-
103
- return false;
104
- },
105
- })),
106
- {
107
- key: 'Enter',
108
- run: (view) => {
109
- const activeRange = view.state.field(commandMenuState)?.range;
110
- if (activeRange) {
111
- view.dispatch({ changes: { from: activeRange.from, to: activeRange.to, insert: '' } });
112
- options.onEnter?.();
113
- return true;
114
- }
115
-
116
- return false;
117
- },
118
- },
119
- {
120
- key: 'ArrowDown',
121
- run: (view) => {
122
- const activeRange = view.state.field(commandMenuState)?.range;
123
- if (activeRange) {
124
- options.onArrowDown?.();
125
- return true;
126
- }
127
-
128
- return false;
129
- },
130
- },
131
- {
132
- key: 'ArrowUp',
133
- run: (view) => {
134
- const activeRange = view.state.field(commandMenuState)?.range;
135
- if (activeRange) {
136
- options.onArrowUp?.();
137
- return true;
138
- }
139
-
140
- return false;
141
- },
142
- },
143
- ]);
144
-
145
- // Listen for selection and document changes to clean up the command menu.
146
- const updateListener = EditorView.updateListener.of((update) => {
147
- const { trigger, range: activeRange } = update.view.state.field(commandMenuState) ?? {};
148
- if (!activeRange || !trigger) {
149
- return;
150
- }
151
-
152
- const selection = update.view.state.selection.main;
153
- const firstChar = update.view.state.doc.sliceString(activeRange.from, activeRange.from + 1);
154
- const shouldRemove =
155
- firstChar !== trigger || // Trigger deleted.
156
- selection.head < activeRange.from || // Cursor moved before the range.
157
- selection.head > activeRange.to + 1; // Cursor moved after the range (+1 to handle selection changing before doc).
158
-
159
- const nextRange = shouldRemove
160
- ? null
161
- : update.docChanged
162
- ? { from: activeRange.from, to: selection.head }
163
- : activeRange;
164
- if (nextRange !== activeRange) {
165
- update.view.dispatch({ effects: commandRangeEffect.of(nextRange ? { trigger, range: nextRange } : null) });
166
- }
167
-
168
- // TODO(burdon): Should delete if user presses escape? How else to insert the trigger character?
169
- if (shouldRemove) {
170
- options.onClose?.();
171
- }
172
- });
173
-
174
- return [
175
- Prec.highest(commandKeymap),
176
- placeholder(
177
- Object.assign(
178
- {
179
- content: `Press '${Array.isArray(options.trigger) ? options.trigger[0] : options.trigger}' for commands`,
180
- },
181
- options.placeholder,
182
- ),
183
- ),
184
- updateListener,
185
- commandMenuState,
186
- commandMenuPlugin,
187
- ];
188
- };
189
-
190
- type CommandState = {
191
- trigger: string;
192
- range: Range;
193
- };
194
-
195
- // State effects for managing command menu state.
196
- export const commandRangeEffect = StateEffect.define<CommandState | null>();
197
-
198
- // State field to track the active command menu range.
199
- const commandMenuState = StateField.define<CommandState | null>({
200
- create: () => null,
201
- update: (value, tr) => {
202
- let newValue = value;
203
- for (const effect of tr.effects) {
204
- if (effect.is(commandRangeEffect)) {
205
- newValue = effect.value;
206
- }
207
- }
208
-
209
- return newValue;
210
- },
211
- });
@@ -1,34 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { type Extension, Prec } from '@codemirror/state';
6
- import { EditorView, keymap } from '@codemirror/view';
7
-
8
- import { isNonNullable } from '@dxos/util';
9
-
10
- import { closeEffect, commandKeyBindings } from './action';
11
- import { type HintOptions, hint } from './hint';
12
- import { type PopupOptions, commandConfig, commandState } from './state';
13
-
14
- // TODO(burdon): Create knowledge base for CM notes and ideas.
15
- // https://discuss.codemirror.net/t/inline-code-hints-like-vscode/5533/4
16
- // https://github.com/saminzadeh/codemirror-extension-inline-suggestion
17
- // https://github.com/ChromeDevTools/devtools-frontend/blob/main/front_end/ui/components/text_editor/config.ts#L370
18
-
19
- export type CommandOptions = Partial<PopupOptions & HintOptions>;
20
-
21
- export const command = (options: CommandOptions = {}): Extension => {
22
- return [
23
- Prec.highest(keymap.of(commandKeyBindings)),
24
- commandConfig.of(options),
25
- commandState,
26
- options.onHint && hint(options),
27
- EditorView.focusChangeEffect.of((_, focusing) => (focusing ? closeEffect.of(null) : null)),
28
- EditorView.theme({
29
- '.cm-tooltip': {
30
- background: 'transparent',
31
- },
32
- }),
33
- ].filter(isNonNullable);
34
- };
@@ -1,103 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- // Based on https://github.com/codemirror/view/blob/main/src/placeholder.ts
4
- //
5
-
6
- import { RangeSetBuilder } from '@codemirror/state';
7
- import { Decoration, EditorView, ViewPlugin, type ViewUpdate, WidgetType } from '@codemirror/view';
8
-
9
- import { clientRectsFor, flattenRect } from '../../util';
10
-
11
- import { commandState } from './state';
12
-
13
- export type HintOptions = {
14
- delay?: number;
15
- onHint?: () => string | undefined;
16
- };
17
-
18
- export const hint = ({ delay = 3_000, onHint }: HintOptions) => {
19
- return ViewPlugin.fromClass(
20
- class {
21
- decorations = Decoration.none;
22
- timeout: ReturnType<typeof setTimeout> | undefined;
23
-
24
- update(update: ViewUpdate) {
25
- if (this.timeout) {
26
- clearTimeout(this.timeout);
27
- this.timeout = undefined;
28
- }
29
-
30
- const builder = new RangeSetBuilder<Decoration>();
31
- const cState = update.view.state.field(commandState, false);
32
- if (!cState?.tooltip) {
33
- const selection = update.view.state.selection.main;
34
- const line = update.view.state.doc.lineAt(selection.from);
35
- // Only show if blank line.
36
- if (selection.from === selection.to && line.from === line.to) {
37
- // Set timeout to add decoration after delay.
38
- this.timeout = setTimeout(() => {
39
- const hint = onHint?.();
40
- if (hint) {
41
- const builder = new RangeSetBuilder<Decoration>();
42
- builder.add(selection.from, selection.to, Decoration.widget({ widget: new Hint(hint) }));
43
- this.decorations = builder.finish();
44
- update.view.update([]);
45
- }
46
- }, delay);
47
- }
48
- }
49
-
50
- this.decorations = builder.finish();
51
- }
52
-
53
- destroy() {
54
- if (this.timeout) {
55
- clearTimeout(this.timeout);
56
- }
57
- }
58
- },
59
- {
60
- provide: (plugin) => [EditorView.decorations.of((view) => view.plugin(plugin)?.decorations ?? Decoration.none)],
61
- },
62
- );
63
- };
64
-
65
- export class Hint extends WidgetType {
66
- constructor(readonly content: string | HTMLElement) {
67
- super();
68
- }
69
-
70
- toDOM(): HTMLSpanElement {
71
- const wrap = document.createElement('span');
72
- wrap.className = 'cm-placeholder';
73
- wrap.style.pointerEvents = 'none';
74
- wrap.appendChild(typeof this.content === 'string' ? document.createTextNode(this.content) : this.content);
75
- if (typeof this.content === 'string') {
76
- wrap.setAttribute('aria-label', 'placeholder ' + this.content);
77
- } else {
78
- wrap.setAttribute('aria-hidden', 'true');
79
- }
80
-
81
- return wrap;
82
- }
83
-
84
- override coordsAt(dom: HTMLElement) {
85
- const rects = dom.firstChild ? clientRectsFor(dom.firstChild) : [];
86
- if (!rects.length) {
87
- return null;
88
- }
89
-
90
- const style = window.getComputedStyle(dom.parentNode as HTMLElement);
91
- const rect = flattenRect(rects[0], style.direction !== 'rtl');
92
- const lineHeight = parseInt(style.lineHeight);
93
- if (rect.bottom - rect.top > lineHeight * 1.5) {
94
- return { left: rect.left, right: rect.right, top: rect.top, bottom: rect.top + lineHeight };
95
- }
96
-
97
- return rect;
98
- }
99
-
100
- override ignoreEvent(): boolean {
101
- return false;
102
- }
103
- }
@@ -1,10 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- export * from './action';
6
- export * from './command';
7
- export * from './command-menu';
8
- export * from './floating-menu';
9
- export * from './typeahead';
10
- export * from './useCommandMenu';
@@ -1,90 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { StateField } from '@codemirror/state';
6
- import { type EditorView, type Tooltip, type TooltipView, showTooltip } from '@codemirror/view';
7
-
8
- import { type RenderCallback } from '../../types';
9
- import { singleValueFacet } from '../../util';
10
-
11
- import { type Action, closeEffect, openEffect } from './action';
12
- import { type CommandOptions } from './command';
13
-
14
- export const commandConfig = singleValueFacet<CommandOptions>();
15
-
16
- export type PopupOptions = {
17
- renderDialog: RenderCallback<{ onAction: (action?: Action) => void }>;
18
- };
19
-
20
- type CommandState = {
21
- tooltip?: Tooltip;
22
- };
23
-
24
- export const commandState = StateField.define<CommandState>({
25
- create: () => ({}),
26
- update: (state, tr) => {
27
- for (const effect of tr.effects) {
28
- if (effect.is(closeEffect)) {
29
- return {};
30
- }
31
-
32
- const { renderDialog } = tr.state.facet(commandConfig);
33
- if (effect.is(openEffect) && renderDialog) {
34
- const { pos, fullWidth } = effect.value;
35
- const tooltip: Tooltip = {
36
- pos,
37
- above: false,
38
- arrow: false,
39
- strictSide: true,
40
- create: (view: EditorView) => {
41
- const root = document.createElement('div');
42
- const tooltipView: TooltipView = {
43
- dom: root,
44
- mount: (view: EditorView) => {
45
- if (fullWidth) {
46
- const parent = root.parentElement!;
47
- const { paddingLeft, paddingRight } = window.getComputedStyle(parent);
48
- const widthWithoutPadding = parent.clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);
49
- root.style.width = `${widthWithoutPadding}px`;
50
- }
51
-
52
- // Render react component.
53
- renderDialog(
54
- root,
55
- {
56
- onAction: (action) => {
57
- view.dispatch({ effects: closeEffect.of(null) });
58
- switch (action?.type) {
59
- case 'insert': {
60
- // Insert into editor.
61
- const text = action.text + '\n';
62
- view.dispatch({
63
- changes: { from: pos, insert: text },
64
- selection: { anchor: pos + text.length },
65
- });
66
- break;
67
- }
68
- }
69
-
70
- // NOTE: Truncates text if set focus immediately.
71
- requestAnimationFrame(() => view.focus());
72
- },
73
- },
74
- view,
75
- );
76
- },
77
- };
78
-
79
- return tooltipView;
80
- },
81
- };
82
-
83
- return { tooltip };
84
- }
85
- }
86
-
87
- return state;
88
- },
89
- provide: (field) => [showTooltip.from(field, (value) => value.tooltip ?? null)],
90
- });