@dxos/react-ui-editor 0.4.4-main.8a6f0d0 → 0.4.4-main.8f561b4
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 +239 -167
- 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/automerge.stories.d.ts.map +1 -1
- package/dist/types/src/components/TextEditor/hooks.stories.d.ts +1 -1
- package/dist/types/src/components/TextEditor/hooks.stories.d.ts.map +1 -1
- package/dist/types/src/components/Toolbar/Toolbar.d.ts.map +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/extensions/markdown/code.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/formatting.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/useTextEditor.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 +9 -2
- package/src/components/TextEditor/TextEditor.tsx +21 -8
- package/src/components/TextEditor/automerge.stories.tsx +10 -7
- package/src/components/TextEditor/hooks.stories.tsx +48 -14
- package/src/components/Toolbar/Toolbar.stories.tsx +9 -6
- package/src/components/Toolbar/Toolbar.tsx +10 -13
- 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/code.ts +37 -25
- package/src/extensions/markdown/formatting.test.ts +1 -1
- package/src/extensions/markdown/formatting.ts +1 -0
- package/src/extensions/markdown/image.ts +1 -1
- package/src/hooks/useEditorView.ts +13 -11
- package/src/hooks/useTextEditor.ts +6 -2
- package/src/hooks/useTextModel.ts +7 -7
- package/src/index.ts +7 -1
- package/src/styles/layout.ts +6 -1
|
@@ -11,8 +11,8 @@ import { EditorState as EditorState2 } from "@codemirror/state";
|
|
|
11
11
|
import { EditorView as EditorView15 } from "@codemirror/view";
|
|
12
12
|
import { useFocusableGroup } from "@fluentui/react-tabster";
|
|
13
13
|
import defaultsDeep2 from "lodash.defaultsdeep";
|
|
14
|
-
import React, { forwardRef, useCallback, useEffect as useEffect2, useImperativeHandle, useRef, useState as useState2 } from "react";
|
|
15
|
-
import { log as
|
|
14
|
+
import React, { forwardRef, useCallback, useEffect as useEffect2, useImperativeHandle, useRef, useState as useState2, useMemo as useMemo2 } from "react";
|
|
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
|
-
}
|
|
1153
|
-
});
|
|
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
|
-
}
|
|
1159
|
+
var documentId = Facet3.define({
|
|
1160
|
+
combine: (values) => values[0]
|
|
1165
1161
|
});
|
|
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
|
]);
|
|
@@ -1791,41 +1829,50 @@ var styles4 = EditorView9.baseTheme({
|
|
|
1791
1829
|
"& .cm-code": {
|
|
1792
1830
|
fontFamily: getToken("fontFamily.mono", []).join(",")
|
|
1793
1831
|
},
|
|
1794
|
-
"& .cm-codeblock": {
|
|
1832
|
+
"& .cm-codeblock-line": {
|
|
1833
|
+
paddingInline: "1rem !important"
|
|
1834
|
+
},
|
|
1835
|
+
"& .cm-codeblock-end": {
|
|
1836
|
+
display: "inline-block",
|
|
1795
1837
|
width: "100%",
|
|
1796
|
-
paddingInline: "1rem !important",
|
|
1797
1838
|
position: "relative",
|
|
1798
1839
|
"&::after": {
|
|
1799
|
-
content: '""',
|
|
1800
1840
|
position: "absolute",
|
|
1801
|
-
inset: 0
|
|
1802
|
-
|
|
1803
|
-
},
|
|
1804
|
-
"&light .cm-codeblock": {
|
|
1805
|
-
"&::after": {
|
|
1806
|
-
background: getToken("extend.semanticColors.input.light"),
|
|
1807
|
-
mixBlendMode: "darken"
|
|
1808
|
-
}
|
|
1809
|
-
},
|
|
1810
|
-
"&dark .cm-codeblock": {
|
|
1811
|
-
"&::after": {
|
|
1812
|
-
background: getToken("extend.semanticColors.input.dark"),
|
|
1813
|
-
mixBlendMode: "lighten"
|
|
1841
|
+
inset: 0,
|
|
1842
|
+
content: '""'
|
|
1814
1843
|
}
|
|
1815
1844
|
},
|
|
1816
1845
|
"& .cm-codeblock-first": {
|
|
1817
|
-
display: "inline-block",
|
|
1818
1846
|
"&::after": {
|
|
1819
1847
|
borderTopLeftRadius: ".5rem",
|
|
1820
1848
|
borderTopRightRadius: ".5rem"
|
|
1821
1849
|
}
|
|
1822
1850
|
},
|
|
1823
1851
|
"& .cm-codeblock-last": {
|
|
1824
|
-
display: "inline-block",
|
|
1825
1852
|
"&::after": {
|
|
1826
1853
|
borderBottomLeftRadius: ".5rem",
|
|
1827
1854
|
borderBottomRightRadius: ".5rem"
|
|
1828
1855
|
}
|
|
1856
|
+
},
|
|
1857
|
+
"&light .cm-codeblock-line, &light .cm-activeLine.cm-codeblock-line": {
|
|
1858
|
+
background: getToken("extend.semanticColors.input.light"),
|
|
1859
|
+
mixBlendMode: "darken"
|
|
1860
|
+
},
|
|
1861
|
+
"&dark .cm-codeblock-line, &dark .cm-activeLine.cm-codeblock-line": {
|
|
1862
|
+
background: getToken("extend.semanticColors.input.dark"),
|
|
1863
|
+
mixBlendMode: "lighten"
|
|
1864
|
+
},
|
|
1865
|
+
"&light .cm-codeblock-first, &light .cm-codeblock-last": {
|
|
1866
|
+
mixBlendMode: "darken",
|
|
1867
|
+
"&::after": {
|
|
1868
|
+
background: getToken("extend.semanticColors.input.light")
|
|
1869
|
+
}
|
|
1870
|
+
},
|
|
1871
|
+
"&dark .cm-codeblock-first, &dark .cm-codeblock-last": {
|
|
1872
|
+
mixBlendMode: "lighten",
|
|
1873
|
+
"&::after": {
|
|
1874
|
+
background: getToken("extend.semanticColors.input.dark")
|
|
1875
|
+
}
|
|
1829
1876
|
}
|
|
1830
1877
|
});
|
|
1831
1878
|
var getLineRange = (lines, from, to) => {
|
|
@@ -1848,8 +1895,8 @@ var LineWidget = class extends WidgetType2 {
|
|
|
1848
1895
|
return el;
|
|
1849
1896
|
}
|
|
1850
1897
|
};
|
|
1851
|
-
var top = new LineWidget("cm-codeblock-first");
|
|
1852
|
-
var bottom = new LineWidget("cm-codeblock-last");
|
|
1898
|
+
var top = new LineWidget("cm-codeblock-end cm-codeblock-first");
|
|
1899
|
+
var bottom = new LineWidget("cm-codeblock-end cm-codeblock-last");
|
|
1853
1900
|
var buildDecorations = (view) => {
|
|
1854
1901
|
const builder = new RangeSetBuilder();
|
|
1855
1902
|
const { state } = view;
|
|
@@ -1859,17 +1906,17 @@ var buildDecorations = (view) => {
|
|
|
1859
1906
|
syntaxTree(state).iterate({
|
|
1860
1907
|
enter: (node) => {
|
|
1861
1908
|
if (node.name === "FencedCode") {
|
|
1862
|
-
const
|
|
1909
|
+
const editing = !view.state.readOnly && cursor >= node.from && cursor <= node.to;
|
|
1863
1910
|
const range = getLineRange(blocks, node.from, node.to);
|
|
1864
1911
|
for (let i = range[0]; i <= range[1]; i++) {
|
|
1865
1912
|
const block = blocks[i];
|
|
1866
|
-
if (!
|
|
1913
|
+
if (!editing && (i === range[0] || i === range[1])) {
|
|
1867
1914
|
builder.add(block.from, block.to, Decoration4.replace({
|
|
1868
1915
|
widget: i === range[0] ? top : bottom
|
|
1869
1916
|
}));
|
|
1870
1917
|
} else {
|
|
1871
1918
|
builder.add(block.from, block.from, Decoration4.line({
|
|
1872
|
-
class: mx2("cm-code cm-codeblock", i === range[0] && "cm-codeblock-first", i === range[1] && "cm-codeblock-last")
|
|
1919
|
+
class: mx2("cm-code cm-codeblock-line", i === range[0] && "cm-codeblock-first", i === range[1] && "cm-codeblock-last")
|
|
1873
1920
|
}));
|
|
1874
1921
|
}
|
|
1875
1922
|
}
|
|
@@ -2177,6 +2224,7 @@ var snippets = {
|
|
|
2177
2224
|
codeblock: snippet([
|
|
2178
2225
|
//
|
|
2179
2226
|
"```#{}",
|
|
2227
|
+
"",
|
|
2180
2228
|
"```"
|
|
2181
2229
|
].join("\n")),
|
|
2182
2230
|
table: snippet([
|
|
@@ -3858,7 +3906,7 @@ var codeTheme = {
|
|
|
3858
3906
|
};
|
|
3859
3907
|
|
|
3860
3908
|
// packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx
|
|
3861
|
-
var
|
|
3909
|
+
var __dxlog_file4 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/components/TextEditor/TextEditor.tsx";
|
|
3862
3910
|
var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, scrollTo, selection, theme, slots = defaultSlots, extensions = [], debug }, forwardedRef) => {
|
|
3863
3911
|
const tabsterDOMAttribute = useFocusableGroup({
|
|
3864
3912
|
tabBehavior: "limited"
|
|
@@ -3895,9 +3943,9 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
3895
3943
|
extensions: [
|
|
3896
3944
|
// TODO(burdon): Doesn't catch errors in keymap functions.
|
|
3897
3945
|
EditorView15.exceptionSink.of((err) => {
|
|
3898
|
-
|
|
3899
|
-
F:
|
|
3900
|
-
L:
|
|
3946
|
+
log3.catch(err, void 0, {
|
|
3947
|
+
F: __dxlog_file4,
|
|
3948
|
+
L: 113,
|
|
3901
3949
|
S: void 0,
|
|
3902
3950
|
C: (f, a) => f(...a)
|
|
3903
3951
|
});
|
|
@@ -3955,6 +4003,7 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
3955
4003
|
};
|
|
3956
4004
|
}, [
|
|
3957
4005
|
rootRef,
|
|
4006
|
+
extensions,
|
|
3958
4007
|
model,
|
|
3959
4008
|
readonly,
|
|
3960
4009
|
themeMode
|
|
@@ -3980,38 +4029,49 @@ var BaseTextEditor = /* @__PURE__ */ forwardRef(({ model, readonly, autoFocus, s
|
|
|
3980
4029
|
...tabsterDOMAttribute
|
|
3981
4030
|
});
|
|
3982
4031
|
});
|
|
3983
|
-
var TextEditor = /* @__PURE__ */ forwardRef(({ readonly, placeholder: placeholder3, lineWrapping, theme = textTheme, slots, extensions
|
|
4032
|
+
var TextEditor = /* @__PURE__ */ forwardRef(({ readonly, placeholder: placeholder3, lineWrapping, theme = textTheme, slots, extensions: _extensions, ...props }, forwardedRef) => {
|
|
3984
4033
|
const { themeMode } = useThemeContext();
|
|
3985
4034
|
const updatedSlots = defaultsDeep2({}, slots, defaultTextSlots);
|
|
4035
|
+
const extensions = useMemo2(() => [
|
|
4036
|
+
createBasicBundle({
|
|
4037
|
+
themeMode,
|
|
4038
|
+
placeholder: placeholder3,
|
|
4039
|
+
lineWrapping
|
|
4040
|
+
}),
|
|
4041
|
+
..._extensions ?? []
|
|
4042
|
+
], [
|
|
4043
|
+
themeMode,
|
|
4044
|
+
placeholder3,
|
|
4045
|
+
lineWrapping,
|
|
4046
|
+
_extensions
|
|
4047
|
+
]);
|
|
3986
4048
|
return /* @__PURE__ */ React.createElement(BaseTextEditor, {
|
|
3987
4049
|
ref: forwardedRef,
|
|
3988
4050
|
readonly,
|
|
3989
|
-
extensions
|
|
3990
|
-
createBasicBundle({
|
|
3991
|
-
themeMode,
|
|
3992
|
-
placeholder: placeholder3,
|
|
3993
|
-
lineWrapping
|
|
3994
|
-
}),
|
|
3995
|
-
...extensions
|
|
3996
|
-
],
|
|
4051
|
+
extensions,
|
|
3997
4052
|
theme,
|
|
3998
4053
|
slots: updatedSlots,
|
|
3999
4054
|
...props
|
|
4000
4055
|
});
|
|
4001
4056
|
});
|
|
4002
|
-
var MarkdownEditor = /* @__PURE__ */ forwardRef(({ readonly, placeholder: placeholder3, theme = markdownTheme, slots, extensions
|
|
4057
|
+
var MarkdownEditor = /* @__PURE__ */ forwardRef(({ readonly, placeholder: placeholder3, theme = markdownTheme, slots, extensions: _extensions, ...props }, forwardedRef) => {
|
|
4003
4058
|
const { themeMode } = useThemeContext();
|
|
4004
4059
|
const updatedSlots = defaultsDeep2({}, slots, defaultMarkdownSlots);
|
|
4060
|
+
const extensions = useMemo2(() => [
|
|
4061
|
+
createMarkdownExtensions({
|
|
4062
|
+
themeMode,
|
|
4063
|
+
placeholder: placeholder3
|
|
4064
|
+
}),
|
|
4065
|
+
..._extensions ?? []
|
|
4066
|
+
], [
|
|
4067
|
+
themeMode,
|
|
4068
|
+
placeholder3,
|
|
4069
|
+
_extensions
|
|
4070
|
+
]);
|
|
4005
4071
|
return /* @__PURE__ */ React.createElement(BaseTextEditor, {
|
|
4006
4072
|
ref: forwardedRef,
|
|
4007
4073
|
readonly,
|
|
4008
|
-
extensions
|
|
4009
|
-
createMarkdownExtensions({
|
|
4010
|
-
themeMode,
|
|
4011
|
-
placeholder: placeholder3
|
|
4012
|
-
}),
|
|
4013
|
-
...extensions
|
|
4014
|
-
],
|
|
4074
|
+
extensions,
|
|
4015
4075
|
theme,
|
|
4016
4076
|
slots: updatedSlots,
|
|
4017
4077
|
...props
|
|
@@ -4105,6 +4165,7 @@ var ToolbarSeparator = () => /* @__PURE__ */ React2.createElement("div", {
|
|
|
4105
4165
|
className: "grow"
|
|
4106
4166
|
});
|
|
4107
4167
|
var MarkdownHeading = () => {
|
|
4168
|
+
const { t } = useTranslation(translationKey);
|
|
4108
4169
|
const { onAction, state } = useToolbarContext("MarkdownFormatting");
|
|
4109
4170
|
const blockType = state ? state.blockType : "paragraph";
|
|
4110
4171
|
const header = blockType && /heading(\d)/.exec(blockType);
|
|
@@ -4117,9 +4178,16 @@ var MarkdownHeading = () => {
|
|
|
4117
4178
|
type: "heading",
|
|
4118
4179
|
data: parseInt(value2)
|
|
4119
4180
|
})
|
|
4120
|
-
}, /* @__PURE__ */ React2.createElement(
|
|
4181
|
+
}, /* @__PURE__ */ React2.createElement(NaturalToolbar.Button, {
|
|
4182
|
+
asChild: true
|
|
4183
|
+
}, /* @__PURE__ */ React2.createElement(Select.TriggerButton, {
|
|
4184
|
+
variant: "ghost",
|
|
4185
|
+
classNames: buttonStyles
|
|
4186
|
+
}, /* @__PURE__ */ React2.createElement("span", {
|
|
4187
|
+
className: "sr-only"
|
|
4188
|
+
}, t("heading label")), /* @__PURE__ */ React2.createElement(HeadingIcon, {
|
|
4121
4189
|
className: iconStyles
|
|
4122
|
-
})), /* @__PURE__ */ React2.createElement(Select.Portal, null, /* @__PURE__ */ React2.createElement(Select.Content, null, /* @__PURE__ */ React2.createElement(Select.ScrollUpButton, null), /* @__PURE__ */ React2.createElement(Select.Viewport, null, /* @__PURE__ */ React2.createElement(Select.Option, {
|
|
4190
|
+
}))), /* @__PURE__ */ React2.createElement(Select.Portal, null, /* @__PURE__ */ React2.createElement(Select.Content, null, /* @__PURE__ */ React2.createElement(Select.ScrollUpButton, null), /* @__PURE__ */ React2.createElement(Select.Viewport, null, /* @__PURE__ */ React2.createElement(Select.Option, {
|
|
4123
4191
|
value: "0"
|
|
4124
4192
|
}, /* @__PURE__ */ React2.createElement(Paragraph, {
|
|
4125
4193
|
className: iconStyles
|
|
@@ -4213,7 +4281,7 @@ var MarkdownLists = () => {
|
|
|
4213
4281
|
const { t } = useTranslation(translationKey);
|
|
4214
4282
|
return /* @__PURE__ */ React2.createElement(NaturalToolbar.ToggleGroup, {
|
|
4215
4283
|
type: "single",
|
|
4216
|
-
value: state?.listStyle
|
|
4284
|
+
value: state?.listStyle ? `list-${state.listStyle}` : ""
|
|
4217
4285
|
}, markdownLists.map(({ type, getState, Icon }) => /* @__PURE__ */ React2.createElement(ToolbarButton, {
|
|
4218
4286
|
key: type,
|
|
4219
4287
|
value: type,
|
|
@@ -4233,7 +4301,7 @@ var markdownBlocks = [
|
|
|
4233
4301
|
{
|
|
4234
4302
|
type: "codeblock",
|
|
4235
4303
|
Icon: CodeBlock,
|
|
4236
|
-
getState: (state) => state.
|
|
4304
|
+
getState: (state) => state.blockType === "codeblock",
|
|
4237
4305
|
disabled: (state) => !state.blankLine
|
|
4238
4306
|
},
|
|
4239
4307
|
{
|
|
@@ -4249,7 +4317,7 @@ var MarkdownBlocks = () => {
|
|
|
4249
4317
|
const value = markdownBlocks.find(({ getState }) => state && getState(state));
|
|
4250
4318
|
return /* @__PURE__ */ React2.createElement(NaturalToolbar.ToggleGroup, {
|
|
4251
4319
|
type: "single",
|
|
4252
|
-
value: value?.type
|
|
4320
|
+
value: value?.type ?? ""
|
|
4253
4321
|
}, markdownBlocks.map(({ type, disabled, getState, Icon }) => /* @__PURE__ */ React2.createElement(ToolbarButton, {
|
|
4254
4322
|
key: type,
|
|
4255
4323
|
value: type,
|
|
@@ -4290,8 +4358,8 @@ var Toolbar = {
|
|
|
4290
4358
|
import { DeferredTask, Event as Event2, sleep } from "@dxos/async";
|
|
4291
4359
|
import { Context as Context2 } from "@dxos/context";
|
|
4292
4360
|
import { invariant as invariant2 } from "@dxos/invariant";
|
|
4293
|
-
import { log as
|
|
4294
|
-
var
|
|
4361
|
+
import { log as log4 } from "@dxos/log";
|
|
4362
|
+
var __dxlog_file5 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/awareness-provider.ts";
|
|
4295
4363
|
var DEBOUNCE_INTERVAL = 100;
|
|
4296
4364
|
var SpaceAwarenessProvider = class {
|
|
4297
4365
|
constructor(params) {
|
|
@@ -4328,10 +4396,10 @@ var SpaceAwarenessProvider = class {
|
|
|
4328
4396
|
void this._space.postMessage(this._channel, {
|
|
4329
4397
|
kind: "query"
|
|
4330
4398
|
}).catch((err) => {
|
|
4331
|
-
|
|
4399
|
+
log4.debug("failed to query awareness", {
|
|
4332
4400
|
err
|
|
4333
4401
|
}, {
|
|
4334
|
-
F:
|
|
4402
|
+
F: __dxlog_file5,
|
|
4335
4403
|
L: 89,
|
|
4336
4404
|
S: this,
|
|
4337
4405
|
C: (f, a) => f(...a)
|
|
@@ -4348,7 +4416,7 @@ var SpaceAwarenessProvider = class {
|
|
|
4348
4416
|
}
|
|
4349
4417
|
update(position) {
|
|
4350
4418
|
invariant2(this._postTask, void 0, {
|
|
4351
|
-
F:
|
|
4419
|
+
F: __dxlog_file5,
|
|
4352
4420
|
L: 104,
|
|
4353
4421
|
S: this,
|
|
4354
4422
|
A: [
|
|
@@ -4365,7 +4433,7 @@ var SpaceAwarenessProvider = class {
|
|
|
4365
4433
|
}
|
|
4366
4434
|
_handleQueryMessage() {
|
|
4367
4435
|
invariant2(this._postTask, void 0, {
|
|
4368
|
-
F:
|
|
4436
|
+
F: __dxlog_file5,
|
|
4369
4437
|
L: 115,
|
|
4370
4438
|
S: this,
|
|
4371
4439
|
A: [
|
|
@@ -4377,7 +4445,7 @@ var SpaceAwarenessProvider = class {
|
|
|
4377
4445
|
}
|
|
4378
4446
|
_handlePostMessage(message) {
|
|
4379
4447
|
invariant2(message.kind === "post", void 0, {
|
|
4380
|
-
F:
|
|
4448
|
+
F: __dxlog_file5,
|
|
4381
4449
|
L: 120,
|
|
4382
4450
|
S: this,
|
|
4383
4451
|
A: [
|
|
@@ -4446,29 +4514,38 @@ var useActionHandler = (view) => {
|
|
|
4446
4514
|
};
|
|
4447
4515
|
|
|
4448
4516
|
// packages/ui/react-ui-editor/src/hooks/useEditorView.ts
|
|
4449
|
-
import { useState as useState3 } from "react";
|
|
4450
|
-
var useEditorView = () => {
|
|
4451
|
-
const
|
|
4517
|
+
import { useRef as useRef2, useState as useState3 } from "react";
|
|
4518
|
+
var useEditorView = (id) => {
|
|
4519
|
+
const editorRef = useRef2(null);
|
|
4520
|
+
const [prev, setPrev] = useState3([
|
|
4521
|
+
null,
|
|
4522
|
+
""
|
|
4523
|
+
]);
|
|
4524
|
+
if (prev[0] !== editorRef.current) {
|
|
4525
|
+
setPrev([
|
|
4526
|
+
editorRef.current,
|
|
4527
|
+
id
|
|
4528
|
+
]);
|
|
4529
|
+
}
|
|
4452
4530
|
return [
|
|
4453
|
-
|
|
4454
|
-
|
|
4455
|
-
},
|
|
4456
|
-
view
|
|
4531
|
+
editorRef,
|
|
4532
|
+
prev[1] !== id
|
|
4457
4533
|
];
|
|
4458
4534
|
};
|
|
4459
4535
|
|
|
4460
4536
|
// packages/ui/react-ui-editor/src/hooks/useTextEditor.ts
|
|
4461
4537
|
import { EditorSelection as EditorSelection2, EditorState as EditorState3 } from "@codemirror/state";
|
|
4462
4538
|
import { EditorView as EditorView16 } from "@codemirror/view";
|
|
4463
|
-
import { useEffect as useEffect3, useRef as
|
|
4464
|
-
import { log as
|
|
4539
|
+
import { useEffect as useEffect3, useRef as useRef3, useState as useState4 } from "react";
|
|
4540
|
+
import { log as log5 } from "@dxos/log";
|
|
4465
4541
|
import { isNotFalsy as isNotFalsy5 } from "@dxos/util";
|
|
4466
|
-
var
|
|
4542
|
+
var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
|
4467
4543
|
var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions } = {}) => {
|
|
4468
|
-
const onUpdate =
|
|
4544
|
+
const onUpdate = useRef3();
|
|
4469
4545
|
const [view, setView] = useState4();
|
|
4470
|
-
const parentRef =
|
|
4546
|
+
const parentRef = useRef3(null);
|
|
4471
4547
|
useEffect3(() => {
|
|
4548
|
+
let view2;
|
|
4472
4549
|
if (parentRef.current) {
|
|
4473
4550
|
const state = EditorState3.create({
|
|
4474
4551
|
doc,
|
|
@@ -4476,9 +4553,9 @@ var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions }
|
|
|
4476
4553
|
extensions: [
|
|
4477
4554
|
// TODO(burdon): Doesn't catch errors in keymap functions.
|
|
4478
4555
|
EditorView16.exceptionSink.of((err) => {
|
|
4479
|
-
|
|
4480
|
-
F:
|
|
4481
|
-
L:
|
|
4556
|
+
log5.catch(err, void 0, {
|
|
4557
|
+
F: __dxlog_file6,
|
|
4558
|
+
L: 60,
|
|
4482
4559
|
S: void 0,
|
|
4483
4560
|
C: (f, a) => f(...a)
|
|
4484
4561
|
});
|
|
@@ -4489,7 +4566,7 @@ var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions }
|
|
|
4489
4566
|
})
|
|
4490
4567
|
].filter(isNotFalsy5)
|
|
4491
4568
|
});
|
|
4492
|
-
|
|
4569
|
+
view2 = new EditorView16({
|
|
4493
4570
|
parent: parentRef.current,
|
|
4494
4571
|
scrollTo,
|
|
4495
4572
|
state,
|
|
@@ -4505,10 +4582,11 @@ var useTextEditor = ({ autoFocus, scrollTo, debug, doc, selection, extensions }
|
|
|
4505
4582
|
setView(view2);
|
|
4506
4583
|
}
|
|
4507
4584
|
return () => {
|
|
4508
|
-
|
|
4585
|
+
view2?.destroy();
|
|
4509
4586
|
};
|
|
4510
4587
|
}, [
|
|
4511
|
-
parentRef
|
|
4588
|
+
parentRef,
|
|
4589
|
+
extensions
|
|
4512
4590
|
]);
|
|
4513
4591
|
useEffect3(() => {
|
|
4514
4592
|
if (view) {
|
|
@@ -4566,22 +4644,13 @@ var createThemeExtensions = ({ theme, themeMode, slots } = {}) => {
|
|
|
4566
4644
|
|
|
4567
4645
|
// packages/ui/react-ui-editor/src/hooks/useTextModel.ts
|
|
4568
4646
|
import get4 from "lodash.get";
|
|
4569
|
-
import {
|
|
4647
|
+
import { useState as useState5, useMemo as useMemo3 } from "react";
|
|
4570
4648
|
import { generateName } from "@dxos/display-name";
|
|
4571
4649
|
import { getRawDoc } from "@dxos/echo-schema";
|
|
4572
4650
|
import { invariant as invariant3 } from "@dxos/invariant";
|
|
4573
4651
|
import { isAutomergeObject } from "@dxos/react-client/echo";
|
|
4574
|
-
var
|
|
4575
|
-
var useTextModel = (props) =>
|
|
4576
|
-
const { identity, space, text } = props;
|
|
4577
|
-
const [model, setModel] = useState5();
|
|
4578
|
-
useEffect4(() => setModel(createModel(props)), [
|
|
4579
|
-
identity,
|
|
4580
|
-
space,
|
|
4581
|
-
text
|
|
4582
|
-
]);
|
|
4583
|
-
return model;
|
|
4584
|
-
};
|
|
4652
|
+
var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextModel.ts";
|
|
4653
|
+
var useTextModel = (props) => useMemo3(() => createModel(props), Object.values(props));
|
|
4585
4654
|
var useInMemoryTextModel = ({ id, defaultContent }) => {
|
|
4586
4655
|
const [content, setContent] = useState5(defaultContent ?? "");
|
|
4587
4656
|
return {
|
|
@@ -4596,7 +4665,7 @@ var createModel = ({ space, identity, text }) => {
|
|
|
4596
4665
|
return void 0;
|
|
4597
4666
|
}
|
|
4598
4667
|
invariant3(isAutomergeObject(text), void 0, {
|
|
4599
|
-
F:
|
|
4668
|
+
F: __dxlog_file7,
|
|
4600
4669
|
L: 54,
|
|
4601
4670
|
S: void 0,
|
|
4602
4671
|
A: [
|
|
@@ -4681,6 +4750,9 @@ export {
|
|
|
4681
4750
|
defaultSlots,
|
|
4682
4751
|
defaultTextSlots,
|
|
4683
4752
|
defaultTheme,
|
|
4753
|
+
editorFillLayoutEditor,
|
|
4754
|
+
editorFillLayoutRoot,
|
|
4755
|
+
editorHalfViewportOverscrollContent,
|
|
4684
4756
|
editorMode,
|
|
4685
4757
|
editorWithToolbarLayout,
|
|
4686
4758
|
focusComment,
|