@dxos/react-ui-editor 0.8.4-main.c4373fc → 0.8.4-main.cb12b3f963

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 (436) hide show
  1. package/dist/lib/browser/index.mjs +1414 -8669
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/lib/browser/translations.mjs +39 -0
  5. package/dist/lib/browser/translations.mjs.map +7 -0
  6. package/dist/lib/node-esm/index.mjs +1414 -8668
  7. package/dist/lib/node-esm/index.mjs.map +4 -4
  8. package/dist/lib/node-esm/meta.json +1 -1
  9. package/dist/lib/node-esm/translations.mjs +41 -0
  10. package/dist/lib/node-esm/translations.mjs.map +7 -0
  11. package/dist/types/src/components/Editor/Editor.d.ts +53 -20
  12. package/dist/types/src/components/Editor/Editor.d.ts.map +1 -1
  13. package/dist/types/src/components/Editor/Editor.stories.d.ts +23 -0
  14. package/dist/types/src/components/Editor/Editor.stories.d.ts.map +1 -0
  15. package/dist/types/src/components/Editor/EditorView.d.ts +31 -0
  16. package/dist/types/src/components/Editor/EditorView.d.ts.map +1 -0
  17. package/dist/types/src/components/Editor/controller.d.ts +10 -0
  18. package/dist/types/src/components/Editor/controller.d.ts.map +1 -0
  19. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts +34 -0
  20. package/dist/types/src/components/EditorMenuProvider/EditorMenuProvider.d.ts.map +1 -0
  21. package/dist/types/src/components/EditorMenuProvider/index.d.ts +6 -0
  22. package/dist/types/src/components/EditorMenuProvider/index.d.ts.map +1 -0
  23. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts +4 -0
  24. package/dist/types/src/components/EditorMenuProvider/menu-presets.d.ts.map +1 -0
  25. package/dist/types/src/components/EditorMenuProvider/menu.d.ts +28 -0
  26. package/dist/types/src/components/EditorMenuProvider/menu.d.ts.map +1 -0
  27. package/dist/types/src/components/EditorMenuProvider/popover.d.ts +47 -0
  28. package/dist/types/src/components/EditorMenuProvider/popover.d.ts.map +1 -0
  29. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts +34 -0
  30. package/dist/types/src/components/EditorMenuProvider/useEditorMenu.d.ts.map +1 -0
  31. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts +16 -0
  32. package/dist/types/src/components/EditorPreviewProvider/EditorPreviewProvider.d.ts.map +1 -0
  33. package/dist/types/src/components/EditorPreviewProvider/index.d.ts +2 -0
  34. package/dist/types/src/components/EditorPreviewProvider/index.d.ts.map +1 -0
  35. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts +28 -2
  36. package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
  37. package/dist/types/src/components/EditorToolbar/blocks.d.ts +4 -17
  38. package/dist/types/src/components/EditorToolbar/blocks.d.ts.map +1 -1
  39. package/dist/types/src/components/EditorToolbar/formatting.d.ts +4 -17
  40. package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
  41. package/dist/types/src/components/EditorToolbar/headings.d.ts +4 -17
  42. package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
  43. package/dist/types/src/components/EditorToolbar/image.d.ts +3 -15
  44. package/dist/types/src/components/EditorToolbar/image.d.ts.map +1 -1
  45. package/dist/types/src/components/EditorToolbar/index.d.ts +1 -1
  46. package/dist/types/src/components/EditorToolbar/index.d.ts.map +1 -1
  47. package/dist/types/src/components/EditorToolbar/lists.d.ts +4 -17
  48. package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
  49. package/dist/types/src/components/EditorToolbar/search.d.ts +3 -15
  50. package/dist/types/src/components/EditorToolbar/search.d.ts.map +1 -1
  51. package/dist/types/src/components/EditorToolbar/types.d.ts +6 -0
  52. package/dist/types/src/components/EditorToolbar/types.d.ts.map +1 -0
  53. package/dist/types/src/components/EditorToolbar/view-mode.d.ts +5 -18
  54. package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
  55. package/dist/types/src/components/index.d.ts +2 -2
  56. package/dist/types/src/components/index.d.ts.map +1 -1
  57. package/dist/types/src/extensions/Assistant.stories.d.ts +10 -0
  58. package/dist/types/src/extensions/Assistant.stories.d.ts.map +1 -0
  59. package/dist/types/src/extensions/assistant-extension.d.ts +24 -0
  60. package/dist/types/src/extensions/assistant-extension.d.ts.map +1 -0
  61. package/dist/types/src/extensions/index.d.ts +1 -26
  62. package/dist/types/src/extensions/index.d.ts.map +1 -1
  63. package/dist/types/src/hooks/index.d.ts +1 -0
  64. package/dist/types/src/hooks/index.d.ts.map +1 -1
  65. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts +25 -0
  66. package/dist/types/src/hooks/useBasicMarkdownExtensions.d.ts.map +1 -0
  67. package/dist/types/src/hooks/useTextEditor.d.ts +4 -8
  68. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -1
  69. package/dist/types/src/index.d.ts +0 -9
  70. package/dist/types/src/index.d.ts.map +1 -1
  71. package/dist/types/src/stories/Automerge.stories.d.ts +44 -0
  72. package/dist/types/src/stories/Automerge.stories.d.ts.map +1 -0
  73. package/dist/types/src/stories/Comments.stories.d.ts +4 -3
  74. package/dist/types/src/stories/Comments.stories.d.ts.map +1 -1
  75. package/dist/types/src/stories/EditorToolbar.stories.d.ts +29 -27
  76. package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
  77. package/dist/types/src/stories/Experimental.stories.d.ts +5 -4
  78. package/dist/types/src/stories/Experimental.stories.d.ts.map +1 -1
  79. package/dist/types/src/stories/Markdown.stories.d.ts +4 -3
  80. package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
  81. package/dist/types/src/stories/Outliner.stories.d.ts +2 -2
  82. package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
  83. package/dist/types/src/stories/{CommandMenu.stories.d.ts → Popover.stories.d.ts} +6 -5
  84. package/dist/types/src/stories/Popover.stories.d.ts.map +1 -0
  85. package/dist/types/src/stories/Preview.stories.d.ts +5 -3
  86. package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
  87. package/dist/types/src/stories/Tags.stories.d.ts.map +1 -1
  88. package/dist/types/src/stories/TextEditor.stories.d.ts +4 -4
  89. package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
  90. package/dist/types/src/stories/Theme.stories.d.ts +8 -0
  91. package/dist/types/src/stories/Theme.stories.d.ts.map +1 -0
  92. package/dist/types/src/stories/components/EditorStory.d.ts +11 -20
  93. package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
  94. package/dist/types/src/stories/components/util.d.ts +4 -3
  95. package/dist/types/src/stories/components/util.d.ts.map +1 -1
  96. package/dist/types/src/translations.d.ts +26 -26
  97. package/dist/types/src/translations.d.ts.map +1 -1
  98. package/dist/types/src/util/index.d.ts +0 -5
  99. package/dist/types/src/util/index.d.ts.map +1 -1
  100. package/dist/types/src/util/react.d.ts +6 -5
  101. package/dist/types/src/util/react.d.ts.map +1 -1
  102. package/dist/types/tsconfig.tsbuildinfo +1 -1
  103. package/package.json +80 -75
  104. package/src/components/Editor/Editor.stories.tsx +89 -0
  105. package/src/components/Editor/Editor.tsx +170 -54
  106. package/src/components/Editor/EditorView.tsx +103 -0
  107. package/src/components/Editor/controller.ts +50 -0
  108. package/src/components/EditorMenuProvider/EditorMenuProvider.tsx +226 -0
  109. package/src/components/EditorMenuProvider/index.ts +10 -0
  110. package/src/components/EditorMenuProvider/menu-presets.ts +125 -0
  111. package/src/components/EditorMenuProvider/menu.ts +70 -0
  112. package/src/components/EditorMenuProvider/popover.ts +286 -0
  113. package/src/components/EditorMenuProvider/useEditorMenu.ts +180 -0
  114. package/src/components/EditorPreviewProvider/EditorPreviewProvider.tsx +79 -0
  115. package/src/components/EditorPreviewProvider/index.ts +5 -0
  116. package/src/components/EditorToolbar/EditorToolbar.tsx +90 -112
  117. package/src/components/EditorToolbar/blocks.ts +55 -47
  118. package/src/components/EditorToolbar/formatting.ts +44 -45
  119. package/src/components/EditorToolbar/headings.ts +47 -50
  120. package/src/components/EditorToolbar/image.ts +16 -14
  121. package/src/components/EditorToolbar/index.ts +2 -7
  122. package/src/components/EditorToolbar/lists.ts +42 -40
  123. package/src/components/EditorToolbar/search.ts +16 -14
  124. package/src/components/EditorToolbar/types.ts +8 -0
  125. package/src/components/EditorToolbar/view-mode.ts +37 -42
  126. package/src/components/index.ts +3 -2
  127. package/src/extensions/Assistant.stories.tsx +112 -0
  128. package/src/extensions/assistant-extension.tsx +223 -0
  129. package/src/extensions/index.ts +2 -27
  130. package/src/hooks/index.ts +1 -0
  131. package/src/hooks/useBasicMarkdownExtensions.ts +55 -0
  132. package/src/hooks/useTextEditor.ts +33 -27
  133. package/src/index.ts +0 -13
  134. package/src/stories/Automerge.stories.tsx +174 -0
  135. package/src/stories/Comments.stories.tsx +49 -45
  136. package/src/stories/EditorToolbar.stories.tsx +42 -55
  137. package/src/stories/Experimental.stories.tsx +14 -16
  138. package/src/stories/Markdown.stories.tsx +16 -16
  139. package/src/stories/Outliner.stories.tsx +22 -24
  140. package/src/stories/Popover.stories.tsx +157 -0
  141. package/src/stories/Preview.stories.tsx +102 -84
  142. package/src/stories/Tags.stories.tsx +36 -13
  143. package/src/stories/TextEditor.stories.tsx +16 -48
  144. package/src/stories/Theme.stories.tsx +61 -0
  145. package/src/stories/components/EditorStory.tsx +46 -30
  146. package/src/stories/components/util.tsx +90 -59
  147. package/src/translations.ts +30 -25
  148. package/src/util/index.ts +1 -6
  149. package/src/util/react.tsx +8 -13
  150. package/dist/lib/browser/chunk-HL3YF6WC.mjs +0 -22
  151. package/dist/lib/browser/chunk-HL3YF6WC.mjs.map +0 -7
  152. package/dist/lib/browser/testing/index.mjs +0 -76
  153. package/dist/lib/browser/testing/index.mjs.map +0 -7
  154. package/dist/lib/browser/types/index.mjs +0 -13
  155. package/dist/lib/browser/types/index.mjs.map +0 -7
  156. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs +0 -24
  157. package/dist/lib/node-esm/chunk-YJZGD3LY.mjs.map +0 -7
  158. package/dist/lib/node-esm/testing/index.mjs +0 -78
  159. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  160. package/dist/lib/node-esm/types/index.mjs +0 -14
  161. package/dist/lib/node-esm/types/index.mjs.map +0 -7
  162. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts +0 -38
  163. package/dist/types/src/components/CommandMenu/CommandMenu.d.ts.map +0 -1
  164. package/dist/types/src/components/CommandMenu/index.d.ts +0 -2
  165. package/dist/types/src/components/CommandMenu/index.d.ts.map +0 -1
  166. package/dist/types/src/components/EditorToolbar/util.d.ts +0 -51
  167. package/dist/types/src/components/EditorToolbar/util.d.ts.map +0 -1
  168. package/dist/types/src/defaults.d.ts +0 -14
  169. package/dist/types/src/defaults.d.ts.map +0 -1
  170. package/dist/types/src/extensions/annotations.d.ts +0 -9
  171. package/dist/types/src/extensions/annotations.d.ts.map +0 -1
  172. package/dist/types/src/extensions/autocomplete.d.ts +0 -26
  173. package/dist/types/src/extensions/autocomplete.d.ts.map +0 -1
  174. package/dist/types/src/extensions/automerge/automerge.d.ts +0 -4
  175. package/dist/types/src/extensions/automerge/automerge.d.ts.map +0 -1
  176. package/dist/types/src/extensions/automerge/automerge.stories.d.ts +0 -47
  177. package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +0 -1
  178. package/dist/types/src/extensions/automerge/automerge.test.d.ts +0 -2
  179. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +0 -1
  180. package/dist/types/src/extensions/automerge/cursor.d.ts +0 -4
  181. package/dist/types/src/extensions/automerge/cursor.d.ts.map +0 -1
  182. package/dist/types/src/extensions/automerge/defs.d.ts +0 -17
  183. package/dist/types/src/extensions/automerge/defs.d.ts.map +0 -1
  184. package/dist/types/src/extensions/automerge/index.d.ts +0 -2
  185. package/dist/types/src/extensions/automerge/index.d.ts.map +0 -1
  186. package/dist/types/src/extensions/automerge/sync.d.ts +0 -17
  187. package/dist/types/src/extensions/automerge/sync.d.ts.map +0 -1
  188. package/dist/types/src/extensions/automerge/update-automerge.d.ts +0 -6
  189. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +0 -1
  190. package/dist/types/src/extensions/automerge/update-codemirror.d.ts +0 -5
  191. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +0 -1
  192. package/dist/types/src/extensions/autoscroll.d.ts +0 -10
  193. package/dist/types/src/extensions/autoscroll.d.ts.map +0 -1
  194. package/dist/types/src/extensions/awareness/awareness-provider.d.ts +0 -31
  195. package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +0 -1
  196. package/dist/types/src/extensions/awareness/awareness.d.ts +0 -46
  197. package/dist/types/src/extensions/awareness/awareness.d.ts.map +0 -1
  198. package/dist/types/src/extensions/awareness/index.d.ts +0 -3
  199. package/dist/types/src/extensions/awareness/index.d.ts.map +0 -1
  200. package/dist/types/src/extensions/blast.d.ts +0 -25
  201. package/dist/types/src/extensions/blast.d.ts.map +0 -1
  202. package/dist/types/src/extensions/command-dialog/action.d.ts +0 -17
  203. package/dist/types/src/extensions/command-dialog/action.d.ts.map +0 -1
  204. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts +0 -6
  205. package/dist/types/src/extensions/command-dialog/command-dialog.d.ts.map +0 -1
  206. package/dist/types/src/extensions/command-dialog/hint.d.ts +0 -19
  207. package/dist/types/src/extensions/command-dialog/hint.d.ts.map +0 -1
  208. package/dist/types/src/extensions/command-dialog/index.d.ts +0 -4
  209. package/dist/types/src/extensions/command-dialog/index.d.ts.map +0 -1
  210. package/dist/types/src/extensions/command-dialog/state.d.ts +0 -16
  211. package/dist/types/src/extensions/command-dialog/state.d.ts.map +0 -1
  212. package/dist/types/src/extensions/command-dialog/typeahead.d.ts +0 -22
  213. package/dist/types/src/extensions/command-dialog/typeahead.d.ts.map +0 -1
  214. package/dist/types/src/extensions/command-menu/command-menu.d.ts +0 -20
  215. package/dist/types/src/extensions/command-menu/command-menu.d.ts.map +0 -1
  216. package/dist/types/src/extensions/command-menu/index.d.ts +0 -3
  217. package/dist/types/src/extensions/command-menu/index.d.ts.map +0 -1
  218. package/dist/types/src/extensions/command-menu/placeholder.d.ts +0 -10
  219. package/dist/types/src/extensions/command-menu/placeholder.d.ts.map +0 -1
  220. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts +0 -24
  221. package/dist/types/src/extensions/command-menu/useCommandMenu.d.ts.map +0 -1
  222. package/dist/types/src/extensions/comments.d.ts +0 -95
  223. package/dist/types/src/extensions/comments.d.ts.map +0 -1
  224. package/dist/types/src/extensions/debug.d.ts +0 -3
  225. package/dist/types/src/extensions/debug.d.ts.map +0 -1
  226. package/dist/types/src/extensions/dnd.d.ts +0 -9
  227. package/dist/types/src/extensions/dnd.d.ts.map +0 -1
  228. package/dist/types/src/extensions/factories.d.ts +0 -83
  229. package/dist/types/src/extensions/factories.d.ts.map +0 -1
  230. package/dist/types/src/extensions/floating-menu.d.ts +0 -7
  231. package/dist/types/src/extensions/floating-menu.d.ts.map +0 -1
  232. package/dist/types/src/extensions/focus.d.ts +0 -7
  233. package/dist/types/src/extensions/focus.d.ts.map +0 -1
  234. package/dist/types/src/extensions/folding.d.ts +0 -7
  235. package/dist/types/src/extensions/folding.d.ts.map +0 -1
  236. package/dist/types/src/extensions/hashtag.d.ts +0 -3
  237. package/dist/types/src/extensions/hashtag.d.ts.map +0 -1
  238. package/dist/types/src/extensions/json.d.ts +0 -7
  239. package/dist/types/src/extensions/json.d.ts.map +0 -1
  240. package/dist/types/src/extensions/listener.d.ts +0 -11
  241. package/dist/types/src/extensions/listener.d.ts.map +0 -1
  242. package/dist/types/src/extensions/markdown/action.d.ts +0 -12
  243. package/dist/types/src/extensions/markdown/action.d.ts.map +0 -1
  244. package/dist/types/src/extensions/markdown/bundle.d.ts +0 -22
  245. package/dist/types/src/extensions/markdown/bundle.d.ts.map +0 -1
  246. package/dist/types/src/extensions/markdown/changes.d.ts +0 -10
  247. package/dist/types/src/extensions/markdown/changes.d.ts.map +0 -1
  248. package/dist/types/src/extensions/markdown/changes.test.d.ts +0 -2
  249. package/dist/types/src/extensions/markdown/changes.test.d.ts.map +0 -1
  250. package/dist/types/src/extensions/markdown/debug.d.ts +0 -11
  251. package/dist/types/src/extensions/markdown/debug.d.ts.map +0 -1
  252. package/dist/types/src/extensions/markdown/decorate.d.ts +0 -25
  253. package/dist/types/src/extensions/markdown/decorate.d.ts.map +0 -1
  254. package/dist/types/src/extensions/markdown/formatting.d.ts +0 -63
  255. package/dist/types/src/extensions/markdown/formatting.d.ts.map +0 -1
  256. package/dist/types/src/extensions/markdown/formatting.test.d.ts +0 -3
  257. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +0 -1
  258. package/dist/types/src/extensions/markdown/highlight.d.ts +0 -37
  259. package/dist/types/src/extensions/markdown/highlight.d.ts.map +0 -1
  260. package/dist/types/src/extensions/markdown/image.d.ts +0 -7
  261. package/dist/types/src/extensions/markdown/image.d.ts.map +0 -1
  262. package/dist/types/src/extensions/markdown/index.d.ts +0 -10
  263. package/dist/types/src/extensions/markdown/index.d.ts.map +0 -1
  264. package/dist/types/src/extensions/markdown/link.d.ts +0 -7
  265. package/dist/types/src/extensions/markdown/link.d.ts.map +0 -1
  266. package/dist/types/src/extensions/markdown/parser.test.d.ts +0 -2
  267. package/dist/types/src/extensions/markdown/parser.test.d.ts.map +0 -1
  268. package/dist/types/src/extensions/markdown/styles.d.ts +0 -4
  269. package/dist/types/src/extensions/markdown/styles.d.ts.map +0 -1
  270. package/dist/types/src/extensions/markdown/table.d.ts +0 -8
  271. package/dist/types/src/extensions/markdown/table.d.ts.map +0 -1
  272. package/dist/types/src/extensions/mention.d.ts +0 -7
  273. package/dist/types/src/extensions/mention.d.ts.map +0 -1
  274. package/dist/types/src/extensions/modes.d.ts +0 -10
  275. package/dist/types/src/extensions/modes.d.ts.map +0 -1
  276. package/dist/types/src/extensions/outliner/commands.d.ts +0 -10
  277. package/dist/types/src/extensions/outliner/commands.d.ts.map +0 -1
  278. package/dist/types/src/extensions/outliner/editor.d.ts +0 -5
  279. package/dist/types/src/extensions/outliner/editor.d.ts.map +0 -1
  280. package/dist/types/src/extensions/outliner/editor.test.d.ts +0 -2
  281. package/dist/types/src/extensions/outliner/editor.test.d.ts.map +0 -1
  282. package/dist/types/src/extensions/outliner/index.d.ts +0 -4
  283. package/dist/types/src/extensions/outliner/index.d.ts.map +0 -1
  284. package/dist/types/src/extensions/outliner/outliner.d.ts +0 -11
  285. package/dist/types/src/extensions/outliner/outliner.d.ts.map +0 -1
  286. package/dist/types/src/extensions/outliner/outliner.test.d.ts +0 -2
  287. package/dist/types/src/extensions/outliner/outliner.test.d.ts.map +0 -1
  288. package/dist/types/src/extensions/outliner/selection.d.ts +0 -12
  289. package/dist/types/src/extensions/outliner/selection.d.ts.map +0 -1
  290. package/dist/types/src/extensions/outliner/tree.d.ts +0 -79
  291. package/dist/types/src/extensions/outliner/tree.d.ts.map +0 -1
  292. package/dist/types/src/extensions/outliner/tree.test.d.ts +0 -2
  293. package/dist/types/src/extensions/outliner/tree.test.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 -29
  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/tags/extended-markdown.d.ts +0 -10
  301. package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +0 -1
  302. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts +0 -2
  303. package/dist/types/src/extensions/tags/extended-markdown.test.d.ts.map +0 -1
  304. package/dist/types/src/extensions/tags/index.d.ts +0 -4
  305. package/dist/types/src/extensions/tags/index.d.ts.map +0 -1
  306. package/dist/types/src/extensions/tags/streamer.d.ts +0 -12
  307. package/dist/types/src/extensions/tags/streamer.d.ts.map +0 -1
  308. package/dist/types/src/extensions/tags/xml-tags.d.ts +0 -72
  309. package/dist/types/src/extensions/tags/xml-tags.d.ts.map +0 -1
  310. package/dist/types/src/extensions/tags/xml-util.d.ts +0 -10
  311. package/dist/types/src/extensions/tags/xml-util.d.ts.map +0 -1
  312. package/dist/types/src/extensions/typewriter.d.ts +0 -10
  313. package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
  314. package/dist/types/src/stories/CommandDialog.stories.d.ts +0 -14
  315. package/dist/types/src/stories/CommandDialog.stories.d.ts.map +0 -1
  316. package/dist/types/src/stories/CommandMenu.stories.d.ts.map +0 -1
  317. package/dist/types/src/styles/index.d.ts +0 -4
  318. package/dist/types/src/styles/index.d.ts.map +0 -1
  319. package/dist/types/src/styles/markdown.d.ts +0 -8
  320. package/dist/types/src/styles/markdown.d.ts.map +0 -1
  321. package/dist/types/src/styles/theme.d.ts +0 -38
  322. package/dist/types/src/styles/theme.d.ts.map +0 -1
  323. package/dist/types/src/styles/tokens.d.ts +0 -3
  324. package/dist/types/src/styles/tokens.d.ts.map +0 -1
  325. package/dist/types/src/testing/PreviewPopover.d.ts +0 -20
  326. package/dist/types/src/testing/PreviewPopover.d.ts.map +0 -1
  327. package/dist/types/src/testing/index.d.ts +0 -3
  328. package/dist/types/src/testing/index.d.ts.map +0 -1
  329. package/dist/types/src/testing/util.d.ts +0 -3
  330. package/dist/types/src/testing/util.d.ts.map +0 -1
  331. package/dist/types/src/types/index.d.ts +0 -2
  332. package/dist/types/src/types/index.d.ts.map +0 -1
  333. package/dist/types/src/types/types.d.ts +0 -21
  334. package/dist/types/src/types/types.d.ts.map +0 -1
  335. package/dist/types/src/util/cursor.d.ts +0 -31
  336. package/dist/types/src/util/cursor.d.ts.map +0 -1
  337. package/dist/types/src/util/debug.d.ts +0 -17
  338. package/dist/types/src/util/debug.d.ts.map +0 -1
  339. package/dist/types/src/util/decorations.d.ts +0 -4
  340. package/dist/types/src/util/decorations.d.ts.map +0 -1
  341. package/dist/types/src/util/dom.d.ts +0 -10
  342. package/dist/types/src/util/dom.d.ts.map +0 -1
  343. package/dist/types/src/util/facet.d.ts +0 -3
  344. package/dist/types/src/util/facet.d.ts.map +0 -1
  345. package/src/components/CommandMenu/CommandMenu.tsx +0 -348
  346. package/src/components/CommandMenu/index.ts +0 -5
  347. package/src/components/EditorToolbar/util.ts +0 -76
  348. package/src/defaults.ts +0 -52
  349. package/src/extensions/annotations.ts +0 -55
  350. package/src/extensions/autocomplete.ts +0 -219
  351. package/src/extensions/automerge/automerge.stories.tsx +0 -149
  352. package/src/extensions/automerge/automerge.test.tsx +0 -78
  353. package/src/extensions/automerge/automerge.ts +0 -86
  354. package/src/extensions/automerge/cursor.ts +0 -28
  355. package/src/extensions/automerge/defs.ts +0 -31
  356. package/src/extensions/automerge/index.ts +0 -5
  357. package/src/extensions/automerge/sync.ts +0 -75
  358. package/src/extensions/automerge/update-automerge.ts +0 -50
  359. package/src/extensions/automerge/update-codemirror.ts +0 -115
  360. package/src/extensions/autoscroll.ts +0 -157
  361. package/src/extensions/awareness/awareness-provider.ts +0 -127
  362. package/src/extensions/awareness/awareness.ts +0 -315
  363. package/src/extensions/awareness/index.ts +0 -6
  364. package/src/extensions/blast.ts +0 -363
  365. package/src/extensions/command-dialog/action.ts +0 -55
  366. package/src/extensions/command-dialog/command-dialog.ts +0 -34
  367. package/src/extensions/command-dialog/hint.ts +0 -103
  368. package/src/extensions/command-dialog/index.ts +0 -7
  369. package/src/extensions/command-dialog/state.ts +0 -90
  370. package/src/extensions/command-dialog/typeahead.ts +0 -129
  371. package/src/extensions/command-menu/command-menu.ts +0 -210
  372. package/src/extensions/command-menu/index.ts +0 -6
  373. package/src/extensions/command-menu/placeholder.ts +0 -113
  374. package/src/extensions/command-menu/useCommandMenu.ts +0 -134
  375. package/src/extensions/comments.ts +0 -597
  376. package/src/extensions/debug.ts +0 -15
  377. package/src/extensions/dnd.ts +0 -37
  378. package/src/extensions/factories.ts +0 -284
  379. package/src/extensions/floating-menu.ts +0 -126
  380. package/src/extensions/focus.ts +0 -36
  381. package/src/extensions/folding.tsx +0 -44
  382. package/src/extensions/hashtag.tsx +0 -68
  383. package/src/extensions/json.ts +0 -57
  384. package/src/extensions/listener.ts +0 -38
  385. package/src/extensions/markdown/action.ts +0 -117
  386. package/src/extensions/markdown/bundle.ts +0 -93
  387. package/src/extensions/markdown/changes.test.ts +0 -26
  388. package/src/extensions/markdown/changes.ts +0 -149
  389. package/src/extensions/markdown/debug.ts +0 -44
  390. package/src/extensions/markdown/decorate.ts +0 -601
  391. package/src/extensions/markdown/formatting.test.ts +0 -498
  392. package/src/extensions/markdown/formatting.ts +0 -1267
  393. package/src/extensions/markdown/highlight.ts +0 -183
  394. package/src/extensions/markdown/image.ts +0 -118
  395. package/src/extensions/markdown/index.ts +0 -13
  396. package/src/extensions/markdown/link.ts +0 -50
  397. package/src/extensions/markdown/parser.test.ts +0 -75
  398. package/src/extensions/markdown/styles.ts +0 -135
  399. package/src/extensions/markdown/table.ts +0 -150
  400. package/src/extensions/mention.ts +0 -41
  401. package/src/extensions/modes.ts +0 -41
  402. package/src/extensions/outliner/commands.ts +0 -270
  403. package/src/extensions/outliner/editor.test.ts +0 -33
  404. package/src/extensions/outliner/editor.ts +0 -184
  405. package/src/extensions/outliner/index.ts +0 -7
  406. package/src/extensions/outliner/outliner.test.ts +0 -100
  407. package/src/extensions/outliner/outliner.ts +0 -167
  408. package/src/extensions/outliner/selection.ts +0 -50
  409. package/src/extensions/outliner/tree.test.ts +0 -168
  410. package/src/extensions/outliner/tree.ts +0 -317
  411. package/src/extensions/preview/index.ts +0 -5
  412. package/src/extensions/preview/preview.ts +0 -190
  413. package/src/extensions/selection.ts +0 -100
  414. package/src/extensions/tags/extended-markdown.test.ts +0 -261
  415. package/src/extensions/tags/extended-markdown.ts +0 -78
  416. package/src/extensions/tags/index.ts +0 -7
  417. package/src/extensions/tags/streamer.ts +0 -243
  418. package/src/extensions/tags/xml-tags.ts +0 -393
  419. package/src/extensions/tags/xml-util.ts +0 -94
  420. package/src/extensions/typewriter.ts +0 -68
  421. package/src/stories/CommandDialog.stories.tsx +0 -89
  422. package/src/stories/CommandMenu.stories.tsx +0 -158
  423. package/src/styles/index.ts +0 -7
  424. package/src/styles/markdown.ts +0 -26
  425. package/src/styles/theme.ts +0 -268
  426. package/src/styles/tokens.ts +0 -17
  427. package/src/testing/PreviewPopover.tsx +0 -78
  428. package/src/testing/index.ts +0 -6
  429. package/src/testing/util.ts +0 -7
  430. package/src/types/index.ts +0 -5
  431. package/src/types/types.ts +0 -32
  432. package/src/util/cursor.ts +0 -56
  433. package/src/util/debug.ts +0 -64
  434. package/src/util/decorations.ts +0 -21
  435. package/src/util/dom.ts +0 -34
  436. package/src/util/facet.ts +0 -13
