@dxos/react-ui-editor 0.3.11-main.f5e7551 → 0.3.11-main.f7c1031

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 (262) hide show
  1. package/dist/lib/browser/index.mjs +3878 -1921
  2. package/dist/lib/browser/index.mjs.map +4 -4
  3. package/dist/lib/browser/meta.json +1 -1
  4. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts +14 -15
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts +20 -17
  7. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  8. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +6 -3
  9. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
  10. package/dist/types/src/{hooks/automerge → components/TextEditor}/automerge.stories.d.ts +6 -1
  11. package/dist/types/src/components/TextEditor/automerge.stories.d.ts.map +1 -0
  12. package/dist/types/src/components/TextEditor/hooks.stories.d.ts +23 -0
  13. package/dist/types/src/components/TextEditor/hooks.stories.d.ts.map +1 -0
  14. package/dist/types/src/components/TextEditor/index.d.ts +0 -2
  15. package/dist/types/src/components/TextEditor/index.d.ts.map +1 -1
  16. package/dist/types/src/components/Toolbar/Toolbar.d.ts +29 -0
  17. package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +1 -0
  18. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts +25 -0
  19. package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -0
  20. package/dist/types/src/components/Toolbar/index.d.ts +2 -0
  21. package/dist/types/src/components/Toolbar/index.d.ts.map +1 -0
  22. package/dist/types/src/components/index.d.ts +1 -0
  23. package/dist/types/src/components/index.d.ts.map +1 -1
  24. package/dist/types/src/extensions/autocomplete.d.ts.map +1 -0
  25. package/dist/types/src/extensions/automerge/automerge.d.ts +9 -0
  26. package/dist/types/src/extensions/automerge/automerge.d.ts.map +1 -0
  27. package/dist/types/src/extensions/automerge/automerge.spec.d.ts +2 -0
  28. package/dist/types/src/extensions/automerge/automerge.spec.d.ts.map +1 -0
  29. package/dist/types/src/extensions/automerge/automerge.test.d.ts +2 -0
  30. package/dist/types/src/extensions/automerge/automerge.test.d.ts.map +1 -0
  31. package/dist/types/src/extensions/automerge/cursor.d.ts +5 -0
  32. package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -0
  33. package/dist/types/src/extensions/automerge/defs.d.ts +24 -0
  34. package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -0
  35. package/dist/types/src/extensions/automerge/index.d.ts +3 -0
  36. package/dist/types/src/extensions/automerge/index.d.ts.map +1 -0
  37. package/dist/types/src/extensions/automerge/semaphore.d.ts +15 -0
  38. package/dist/types/src/extensions/automerge/semaphore.d.ts.map +1 -0
  39. package/dist/types/src/extensions/automerge/update-automerge.d.ts +5 -0
  40. package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -0
  41. package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +1 -0
  42. package/dist/types/src/extensions/awareness.d.ts +46 -0
  43. package/dist/types/src/extensions/awareness.d.ts.map +1 -0
  44. package/dist/types/src/extensions/basic.d.ts +8 -0
  45. package/dist/types/src/extensions/basic.d.ts.map +1 -0
  46. package/dist/types/src/extensions/blast.d.ts.map +1 -0
  47. package/dist/types/src/extensions/comments.d.ts +71 -0
  48. package/dist/types/src/extensions/comments.d.ts.map +1 -0
  49. package/dist/types/src/extensions/cursor.d.ts +25 -0
  50. package/dist/types/src/extensions/cursor.d.ts.map +1 -0
  51. package/dist/types/src/extensions/index.d.ts +13 -0
  52. package/dist/types/src/extensions/index.d.ts.map +1 -0
  53. package/dist/types/src/extensions/listener.d.ts +10 -0
  54. package/dist/types/src/extensions/listener.d.ts.map +1 -0
  55. package/dist/types/src/extensions/markdown/bundle.d.ts +14 -0
  56. package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -0
  57. package/dist/types/src/extensions/markdown/code.d.ts.map +1 -0
  58. package/dist/types/src/extensions/markdown/formatting.d.ts +57 -0
  59. package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -0
  60. package/dist/types/src/extensions/markdown/formatting.test.d.ts +3 -0
  61. package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +1 -0
  62. package/dist/types/src/extensions/markdown/heading.d.ts +6 -0
  63. package/dist/types/src/extensions/markdown/heading.d.ts.map +1 -0
  64. package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -0
  65. package/dist/types/src/extensions/markdown/hr.d.ts.map +1 -0
  66. package/dist/types/src/extensions/markdown/image.d.ts.map +1 -0
  67. package/dist/types/src/extensions/markdown/index.d.ts +11 -0
  68. package/dist/types/src/extensions/markdown/index.d.ts.map +1 -0
  69. package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/link.d.ts +1 -0
  70. package/dist/types/src/extensions/markdown/link.d.ts.map +1 -0
  71. package/dist/types/src/extensions/markdown/table.d.ts.map +1 -0
  72. package/dist/types/src/extensions/markdown/tasklist.d.ts.map +1 -0
  73. package/dist/types/src/extensions/mention.d.ts.map +1 -0
  74. package/dist/types/src/extensions/outliner.d.ts +4 -0
  75. package/dist/types/src/extensions/outliner.d.ts.map +1 -0
  76. package/dist/types/src/extensions/typewriter.d.ts.map +1 -0
  77. package/dist/types/src/hooks/awareness-provider.d.ts +31 -0
  78. package/dist/types/src/hooks/awareness-provider.d.ts.map +1 -0
  79. package/dist/types/src/hooks/defs.d.ts +25 -0
  80. package/dist/types/src/hooks/defs.d.ts.map +1 -0
  81. package/dist/types/src/hooks/index.d.ts +5 -1
  82. package/dist/types/src/hooks/index.d.ts.map +1 -1
  83. package/dist/types/src/hooks/useActionHandler.d.ts +4 -0
  84. package/dist/types/src/hooks/useActionHandler.d.ts.map +1 -0
  85. package/dist/types/src/hooks/useEditorView.d.ts +17 -0
  86. package/dist/types/src/hooks/useEditorView.d.ts.map +1 -0
  87. package/dist/types/src/hooks/useTextEditor.d.ts +39 -0
  88. package/dist/types/src/hooks/useTextEditor.d.ts.map +1 -0
  89. package/dist/types/src/hooks/useTextModel.d.ts +14 -31
  90. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  91. package/dist/types/src/index.d.ts +5 -0
  92. package/dist/types/src/index.d.ts.map +1 -1
  93. package/dist/types/src/styles/cursors.d.ts.map +1 -0
  94. package/dist/types/src/styles/index.d.ts +1 -0
  95. package/dist/types/src/styles/index.d.ts.map +1 -1
  96. package/dist/types/src/styles/markdown.d.ts +2 -2
  97. package/dist/types/src/styles/markdown.d.ts.map +1 -1
  98. package/dist/types/src/styles/tokens.d.ts +1 -0
  99. package/dist/types/src/styles/tokens.d.ts.map +1 -1
  100. package/dist/types/src/{components/TextEditor/themes → themes}/default.d.ts +1 -1
  101. package/dist/types/src/themes/default.d.ts.map +1 -0
  102. package/dist/types/src/themes/index.d.ts.map +1 -0
  103. package/dist/types/src/util.d.ts +7 -0
  104. package/dist/types/src/util.d.ts.map +1 -0
  105. package/package.json +48 -36
  106. package/src/components/TextEditor/MarkdownEditor.stories.tsx +93 -102
  107. package/src/components/TextEditor/TextEditor.stories.tsx +13 -34
  108. package/src/components/TextEditor/TextEditor.tsx +137 -97
  109. package/src/{hooks/automerge → components/TextEditor}/automerge.stories.tsx +65 -6
  110. package/src/components/TextEditor/hooks.stories.tsx +111 -0
  111. package/src/components/TextEditor/index.ts +0 -3
  112. package/src/components/Toolbar/Toolbar.stories.tsx +102 -0
  113. package/src/components/Toolbar/Toolbar.tsx +245 -0
  114. package/src/components/Toolbar/index.ts +5 -0
  115. package/src/components/index.ts +1 -0
  116. package/src/{components/TextEditor/extensions → extensions}/autocomplete.ts +23 -19
  117. package/src/extensions/automerge/automerge.spec.tsx +76 -0
  118. package/src/extensions/automerge/automerge.test.ts +13 -0
  119. package/src/extensions/automerge/automerge.ts +103 -0
  120. package/src/extensions/automerge/cursor.ts +52 -0
  121. package/src/extensions/automerge/defs.ts +41 -0
  122. package/src/extensions/automerge/index.ts +6 -0
  123. package/src/extensions/automerge/semaphore.ts +81 -0
  124. package/src/extensions/automerge/update-automerge.ts +49 -0
  125. package/src/{hooks → extensions}/automerge/update-codemirror.ts +17 -9
  126. package/src/extensions/awareness.ts +313 -0
  127. package/src/{components/TextEditor/extensions → extensions}/basic.ts +17 -10
  128. package/src/{components/TextEditor/extensions → extensions}/blast.ts +4 -1
  129. package/src/extensions/comments.ts +486 -0
  130. package/src/extensions/cursor.ts +50 -0
  131. package/src/{components/TextEditor/extensions → extensions}/index.ts +4 -8
  132. package/src/extensions/listener.ts +35 -0
  133. package/src/{components/TextEditor/extensions → extensions}/markdown/bundle.ts +23 -28
  134. package/src/extensions/markdown/code.ts +150 -0
  135. package/src/extensions/markdown/formatting.test.ts +481 -0
  136. package/src/extensions/markdown/formatting.ts +1198 -0
  137. package/src/extensions/markdown/heading.ts +59 -0
  138. package/src/{components/TextEditor/extensions → extensions}/markdown/highlight.ts +12 -27
  139. package/src/extensions/markdown/hr.ts +71 -0
  140. package/src/extensions/markdown/image.ts +87 -0
  141. package/src/extensions/markdown/index.ts +14 -0
  142. package/src/{components/TextEditor/extensions → extensions/markdown}/link.ts +121 -58
  143. package/src/{components/TextEditor/extensions → extensions/markdown}/table.ts +10 -4
  144. package/src/extensions/markdown/tasklist.ts +110 -0
  145. package/src/{components/TextEditor/extensions → extensions}/mention.ts +9 -2
  146. package/src/extensions/outliner.ts +12 -0
  147. package/src/{components/TextEditor/extensions → extensions}/typewriter.ts +1 -1
  148. package/src/hooks/awareness-provider.ts +124 -0
  149. package/src/hooks/defs.ts +42 -0
  150. package/src/hooks/index.ts +6 -1
  151. package/src/hooks/useActionHandler.ts +93 -0
  152. package/src/hooks/useEditorView.ts +29 -0
  153. package/src/hooks/useTextEditor.ts +153 -0
  154. package/src/hooks/useTextModel.ts +48 -114
  155. package/src/index.ts +5 -0
  156. package/src/styles/index.ts +1 -0
  157. package/src/styles/markdown.ts +9 -12
  158. package/src/styles/tokens.ts +3 -0
  159. package/src/{components/TextEditor/themes → themes}/default.ts +60 -84
  160. package/src/util.ts +41 -0
  161. package/dist/types/src/components/TextEditor/codemirror.stories.d.ts +0 -12
  162. package/dist/types/src/components/TextEditor/codemirror.stories.d.ts.map +0 -1
  163. package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts.map +0 -1
  164. package/dist/types/src/components/TextEditor/extensions/basic.d.ts +0 -9
  165. package/dist/types/src/components/TextEditor/extensions/basic.d.ts.map +0 -1
  166. package/dist/types/src/components/TextEditor/extensions/blast.d.ts.map +0 -1
  167. package/dist/types/src/components/TextEditor/extensions/code.d.ts.map +0 -1
  168. package/dist/types/src/components/TextEditor/extensions/comments.d.ts +0 -48
  169. package/dist/types/src/components/TextEditor/extensions/comments.d.ts.map +0 -1
  170. package/dist/types/src/components/TextEditor/extensions/hr.d.ts.map +0 -1
  171. package/dist/types/src/components/TextEditor/extensions/image.d.ts.map +0 -1
  172. package/dist/types/src/components/TextEditor/extensions/index.d.ts +0 -17
  173. package/dist/types/src/components/TextEditor/extensions/index.d.ts.map +0 -1
  174. package/dist/types/src/components/TextEditor/extensions/link.d.ts.map +0 -1
  175. package/dist/types/src/components/TextEditor/extensions/listener.d.ts +0 -9
  176. package/dist/types/src/components/TextEditor/extensions/listener.d.ts.map +0 -1
  177. package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts +0 -17
  178. package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts.map +0 -1
  179. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts.map +0 -1
  180. package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts +0 -3
  181. package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts.map +0 -1
  182. package/dist/types/src/components/TextEditor/extensions/mention.d.ts.map +0 -1
  183. package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts +0 -3
  184. package/dist/types/src/components/TextEditor/extensions/mermaid.d.ts.map +0 -1
  185. package/dist/types/src/components/TextEditor/extensions/table.d.ts.map +0 -1
  186. package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts.map +0 -1
  187. package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts +0 -12
  188. package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts.map +0 -1
  189. package/dist/types/src/components/TextEditor/extensions/typewriter.d.ts.map +0 -1
  190. package/dist/types/src/components/TextEditor/extensions/util.d.ts +0 -5
  191. package/dist/types/src/components/TextEditor/extensions/util.d.ts.map +0 -1
  192. package/dist/types/src/components/TextEditor/themes/default.d.ts.map +0 -1
  193. package/dist/types/src/components/TextEditor/themes/index.d.ts.map +0 -1
  194. package/dist/types/src/hooks/automerge/automerge.stories.d.ts.map +0 -1
  195. package/dist/types/src/hooks/automerge/handle.d.ts +0 -9
  196. package/dist/types/src/hooks/automerge/handle.d.ts.map +0 -1
  197. package/dist/types/src/hooks/automerge/index.d.ts +0 -3
  198. package/dist/types/src/hooks/automerge/index.d.ts.map +0 -1
  199. package/dist/types/src/hooks/automerge/plugin.d.ts +0 -26
  200. package/dist/types/src/hooks/automerge/plugin.d.ts.map +0 -1
  201. package/dist/types/src/hooks/automerge/semaphore.d.ts +0 -19
  202. package/dist/types/src/hooks/automerge/semaphore.d.ts.map +0 -1
  203. package/dist/types/src/hooks/automerge/update-automerge.d.ts +0 -6
  204. package/dist/types/src/hooks/automerge/update-automerge.d.ts.map +0 -1
  205. package/dist/types/src/hooks/automerge/update-codemirror.d.ts.map +0 -1
  206. package/dist/types/src/hooks/yjs/cursors.d.ts.map +0 -1
  207. package/dist/types/src/hooks/yjs/index.d.ts +0 -3
  208. package/dist/types/src/hooks/yjs/index.d.ts.map +0 -1
  209. package/dist/types/src/hooks/yjs/space-provider.d.ts +0 -27
  210. package/dist/types/src/hooks/yjs/space-provider.d.ts.map +0 -1
  211. package/dist/types/src/hooks/yjs/yjs.stories.d.ts +0 -12
  212. package/dist/types/src/hooks/yjs/yjs.stories.d.ts.map +0 -1
  213. package/dist/types/src/hooks/yjs/yjs.test.d.ts +0 -2
  214. package/dist/types/src/hooks/yjs/yjs.test.d.ts.map +0 -1
  215. package/dist/types/src/testing/index.d.ts +0 -3
  216. package/dist/types/src/testing/index.d.ts.map +0 -1
  217. package/dist/types/src/testing/proto/gen/schema.d.ts +0 -15
  218. package/dist/types/src/testing/proto/gen/schema.d.ts.map +0 -1
  219. package/dist/types/src/testing/proto/index.d.ts +0 -2
  220. package/dist/types/src/testing/proto/index.d.ts.map +0 -1
  221. package/dist/types/src/testing/replicator.d.ts +0 -45
  222. package/dist/types/src/testing/replicator.d.ts.map +0 -1
  223. package/src/components/TextEditor/codemirror.stories.ts +0 -114
  224. package/src/components/TextEditor/extensions/code.ts +0 -99
  225. package/src/components/TextEditor/extensions/comments.ts +0 -388
  226. package/src/components/TextEditor/extensions/hr.ts +0 -74
  227. package/src/components/TextEditor/extensions/image.ts +0 -69
  228. package/src/components/TextEditor/extensions/listener.ts +0 -23
  229. package/src/components/TextEditor/extensions/markdown/index.ts +0 -6
  230. package/src/components/TextEditor/extensions/mermaid.ts +0 -11
  231. package/src/components/TextEditor/extensions/tasklist.ts +0 -121
  232. package/src/components/TextEditor/extensions/tooltip.ts +0 -61
  233. package/src/components/TextEditor/extensions/util.ts +0 -18
  234. package/src/hooks/automerge/handle.ts +0 -14
  235. package/src/hooks/automerge/index.ts +0 -6
  236. package/src/hooks/automerge/plugin.ts +0 -134
  237. package/src/hooks/automerge/semaphore.ts +0 -78
  238. package/src/hooks/automerge/update-automerge.ts +0 -44
  239. package/src/hooks/yjs/index.ts +0 -6
  240. package/src/hooks/yjs/space-provider.ts +0 -126
  241. package/src/hooks/yjs/yjs.stories.tsx +0 -56
  242. package/src/hooks/yjs/yjs.test.ts +0 -59
  243. package/src/testing/index.ts +0 -6
  244. package/src/testing/proto/gen/schema.ts +0 -49
  245. package/src/testing/proto/index.ts +0 -5
  246. package/src/testing/proto/schema.proto +0 -15
  247. package/src/testing/replicator.ts +0 -189
  248. /package/dist/types/src/{components/TextEditor/extensions → extensions}/autocomplete.d.ts +0 -0
  249. /package/dist/types/src/{hooks → extensions}/automerge/update-codemirror.d.ts +0 -0
  250. /package/dist/types/src/{components/TextEditor/extensions → extensions}/blast.d.ts +0 -0
  251. /package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/code.d.ts +0 -0
  252. /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/highlight.d.ts +0 -0
  253. /package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/hr.d.ts +0 -0
  254. /package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/image.d.ts +0 -0
  255. /package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/table.d.ts +0 -0
  256. /package/dist/types/src/{components/TextEditor/extensions → extensions/markdown}/tasklist.d.ts +0 -0
  257. /package/dist/types/src/{components/TextEditor/extensions → extensions}/mention.d.ts +0 -0
  258. /package/dist/types/src/{components/TextEditor/extensions → extensions}/typewriter.d.ts +0 -0
  259. /package/dist/types/src/{hooks/yjs → styles}/cursors.d.ts +0 -0
  260. /package/dist/types/src/{components/TextEditor/themes → themes}/index.d.ts +0 -0
  261. /package/src/{hooks/yjs → styles}/cursors.ts +0 -0
  262. /package/src/{components/TextEditor/themes → themes}/index.ts +0 -0
