@dxos/react-ui-editor 0.8.4-main.ead640a → 0.8.4-main.effb148878

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 (432) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +1 -1
  3. package/dist/lib/browser/index.mjs +1105 -8387
  4. package/dist/lib/browser/index.mjs.map +4 -4
  5. package/dist/lib/browser/meta.json +1 -1
  6. package/dist/lib/browser/translations.mjs +39 -0
  7. package/dist/lib/browser/translations.mjs.map +7 -0
  8. package/dist/lib/node-esm/index.mjs +1105 -8386
  9. package/dist/lib/node-esm/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/meta.json +1 -1
  11. package/dist/lib/node-esm/translations.mjs +41 -0
  12. package/dist/lib/node-esm/translations.mjs.map +7 -0
  13. package/dist/types/src/components/Editor/Editor.d.ts +53 -29
  14. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  15. package/dist/types/src/components/Editor/Editor.stories.d.ts +16 -20
  16. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -1
  17. package/dist/types/src/components/Editor/EditorView.d.ts +31 -0
  18. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  19. package/dist/types/src/components/Editor/controller.d.ts +10 -0
  20. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  21. package/dist/types/src/{extensions/popover/PopoverMenuProvider.d.ts → components/EditorMenuProvider/EditorMenuProvider.d.ts} +7 -9
  22. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  24. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  26. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  28. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  29. package/dist/types/src/{extensions/popover → components/EditorMenuProvider}/popover.d.ts +2 -2
  30. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  32. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  34. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  35. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  36. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  37. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  38. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  40. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  42. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  44. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  46. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  48. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -17
  50. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  51. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  52. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  53. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  54. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  55. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  56. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  57. package/dist/types/src/components/index.d.ts +2 -1
  58. package/dist/types/src/components/index.d.ts.map +1 -1
  59. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  60. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  61. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  62. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  63. package/dist/types/src/extensions/index.d.ts +1 -25
  64. package/dist/types/src/extensions/index.d.ts.map +1 -1
  65. package/dist/types/src/hooks/index.d.ts +1 -0
  66. package/dist/types/src/hooks/index.d.ts.map +1 -1
  67. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  68. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  69. package/dist/types/src/hooks/useTextEditor.d.ts +2 -2
  70. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  71. package/dist/types/src/index.d.ts +0 -9
  72. package/dist/types/src/index.d.ts.map +1 -1
  73. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  74. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  75. package/dist/types/src/stories/Comments.stories.d.ts +4 -3
  76. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  78. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Experimental.stories.d.ts +5 -4
  80. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Markdown.stories.d.ts +4 -3
  82. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  84. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  85. package/dist/types/src/stories/Popover.stories.d.ts +3 -3
  86. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -1
  87. package/dist/types/src/stories/Preview.stories.d.ts +5 -3
  88. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  89. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  90. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -3
  91. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  92. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  93. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  94. package/dist/types/src/stories/components/EditorStory.d.ts +11 -20
  95. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  96. package/dist/types/src/stories/components/util.d.ts +4 -3
  97. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  98. package/dist/types/src/translations.d.ts +26 -26
  99. package/dist/types/src/translations.d.ts.map +1 -1
  100. package/dist/types/src/util/index.d.ts +0 -5
  101. package/dist/types/src/util/index.d.ts.map +1 -1
  102. package/dist/types/src/util/react.d.ts +6 -5
  103. package/dist/types/src/util/react.d.ts.map +1 -1
  104. package/dist/types/tsconfig.tsbuildinfo +1 -1
  105. package/package.json +94 -90
  106. package/src/components/Editor/Editor.stories.tsx +69 -49
  107. package/src/components/Editor/Editor.tsx +165 -61
  108. package/src/components/Editor/EditorView.tsx +102 -0
  109. package/src/components/Editor/controller.ts +50 -0
  110. package/src/{extensions/popover/PopoverMenuProvider.tsx → components/EditorMenuProvider/EditorMenuProvider.tsx} +49 -44
  111. package/src/components/EditorMenuProvider/index.ts +10 -0
  112. package/src/{extensions/popover → components/EditorMenuProvider}/menu-presets.ts +20 -19
  113. package/src/{extensions/popover → components/EditorMenuProvider}/menu.ts +21 -18
  114. package/src/{extensions/popover → components/EditorMenuProvider}/popover.ts +5 -9
  115. package/src/{extensions/popover/usePopoverMenu.ts → components/EditorMenuProvider/useEditorMenu.ts} +29 -22
  116. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  117. package/src/components/EditorPreviewProvider/index.ts +5 -0
  118. package/src/components/EditorToolbar/EditorToolbar.tsx +90 -112
  119. package/src/components/EditorToolbar/blocks.ts +55 -47
  120. package/src/components/EditorToolbar/formatting.ts +44 -45
  121. package/src/components/EditorToolbar/headings.ts +47 -50
  122. package/src/components/EditorToolbar/image.ts +16 -14
  123. package/src/components/EditorToolbar/index.ts +2 -7
  124. package/src/components/EditorToolbar/lists.ts +42 -40
  125. package/src/components/EditorToolbar/search.ts +16 -14
  126. package/src/components/EditorToolbar/types.ts +8 -0
  127. package/src/components/EditorToolbar/view-mode.ts +37 -42
  128. package/src/components/index.ts +3 -1
  129. package/src/extensions/Assistant.stories.tsx +112 -0
  130. package/src/extensions/assistant-extension.tsx +223 -0
  131. package/src/extensions/index.ts +2 -26
  132. package/src/hooks/index.ts +1 -0
  133. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  134. package/src/hooks/useTextEditor.ts +13 -7
  135. package/src/index.ts +0 -13
  136. package/src/stories/Automerge.stories.tsx +177 -0
  137. package/src/stories/Comments.stories.tsx +49 -45
  138. package/src/stories/EditorToolbar.stories.tsx +42 -55
  139. package/src/stories/Experimental.stories.tsx +14 -16
  140. package/src/stories/Markdown.stories.tsx +16 -16
  141. package/src/stories/Outliner.stories.tsx +20 -29
  142. package/src/stories/Popover.stories.tsx +48 -54
  143. package/src/stories/Preview.stories.tsx +103 -85
  144. package/src/stories/Tags.stories.tsx +36 -13
  145. package/src/stories/TextEditor.stories.tsx +15 -21
  146. package/src/stories/Theme.stories.tsx +61 -0
  147. package/src/stories/components/EditorStory.tsx +46 -32
  148. package/src/stories/components/util.tsx +90 -59
  149. package/src/translations.ts +30 -25
  150. package/src/util/index.ts +1 -6
  151. package/src/util/react.tsx +8 -13
  152. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  153. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  154. package/dist/lib/browser/testing/index.mjs +0 -76
  155. package/dist/lib/browser/testing/index.mjs.map +0 -7
  156. package/dist/lib/browser/types/index.mjs +0 -13
  157. package/dist/lib/browser/types/index.mjs.map +0 -7
  158. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  159. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  160. package/dist/lib/node-esm/testing/index.mjs +0 -78
  161. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  162. package/dist/lib/node-esm/types/index.mjs +0 -14
  163. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  164. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  165. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  166. package/dist/types/src/defaults.d.ts +0 -14
  167. package/dist/types/src/defaults.d.ts.map +0 -1
  168. package/dist/types/src/extensions/annotations.d.ts +0 -9
  169. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  170. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts +0 -26
  171. package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +0 -1
  172. package/dist/types/src/extensions/autocomplete/index.d.ts +0 -5
  173. package/dist/types/src/extensions/autocomplete/index.d.ts.map +0 -1
  174. package/dist/types/src/extensions/autocomplete/match.d.ts +0 -13
  175. package/dist/types/src/extensions/autocomplete/match.d.ts.map +0 -1
  176. package/dist/types/src/extensions/autocomplete/placeholder.d.ts +0 -20
  177. package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +0 -1
  178. package/dist/types/src/extensions/autocomplete/typeahead.d.ts +0 -10
  179. package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +0 -1
  180. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  181. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  182. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  183. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  184. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  185. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  186. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  187. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  188. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  189. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  190. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  191. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  192. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  193. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  194. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  195. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  196. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  197. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  198. package/dist/types/src/extensions/autoscroll.d.ts +0 -10
  199. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  200. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  201. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  202. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  203. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  204. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  205. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  206. package/dist/types/src/extensions/blast.d.ts +0 -25
  207. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  208. package/dist/types/src/extensions/comments.d.ts +0 -95
  209. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  210. package/dist/types/src/extensions/debug.d.ts +0 -3
  211. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  212. package/dist/types/src/extensions/dnd.d.ts +0 -9
  213. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  214. package/dist/types/src/extensions/factories.d.ts +0 -83
  215. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  216. package/dist/types/src/extensions/focus.d.ts +0 -7
  217. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  218. package/dist/types/src/extensions/folding.d.ts +0 -7
  219. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  220. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  221. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  222. package/dist/types/src/extensions/json.d.ts +0 -7
  223. package/dist/types/src/extensions/json.d.ts.map +0 -1
  224. package/dist/types/src/extensions/listener.d.ts +0 -11
  225. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  226. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  227. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  228. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  229. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  230. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  231. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  232. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  233. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  234. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  235. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  236. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  237. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  238. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  239. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  240. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  241. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  243. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  245. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  247. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  249. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  251. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  253. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  255. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  256. package/dist/types/src/extensions/mention.d.ts +0 -7
  257. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  258. package/dist/types/src/extensions/modes.d.ts +0 -10
  259. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  260. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  261. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  262. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  263. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  264. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  265. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  266. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  267. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  268. package/dist/types/src/extensions/outliner/menu.d.ts +0 -8
  269. package/dist/types/src/extensions/outliner/menu.d.ts.map +0 -1
  270. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  271. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  272. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  273. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  274. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  275. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  277. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  279. package/dist/types/src/extensions/outliner/tree.test.d.ts.map +0 -1
  280. package/dist/types/src/extensions/popover/PopoverMenuProvider.d.ts.map +0 -1
  281. package/dist/types/src/extensions/popover/index.d.ts +0 -8
  282. package/dist/types/src/extensions/popover/index.d.ts.map +0 -1
  283. package/dist/types/src/extensions/popover/menu-presets.d.ts +0 -4
  284. package/dist/types/src/extensions/popover/menu-presets.d.ts.map +0 -1
  285. package/dist/types/src/extensions/popover/menu.d.ts +0 -24
  286. package/dist/types/src/extensions/popover/menu.d.ts.map +0 -1
  287. package/dist/types/src/extensions/popover/modal.d.ts +0 -7
  288. package/dist/types/src/extensions/popover/modal.d.ts.map +0 -1
  289. package/dist/types/src/extensions/popover/popover.d.ts.map +0 -1
  290. package/dist/types/src/extensions/popover/usePopoverMenu.d.ts +0 -34
  291. package/dist/types/src/extensions/popover/usePopoverMenu.d.ts.map +0 -1
  292. package/dist/types/src/extensions/popover/util.d.ts +0 -8
  293. package/dist/types/src/extensions/popover/util.d.ts.map +0 -1
  294. package/dist/types/src/extensions/preview/index.d.ts +0 -2
  295. package/dist/types/src/extensions/preview/index.d.ts.map +0 -1
  296. package/dist/types/src/extensions/preview/preview.d.ts +0 -28
  297. package/dist/types/src/extensions/preview/preview.d.ts.map +0 -1
  298. package/dist/types/src/extensions/selection.d.ts +0 -24
  299. package/dist/types/src/extensions/selection.d.ts.map +0 -1
  300. package/dist/types/src/extensions/state.d.ts +0 -2
  301. package/dist/types/src/extensions/state.d.ts.map +0 -1
  302. package/dist/types/src/extensions/tags/extended-markdown.d.ts +0 -10
  303. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  304. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  305. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  306. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  307. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  308. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  309. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  310. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -72
  311. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  312. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  313. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  314. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  315. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  316. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  317. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  318. package/dist/types/src/styles/index.d.ts +0 -4
  319. package/dist/types/src/styles/index.d.ts.map +0 -1
  320. package/dist/types/src/styles/markdown.d.ts +0 -8
  321. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  322. package/dist/types/src/styles/theme.d.ts +0 -38
  323. package/dist/types/src/styles/theme.d.ts.map +0 -1
  324. package/dist/types/src/styles/tokens.d.ts +0 -3
  325. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  326. package/dist/types/src/testing/PreviewPopover.d.ts +0 -20
  327. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  328. package/dist/types/src/testing/index.d.ts +0 -3
  329. package/dist/types/src/testing/index.d.ts.map +0 -1
  330. package/dist/types/src/testing/util.d.ts +0 -3
  331. package/dist/types/src/testing/util.d.ts.map +0 -1
  332. package/dist/types/src/types/index.d.ts +0 -2
  333. package/dist/types/src/types/index.d.ts.map +0 -1
  334. package/dist/types/src/types/types.d.ts +0 -21
  335. package/dist/types/src/types/types.d.ts.map +0 -1
  336. package/dist/types/src/util/cursor.d.ts +0 -31
  337. package/dist/types/src/util/cursor.d.ts.map +0 -1
  338. package/dist/types/src/util/debug.d.ts +0 -17
  339. package/dist/types/src/util/debug.d.ts.map +0 -1
  340. package/dist/types/src/util/decorations.d.ts +0 -4
  341. package/dist/types/src/util/decorations.d.ts.map +0 -1
  342. package/dist/types/src/util/dom.d.ts +0 -10
  343. package/dist/types/src/util/dom.d.ts.map +0 -1
  344. package/dist/types/src/util/facet.d.ts +0 -3
  345. package/dist/types/src/util/facet.d.ts.map +0 -1
  346. package/src/components/EditorToolbar/util.ts +0 -76
  347. package/src/defaults.ts +0 -52
  348. package/src/extensions/annotations.ts +0 -55
  349. package/src/extensions/autocomplete/autocomplete.ts +0 -220
  350. package/src/extensions/autocomplete/index.ts +0 -8
  351. package/src/extensions/autocomplete/match.ts +0 -46
  352. package/src/extensions/autocomplete/placeholder.ts +0 -117
  353. package/src/extensions/autocomplete/typeahead.ts +0 -87
  354. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  355. package/src/extensions/automerge/automerge.test.tsx +0 -78
  356. package/src/extensions/automerge/automerge.ts +0 -105
  357. package/src/extensions/automerge/cursor.ts +0 -28
  358. package/src/extensions/automerge/defs.ts +0 -31
  359. package/src/extensions/automerge/index.ts +0 -5
  360. package/src/extensions/automerge/sync.ts +0 -79
  361. package/src/extensions/automerge/update-automerge.ts +0 -50
  362. package/src/extensions/automerge/update-codemirror.ts +0 -115
  363. package/src/extensions/autoscroll.ts +0 -157
  364. package/src/extensions/awareness/awareness-provider.ts +0 -127
  365. package/src/extensions/awareness/awareness.ts +0 -315
  366. package/src/extensions/awareness/index.ts +0 -6
  367. package/src/extensions/blast.ts +0 -363
  368. package/src/extensions/comments.ts +0 -597
  369. package/src/extensions/debug.ts +0 -15
  370. package/src/extensions/dnd.ts +0 -37
  371. package/src/extensions/factories.ts +0 -276
  372. package/src/extensions/focus.ts +0 -36
  373. package/src/extensions/folding.tsx +0 -44
  374. package/src/extensions/hashtag.tsx +0 -68
  375. package/src/extensions/json.ts +0 -57
  376. package/src/extensions/listener.ts +0 -38
  377. package/src/extensions/markdown/action.ts +0 -117
  378. package/src/extensions/markdown/bundle.ts +0 -105
  379. package/src/extensions/markdown/changes.test.ts +0 -26
  380. package/src/extensions/markdown/changes.ts +0 -149
  381. package/src/extensions/markdown/debug.ts +0 -44
  382. package/src/extensions/markdown/decorate.ts +0 -601
  383. package/src/extensions/markdown/formatting.test.ts +0 -498
  384. package/src/extensions/markdown/formatting.ts +0 -1267
  385. package/src/extensions/markdown/highlight.ts +0 -183
  386. package/src/extensions/markdown/image.ts +0 -118
  387. package/src/extensions/markdown/index.ts +0 -13
  388. package/src/extensions/markdown/link.ts +0 -50
  389. package/src/extensions/markdown/parser.test.ts +0 -75
  390. package/src/extensions/markdown/styles.ts +0 -135
  391. package/src/extensions/markdown/table.ts +0 -150
  392. package/src/extensions/mention.ts +0 -41
  393. package/src/extensions/modes.ts +0 -41
  394. package/src/extensions/outliner/commands.ts +0 -270
  395. package/src/extensions/outliner/editor.test.ts +0 -33
  396. package/src/extensions/outliner/editor.ts +0 -184
  397. package/src/extensions/outliner/index.ts +0 -7
  398. package/src/extensions/outliner/menu.ts +0 -128
  399. package/src/extensions/outliner/outliner.test.ts +0 -100
  400. package/src/extensions/outliner/outliner.ts +0 -167
  401. package/src/extensions/outliner/selection.ts +0 -50
  402. package/src/extensions/outliner/tree.test.ts +0 -168
  403. package/src/extensions/outliner/tree.ts +0 -317
  404. package/src/extensions/popover/index.ts +0 -12
  405. package/src/extensions/popover/modal.ts +0 -24
  406. package/src/extensions/popover/util.ts +0 -29
  407. package/src/extensions/preview/index.ts +0 -5
  408. package/src/extensions/preview/preview.ts +0 -188
  409. package/src/extensions/selection.ts +0 -100
  410. package/src/extensions/state.ts +0 -7
  411. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  412. package/src/extensions/tags/extended-markdown.ts +0 -78
  413. package/src/extensions/tags/index.ts +0 -7
  414. package/src/extensions/tags/streamer.ts +0 -243
  415. package/src/extensions/tags/xml-tags.ts +0 -393
  416. package/src/extensions/tags/xml-util.ts +0 -94
  417. package/src/extensions/typewriter.ts +0 -68
  418. package/src/stories/CommandDialog.stories.tsx +0 -78
  419. package/src/styles/index.ts +0 -7
  420. package/src/styles/markdown.ts +0 -26
  421. package/src/styles/theme.ts +0 -269
  422. package/src/styles/tokens.ts +0 -17
  423. package/src/testing/PreviewPopover.tsx +0 -80
  424. package/src/testing/index.ts +0 -6
  425. package/src/testing/util.ts +0 -7
  426. package/src/types/index.ts +0 -5
  427. package/src/types/types.ts +0 -32
  428. package/src/util/cursor.ts +0 -56
  429. package/src/util/debug.ts +0 -64
  430. package/src/util/decorations.ts +0 -21
  431. package/src/util/dom.ts +0 -34
  432. package/src/util/facet.ts +0 -13
