@dxos/react-ui-editor 0.8.4-main.67995b8 → 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 (374) 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 +8336 -6712
  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 +8336 -6712
  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/image.d.ts.map +1 -1
  54. package/dist/types/src/components/EditorToolbar/index.d.ts +2 -1
  55. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  56. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  57. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts +11 -0
  58. package/dist/types/src/components/EditorToolbar/useEditorToolbar.d.ts.map +1 -0
  59. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +3 -3
  60. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  61. package/dist/types/src/components/index.d.ts +4 -2
  62. package/dist/types/src/components/index.d.ts.map +1 -1
  63. package/dist/types/src/defaults.d.ts.map +1 -1
  64. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +17 -0
  65. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +1 -0
  66. package/dist/types/src/extensions/autocomplete/index.d.ts +5 -0
  67. package/dist/types/src/extensions/autocomplete/index.d.ts.map +1 -0
  68. package/dist/types/src/extensions/autocomplete/match.d.ts +13 -0
  69. package/dist/types/src/extensions/autocomplete/match.d.ts.map +1 -0
  70. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +20 -0
  71. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +1 -0
  72. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +10 -0
  73. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +1 -0
  74. package/dist/types/src/extensions/automerge/automerge.d.ts +1 -1
  75. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -1
  76. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +10 -19
  77. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
  78. package/dist/types/src/extensions/automerge/cursor.d.ts +1 -1
  79. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
  80. package/dist/types/src/extensions/automerge/defs.d.ts +1 -1
  81. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
  82. package/dist/types/src/extensions/automerge/sync.d.ts +3 -3
  83. package/dist/types/src/extensions/automerge/sync.d.ts.map +1 -1
  84. package/dist/types/src/extensions/automerge/update-automerge.d.ts +1 -1
  85. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
  86. package/dist/types/src/extensions/autoscroll.d.ts +20 -0
  87. package/dist/types/src/extensions/autoscroll.d.ts.map +1 -0
  88. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +1 -1
  89. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +1 -1
  90. package/dist/types/src/extensions/blocks.d.ts +2 -0
  91. package/dist/types/src/extensions/blocks.d.ts.map +1 -0
  92. package/dist/types/src/extensions/bookmarks.d.ts +12 -0
  93. package/dist/types/src/extensions/bookmarks.d.ts.map +1 -0
  94. package/dist/types/src/extensions/comments.d.ts +1 -1
  95. package/dist/types/src/extensions/comments.d.ts.map +1 -1
  96. package/dist/types/src/extensions/dnd.d.ts.map +1 -1
  97. package/dist/types/src/extensions/factories.d.ts +11 -11
  98. package/dist/types/src/extensions/factories.d.ts.map +1 -1
  99. package/dist/types/src/extensions/focus.d.ts.map +1 -1
  100. package/dist/types/src/extensions/folding.d.ts.map +1 -1
  101. package/dist/types/src/extensions/index.d.ts +10 -1
  102. package/dist/types/src/extensions/index.d.ts.map +1 -1
  103. package/dist/types/src/extensions/json.d.ts +1 -1
  104. package/dist/types/src/extensions/json.d.ts.map +1 -1
  105. package/dist/types/src/extensions/listener.d.ts +8 -6
  106. package/dist/types/src/extensions/listener.d.ts.map +1 -1
  107. package/dist/types/src/extensions/markdown/action.d.ts.map +1 -1
  108. package/dist/types/src/extensions/markdown/bundle.d.ts +8 -2
  109. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
  110. package/dist/types/src/extensions/markdown/changes.d.ts +1 -1
  111. package/dist/types/src/extensions/markdown/changes.d.ts.map +1 -1
  112. package/dist/types/src/extensions/markdown/decorate.d.ts +9 -1
  113. package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
  114. package/dist/types/src/extensions/markdown/formatting.d.ts +2 -4
  115. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
  116. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +1 -1
  117. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
  118. package/dist/types/src/extensions/markdown/image.d.ts.map +1 -1
  119. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
  120. package/dist/types/src/extensions/modal.d.ts +7 -0
  121. package/dist/types/src/extensions/modal.d.ts.map +1 -0
  122. package/dist/types/src/extensions/modes.d.ts +1 -1
  123. package/dist/types/src/extensions/modes.d.ts.map +1 -1
  124. package/dist/types/src/extensions/outliner/menu.d.ts +8 -0
  125. package/dist/types/src/extensions/outliner/menu.d.ts.map +1 -0
  126. package/dist/types/src/extensions/outliner/outliner.d.ts +1 -1
  127. package/dist/types/src/extensions/outliner/outliner.d.ts.map +1 -1
  128. package/dist/types/src/extensions/outliner/selection.d.ts.map +1 -1
  129. package/dist/types/src/extensions/outliner/tree.d.ts +2 -2
  130. package/dist/types/src/extensions/outliner/tree.d.ts.map +1 -1
  131. package/dist/types/src/extensions/preview/preview.d.ts +8 -8
  132. package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
  133. package/dist/types/src/extensions/replacer.d.ts +21 -0
  134. package/dist/types/src/extensions/replacer.d.ts.map +1 -0
  135. package/dist/types/src/extensions/replacer.test.d.ts +2 -0
  136. package/dist/types/src/extensions/replacer.test.d.ts.map +1 -0
  137. package/dist/types/src/extensions/scrolling.d.ts +78 -0
  138. package/dist/types/src/extensions/scrolling.d.ts.map +1 -0
  139. package/dist/types/src/extensions/state.d.ts +2 -0
  140. package/dist/types/src/extensions/state.d.ts.map +1 -0
  141. package/dist/types/src/extensions/submit.d.ts +10 -0
  142. package/dist/types/src/extensions/submit.d.ts.map +1 -0
  143. package/dist/types/src/extensions/tab.d.ts +4 -0
  144. package/dist/types/src/extensions/tab.d.ts.map +1 -0
  145. package/dist/types/src/extensions/tags/extended-markdown.d.ts +10 -0
  146. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +1 -0
  147. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +2 -0
  148. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +1 -0
  149. package/dist/types/src/extensions/tags/index.d.ts +4 -0
  150. package/dist/types/src/extensions/tags/index.d.ts.map +1 -0
  151. package/dist/types/src/extensions/tags/streamer.d.ts +12 -0
  152. package/dist/types/src/extensions/tags/streamer.d.ts.map +1 -0
  153. package/dist/types/src/extensions/tags/xml-tags.d.ts +97 -0
  154. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +1 -0
  155. package/dist/types/src/extensions/tags/xml-util.d.ts +10 -0
  156. package/dist/types/src/extensions/tags/xml-util.d.ts.map +1 -0
  157. package/dist/types/src/hooks/useTextEditor.d.ts +5 -9
  158. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  159. package/dist/types/src/stories/CommandDialog.stories.d.ts +14 -0
  160. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +1 -0
  161. package/dist/types/src/stories/Comments.stories.d.ts +21 -10
  162. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  163. package/dist/types/src/stories/EditorToolbar.stories.d.ts +39 -3
  164. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  165. package/dist/types/src/stories/Experimental.stories.d.ts +22 -13
  166. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  167. package/dist/types/src/stories/Markdown.stories.d.ts +32 -43
  168. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  169. package/dist/types/src/stories/Outliner.stories.d.ts +15 -21
  170. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  171. package/dist/types/src/stories/Popover.stories.d.ts +20 -0
  172. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  173. package/dist/types/src/stories/Preview.stories.d.ts +22 -7
  174. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  175. package/dist/types/src/stories/Tags.stories.d.ts +16 -0
  176. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -0
  177. package/dist/types/src/stories/TextEditor.stories.d.ts +37 -52
  178. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  179. package/dist/types/src/stories/components/EditorStory.d.ts +8 -9
  180. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  181. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  182. package/dist/types/src/styles/theme.d.ts.map +1 -1
  183. package/dist/types/src/translations.d.ts +1 -1
  184. package/dist/types/src/types/types.d.ts +2 -2
  185. package/dist/types/src/types/types.d.ts.map +1 -1
  186. package/dist/types/src/util/cursor.d.ts.map +1 -1
  187. package/dist/types/src/util/debug.d.ts +5 -1
  188. package/dist/types/src/util/debug.d.ts.map +1 -1
  189. package/dist/types/src/util/decorations.d.ts +4 -0
  190. package/dist/types/src/util/decorations.d.ts.map +1 -0
  191. package/dist/types/src/util/dom.d.ts +2 -12
  192. package/dist/types/src/util/dom.d.ts.map +1 -1
  193. package/dist/types/src/util/index.d.ts +1 -0
  194. package/dist/types/src/util/index.d.ts.map +1 -1
  195. package/dist/types/src/util/react.d.ts +1 -1
  196. package/dist/types/src/util/react.d.ts.map +1 -1
  197. package/dist/types/tsconfig.tsbuildinfo +1 -1
  198. package/package.json +74 -72
  199. package/src/components/Editor/Editor.stories.tsx +89 -0
  200. package/src/components/Editor/Editor.tsx +160 -25
  201. package/src/components/EditorContent/EditorContent.stories.tsx +70 -0
  202. package/src/components/EditorContent/EditorContent.tsx +70 -0
  203. package/src/components/EditorContent/controller.ts +50 -0
  204. package/src/components/EditorContent/index.ts +6 -0
  205. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +233 -0
  206. package/src/components/EditorMenuProvider/index.ts +11 -0
  207. package/src/components/EditorMenuProvider/menu-presets.ts +123 -0
  208. package/src/components/EditorMenuProvider/menu.ts +71 -0
  209. package/src/components/EditorMenuProvider/popover.ts +287 -0
  210. package/src/components/EditorMenuProvider/useEditorMenu.ts +175 -0
  211. package/src/components/EditorMenuProvider/util.ts +31 -0
  212. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +82 -0
  213. package/src/components/EditorPreviewProvider/index.ts +5 -0
  214. package/src/components/EditorToolbar/EditorToolbar.tsx +116 -96
  215. package/src/components/EditorToolbar/actions.ts +86 -0
  216. package/src/components/EditorToolbar/blocks.ts +22 -24
  217. package/src/components/EditorToolbar/formatting.ts +23 -25
  218. package/src/components/EditorToolbar/headings.ts +17 -9
  219. package/src/components/EditorToolbar/image.ts +9 -5
  220. package/src/components/EditorToolbar/index.ts +3 -7
  221. package/src/components/EditorToolbar/search.ts +9 -5
  222. package/src/components/EditorToolbar/useEditorToolbar.ts +20 -0
  223. package/src/components/EditorToolbar/view-mode.ts +12 -6
  224. package/src/components/index.ts +8 -2
  225. package/src/defaults.ts +5 -2
  226. package/src/extensions/autocomplete/autocomplete.ts +151 -0
  227. package/src/extensions/autocomplete/index.ts +8 -0
  228. package/src/extensions/autocomplete/match.ts +46 -0
  229. package/src/extensions/{command → autocomplete}/placeholder.ts +22 -18
  230. package/src/extensions/{command → autocomplete}/typeahead.ts +8 -50
  231. package/src/extensions/automerge/automerge.stories.tsx +32 -25
  232. package/src/extensions/automerge/automerge.ts +31 -11
  233. package/src/extensions/automerge/cursor.ts +1 -1
  234. package/src/extensions/automerge/defs.ts +1 -1
  235. package/src/extensions/automerge/sync.ts +9 -5
  236. package/src/extensions/automerge/update-automerge.ts +2 -2
  237. package/src/extensions/autoscroll.ts +163 -0
  238. package/src/extensions/awareness/awareness-provider.ts +2 -2
  239. package/src/extensions/awareness/awareness.ts +2 -2
  240. package/src/extensions/blocks.ts +131 -0
  241. package/src/extensions/bookmarks.ts +75 -0
  242. package/src/extensions/comments.ts +20 -14
  243. package/src/extensions/dnd.ts +1 -1
  244. package/src/extensions/factories.ts +54 -35
  245. package/src/extensions/focus.ts +5 -4
  246. package/src/extensions/folding.tsx +3 -6
  247. package/src/extensions/hashtag.tsx +2 -2
  248. package/src/extensions/index.ts +10 -1
  249. package/src/extensions/json.ts +1 -1
  250. package/src/extensions/listener.ts +14 -20
  251. package/src/extensions/markdown/action.ts +2 -1
  252. package/src/extensions/markdown/bundle.ts +40 -6
  253. package/src/extensions/markdown/changes.ts +1 -1
  254. package/src/extensions/markdown/decorate.ts +32 -22
  255. package/src/extensions/markdown/formatting.test.ts +6 -6
  256. package/src/extensions/markdown/formatting.ts +11 -13
  257. package/src/extensions/markdown/highlight.ts +2 -2
  258. package/src/extensions/markdown/image.ts +5 -6
  259. package/src/extensions/markdown/link.ts +3 -0
  260. package/src/extensions/markdown/table.ts +13 -7
  261. package/src/extensions/mention.ts +1 -1
  262. package/src/extensions/modal.ts +24 -0
  263. package/src/extensions/modes.ts +2 -2
  264. package/src/extensions/{command/floating-menu.ts → outliner/menu.ts} +16 -21
  265. package/src/extensions/outliner/outliner.test.ts +3 -2
  266. package/src/extensions/outliner/outliner.ts +8 -7
  267. package/src/extensions/outliner/selection.ts +1 -1
  268. package/src/extensions/outliner/tree.test.ts +3 -2
  269. package/src/extensions/outliner/tree.ts +2 -2
  270. package/src/extensions/preview/index.ts +1 -1
  271. package/src/extensions/preview/preview.ts +69 -69
  272. package/src/extensions/replacer.test.ts +75 -0
  273. package/src/extensions/replacer.ts +93 -0
  274. package/src/extensions/scrolling.ts +189 -0
  275. package/src/extensions/selection.ts +3 -3
  276. package/src/extensions/state.ts +7 -0
  277. package/src/extensions/submit.ts +62 -0
  278. package/src/extensions/tab.ts +29 -0
  279. package/src/extensions/tags/extended-markdown.test.ts +262 -0
  280. package/src/extensions/tags/extended-markdown.ts +78 -0
  281. package/src/extensions/tags/index.ts +7 -0
  282. package/src/extensions/tags/streamer.ts +243 -0
  283. package/src/extensions/tags/xml-tags.ts +500 -0
  284. package/src/extensions/tags/xml-util.ts +94 -0
  285. package/src/extensions/typewriter.ts +1 -1
  286. package/src/hooks/useTextEditor.ts +31 -43
  287. package/src/stories/CommandDialog.stories.tsx +83 -0
  288. package/src/stories/Comments.stories.tsx +17 -14
  289. package/src/stories/EditorToolbar.stories.tsx +21 -20
  290. package/src/stories/Experimental.stories.tsx +17 -13
  291. package/src/stories/Markdown.stories.tsx +26 -22
  292. package/src/stories/Outliner.stories.tsx +51 -39
  293. package/src/stories/Popover.stories.tsx +162 -0
  294. package/src/stories/Preview.stories.tsx +56 -51
  295. package/src/stories/Tags.stories.tsx +95 -0
  296. package/src/stories/TextEditor.stories.tsx +42 -61
  297. package/src/stories/components/EditorStory.tsx +36 -24
  298. package/src/stories/components/util.tsx +40 -8
  299. package/src/styles/markdown.ts +1 -1
  300. package/src/styles/theme.ts +16 -12
  301. package/src/translations.ts +1 -1
  302. package/src/types/types.ts +1 -1
  303. package/src/util/cursor.ts +2 -1
  304. package/src/util/debug.ts +7 -2
  305. package/src/util/decorations.ts +21 -0
  306. package/src/util/dom.ts +5 -27
  307. package/src/util/index.ts +1 -0
  308. package/src/util/react.tsx +1 -1
  309. package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +0 -7
  310. package/dist/lib/browser/testing/index.mjs +0 -6
  311. package/dist/lib/browser/testing/index.mjs.map +0 -7
  312. package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +0 -7
  313. package/dist/lib/node-esm/testing/index.mjs +0 -8
  314. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  315. package/dist/types/src/components/EditorToolbar/lists.d.ts +0 -19
  316. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +0 -1
  317. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  318. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  319. package/dist/types/src/components/Popover/CommandMenu.d.ts +0 -34
  320. package/dist/types/src/components/Popover/CommandMenu.d.ts.map +0 -1
  321. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts +0 -21
  322. package/dist/types/src/components/Popover/RefDropdownMenu.d.ts.map +0 -1
  323. package/dist/types/src/components/Popover/RefPopover.d.ts +0 -34
  324. package/dist/types/src/components/Popover/RefPopover.d.ts.map +0 -1
  325. package/dist/types/src/components/Popover/index.d.ts +0 -4
  326. package/dist/types/src/components/Popover/index.d.ts.map +0 -1
  327. package/dist/types/src/extensions/autocomplete.d.ts +0 -13
  328. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  329. package/dist/types/src/extensions/command/action.d.ts +0 -17
  330. package/dist/types/src/extensions/command/action.d.ts.map +0 -1
  331. package/dist/types/src/extensions/command/command-menu.d.ts +0 -20
  332. package/dist/types/src/extensions/command/command-menu.d.ts.map +0 -1
  333. package/dist/types/src/extensions/command/command.d.ts +0 -6
  334. package/dist/types/src/extensions/command/command.d.ts.map +0 -1
  335. package/dist/types/src/extensions/command/floating-menu.d.ts +0 -7
  336. package/dist/types/src/extensions/command/floating-menu.d.ts.map +0 -1
  337. package/dist/types/src/extensions/command/hint.d.ts +0 -24
  338. package/dist/types/src/extensions/command/hint.d.ts.map +0 -1
  339. package/dist/types/src/extensions/command/index.d.ts +0 -7
  340. package/dist/types/src/extensions/command/index.d.ts.map +0 -1
  341. package/dist/types/src/extensions/command/placeholder.d.ts +0 -10
  342. package/dist/types/src/extensions/command/placeholder.d.ts.map +0 -1
  343. package/dist/types/src/extensions/command/state.d.ts +0 -16
  344. package/dist/types/src/extensions/command/state.d.ts.map +0 -1
  345. package/dist/types/src/extensions/command/typeahead.d.ts +0 -22
  346. package/dist/types/src/extensions/command/typeahead.d.ts.map +0 -1
  347. package/dist/types/src/extensions/command/useCommandMenu.d.ts +0 -26
  348. package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +0 -1
  349. package/dist/types/src/stories/Command.stories.d.ts +0 -7
  350. package/dist/types/src/stories/Command.stories.d.ts.map +0 -1
  351. package/dist/types/src/stories/CommandMenu.stories.d.ts +0 -13
  352. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  353. package/dist/types/src/testing/index.d.ts +0 -2
  354. package/dist/types/src/testing/index.d.ts.map +0 -1
  355. package/dist/types/src/testing/util.d.ts +0 -2
  356. package/dist/types/src/testing/util.d.ts.map +0 -1
  357. package/src/components/EditorToolbar/lists.ts +0 -59
  358. package/src/components/EditorToolbar/util.ts +0 -65
  359. package/src/components/Popover/CommandMenu.tsx +0 -279
  360. package/src/components/Popover/RefDropdownMenu.tsx +0 -85
  361. package/src/components/Popover/RefPopover.tsx +0 -99
  362. package/src/components/Popover/index.ts +0 -7
  363. package/src/extensions/autocomplete.ts +0 -69
  364. package/src/extensions/command/action.ts +0 -56
  365. package/src/extensions/command/command-menu.ts +0 -210
  366. package/src/extensions/command/command.ts +0 -34
  367. package/src/extensions/command/hint.ts +0 -102
  368. package/src/extensions/command/index.ts +0 -10
  369. package/src/extensions/command/state.ts +0 -89
  370. package/src/extensions/command/useCommandMenu.ts +0 -118
  371. package/src/stories/Command.stories.tsx +0 -97
  372. package/src/stories/CommandMenu.stories.tsx +0 -159
  373. package/src/testing/index.ts +0 -5
  374. package/src/testing/util.ts +0 -5
