@dxos/react-ui-editor 0.3.9 → 0.3.10-main.04816d3

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 (128) hide show
  1. package/dist/lib/browser/index.mjs +952 -736
  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 +38 -0
  5. package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -0
  6. package/dist/types/src/components/TextEditor/TextEditor.d.ts +5 -2
  7. package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
  8. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +9 -4
  9. package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts.map +1 -1
  10. package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts +10 -0
  11. package/dist/types/src/components/TextEditor/extensions/autocomplete.d.ts.map +1 -0
  12. package/dist/types/src/components/TextEditor/extensions/{basic/bundle.d.ts → basic.d.ts} +1 -1
  13. package/dist/types/src/components/TextEditor/extensions/basic.d.ts.map +1 -0
  14. package/dist/types/src/components/TextEditor/extensions/comments.d.ts +18 -0
  15. package/dist/types/src/components/TextEditor/extensions/comments.d.ts.map +1 -0
  16. package/dist/types/src/components/TextEditor/extensions/demo.d.ts +10 -0
  17. package/dist/types/src/components/TextEditor/extensions/demo.d.ts.map +1 -0
  18. package/dist/types/src/components/TextEditor/extensions/{hyperlink/hyperlinkWidget.d.ts → experimental.d.ts} +2 -2
  19. package/dist/types/src/components/TextEditor/extensions/experimental.d.ts.map +1 -0
  20. package/dist/types/src/components/TextEditor/extensions/index.d.ts +7 -2
  21. package/dist/types/src/components/TextEditor/extensions/index.d.ts.map +1 -1
  22. package/dist/types/src/components/TextEditor/extensions/link.d.ts +11 -0
  23. package/dist/types/src/components/TextEditor/extensions/link.d.ts.map +1 -0
  24. package/dist/types/src/components/TextEditor/extensions/listener.d.ts +9 -0
  25. package/dist/types/src/components/TextEditor/extensions/listener.d.ts.map +1 -0
  26. package/dist/types/src/components/TextEditor/extensions/markdown/bundle.d.ts.map +1 -1
  27. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts +31 -0
  28. package/dist/types/src/components/TextEditor/extensions/markdown/highlight.d.ts.map +1 -0
  29. package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts +1 -1
  30. package/dist/types/src/components/TextEditor/extensions/markdown/index.d.ts.map +1 -1
  31. package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts +2 -0
  32. package/dist/types/src/components/TextEditor/extensions/tasklist.d.ts.map +1 -0
  33. package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts +12 -0
  34. package/dist/types/src/components/TextEditor/extensions/tooltip.d.ts.map +1 -0
  35. package/dist/types/src/components/TextEditor/index.d.ts +2 -0
  36. package/dist/types/src/components/TextEditor/index.d.ts.map +1 -1
  37. package/dist/types/src/components/TextEditor/themes/default.d.ts +20 -0
  38. package/dist/types/src/components/TextEditor/themes/default.d.ts.map +1 -0
  39. package/dist/types/src/components/TextEditor/themes/index.d.ts +2 -0
  40. package/dist/types/src/components/TextEditor/themes/index.d.ts.map +1 -0
  41. package/dist/types/src/components/TextEditor/yjs.stories.d.ts +1 -0
  42. package/dist/types/src/components/TextEditor/yjs.stories.d.ts.map +1 -1
  43. package/dist/types/src/hooks/automerge/PatchSemaphore.d.ts.map +1 -0
  44. package/dist/types/src/hooks/automerge/amToCodemirror.d.ts.map +1 -0
  45. package/dist/types/src/hooks/automerge/automerge.stories.d.ts.map +1 -0
  46. package/dist/types/src/hooks/automerge/codeMirrorToAm.d.ts.map +1 -0
  47. package/dist/types/src/hooks/automerge/handle.d.ts.map +1 -0
  48. package/dist/types/src/hooks/automerge/index.d.ts.map +1 -0
  49. package/dist/types/src/hooks/automerge/plugin.d.ts.map +1 -0
  50. package/dist/types/src/hooks/index.d.ts +0 -1
  51. package/dist/types/src/hooks/index.d.ts.map +1 -1
  52. package/dist/types/src/hooks/useTextModel.d.ts +4 -4
  53. package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
  54. package/dist/types/src/styles/markdown.d.ts +12 -10
  55. package/dist/types/src/styles/markdown.d.ts.map +1 -1
  56. package/dist/types/src/testing/replicator.d.ts.map +1 -1
  57. package/package.json +22 -32
  58. package/src/components/TextEditor/MarkdownEditor.stories.tsx +275 -0
  59. package/src/components/TextEditor/TextEditor.stories.tsx +46 -43
  60. package/src/components/TextEditor/TextEditor.tsx +79 -44
  61. package/src/components/TextEditor/extensions/autocomplete.ts +74 -0
  62. package/src/components/TextEditor/extensions/{basic/bundle.ts → basic.ts} +4 -2
  63. package/src/components/TextEditor/extensions/comments.ts +190 -0
  64. package/src/components/TextEditor/extensions/demo.ts +66 -0
  65. package/src/components/TextEditor/extensions/{hyperlink/hyperlinkWidget.tsx → experimental.tsx} +18 -2
  66. package/src/components/TextEditor/extensions/index.ts +7 -2
  67. package/src/components/TextEditor/extensions/{hyperlink/hyperlinkDecoration.ts → link.ts} +76 -31
  68. package/src/components/TextEditor/extensions/{change.ts → listener.ts} +4 -3
  69. package/src/components/TextEditor/extensions/markdown/bundle.ts +21 -25
  70. package/src/components/TextEditor/extensions/markdown/highlight.ts +167 -0
  71. package/src/components/TextEditor/extensions/markdown/index.ts +1 -1
  72. package/src/components/TextEditor/extensions/tasklist.ts +107 -0
  73. package/src/components/TextEditor/extensions/{hyperlink/hyperlinkTooltip.tsx → tooltip.tsx} +9 -9
  74. package/src/components/TextEditor/index.ts +3 -0
  75. package/src/components/TextEditor/themes/default.ts +185 -0
  76. package/src/components/TextEditor/themes/index.ts +5 -0
  77. package/src/components/TextEditor/yjs.stories.tsx +1 -0
  78. package/src/{automerge → hooks/automerge}/automerge.stories.tsx +2 -1
  79. package/src/hooks/index.ts +0 -1
  80. package/src/hooks/useTextModel.ts +52 -39
  81. package/src/styles/markdown.ts +26 -24
  82. package/src/testing/replicator.ts +6 -6
  83. package/dist/types/src/automerge/automerge-plugin/PatchSemaphore.d.ts.map +0 -1
  84. package/dist/types/src/automerge/automerge-plugin/amToCodemirror.d.ts.map +0 -1
  85. package/dist/types/src/automerge/automerge-plugin/codeMirrorToAm.d.ts.map +0 -1
  86. package/dist/types/src/automerge/automerge-plugin/handle.d.ts.map +0 -1
  87. package/dist/types/src/automerge/automerge-plugin/index.d.ts.map +0 -1
  88. package/dist/types/src/automerge/automerge-plugin/plugin.d.ts.map +0 -1
  89. package/dist/types/src/automerge/automerge.stories.d.ts.map +0 -1
  90. package/dist/types/src/components/TextEditor/extensions/basic/bundle.d.ts.map +0 -1
  91. package/dist/types/src/components/TextEditor/extensions/basic/index.d.ts +0 -3
  92. package/dist/types/src/components/TextEditor/extensions/basic/index.d.ts.map +0 -1
  93. package/dist/types/src/components/TextEditor/extensions/basic/theme.d.ts +0 -10
  94. package/dist/types/src/components/TextEditor/extensions/basic/theme.d.ts.map +0 -1
  95. package/dist/types/src/components/TextEditor/extensions/change.d.ts +0 -7
  96. package/dist/types/src/components/TextEditor/extensions/change.d.ts.map +0 -1
  97. package/dist/types/src/components/TextEditor/extensions/hyperlink/hyperlinkDecoration.d.ts +0 -11
  98. package/dist/types/src/components/TextEditor/extensions/hyperlink/hyperlinkDecoration.d.ts.map +0 -1
  99. package/dist/types/src/components/TextEditor/extensions/hyperlink/hyperlinkTooltip.d.ts +0 -8
  100. package/dist/types/src/components/TextEditor/extensions/hyperlink/hyperlinkTooltip.d.ts.map +0 -1
  101. package/dist/types/src/components/TextEditor/extensions/hyperlink/hyperlinkWidget.d.ts.map +0 -1
  102. package/dist/types/src/components/TextEditor/extensions/hyperlink/index.d.ts +0 -4
  103. package/dist/types/src/components/TextEditor/extensions/hyperlink/index.d.ts.map +0 -1
  104. package/dist/types/src/components/TextEditor/extensions/markdown/tags.d.ts +0 -17
  105. package/dist/types/src/components/TextEditor/extensions/markdown/tags.d.ts.map +0 -1
  106. package/dist/types/src/components/TextEditor/extensions/markdown/theme.d.ts +0 -21
  107. package/dist/types/src/components/TextEditor/extensions/markdown/theme.d.ts.map +0 -1
  108. package/dist/types/src/hooks/useCollaboration.d.ts +0 -9
  109. package/dist/types/src/hooks/useCollaboration.d.ts.map +0 -1
  110. package/src/components/TextEditor/extensions/basic/index.ts +0 -6
  111. package/src/components/TextEditor/extensions/basic/theme.ts +0 -49
  112. package/src/components/TextEditor/extensions/hyperlink/index.ts +0 -7
  113. package/src/components/TextEditor/extensions/markdown/tags.ts +0 -38
  114. package/src/components/TextEditor/extensions/markdown/theme.ts +0 -265
  115. package/src/hooks/useCollaboration.ts +0 -45
  116. /package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/PatchSemaphore.d.ts +0 -0
  117. /package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/amToCodemirror.d.ts +0 -0
  118. /package/dist/types/src/{automerge → hooks/automerge}/automerge.stories.d.ts +0 -0
  119. /package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/codeMirrorToAm.d.ts +0 -0
  120. /package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/handle.d.ts +0 -0
  121. /package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/index.d.ts +0 -0
  122. /package/dist/types/src/{automerge/automerge-plugin → hooks/automerge}/plugin.d.ts +0 -0
  123. /package/src/{automerge/automerge-plugin → hooks/automerge}/PatchSemaphore.ts +0 -0
  124. /package/src/{automerge/automerge-plugin → hooks/automerge}/amToCodemirror.ts +0 -0
  125. /package/src/{automerge/automerge-plugin → hooks/automerge}/codeMirrorToAm.ts +0 -0
  126. /package/src/{automerge/automerge-plugin → hooks/automerge}/handle.ts +0 -0
  127. /package/src/{automerge/automerge-plugin → hooks/automerge}/index.ts +0 -0
  128. /package/src/{automerge/automerge-plugin → hooks/automerge}/plugin.ts +0 -0