@@ -0,0 +1,61 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type Meta, type StoryObj } from '@storybook/react-vite';
6
+ import React, { useMemo } from 'react';
7
+
8
+ import { useThemeContext } from '@dxos/react-ui';
9
+ import { withLayout, withTheme } from '@dxos/react-ui/testing';
10
+ import { createBasicExtensions, createThemeExtensions } from '@dxos/ui-editor';
11
+
12
+ import { Editor } from '../components';
13
+
14
+ const createText = (monospace?: boolean) =>
15
+ [`${monospace ? 'monospace' : 'body'}`, 'Hello world', '0123456789'].join('\n');
16
+
17
+ const DefaultStory = () => {
18
+ const { themeMode } = useThemeContext();
19
+ const [ext1, ext2] = useMemo(
20
+ () => [
21
+ //
22
+ [
23
+ createBasicExtensions({ placeholder: 'Enter text', search: true }),
24
+ createThemeExtensions({ themeMode, monospace: false }),
25
+ ],
26
+ [
27
+ createBasicExtensions({ placeholder: 'Enter text', search: true }),
28
+ createThemeExtensions({ themeMode, monospace: true }),
29
+ ],
30
+ ],
31
+ [],
32
+ );
33
+
34
+ return (
35
+ <div className='w-full grid grid-cols-2 gap-2'>
36
+ <Editor.Root>
37
+ <Editor.View classNames='p-2' extensions={ext1} initialValue={createText(false)} />
38
+ </Editor.Root>
39
+ <Editor.Root>
40
+ <Editor.View classNames='p-2' extensions={ext2} initialValue={createText(true)} />
41
+ </Editor.Root>
42
+ </div>
43
+ );
44
+ };
45
+
46
+ const meta: Meta<typeof DefaultStory> = {
47
+ title: 'ui/react-ui-editor/Theme',
48
+ component: DefaultStory,
49
+ decorators: [withTheme(), withLayout({ layout: 'fullscreen' })],
50
+ parameters: {
51
+ layout: 'fullscreen',
52
+ },
53
+ };
54
+
55
+ export default meta;
56
+
57
+ type Story = StoryObj<typeof meta>;
58
+
59
+ export const Default: Story = {
60
+ args: {},
61
+ };
@@ -3,30 +3,29 @@
3
3
  //