@@ -2,67 +2,19 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
- import { type Extension, StateField } from '@codemirror/state';
6
5
  import get from 'lodash.get';
7
- import { useEffect, useState } from 'react';
8
- import { yCollab } from 'y-codemirror.next';
9
- import type * as awarenessProtocol from 'y-protocols/awareness';
10
- import * as Y from 'yjs';
6
+ import { type Dispatch, type SetStateAction, useEffect, useState } from 'react';
11
7
 
8
+ import { generateName } from '@dxos/display-name';
9
+ import { type AutomergeTextCompat, getRawDoc } from '@dxos/echo-schema';
12
10
  import { invariant } from '@dxos/invariant';
13
- import {
14
- type DocAccessor,
15
- type Space,
16
- type TextObject,
17
- type AutomergeTextCompat,
18
- getRawDoc,
19
- isActualAutomergeObject,
20
- } from '@dxos/react-client/echo';
11
+ import { isAutomergeObject, type Space, type TextObject } from '@dxos/react-client/echo';
21
12
  import { type Identity } from '@dxos/react-client/halo';
22
- import type { YText, YXmlFragment } from '@dxos/text-model';
23
- import { arrayToString, stringToArray } from '@dxos/util';
24
13
 
25
- import { automergePlugin } from './automerge';
26
- import { SpaceAwarenessProvider } from './yjs';
27
-
28
- // TODO(burdon): Move.
29
- type Awareness = awarenessProtocol.Awareness;
30
-
31
- /**
32
- * State field makes the model available to other extensions.
33
- */
34
- // TODO(burdon): Use facet?
35
- export const modelState = StateField.define<EditorModel | undefined>({
36
- create: () => undefined,
37
- update: (model) => model,
38
- });
39
-
40
- export type Range = {
41
- from: number;
42
- to: number;
43
- };
44
-
45
- export type CommentRange = {
46
- id: string;
47
- // TODO(burdon): Split into begin/end?
48
- cursor: string;
49
- };
50
-
51
- // TODO(wittjosiah): Factor out to common package? @dxos/react-client?
52
- export type EditorModel = {
53
- id: string;
54
- // TODO(burdon): Remove.
55
- content: string | YText | YXmlFragment | DocAccessor;
56
- text: () => string;
57
- getCursorFromRange?: (value: Range) => string;
58
- getRangeFromCursor?: (cursor: string) => Range;
59
- extension?: Extension;
60
- awareness?: Awareness;
61
- peer?: {
62
- id: string;
63
- name?: string;
64
- };
65
- };
14
+ import { SpaceAwarenessProvider } from './awareness-provider';
15
+ import { type EditorModel, modelState } from './defs';
16
+ import { automerge, awareness } from '../extensions';
17
+ import { cursorColor } from '../styles';
66
18
 