@@ -1,597 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { invertedEffects } from '@codemirror/commands';
6
- import { type ChangeDesc, type Extension, StateEffect, StateField, type Text } from '@codemirror/state';
7
- import {
8
- type Command,
9
- Decoration,
10
- EditorView,
11
- type PluginValue,
12
- type Rect,
13
- ViewPlugin,
14
- hoverTooltip,
15
- keymap,
16
- } from '@codemirror/view';
17
- import sortBy from 'lodash.sortby';
18
- import { useEffect } from 'react';
19
-
20
- import { type CleanupFn, debounce } from '@dxos/async';
21
- import { log } from '@dxos/log';
22
- import { isNonNullable } from '@dxos/util';
23
-
24
- import { type Comment, type Range, type RenderCallback } from '../types';
25
- import { Cursor, callbackWrapper, singleValueFacet } from '../util';
26
-
27
- import { documentId } from './selection';
28
-
29
- //
30
- // State management.
31
- //
32
-
33
- type CommentState = {
34
- comment: Comment;
35
- range: Range;
36
- location?: Rect | null;
37
- };
38
-
39
- type SelectionState = {
40
- current?: string;
41
- closest?: string;
42
- };
43
-
44
- export type CommentsState = {
45
- id?: string;
46
- comments: CommentState[];
47
- selection: SelectionState;
48
- };
49
-
50
- export const setComments = StateEffect.define<{ id: string; comments: Comment[] }>();
51
-
52
- export const setSelection = StateEffect.define<SelectionState>();
53
-
54
- const setCommentState = StateEffect.define<CommentsState>();
55
-
56
- /**
57
- * State field (reducer) that tracks comment ranges.
58
- * The ranges are tracked as Automerge cursors from which the absolute indexed ranges can be computed.
59
- */
60
- export const commentsState = StateField.define<CommentsState>({
61
- create: (state) => ({
62
- id: state.facet(documentId),
63
- comments: [],
64
- selection: {},
65
- }),
66
- update: (value, tr) => {
67
- for (const effect of tr.effects) {
68
- // Update selection.
69
- if (effect.is(setSelection)) {
70
- return { ...value, selection: effect.value };
71
- }
72
-
73
- // Update range from store.
74
- if (effect.is(setComments)) {
75
- const { comments } = effect.value;
76
- const commentStates: CommentState[] = comments
77
- .map((comment) => {
78
- // Skip cut/deleted comments.
79
- if (!comment.cursor) {
80
- return undefined;
81
- }
82
-
83
- const range = Cursor.getRangeFromCursor(tr.state, comment.cursor);
84
- return range && { comment, range };
85
- })
86
- .filter(isNonNullable);
87
-
88
- return { ...value, comments: commentStates };
89
- }
90
-
91
- // Update entire state.
92
- if (effect.is(setCommentState)) {
93
- return effect.value;
94
- }
95
- }
96
-
97
- return value;
98
- },
99
- });
100
-
101
- /**
102
- * NOTE: Matches search.
103
- */
104
- const styles = EditorView.theme({
105
- '.cm-comment, .cm-comment-current': {
106
- padding: '3px 0',
107
- backgroundColor: 'var(--dx-cmCommentSurface)',
108
- },
109
- '.cm-comment > span, .cm-comment-current > span': {
110
- boxDecorationBreak: 'clone',
111
- boxShadow: '0 0 1px 3px var(--dx-cmCommentSurface)',
112
- backgroundColor: 'var(--dx-cmCommentSurface)',
113
- color: 'var(--dx-cmComment)',
114
- cursor: 'pointer',
115
- },
116
- });
117
-
118
- const createCommentMark = (id: string, isCurrent: boolean) =>
119
- Decoration.mark({
120
- class: isCurrent ? 'cm-comment-current' : 'cm-comment',
121
- attributes: {
122
- 'data-testid': 'cm-comment',
123
- 'data-comment-id': id,
124
- },
125
- });
126
-
127
- /**
128
- * Decorate ranges.
129
- */
130
- const commentsDecorations = EditorView.decorations.compute([commentsState], (state) => {
131
- const {
132
- selection: { current },
133
- comments,
134
- } = state.field(commentsState);
135
-
136
- const decorations = sortBy(comments ?? [], (range) => range.range.from)
137
- ?.flatMap((comment) => {
138
- const range = comment.range;
139
- if (!range) {
140
- log.warn('Invalid range:', range);
141
- return undefined;
142
- } else if (range.from === range.to) {
143
- // Skip empty ranges. This can happen when a comment is cut or deleted.
144
- return undefined;
145
- }
146
-
147
- const mark = createCommentMark(comment.comment.id, comment.comment.id === current);
148
- return mark.range(range.from, range.to);
149
- })
150
- .filter(isNonNullable);
151
-
152
- return Decoration.set(decorations);
153
- });
154
-
155
- export const commentClickedEffect = StateEffect.define<string>();
156
-
157
- const handleCommentClick = EditorView.domEventHandlers({
158
- click: (event, view) => {
159
- let target = event.target as HTMLElement;
160
- const editorRoot = view.dom;
161
-
162
- // Traverse up the DOM tree looking for an element with data-comment-id
163
- // Stop if we reach the editor root or find the comment id
164
- while (target && target !== editorRoot && !target.hasAttribute('data-comment-id')) {
165
- target = target.parentElement as HTMLElement;
166
- }
167
-
168
- // Check if we found a comment id and are still within the editor
169
- if (target && target !== editorRoot) {
170
- const commentId = target.getAttribute('data-comment-id');
171
- if (commentId) {
172
- view.dispatch({ effects: commentClickedEffect.of(commentId) });
173
- return true;
174
- }
175
- }
176
-
177
- return false;
178
- },
179
- });
180
-
181
- //
182
- // Cut-and-paste.
183
- //
184
-
185
- type TrackedComment = { id: string; from: number; to: number };
186
-
187
- const trackPastedComments = (onUpdate: NonNullable<CommentsOptions['onUpdate']>) => {
188
- // Tracks indexed selections within text.
189
- let tracked: { text: Text; comments: TrackedComment[] } | null = null;
190
-
191
- // Track cut or copy (enables cut-and-paste and copy-delete-paste to restore comment selection).
192
- const handleTrack = (event: Event, view: EditorView) => {
193
- const comments = view.state.field(commentsState);
194
- const { main } = view.state.selection;
195
- const selectedRanges = comments.comments.filter(
196
- ({ range }) => range.from >= main.from && range.to <= main.to && range.from < range.to,
197
- );
198
-
199
- if (!selectedRanges.length) {
200
- tracked = null;
201
- } else {
202
- tracked = {
203
- text: view.state.doc.slice(main.from, main.to),
204
- comments: selectedRanges.map(({ comment, range }) => ({
205
- id: comment.id,
206
- from: range.from - main.from,
207
- to: range.to - main.from,
208
- })),
209
- };
210
- }
211
- };
212
-
213
- return [
214
- EditorView.domEventHandlers({
215
- cut: handleTrack,
216
- copy: handleTrack,
217
- }),
218
-
219
- // Track deleted comments.
220
- invertedEffects.of((tr) => {
221
- const { comments } = tr.startState.field(commentsState);
222
- const effects: StateEffect<any>[] = [];
223
- tr.changes.iterChangedRanges((fromA, toA) => {
224
- for (const {
225
- comment: { id },
226
- range: { from, to },
227
- } of comments) {
228
- if (from < to && from >= fromA && to <= toA) {
229
- effects.push(restoreCommentEffect.of({ id, from, to }));
230
- }
231
- }
232
- });
233
-
234
- return effects;
235
- }),
236
-
237
- // Handle paste or the undo of comment deletion.
238
- EditorView.updateListener.of((update) => {
239
- const restore: TrackedComment[] = [];
240
-
241
- for (let i = 0; i < update.transactions.length; i++) {
242
- const tr = update.transactions[i];
243
- for (let j = 0; j < restore.length; j++) {
244
- restore[j] = mapTrackedComment(restore[j], tr.changes);
245
- }
246
- for (const effect of tr.effects) {
247
- if (effect.is(restoreCommentEffect)) {
248
- restore.push(effect.value);
249
- }
250
- }
251
- }
252
-
253
- if (tracked) {
254
- const paste = update.transactions.find((tr) => tr.isUserEvent('input.paste'));
255
- if (paste) {
256
- let found = -1;
257
- paste.changes.iterChanges((fromA, toA, fromB, toB, text) => {
258
- if (text.eq(tracked!.text)) {
259
- for (let i = update.transactions.indexOf(paste!) + 1; i < update.transactions.length; i++) {
260
- fromB = update.transactions[i].changes.mapPos(fromB);
261
- }
262
-
263
- found = fromB;
264
- }
265
- });
266
-
267
- if (found > -1) {
268
- for (const moved of tracked.comments) {
269
- restore.push({ id: moved.id, from: found + moved.from, to: found + moved.to });
270
- }
271
- }
272
-
273
- tracked = null;
274
- }
275
- }
276
-
277
- for (const comment of restore) {
278
- const { comments } = update.startState.field(commentsState);
279
- const exists = comments.some((c) => c.comment.id === comment.id && c.range.from < c.range.to);
280
- if (!exists) {
281
- const cursor = Cursor.getCursorFromRange(update.state, comment);
282
- onUpdate({ id: comment.id, cursor });
283
- }
284
- }
285
- }),
286
- ];
287
- };
288
-
289
- const mapTrackedComment = (comment: TrackedComment, changes: ChangeDesc) => ({
290
- id: comment.id,
291
- from: changes.mapPos(comment.from, 1),
292
- to: changes.mapPos(comment.to, 1),
293
- });
294
-
295
- /**
296
- * These are attached to undone/redone transactions in the editor for the purpose of restoring comments
297
- * that were deleted by the original changes.
298
- */
299
- const restoreCommentEffect = StateEffect.define<TrackedComment>({ map: mapTrackedComment });
300
-
301
- /**
302
- * Create comment thread action.
303
- */
304
- export const createComment: Command = (view) => {
305
- const options = view.state.facet(optionsFacet);
306
- const { from, to } = view.state.selection.main;
307
- if (from === to) {
308
- return false;
309
- }
310
-
311
- // Don't allow selection at end of document.
312
- if (to === view.state.doc.length) {
313
- view.dispatch({
314
- changes: {
315
- from: to,
316
- insert: '\n',
317
- },
318
- });
319
- }
320
-
321
- const cursor = Cursor.getCursorFromRange(view.state, { from, to });
322
- if (cursor) {
323
- // Create thread via callback.
324
- options.onCreate?.({ cursor, from, location: view.coordsAtPos(from) });
325
- return true;
326
- }
327
-
328
- return false;
329
- };
330
-
331
- //
332
- // Options
333
- //
334
-
335
- export type CommentsOptions = {
336
- /**
337
- * Document id.
338
- */
339
- id?: string;
340
- /**
341
- * Key shortcut to create a new thread.
342
- */
343
- key?: string;
344
- /**
345
- * Called to render tooltip.
346
- */
347
- renderTooltip?: RenderCallback<{ shortcut: string }>;
348
- /**
349
- * Called to create a new thread and return the thread id.
350
- */
351
- onCreate?: (params: { cursor: string; from: number; location?: Rect | null }) => void;
352
- /**
353
- * Selection cut/deleted.
354
- */
355
- onDelete?: (params: { id: string }) => void;
356
- /**
357
- * Called when a comment is moved.
358
- */
359
- onUpdate?: (params: { id: string; cursor: string }) => void;
360
- /**
361
- * Called to notify which thread is currently closest to the cursor.
362
- */
363
- onSelect?: (state: CommentsState) => void;
364
- };
365
-
366
- const optionsFacet = singleValueFacet<CommentsOptions>();
367
-
368
- /**
369
- * Comment threads.
370
- * 1). Updates the EditorModel to store relative selections for a set of comments threads.
371
- * Since the selections are relative, they do not need to be updated when the document is edited.
372
- * 2). Implements a StateField to track absolute selections corresponding to the comments (i.e., when the document is edited).
373
- * 3). Creates decoration marks to apply classes to each selection.
374
- * 4). Tracks the current cursor position to:
375
- * a). Update the decoration to show if the cursor is within a current selection.
376
- * b). Calls a handler to indicate which is the closest selection (e.g., to update the thread sidebar).
377
- * 5). Optionally, implements a hoverTooltip to show hints when creating a selection range.
378
- */
379
- export const comments = (options: CommentsOptions = {}): Extension => {
380
- const { key: shortcut = "meta-'" } = options;
381
-
382
- const handleSelect = debounce((state: CommentsState) => options.onSelect?.(state), 200);
383
-
384
- return [
385
- optionsFacet.of(options),
386
- options.id ? documentId.of(options.id) : undefined,
387
- commentsState,
388
- commentsDecorations,
389
- handleCommentClick,
390
- styles,
391
-
392
- //
393
- // Keymap.
394
- //
395
- options.onCreate &&
396
- keymap.of([
397
- {
398
- key: shortcut,
399
- run: callbackWrapper(createComment),
400
- },
401
- ]),
402
-
403
- //
404
- // Hover tooltip (for key shortcut hints, etc.)
405
- // TODO(burdon): Factor out to generic hints extension for current selection/line.
406
- //
407
- options.renderTooltip &&
408
- hoverTooltip(
409
- (view, pos) => {
410
- const selection = view.state.selection.main;
411
- if (selection && pos >= selection.from && pos <= selection.to) {
412
- return {
413
- pos: selection.from,
414
- end: selection.to,
415
- above: true,
416
- create: () => {
417
- const el = document.createElement('div');
418
- options.renderTooltip!(el, { shortcut }, view);
419
- return { dom: el, offset: { x: 0, y: 8 } };
420
- },
421
- };
422
- }
423
-
424
- return null;
425
- },
426
- {
427
- // TODO(burdon): Hide on change triggered immediately?
428
- // hideOnChange: true,
429
- hoverTime: 1_000,
430
- },
431
- ),
432
-
433
- //
434
- // Track deleted ranges and update ranges for decorations.
435
- //
436
- EditorView.updateListener.of(({ view, state, changes }) => {
437
- let mod = false;
438
- const { comments, ...value } = state.field(commentsState);
439
- changes.iterChanges((from, to, from2, to2) => {
440
- comments.forEach(({ comment, range }) => {
441
- // Test if range deleted.
442
- if (from2 === to2) {
443
- const newRange = Cursor.getRangeFromCursor(view.state, comment.cursor!);
444
- if (!newRange || newRange.to - newRange.from === 0) {
445
- options.onDelete?.({ id: comment.id });
446
- }
447
- }
448
-
449
- // Update range.
450
- if (from <= range.to) {
451
- const newRange = Cursor.getRangeFromCursor(view.state, comment.cursor!);
452
- Object.assign(range, newRange);
453
- mod = true;
454
- }
455
- });
456
- });
457
-
458
- if (mod) {
459
- view.dispatch({ effects: setCommentState.of({ comments, ...value }) });
460
- }
461
- }),
462
-
463
- //
464
- // Track selection/proximity.
465
- //
466
- EditorView.updateListener.of(({ view, state }) => {
467
- let min = Infinity;
468
- const {
469
- selection: { current, closest },
470
- comments,
471
- } = state.field(commentsState);
472
-
473
- const { head } = state.selection.main;
474
- const selection: SelectionState = {};
475
- comments.forEach(({ comment, range }) => {
476
- if (head >= range.from && head <= range.to) {
477
- selection.current = comment.id;
478
- selection.closest = undefined;
479
- }
480
-
481
- if (!selection.current) {
482
- const d = Math.min(Math.abs(head - range.from), Math.abs(head - range.to));
483
- if (d < min) {
484
- selection.closest = comment.id;
485
- min = d;
486
- }
487
- }
488
- });
489
-
490
- if (selection.current !== current || selection.closest !== closest) {
491
- view.dispatch({ effects: setSelection.of(selection) });
492
-
493
- // Update callback.
494
- handleSelect({
495
- selection,
496
- id: state.facet(documentId),
497
- comments: comments.map(({ comment, range }) => ({
498
- comment,
499
- range,
500
- location: view.coordsAtPos(range.from),
501
- })),
502
- });
503
- }
504
- }),
505
-
506
- options.onUpdate && trackPastedComments(options.onUpdate),
507
- ].filter(isNonNullable);
508
- };
509
-
510
- //
511
- // Utils.
512
- //
513
-
514
- export const scrollThreadIntoView = (view: EditorView, id: string, center = true) => {
515
- const comment = view.state.field(commentsState).comments.find((range) => range.comment.id === id);
516
- if (!comment?.comment.cursor) {
517
- return;
518
- }
519
- const range = Cursor.getRangeFromCursor(view.state, comment.comment.cursor);
520
- if (range) {
521
- const currentSelection = view.state.selection.main;
522
- const currentScrollPosition = view.scrollDOM.scrollTop;
523
- const targetScrollPosition = view.coordsAtPos(range.from)?.top;
524
-
525
- const needsScroll =
526
- targetScrollPosition !== undefined &&
527
- (targetScrollPosition < currentScrollPosition ||
528
- targetScrollPosition > currentScrollPosition + view.scrollDOM.clientHeight);
529
-
530
- const needsSelectionUpdate = currentSelection.from !== range.from || currentSelection.to !== range.from;
531
-
532
- if (needsScroll || needsSelectionUpdate) {
533
- view.dispatch({
534
- selection: needsSelectionUpdate ? { anchor: range.from } : undefined,
535
- effects: [
536
- needsScroll ? EditorView.scrollIntoView(range.from, center ? { y: 'center' } : undefined) : [],
537
- needsSelectionUpdate ? setSelection.of({ current: id }) : [],
538
- ].flat(),
539
- });
540
- }
541
- }
542
- };
543
-
544
- /**
545
- * Manages external comment synchronization for the editor.
546
- * This class subscribes to external comment updates and applies them to the editor view.
547
- */
548
- class ExternalCommentSync implements PluginValue {
549
- private readonly unsubscribe: () => void;
550
-
551
- constructor(view: EditorView, id: string, subscribe: (sink: () => void) => CleanupFn, getComments: () => Comment[]) {
552
- const updateComments = () => {
553
- const comments = getComments();
554
- if (id === view.state.facet(documentId)) {
555
- queueMicrotask(() => view.dispatch({ effects: setComments.of({ id, comments }) }));
556
- }
557
- };
558
-
559
- this.unsubscribe = subscribe(updateComments);
560
- }
561
-
562
- destroy = () => {
563
- this.unsubscribe();
564
- };
565
- }
566
-
567
- // TODO(burdon): Needs comment.
568
- export const createExternalCommentSync = (
569
- id: string,
570
- subscribe: (sink: () => void) => CleanupFn,
571
- getComments: () => Comment[],
572
- ): Extension =>
573
- ViewPlugin.fromClass(
574
- class {
575
- constructor(view: EditorView) {
576
- return new ExternalCommentSync(view, id, subscribe, getComments);
577
- }
578
- },
579
- );
580
-
581
- /**
582
- * @deprecated This hook will be removed in future versions. Use the new comment sync extension instead.
583
- * Update comments state field.
584
- */
585
- export const useComments = (view: EditorView | null | undefined, id: string, comments?: Comment[]) => {
586
- useEffect(() => {
587
- if (view) {
588
- // Check same document.
589
- // NOTE: Hook might be called before editor state is updated.
590
- if (id === view.state.facet(documentId)) {
591
- view.dispatch({
592
- effects: setComments.of({ id, comments: comments ?? [] }),
593
- });
594
- }
595
- }
596
- });
597
- };
@@ -1,15 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import { syntaxTree } from '@codemirror/language';
6
- import { type EditorState, type Extension, type RangeSet, StateField, type Transaction } from '@codemirror/state';
7
-
8
- // eslint-disable-next-line no-console
9
- export const debugNodeLogger = (log: (...args: any[]) => void = console.log): Extension => {
10
- const logTokens = (state: EditorState) => syntaxTree(state).iterate({ enter: (node) => log(node.type) });
11
- return StateField.define<any>({
12
- create: (state) => logTokens(state),
13
- update: (_: RangeSet<any>, tr: Transaction) => logTokens(tr.state),
14
- });
15
- };
@@ -1,37 +0,0 @@
1
- //
2
- // Copyright 2024 DXOS.org
3
- //
4
-
5
- import type { Extension } from '@codemirror/state';
6
- import { EditorView, dropCursor } from '@codemirror/view';
7
-
8
- export type DNDOptions = { onDrop?: (view: EditorView, event: { files: FileList }) => void };
9
-
10
- const styles = EditorView.theme({
11
- '.cm-dropCursor': {
12
- borderLeft: '2px solid var(--dx-accentText)',
13
- color: 'var(--dx-accentText)',
14
- padding: '0 4px',
15
- },
16
- '.cm-dropCursor:after': {
17
- content: '"←"',
18
- },
19
- });
20
-
21
- export const dropFile = (options: DNDOptions = {}): Extension => {
22
- return [
23
- styles,
24
- dropCursor(),
25
- EditorView.domEventHandlers({
26
- drop: (event, view) => {
27
- event.preventDefault();
28
- const files = event.dataTransfer?.files;
29
- const pos = view.posAtCoords(event);
30
- if (files?.length && pos !== null) {
31
- view.dispatch({ selection: { anchor: pos } });
32
- options.onDrop?.(view, { files });
33
- }
34
- },
35
- }),
36
- ];
37
- };