4
4
 
5
5
  import { type EditorView } from '@codemirror/view';
6
- import React, { type ReactNode, forwardRef, useEffect, useImperativeHandle, useMemo, useState } from 'react';
6
+ import React, { type ReactNode, forwardRef, useEffect, useImperativeHandle, useMemo, useRef, useState } from 'react';
7
7
 
8
- import { Expando } from '@dxos/echo/internal';
9
- import { live } from '@dxos/echo/internal';
8
+ import { Obj } from '@dxos/echo';
9
+ import { TestSchema } from '@dxos/echo/testing';
10
10
  import { invariant } from '@dxos/invariant';
11
11
  import { PublicKey } from '@dxos/keys';
12
- import { createDocAccessor, createObject } from '@dxos/react-client/echo';
13
- import { useForwardedRef, useThemeContext } from '@dxos/react-ui';
12
+ import { log } from '@dxos/log';
13
+ import { useMergeRefs, useThemeContext } from '@dxos/react-ui';
14
14
  import { useAttentionAttributes } from '@dxos/react-ui-attention';
15
- import { JsonFilter } from '@dxos/react-ui-syntax-highlighter';
16
- import { mx } from '@dxos/react-ui-theme';
17
- import { isNonNullable } from '@dxos/util';
18
-
19
- import { editorGutter, editorSlots } from '../../defaults';
15
+ import { Syntax } from '@dxos/react-ui-syntax-highlighter';
20
16
  import {
21
17
  type DebugNode,
22
18
  type ThemeExtensionsOptions,
23
19
  createBasicExtensions,
24
- createDataExtensions,
25
20
  createMarkdownExtensions,
26
21
  createThemeExtensions,
27
22
  debugTree,
28
- decorateMarkdown,
29
- } from '../../extensions';
23
+ documentSlots,
24
+ } from '@dxos/ui-editor';
25
+ import { mx } from '@dxos/ui-theme';
26
+ import { isNonNullable } from '@dxos/util';
27
+
28
+ import { type EditorController, createEditorController } from '../../components';
30
29
  import { type UseTextEditorProps, useTextEditor } from '../../hooks';
