@dxos/react-ui-editor 0.4.4-main.b30fc36 → 0.4.4-main.bc94fbd
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 +156 -116
- package/dist/lib/browser/index.mjs.map +3 -3
- package/dist/lib/browser/meta.json +1 -1
- package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts +3 -2
- package/dist/types/src/components/TextEditor/MarkdownEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/TextEditor/TextEditor.d.ts +3 -3
- package/dist/types/src/components/TextEditor/TextEditor.d.ts.map +1 -1
- package/dist/types/src/components/TextEditor/TextEditor.stories.d.ts +1 -1
- package/dist/types/src/components/TextEditor/hooks.stories.d.ts +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.stories.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/cursor.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/defs.d.ts.map +1 -1
- package/dist/types/src/extensions/basic.d.ts +2 -1
- package/dist/types/src/extensions/basic.d.ts.map +1 -1
- package/dist/types/src/extensions/comments.d.ts +15 -7
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/cursor.d.ts +1 -1
- package/dist/types/src/extensions/cursor.d.ts.map +1 -1
- package/dist/types/src/hooks/useEditorView.d.ts +6 -4
- package/dist/types/src/hooks/useEditorView.d.ts.map +1 -1
- package/dist/types/src/hooks/useTextModel.d.ts +3 -0
- package/dist/types/src/hooks/useTextModel.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +1 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/styles/layout.d.ts +4 -1
- package/dist/types/src/styles/layout.d.ts.map +1 -1
- package/package.json +26 -26
- package/src/components/TextEditor/MarkdownEditor.stories.tsx +3 -2
- package/src/components/TextEditor/TextEditor.tsx +3 -3
- package/src/components/TextEditor/hooks.stories.tsx +4 -4
- package/src/components/Toolbar/Toolbar.stories.tsx +9 -6
- package/src/extensions/autocomplete.ts +1 -1
- package/src/extensions/automerge/cursor.ts +15 -4
- package/src/extensions/automerge/defs.ts +0 -1
- package/src/extensions/basic.ts +3 -1
- package/src/extensions/comments.ts +111 -82
- package/src/extensions/cursor.ts +4 -2
- package/src/extensions/markdown/image.ts +1 -1
- package/src/hooks/useEditorView.ts +13 -11
- package/src/hooks/useTextModel.ts +7 -7
- package/src/index.ts +7 -1
- package/src/styles/layout.ts +6 -1
|
@@ -12,7 +12,7 @@ import { EditorView as EditorView15 } from "@codemirror/view";
|
|
|
12
12
|
import { useFocusableGroup } from "@fluentui/react-tabster";
|
|
13
13
|
import defaultsDeep2 from "lodash.defaultsdeep";
|
|
14
14
|
import React, { forwardRef, useCallback, useEffect as useEffect2, useImperativeHandle, useRef, useState as useState2 } from "react";
|
|
15
|
-
import { log as
|
|
15
|
+
import { log as log3 } from "@dxos/log";
|
|
16
16
|
import { useThemeContext } from "@dxos/react-ui";
|
|
17
17
|
import { focusRing } from "@dxos/react-ui-theme";
|
|
18
18
|
import { isNotFalsy as isNotFalsy4 } from "@dxos/util";
|
|
@@ -31,7 +31,9 @@ var defaultCursorConverter = {
|
|
|
31
31
|
var Cursor = class _Cursor {
|
|
32
32
|
static {
|
|
33
33
|
this.converter = Facet.define({
|
|
34
|
-
combine: (providers) =>
|
|
34
|
+
combine: (providers) => {
|
|
35
|
+
return providers[0] ?? defaultCursorConverter;
|
|
36
|
+
}
|
|
35
37
|
});
|
|
36
38
|
}
|
|
37
39
|
static {
|
|
@@ -130,7 +132,7 @@ var autocomplete = ({ onSearch }) => {
|
|
|
130
132
|
// https://codemirror.net/examples/autocompletion
|
|
131
133
|
// https://codemirror.net/docs/ref/#autocomplete.autocompletion
|
|
132
134
|
autocompletion({
|
|
133
|
-
activateOnTyping:
|
|
135
|
+
activateOnTyping: false,
|
|
134
136
|
// closeOnBlur: false,
|
|
135
137
|
// defaultKeymap: false,
|
|
136
138
|
// TODO(burdon): Styles/fragments.
|
|
@@ -161,6 +163,8 @@ import { next as A4 } from "@dxos/automerge/automerge";
|
|
|
161
163
|
// packages/ui/react-ui-editor/src/extensions/automerge/cursor.ts
|
|
162
164
|
import get from "lodash.get";
|
|
163
165
|
import { next as A } from "@dxos/automerge/automerge";
|
|
166
|
+
import { log } from "@dxos/log";
|
|
167
|
+
var __dxlog_file = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/automerge/cursor.ts";
|
|
164
168
|
var cursorConverter = (handle, path) => ({
|
|
165
169
|
// TODO(burdon): Handle assoc to associate with a previous character.
|
|
166
170
|
toCursor: (pos) => {
|
|
@@ -172,7 +176,17 @@ var cursorConverter = (handle, path) => ({
|
|
|
172
176
|
if (typeof value === "string" && value.length <= pos) {
|
|
173
177
|
return "end";
|
|
174
178
|
}
|
|
175
|
-
|
|
179
|
+
try {
|
|
180
|
+
return A.getCursor(doc, path.slice(), pos);
|
|
181
|
+
} catch (err) {
|
|
182
|
+
log.catch(err, void 0, {
|
|
183
|
+
F: __dxlog_file,
|
|
184
|
+
L: 31,
|
|
185
|
+
S: void 0,
|
|
186
|
+
C: (f, a) => f(...a)
|
|
187
|
+
});
|
|
188
|
+
return "";
|
|
189
|
+
}
|
|
176
190
|
},
|
|
177
191
|
fromCursor: (cursor) => {
|
|
178
192
|
if (cursor === "") {
|
|
@@ -190,7 +204,17 @@ var cursorConverter = (handle, path) => ({
|
|
|
190
204
|
return 0;
|
|
191
205
|
}
|
|
192
206
|
}
|
|
193
|
-
|
|
207
|
+
try {
|
|
208
|
+
return A.getCursorPosition(doc, path.slice(), cursor);
|
|
209
|
+
} catch (err) {
|
|
210
|
+
log.catch(err, void 0, {
|
|
211
|
+
F: __dxlog_file,
|
|
212
|
+
L: 59,
|
|
213
|
+
S: void 0,
|
|
214
|
+
C: (f, a) => f(...a)
|
|
215
|
+
});
|
|
216
|
+
return 0;
|
|
217
|
+
}
|
|
194
218
|
}
|
|
195
219
|
});
|
|
196
220
|
|
|
@@ -691,10 +715,10 @@ import { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from "@cod
|
|
|
691
715
|
import { oneDarkHighlightStyle } from "@codemirror/theme-one-dark";
|
|
692
716
|
import { drawSelection, EditorView as EditorView4, highlightActiveLine, placeholder } from "@codemirror/view";
|
|
693
717
|
import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
|
694
|
-
var createBasicBundle = ({ themeMode, placeholder: _placeholder, lineWrapping = true } = {}) => [
|
|
718
|
+
var createBasicBundle = ({ themeMode, placeholder: _placeholder, lineWrapping = true, bracketMatching: _bracketMatching = true } = {}) => [
|
|
695
719
|
lineWrapping && EditorView4.lineWrapping,
|
|
696
720
|
// https://codemirror.net/docs/ref/#codemirror.minimalSetup
|
|
697
|
-
bracketMatching(),
|
|
721
|
+
_bracketMatching && bracketMatching(),
|
|
698
722
|
closeBrackets(),
|
|
699
723
|
drawSelection(),
|
|
700
724
|
highlightActiveLine(),
|
|
@@ -708,7 +732,7 @@ var createBasicBundle = ({ themeMode, placeholder: _placeholder, lineWrapping =
|
|
|
708
732
|
import { EditorView as EditorView5, keymap as keymap2 } from "@codemirror/view";
|
|
709
733
|
import defaultsDeep from "lodash.defaultsdeep";
|
|
710
734
|
import { invariant } from "@dxos/invariant";
|
|
711
|
-
var
|
|
735
|
+
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/blast.ts";
|
|
712
736
|
var defaultOptions = {
|
|
713
737
|
effect: 2,
|
|
714
738
|
maxParticles: 200,
|
|
@@ -835,7 +859,7 @@ var Blaster = class {
|
|
|
835
859
|
}
|
|
836
860
|
initialize() {
|
|
837
861
|
invariant(!this._canvas && !this._ctx, void 0, {
|
|
838
|
-
F:
|
|
862
|
+
F: __dxlog_file2,
|
|
839
863
|
L: 141,
|
|
840
864
|
S: this,
|
|
841
865
|
A: [
|
|
@@ -872,7 +896,7 @@ var Blaster = class {
|
|
|
872
896
|
}
|
|
873
897
|
start() {
|
|
874
898
|
invariant(this._canvas && this._ctx, void 0, {
|
|
875
|
-
F:
|
|
899
|
+
F: __dxlog_file2,
|
|
876
900
|
L: 180,
|
|
877
901
|
S: this,
|
|
878
902
|
A: [
|
|
@@ -1091,17 +1115,20 @@ var tokens = tailwindConfig({}).theme;
|
|
|
1091
1115
|
var getToken = (path, defaultValue = void 0) => get2(tokens, path, defaultValue);
|
|
1092
1116
|
|
|
1093
1117
|
// packages/ui/react-ui-editor/src/styles/layout.ts
|
|
1094
|
-
var editorWithToolbarLayout = "
|
|
1118
|
+
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
|
1119
|
+
var editorFillLayoutRoot = "min-bs-full grid";
|
|
1120
|
+
var editorFillLayoutEditor = "min-bs-full";
|
|
1121
|
+
var editorHalfViewportOverscrollContent = "after:block after:min-bs-[50dvh] after:pointer-events-none";
|
|
1095
1122
|
|
|
1096
1123
|
// packages/ui/react-ui-editor/src/util.ts
|
|
1097
|
-
import { log } from "@dxos/log";
|
|
1098
|
-
var
|
|
1124
|
+
import { log as log2 } from "@dxos/log";
|
|
1125
|
+
var __dxlog_file3 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/util.ts";
|
|
1099
1126
|
var callbackWrapper = (fn) => (...args) => {
|
|
1100
1127
|
try {
|
|
1101
1128
|
return fn(...args);
|
|
1102
1129
|
} catch (err) {
|
|
1103
|
-
|
|
1104
|
-
F:
|
|
1130
|
+
log2.catch(err, void 0, {
|
|
1131
|
+
F: __dxlog_file3,
|
|
1105
1132
|
L: 18,
|
|
1106
1133
|
S: void 0,
|
|
1107
1134
|
C: (f, a) => f(...a)
|
|
@@ -1129,68 +1156,15 @@ var logChanges = (trs) => {
|
|
|
1129
1156
|
};
|
|
1130
1157
|
|
|
1131
1158
|
// packages/ui/react-ui-editor/src/extensions/comments.ts
|
|
1132
|
-
var
|
|
1133
|
-
|
|
1134
|
-
mixBlendMode: "darken"
|
|
1135
|
-
},
|
|
1136
|
-
"&dark .cm-comment, &dark .cm-comment-current": {
|
|
1137
|
-
mixBlendMode: "plus-lighter"
|
|
1138
|
-
},
|
|
1139
|
-
"&light .cm-comment": {
|
|
1140
|
-
backgroundColor: getToken("extend.colors.yellow.50")
|
|
1141
|
-
},
|
|
1142
|
-
"&light .cm-comment-current": {
|
|
1143
|
-
backgroundColor: getToken("extend.colors.yellow.100")
|
|
1144
|
-
},
|
|
1145
|
-
"&dark .cm-comment": {
|
|
1146
|
-
color: getToken("extend.colors.yellow.50"),
|
|
1147
|
-
backgroundColor: getToken("extend.colors.yellow.900")
|
|
1148
|
-
},
|
|
1149
|
-
"&dark .cm-comment-current": {
|
|
1150
|
-
color: getToken("extend.colors.yellow.100"),
|
|
1151
|
-
backgroundColor: getToken("extend.colors.yellow.950")
|
|
1152
|
-
}
|
|
1159
|
+
var documentId = Facet3.define({
|
|
1160
|
+
combine: (values) => values[0]
|
|
1153
1161
|
});
|
|
1154
|
-
var commentMark = Decoration3.mark({
|
|
1155
|
-
class: "cm-comment",
|
|
1156
|
-
attributes: {
|
|
1157
|
-
"data-testid": "cm-comment"
|
|
1158
|
-
}
|
|
1159
|
-
});
|
|
1160
|
-
var commentCurrentMark = Decoration3.mark({
|
|
1161
|
-
class: "cm-comment-current",
|
|
1162
|
-
attributes: {
|
|
1163
|
-
"data-testid": "cm-comment"
|
|
1164
|
-
}
|
|
1165
|
-
});
|
|
1166
|
-
var focusComment = (view, id, center = true) => {
|
|
1167
|
-
const comment = view.state.field(commentsState).comments.find((range2) => range2.comment.id === id);
|
|
1168
|
-
if (!comment?.comment.cursor) {
|
|
1169
|
-
return;
|
|
1170
|
-
}
|
|
1171
|
-
const range = Cursor.getRangeFromCursor(view.state, comment.comment.cursor);
|
|
1172
|
-
if (range) {
|
|
1173
|
-
view.dispatch({
|
|
1174
|
-
selection: {
|
|
1175
|
-
anchor: range.from
|
|
1176
|
-
},
|
|
1177
|
-
effects: [
|
|
1178
|
-
//
|
|
1179
|
-
EditorView6.scrollIntoView(range.from, center ? {
|
|
1180
|
-
y: "center"
|
|
1181
|
-
} : void 0),
|
|
1182
|
-
setSelection.of({
|
|
1183
|
-
current: id
|
|
1184
|
-
})
|
|
1185
|
-
]
|
|
1186
|
-
});
|
|
1187
|
-
}
|
|
1188
|
-
};
|
|
1189
1162
|
var setComments = StateEffect2.define();
|
|
1190
1163
|
var setSelection = StateEffect2.define();
|
|
1191
1164
|
var setCommentState = StateEffect2.define();
|
|
1192
1165
|
var commentsState = StateField3.define({
|
|
1193
|
-
create: () => ({
|
|
1166
|
+
create: (state) => ({
|
|
1167
|
+
id: state.facet(documentId),
|
|
1194
1168
|
comments: [],
|
|
1195
1169
|
selection: {}
|
|
1196
1170
|
}),
|
|
@@ -1203,7 +1177,8 @@ var commentsState = StateField3.define({
|
|
|
1203
1177
|
};
|
|
1204
1178
|
}
|
|
1205
1179
|
if (effect.is(setComments)) {
|
|
1206
|
-
const comments2 = effect.value
|
|
1180
|
+
const { comments: comments2 } = effect.value;
|
|
1181
|
+
const commentStates = comments2.map((comment) => {
|
|
1207
1182
|
if (!comment.cursor) {
|
|
1208
1183
|
return void 0;
|
|
1209
1184
|
}
|
|
@@ -1215,7 +1190,7 @@ var commentsState = StateField3.define({
|
|
|
1215
1190
|
}).filter(nonNullable);
|
|
1216
1191
|
return {
|
|
1217
1192
|
...value,
|
|
1218
|
-
comments:
|
|
1193
|
+
comments: commentStates
|
|
1219
1194
|
};
|
|
1220
1195
|
}
|
|
1221
1196
|
if (effect.is(setCommentState)) {
|
|
@@ -1225,6 +1200,40 @@ var commentsState = StateField3.define({
|
|
|
1225
1200
|
return value;
|
|
1226
1201
|
}
|
|
1227
1202
|
});
|
|
1203
|
+
var styles3 = EditorView6.baseTheme({
|
|
1204
|
+
"&light .cm-comment, &light .cm-comment-current": {
|
|
1205
|
+
mixBlendMode: "darken"
|
|
1206
|
+
},
|
|
1207
|
+
"&dark .cm-comment, &dark .cm-comment-current": {
|
|
1208
|
+
mixBlendMode: "plus-lighter"
|
|
1209
|
+
},
|
|
1210
|
+
"&light .cm-comment": {
|
|
1211
|
+
backgroundColor: getToken("extend.colors.yellow.50")
|
|
1212
|
+
},
|
|
1213
|
+
"&light .cm-comment-current": {
|
|
1214
|
+
backgroundColor: getToken("extend.colors.yellow.100")
|
|
1215
|
+
},
|
|
1216
|
+
"&dark .cm-comment": {
|
|
1217
|
+
color: getToken("extend.colors.yellow.50"),
|
|
1218
|
+
backgroundColor: getToken("extend.colors.yellow.900")
|
|
1219
|
+
},
|
|
1220
|
+
"&dark .cm-comment-current": {
|
|
1221
|
+
color: getToken("extend.colors.yellow.100"),
|
|
1222
|
+
backgroundColor: getToken("extend.colors.yellow.950")
|
|
1223
|
+
}
|
|
1224
|
+
});
|
|
1225
|
+
var commentMark = Decoration3.mark({
|
|
1226
|
+
class: "cm-comment",
|
|
1227
|
+
attributes: {
|
|
1228
|
+
"data-testid": "cm-comment"
|
|
1229
|
+
}
|
|
1230
|
+
});
|
|
1231
|
+
var commentCurrentMark = Decoration3.mark({
|
|
1232
|
+
class: "cm-comment-current",
|
|
1233
|
+
attributes: {
|
|
1234
|
+
"data-testid": "cm-comment"
|
|
1235
|
+
}
|
|
1236
|
+
});
|
|
1228
1237
|
var commentsDecorations = EditorView6.decorations.compute([
|
|
1229
1238
|
commentsState
|
|
1230
1239
|
], (state) => {
|
|
@@ -1344,9 +1353,6 @@ var mapTrackedComment = (comment, changes) => ({
|
|
|
1344
1353
|
var restoreCommentEffect = StateEffect2.define({
|
|
1345
1354
|
map: mapTrackedComment
|
|
1346
1355
|
});
|
|
1347
|
-
var optionsFacet = Facet3.define({
|
|
1348
|
-
combine: (providers) => providers[0]
|
|
1349
|
-
});
|
|
1350
1356
|
var createComment = (view) => {
|
|
1351
1357
|
const options = view.state.facet(optionsFacet);
|
|
1352
1358
|
const { from, to } = view.state.selection.main;
|
|
@@ -1385,11 +1391,15 @@ var createComment = (view) => {
|
|
|
1385
1391
|
}
|
|
1386
1392
|
return false;
|
|
1387
1393
|
};
|
|
1394
|
+
var optionsFacet = Facet3.define({
|
|
1395
|
+
combine: (providers) => providers[0]
|
|
1396
|
+
});
|
|
1388
1397
|
var comments = (options = {}) => {
|
|
1389
1398
|
const { key: shortcut = "meta-'" } = options;
|
|
1390
1399
|
const handleSelect = debounce((state) => options.onSelect?.(state), 200);
|
|
1391
1400
|
return [
|
|
1392
1401
|
optionsFacet.of(options),
|
|
1402
|
+
documentId.of(options.id),
|
|
1393
1403
|
commentsState,
|
|
1394
1404
|
commentsDecorations,
|
|
1395
1405
|
styles3,
|
|
@@ -1491,6 +1501,7 @@ var comments = (options = {}) => {
|
|
|
1491
1501
|
});
|
|
1492
1502
|
handleSelect({
|
|
1493
1503
|
selection,
|
|
1504
|
+
id: state.facet(documentId),
|
|
1494
1505
|
comments: comments2.map(({ comment, range }) => ({
|
|
1495
1506
|
comment,
|
|
1496
1507
|
range,
|
|
@@ -1502,14 +1513,41 @@ var comments = (options = {}) => {
|
|
|
1502
1513
|
options.onUpdate ? trackPastedComments(options.onUpdate) : []
|
|
1503
1514
|
];
|
|
1504
1515
|
};
|
|
1505
|
-
var
|
|
1516
|
+
var focusComment = (view, id, center = true) => {
|
|
1517
|
+
const comment = view.state.field(commentsState).comments.find((range2) => range2.comment.id === id);
|
|
1518
|
+
if (!comment?.comment.cursor) {
|
|
1519
|
+
return;
|
|
1520
|
+
}
|
|
1521
|
+
const range = Cursor.getRangeFromCursor(view.state, comment.comment.cursor);
|
|
1522
|
+
if (range) {
|
|
1523
|
+
view.dispatch({
|
|
1524
|
+
selection: {
|
|
1525
|
+
anchor: range.from
|
|
1526
|
+
},
|
|
1527
|
+
effects: [
|
|
1528
|
+
//
|
|
1529
|
+
EditorView6.scrollIntoView(range.from, center ? {
|
|
1530
|
+
y: "center"
|
|
1531
|
+
} : void 0),
|
|
1532
|
+
setSelection.of({
|
|
1533
|
+
current: id
|
|
1534
|
+
})
|
|
1535
|
+
]
|
|
1536
|
+
});
|
|
1537
|
+
}
|
|
1538
|
+
};
|
|
1539
|
+
var useComments = (view, id, comments2 = []) => {
|
|
1506
1540
|
useEffect(() => {
|
|
1507
1541
|
if (view) {
|
|
1508
1542
|
view.dispatch({
|
|
1509
|
-
effects: setComments.of(
|
|
1543
|
+
effects: setComments.of({
|
|
1544
|
+
id,
|
|
1545
|
+
comments: comments2
|
|
1546
|
+
})
|
|
1510
1547
|
});
|
|
1511
1548
|
}
|
|
1512
1549
|
}, [
|
|
1550
|
+
id,
|
|
1513
1551
|
view,
|
|
1514
1552
|
comments2
|
|
1515
1553
|
]);
|
|
@@ -3868,7 +3906,7 @@ var codeTheme = {
|
|
|
3868
3906
|
};
|
|
3869
3907
|
|
|
3870
3908
|
// packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx
|
|
3871
|
-
var
|
|
3909
|
+
var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx";
|
|
3872
3910
|
var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, scrollTo, selection, theme, slots = defaultSlots, extensions = [], debug }, forwardedRef) => {
|
|
3873
3911
|
const tabsterDOMAttribute = useFocusableGroup({
|
|
3874
3912
|
tabBehavior: "limited"
|
|
@@ -3905,8 +3943,8 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
3905
3943
|
extensions: [
|
|
3906
3944
|
// TODO(burdon): Doesn't catch errors in keymap functions.
|
|
3907
3945
|
EditorView15.exceptionSink.of((err) => {
|
|
3908
|
-
|
|
3909
|
-
F:
|
|
3946
|
+
log3.catch(err, void 0, {
|
|
3947
|
+
F: __dxlog_file4,
|
|
3910
3948
|
L: 112,
|
|
3911
3949
|
S: void 0,
|
|
3912
3950
|
C: (f, a) => f(...a)
|
|
@@ -4308,8 +4346,8 @@ var Toolbar = {
|
|
|
4308
4346
|
import { DeferredTask, Event as Event2, sleep } from "@dxos/async";
|
|
4309
4347
|
import { Context as Context2 } from "@dxos/context";
|
|
4310
4348
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
4311
|
-
import { log as
|
|
4312
|
-
var
|
|
4349
|
+
import { log as log4 } from "@dxos/log";
|
|
4350
|
+
var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/awareness-provider.ts";
|
|
4313
4351
|
var DEBOUNCE_INTERVAL = 100;
|
|
4314
4352
|
var SpaceAwarenessProvider = class {
|
|
4315
4353
|
constructor(params) {
|
|
@@ -4346,10 +4384,10 @@ var SpaceAwarenessProvider = class {
|
|
|
4346
4384
|
void this._space.postMessage(this._channel, {
|
|
4347
4385
|
kind: "query"
|
|
4348
4386
|
}).catch((err) => {
|
|
4349
|
-
|
|
4387
|
+
log4.debug("failed to query awareness", {
|
|
4350
4388
|
err
|
|
4351
4389
|
}, {
|
|
4352
|
-
F:
|
|
4390
|
+
F: __dxlog_file5,
|
|
4353
4391
|
L: 89,
|
|
4354
4392
|
S: this,
|
|
4355
4393
|
C: (f, a) => f(...a)
|
|
@@ -4366,7 +4404,7 @@ var SpaceAwarenessProvider = class {
|
|
|
4366
4404
|
}
|
|
4367
4405
|
update(position) {
|
|
4368
4406
|
invariant2(this._postTask, void 0, {
|
|
4369
|
-
F:
|
|
4407
|
+
F: __dxlog_file5,
|
|
4370
4408
|
L: 104,
|
|
4371
4409
|
S: this,
|
|
4372
4410
|
A: [
|
|
@@ -4383,7 +4421,7 @@ var SpaceAwarenessProvider = class {
|
|
|
4383
4421
|
}
|
|
4384
4422
|
_handleQueryMessage() {
|
|
4385
4423
|
invariant2(this._postTask, void 0, {
|
|
4386
|
-
F:
|
|
4424
|
+
F: __dxlog_file5,
|
|
4387
4425
|
L: 115,
|
|
4388
4426
|
S: this,
|
|
4389
4427
|
A: [
|
|
@@ -4395,7 +4433,7 @@ var SpaceAwarenessProvider = class {
|
|
|
4395
4433
|
}
|
|
4396
4434
|
_handlePostMessage(message) {
|
|
4397
4435
|
invariant2(message.kind === "post", void 0, {
|
|
4398
|
-
F:
|
|
4436
|
+
F: __dxlog_file5,
|
|
4399
4437
|
L: 120,
|
|
4400
4438
|
S: this,
|
|
4401
4439
|
A: [
|
|
@@ -4464,28 +4502,36 @@ var useActionHandler = (view) => {
|
|
|
4464
4502
|
};
|
|
4465
4503
|
|
|
4466
4504
|
// packages/ui/react-ui-editor/src/hooks/useEditorView.ts
|
|
4467
|
-
import { useState as useState3 } from "react";
|
|
4468
|
-
var useEditorView = () => {
|
|
4469
|
-
const
|
|
4505
|
+
import { useRef as useRef2, useState as useState3 } from "react";
|
|
4506
|
+
var useEditorView = (id) => {
|
|
4507
|
+
const editorRef = useRef2(null);
|
|
4508
|
+
const [prev, setPrev] = useState3([
|
|
4509
|
+
null,
|
|
4510
|
+
""
|
|
4511
|
+
]);
|
|
4512
|
+
if (prev[0] !== editorRef.current) {
|
|
4513
|
+
setPrev([
|
|
4514
|
+
editorRef.current,
|
|
4515
|
+
id
|
|
4516
|
+
]);
|
|
4517
|
+
}
|
|
4470
4518
|
return [
|
|
4471
|
-
|
|
4472
|
-
|
|
4473
|
-
},
|
|
4474
|
-
view
|
|
4519
|
+
editorRef,
|
|
4520
|
+
prev[1] !== id
|
|
4475
4521
|
];
|
|
4476
4522
|
};
|
|
4477
4523
|
|
|
4478
4524
|
// packages/ui/react-ui-editor/src/hooks/useTextEditor.ts
|
|
4479
4525
|
import { EditorSelection as EditorSelection2, EditorState as EditorState3 } from "@codemirror/state";
|
|
4480
4526
|
import { EditorView as EditorView16 } from "@codemirror/view";
|
|
4481
|
-
import { useEffect as useEffect3, useRef as
|
|
4482
|
-
import { log as
|
|
4527
|
+
import { useEffect as useEffect3, useRef as useRef3, useState as useState4 } from "react";
|
|
4528
|
+
import { log as log5 } from "@dxos/log";
|
|
4483
4529
|
import { isNotFalsy as isNotFalsy5 } from "@dxos/util";
|
|
4484
|
-
var
|
|
4530
|
+
var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
|
4485
4531
|
var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions } = {}) => {
|
|
4486
|
-
const onUpdate =
|
|
4532
|
+
const onUpdate = useRef3();
|
|
4487
4533
|
const [view, setView] = useState4();
|
|
4488
|
-
const parentRef =
|
|
4534
|
+
const parentRef = useRef3(null);
|
|
4489
4535
|
useEffect3(() => {
|
|
4490
4536
|
if (parentRef.current) {
|
|
4491
4537
|
const state = EditorState3.create({
|
|
@@ -4494,8 +4540,8 @@ var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions }
|
|
|
4494
4540
|
extensions: [
|
|
4495
4541
|
// TODO(burdon): Doesn't catch errors in keymap functions.
|
|
4496
4542
|
EditorView16.exceptionSink.of((err) => {
|
|
4497
|
-
|
|
4498
|
-
F:
|
|
4543
|
+
log5.catch(err, void 0, {
|
|
4544
|
+
F: __dxlog_file6,
|
|
4499
4545
|
L: 57,
|
|
4500
4546
|
S: void 0,
|
|
4501
4547
|
C: (f, a) => f(...a)
|
|
@@ -4584,22 +4630,13 @@ var createThemeExtensions = ({ theme, themeMode, slots } = {}) => {
|
|
|
4584
4630
|
|
|
4585
4631
|
// packages/ui/react-ui-editor/src/hooks/useTextModel.ts
|
|
4586
4632
|
import get4 from "lodash.get";
|
|
4587
|
-
import {
|
|
4633
|
+
import { useState as useState5, useMemo as useMemo2 } from "react";
|
|
4588
4634
|
import { generateName } from "@dxos/display-name";
|
|
4589
4635
|
import { getRawDoc } from "@dxos/echo-schema";
|
|
4590
4636
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
4591
4637
|
import { isAutomergeObject } from "@dxos/react-client/echo";
|
|
4592
|
-
var
|
|
4593
|
-
var useTextModel = (props) =>
|
|
4594
|
-
const { identity, space, text } = props;
|
|
4595
|
-
const [model, setModel] = useState5();
|
|
4596
|
-
useEffect4(() => setModel(createModel(props)), [
|
|
4597
|
-
identity,
|
|
4598
|
-
space,
|
|
4599
|
-
text
|
|
4600
|
-
]);
|
|
4601
|
-
return model;
|
|
4602
|
-
};
|
|
4638
|
+
var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextModel.ts";
|
|
4639
|
+
var useTextModel = (props) => useMemo2(() => createModel(props), Object.values(props));
|
|
4603
4640
|
var useInMemoryTextModel = ({ id, defaultContent }) => {
|
|
4604
4641
|
const [content, setContent] = useState5(defaultContent ?? "");
|
|
4605
4642
|
return {
|
|
@@ -4614,7 +4651,7 @@ var createModel = ({ space, identity, text }) => {
|
|
|
4614
4651
|
return void 0;
|
|
4615
4652
|
}
|
|
4616
4653
|
invariant3(isAutomergeObject(text), void 0, {
|
|
4617
|
-
F:
|
|
4654
|
+
F: __dxlog_file7,
|
|
4618
4655
|
L: 54,
|
|
4619
4656
|
S: void 0,
|
|
4620
4657
|
A: [
|
|
@@ -4699,6 +4736,9 @@ export {
|
|
|
4699
4736
|
defaultSlots,
|
|
4700
4737
|
defaultTextSlots,
|
|
4701
4738
|
defaultTheme,
|
|
4739
|
+
editorFillLayoutEditor,
|
|
4740
|
+
editorFillLayoutRoot,
|
|
4741
|
+
editorHalfViewportOverscrollContent,
|
|
4702
4742
|
editorMode,
|
|
4703
4743
|
editorWithToolbarLayout,
|
|
4704
4744
|
focusComment,
|