@@ -4,8 +4,8 @@
4
4
 
5
5
  import { EditorState, type EditorStateConfig, type Text } from '@codemirror/state';
6
6
  import { EditorView } from '@codemirror/view';
7
- import { useFocusableGroup, type TabsterTypes } from '@fluentui/react-tabster';
8
7
  import {
8
+ type ComponentPropsWithoutRef,
9
9
  type DependencyList,
10
10
  type KeyboardEventHandler,
11
11
  type RefObject,
@@ -17,9 +17,9 @@ import {
17
17
  } from 'react';
18
18
 
19
19
  import { log } from '@dxos/log';
20
- import { getProviderValue, isNotFalsy, type MaybeProvider } from '@dxos/util';
20
+ import { type MaybeProvider, getProviderValue, isTruthy } from '@dxos/util';
21
21
 
22
- import { type EditorSelection, documentId, createEditorStateTransaction, editorInputMode } from '../extensions';
22
+ import { type EditorSelection, createEditorStateTransaction, documentId, modalStateField } from '../extensions';
23
23
  import { debugDispatcher } from '../util';
24
24
 
25
25
  let instanceCount = 0;
@@ -34,13 +34,9 @@ export type CursorInfo = {
34
34
  };
35
35
 
36
36
  export type UseTextEditor = {
37
- // TODO(burdon): Rename.
38
- parentRef: RefObject<HTMLDivElement>;
39
- view?: EditorView;
40
- focusAttributes?: TabsterTypes.TabsterDOMAttribute & {
41
- tabIndex: 0;
42
- onKeyUp: KeyboardEventHandler<HTMLDivElement>;
43
- };
37
+ parentRef: RefObject<HTMLDivElement | null>;
38
+ view: EditorView | null;
39
+ focusAttributes?: ComponentPropsWithoutRef<'div'>;
44
40
  };
45
41
 
46
42
  export type UseTextEditorProps = Pick<EditorStateConfig, 'extensions'> & {
@@ -50,7 +46,7 @@ export type UseTextEditorProps = Pick<EditorStateConfig, 'extensions'> & {
50
46
  autoFocus?: boolean;
51
47
  scrollTo?: number;
52
48
  selection?: EditorSelection;
53
- moveToEndOfLine?: boolean;
49
+ selectionEnd?: boolean;
54
50
  debug?: boolean;
55
51
  };
56
52
 
@@ -61,16 +57,16 @@ export const useTextEditor = (
61
57
  props: MaybeProvider<UseTextEditorProps> = {},
62
58
  deps: DependencyList = [],
63
59
  ): UseTextEditor => {
64
- const { id, doc, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } =
60
+ const { id, doc, initialValue, extensions, autoFocus, scrollTo, selection, selectionEnd, debug } =
65
61
  useMemo<UseTextEditorProps>(() => getProviderValue(props), deps ?? []);
66
62
 
67
63
  // NOTE: Increments by 2 in strict mode.
68
64
  const [instanceId] = useState(() => `text-editor-${++instanceCount}`);
69
- const [view, setView] = useState<EditorView>();
65
+ const [view, setView] = useState<EditorView | null>(null);
70
66
  const parentRef = useRef<HTMLDivElement>(null);
71
67
 
72
68
  useEffect(() => {
73
- let view: EditorView;
69
+ let view: EditorView | null = null;
74
70
  if (parentRef.current) {
75
71
  log('create', { id, instanceId, doc: initialValue?.length ?? 0 });
76
72
 
@@ -79,7 +75,7 @@ export const useTextEditor = (
79
75
  if (selection.anchor <= initialValue.length && (selection?.head ?? 0) <= initialValue.length) {
80
76
  initialSelection = selection;
81
77
  }
82
- } else if (moveToEndOfLine && selection === undefined) {
78
+ } else if (selectionEnd && selection === undefined) {
83
79
  const index = initialValue?.indexOf('\n');
84
80
  const anchor = !index || index === -1 ? 0 : index;
85
81
  initialSelection = { anchor };
@@ -96,19 +92,7 @@ export const useTextEditor = (
96
92
  EditorView.exceptionSink.of((err) => {
97
93
  log.catch(err);
98
94
  }),
99
- // TODO(burdon): Factor out debug inspector.
100
- // ViewPlugin.fromClass(
101
- // class {
102
- // constructor(_view: EditorView) {
103
- // log('construct', { id });
104
- // }
105
- //
106
- // destroy() {
107
- // log('destroy', { id });
108
- // }
109
- // },
110
- // ),
111
- ].filter(isNotFalsy),
95
+ ].filter(isTruthy),
112
96
  });
113
97
 
114
98
  // https://codemirror.net/docs/ref/#view.EditorViewConfig
@@ -120,7 +104,7 @@ export const useTextEditor = (
120
104
  });
121
105
 
122
106
  // Move to end of line after document loaded (unless selection is specified).
123
- if (moveToEndOfLine && !initialSelection) {
107
+ if (selectionEnd && !initialSelection) {
124
108
  const { to } = view.state.doc.lineAt(0);
125
109
  if (to) {
126
110
  view.dispatch({ selection: { anchor: to } });
@@ -155,23 +139,28 @@ export const useTextEditor = (
155
139
  }
156
140
  }, [autoFocus, view]);
157
141
 
158
- const focusableGroupAttrs = useFocusableGroup({
159
- tabBehavior: 'limited',
160
- ignoreDefaultKeydown: {
161
- Escape: view?.state.facet(editorInputMode).noTabster,
162
- },
163
- });
164
-
165
142
  // Focus editor on Enter (e.g., when tabbing to this component).
166
- const handleKeyUp = useCallback<KeyboardEventHandler<HTMLDivElement>>(
143
+ const handleKeyDown = useCallback<KeyboardEventHandler<HTMLDivElement>>(
167
144
  (event) => {
168
145
  const { key, target, currentTarget } = event;
169
- if (target === currentTarget) {
170
- switch (key) {
171
- case 'Enter': {
146
+ switch (key) {
147
+ case 'Escape': {
148
+ // Check if popover is open.
149
+ const modal = view?.state.field(modalStateField, false);
150
+ if (modal) {
151
+ return;
152
+ }
153
+
154
+ // Focus the closest focusable parent.
155
+ const element = view?.contentDOM.closest('[tabindex="0"]') as HTMLDivElement | null;
156
+ element?.focus();
157
+ break;
158
+ }
159
+ case 'Enter': {
160
+ if (target === currentTarget) {
172
161
  view?.focus();
173
- break;
174
162
  }
163
+ break;
175
164
  }
176
165
  }
177
166
  },
@@ -183,8 +172,7 @@ export const useTextEditor = (
183
172
  view,
184
173
  focusAttributes: {
185
174
  tabIndex: 0 as const,
186
- ...focusableGroupAttrs,
187
- onKeyUp: handleKeyUp,
175
+ onKeyDown: handleKeyDown,
188
176
  },
189
177
  };
190
178
  };
@@ -0,0 +1,83 @@
1
+ //
2
+ // Copyright 2023 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { type KeyboardEvent, useState } from 'react';
7
+
8
+ import { type Button, IconButton, Input } from '@dxos/react-ui';
9
+ import { withTheme } from '@dxos/react-ui/testing';
10
+ import { mx } from '@dxos/react-ui-theme';
11
+
12
+ import { editorWidth } from '../defaults';
13
+ import { str } from '../util';
14
+
15
+ import { EditorStory } from './components';
16
+
17
+ // TODO(burdon): Reimplement with Popover.
18
+ const CommandDialog = ({ onAction }: { onAction: (action?: any) => void }) => {
19
+ const [text, setText] = useState('');
20
+
21
+ const handleInsert = () => {
22
+ // TODO(burdon): Use queue ref.
23
+ const link = `![${text}](dxn:queue:data:123)`;
24
+ onAction(text.length ? { type: 'insert', text: link } : undefined);
25
+ };
26
+
27
+ const handleKeyDown = (event: KeyboardEvent<HTMLInputElement>) => {
28
+ switch (event.key) {
29
+ case 'Enter': {
30
+ handleInsert();
31
+ break;
32
+ }
33
+ case 'Escape': {
34
+ onAction();
35
+ break;
36
+ }
37
+ }
38
+ };
39
+
40
+ return (
41
+ <div className='flex is-full justify-center'>
42
+ <div
43
+ className={mx(
44
+ 'flex is-full p-2 gap-2 items-center bg-modalSurface border border-separator rounded-md',
45
+ editorWidth,
46
+ )}
47
+ >
48
+ <Input.Root>
49
+ <Input.TextInput
50
+ autoFocus={true}
51
+ placeholder='Ask a question...'
52
+ value={text}
53
+ onChange={(ev) => setText(ev.target.value)}
54
+ onKeyDown={handleKeyDown}
55
+ />
56
+ </Input.Root>
57
+ <IconButton
58
+ icon='ph--x--regular'
59
+ label='Cancel'
60
+ iconOnly
61
+ variant='ghost'
62
+ classNames='pli-0'
63
+ onClick={() => onAction({ type: 'cancel' })}
64
+ />
65
+ </div>
66
+ </div>
67
+ );
68
+ };
69
+
70
+ const meta = {
71
+ title: 'ui/react-ui-editor/CommandDialog',
72
+ render: () => <EditorStory text={str('# Command', '', '')} extensions={[]} />,
73
+ decorators: [withTheme],
74
+ parameters: {
75
+ layout: 'fullscreen',
76
+ },
77
+ } satisfies Meta<typeof Button>;
78
+
79
+ export default meta;
80
+
81
+ type Story = StoryObj<typeof meta>;
82
+
83
+ export const Default: Story = {};
@@ -2,36 +2,39 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { effect, useSignal } from '@preact/signals-react';
6
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
7
  import React, { type FC } from 'react';
9
8
 
10
9
  import { keySymbols, parseShortcut } from '@dxos/keyboard';
11
10
  import { PublicKey } from '@dxos/keys';
12
11
  import { log } from '@dxos/log';
13
- import { withLayout, withTheme, type Meta } from '@dxos/storybook-utils';
12
+ import { withTheme } from '@dxos/react-ui/testing';
14
13
 
15
- import { EditorStory, content, longText } from './components';
16
14
  import { annotations, comments, createExternalCommentSync } from '../extensions';
17
- import { str } from '../testing';
18
15
  import { type Comment } from '../types';
19
- import { createRenderer } from '../util';
16
+ import { createRenderer, str } from '../util';
17
+
18
+ import { EditorStory, content, longText } from './components';
20
19
 
21
- const meta: Meta<typeof EditorStory> = {
20
+ const meta = {
22
21
  title: 'ui/react-ui-editor/Comments',
23
22
  component: EditorStory,
24
- decorators: [withTheme, withLayout({ fullscreen: true })],
25
- parameters: { layout: 'fullscreen' },
26
- };
23
+ decorators: [withTheme],
24
+ parameters: {
25
+ layout: 'fullscreen',
26
+ },
27
+ } satisfies Meta<typeof EditorStory>;
27
28
 
28
29
  export default meta;
29
30
 
31
+ type Story = StoryObj<typeof meta>;
32
+
30
33
  //
31
34
  // Comments
32
35
  //
33
36
 
34
- export const Comments = {
37
+ export const Comments: Story = {
35
38
  render: () => {
36
39
  const _comments = useSignal<Comment[]>([]);
37
40
  return (
@@ -69,14 +72,14 @@ export const Comments = {
69
72
  };
70
73
 
71
74
  const Key: FC<{ char: string }> = ({ char }) => (
72
- <span className='flex justify-center items-center w-[24px] h-[24px] rounded text-xs bg-neutral-200 text-black'>
75
+ <span className='flex justify-center items-center is-[24px] bs-[24px] rounded text-xs bg-neutral-200 text-black'>
73
76
  {char}
74
77
  </span>
75
78
  );
76
79
 
77
80
  const CommentTooltip: FC<{ shortcut: string }> = ({ shortcut }) => {
78
81
  return (
79
- <div className='flex items-center gap-2 px-2 py-2 bg-neutral-700 text-white text-xs rounded'>
82
+ <div className='flex items-center gap-2 pli-2 plb-2 bg-neutral-700 text-white text-xs rounded'>
80
83
  <div>Create comment</div>
81
84
  <div className='flex gap-1'>
82
85
  {keySymbols(parseShortcut(shortcut)).map((char) => (
@@ -91,7 +94,7 @@ const CommentTooltip: FC<{ shortcut: string }> = ({ shortcut }) => {
91
94
  // Annotations
92
95
  //
93
96
 
94
- export const Annotations = {
97
+ export const Annotations: Story = {
95
98
  render: () => (
96
99
  <EditorStory text={str('# Annotations', '', longText)} extensions={[annotations({ match: /volup/gi })]} />
97
100
  ),
@@ -2,28 +2,26 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
- import { type StoryObj } from '@storybook/react-vite';
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
6
  import React, { useCallback, useState } from 'react';
9
7
 
10
8
  import { invariant } from '@dxos/invariant';
11
9
  import { useThemeContext } from '@dxos/react-ui';
10
+ import { withTheme } from '@dxos/react-ui/testing';
12
11
  import { attentionSurface, mx } from '@dxos/react-ui-theme';
13
- import { type Meta, withLayout, withTheme } from '@dxos/storybook-utils';
14
12
 
15
- import { EditorToolbar, useEditorToolbarState } from '../components';
13
+ import { EditorToolbar, useEditorToolbar } from '../components';
16
14
  import { editorWidth } from '../defaults';
17
15
  import {
18
16
  InputModeExtensions,
19
- createMarkdownExtensions,
20
17
  createBasicExtensions,
18
+ createMarkdownExtensions,
21
19
  createThemeExtensions,
22
20
  decorateMarkdown,
23
21
  formattingKeymap,
24
- useFormattingState,
22
+ formattingListener,
25
23
  } from '../extensions';
26
- import { useTextEditor, type UseTextEditorProps } from '../hooks';
24
+ import { type UseTextEditorProps, useTextEditor } from '../hooks';
27
25
  import { translations } from '../translations';
28
26
  import { type EditorInputMode, type EditorViewMode } from '../types';
29
27
 
@@ -31,24 +29,24 @@ type StoryProps = { placeholder?: string } & UseTextEditorProps;
31
29
 
32
30
  const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
33
31
  const { themeMode } = useThemeContext();
34
- const toolbarState = useEditorToolbarState({ viewMode: 'source' });
32
+
33
+ const toolbarState = useEditorToolbar({ viewMode: 'source' });
35
34
  const viewMode = toolbarState.viewMode;
36
- const trackFormatting = useFormattingState(toolbarState);
37
35
  // TODO(wittjosiah): Provide way to change the input mode.
38
36
  const [editorInputMode, _setEditorInputMode] = useState<EditorInputMode>('default');
39
37
  const { parentRef, view } = useTextEditor(
40
38
  () => ({
41
39
  autoFocus,
42
40
  initialValue,
43
- moveToEndOfLine: true,
41
+ selectionEnd: true,
44
42
  extensions: [
45
43
  editorInputMode ? InputModeExtensions[editorInputMode] : [],
46
- createBasicExtensions({ placeholder, lineWrapping: true, readOnly: viewMode === 'readonly' }),
47
- createMarkdownExtensions({ themeMode }),
44
+ createBasicExtensions({ placeholder, lineWrapping: true, readOnly: viewMode === 'readonly', search: true }),
45
+ createMarkdownExtensions(),
48
46
  createThemeExtensions({ themeMode, syntaxHighlighting: true }),
49
47
  viewMode === 'source' ? [] : decorateMarkdown(),
50
48
  formattingKeymap(),
51
- trackFormatting,
49
+ formattingListener(() => toolbarState),
52
50
  ],
53
51
  }),
54
52
  [editorInputMode, viewMode, themeMode, placeholder],
@@ -67,7 +65,7 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
67
65
  // Also not sure if view is even guaranteed to exist at this point.
68
66
  return (
69
67
  <div role='none' className={mx('fixed inset-0 flex flex-col')}>
70
- {toolbarState && <EditorToolbar state={toolbarState} getView={getView} viewMode={handleViewModeChange} />}
68
+ {toolbarState && <EditorToolbar state={toolbarState} getView={getView} onViewModeChange={handleViewModeChange} />}
71
69
  <div role='none' className={mx('grow overflow-hidden', attentionSurface)}>
72
70
  <div className={mx(editorWidth)} ref={parentRef} />
73
71
  </div>
@@ -75,12 +73,15 @@ const DefaultStory = ({ autoFocus, initialValue, placeholder }: StoryProps) => {
75
73
  );
76
74
  };
77
75
 
78
- const meta: Meta<StoryProps> = {
76
+ const meta = {
79
77
  title: 'ui/react-ui-editor/EditorToolbar',
80
78
  render: DefaultStory,
81
- decorators: [withTheme, withLayout({ fullscreen: true })],
82
- parameters: { translations, layout: 'fullscreen' },
83
- };
79
+ decorators: [withTheme],
80
+ parameters: {
81
+ layout: 'fullscreen',
82
+ translations,
83
+ },
84
+ } satisfies Meta<typeof DefaultStory>;
84
85
 
85
86
  export default meta;
86
87
 
@@ -90,6 +91,6 @@ export const Default: Story = {
90
91
  args: {
91
92
  autoFocus: true,
92
93
  placeholder: 'Text...',
93
- initialValue: '# Demo\n\nThis is a document.\n\n',
94
+ initialValue: '# Demo\n\nThis is a **document**.\n\n',
94
95
  },
95
96
  };
@@ -2,35 +2,39 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
7
6
  import defaultsDeep from 'lodash.defaultsdeep';
8
7
  import React from 'react';
9
8
 
10
9
  import { log } from '@dxos/log';
11
10
  import { faker } from '@dxos/random';
12
- import { withLayout, withTheme, type Meta } from '@dxos/storybook-utils';
11
+ import { withTheme } from '@dxos/react-ui/testing';
12
+
13
+ import { blast, defaultOptions, dropFile, typewriter } from '../extensions';
14
+ import { str } from '../util';
13
15
 
14
16
  import { EditorStory, content } from './components';
15
- import { typewriter, blast, defaultOptions, dropFile } from '../extensions';
16
- import { str } from '../testing';
17
17
 
18
- const meta: Meta<typeof EditorStory> = {
18
+ const meta = {
19
19
  title: 'ui/react-ui-editor/Experimental',
20
20
  component: EditorStory,
21
- decorators: [withTheme, withLayout({ fullscreen: true })],
22
- parameters: { layout: 'fullscreen' },
23
- };
21
+ decorators: [withTheme],
22
+ parameters: {
23
+ layout: 'fullscreen',
24
+ },
25
+ } satisfies Meta<typeof EditorStory>;
24
26
 
25
27
  export default meta;
26
28
 
29
+ type Story = StoryObj<typeof meta>;
30
+
27
31
  //
28
32
  // Typewriter
29
33
  //
30
34
 
31
- const typewriterItems = localStorage.getItem('dxos.org/plugin/markdown/typewriter')?.split(',');
35
+ const typewriterItems = localStorage.getItem('dxos.org/testing/typewriter')?.split(',');
32
36
 
33
- export const Typewriter = {
37
+ export const Typewriter: Story = {
34
38
  render: () => (
35
39
  <EditorStory
36
40
  text={str('# Typewriter', '', content.paragraphs, content.footer)}
@@ -43,7 +47,7 @@ export const Typewriter = {
43
47
  // Blast
44
48
  //
45
49
 
46
- export const Blast = {
50
+ export const Blast: Story = {
47
51
  render: () => (
48
52
  <EditorStory
49
53
  text={str('# Blast', '', content.paragraphs, content.codeblocks, content.paragraphs)}
@@ -70,7 +74,7 @@ export const Blast = {
70
74
  // DND
71
75
  //
72
76
 
73
- export const DND = {
77
+ export const DND: Story = {
74
78
  render: () => (
75
79
  <EditorStory
76
80
  text={str('# DND', '')}
@@ -2,35 +2,39 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import '@dxos-theme';
6
-
7
5
  import { markdown } from '@codemirror/lang-markdown';
6
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
8
7
  import React from 'react';
9
8
 
10
- import { withLayout, withTheme, type Meta } from '@dxos/storybook-utils';
9
+ import { withTheme } from '@dxos/react-ui/testing';
11
10
 
12
- import { EditorStory, content, defaultExtensions, headings, renderLinkTooltip, text } from './components';
13
11
  import { decorateMarkdown, image, linkTooltip, table } from '../extensions';
14
- import { str } from '../testing';
12
+ import { str } from '../util';
13
+
14
+ import { EditorStory, content, defaultExtensions, headings, renderLinkTooltip, text } from './components';
15
15
 
16
- const meta: Meta<typeof EditorStory> = {
16
+ const meta = {
17
17
  title: 'ui/react-ui-editor/Markdown',
18
18
  component: EditorStory,
19
- decorators: [withTheme, withLayout({ fullscreen: true })],
20
- parameters: { layout: 'fullscreen' },
21
- };
19
+ decorators: [withTheme],
20
+ parameters: {
21
+ layout: 'fullscreen',
22
+ },
23
+ } satisfies Meta<typeof EditorStory>;
22
24
 
23
25
  export default meta;
24
26
 
27
+ type Story = StoryObj<typeof meta>;
28
+
25
29
  //
26
30
  // Default
27
31
  //
28
32
 
29
- export const Default = {
33
+ export const Default: Story = {
30
34
  render: () => <EditorStory text={text} extensions={defaultExtensions} />,
31
35
  };
32
36
 
33
- export const Blockquote = {
37
+ export const Blockquote: Story = {
34
38
  render: () => (
35
39
  <EditorStory
36
40
  text={str('> Blockquote', 'continuation', content.footer)}
@@ -40,23 +44,23 @@ export const Blockquote = {
40
44
  ),
41
45
  };
42
46
 
43
- export const Headings = {
47
+ export const Headings: Story = {
44
48
  render: () => <EditorStory text={headings} extensions={decorateMarkdown({ numberedHeadings: { from: 2, to: 4 } })} />,
45
49
  };
46
50
 
47
- export const Links = {
51
+ export const Links: Story = {
48
52
  render: () => <EditorStory text={str(content.links, content.footer)} extensions={[linkTooltip(renderLinkTooltip)]} />,
49
53
  };
50
54
 
51
- export const Image = {
55
+ export const Image: Story = {
52
56
  render: () => <EditorStory text={str(content.image, content.footer)} extensions={[image()]} />,
53
57
  };
54
58
 
55
- export const Code = {
59
+ export const Code: Story = {
56
60
  render: () => <EditorStory text={str(content.codeblocks, content.footer)} extensions={[decorateMarkdown()]} />,
57
61
  };
58
62
 
59
- export const Lists = {
63
+ export const Lists: Story = {
60
64
  render: () => (
61
65
  <EditorStory
62
66
  text={str(content.tasks, '', content.bullets, '', content.numbered, content.footer)}
@@ -69,7 +73,7 @@ export const Lists = {
69
73
  // Bullet List
70
74
  //
71
75
 
72
- export const BulletList = {
76
+ export const BulletList: Story = {
73
77
  render: () => <EditorStory text={str(content.bullets, content.footer)} extensions={[decorateMarkdown()]} />,
74
78
  };
75
79
 
@@ -77,7 +81,7 @@ export const BulletList = {
77
81
  // Ordered List
78
82
  //
79
83
 
80
- export const OrderedList = {
84
+ export const OrderedList: Story = {
81
85
  render: () => <EditorStory text={str(content.numbered, content.footer)} extensions={[decorateMarkdown()]} />,
82
86
  };
83
87
 
@@ -85,13 +89,13 @@ export const OrderedList = {
85
89
  // Task List
86
90
  //
87
91
 
88
- export const TaskList = {
92
+ export const TaskList: Story = {
89
93
  render: () => (
90
94
  <EditorStory text={str(content.tasks, content.footer)} extensions={[decorateMarkdown()]} debug='raw+tree' />
91
95
  ),
92
96
  };
93
97
 
94
- export const TaskListEmpty = {
98
+ export const TaskListEmpty: Story = {
95
99
  render: () => <EditorStory text={str('- [ ] ')} extensions={[decorateMarkdown()]} debug='raw+tree' />,
96
100
  };
97
101
 
@@ -99,7 +103,7 @@ export const TaskListEmpty = {
99
103
  // Table
100
104
  //
101
105
 
102
- export const Table = {
106
+ export const Table: Story = {
103
107
  render: () => <EditorStory text={str(content.table, content.footer)} extensions={[decorateMarkdown(), table()]} />,
104
108
  };
105
109
 
@@ -107,7 +111,7 @@ export const Table = {
107
111
  // Commented out
108
112
  //
109
113
 
110
- export const CommentedOut = {
114
+ export const CommentedOut: Story = {
111
115
  render: () => (
112
116
  <EditorStory
113
117
  text={str('# Commented out', '', content.comment, content.footer)}