31
30
 
32
31
  // Type definitions.
@@ -34,33 +33,37 @@ export type DebugMode = 'raw' | 'tree' | 'raw+tree';
34
33
 
35
34
  const defaultId = 'editor-' + PublicKey.random().toHex().slice(0, 8);
36
35
 
37
- export type StoryProps = Pick<UseTextEditorProps, 'id' | 'scrollTo' | 'selection' | 'extensions'> &
36
+ export type EditorStoryProps = Pick<UseTextEditorProps, 'id' | 'scrollTo' | 'selection' | 'extensions'> &
38
37
  Pick<ThemeExtensionsOptions, 'slots'> & {
39
38
  debug?: DebugMode;
40
39
  debugCustom?: (view: EditorView) => ReactNode;
41
40
  text?: string;
42
- object?: Expando;
41
+ object?: Obj.OfShape<TestSchema.Expando>;
43
42
  readOnly?: boolean;
44
43
  placeholder?: string;
45
44
  lineNumbers?: boolean;
45
+ monospace?: boolean;
46
46
  onReady?: (view: EditorView) => void;
47
47
  };
48
48
 
49
- export const EditorStory = forwardRef<EditorView | null, StoryProps>(
50
- ({ debug, debugCustom, text, extensions: _extensions, ...props }, forwardedRef) => {
49
+ export const EditorStory = forwardRef<EditorController, EditorStoryProps>(
50
+ ({ debug, debugCustom, text, extensions: extensionsProp, ...props }, forwardedRef) => {
51
+ const controllerRef = useRef<EditorController>(null);
52
+ const mergedRef = useMergeRefs([controllerRef, forwardedRef]);
53
+
51
54
  const attentionAttrs = useAttentionAttributes('test-panel');
52
55
  const [tree, setTree] = useState<DebugNode>();
53
- const [object] = useState(createObject(live(Expando, { content: text ?? '' })));
54
- const viewRef = useForwardedRef(forwardedRef);
56
+ const [object] = useState(Obj.make(TestSchema.Expando, { content: text ?? '' }));
57
+
55
58
  const extensions = useMemo(
56
- () => (debug ? [_extensions, debugTree(setTree)].filter(isNonNullable) : _extensions),
57
- [debug, _extensions],
59
+ () => (debug ? [extensionsProp, debugTree(setTree)].filter(isNonNullable) : extensionsProp),
60
+ [debug, extensionsProp],
58
61
  );
59
62
 
60
- const view = viewRef.current;
63
+ const view = controllerRef.current?.view;
61
64
  return (
62
- <div className={mx('w-full h-full grid overflow-hidden', debug && 'grid-cols-2 lg:grid-cols-[1fr_600px]')}>
63
- <EditorComponent ref={viewRef} object={object} text={text} extensions={extensions} {...props} />
65
+ <div className={mx('dx-container grid', debug && 'grid-cols-2 lg:grid-cols-[1fr_600px]')}>
66
+ <EditorComponent ref={mergedRef} object={object} text={text} extensions={extensions} {...props} />
64
67
 
65
68
  {debug && (
66
69
  <div
@@ -73,7 +76,16 @@ export const EditorStory = forwardRef<EditorView | null, StoryProps>(
73
76
  {view?.state.doc.toString()}
74
77
  </pre>
75
78
  )}
76
- {(debug === 'tree' || debug === 'raw+tree') && <JsonFilter data={tree} classNames='p-1 text-xs' />}
79
+ {(debug === 'tree' || debug === 'raw+tree') && (
80
+ <Syntax.Root data={tree}>
81
+ <Syntax.Content>
82
+ <Syntax.Filter />
83
+ <Syntax.Viewport>
84
+ <Syntax.Code classNames='p-1 text-xs' />
85
+ </Syntax.Viewport>
86
+ </Syntax.Content>
87
+ </Syntax.Root>
88
+ )}
77
89
  </div>
78
90
  )}
79
91
  </div>
@@ -84,7 +96,7 @@ export const EditorStory = forwardRef<EditorView | null, StoryProps>(
84
96
  /**
85
97
  * Default story component.
86
98
  */
87
- export const EditorComponent = forwardRef<EditorView | null, StoryProps>(
99
+ const EditorComponent = forwardRef<EditorController, EditorStoryProps>(
88
100
  (
89
101
  {
90
102
  id = defaultId,
@@ -93,10 +105,11 @@ export const EditorComponent = forwardRef<EditorView | null, StoryProps>(
93
105
  readOnly,
94
106
  placeholder = 'New document.',
95
107
  lineNumbers,
108
+ monospace,
96
109
  scrollTo,
97
110
  selection,
98
111
  extensions,
99
- slots = editorSlots,
112
+ slots = documentSlots,
100
113
  onReady,
101
114
  },
102
115
  forwardedRef,
@@ -111,19 +124,20 @@ export const EditorComponent = forwardRef<EditorView | null, StoryProps>(
111
124
  selection,
112
125
  initialValue: text,
113
126
  extensions: [
114
- createDataExtensions({ id, text: createDocAccessor(object, ['content']) }),
115
127
  createBasicExtensions({ readOnly, placeholder, lineNumbers, scrollPastEnd: true, search: true }),
128
+ createThemeExtensions({ monospace, themeMode, syntaxHighlighting: true, slots }),
116
129
  createMarkdownExtensions(),
117
- createThemeExtensions({ themeMode, syntaxHighlighting: true, slots }),
118
- decorateMarkdown(),
119
- editorGutter,
120
130
  extensions || [],
121
131
  ],
122
132
  }),
123
133
  [id, object, extensions, themeMode],
124
134
  );
125
135
 
126
- useImperativeHandle<EditorView | null, EditorView | null>(forwardedRef, () => view, [view]);
136
+ // External controller.
137
+ useImperativeHandle(forwardedRef, () => {
138
+ log.info('view updated', { id });
139
+ return createEditorController(view);
140
+ }, [id, view]);
127
141
 
128
142
  useEffect(() => {
129
143
  if (view) {
@@ -4,12 +4,9 @@
4
4
 
5
5
  import { type Completion } from '@codemirror/autocomplete';
6
6
  import { type Extension } from '@codemirror/state';
7
- import React, { type FC } from 'react';
8
-
9
- import { faker } from '@dxos/random';
10
- import { Icon } from '@dxos/react-ui';
11
- import { mx } from '@dxos/react-ui-theme';
12
7
 
8
+ import { random } from '@dxos/random';
9
+ import { Domino } from '@dxos/ui';
13
10
  import {
14
11
  type EditorSelectionState,
15
12
  decorateMarkdown,
@@ -18,15 +15,18 @@ import {
18
15
  image,
19
16
  linkTooltip,
20
17
  table,
21
- } from '../../extensions';
22
- import { str } from '../../testing';
23
- import { createRenderer } from '../../util';
18
+ } from '@dxos/ui-editor';
19
+ import { type RenderCallback } from '@dxos/ui-editor/types';
20
+ import { safeUrl } from '@dxos/util';
21
+
22
+ import { str } from '../../util';
24
23
 
25
- export const num = () => faker.number.int({ min: 0, max: 9999 }).toLocaleString();
24
+ export const num = () => random.number.int({ min: 0, max: 9999 }).toLocaleString();
26
25
 
27
26
  export const img = '![dxos](https://dxos.network/dxos-logotype-blue.png)';
28
27
 
29
28
  export const code = str(
29
+ // prettier-ignore
30
30
  '// Code',
31
31
  'const Component = () => {',
32
32
  ' const x = 100;',
@@ -38,54 +38,77 @@ export const code = str(
38
38
  // Content blocks for stories
39
39
  export const content = {
40
40
  tasks: str(
41
- //
41
+ // prettier-ignore
42
42
  '### TaskList',
43
43
  '',
44
- `- [x] ${faker.lorem.sentences()}`,
45
- `- [ ] ${faker.lorem.sentences()}`,
46
- ` - [ ] ${faker.lorem.sentences()}`,
47
- ` - [ ] ${faker.lorem.sentences()}`,
48
- ` - [x] ${faker.lorem.sentences()}`,
44
+ `- [x] ${random.lorem.sentences()}`,
45
+ `- [ ] ${random.lorem.sentences()}`,
46
+ ` - [ ] ${random.lorem.sentences()}`,
47
+ ` - [ ] ${random.lorem.sentences()}`,
48
+ ` - [x] ${random.lorem.sentences()}`,
49
49
  '',
50
50
  ),
51
51
 
52
52
  bullets: str(
53
- //
53
+ // prettier-ignore
54
54
  '### BulletList',
55
55
  '',
56
- `- ${faker.lorem.sentences()}`,
57
- `- ${faker.lorem.sentences()}`,
58
- ` - ${faker.lorem.sentences()}`,
59
- ` - ${faker.lorem.sentences()}`,
60
- `- ${faker.lorem.sentences()}`,
56
+ `- ${random.lorem.sentences()}`,
57
+ `- ${random.lorem.sentences()}`,
58
+ ` - ${random.lorem.sentences()}`,
59
+ ` - ${random.lorem.sentences()}`,
60
+ `- ${random.lorem.sentences()}`,
61
61
  '',
62
62
  ),
63
63
 
64
64
  numbered: str(
65
- //
65
+ // prettier-ignore
66
66
  '### OrderedList (part 1)',
67
67
  '',
68
- `1. ${faker.lorem.sentences()}`,
69
- `1. ${faker.lorem.sentences()}`,
70
- `1. ${faker.lorem.sentences()}`,
71
- ` 1. ${faker.lorem.sentences()}`,
72
- ` 1. ${faker.lorem.sentences()}`,
73
- ` 1. ${faker.lorem.sentences()}`,
74
- `1. ${faker.lorem.sentences()}`,
68
+ `1. ${random.lorem.sentences()}`,
69
+ `1. ${random.lorem.sentences()}`,
70
+ `1. ${random.lorem.sentences()}`,
71
+ ` 1. ${random.lorem.sentences()}`,
72
+ ` 1. ${random.lorem.sentences()}`,
73
+ ` 1. ${random.lorem.sentences()}`,
74
+ `1. ${random.lorem.sentences()}`,
75
75
  '',
76
76
  '### OrderedList (part 2)',
77
77
  '',
78
- `1. ${faker.lorem.sentences()}`,
78
+ `1. ${random.lorem.sentences()}`,
79
79
  '',
80
80
  ),
81
81
 
82
82
  typescript: code,
83
83
 
84
- codeblocks: str('### Code', '', '```bash', '$ ls -las', '```', '', '```tsx', code, '```', ''),
84
+ codeblocks: str(
85
+ // prettier-ignore
86
+ '### Code',
87
+ '',
88
+ '```bash',
89
+ '$ ls -las',
90
+ '```',
91
+ '',
92
+ '```tsx',
93
+ code,
94
+ '```',
95
+ '',
96
+ ),
85
97
 
86
- comment: str('<!--', 'A comment', '-->', '', 'No comment.', 'Partial comment. <!-- comment. -->'),
98
+ comment: str(
99
+ // prettier-ignore
100
+ '### Comment',
101
+ '',
102
+ '<!--',
103
+ 'A comment',
104
+ '-->',
105
+ '',
106
+ 'Partial comment. <!-- comment. -->',
107
+ '',
108
+ ),
87
109
 
88
110
  links: str(
111
+ // prettier-ignore
89
112
  '### Links',
90
113
  '',
91
114
  'This is a naked link https://dxos.org within a sentence.',
@@ -97,9 +120,10 @@ export const content = {
97
120
  ),
98
121
 
99
122
  table: str(
123
+ // prettier-ignore
100
124
  '### Tables',
101
125
  '',
102
- `| ${faker.lorem.word().padStart(12)} | ${faker.lorem.word().padStart(12)} | ${faker.lorem.word().padStart(12)} |`,
126
+ `| ${random.lorem.word().padStart(12)} | ${random.lorem.word().padStart(12)} | ${random.lorem.word().padStart(12)} |`,
103
127
  `|-${''.padStart(12, '-')}-|-${''.padStart(12, '-')}-|-${''.padStart(12, '-')}-|`,
104
128
  `| ${num().padStart(12)} | ${num().padStart(12)} | ${num().padStart(12)} |`,
105
129
  `| ${num().padStart(12)} | ${num().padStart(12)} | ${num().padStart(12)} |`,
@@ -110,12 +134,21 @@ export const content = {
110
134
  image: str('### Image', '', img),
111
135
 
112
136
  headings: str(
113
- ...[1, 2, 3, 4, 5, 6].map((level) => ['#'.repeat(level) + ` Heading ${level}`, faker.lorem.sentences(), '']).flat(),
137
+ ...[1, 2, 3, 4, 5, 6]
138
+ .map((level) => ['#'.repeat(level) + ` Heading ${level}`, random.lorem.sentences(), ''])
139
+ .flat(),
114
140
  ),
115
141
 
116
- formatting: str('### Formatting', '', 'This this is **bold**, ~~strikethrough~~, _italic_, and `f(INLINE)`.', ''),
142
+ formatting: str(
143
+ // prettier-ignore
144
+ '### Formatting',
145
+ '',
146
+ 'This this is **bold**, ~~strikethrough~~, _italic_, and `f(INLINE)`.',
147
+ '',
148
+ ),
117
149
 
118
150
  blockquotes: str(
151
+ // prettier-ignore
119
152
  '### Blockquotes',
120
153
  '',
121
154
  '> This is a block quote.',
@@ -128,7 +161,7 @@ export const content = {
128
161
  '',
129
162
  ),
130
163
 
131
- paragraphs: str(...faker.helpers.multiple(() => [faker.lorem.paragraph(), ''], { count: 3 }).flat()),
164
+ paragraphs: str(...random.helpers.multiple(() => [random.lorem.paragraph(), ''], { count: 3 }).flat()),
132
165
 
133
166
  footer: str('', '', '', '', ''),
134
167
  };
@@ -154,6 +187,7 @@ export const text = str(
154
187
  '---',
155
188
  '## Misc',
156
189
  content.codeblocks,
190
+ content.comment,
157
191
  content.table,
158
192
  content.image,
159
193
  content.footer,
@@ -172,30 +206,27 @@ export const links: Completion[] = [
172
206
  export const names = ['adam', 'alice', 'alison', 'bob', 'carol', 'charlie', 'sayuri', 'shoko'];
173
207
 
174
208
  const hover =
175
- 'rounded-sm text-baseText text-primary-600 hover:text-primary-500 dark:text-primary-300 hover:dark:text-primary-200';
176
-
177
- const LinkTooltip: FC<{ url: string }> = ({ url }) => {
178
- const web = new URL(url);
179
- return (
180
- <a href={url} target='_blank' rel='noreferrer' className={mx(hover, 'flex items-center gap-2')}>
181
- {web.origin}
182
- <Icon icon='ph--arrow-square-out--regular' size={4} />
183
- </a>
209
+ 'rounded-xs text-base-foreground text-primary-600 hover:text-primary-500 dark:text-primary-300 hover:dark:text-primary-200';
210
+
211
+ export const renderLinkTooltip: RenderCallback<{ url: string }> = (el, { url }) => {
212
+ el.appendChild(
213
+ Domino.of('a')
214
+ .attributes({ href: url, target: '_blank', rel: 'noreferrer', 'aria-label': 'Open link' })
215
+ .classNames(hover, 'flex items-center gap-2')
216
+ .text(safeUrl(url)?.toString() ?? url)
217
+ .append(Domino.svg('ph--arrow-square-out--regular')).root,
184
218
  );
185
219
  };
186
220
 
187
- export const renderLinkTooltip = createRenderer(LinkTooltip);
188
-
189
- const LinkButton: FC<{ url: string }> = ({ url }) => {
190
- return (
191
- <a href={url} target='_blank' rel='noreferrer' className={mx(hover)}>
192
- <Icon icon='ph--arrow-square-out--regular' size={4} classNames='inline-block mis-1 mb-[3px]' />
193
- </a>
221
+ export const renderLinkButton: RenderCallback<{ url: string }> = (el, { url }) => {
222
+ el.appendChild(
223
+ Domino.of('span')
224
+ .attributes({ 'aria-hidden': 'true' })
225
+ .classNames(hover, 'ms-1 inline-block align-[-0.125em]')
226
+ .append(Domino.svg('ph--arrow-square-out--regular')).root,
194
227
  );
195
228
  };
196
229
 
197
- export const renderLinkButton = createRenderer(LinkButton);
198
-
199
230
  // Shared extensions.
200
231
  export const defaultExtensions: Extension[] = [
201
232
  decorateMarkdown({ renderLinkButton, selectionChangeDelay: 100 }),
@@ -213,18 +244,18 @@ export const allExtensions: Extension[] = [
213
244
  ];
214
245
 
215
246
  // Long text for scrolling stories.
216
- export const longText = faker.helpers
217
- .multiple(() => faker.lorem.paragraph({ min: 8, max: 16 }), { count: 20 })
247
+ export const longText = random.helpers
248
+ .multiple(() => random.lorem.paragraph({ min: 8, max: 16 }), { count: 20 })
218
249
  .join('\n\n');
219
250
 
220
- export const largeWithImages = faker.helpers
221
- .multiple(() => [faker.lorem.paragraph({ min: 12, max: 16 }), img], { count: 20 })
251
+ export const largeWithImages = random.helpers
252
+ .multiple(() => [random.lorem.paragraph({ min: 12, max: 16 }), img], { count: 20 })
222
253
  .flatMap((x) => x)
223
254
  .join('\n\n');
224
255
 
225
256
  export const headings = str(
226
257
  ...[1, 2, 2, 3, 3, 4, 4, 4, 5, 5, 2, 3, 3, 2, 2, 6, 1]
227
- .map((level) => ['#'.repeat(level) + ' ' + faker.lorem.sentence(3), faker.lorem.sentences(), ''])
258
+ .map((level) => ['#'.repeat(level) + ' ' + random.lorem.sentence(3), random.lorem.sentences(), ''])
228
259
  .flat(),
229
260
  );
230
261
 
@@ -4,36 +4,41 @@
4
4
 
5
5
  import { type Resource } from '@dxos/react-ui';
6
6
 
7
- export const translationKey = 'react-ui-editor';
7
+ export const translationKey = '@dxos/react-ui-editor';
8
8
 
9
9
  export const translations = [
10
10
  {
11
11
  'en-US': {
12
12
  [translationKey]: {
13
- 'strong label': 'Bold',
14
- 'emphasis label': 'Italics',
15
- 'strikethrough label': 'Strikethrough',
16
- 'code label': 'Code',
17
- 'link label': 'Link',
18
- 'list-bullet label': 'Bullet list',
19
- 'list-ordered label': 'Numbered list',
20
- 'list-task label': 'Task list',
21
- 'blockquote label': 'Block quote',
22
- 'codeblock label': 'Code block',
23
- 'comment label': 'Create comment',
24
- 'selection overlaps existing comment label': 'Selection overlaps existing comment',
25
- 'select text to comment label': 'Select text to comment',
26
- 'image label': 'Insert image',
27
- 'table label': 'Create table',
28
- 'heading label': 'Heading level',
29
- 'heading level label_zero': 'Paragraph',
30
- 'heading level label_one': 'Heading level {{count}}',
31
- 'heading level label_other': 'Heading level {{count}}',
32
- 'view mode label': 'Editor view',
33
- 'preview mode label': 'Live preview',
34
- 'readonly mode label': 'Read only',
35
- 'search label': 'Search',
36
- 'source mode label': 'Source',
13
+ 'comment.label': 'Create comment',
14
+ 'image.label': 'Insert image',
15
+ 'search.label': 'Search',
16
+
17
+ 'block.label': 'Block',
18
+ 'block.blockquote.label': 'Block quote',
19
+ 'block.codeblock.label': 'Code block',
20
+ 'block.table.label': 'Create table',
21
+
22
+ 'formatting.label': 'Formatting',
23
+ 'formatting.strong.label': 'Bold',
24
+ 'formatting.emphasis.label': 'Italics',
25
+ 'formatting.strikethrough.label': 'Strikethrough',
26
+ 'formatting.code.label': 'Code',
27
+ 'formatting.link.label': 'Link',
28
+
29
+ 'list.bullet.label': 'Bullet list',
30
+ 'list.ordered.label': 'Numbered list',
31
+ 'list.task.label': 'Task list',
32
+
33
+ 'heading.label': 'Heading level',
34
+ 'heading-level.label_zero': 'Paragraph',
35
+ 'heading-level.label_one': 'Heading level {{count}}',
36
+ 'heading-level.label_other': 'Heading level {{count}}',
37
+
38
+ 'view-mode.label': 'Editor view',
39
+ 'view-mode.preview.label': 'Markdown',
40
+ 'view-mode.source.label': 'Plain text',
41
+ 'view-mode.readonly.label': 'Read only',
37
42
  },
38
43
  },
39
44
  },
package/src/util/index.ts CHANGED
@@ -1,10 +1,5 @@
1
1
  //
2
- // Copyright 2024 DXOS.org
2
+ // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './cursor';
6
- export * from './decorations';
7
- export * from './debug';
8
- export * from './dom';
9
- export * from './facet';
10
5
  export * from './react';
@@ -2,30 +2,25 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import React, { type FC, type ReactNode } from 'react';
5
+ import React, { type FC } from 'react';
6
6
  import { createRoot } from 'react-dom/client';
7
7
 
8
8
  import { ThemeProvider, Tooltip } from '@dxos/react-ui';
9
- import { defaultTx } from '@dxos/react-ui-theme';
9
+ import { defaultTx } from '@dxos/react-ui';
10
+ import { type RenderCallback } from '@dxos/ui-editor/types';
10
11
 
11
- import { type RenderCallback } from '../types';
12
-
13
- /** @deprecated */
14
- // TODO(wittjosiah): Replace with portals which are lighter weight and inherit context from the main react tree.
15
- export const renderRoot = <T extends Element>(root: T, node: ReactNode): T => {
16
- createRoot(root).render(<ThemeProvider tx={defaultTx}>{node}</ThemeProvider>);
17
- return root;
18
- };
12
+ /**
13
+ * @deprecated Use `trim` from `@dxos/util`.
14
+ */
15
+ export const str = (...lines: string[]) => lines.join('\n');
19
16
 
20
17
  /**
21
- * Utility to create a renderer for a React component.
22
18
  * @deprecated
23
19
  */
24
20
  export const createRenderer =
25
21
  <TProps extends object>(Component: FC<TProps>): RenderCallback<TProps> =>
26
22
  (el, props) => {
27
- renderRoot(
28
- el,
23
+ createRoot(el).render(
29
24
  <ThemeProvider tx={defaultTx}>
30
25
  <Tooltip.Provider>
31
26
  <Component {...props} />
@@ -1,22 +0,0 @@
1
- // src/types/types.ts
2
- import * as Schema from "effect/Schema";
3
- var EditorViewModes = [
4
- "preview",
5
- "readonly",
6
- "source"
7
- ];
8
- var EditorViewMode = Schema.Union(...EditorViewModes.map((mode) => Schema.Literal(mode)));
9
- var EditorInputModes = [
10
- "default",
11
- "vim",
12
- "vscode"
13
- ];
14
- var EditorInputMode = Schema.Union(...EditorInputModes.map((mode) => Schema.Literal(mode)));
15
-
16
- export {
17
- EditorViewModes,
18
- EditorViewMode,
19
- EditorInputModes,
20
- EditorInputMode
21
- };
22
- //# sourceMappingURL=chunk-HL3YF6WC.mjs.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/types/types.ts"],
4
- "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type EditorView } from '@codemirror/view';\nimport * as Schema from 'effect/Schema';\n\n// Runtime data structure.\nexport type Range = {\n from: number;\n to: number;\n};\n\n// Persistent data structure.\n// TODO(burdon): Rename annotation?\nexport type Comment = {\n id: string;\n cursor?: string;\n};\n\n/**\n * Callback that renders into a DOM element within the editor.\n */\nexport type RenderCallback<Props extends object> = (el: HTMLElement, props: Props, view: EditorView) => void;\n\nexport const EditorViewModes = ['preview', 'readonly', 'source'] as const;\nexport const EditorViewMode = Schema.Union(...EditorViewModes.map((mode) => Schema.Literal(mode)));\nexport type EditorViewMode = Schema.Schema.Type<typeof EditorViewMode>;\n\nexport const EditorInputModes = ['default', 'vim', 'vscode'] as const;\nexport const EditorInputMode = Schema.Union(...EditorInputModes.map((mode) => Schema.Literal(mode)));\nexport type EditorInputMode = Schema.Schema.Type<typeof EditorInputMode>;\n"],
5
- "mappings": ";AAKA,YAAYA,YAAY;AAoBjB,IAAMC,kBAAkB;EAAC;EAAW;EAAY;;AAChD,IAAMC,iBAAwBC,aAAK,GAAIF,gBAAgBG,IAAI,CAACC,SAAgBC,eAAQD,IAAAA,CAAAA,CAAAA;AAGpF,IAAME,mBAAmB;EAAC;EAAW;EAAO;;AAC5C,IAAMC,kBAAyBL,aAAK,GAAII,iBAAiBH,IAAI,CAACC,SAAgBC,eAAQD,IAAAA,CAAAA,CAAAA;",
6
- "names": ["Schema", "EditorViewModes", "EditorViewMode", "Union", "map", "mode", "Literal", "EditorInputModes", "EditorInputMode"]
7
- }