@@ -1,6 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export * from './bundle';
6
- export * from './theme';
@@ -1,49 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import get from 'lodash.get';
6
- import { type StyleSpec } from 'style-mod';
7
-
8
- import { tokens } from '../../../../styles';
9
-
10
- /**
11
- * Minimal styles.
12
- * NOTE: The '&' prefix denotes the CM editor root.
13
- * https://codemirror.net/examples/styling
14
- */
15
- // TODO(burdon): Remove?
16
- export const basicTheme: {
17
- [selector: string]: StyleSpec;
18
- } = {
19
- '&.cm-focused': {
20
- outline: 'none',
21
- },
22
- '& .cm-line': {
23
- paddingInline: 0,
24
- lineHeight: 1.6,
25
- minBlockSize: '1.6em',
26
- },
27
- '& .cm-line *': {
28
- lineHeight: 1.6,
29
- },
30
- '& .cm-scroller': {
31
- fontFamily: get(tokens, 'fontFamily.body', []).join(','),
32
- overflow: 'visible',
33
- },
34
- '& .cm-content': {
35
- padding: 0,
36
- caretColor: 'black',
37
- },
38
- '.dark & .cm-content': {
39
- caretColor: 'white',
40
- },
41
- '& .cm-tooltip': {
42
- backgroundColor: 'transparent',
43
- border: 'none',
44
- },
45
- '& .cm-link': {
46
- color: get(tokens, 'extend.colors.primary.500'),
47
- textDecoration: 'underline',
48
- },
49
- };
@@ -1,7 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- export * from './hyperlinkDecoration';
6
- export * from './hyperlinkTooltip';
7
- export * from './hyperlinkWidget';
@@ -1,38 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { styleTags, Tag } from '@lezer/highlight';
6
- import { type MarkdownConfig } from '@lezer/markdown';
7
-
8
- export const markdownTags = {
9
- headingMark: Tag.define(),
10
- quoteMark: Tag.define(),
11
- listMark: Tag.define(),
12
- linkMark: Tag.define(),
13
- emphasisMark: Tag.define(),
14
- codeMark: Tag.define(),
15
- codeText: Tag.define(),
16
- inlineCode: Tag.define(),
17
- url: Tag.define(),
18
- linkReference: Tag.define(),
19
- linkLabel: Tag.define(),
20
- };
21
-
22
- export const markdownTagsExtension: MarkdownConfig = {
23
- props: [
24
- styleTags({
25
- HeaderMark: markdownTags.headingMark,
26
- QuoteMark: markdownTags.quoteMark,
27
- ListMark: markdownTags.listMark,
28
- LinkMark: markdownTags.linkMark,
29
- EmphasisMark: markdownTags.emphasisMark,
30
- CodeMark: markdownTags.codeMark,
31
- CodeText: markdownTags.codeText,
32
- InlineCode: markdownTags.inlineCode,
33
- URL: markdownTags.url,
34
- LinkReference: markdownTags.linkReference,
35
- LinkLabel: markdownTags.linkLabel,
36
- }),
37
- ],
38
- };
@@ -1,265 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import { markdownLanguage } from '@codemirror/lang-markdown';
6
- import { HighlightStyle } from '@codemirror/language';
7
- import { tags } from '@lezer/highlight';
8
- import get from 'lodash.get';
9
-
10
- import { markdownTags } from './tags';
11
- import { bold, heading, italic, mark, strikethrough, tokens, type ThemeStyles } from '../../../../styles';
12
-
13
- // TODO(burdon): Rationalize theme/colors. Hoist onto single property object.
14
- export const chalky = '#e5c07b';
15
- export const coral = '#e06c75';
16
- export const cyan = '#56b6c2';
17
- export const invalid = '#ffffff';
18
- export const ivory = '#abb2bf';
19
- export const stone = '#7d8799';
20
- export const malibu = '#61afef';
21
- export const sage = '#98c379';
22
- export const whiskey = '#d19a66';
23
- export const violet = '#c678dd';
24
- const _darkBackground = '#21252b';
25
- export const highlightBackground = '#2c313a';
26
- const _background = '#282c34';
27
- export const tooltipBackground = '#353a42';
28
- const _selection = '#3E4451';
29
-
30
- const monospace = get(tokens, 'fontFamily.mono', ['monospace']).join(',');
31
-
32
- /**
33
- * NOTE: The '&' prefix denotes the CM editor root.
34
- * https://codemirror.net/examples/styling
35
- */
36
- export const markdownTheme: ThemeStyles = {
37
- // TODO(thure): Consider whether these commented-out rules from one-dark-theme should be integrated.
38
- // '&': {
39
- // color: ivory,
40
- // backgroundColor: background
41
- // },
42
- // '.cm-cursor, .cm-dropCursor': { borderLeftColor: cursor },
43
- // '&.cm-focused .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection': {
44
- // backgroundColor: selection
45
- // },
46
- // '.cm-panels': { backgroundColor: darkBackground, color: ivory },
47
- // '.cm-panels.cm-panels-top': { borderBottom: '2px solid black' },
48
- // '.cm-panels.cm-panels-bottom': { borderTop: '2px solid black' },
49
- // '.cm-searchMatch': {
50
- // backgroundColor: '#72a1ff59',
51
- // outline: '1px solid #457dff'
52
- // },
53
- // '.cm-searchMatch.cm-searchMatch-selected': {
54
- // backgroundColor: '#6199ff2f'
55
- // },
56
- // '.cm-activeLine': { backgroundColor: '#6699ff0b' },
57
- // '.cm-selectionMatch': { backgroundColor: '#aafe661a' },
58
- // '&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket': {
59
- // backgroundColor: '#bad0f847'
60
- // },
61
- // '.cm-gutters': {
62
- // backgroundColor: background,
63
- // color: stone,
64
- // border: 'none'
65
- // },
66
- // '.cm-activeLineGutter': {
67
- // backgroundColor: highlightBackground
68
- // },
69
- // '.cm-foldPlaceholder': {
70
- // backgroundColor: 'transparent',
71
- // border: 'none',
72
- // color: '#ddd'
73
- // },
74
-
75
- '& .cm-tooltip': {
76
- backgroundColor: 'transparent',
77
- border: 'none',
78
- },
79
- // '.dark & .cm-tooltip': {
80
- // border: 'none',
81
- // backgroundColor: tooltipBackground,
82
- // },
83
- // '.dark & .cm-tooltip .cm-tooltip-arrow:before': {
84
- // borderTopColor: 'transparent',
85
- // borderBottomColor: 'transparent',
86
- // },
87
- // '.dark & .cm-tooltip .cm-tooltip-arrow:after': {
88
- // borderTopColor: tooltipBackground,
89
- // borderBottomColor: tooltipBackground,
90
- // },
91
- // '.dark & .cm-tooltip-autocomplete': {
92
- // '& > ul > li[aria-selected]': {
93
- // backgroundColor: highlightBackground,
94
- // color: ivory,
95
- // },
96
- // },
97
- '&.cm-focused': {
98
- outline: 'none',
99
- },
100
- '& .cm-line': {
101
- paddingInline: 0,
102
- lineHeight: 1.6,
103
- minBlockSize: '1.6em',
104
- },
105
- '& .cm-line *': {
106
- lineHeight: 1.6,
107
- },
108
- '&.cm-focused .cm-selectionBackground, & .cm-selectionBackground': {
109
- background: get(tokens, 'extend.colors.primary.150', '#00ffff'),
110
- },
111
- '.dark & .cm-selectionBackground, .dark &.cm-focused .cm-selectionBackground': {
112
- background: get(tokens, 'extend.colors.primary.850', '#00ffff'),
113
- },
114
- '& .cm-selectionMatch': {
115
- background: get(tokens, 'extend.colors.primary.250', '#00ffff') + '44',
116
- },
117
- '.dark & .cm-selectionMatch': {
118
- background: get(tokens, 'extend.colors.primary.600', '#00ffff') + '44',
119
- },
120
- '& .cm-content': {
121
- padding: 0,
122
- caretColor: 'black',
123
- },
124
- '.dark & .cm-content': {
125
- caretColor: 'white',
126
- },
127
- '& .cm-cursor': {
128
- borderLeftColor: 'black',
129
- },
130
- '.dark & .cm-cursor': {
131
- borderLeftColor: 'white',
132
- },
133
- '.cm-placeholder': {
134
- fontFamily: get(tokens, 'fontFamily.body', []).join(','),
135
- },
136
- '& .cm-scroller': {
137
- fontFamily: get(tokens, 'fontFamily.mono', []).join(','),
138
- overflow: 'visible',
139
- },
140
- '& .cm-activeLine': {
141
- backgroundColor: 'transparent',
142
- },
143
- '.dark & .cm-activeLine': {
144
- backgroundColor: 'transparent',
145
- },
146
- '& .cm-ySelectionInfo': {
147
- fontFamily: get(tokens, 'fontFamily.body', []).join(','),
148
- padding: '2px 4px',
149
- marginBlockStart: '-4px',
150
- },
151
- '& .cm-ySelection, & .cm-selectionMatch': {
152
- paddingBlockStart: '.15em',
153
- paddingBlockEnd: '.15em',
154
- },
155
- '& .cm-ySelection, & .cm-yLineSelection': {
156
- mixBlendMode: 'multiply',
157
- },
158
- '.dark & .cm-ySelection, .dark & .cm-yLineSelection': {
159
- mixBlendMode: 'screen',
160
- },
161
- '& .cm-ySelectionCaret': {
162
- display: 'inline-block',
163
- insetBlockStart: '.1em',
164
- blockSize: '1.4em',
165
- verticalAlign: 'top',
166
- },
167
- '& .cm-yLineSelection': {
168
- margin: '0',
169
- },
170
- '.cm-link': {
171
- color: 'rgb(20 89 208)', // TODO(burdon): Rationalize.
172
- textDecorationLine: 'underline',
173
- textDecorationThickness: '1px',
174
- textUnderlineOffset: '2px',
175
- borderRadius: '.125rem',
176
- },
177
- // TODO(burdon): Document.
178
- ...Object.keys(get(tokens, 'extend.fontSize', {})).reduce((acc: Record<string, any>, fontSize) => {
179
- const height = get(tokens, ['extend', 'fontSize', fontSize, 1, 'lineHeight']);
180
- // 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.
181
- acc[`& .text-${fontSize} + .cm-ySelectionCaret`] = { height };
182
- acc[`& .text-${fontSize} + .cm-ySelection + .cm-ySelectionCaret`] = { height };
183
- acc[`& .text-${fontSize} + .cm-widgetBuffer + .cm-ySelectionCaret`] = { height };
184
- return acc;
185
- }, {}),
186
- };
187
-
188
- export const markdownHighlightStyle = HighlightStyle.define(
189
- [
190
- {
191
- tag: [
192
- tags.keyword,
193
- tags.name,
194
- tags.deleted,
195
- tags.character,
196
- tags.propertyName,
197
- tags.macroName,
198
- tags.color,
199
- tags.constant(tags.name),
200
- tags.standard(tags.name),
201
- tags.definition(tags.name),
202
- tags.separator,
203
- tags.typeName,
204
- tags.className,
205
- tags.number,
206
- tags.changed,
207
- tags.annotation,
208
- tags.modifier,
209
- tags.self,
210
- tags.namespace,
211
- tags.operator,
212
- tags.operatorKeyword,
213
- tags.escape,
214
- tags.regexp,
215
- tags.special(tags.string),
216
- tags.meta,
217
- tags.comment,
218
- tags.atom,
219
- tags.bool,
220
- tags.special(tags.variableName),
221
- tags.processingInstruction,
222
- tags.string,
223
- tags.inserted,
224
- tags.invalid,
225
- ],
226
- color: 'inherit !important',
227
- },
228
- {
229
- tag: [tags.link, tags.url],
230
- color: 'inherit !important',
231
- textDecoration: 'none !important',
232
- },
233
- {
234
- tag: [tags.function(tags.variableName), tags.labelName],
235
- color: malibu,
236
- fontFamily: monospace,
237
- },
238
- {
239
- tag: [
240
- markdownTags.codeMark,
241
- markdownTags.emphasisMark,
242
- markdownTags.headingMark,
243
- markdownTags.linkLabel,
244
- markdownTags.linkReference,
245
- markdownTags.listMark,
246
- markdownTags.quoteMark,
247
- markdownTags.url,
248
- tags.meta,
249
- tags.processingInstruction,
250
- ],
251
- class: mark,
252
- },
253
- { tag: [markdownTags.codeText, markdownTags.inlineCode], class: 'font-mono' },
254
- { tag: tags.emphasis, class: italic },
255
- { tag: tags.heading1, class: heading[1] },
256
- { tag: tags.heading2, class: heading[2] },
257
- { tag: tags.heading3, class: heading[3] },
258
- { tag: tags.heading4, class: heading[4] },
259
- { tag: tags.heading5, class: heading[5] },
260
- { tag: tags.heading6, class: heading[6] },
261
- { tag: tags.strikethrough, class: strikethrough },
262
- { tag: tags.strong, class: bold },
263
- ],
264
- { scope: markdownLanguage, all: { fontFamily: get(tokens, 'fontFamily.body', []).join(',') } },
265
- );
@@ -1,45 +0,0 @@
1
- //
2
- // Copyright 2023 DXOS.org
3
- //
4
-
5
- import type { Extension } from '@codemirror/state';
6
- import { useEffect, useMemo } from 'react';
7
- import { yCollab } from 'y-codemirror.next';
8
-
9
- import { generateName } from '@dxos/display-name';
10
- import { isDocAccessor } from '@dxos/echo-schema';
11
- import type { ThemeMode } from '@dxos/react-ui';
12
- import { getColorForValue } from '@dxos/react-ui-theme';
13
- import { YText } from '@dxos/text-model';
14
-
15
- import type { EditorModel } from './useTextModel';
16
- import { automergePlugin } from '../automerge/automerge-plugin';
17
-
18
- /**
19
- * Replication and awareness (incl. remote selection).
20
- * https://codemirror.net/docs/ref/#collab
21
- */
22
- export const useCollaboration = (model: EditorModel, themeMode: ThemeMode): Extension | undefined => {
23
- const { provider, peer, content } = model;
24
- const extension = useMemo(() => {
25
- if (content instanceof YText) {
26
- return yCollab(content, provider?.awareness);
27
- } else if (isDocAccessor(content)) {
28
- return automergePlugin(content.handle, content.path);
29
- } else {
30
- return undefined;
31
- }
32
- }, []);
33
-
34
- useEffect(() => {
35
- if (provider && peer) {
36
- provider.awareness.setLocalStateField('user', {
37
- name: peer.name ?? generateName(peer.id),
38
- color: getColorForValue({ value: peer.id, type: 'color' }),
39
- colorLight: getColorForValue({ value: peer.id, themeMode, type: 'highlight' }),
40
- });
41
- }
42
- }, [provider, peer, themeMode]);
43
-
44
- return extension;
45
- };