67
19
  // TODO(burdon): Remove space/identity dependency. Define interface for the framework re content and presence.
68
20
  export type UseTextModelProps = {
@@ -71,79 +23,61 @@ export type UseTextModelProps = {
71
23
  text?: TextObject;
72
24
  };
73
25
 
74
- // TODO(burdon): Remove YJS/Automerge deps (from UI component -- create abstraction; incl. all ECHO/Space deps).
75
- // TODO(wittjosiah): Factor out to common package? @dxos/react-client?
76
26
  export const useTextModel = (props: UseTextModelProps): EditorModel | undefined => {
77
27
  const { identity, space, text } = props;
78
- const [model, setModel] = useState<EditorModel | undefined>(() => createModel(props));
28
+ const [model, setModel] = useState<EditorModel | undefined>();
79
29
  useEffect(() => setModel(createModel(props)), [identity, space, text]);
80
30
  return model;
81
31
  };
82
32
 
83
- const createModel = (props: UseTextModelProps) => {
84
- const { text } = props;
85
- if (isActualAutomergeObject(text)) {
86
- return createAutomergeModel(props);
87
- } else {
88
- if (!text?.doc) {
89
- return undefined;
90
- }
91
-
92
- return createYjsModel(props);
93
- }
94
- };
95
-
96
- const createYjsModel = ({ identity, space, text }: UseTextModelProps): EditorModel => {
97
- invariant(text?.doc && text?.content);
98
- const provider = space
99
- ? new SpaceAwarenessProvider({ space, doc: text.doc, channel: `yjs.awareness.${text.id}` })
100
- : undefined;
101
-
102
- const model: EditorModel = {
103
- id: text.doc.guid,
104
- content: text.content,
105
- text: () => text.content!.toString(),
106
- // https://github.com/yjs/yjs?tab=readme-ov-file#relative-positions
107
- getCursorFromRange: (range: Range) => {
108
- const from = Y.encodeRelativePosition(Y.createRelativePositionFromTypeIndex(text.content as YText, range.from));
109
- const to = Y.encodeRelativePosition(Y.createRelativePositionFromTypeIndex(text.content as YText, range.to, -1));
110
- return [arrayToString(from), arrayToString(to)].join(':');
111
- },
112
- getRangeFromCursor: (cursor: string) => {
113
- const parts = cursor.split(':');
114
- const from = Y.createAbsolutePositionFromRelativePosition(
115
- Y.decodeRelativePosition(stringToArray(parts[0])),
116
- text.doc!,
117
- );
118
- const to = Y.createAbsolutePositionFromRelativePosition(
119
- Y.decodeRelativePosition(stringToArray(parts[1])),
120
- text.doc!,
121
- );
122
- return { from: from!.index, to: to!.index };
123
- },
124
- extension: [yCollab(text.content as YText, provider?.awareness), modelState.init(() => model)],
125
- awareness: provider?.awareness,
126
- peer: identity
127
- ? {
128
- id: identity.identityKey.toHex(),
129
- name: identity.profile?.displayName,
130
- }
131
- : undefined,
132
- };
133
-
134
- return model;
33
+ /**
34
+ * For use primarily in stories & tests so the dependence on TextObject can be avoided.
35
+ * @param id
36
+ * @param defaultContent
37
+ */
38
+ export const useInMemoryTextModel = ({
39
+ id,
40
+ defaultContent,
41
+ }: {
42
+ id: string;
43
+ defaultContent?: string;
44
+ }): EditorModel & { setContent: Dispatch<SetStateAction<string>> } => {
45
+ const [content, setContent] = useState(defaultContent ?? '');
46
+ return { id, content, setContent, text: () => content };
135
47
  };
136
48
 
137
- const createAutomergeModel = ({ identity, text }: UseTextModelProps): EditorModel => {
49
+ const createModel = ({ space, identity, text }: UseTextModelProps) => {
50
+ invariant(isAutomergeObject(text));
138
51
  const obj = text as any as AutomergeTextCompat;
139
52
  const doc = getRawDoc(obj, [obj.field]);
140
53
 
54
+ const awarenessProvider =
55
+ space &&
56
+ new SpaceAwarenessProvider({
57
+ space,
58
+ channel: `automerge.awareness.${obj.id}`,
59
+ info: {
60
+ displayName: identity ? identity.profile?.displayName ?? generateName(identity.identityKey.toHex()) : undefined,
61
+ color: cursorColor.color,
62
+ lightColor: cursorColor.light,
63
+ },
64
+ peerId: identity?.identityKey.toHex() ?? 'Anonymous',
65
+ });
66
+
67
+ const extensions = [
68
+ //
69
+ modelState.init(() => model),
70
+ automerge({ handle: doc.handle, path: doc.path }),
71
+ ];
72
+ if (awarenessProvider) {
73
+ extensions.push(awareness(awarenessProvider));
74
+ }
75
+
141
76
  const model: EditorModel = {
142
77
  id: obj.id,
143
78
  content: doc,
144
79
  text: () => get(doc.handle.docSync(), doc.path),
145
- // TODO(burdon): https://automerge.org/automerge/api-docs/js/functions/next.getCursor.html
146
- extension: [automergePlugin(doc.handle, doc.path), modelState.init(() => model)],
80
+ extension: extensions,
147
81
  peer: identity
148
82
  ? {
149
83
  id: identity.identityKey.toHex(),
package/src/index.ts CHANGED
@@ -5,6 +5,11 @@
5
5
  export { TextKind } from '@dxos/protocols/proto/dxos/echo/model/text';
6
6
  export { Doc, YText, YXmlFragment } from '@dxos/text-model';
7
7
  export { type Extension } from '@codemirror/state';
8
+ export { type EditorView, keymap } from '@codemirror/view';
8
9
 
9
10
  export * from './components';
11
+ export * from './extensions';
10
12
  export * from './hooks';
13
+ export { getToken } from './styles';
14
+ export * from './themes';
15
+ export * from './util';
@@ -2,5 +2,6 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ export * from './cursors';
5
6
  export * from './markdown';
6
7
  export * from './tokens';
@@ -8,18 +8,17 @@ export type HeadingLevel = 1 | 2 | 3 | 4 | 5 | 6;
8
8
 
9
9
  // TODO(burdon): Better way to align vertically than negative margin? Font-specific?
10
10
  // https://tailwindcss.com/docs/font-weight
11
- export const headings: Record<HeadingLevel, string[]> = {
12
- 1: ['mbs-4 mbe-2 font-medium text-inherit no-underline text-4xl', '-ml-[10px]'],
13
- 2: ['mbs-4 mbe-2 font-medium text-inherit no-underline text-3xl', '-ml-[8px]'],
14
- 3: ['mbs-4 mbe-2 font-medium text-inherit no-underline text-2xl', '-ml-[7px]'],
15
- 4: ['mbs-4 mbe-2 font-medium text-inherit no-underline text-xl', '-ml-[6px]'],
16
- 5: ['mbs-4 mbe-2 font-medium text-inherit no-underline text-lg', '-ml-[5px]'],
17
- 6: ['mbs-4 mbe-2 font-medium text-inherit no-underline', '-ml-[4px]'],
11
+ export const headings: Record<HeadingLevel, string> = {
12
+ 1: 'mbs-4 mbe-2 font-medium text-inherit no-underline text-4xl',
13
+ 2: 'mbs-4 mbe-2 font-medium text-inherit no-underline text-3xl',
14
+ 3: 'mbs-4 mbe-2 font-medium text-inherit no-underline text-2xl',
15
+ 4: 'mbs-4 mbe-2 font-medium text-inherit no-underline text-xl',
16
+ 5: 'mbs-4 mbe-2 font-medium text-inherit no-underline text-lg',
17
+ 6: 'mbs-4 mbe-2 font-medium text-inherit no-underline',
18
18
  };
19
19
 
20
- export const heading = (level: HeadingLevel, readonly?: boolean) => {
21
- const [style, offset] = headings[level];
22
- return mx(style, readonly && offset);
20
+ export const heading = (level: HeadingLevel) => {
21
+ return headings[level];
23
22
  };
24
23
 
25
24
  export const text = 'text-neutral-800 dark:text-neutral-200';
@@ -39,10 +38,8 @@ export const codeBlock = 'mlb-2 font-mono bg-neutral-500/10 p-3 rounded';
39
38
 
40
39
  export const inlineUrl = mx(code, 'px-1');
41
40
 
42
- // TODO(burdon): Replace with widget.
43
41
  export const blockquote = mx('pl-1 mr-1 border-is-4 border-primary-500/70 dark:border-primary-500/30', light);
44
42
 
45
- // TODO(burdon): Replace with widget.
46
43
  export const horizontalRule =
47
44
  'flex mlb-4 border-b text-neutral-100 dark:text-neutral-900 border-neutral-200 dark:border-neutral-800';
48
45
 
@@ -2,6 +2,7 @@
2
2
  // Copyright 2023 DXOS.org
3
3
  //
4
4
 
5
+ import get from 'lodash.get';
5
6
  import type { StyleSpec } from 'style-mod';
6
7
 
7
8
  import { tailwindConfig, type TailwindConfig } from '@dxos/react-ui-theme';
@@ -12,3 +13,5 @@ export type ThemeStyles = {
12
13
 
13
14
  // TODO(thure): Why export the whole theme? Can this be done differently?
14
15
  export const tokens: TailwindConfig['theme'] = tailwindConfig({}).theme;
16
+
17
+ export const getToken = (path: string, defaultValue: any = undefined) => get(tokens, path, defaultValue);
@@ -4,10 +4,10 @@
4
4
 
5
5
  import get from 'lodash.get';
6
6
 
7
- import { type ThemeStyles, tokens } from '../../../styles';
7
+ import { type ThemeStyles, tokens } from '../styles';
8
8
 
9
- // TODO(burdon): Can we erase All of the default CM styles?
10
- // TODO(burdon): Theme styles seem to be added multiple times?
9
+ // TODO(burdon): Can we use @apply and import css file?
10
+ // https://tailwindcss.com/docs/reusing-styles#extracting-classes-with-apply?
11
11
 
12
12
  /**
13
13
  * Minimal styles.
@@ -49,22 +49,24 @@ export const defaultTheme: ThemeStyles = {
49
49
  '&.cm-focused': {
50
50
  outline: 'none',
51
51
  },
52
- '& .cm-scroller': {
53
- overflow: 'visible',
52
+
53
+ '.cm-scroller': {
54
+ // overflow: 'visible',
54
55
  fontFamily: get(tokens, 'fontFamily.mono', []).join(','),
56
+ lineHeight: 1.4,
55
57
  },
56
58
 
57
- '& .cm-content': {
59
+ '.cm-content': {
58
60
  padding: 0,
59
61
  // NOTE: Base font size (otherwise defined by HTML tag, which might be different for storybook).
60
62
  fontSize: '16px',
61
63
  },
62
64
  '&light .cm-content': {
63
- color: get(tokens, 'extend.colors.neutral.900', 'black'),
65
+ color: get(tokens, 'extend.semanticColors.base.fg.light', 'black'),
64
66
  caretColor: 'black',
65
67
  },
66
68
  '&dark .cm-content': {
67
- color: get(tokens, 'extend.colors.neutral.100', 'white'),
69
+ color: get(tokens, 'extend.semanticColors.base.fg.dark', 'white'),
68
70
  caretColor: 'white',
69
71
  },
70
72
 
@@ -77,18 +79,21 @@ export const defaultTheme: ThemeStyles = {
77
79
  '&dark .cm-cursor, &dark .cm-dropCursor': {
78
80
  borderLeft: '2px solid white',
79
81
  },
80
- '& .cm-placeholder': {
81
- fontWeight: 100,
82
+ '&light .cm-placeholder': {
83
+ color: get(tokens, 'extend.semanticColors.description.light', 'rgba(0,0,0,.2)'),
84
+ },
85
+ '&dark .cm-placeholder': {
86
+ color: get(tokens, 'extend.semanticColors.description.dark', 'rgba(255,255,255,.2)'),
82
87
  },
83
88
 
84
89
  //
85
90
  // line
86
91
  //
87
- '& .cm-line': {
92
+ '.cm-line': {
88
93
  paddingInline: 0,
89
94
  },
90
- '& .cm-activeLine': {
91
- background: 'inherit',
95
+ '.cm-activeLine': {
96
+ background: 'transparent',
92
97
  },
93
98
 
94
99
  //
@@ -119,40 +124,10 @@ export const defaultTheme: ThemeStyles = {
119
124
  backgroundColor: get(tokens, 'extend.colors.yellow.700'),
120
125
  },
121
126
 
122
- //
123
- // collaboration
124
- // TODO(burdon): Review classnames (YJS dependent?) Note: e2e tests depend on this class.
125
- //
126
-
127
- '&light .cm-ySelection, &light .cm-yLineSelection': {
128
- mixBlendMode: 'multiply',
129
- },
130
- '&dark .cm-ySelection, &dark .cm-yLineSelection': {
131
- mixBlendMode: 'screen',
132
- },
133
-
134
- '& .cm-ySelectionInfo': {
135
- padding: '2px 4px',
136
- marginBlockStart: '-4px',
137
- },
138
- '& .cm-ySelection, & .cm-selectionMatch': {
139
- paddingBlockStart: '.15em',
140
- paddingBlockEnd: '.15em',
141
- },
142
- '& .cm-ySelectionCaret': {
143
- display: 'inline-block',
144
- insetBlockStart: '.1em',
145
- blockSize: '1.4em',
146
- verticalAlign: 'top',
147
- },
148
- '& .cm-yLineSelection': {
149
- margin: 0,
150
- },
151
-
152
127
  //
153
128
  // link
154
129
  //
155
- '& .cm-link': {
130
+ '.cm-link': {
156
131
  color: get(tokens, 'extend.colors.primary.500'),
157
132
  textDecorationLine: 'underline',
158
133
  textDecorationThickness: '1px',
@@ -164,75 +139,74 @@ export const defaultTheme: ThemeStyles = {
164
139
  //
165
140
  // tooltip
166
141
  //
167
- '& .cm-tooltip': {
142
+ '.cm-tooltip': {
168
143
  border: 'none',
169
144
  },
170
- '& .cm-tooltip-below': {},
145
+ '.cm-tooltip-below': {},
171
146
 
172
147
  //
173
148
  // autocomplete
174
149
  //
175
- '& .cm-tooltip-autocomplete': {
150
+ '.cm-tooltip-autocomplete': {
176
151
  marginTop: '4px',
177
152
  marginLeft: '-3px',
178
153
  },
179
- '& .cm-tooltip-autocomplete ul li': {},
180
- '& .cm-tooltip-autocomplete ul li[aria-selected]': {},
181
- '& .cm-completionIcon': {
154
+ '.cm-tooltip-autocomplete ul li': {},
155
+ '.cm-tooltip-autocomplete ul li[aria-selected]': {},
156
+ '.cm-completionIcon': {
182
157
  display: 'none',
183
158
  },
184
- '& .cm-completionLabel': {
159
+ '.cm-completionLabel': {
185
160
  fontFamily: get(tokens, 'fontFamily.body', []).join(','),
186
161
  },
187
- '& .cm-completionMatchedText': {
162
+ '.cm-completionMatchedText': {
188
163
  textDecoration: 'none',
189
164
  },
190
165
 
191
- //
192
- // widgets
193
- //
194
- '& .cm-widgetBuffer': {
195
- display: 'none',
196
- height: 0,
197
- },
198
-
199
166
  //
200
167
  // table
201
168
  //
202
- '& .cm-table *': {
169
+ '.cm-table *': {
203
170
  fontFamily: `${get(tokens, 'fontFamily.mono', []).join(',')} !important`,
204
171
  textDecoration: 'none !important',
205
172
  },
206
- '& .cm-table-head': {
173
+ '.cm-table-head': {
207
174
  padding: '2px 16px 2px 0px',
208
175
  borderBottom: `1px solid ${get(tokens, 'extend.colors.neutral.500')}`,
209
176
  fontWeight: 100,
210
177
  textAlign: 'left',
211
178
  color: get(tokens, 'extend.colors.neutral.500'),
212
179
  },
213
- '& .cm-table-cell': {
180
+ '.cm-table-cell': {
214
181
  padding: '2px 16px 2px 0px',
215
182
  },
216
183
 
217
184
  //
218
185
  // image
219
186
  //
220
- '& .cm-image': {
221
- margin: '0.5rem 0',
187
+ '.cm-image': {
188
+ display: 'block',
189
+ height: '0',
190
+ },
191
+ '.cm-image.cm-loaded-image': {
192
+ height: 'auto',
193
+ borderTop: '0.5rem solid transparent',
194
+ borderBottom: '0.5rem solid transparent',
222
195
  },
223
196
 
224
197
  //
225
198
  // font size
226
- // TODO(thure): This appears to be the best or only way to set selection caret heights, but it's far more verbose than it needs to be.
199
+ // TODO(thure): This appears to be the best or only way to set selection caret heights,
200
+ // but it's far more verbose than it needs to be.
227
201
  //
228
- ...Object.keys(get(tokens, 'extend.fontSize', {})).reduce((acc: Record<string, any>, fontSize) => {
229
- const height = get(tokens, ['extend', 'fontSize', fontSize, 1, 'lineHeight']);
230
-
231
- acc[`& .text-${fontSize} + .cm-ySelectionCaret`] = { height };
232
- acc[`& .text-${fontSize} + .cm-ySelection + .cm-ySelectionCaret`] = { height };
233
- acc[`& .text-${fontSize} + .cm-widgetBuffer + .cm-ySelectionCaret`] = { height };
234
- return acc;
235
- }, {}),
202
+ // ...Object.keys(get(tokens, 'extend.fontSize', {})).reduce((acc: Record<string, any>, fontSize) => {
203
+ // const height = get(tokens, ['extend', 'fontSize', fontSize, 1, 'lineHeight']);
204
+ //
205
+ // acc[`& .text-${fontSize} + .cm-ySelectionCaret`] = { height };
206
+ // acc[`& .text-${fontSize} + .cm-ySelection + .cm-ySelectionCaret`] = { height };
207
+ // acc[`& .text-${fontSize} + .cm-widgetBuffer + .cm-ySelectionCaret`] = { height };
208
+ // return acc;
209
+ // }, {}),
236
210
 
237
211
  /**
238
212
  * Panels
@@ -250,14 +224,14 @@ export const defaultTheme: ThemeStyles = {
250
224
  * </div>
251
225
  * </div
252
226
  */
253
- '& .cm-panels': {
227
+ '.cm-panels': {
254
228
  border: `1px solid ${get(tokens, 'extend.colors.neutral.200')}`,
255
229
  },
256
- '& .cm-panel': {
230
+ '.cm-panel': {
257
231
  background: get(tokens, 'extend.colors.neutral.50'),
258
232
  fontFamily: get(tokens, 'fontFamily.body', []).join(','),
259
233
  },
260
- '& .cm-button': {
234
+ '.cm-button': {
261
235
  margin: '4px',
262
236
  fontFamily: get(tokens, 'fontFamily.body', []).join(','),
263
237
  background: get(tokens, 'extend.colors.neutral.100'),
@@ -271,32 +245,34 @@ export const defaultTheme: ThemeStyles = {
271
245
  backgroundImage: 'none',
272
246
  },
273
247
  },
274
- '& .cm-panel input[type=checkbox]': {
248
+ '.cm-panel input[type=checkbox]': {
275
249
  marginRight: '0.4rem !important',
276
250
  },
277
251
  };
278
252
 
279
253
  export const textTheme: ThemeStyles = {
280
- '& .cm-scroller': {
254
+ '.cm-scroller': {
281
255
  fontFamily: get(tokens, 'fontFamily.body', []).join(','),
282
256
  },
283
- '& .cm-placeholder': {
257
+ '.cm-placeholder': {
284
258
  fontFamily: get(tokens, 'fontFamily.body', []).join(','),
285
259
  },
286
260
  };
287
261
 
288
262
  export const markdownTheme: ThemeStyles = {
289
- // NOTE: Must leave base font family as is (i.e., monospace) due to fenced code blocks.
290
- '& .cm-placeholder': {
263
+ '.cm-scroller': {
264
+ fontFamily: get(tokens, 'fontFamily.body', []).join(','),
265
+ },
266
+ '.cm-placeholder': {
291
267
  fontFamily: get(tokens, 'fontFamily.body', []).join(','),
292
268
  },
293
269
  };
294
270
 
295
271
  export const codeTheme: ThemeStyles = {
296
- '& .cm-scroller': {
272
+ '.cm-scroller': {
297
273
  fontFamily: get(tokens, 'fontFamily.mono', []).join(','),
298
274
  },
299
- '& .cm-placeholder': {
275
+ '.cm-placeholder': {
300
276
  fontFamily: get(tokens, 'fontFamily.mono', []).join(','),
301
277
  },
302
278
  };
package/src/util.ts ADDED
@@ -0,0 +1,41 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import type { Transaction } from '@codemirror/state';
6
+
7
+ import { log } from '@dxos/log';
8
+
9
+ /**
10
+ * CodeMirror callbacks swallow errors so wrap handlers.
11
+ */
12
+ // TODO(burdon): EditorView.exceptionSink should catch errors.
13
+ export const callbackWrapper = <T extends Function>(fn: T): T =>
14
+ ((...args: any[]) => {
15
+ try {
16
+ return fn(...args);
17
+ } catch (err) {
18
+ log.catch(err);
19
+ }
20
+ }) as unknown as T;
21
+
22
+ export const logChanges = (trs: readonly Transaction[]) => {
23
+ const changes = trs
24
+ .flatMap((tr) => {
25
+ if (tr.changes.empty) {
26
+ return undefined;
27
+ }
28
+
29
+ const changes: any[] = [];
30
+ tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) =>
31
+ changes.push(JSON.stringify({ fromA, toA, fromB, toB, inserted: inserted.toString() })),
32
+ );
33
+
34
+ return changes;
35
+ })
36
+ .filter(Boolean);
37
+
38
+ if (changes.length) {
39
+ console.log('changes', changes);
40
+ }
41
+ };
@@ -1,12 +0,0 @@
1
- import { type StoryObj } from '@storybook/html';
2
- import { Client, type PublicKey } from '@dxos/react-client';
3
- declare const _default: {
4
- title: string;
5
- };
6
- export default _default;
7
- export declare const Default: StoryObj<{
8
- id: number;
9
- client: Client;
10
- spaceKey: PublicKey;
11
- }>;
12
- //# sourceMappingURL=codemirror.stories.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"codemirror.stories.d.ts","sourceRoot":"","sources":["../../../../../src/components/TextEditor/codemirror.stories.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAMhD,OAAO,EAAE,MAAM,EAAE,KAAK,SAAS,EAAE,MAAM,oBAAoB,CAAC;;;;AAS5D,wBAEE;AAqEF,eAAO,MAAM,OAAO,EAAE,QAAQ,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,CAAA;CAAE,CAoBjF,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"autocomplete.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/autocomplete.ts"],"names":[],"mappings":"AAQA,OAAO,EAGL,KAAK,UAAU,EAGhB,MAAM,0BAA0B,CAAC;AAGlC,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC;AAE5C,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,EAAE,CAAC;CAC1C,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,iBAAkB,mBAAmB,4CAgC7D,CAAC"}
@@ -1,9 +0,0 @@
1
- import { type Extension } from '@codemirror/state';
2
- import type { ThemeMode } from '@dxos/react-ui';
3
- export type BasicBundleOptions = {
4
- readonly?: boolean;
5
- themeMode?: ThemeMode;
6
- placeholder?: string;
7
- };
8
- export declare const basicBundle: ({ readonly, themeMode, placeholder: _placeholder }: BasicBundleOptions) => Extension[];
9
- //# sourceMappingURL=basic.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/basic.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAInD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAEhD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,WAAW,uDAAwD,kBAAkB,KAAG,SAAS,EAa5E,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"blast.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/blast.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAMnD,MAAM,MAAM,YAAY,GAAG;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,YAAY,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,gBAAgB,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,qBAAqB,EAAE;QAAE,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAAC,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KAAE,CAAC;IACpE,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,YAU5B,CAAC;AAEF,eAAO,MAAM,KAAK,aAAa,QAAQ,YAAY,CAAC,KAAoB,SAmEvE,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"code.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/code.ts"],"names":[],"mappings":"AAuDA,eAAO,MAAM,IAAI,+CA2ChB,CAAC"}