@dxos/react-ui-editor 0.3.10 → 0.3.11-main.0e40963
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.
- package/dist/lib/browser/index.mjs +1971 -1744
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts +14 -10
- package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TextEditor/TextEditor.d.ts +3 -2
- package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
- package/dist/types/src/components/TextEditor/index.d.ts +0 -2
- package/dist/types/src/components/TextEditor/index.d.ts.map +1 -1
- package/dist/types/src/extensions/autocomplete.d.ts.map +1 -0
- package/dist/types/src/extensions/basic.d.ts.map +1 -0
- package/dist/types/src/extensions/blast.d.ts.map +1 -0
- package/dist/types/src/extensions/code.d.ts.map +1 -0
- package/dist/types/src/extensions/comments.d.ts +48 -0
- package/dist/types/src/extensions/comments.d.ts.map +1 -0
- package/dist/types/src/extensions/hr.d.ts +2 -0
- package/dist/types/src/extensions/hr.d.ts.map +1 -0
- package/dist/types/src/extensions/image.d.ts.map +1 -0
- package/dist/types/src/{components/TextEditor/extensions → extensions}/index.d.ts +3 -3
- package/dist/types/src/extensions/index.d.ts.map +1 -0
- package/dist/types/src/{components/TextEditor/extensions → extensions}/link.d.ts +1 -0
- package/dist/types/src/extensions/link.d.ts.map +1 -0
- package/dist/types/src/extensions/listener.d.ts +10 -0
- package/dist/types/src/extensions/listener.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -0
- package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/highlight.d.ts +0 -1
- package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -0
- package/dist/types/src/extensions/markdown/index.d.ts.map +1 -0
- package/dist/types/src/extensions/mention.d.ts.map +1 -0
- package/dist/types/src/extensions/mermaid.d.ts +3 -0
- package/dist/types/src/extensions/mermaid.d.ts.map +1 -0
- package/dist/types/src/extensions/table.d.ts.map +1 -0
- package/dist/types/src/extensions/tasklist.d.ts.map +1 -0
- package/dist/types/src/{components/TextEditor/extensions/demo.d.ts → extensions/typewriter.d.ts} +2 -3
- package/dist/types/src/extensions/typewriter.d.ts.map +1 -0
- package/dist/types/src/extensions/util.d.ts +5 -0
- package/dist/types/src/extensions/util.d.ts.map +1 -0
- package/dist/types/src/hooks/automerge/automerge.stories.d.ts +2 -3
- package/dist/types/src/hooks/automerge/automerge.stories.d.ts.map +1 -1
- package/dist/types/src/hooks/automerge/plugin.d.ts.map +1 -1
- package/dist/types/src/hooks/automerge/{PatchSemaphore.d.ts → semaphore.d.ts} +1 -1
- package/dist/types/src/hooks/automerge/semaphore.d.ts.map +1 -0
- package/dist/types/src/hooks/automerge/update-automerge.d.ts +6 -0
- package/dist/types/src/hooks/automerge/update-automerge.d.ts.map +1 -0
- package/dist/types/src/hooks/automerge/update-codemirror.d.ts +5 -0
- package/dist/types/src/hooks/automerge/update-codemirror.d.ts.map +1 -0
- package/dist/types/src/hooks/useTextModel.d.ts +14 -6
- package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
- package/dist/types/src/hooks/yjs/yjs.test.d.ts +2 -0
- package/dist/types/src/hooks/yjs/yjs.test.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +3 -0
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/testing/replicator.d.ts.map +1 -1
- package/dist/types/src/{components/TextEditor/themes → themes}/default.d.ts +5 -13
- package/dist/types/src/themes/default.d.ts.map +1 -0
- package/dist/types/src/themes/index.d.ts.map +1 -0
- package/package.json +24 -20
- package/src/components/TextEditor/MarkdownEditor.stories.tsx +130 -71
- package/src/components/TextEditor/TextEditor.stories.tsx +2 -2
- package/src/components/TextEditor/TextEditor.tsx +29 -25
- package/src/components/TextEditor/index.ts +0 -3
- package/src/{components/TextEditor/extensions → extensions}/code.ts +13 -13
- package/src/extensions/comments.ts +391 -0
- package/src/extensions/hr.ts +74 -0
- package/src/{components/TextEditor/extensions → extensions}/image.ts +3 -1
- package/src/{components/TextEditor/extensions → extensions}/index.ts +3 -3
- package/src/{components/TextEditor/extensions → extensions}/link.ts +66 -10
- package/src/extensions/listener.ts +35 -0
- package/src/{components/TextEditor/extensions → extensions}/markdown/highlight.ts +6 -9
- package/src/extensions/mermaid.ts +11 -0
- package/src/{components/TextEditor/extensions → extensions}/table.ts +14 -1
- package/src/{components/TextEditor/extensions/demo.ts → extensions/typewriter.ts} +2 -3
- package/src/extensions/util.ts +18 -0
- package/src/hooks/automerge/automerge.stories.tsx +2 -3
- package/src/hooks/automerge/plugin.ts +1 -1
- package/src/hooks/automerge/{PatchSemaphore.ts → semaphore.ts} +4 -3
- package/src/hooks/automerge/{translation/codemirror-to-automerge.ts → update-automerge.ts} +3 -3
- package/src/hooks/automerge/{translation/automerge-to-codemirror.ts → update-codemirror.ts} +2 -7
- package/src/hooks/useTextModel.ts +60 -22
- package/src/hooks/yjs/yjs.test.ts +59 -0
- package/src/index.ts +3 -0
- package/src/testing/replicator.ts +0 -1
- package/src/{components/TextEditor/themes → themes}/default.ts +61 -38
- package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/basic.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/blast.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/code.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/comments.d.ts +0 -18
- package/dist/types/src/components/TextEditor/extensions/comments.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/demo.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/experimental.d.ts +0 -10
- package/dist/types/src/components/TextEditor/extensions/experimental.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/highlight.d.ts +0 -24
- package/dist/types/src/components/TextEditor/extensions/highlight.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/image.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/index.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/link.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/listener.d.ts +0 -9
- package/dist/types/src/components/TextEditor/extensions/listener.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/mention.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/table.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts +0 -12
- package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/themes/default.d.ts.map +0 -1
- package/dist/types/src/components/TextEditor/themes/index.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge/PatchSemaphore.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge/translation/automerge-to-codemirror.d.ts +0 -5
- package/dist/types/src/hooks/automerge/translation/automerge-to-codemirror.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge/translation/codemirror-to-automerge.d.ts +0 -6
- package/dist/types/src/hooks/automerge/translation/codemirror-to-automerge.d.ts.map +0 -1
- package/dist/types/src/hooks/automerge/translation/index.d.ts +0 -3
- package/dist/types/src/hooks/automerge/translation/index.d.ts.map +0 -1
- package/src/components/TextEditor/extensions/comments.ts +0 -173
- package/src/components/TextEditor/extensions/experimental.tsx +0 -114
- package/src/components/TextEditor/extensions/highlight.ts +0 -128
- package/src/components/TextEditor/extensions/listener.ts +0 -23
- package/src/components/TextEditor/extensions/tooltip.tsx +0 -61
- package/src/hooks/automerge/translation/index.ts +0 -6
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/autocomplete.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/basic.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/blast.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/code.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/image.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/bundle.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/markdown/index.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/mention.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/table.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/extensions → extensions}/tasklist.d.ts +0 -0
- /package/dist/types/src/{components/TextEditor/themes → themes}/index.d.ts +0 -0
- /package/src/{components/TextEditor/extensions → extensions}/autocomplete.ts +0 -0
- /package/src/{components/TextEditor/extensions → extensions}/basic.ts +0 -0
- /package/src/{components/TextEditor/extensions → extensions}/blast.ts +0 -0
- /package/src/{components/TextEditor/extensions → extensions}/markdown/bundle.ts +0 -0
- /package/src/{components/TextEditor/extensions → extensions}/markdown/index.ts +0 -0
- /package/src/{components/TextEditor/extensions → extensions}/mention.ts +0 -0
- /package/src/{components/TextEditor/extensions → extensions}/tasklist.ts +0 -0
- /package/src/{components/TextEditor/themes → themes}/index.ts +0 -0
|
@@ -3,9 +3,11 @@
|
|
|
3
3
|
//
|
|
4
4
|
|
|
5
5
|
import get from 'lodash.get';
|
|
6
|
-
import { type StyleSpec } from 'style-mod';
|
|
7
6
|
|
|
8
|
-
import { tokens } from '
|
|
7
|
+
import { type ThemeStyles, tokens } from '../styles';
|
|
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
11
|
|
|
10
12
|
/**
|
|
11
13
|
* Minimal styles.
|
|
@@ -18,19 +20,31 @@ import { tokens } from '../../../styles';
|
|
|
18
20
|
* NOTE: Use one of '&', '&light', and '&dark' prefix to scope instance.
|
|
19
21
|
* NOTE: `light` and `dark` selectors are preprocessed by CodeMirror and can only be in the base theme.
|
|
20
22
|
*/
|
|
21
|
-
export const defaultTheme: {
|
|
22
|
-
[selector: string]: StyleSpec;
|
|
23
|
-
} = {
|
|
23
|
+
export const defaultTheme: ThemeStyles = {
|
|
24
24
|
//
|
|
25
25
|
// Main layout:
|
|
26
|
-
//
|
|
27
|
-
//
|
|
28
|
-
//
|
|
29
|
-
//
|
|
26
|
+
// https://codemirror.net/examples/styling
|
|
27
|
+
//
|
|
28
|
+
// <div class="cm-editor [cm-focused] [generated classes]">
|
|
29
|
+
// <div class="cm-scroller">
|
|
30
|
+
// <div class="cm-gutters">
|
|
31
|
+
// <div class="cm-gutter [...]">
|
|
32
|
+
// <div class="cm-gutterElement">...</div>
|
|
33
|
+
// </div>
|
|
34
|
+
// </div>
|
|
35
|
+
// <div class="cm-content" role="textbox" contenteditable="true">
|
|
36
|
+
// <div class="cm-line"></div>
|
|
37
|
+
// </div>
|
|
38
|
+
// <div class="cm-selectionLayer">
|
|
39
|
+
// <div class="cm-selectionBackground"></div>
|
|
40
|
+
// </div>
|
|
41
|
+
// <div class="cm-cursorLayer">
|
|
42
|
+
// <div class="cm-cursor"></div>
|
|
30
43
|
// </div>
|
|
31
44
|
// </div>
|
|
32
45
|
// </div>
|
|
33
46
|
//
|
|
47
|
+
|
|
34
48
|
'&': {},
|
|
35
49
|
'&.cm-focused': {
|
|
36
50
|
outline: 'none',
|
|
@@ -39,9 +53,10 @@ export const defaultTheme: {
|
|
|
39
53
|
overflow: 'visible',
|
|
40
54
|
fontFamily: get(tokens, 'fontFamily.mono', []).join(','),
|
|
41
55
|
},
|
|
56
|
+
|
|
42
57
|
'& .cm-content': {
|
|
43
58
|
padding: 0,
|
|
44
|
-
// Base font size (otherwise defined by HTML tag, which might be different for storybook).
|
|
59
|
+
// NOTE: Base font size (otherwise defined by HTML tag, which might be different for storybook).
|
|
45
60
|
fontSize: '16px',
|
|
46
61
|
},
|
|
47
62
|
'&light .cm-content': {
|
|
@@ -72,31 +87,41 @@ export const defaultTheme: {
|
|
|
72
87
|
'& .cm-line': {
|
|
73
88
|
paddingInline: 0,
|
|
74
89
|
},
|
|
75
|
-
'& .cm-line *': {},
|
|
76
90
|
'& .cm-activeLine': {
|
|
77
|
-
|
|
91
|
+
background: 'inherit',
|
|
78
92
|
},
|
|
79
93
|
|
|
80
94
|
//
|
|
81
|
-
//
|
|
95
|
+
// Selection
|
|
82
96
|
//
|
|
83
97
|
|
|
84
|
-
'&light .cm-selectionBackground
|
|
85
|
-
background: get(tokens, 'extend.colors.primary.
|
|
98
|
+
'&light .cm-selectionBackground': {
|
|
99
|
+
background: get(tokens, 'extend.colors.primary.100'),
|
|
86
100
|
},
|
|
87
|
-
'&
|
|
88
|
-
background: get(tokens, 'extend.colors.primary.
|
|
101
|
+
'&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground': {
|
|
102
|
+
background: get(tokens, 'extend.colors.primary.200'),
|
|
89
103
|
},
|
|
90
|
-
'&
|
|
91
|
-
background: get(tokens, 'extend.colors.primary.
|
|
104
|
+
'&dark .cm-selectionBackground': {
|
|
105
|
+
background: get(tokens, 'extend.colors.primary.700'),
|
|
92
106
|
},
|
|
93
|
-
'&dark .cm-
|
|
94
|
-
background: get(tokens, 'extend.colors.primary.600'
|
|
107
|
+
'&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground': {
|
|
108
|
+
background: get(tokens, 'extend.colors.primary.600'),
|
|
109
|
+
},
|
|
110
|
+
|
|
111
|
+
//
|
|
112
|
+
// Search
|
|
113
|
+
//
|
|
114
|
+
|
|
115
|
+
'&light .cm-searchMatch': {
|
|
116
|
+
backgroundColor: get(tokens, 'extend.colors.yellow.100'),
|
|
117
|
+
},
|
|
118
|
+
'&dark .cm-searchMatch': {
|
|
119
|
+
backgroundColor: get(tokens, 'extend.colors.yellow.700'),
|
|
95
120
|
},
|
|
96
121
|
|
|
97
122
|
//
|
|
98
123
|
// collaboration
|
|
99
|
-
// TODO(burdon): Review classnames (YJS dependent?)
|
|
124
|
+
// TODO(burdon): Review classnames (YJS dependent?) Note: e2e tests depend on this class.
|
|
100
125
|
//
|
|
101
126
|
|
|
102
127
|
'&light .cm-ySelection, &light .cm-yLineSelection': {
|
|
@@ -211,6 +236,7 @@ export const defaultTheme: {
|
|
|
211
236
|
|
|
212
237
|
/**
|
|
213
238
|
* Panels
|
|
239
|
+
* TODO(burdon): Needs styling attention (esp. dark mode).
|
|
214
240
|
* https://github.com/codemirror/search/blob/main/src/search.ts#L745
|
|
215
241
|
*
|
|
216
242
|
* Find/replace panel.
|
|
@@ -226,7 +252,6 @@ export const defaultTheme: {
|
|
|
226
252
|
*/
|
|
227
253
|
'& .cm-panels': {
|
|
228
254
|
border: `1px solid ${get(tokens, 'extend.colors.neutral.200')}`,
|
|
229
|
-
borderBottom: 'none',
|
|
230
255
|
},
|
|
231
256
|
'& .cm-panel': {
|
|
232
257
|
background: get(tokens, 'extend.colors.neutral.50'),
|
|
@@ -236,20 +261,22 @@ export const defaultTheme: {
|
|
|
236
261
|
margin: '4px',
|
|
237
262
|
fontFamily: get(tokens, 'fontFamily.body', []).join(','),
|
|
238
263
|
background: get(tokens, 'extend.colors.neutral.100'),
|
|
264
|
+
backgroundImage: 'none',
|
|
239
265
|
border: 'none',
|
|
266
|
+
'&:hover': {
|
|
267
|
+
background: get(tokens, 'extend.colors.neutral.200'),
|
|
268
|
+
},
|
|
269
|
+
'&:active': {
|
|
270
|
+
background: get(tokens, 'extend.colors.neutral.300'),
|
|
271
|
+
backgroundImage: 'none',
|
|
272
|
+
},
|
|
240
273
|
},
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
backgroundColor: get(tokens, 'extend.colors.yellow.100'),
|
|
244
|
-
},
|
|
245
|
-
'& .cm-searchMatch.cm-searchMatch-selected': {
|
|
246
|
-
backgroundColor: get(tokens, 'extend.colors.primary.100'),
|
|
274
|
+
'& .cm-panel input[type=checkbox]': {
|
|
275
|
+
marginRight: '0.4rem !important',
|
|
247
276
|
},
|
|
248
277
|
};
|
|
249
278
|
|
|
250
|
-
export const textTheme: {
|
|
251
|
-
[selector: string]: StyleSpec;
|
|
252
|
-
} = {
|
|
279
|
+
export const textTheme: ThemeStyles = {
|
|
253
280
|
'& .cm-scroller': {
|
|
254
281
|
fontFamily: get(tokens, 'fontFamily.body', []).join(','),
|
|
255
282
|
},
|
|
@@ -258,18 +285,14 @@ export const textTheme: {
|
|
|
258
285
|
},
|
|
259
286
|
};
|
|
260
287
|
|
|
261
|
-
export const markdownTheme: {
|
|
262
|
-
[selector: string]: StyleSpec;
|
|
263
|
-
} = {
|
|
288
|
+
export const markdownTheme: ThemeStyles = {
|
|
264
289
|
// NOTE: Must leave base font family as is (i.e., monospace) due to fenced code blocks.
|
|
265
290
|
'& .cm-placeholder': {
|
|
266
291
|
fontFamily: get(tokens, 'fontFamily.body', []).join(','),
|
|
267
292
|
},
|
|
268
293
|
};
|
|
269
294
|
|
|
270
|
-
export const codeTheme: {
|
|
271
|
-
[selector: string]: StyleSpec;
|
|
272
|
-
} = {
|
|
295
|
+
export const codeTheme: ThemeStyles = {
|
|
273
296
|
'& .cm-scroller': {
|
|
274
297
|
fontFamily: get(tokens, 'fontFamily.mono', []).join(','),
|
|
275
298
|
},
|
|
@@ -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 +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":"AAmDA,eAAO,MAAM,IAAI,+CA+ChB,CAAC"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { type Extension } from '@codemirror/state';
|
|
2
|
-
import { type Rect } from '@codemirror/view';
|
|
3
|
-
type CommentsInfo = {
|
|
4
|
-
active?: string;
|
|
5
|
-
items?: {
|
|
6
|
-
id: string;
|
|
7
|
-
pos: number;
|
|
8
|
-
location: Rect | null;
|
|
9
|
-
}[];
|
|
10
|
-
};
|
|
11
|
-
export type CommentsOptions = {
|
|
12
|
-
key?: string;
|
|
13
|
-
onCreate?: (from: number, to: number) => string | void;
|
|
14
|
-
onUpdate?: (info: CommentsInfo) => void;
|
|
15
|
-
};
|
|
16
|
-
export declare const comments: (options?: CommentsOptions) => Extension;
|
|
17
|
-
export {};
|
|
18
|
-
//# sourceMappingURL=comments.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"comments.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/comments.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAGL,KAAK,IAAI,EAOV,MAAM,kBAAkB,CAAC;AAqC1B,KAAK,YAAY,GAAG;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;CAC9D,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG;IAC5B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACvD,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,YAAY,KAAK,IAAI,CAAC;CACzC,CAAC;AAKF,eAAO,MAAM,QAAQ,aAAa,eAAe,KAAQ,SA0GxD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"demo.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/demo.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAKnD,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,IAAI,sBAA0C,WAAW,KAAQ,SAgD7E,CAAC"}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import { type Extension } from '@codemirror/state';
|
|
2
|
-
import { type DecorationSet, MatchDecorator, ViewPlugin, type ViewUpdate } from '@codemirror/view';
|
|
3
|
-
export declare const styles: Extension;
|
|
4
|
-
export declare function hyperLinkExtension(): ViewPlugin<{
|
|
5
|
-
readonly decorator: MatchDecorator;
|
|
6
|
-
decorations: DecorationSet;
|
|
7
|
-
update(update: ViewUpdate): void;
|
|
8
|
-
}>;
|
|
9
|
-
export declare const hyperlinkWidget: Extension;
|
|
10
|
-
//# sourceMappingURL=experimental.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"experimental.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/experimental.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAEL,KAAK,aAAa,EAElB,cAAc,EACd,UAAU,EACV,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAG1B,eAAO,MAAM,MAAM,WAYjB,CAAC;AAiDH,wBAAgB,kBAAkB;wBAGR,cAAc;;mBAOnB,UAAU;GAwB9B;AAED,eAAO,MAAM,eAAe,EAAE,SAA0C,CAAC"}
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { type Extension, StateField } from '@codemirror/state';
|
|
2
|
-
import { EditorView } from '@codemirror/view';
|
|
3
|
-
import { type DocumentRange } from '../../../hooks';
|
|
4
|
-
type HighlightRange = DocumentRange & {
|
|
5
|
-
active?: boolean;
|
|
6
|
-
};
|
|
7
|
-
/**
|
|
8
|
-
* Update field set.
|
|
9
|
-
*/
|
|
10
|
-
export declare const useHighlights: (view: EditorView | undefined, ranges?: HighlightRange[]) => void;
|
|
11
|
-
/**
|
|
12
|
-
* State field that tracks highlight ranges.
|
|
13
|
-
*/
|
|
14
|
-
export declare const highlightStateField: StateField<HighlightRange[]>;
|
|
15
|
-
/**
|
|
16
|
-
* Decorate ranges.
|
|
17
|
-
*/
|
|
18
|
-
export declare const highlightDecorations: Extension;
|
|
19
|
-
export type HighlightOptions = {
|
|
20
|
-
onChange?: (active?: string) => {};
|
|
21
|
-
};
|
|
22
|
-
export declare const highlight: (options?: HighlightOptions) => Extension;
|
|
23
|
-
export {};
|
|
24
|
-
//# sourceMappingURL=highlight.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/highlight.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAe,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAc,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAI1D,OAAO,EAAE,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAsBpD,KAAK,cAAc,GAAG,aAAa,GAAG;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC;AAK3D;;GAEG;AAEH,eAAO,MAAM,aAAa,SAAU,UAAU,GAAG,SAAS,WAAU,cAAc,EAAE,SAMnF,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,mBAAmB,8BAW9B,CAAC;AAEH;;GAEG;AAEH,eAAO,MAAM,oBAAoB,WAiB/B,CAAC;AAoCH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,KAAK,EAAE,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,SAAS,aAAa,gBAAgB,KAAQ,SAE1D,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/image.ts"],"names":[],"mappings":"AAKA,OAAO,EAEL,KAAK,SAAS,EAKf,MAAM,mBAAmB,CAAC;AAG3B,MAAM,MAAM,YAAY,GAAG,EAAE,CAAC;AAE9B,eAAO,MAAM,KAAK,aAAa,YAAY,KAAQ,SAMlD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/index.ts"],"names":[],"mappings":"AAIA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC;AAC1B,cAAc,SAAS,CAAC;AACxB,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"link.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/link.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,SAAS,EAKf,MAAM,mBAAmB,CAAC;AAO3B,MAAM,MAAM,WAAW,GAAG;IACxB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,IAAI,aAAa,WAAW,KAAQ,SAMhD,CAAC"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { StateField } from '@codemirror/state';
|
|
2
|
-
export type ListenerOptions = {
|
|
3
|
-
onChange: (text: string) => void;
|
|
4
|
-
};
|
|
5
|
-
/**
|
|
6
|
-
* Based on https://github.com/codemirror/dev/issues/44#issuecomment-789093799
|
|
7
|
-
*/
|
|
8
|
-
export declare const listener: ({ onChange }: ListenerOptions) => StateField<null>;
|
|
9
|
-
//# sourceMappingURL=listener.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"listener.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/listener.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,CAAC;AAEnE;;GAEG;AACH,eAAO,MAAM,QAAQ,iBAAkB,eAAe,qBAWrD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/TextEditor/extensions/markdown/bundle.ts"],"names":[],"mappings":"AAUA,OAAO,EAAe,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAYhE,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAIhD,MAAM,MAAM,qBAAqB,GAAG;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF;;;;;;;GAOG;AAEH,eAAO,MAAM,cAAc,wDAIxB,qBAAqB,KAAG,SAAS,EA6CnC,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/TextEditor/extensions/markdown/highlight.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAmB,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,KAAK,cAAc,EAAS,MAAM,iBAAiB,CAAC;AAmB7D;;;;GAIG;AACH,eAAO,MAAM,YAAY;;;;;;;;;;;;;;CAgBxB,CAAC;AAaF,eAAO,MAAM,sBAAsB,EAAE,cAAc,EAKlD,CAAC;AAEF;;;;;;;;;;GAUG;AACH,eAAO,MAAM,sBAAsB,cAAe,OAAO,mBAgIxD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../../src/components/TextEditor/extensions/markdown/index.ts"],"names":[],"mappings":"AAIA,cAAc,UAAU,CAAC;AACzB,cAAc,aAAa,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mention.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/mention.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,MAAM,cAAc,GAAG;IAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAAE,CAAC;CACtC,CAAC;AAEF,eAAO,MAAM,OAAO,iBAAkB,cAAc,KAAG,SAmBtD,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/table.ts"],"names":[],"mappings":"AAKA,OAAO,EAAoB,KAAK,QAAQ,EAAmB,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AAMnH,MAAM,MAAM,YAAY,GAAG,EAAE,CAAC;AAE9B;;;GAGG;AACH,eAAO,MAAM,KAAK,aAAa,YAAY,8BAM1C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tasklist.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/tasklist.ts"],"names":[],"mappings":"AA+DA,MAAM,MAAM,eAAe,GAAG,EAAE,CAAC;AAEjC,eAAO,MAAM,QAAQ,aAAa,eAAe,4CAuDhD,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { type Extension } from '@codemirror/state';
|
|
2
|
-
export type TooltipOptions = {
|
|
3
|
-
onHover: (el: Element, url: string) => void;
|
|
4
|
-
regexp?: RegExp;
|
|
5
|
-
};
|
|
6
|
-
/**
|
|
7
|
-
* https://codemirror.net/examples/tooltip
|
|
8
|
-
* https://codemirror.net/docs/ref/#view.hoverTooltip
|
|
9
|
-
* https://github.com/codemirror/view/blob/main/src/tooltip.ts
|
|
10
|
-
*/
|
|
11
|
-
export declare const tooltip: ({ onHover, regexp }: TooltipOptions) => Extension;
|
|
12
|
-
//# sourceMappingURL=tooltip.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tooltip.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/extensions/tooltip.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAOnD,MAAM,MAAM,cAAc,GAAG;IAC3B,OAAO,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,OAAO,wBAA8C,cAAc,KAAG,SAuC/E,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"default.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/themes/default.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AAI3C;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,EAAE;IACzB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAkO/B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE;IACtB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAQ/B,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE;IAC1B,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAM/B,CAAC;AAEF,eAAO,MAAM,SAAS,EAAE;IACtB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;CAQ/B,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/components/TextEditor/themes/index.ts"],"names":[],"mappings":"AAIA,cAAc,WAAW,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PatchSemaphore.d.ts","sourceRoot":"","sources":["../../../../../src/hooks/automerge/PatchSemaphore.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAAE,IAAI,IAAI,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE9D,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,KAAK,KAAK,EAA8E,MAAM,UAAU,CAAC;AAGlH,KAAK,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AAC/B,KAAK,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;AAE7B,KAAK,QAAQ,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK,IAAI,KAAK,KAAK,GAAG,SAAS,CAAC;AAE3F;;GAEG;AACH,qBAAa,cAAc;IACzB,MAAM,EAAG,KAAK,CAAC;IACf,YAAY,UAAS;IACrB,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAM;gBAEjB,KAAK,CAAC,EAAE,KAAK;IAMzB,SAAS,WAAY,UAAU,QAAQ,UAAU,UA0C/C;CACH"}
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import { type EditorSelection } from '@codemirror/state';
|
|
2
|
-
import { type EditorView } from '@codemirror/view';
|
|
3
|
-
import { type Patch, type Prop } from '@dxos/automerge/automerge';
|
|
4
|
-
export declare const automergeToCodemirror: (view: EditorView, selection: EditorSelection, target: Prop[], patches: Patch[]) => void;
|
|
5
|
-
//# sourceMappingURL=automerge-to-codemirror.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"automerge-to-codemirror.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/automerge/translation/automerge-to-codemirror.ts"],"names":[],"mappings":"AAMA,OAAO,EAA8B,KAAK,eAAe,EAAoB,MAAM,mBAAmB,CAAC;AACvG,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,OAAO,EAGL,KAAK,KAAK,EACV,KAAK,IAAI,EAGV,MAAM,2BAA2B,CAAC;AAInC,eAAO,MAAM,qBAAqB,SAC1B,UAAU,aACL,eAAe,UAClB,IAAI,EAAE,WACL,KAAK,EAAE,SAkBjB,CAAC"}
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { type EditorState, type Transaction } from '@codemirror/state';
|
|
2
|
-
import { type Heads } from '@dxos/automerge/automerge';
|
|
3
|
-
import { type IDocHandle } from '../handle';
|
|
4
|
-
import { type Field } from '../plugin';
|
|
5
|
-
export declare const codemirrorToAutomerge: (field: Field, handle: IDocHandle, transactions: Transaction[], state: EditorState) => Heads | undefined;
|
|
6
|
-
//# sourceMappingURL=codemirror-to-automerge.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"codemirror-to-automerge.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/automerge/translation/codemirror-to-automerge.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,KAAK,WAAW,EAAa,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAElF,OAAO,EAAc,KAAK,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAEnE,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,KAAK,KAAK,EAAE,MAAM,WAAW,CAAC;AAEvC,eAAO,MAAM,qBAAqB,yBAExB,UAAU,gBACJ,WAAW,EAAE,SACpB,WAAW,KACjB,KAAK,GAAG,SAyBV,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../../src/hooks/automerge/translation/index.ts"],"names":[],"mappings":"AAIA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,2BAA2B,CAAC"}
|
|
@@ -1,173 +0,0 @@
|
|
|
1
|
-
//
|
|
2
|
-
// Copyright 2023 DXOS.org
|
|
3
|
-
//
|
|
4
|
-
|
|
5
|
-
import { type Extension } from '@codemirror/state';
|
|
6
|
-
import {
|
|
7
|
-
keymap,
|
|
8
|
-
type DecorationSet,
|
|
9
|
-
type Rect,
|
|
10
|
-
type ViewUpdate,
|
|
11
|
-
Decoration,
|
|
12
|
-
EditorView,
|
|
13
|
-
MatchDecorator,
|
|
14
|
-
ViewPlugin,
|
|
15
|
-
WidgetType,
|
|
16
|
-
} from '@codemirror/view';
|
|
17
|
-
|
|
18
|
-
import { debounce } from '@dxos/async';
|
|
19
|
-
import { invariant } from '@dxos/invariant';
|
|
20
|
-
|
|
21
|
-
// TODO(burdon): Reconcile with theme.
|
|
22
|
-
const styles = EditorView.baseTheme({
|
|
23
|
-
'& .cm-bookmark': {
|
|
24
|
-
cursor: 'pointer',
|
|
25
|
-
margin: '4px',
|
|
26
|
-
padding: '4px',
|
|
27
|
-
backgroundColor: 'yellow',
|
|
28
|
-
},
|
|
29
|
-
'& .cm-bookmark-selected': {
|
|
30
|
-
backgroundColor: 'orange',
|
|
31
|
-
},
|
|
32
|
-
});
|
|
33
|
-
|
|
34
|
-
class BookmarkWidget extends WidgetType {
|
|
35
|
-
constructor(private readonly _pos: number, private readonly _id: string, private readonly _handleClick: () => void) {
|
|
36
|
-
super();
|
|
37
|
-
invariant(this._id);
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
override eq(other: BookmarkWidget) {
|
|
41
|
-
return this._id === other._id;
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
override toDOM() {
|
|
45
|
-
const span = document.createElement('span');
|
|
46
|
-
span.className = 'cm-bookmark';
|
|
47
|
-
span.textContent = '§';
|
|
48
|
-
span.onclick = () => this._handleClick();
|
|
49
|
-
return span;
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
type CommentsInfo = {
|
|
54
|
-
active?: string;
|
|
55
|
-
items?: { id: string; pos: number; location: Rect | null }[];
|
|
56
|
-
};
|
|
57
|
-
|
|
58
|
-
export type CommentsOptions = {
|
|
59
|
-
key?: string;
|
|
60
|
-
onCreate?: (from: number, to: number) => string | void;
|
|
61
|
-
onUpdate?: (info: CommentsInfo) => void;
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
// https://www.markdownguide.org/extended-syntax/#footnotes
|
|
65
|
-
// TODO(burdon): Record span in automerge model?
|
|
66
|
-
// TODO(burdon): Extended markdown: https://www.markdownguide.org/extended-syntax
|
|
67
|
-
export const comments = (options: CommentsOptions = {}): Extension => {
|
|
68
|
-
let active: string | undefined;
|
|
69
|
-
|
|
70
|
-
const bookmarkMatcher = new MatchDecorator({
|
|
71
|
-
regexp: /\[\^(\w+)\]/g,
|
|
72
|
-
decoration: (match, view, pos) => {
|
|
73
|
-
const id = match[1];
|
|
74
|
-
return Decoration.replace({
|
|
75
|
-
id,
|
|
76
|
-
widget: new BookmarkWidget(pos, id, () => handleUpdate({ active: id })),
|
|
77
|
-
});
|
|
78
|
-
},
|
|
79
|
-
});
|
|
80
|
-
|
|
81
|
-
const bookmarks = ViewPlugin.fromClass(
|
|
82
|
-
class {
|
|
83
|
-
bookmarks: DecorationSet;
|
|
84
|
-
constructor(view: EditorView) {
|
|
85
|
-
this.bookmarks = bookmarkMatcher.createDeco(view);
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
update(update: ViewUpdate) {
|
|
89
|
-
this.bookmarks = bookmarkMatcher.updateDeco(update, this.bookmarks);
|
|
90
|
-
}
|
|
91
|
-
},
|
|
92
|
-
{
|
|
93
|
-
decorations: (instance) => instance.bookmarks,
|
|
94
|
-
provide: (plugin) =>
|
|
95
|
-
EditorView.atomicRanges.of((view) => {
|
|
96
|
-
return view.plugin(plugin)?.bookmarks || Decoration.none;
|
|
97
|
-
}),
|
|
98
|
-
},
|
|
99
|
-
);
|
|
100
|
-
|
|
101
|
-
const handleUpdate = debounce((data: CommentsInfo) => {
|
|
102
|
-
options.onUpdate?.(data);
|
|
103
|
-
}, 200);
|
|
104
|
-
|
|
105
|
-
return [
|
|
106
|
-
keymap.of([
|
|
107
|
-
{
|
|
108
|
-
key: options?.key ?? 'shift-meta-c',
|
|
109
|
-
run: (view) => {
|
|
110
|
-
// Insert footnote.
|
|
111
|
-
const { from, to, head } = view.state.selection.main;
|
|
112
|
-
const id = options.onCreate?.(from, to);
|
|
113
|
-
if (id) {
|
|
114
|
-
const tag = `[^${id}]`;
|
|
115
|
-
// TODO(burdon): Add selection.
|
|
116
|
-
view.dispatch({
|
|
117
|
-
changes: { from: head, insert: tag },
|
|
118
|
-
selection: { anchor: head + tag.length },
|
|
119
|
-
});
|
|
120
|
-
|
|
121
|
-
return true;
|
|
122
|
-
}
|
|
123
|
-
|
|
124
|
-
return false;
|
|
125
|
-
},
|
|
126
|
-
},
|
|
127
|
-
]),
|
|
128
|
-
|
|
129
|
-
bookmarks,
|
|
130
|
-
|
|
131
|
-
// Monitor cursor movement.
|
|
132
|
-
EditorView.updateListener.of((update) => {
|
|
133
|
-
active = undefined;
|
|
134
|
-
if (!options.onUpdate) {
|
|
135
|
-
return;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
const { view, state } = update;
|
|
139
|
-
const pos = state.selection.main.head;
|
|
140
|
-
|
|
141
|
-
const decorations: { from: number; to: number; value: Decoration }[] = [];
|
|
142
|
-
const rangeSet = view.plugin(bookmarks)?.bookmarks;
|
|
143
|
-
let closest = Infinity;
|
|
144
|
-
// TODO(burdon): Handle multiple visible ranges in large documents.
|
|
145
|
-
const { from, to } = /* view.visibleRanges?.[0] ?? */ { from: 0, to: state.doc.length };
|
|
146
|
-
rangeSet?.between(from, to, (from, to, value) => {
|
|
147
|
-
decorations.push({ from, to, value });
|
|
148
|
-
const d = Math.min(Math.abs(pos - from), Math.abs(pos - to));
|
|
149
|
-
if (d < closest) {
|
|
150
|
-
// TODO(burdon): Update class of selected.
|
|
151
|
-
active = value.spec.id;
|
|
152
|
-
closest = d;
|
|
153
|
-
}
|
|
154
|
-
});
|
|
155
|
-
|
|
156
|
-
if (decorations.length) {
|
|
157
|
-
handleUpdate({
|
|
158
|
-
active,
|
|
159
|
-
items: decorations.map(
|
|
160
|
-
({
|
|
161
|
-
from,
|
|
162
|
-
value: {
|
|
163
|
-
spec: { id },
|
|
164
|
-
},
|
|
165
|
-
}) => ({ id: id as string, pos: from, location: view.coordsAtPos(from) }),
|
|
166
|
-
),
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
}),
|
|
170
|
-
|
|
171
|
-
styles,
|
|
172
|
-
];
|
|
173
|
-
};
|