@dxos/react-ui-editor 0.4.4-main.2a45fa8 → 0.4.4-main.385c016
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 +147 -113
- 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/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/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/package.json +24 -24
- package/src/components/TextEditor/MarkdownEditor.stories.tsx +3 -2
- package/src/components/TextEditor/TextEditor.tsx +3 -3
- package/src/components/Toolbar/Toolbar.stories.tsx +4 -4
- 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/comments.ts +111 -82
- package/src/extensions/cursor.ts +4 -2
- package/src/hooks/useEditorView.ts +13 -11
- package/src/hooks/useTextModel.ts +7 -7
|
@@ -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
|
|
|
@@ -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: [
|
|
@@ -1097,14 +1121,14 @@ var editorFillLayoutEditor = "min-bs-full";
|
|
|
1097
1121
|
var editorHalfViewportOverscrollContent = "after:block after:min-bs-[50dvh] after:pointer-events-none";
|
|
1098
1122
|
|
|
1099
1123
|
// packages/ui/react-ui-editor/src/util.ts
|
|
1100
|
-
import { log } from "@dxos/log";
|
|
1101
|
-
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";
|
|
1102
1126
|
var callbackWrapper = (fn) => (...args) => {
|
|
1103
1127
|
try {
|
|
1104
1128
|
return fn(...args);
|
|
1105
1129
|
} catch (err) {
|
|
1106
|
-
|
|
1107
|
-
F:
|
|
1130
|
+
log2.catch(err, void 0, {
|
|
1131
|
+
F: __dxlog_file3,
|
|
1108
1132
|
L: 18,
|
|
1109
1133
|
S: void 0,
|
|
1110
1134
|
C: (f, a) => f(...a)
|
|
@@ -1132,68 +1156,15 @@ var logChanges = (trs) => {
|
|
|
1132
1156
|
};
|
|
1133
1157
|
|
|
1134
1158
|
// packages/ui/react-ui-editor/src/extensions/comments.ts
|
|
1135
|
-
var
|
|
1136
|
-
|
|
1137
|
-
mixBlendMode: "darken"
|
|
1138
|
-
},
|
|
1139
|
-
"&dark .cm-comment, &dark .cm-comment-current": {
|
|
1140
|
-
mixBlendMode: "plus-lighter"
|
|
1141
|
-
},
|
|
1142
|
-
"&light .cm-comment": {
|
|
1143
|
-
backgroundColor: getToken("extend.colors.yellow.50")
|
|
1144
|
-
},
|
|
1145
|
-
"&light .cm-comment-current": {
|
|
1146
|
-
backgroundColor: getToken("extend.colors.yellow.100")
|
|
1147
|
-
},
|
|
1148
|
-
"&dark .cm-comment": {
|
|
1149
|
-
color: getToken("extend.colors.yellow.50"),
|
|
1150
|
-
backgroundColor: getToken("extend.colors.yellow.900")
|
|
1151
|
-
},
|
|
1152
|
-
"&dark .cm-comment-current": {
|
|
1153
|
-
color: getToken("extend.colors.yellow.100"),
|
|
1154
|
-
backgroundColor: getToken("extend.colors.yellow.950")
|
|
1155
|
-
}
|
|
1159
|
+
var documentId = Facet3.define({
|
|
1160
|
+
combine: (values) => values[0]
|
|
1156
1161
|
});
|
|
1157
|
-
var commentMark = Decoration3.mark({
|
|
1158
|
-
class: "cm-comment",
|
|
1159
|
-
attributes: {
|
|
1160
|
-
"data-testid": "cm-comment"
|
|
1161
|
-
}
|
|
1162
|
-
});
|
|
1163
|
-
var commentCurrentMark = Decoration3.mark({
|
|
1164
|
-
class: "cm-comment-current",
|
|
1165
|
-
attributes: {
|
|
1166
|
-
"data-testid": "cm-comment"
|
|
1167
|
-
}
|
|
1168
|
-
});
|
|
1169
|
-
var focusComment = (view, id, center = true) => {
|
|
1170
|
-
const comment = view.state.field(commentsState).comments.find((range2) => range2.comment.id === id);
|
|
1171
|
-
if (!comment?.comment.cursor) {
|
|
1172
|
-
return;
|
|
1173
|
-
}
|
|
1174
|
-
const range = Cursor.getRangeFromCursor(view.state, comment.comment.cursor);
|
|
1175
|
-
if (range) {
|
|
1176
|
-
view.dispatch({
|
|
1177
|
-
selection: {
|
|
1178
|
-
anchor: range.from
|
|
1179
|
-
},
|
|
1180
|
-
effects: [
|
|
1181
|
-
//
|
|
1182
|
-
EditorView6.scrollIntoView(range.from, center ? {
|
|
1183
|
-
y: "center"
|
|
1184
|
-
} : void 0),
|
|
1185
|
-
setSelection.of({
|
|
1186
|
-
current: id
|
|
1187
|
-
})
|
|
1188
|
-
]
|
|
1189
|
-
});
|
|
1190
|
-
}
|
|
1191
|
-
};
|
|
1192
1162
|
var setComments = StateEffect2.define();
|
|
1193
1163
|
var setSelection = StateEffect2.define();
|
|
1194
1164
|
var setCommentState = StateEffect2.define();
|
|
1195
1165
|
var commentsState = StateField3.define({
|
|
1196
|
-
create: () => ({
|
|
1166
|
+
create: (state) => ({
|
|
1167
|
+
id: state.facet(documentId),
|
|
1197
1168
|
comments: [],
|
|
1198
1169
|
selection: {}
|
|
1199
1170
|
}),
|
|
@@ -1206,7 +1177,8 @@ var commentsState = StateField3.define({
|
|
|
1206
1177
|
};
|
|
1207
1178
|
}
|
|
1208
1179
|
if (effect.is(setComments)) {
|
|
1209
|
-
const comments2 = effect.value
|
|
1180
|
+
const { comments: comments2 } = effect.value;
|
|
1181
|
+
const commentStates = comments2.map((comment) => {
|
|
1210
1182
|
if (!comment.cursor) {
|
|
1211
1183
|
return void 0;
|
|
1212
1184
|
}
|
|
@@ -1218,7 +1190,7 @@ var commentsState = StateField3.define({
|
|
|
1218
1190
|
}).filter(nonNullable);
|
|
1219
1191
|
return {
|
|
1220
1192
|
...value,
|
|
1221
|
-
comments:
|
|
1193
|
+
comments: commentStates
|
|
1222
1194
|
};
|
|
1223
1195
|
}
|
|
1224
1196
|
if (effect.is(setCommentState)) {
|
|
@@ -1228,6 +1200,40 @@ var commentsState = StateField3.define({
|
|
|
1228
1200
|
return value;
|
|
1229
1201
|
}
|
|
1230
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
|
+
});
|
|
1231
1237
|
var commentsDecorations = EditorView6.decorations.compute([
|
|
1232
1238
|
commentsState
|
|
1233
1239
|
], (state) => {
|
|
@@ -1347,9 +1353,6 @@ var mapTrackedComment = (comment, changes) => ({
|
|
|
1347
1353
|
var restoreCommentEffect = StateEffect2.define({
|
|
1348
1354
|
map: mapTrackedComment
|
|
1349
1355
|
});
|
|
1350
|
-
var optionsFacet = Facet3.define({
|
|
1351
|
-
combine: (providers) => providers[0]
|
|
1352
|
-
});
|
|
1353
1356
|
var createComment = (view) => {
|
|
1354
1357
|
const options = view.state.facet(optionsFacet);
|
|
1355
1358
|
const { from, to } = view.state.selection.main;
|
|
@@ -1388,11 +1391,15 @@ var createComment = (view) => {
|
|
|
1388
1391
|
}
|
|
1389
1392
|
return false;
|
|
1390
1393
|
};
|
|
1394
|
+
var optionsFacet = Facet3.define({
|
|
1395
|
+
combine: (providers) => providers[0]
|
|
1396
|
+
});
|
|
1391
1397
|
var comments = (options = {}) => {
|
|
1392
1398
|
const { key: shortcut = "meta-'" } = options;
|
|
1393
1399
|
const handleSelect = debounce((state) => options.onSelect?.(state), 200);
|
|
1394
1400
|
return [
|
|
1395
1401
|
optionsFacet.of(options),
|
|
1402
|
+
documentId.of(options.id),
|
|
1396
1403
|
commentsState,
|
|
1397
1404
|
commentsDecorations,
|
|
1398
1405
|
styles3,
|
|
@@ -1494,6 +1501,7 @@ var comments = (options = {}) => {
|
|
|
1494
1501
|
});
|
|
1495
1502
|
handleSelect({
|
|
1496
1503
|
selection,
|
|
1504
|
+
id: state.facet(documentId),
|
|
1497
1505
|
comments: comments2.map(({ comment, range }) => ({
|
|
1498
1506
|
comment,
|
|
1499
1507
|
range,
|
|
@@ -1505,14 +1513,41 @@ var comments = (options = {}) => {
|
|
|
1505
1513
|
options.onUpdate ? trackPastedComments(options.onUpdate) : []
|
|
1506
1514
|
];
|
|
1507
1515
|
};
|
|
1508
|
-
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 = []) => {
|
|
1509
1540
|
useEffect(() => {
|
|
1510
1541
|
if (view) {
|
|
1511
1542
|
view.dispatch({
|
|
1512
|
-
effects: setComments.of(
|
|
1543
|
+
effects: setComments.of({
|
|
1544
|
+
id,
|
|
1545
|
+
comments: comments2
|
|
1546
|
+
})
|
|
1513
1547
|
});
|
|
1514
1548
|
}
|
|
1515
1549
|
}, [
|
|
1550
|
+
id,
|
|
1516
1551
|
view,
|
|
1517
1552
|
comments2
|
|
1518
1553
|
]);
|
|
@@ -3871,7 +3906,7 @@ var codeTheme = {
|
|
|
3871
3906
|
};
|
|
3872
3907
|
|
|
3873
3908
|
// packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx
|
|
3874
|
-
var
|
|
3909
|
+
var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx";
|
|
3875
3910
|
var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, scrollTo, selection, theme, slots = defaultSlots, extensions = [], debug }, forwardedRef) => {
|
|
3876
3911
|
const tabsterDOMAttribute = useFocusableGroup({
|
|
3877
3912
|
tabBehavior: "limited"
|
|
@@ -3908,8 +3943,8 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
3908
3943
|
extensions: [
|
|
3909
3944
|
// TODO(burdon): Doesn't catch errors in keymap functions.
|
|
3910
3945
|
EditorView15.exceptionSink.of((err) => {
|
|
3911
|
-
|
|
3912
|
-
F:
|
|
3946
|
+
log3.catch(err, void 0, {
|
|
3947
|
+
F: __dxlog_file4,
|
|
3913
3948
|
L: 112,
|
|
3914
3949
|
S: void 0,
|
|
3915
3950
|
C: (f, a) => f(...a)
|
|
@@ -4311,8 +4346,8 @@ var Toolbar = {
|
|
|
4311
4346
|
import { DeferredTask, Event as Event2, sleep } from "@dxos/async";
|
|
4312
4347
|
import { Context as Context2 } from "@dxos/context";
|
|
4313
4348
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
4314
|
-
import { log as
|
|
4315
|
-
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";
|
|
4316
4351
|
var DEBOUNCE_INTERVAL = 100;
|
|
4317
4352
|
var SpaceAwarenessProvider = class {
|
|
4318
4353
|
constructor(params) {
|
|
@@ -4349,10 +4384,10 @@ var SpaceAwarenessProvider = class {
|
|
|
4349
4384
|
void this._space.postMessage(this._channel, {
|
|
4350
4385
|
kind: "query"
|
|
4351
4386
|
}).catch((err) => {
|
|
4352
|
-
|
|
4387
|
+
log4.debug("failed to query awareness", {
|
|
4353
4388
|
err
|
|
4354
4389
|
}, {
|
|
4355
|
-
F:
|
|
4390
|
+
F: __dxlog_file5,
|
|
4356
4391
|
L: 89,
|
|
4357
4392
|
S: this,
|
|
4358
4393
|
C: (f, a) => f(...a)
|
|
@@ -4369,7 +4404,7 @@ var SpaceAwarenessProvider = class {
|
|
|
4369
4404
|
}
|
|
4370
4405
|
update(position) {
|
|
4371
4406
|
invariant2(this._postTask, void 0, {
|
|
4372
|
-
F:
|
|
4407
|
+
F: __dxlog_file5,
|
|
4373
4408
|
L: 104,
|
|
4374
4409
|
S: this,
|
|
4375
4410
|
A: [
|
|
@@ -4386,7 +4421,7 @@ var SpaceAwarenessProvider = class {
|
|
|
4386
4421
|
}
|
|
4387
4422
|
_handleQueryMessage() {
|
|
4388
4423
|
invariant2(this._postTask, void 0, {
|
|
4389
|
-
F:
|
|
4424
|
+
F: __dxlog_file5,
|
|
4390
4425
|
L: 115,
|
|
4391
4426
|
S: this,
|
|
4392
4427
|
A: [
|
|
@@ -4398,7 +4433,7 @@ var SpaceAwarenessProvider = class {
|
|
|
4398
4433
|
}
|
|
4399
4434
|
_handlePostMessage(message) {
|
|
4400
4435
|
invariant2(message.kind === "post", void 0, {
|
|
4401
|
-
F:
|
|
4436
|
+
F: __dxlog_file5,
|
|
4402
4437
|
L: 120,
|
|
4403
4438
|
S: this,
|
|
4404
4439
|
A: [
|
|
@@ -4467,28 +4502,36 @@ var useActionHandler = (view) => {
|
|
|
4467
4502
|
};
|
|
4468
4503
|
|
|
4469
4504
|
// packages/ui/react-ui-editor/src/hooks/useEditorView.ts
|
|
4470
|
-
import { useState as useState3 } from "react";
|
|
4471
|
-
var useEditorView = () => {
|
|
4472
|
-
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
|
+
}
|
|
4473
4518
|
return [
|
|
4474
|
-
|
|
4475
|
-
|
|
4476
|
-
},
|
|
4477
|
-
view
|
|
4519
|
+
editorRef,
|
|
4520
|
+
prev[1] !== id
|
|
4478
4521
|
];
|
|
4479
4522
|
};
|
|
4480
4523
|
|
|
4481
4524
|
// packages/ui/react-ui-editor/src/hooks/useTextEditor.ts
|
|
4482
4525
|
import { EditorSelection as EditorSelection2, EditorState as EditorState3 } from "@codemirror/state";
|
|
4483
4526
|
import { EditorView as EditorView16 } from "@codemirror/view";
|
|
4484
|
-
import { useEffect as useEffect3, useRef as
|
|
4485
|
-
import { log as
|
|
4527
|
+
import { useEffect as useEffect3, useRef as useRef3, useState as useState4 } from "react";
|
|
4528
|
+
import { log as log5 } from "@dxos/log";
|
|
4486
4529
|
import { isNotFalsy as isNotFalsy5 } from "@dxos/util";
|
|
4487
|
-
var
|
|
4530
|
+
var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
|
4488
4531
|
var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions } = {}) => {
|
|
4489
|
-
const onUpdate =
|
|
4532
|
+
const onUpdate = useRef3();
|
|
4490
4533
|
const [view, setView] = useState4();
|
|
4491
|
-
const parentRef =
|
|
4534
|
+
const parentRef = useRef3(null);
|
|
4492
4535
|
useEffect3(() => {
|
|
4493
4536
|
if (parentRef.current) {
|
|
4494
4537
|
const state = EditorState3.create({
|
|
@@ -4497,8 +4540,8 @@ var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions }
|
|
|
4497
4540
|
extensions: [
|
|
4498
4541
|
// TODO(burdon): Doesn't catch errors in keymap functions.
|
|
4499
4542
|
EditorView16.exceptionSink.of((err) => {
|
|
4500
|
-
|
|
4501
|
-
F:
|
|
4543
|
+
log5.catch(err, void 0, {
|
|
4544
|
+
F: __dxlog_file6,
|
|
4502
4545
|
L: 57,
|
|
4503
4546
|
S: void 0,
|
|
4504
4547
|
C: (f, a) => f(...a)
|
|
@@ -4587,22 +4630,13 @@ var createThemeExtensions = ({ theme, themeMode, slots } = {}) => {
|
|
|
4587
4630
|
|
|
4588
4631
|
// packages/ui/react-ui-editor/src/hooks/useTextModel.ts
|
|
4589
4632
|
import get4 from "lodash.get";
|
|
4590
|
-
import {
|
|
4633
|
+
import { useState as useState5, useMemo as useMemo2 } from "react";
|
|
4591
4634
|
import { generateName } from "@dxos/display-name";
|
|
4592
4635
|
import { getRawDoc } from "@dxos/echo-schema";
|
|
4593
4636
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
4594
4637
|
import { isAutomergeObject } from "@dxos/react-client/echo";
|
|
4595
|
-
var
|
|
4596
|
-
var useTextModel = (props) =>
|
|
4597
|
-
const { identity, space, text } = props;
|
|
4598
|
-
const [model, setModel] = useState5();
|
|
4599
|
-
useEffect4(() => setModel(createModel(props)), [
|
|
4600
|
-
identity,
|
|
4601
|
-
space,
|
|
4602
|
-
text
|
|
4603
|
-
]);
|
|
4604
|
-
return model;
|
|
4605
|
-
};
|
|
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));
|
|
4606
4640
|
var useInMemoryTextModel = ({ id, defaultContent }) => {
|
|
4607
4641
|
const [content, setContent] = useState5(defaultContent ?? "");
|
|
4608
4642
|
return {
|
|
@@ -4617,7 +4651,7 @@ var createModel = ({ space, identity, text }) => {
|
|
|
4617
4651
|
return void 0;
|
|
4618
4652
|
}
|
|
4619
4653
|
invariant3(isAutomergeObject(text), void 0, {
|
|
4620
|
-
F:
|
|
4654
|
+
F: __dxlog_file7,
|
|
4621
4655
|
L: 54,
|
|
4622
4656
|
S: void 0,
|
|
4623
4657
|
A: [
|