@dxos/ui-editor 0.8.4-main.422d1c7879 → 0.8.4-main.51f1e5ca51
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 +503 -468
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/types/index.mjs +26 -6
- package/dist/lib/browser/types/index.mjs.map +4 -4
- package/dist/lib/node-esm/index.mjs +503 -467
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/types/index.mjs +27 -6
- package/dist/lib/node-esm/types/index.mjs.map +4 -4
- package/dist/types/src/defaults.d.ts.map +1 -1
- package/dist/types/src/extensions/annotations.d.ts.map +1 -1
- package/dist/types/src/extensions/auto-scroll.d.ts.map +1 -1
- package/dist/types/src/extensions/autocomplete/autocomplete.d.ts.map +1 -1
- package/dist/types/src/extensions/autocomplete/match.d.ts.map +1 -1
- package/dist/types/src/extensions/autocomplete/placeholder.d.ts.map +1 -1
- package/dist/types/src/extensions/autocomplete/typeahead.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/automerge.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/automerge/sync.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/update-automerge.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/update-codemirror.d.ts.map +1 -1
- package/dist/types/src/extensions/awareness/awareness-provider.d.ts.map +1 -1
- package/dist/types/src/extensions/awareness/awareness.d.ts.map +1 -1
- package/dist/types/src/extensions/blast.d.ts.map +1 -1
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/debug.d.ts.map +1 -1
- package/dist/types/src/extensions/dnd.d.ts.map +1 -1
- package/dist/types/src/extensions/factories.d.ts +2 -1
- package/dist/types/src/extensions/factories.d.ts.map +1 -1
- package/dist/types/src/extensions/factories.test.d.ts +2 -0
- package/dist/types/src/extensions/factories.test.d.ts.map +1 -0
- package/dist/types/src/extensions/focus.d.ts +1 -1
- package/dist/types/src/extensions/index.d.ts +1 -1
- package/dist/types/src/extensions/index.d.ts.map +1 -1
- package/dist/types/src/extensions/json.d.ts.map +1 -1
- package/dist/types/src/extensions/listener.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/bundle.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/changes.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/debug.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/decorate.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/highlight.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/image.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/link.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/table.d.ts.map +1 -1
- package/dist/types/src/extensions/mention.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/menu.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/outliner.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/selection.d.ts.map +1 -1
- package/dist/types/src/extensions/outliner/tree.d.ts.map +1 -1
- package/dist/types/src/extensions/preview/preview.d.ts.map +1 -1
- package/dist/types/src/extensions/replacer.d.ts.map +1 -1
- package/dist/types/src/extensions/scroller.d.ts.map +1 -1
- package/dist/types/src/extensions/selection.d.ts.map +1 -1
- package/dist/types/src/extensions/snippets.d.ts +10 -0
- package/dist/types/src/extensions/snippets.d.ts.map +1 -0
- package/dist/types/src/extensions/submit.d.ts.map +1 -1
- package/dist/types/src/extensions/tags/extended-markdown.d.ts.map +1 -1
- package/dist/types/src/extensions/tags/fader.d.ts.map +1 -1
- package/dist/types/src/extensions/tags/index.d.ts +3 -1
- package/dist/types/src/extensions/tags/index.d.ts.map +1 -1
- package/dist/types/src/extensions/tags/typewriter.d.ts +43 -0
- package/dist/types/src/extensions/tags/typewriter.d.ts.map +1 -0
- package/dist/types/src/extensions/tags/typewriter.test.d.ts +2 -0
- package/dist/types/src/extensions/tags/typewriter.test.d.ts.map +1 -0
- package/dist/types/src/extensions/tags/xml-block-decoration.d.ts +31 -0
- package/dist/types/src/extensions/tags/xml-block-decoration.d.ts.map +1 -0
- package/dist/types/src/extensions/tags/xml-formatting.d.ts +24 -0
- package/dist/types/src/extensions/tags/xml-formatting.d.ts.map +1 -0
- package/dist/types/src/extensions/tags/xml-tags.d.ts.map +1 -1
- package/dist/types/src/extensions/tags/xml-util.d.ts.map +1 -1
- package/dist/types/src/index.d.ts +0 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/styles/theme.d.ts.map +1 -1
- package/dist/types/src/types/types.d.ts +2 -2
- package/dist/types/src/types/types.d.ts.map +1 -1
- package/dist/types/src/util/cursor.d.ts.map +1 -1
- package/dist/types/src/util/debug.d.ts.map +1 -1
- package/dist/types/src/util/decorations.d.ts.map +1 -1
- package/dist/types/src/util/dom.d.ts.map +1 -1
- package/dist/types/src/util/facet.d.ts.map +1 -1
- package/dist/types/src/util/util.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +27 -27
- package/src/defaults.ts +5 -2
- package/src/extensions/automerge/automerge.test.tsx +28 -8
- package/src/extensions/factories.test.ts +88 -0
- package/src/extensions/factories.ts +20 -2
- package/src/extensions/index.ts +1 -1
- package/src/extensions/snippets.ts +67 -0
- package/src/extensions/tags/index.ts +3 -1
- package/src/extensions/tags/testing/text.md +36 -0
- package/src/extensions/tags/testing/text.txt +35 -0
- package/src/extensions/tags/{wire.test.ts → typewriter.test.ts} +2 -2
- package/src/extensions/tags/typewriter.ts +594 -0
- package/src/extensions/tags/xml-block-decoration.ts +123 -0
- package/src/extensions/tags/xml-formatting.ts +125 -0
- package/src/extensions/tags/xml-tags.ts +0 -1
- package/src/extensions/tags/xml-util.test.ts +90 -3
- package/src/extensions/tags/xml-util.ts +62 -5
- package/src/index.ts +0 -1
- package/src/styles/theme.ts +9 -3
- package/src/typings.d.ts +8 -0
- package/dist/lib/browser/chunk-D724USEC.mjs +0 -34
- package/dist/lib/browser/chunk-D724USEC.mjs.map +0 -7
- package/dist/lib/node-esm/chunk-JRVJWKQF.mjs +0 -36
- package/dist/lib/node-esm/chunk-JRVJWKQF.mjs.map +0 -7
- package/dist/types/src/extensions/tags/wire.d.ts +0 -23
- package/dist/types/src/extensions/tags/wire.d.ts.map +0 -1
- package/dist/types/src/extensions/tags/wire.test.d.ts +0 -2
- package/dist/types/src/extensions/tags/wire.test.d.ts.map +0 -1
- package/dist/types/src/extensions/typewriter.d.ts +0 -10
- package/dist/types/src/extensions/typewriter.d.ts.map +0 -1
- package/src/extensions/tags/wire.ts +0 -459
- package/src/extensions/typewriter.ts +0 -68
|
@@ -1,13 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
EditorInputMode,
|
|
3
|
-
EditorInputModes,
|
|
4
|
-
EditorViewMode,
|
|
5
|
-
EditorViewModes
|
|
6
|
-
} from "./chunk-D724USEC.mjs";
|
|
7
|
-
|
|
8
1
|
// src/index.ts
|
|
9
2
|
import { EditorState as EditorState4 } from "@codemirror/state";
|
|
10
|
-
import { EditorView as
|
|
3
|
+
import { EditorView as EditorView33, keymap as keymap15 } from "@codemirror/view";
|
|
11
4
|
import { tags as tags2 } from "@lezer/highlight";
|
|
12
5
|
import { TextKind } from "@dxos/protocols/proto/dxos/echo/model/text";
|
|
13
6
|
|
|
@@ -23,8 +16,11 @@ var documentSlots = {
|
|
|
23
16
|
* NOTE: Max width - 4rem = 2rem left/right margin (or 2rem gutter plus 1rem left/right margin).
|
|
24
17
|
*/
|
|
25
18
|
className: mx(
|
|
26
|
-
//
|
|
27
|
-
|
|
19
|
+
// Inline-size container for widget sizing (children use `max-w-[100cqi]`).
|
|
20
|
+
// NOTE: Use inline-size, not full size containment — `container-type: size` on the
|
|
21
|
+
// editor content breaks CodeMirror's viewport measurement, leaving blank gaps during
|
|
22
|
+
// scroll until a click forces a re-measure.
|
|
23
|
+
"dx-inline-size-container",
|
|
28
24
|
// Wider margin for web (vs. mobile).
|
|
29
25
|
"pointer-fine:max-w-[min(50rem,100%-4rem)] pointer-coarse:max-w-[min(50rem,100%-2rem)]",
|
|
30
26
|
"mx-auto! w-full"
|
|
@@ -275,12 +271,7 @@ var wrapWithCatch = (fn, label) => {
|
|
|
275
271
|
} catch (err) {
|
|
276
272
|
log.catch(err, {
|
|
277
273
|
label
|
|
278
|
-
}, {
|
|
279
|
-
F: __dxlog_file,
|
|
280
|
-
L: 20,
|
|
281
|
-
S: void 0,
|
|
282
|
-
C: (f, a) => f(...a)
|
|
283
|
-
});
|
|
274
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 13, S: void 0 });
|
|
284
275
|
}
|
|
285
276
|
};
|
|
286
277
|
};
|
|
@@ -306,12 +297,7 @@ var logChanges = (trs) => {
|
|
|
306
297
|
if (changes.length) {
|
|
307
298
|
log("changes", {
|
|
308
299
|
changes
|
|
309
|
-
}, {
|
|
310
|
-
F: __dxlog_file,
|
|
311
|
-
L: 54,
|
|
312
|
-
S: void 0,
|
|
313
|
-
C: (f, a) => f(...a)
|
|
314
|
-
});
|
|
300
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 44, S: void 0 });
|
|
315
301
|
}
|
|
316
302
|
};
|
|
317
303
|
|
|
@@ -602,12 +588,7 @@ var scroller = ({ overScroll = 0 } = {}) => {
|
|
|
602
588
|
}
|
|
603
589
|
}
|
|
604
590
|
} catch (err) {
|
|
605
|
-
log2.catch(err, void 0, {
|
|
606
|
-
F: __dxlog_file2,
|
|
607
|
-
L: 146,
|
|
608
|
-
S: void 0,
|
|
609
|
-
C: (f, a) => f(...a)
|
|
610
|
-
});
|
|
591
|
+
log2.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 91, S: void 0 });
|
|
611
592
|
}
|
|
612
593
|
});
|
|
613
594
|
}),
|
|
@@ -873,12 +854,7 @@ var cursorConverter = (accessor) => ({
|
|
|
873
854
|
try {
|
|
874
855
|
return toCursor(accessor, pos, assoc);
|
|
875
856
|
} catch (err) {
|
|
876
|
-
log3.catch(err, void 0, {
|
|
877
|
-
F: __dxlog_file3,
|
|
878
|
-
L: 15,
|
|
879
|
-
S: void 0,
|
|
880
|
-
C: (f, a) => f(...a)
|
|
881
|
-
});
|
|
857
|
+
log3.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 11, S: void 0 });
|
|
882
858
|
return "";
|
|
883
859
|
}
|
|
884
860
|
},
|
|
@@ -886,12 +862,7 @@ var cursorConverter = (accessor) => ({
|
|
|
886
862
|
try {
|
|
887
863
|
return fromCursor(accessor, cursor);
|
|
888
864
|
} catch (err) {
|
|
889
|
-
log3.catch(err, void 0, {
|
|
890
|
-
F: __dxlog_file3,
|
|
891
|
-
L: 24,
|
|
892
|
-
S: void 0,
|
|
893
|
-
C: (f, a) => f(...a)
|
|
894
|
-
});
|
|
865
|
+
log3.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 19, S: void 0 });
|
|
895
866
|
return 0;
|
|
896
867
|
}
|
|
897
868
|
}
|
|
@@ -1076,12 +1047,7 @@ var Syncer = class {
|
|
|
1076
1047
|
this._pending = false;
|
|
1077
1048
|
}
|
|
1078
1049
|
onEditorChange(view) {
|
|
1079
|
-
log4("onEditorChange", void 0, {
|
|
1080
|
-
F: __dxlog_file4,
|
|
1081
|
-
L: 45,
|
|
1082
|
-
S: this,
|
|
1083
|
-
C: (f, a) => f(...a)
|
|
1084
|
-
});
|
|
1050
|
+
log4("onEditorChange", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 35, S: this });
|
|
1085
1051
|
const transactions = view.state.field(this._state).unreconciledTransactions.filter((tx) => !isReconcile(tx));
|
|
1086
1052
|
const newHeads = updateAutomerge(this._state, this._handle, transactions, view.state);
|
|
1087
1053
|
if (newHeads) {
|
|
@@ -1092,12 +1058,7 @@ var Syncer = class {
|
|
|
1092
1058
|
}
|
|
1093
1059
|
}
|
|
1094
1060
|
onAutomergeChange(view) {
|
|
1095
|
-
log4("onAutomergeChange", void 0, {
|
|
1096
|
-
F: __dxlog_file4,
|
|
1097
|
-
L: 60,
|
|
1098
|
-
S: this,
|
|
1099
|
-
C: (f, a) => f(...a)
|
|
1100
|
-
});
|
|
1061
|
+
log4("onAutomergeChange", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 47, S: this });
|
|
1101
1062
|
const oldHeads = getLastHeads(view.state, this._state);
|
|
1102
1063
|
const newHeads = A2.getHeads(this._handle.doc());
|
|
1103
1064
|
const diff = A2.equals(oldHeads, newHeads) ? [] : A2.diff(this._handle.doc(), oldHeads, newHeads);
|
|
@@ -1220,10 +1181,7 @@ var awareness = (provider = dummyProvider) => {
|
|
|
1220
1181
|
];
|
|
1221
1182
|
};
|
|
1222
1183
|
var RemoteSelectionsDecorator = class {
|
|
1223
|
-
_ctx = new Context(void 0, {
|
|
1224
|
-
F: __dxlog_file5,
|
|
1225
|
-
L: 80
|
|
1226
|
-
});
|
|
1184
|
+
_ctx = new Context(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 33 });
|
|
1227
1185
|
_cursorConverter;
|
|
1228
1186
|
_provider;
|
|
1229
1187
|
_lastAnchor;
|
|
@@ -1454,10 +1412,7 @@ var SpaceAwarenessProvider = class {
|
|
|
1454
1412
|
this._info = info;
|
|
1455
1413
|
}
|
|
1456
1414
|
open() {
|
|
1457
|
-
this._ctx = new Context2(void 0, {
|
|
1458
|
-
F: __dxlog_file6,
|
|
1459
|
-
L: 57
|
|
1460
|
-
});
|
|
1415
|
+
this._ctx = new Context2(void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 28 });
|
|
1461
1416
|
this._postTask = new DeferredTask(this._ctx, async () => {
|
|
1462
1417
|
if (this._localState) {
|
|
1463
1418
|
await this._messenger.postMessage(this._channel, {
|
|
@@ -1484,12 +1439,7 @@ var SpaceAwarenessProvider = class {
|
|
|
1484
1439
|
}).catch((err) => {
|
|
1485
1440
|
log5.debug("failed to query awareness", {
|
|
1486
1441
|
err
|
|
1487
|
-
}, {
|
|
1488
|
-
F: __dxlog_file6,
|
|
1489
|
-
L: 91,
|
|
1490
|
-
S: this,
|
|
1491
|
-
C: (f, a) => f(...a)
|
|
1492
|
-
});
|
|
1442
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 57, S: this });
|
|
1493
1443
|
});
|
|
1494
1444
|
}
|
|
1495
1445
|
close() {
|
|
@@ -1501,15 +1451,7 @@ var SpaceAwarenessProvider = class {
|
|
|
1501
1451
|
return Array.from(this._remoteStates.values());
|
|
1502
1452
|
}
|
|
1503
1453
|
update(position) {
|
|
1504
|
-
invariant(this._postTask, void 0, {
|
|
1505
|
-
F: __dxlog_file6,
|
|
1506
|
-
L: 106,
|
|
1507
|
-
S: this,
|
|
1508
|
-
A: [
|
|
1509
|
-
"this._postTask",
|
|
1510
|
-
""
|
|
1511
|
-
]
|
|
1512
|
-
});
|
|
1454
|
+
invariant(this._postTask, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 71, S: this, A: ["this._postTask", ""] });
|
|
1513
1455
|
this._localState = {
|
|
1514
1456
|
peerId: this._peerId,
|
|
1515
1457
|
position,
|
|
@@ -1518,27 +1460,11 @@ var SpaceAwarenessProvider = class {
|
|
|
1518
1460
|
this._postTask.schedule();
|
|
1519
1461
|
}
|
|
1520
1462
|
_handleQueryMessage() {
|
|
1521
|
-
invariant(this._postTask, void 0, {
|
|
1522
|
-
F: __dxlog_file6,
|
|
1523
|
-
L: 117,
|
|
1524
|
-
S: this,
|
|
1525
|
-
A: [
|
|
1526
|
-
"this._postTask",
|
|
1527
|
-
""
|
|
1528
|
-
]
|
|
1529
|
-
});
|
|
1463
|
+
invariant(this._postTask, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 80, S: this, A: ["this._postTask", ""] });
|
|
1530
1464
|
this._postTask.schedule();
|
|
1531
1465
|
}
|
|
1532
1466
|
_handlePostMessage(message) {
|
|
1533
|
-
invariant(message.kind === "post", void 0, {
|
|
1534
|
-
F: __dxlog_file6,
|
|
1535
|
-
L: 122,
|
|
1536
|
-
S: this,
|
|
1537
|
-
A: [
|
|
1538
|
-
"message.kind === 'post'",
|
|
1539
|
-
""
|
|
1540
|
-
]
|
|
1541
|
-
});
|
|
1467
|
+
invariant(message.kind === "post", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 84, S: this, A: ["message.kind === 'post'", ""] });
|
|
1542
1468
|
this._remoteStates.set(message.state.peerId, message.state);
|
|
1543
1469
|
this.remoteStateChange.emit();
|
|
1544
1470
|
}
|
|
@@ -1667,15 +1593,7 @@ var Blaster = class {
|
|
|
1667
1593
|
return this._node;
|
|
1668
1594
|
}
|
|
1669
1595
|
initialize() {
|
|
1670
|
-
invariant2(!this._canvas && !this._ctx, void 0, {
|
|
1671
|
-
F: __dxlog_file7,
|
|
1672
|
-
L: 142,
|
|
1673
|
-
S: this,
|
|
1674
|
-
A: [
|
|
1675
|
-
"!this._canvas && !this._ctx",
|
|
1676
|
-
""
|
|
1677
|
-
]
|
|
1678
|
-
});
|
|
1596
|
+
invariant2(!this._canvas && !this._ctx, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 134, S: this, A: ["!this._canvas && !this._ctx", ""] });
|
|
1679
1597
|
this._canvas = document.createElement("canvas");
|
|
1680
1598
|
this._canvas.id = "code-blast-canvas";
|
|
1681
1599
|
this._canvas.style.position = "absolute";
|
|
@@ -1704,15 +1622,7 @@ var Blaster = class {
|
|
|
1704
1622
|
}
|
|
1705
1623
|
}
|
|
1706
1624
|
start() {
|
|
1707
|
-
invariant2(this._canvas && this._ctx, void 0, {
|
|
1708
|
-
F: __dxlog_file7,
|
|
1709
|
-
L: 181,
|
|
1710
|
-
S: this,
|
|
1711
|
-
A: [
|
|
1712
|
-
"this._canvas && this._ctx",
|
|
1713
|
-
""
|
|
1714
|
-
]
|
|
1715
|
-
});
|
|
1625
|
+
invariant2(this._canvas && this._ctx, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 166, S: this, A: ["this._canvas && this._ctx", ""] });
|
|
1716
1626
|
this._running = true;
|
|
1717
1627
|
this.loop();
|
|
1718
1628
|
}
|
|
@@ -1962,12 +1872,7 @@ var bookmarks = () => {
|
|
|
1962
1872
|
key: "Mod-ArrowUp",
|
|
1963
1873
|
run: (view) => {
|
|
1964
1874
|
const bookmarks2 = view.state.field(bookmarksField);
|
|
1965
|
-
log6("up", bookmarks2, {
|
|
1966
|
-
F: __dxlog_file8,
|
|
1967
|
-
L: 29,
|
|
1968
|
-
S: void 0,
|
|
1969
|
-
C: (f, a) => f(...a)
|
|
1970
|
-
});
|
|
1875
|
+
log6("up", bookmarks2, { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 18, S: void 0 });
|
|
1971
1876
|
return true;
|
|
1972
1877
|
}
|
|
1973
1878
|
},
|
|
@@ -1975,12 +1880,7 @@ var bookmarks = () => {
|
|
|
1975
1880
|
key: "Mod-ArrowDown",
|
|
1976
1881
|
run: (view) => {
|
|
1977
1882
|
const bookmarks2 = view.state.field(bookmarksField);
|
|
1978
|
-
log6("down", bookmarks2, {
|
|
1979
|
-
F: __dxlog_file8,
|
|
1980
|
-
L: 37,
|
|
1981
|
-
S: void 0,
|
|
1982
|
-
C: (f, a) => f(...a)
|
|
1983
|
-
});
|
|
1883
|
+
log6("down", bookmarks2, { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 26, S: void 0 });
|
|
1984
1884
|
return true;
|
|
1985
1885
|
}
|
|
1986
1886
|
}
|
|
@@ -2045,28 +1945,12 @@ var createEditorStateTransaction = ({ scrollTo, selection }) => {
|
|
|
2045
1945
|
};
|
|
2046
1946
|
var createEditorStateStore = (keyPrefix) => ({
|
|
2047
1947
|
getState: (id) => {
|
|
2048
|
-
invariant3(id, void 0, {
|
|
2049
|
-
F: __dxlog_file9,
|
|
2050
|
-
L: 47,
|
|
2051
|
-
S: void 0,
|
|
2052
|
-
A: [
|
|
2053
|
-
"id",
|
|
2054
|
-
""
|
|
2055
|
-
]
|
|
2056
|
-
});
|
|
1948
|
+
invariant3(id, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 26, S: void 0, A: ["id", ""] });
|
|
2057
1949
|
const state = localStorage.getItem(`${keyPrefix}/${id}`);
|
|
2058
1950
|
return state ? JSON.parse(state) : void 0;
|
|
2059
1951
|
},
|
|
2060
1952
|
setState: (id, state) => {
|
|
2061
|
-
invariant3(id, void 0, {
|
|
2062
|
-
F: __dxlog_file9,
|
|
2063
|
-
L: 53,
|
|
2064
|
-
S: void 0,
|
|
2065
|
-
A: [
|
|
2066
|
-
"id",
|
|
2067
|
-
""
|
|
2068
|
-
]
|
|
2069
|
-
});
|
|
1953
|
+
invariant3(id, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 31, S: void 0, A: ["id", ""] });
|
|
2070
1954
|
localStorage.setItem(`${keyPrefix}/${id}`, JSON.stringify(state));
|
|
2071
1955
|
}
|
|
2072
1956
|
});
|
|
@@ -2188,12 +2072,7 @@ var commentsDecorations = EditorView11.decorations.compute([
|
|
|
2188
2072
|
const decorations2 = sortBy(comments2 ?? [], (range) => range.range.from)?.flatMap((comment) => {
|
|
2189
2073
|
const range = comment.range;
|
|
2190
2074
|
if (!range) {
|
|
2191
|
-
log7.warn("Invalid range:", range, {
|
|
2192
|
-
F: __dxlog_file10,
|
|
2193
|
-
L: 139,
|
|
2194
|
-
S: void 0,
|
|
2195
|
-
C: (f, a) => f(...a)
|
|
2196
|
-
});
|
|
2075
|
+
log7.warn("Invalid range:", range, { "~LogMeta": "~LogMeta", F: __dxlog_file10, L: 93, S: void 0 });
|
|
2197
2076
|
return void 0;
|
|
2198
2077
|
} else if (range.from === range.to) {
|
|
2199
2078
|
return void 0;
|
|
@@ -2659,9 +2538,15 @@ var baseTheme = EditorView13.baseTheme({
|
|
|
2659
2538
|
overflowAnchor: "auto"
|
|
2660
2539
|
},
|
|
2661
2540
|
".cm-scroller::-webkit-scrollbar": {
|
|
2662
|
-
width: "8px"
|
|
2541
|
+
width: "var(--scrollbar-size,8px)",
|
|
2542
|
+
height: "var(--scrollbar-size,8px)"
|
|
2543
|
+
},
|
|
2544
|
+
".cm-scroller::-webkit-scrollbar-corner": {
|
|
2545
|
+
background: "transparent"
|
|
2546
|
+
},
|
|
2547
|
+
".cm-scroller::-webkit-scrollbar-track": {
|
|
2548
|
+
background: "transparent"
|
|
2663
2549
|
},
|
|
2664
|
-
".cm-scroller::-webkit-scrollbar-track": {},
|
|
2665
2550
|
".cm-scroller::-webkit-scrollbar-thumb": {
|
|
2666
2551
|
background: "transparent",
|
|
2667
2552
|
transition: "background 0.15s"
|
|
@@ -2698,7 +2583,7 @@ var baseTheme = EditorView13.baseTheme({
|
|
|
2698
2583
|
* Height is set to match the corresponding line (which may have wrapped).
|
|
2699
2584
|
*/
|
|
2700
2585
|
".cm-gutterElement": {
|
|
2701
|
-
lineHeight:
|
|
2586
|
+
lineHeight: "24px",
|
|
2702
2587
|
fontSize: "12px"
|
|
2703
2588
|
},
|
|
2704
2589
|
/**
|
|
@@ -3013,12 +2898,7 @@ var createBasicExtensions = (propsProp) => {
|
|
|
3013
2898
|
return [
|
|
3014
2899
|
// NOTE: Doesn't catch errors in keymap functions.
|
|
3015
2900
|
EditorView16.exceptionSink.of((err) => {
|
|
3016
|
-
log8.catch(err, void 0, {
|
|
3017
|
-
F: __dxlog_file11,
|
|
3018
|
-
L: 130,
|
|
3019
|
-
S: void 0,
|
|
3020
|
-
C: (f, a) => f(...a)
|
|
3021
|
-
});
|
|
2901
|
+
log8.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 79, S: void 0 });
|
|
3022
2902
|
}),
|
|
3023
2903
|
props.allowMultipleSelections && EditorState.allowMultipleSelections.of(true),
|
|
3024
2904
|
props.bracketMatching && bracketMatching(),
|
|
@@ -3038,6 +2918,13 @@ var createBasicExtensions = (propsProp) => {
|
|
|
3038
2918
|
props.lineWrapping && EditorView16.lineWrapping,
|
|
3039
2919
|
props.placeholder && placeholder2(props.placeholder),
|
|
3040
2920
|
props.readOnly !== void 0 && EditorState.readOnly.of(props.readOnly),
|
|
2921
|
+
// `EditorState.readOnly` is advisory — CodeMirror doesn't auto-reject doc-changing
|
|
2922
|
+
// transactions. Some extensions (e.g. `@codemirror/lang-markdown`'s Enter handler that
|
|
2923
|
+
// continues a list) dispatch programmatic edits regardless. Drop user-initiated edits
|
|
2924
|
+
// (`input` / `delete` keymap dispatches plus `undo` / `redo` from the history extension)
|
|
2925
|
+
// but pass programmatic dispatches — streaming `MarkdownStream` and similar consumers
|
|
2926
|
+
// depend on being able to populate the doc themselves.
|
|
2927
|
+
props.readOnly && EditorState.transactionFilter.of((tr) => tr.docChanged && (tr.isUserEvent("input") || tr.isUserEvent("delete") || tr.isUserEvent("undo") || tr.isUserEvent("redo")) ? [] : tr),
|
|
3041
2928
|
props.scrollPastEnd && scrollPastEnd(),
|
|
3042
2929
|
props.tabbable && tabbable,
|
|
3043
2930
|
props.tabSize && EditorState.tabSize.of(props.tabSize),
|
|
@@ -3080,7 +2967,7 @@ var defaultStyles = {
|
|
|
3080
2967
|
dark: vscodeDarkStyle,
|
|
3081
2968
|
light: vscodeLightStyle
|
|
3082
2969
|
};
|
|
3083
|
-
var createThemeExtensions = ({ monospace,
|
|
2970
|
+
var createThemeExtensions = ({ monospace, scrollbarThin, slots: slotsProp, syntaxHighlighting: syntaxHighlightingProp, themeMode } = {}) => {
|
|
3084
2971
|
const slots = defaultsDeep2({}, slotsProp, defaultThemeSlots);
|
|
3085
2972
|
return [
|
|
3086
2973
|
baseTheme,
|
|
@@ -3095,11 +2982,14 @@ var createThemeExtensions = ({ monospace, themeMode, slots: slotsProp, syntaxHig
|
|
|
3095
2982
|
slots.content?.className && EditorView16.contentAttributes.of({
|
|
3096
2983
|
class: slots.content.className
|
|
3097
2984
|
}),
|
|
3098
|
-
slots.scroller?.className && ViewPlugin12.fromClass(class {
|
|
2985
|
+
(slots.scroller?.className || scrollbarThin) && ViewPlugin12.fromClass(class {
|
|
3099
2986
|
constructor(view) {
|
|
3100
2987
|
if (slots.scroller?.className) {
|
|
3101
2988
|
view.scrollDOM.classList.add(...slots.scroller.className.split(/\s+/));
|
|
3102
2989
|
}
|
|
2990
|
+
if (scrollbarThin) {
|
|
2991
|
+
view.scrollDOM.style.setProperty("--scrollbar-size", "4px");
|
|
2992
|
+
}
|
|
3103
2993
|
}
|
|
3104
2994
|
})
|
|
3105
2995
|
].filter(isTruthy2);
|
|
@@ -5356,15 +5246,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
|
5356
5246
|
const { state } = view;
|
|
5357
5247
|
const headerLevels = [];
|
|
5358
5248
|
const getHeaderLevels = (node, level) => {
|
|
5359
|
-
invariant4(level > 0, void 0, {
|
|
5360
|
-
F: __dxlog_file12,
|
|
5361
|
-
L: 177,
|
|
5362
|
-
S: void 0,
|
|
5363
|
-
A: [
|
|
5364
|
-
"level > 0",
|
|
5365
|
-
""
|
|
5366
|
-
]
|
|
5367
|
-
});
|
|
5249
|
+
invariant4(level > 0, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file12, L: 160, S: void 0, A: ["level > 0", ""] });
|
|
5368
5250
|
if (level > headerLevels.length) {
|
|
5369
5251
|
const len = headerLevels.length;
|
|
5370
5252
|
headerLevels.length = level;
|
|
@@ -5395,15 +5277,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
|
5395
5277
|
listLevels.pop();
|
|
5396
5278
|
};
|
|
5397
5279
|
const getCurrentListLevel = () => {
|
|
5398
|
-
invariant4(listLevels.length, void 0, {
|
|
5399
|
-
F: __dxlog_file12,
|
|
5400
|
-
L: 199,
|
|
5401
|
-
S: void 0,
|
|
5402
|
-
A: [
|
|
5403
|
-
"listLevels.length",
|
|
5404
|
-
""
|
|
5405
|
-
]
|
|
5406
|
-
});
|
|
5280
|
+
invariant4(listLevels.length, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file12, L: 192, S: void 0, A: ["listLevels.length", ""] });
|
|
5407
5281
|
return listLevels[listLevels.length - 1];
|
|
5408
5282
|
};
|
|
5409
5283
|
const enterNode = (node) => {
|
|
@@ -5825,12 +5699,7 @@ var mention = ({ debug, onSearch }) => {
|
|
|
5825
5699
|
(context) => {
|
|
5826
5700
|
log9.info("completion context", {
|
|
5827
5701
|
context
|
|
5828
|
-
}, {
|
|
5829
|
-
F: __dxlog_file13,
|
|
5830
|
-
L: 27,
|
|
5831
|
-
S: void 0,
|
|
5832
|
-
C: (f, a) => f(...a)
|
|
5833
|
-
});
|
|
5702
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 18, S: void 0 });
|
|
5834
5703
|
const match = context.matchBefore(/@(\w+)?/);
|
|
5835
5704
|
if (!match || match.from === match.to && !context.explicit) {
|
|
5836
5705
|
return null;
|
|
@@ -6063,15 +5932,7 @@ var outlinerTree = (_options = {}) => {
|
|
|
6063
5932
|
break;
|
|
6064
5933
|
}
|
|
6065
5934
|
case "BulletList": {
|
|
6066
|
-
invariant5(current, void 0, {
|
|
6067
|
-
F: __dxlog_file14,
|
|
6068
|
-
L: 219,
|
|
6069
|
-
S: void 0,
|
|
6070
|
-
A: [
|
|
6071
|
-
"current",
|
|
6072
|
-
""
|
|
6073
|
-
]
|
|
6074
|
-
});
|
|
5935
|
+
invariant5(current, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file14, L: 169, S: void 0, A: ["current", ""] });
|
|
6075
5936
|
parent = current;
|
|
6076
5937
|
if (current) {
|
|
6077
5938
|
current.lineRange.to = current.node.from;
|
|
@@ -6080,15 +5941,7 @@ var outlinerTree = (_options = {}) => {
|
|
|
6080
5941
|
break;
|
|
6081
5942
|
}
|
|
6082
5943
|
case "ListItem": {
|
|
6083
|
-
invariant5(parent, void 0, {
|
|
6084
|
-
F: __dxlog_file14,
|
|
6085
|
-
L: 228,
|
|
6086
|
-
S: void 0,
|
|
6087
|
-
A: [
|
|
6088
|
-
"parent",
|
|
6089
|
-
""
|
|
6090
|
-
]
|
|
6091
|
-
});
|
|
5944
|
+
invariant5(parent, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file14, L: 179, S: void 0, A: ["parent", ""] });
|
|
6092
5945
|
const nextSibling = node.node.nextSibling ?? node.node.parent?.nextSibling;
|
|
6093
5946
|
const docRange = {
|
|
6094
5947
|
from: state.doc.lineAt(node.from).from,
|
|
@@ -6122,42 +5975,18 @@ var outlinerTree = (_options = {}) => {
|
|
|
6122
5975
|
break;
|
|
6123
5976
|
}
|
|
6124
5977
|
case "ListMark": {
|
|
6125
|
-
invariant5(current, void 0, {
|
|
6126
|
-
F: __dxlog_file14,
|
|
6127
|
-
L: 272,
|
|
6128
|
-
S: void 0,
|
|
6129
|
-
A: [
|
|
6130
|
-
"current",
|
|
6131
|
-
""
|
|
6132
|
-
]
|
|
6133
|
-
});
|
|
5978
|
+
invariant5(current, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file14, L: 219, S: void 0, A: ["current", ""] });
|
|
6134
5979
|
current.type = "bullet";
|
|
6135
5980
|
current.contentRange.from = node.from + "- ".length;
|
|
6136
5981
|
break;
|
|
6137
5982
|
}
|
|
6138
5983
|
case "Task": {
|
|
6139
|
-
invariant5(current, void 0, {
|
|
6140
|
-
F: __dxlog_file14,
|
|
6141
|
-
L: 278,
|
|
6142
|
-
S: void 0,
|
|
6143
|
-
A: [
|
|
6144
|
-
"current",
|
|
6145
|
-
""
|
|
6146
|
-
]
|
|
6147
|
-
});
|
|
5984
|
+
invariant5(current, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file14, L: 226, S: void 0, A: ["current", ""] });
|
|
6148
5985
|
current.type = "task";
|
|
6149
5986
|
break;
|
|
6150
5987
|
}
|
|
6151
5988
|
case "TaskMarker": {
|
|
6152
|
-
invariant5(current, void 0, {
|
|
6153
|
-
F: __dxlog_file14,
|
|
6154
|
-
L: 283,
|
|
6155
|
-
S: void 0,
|
|
6156
|
-
A: [
|
|
6157
|
-
"current",
|
|
6158
|
-
""
|
|
6159
|
-
]
|
|
6160
|
-
});
|
|
5989
|
+
invariant5(current, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file14, L: 232, S: void 0, A: ["current", ""] });
|
|
6161
5990
|
current.contentRange.from = node.from + "[ ] ".length;
|
|
6162
5991
|
break;
|
|
6163
5992
|
}
|
|
@@ -6165,29 +5994,13 @@ var outlinerTree = (_options = {}) => {
|
|
|
6165
5994
|
},
|
|
6166
5995
|
leave: (node) => {
|
|
6167
5996
|
if (node.name === "BulletList") {
|
|
6168
|
-
invariant5(parent, void 0, {
|
|
6169
|
-
F: __dxlog_file14,
|
|
6170
|
-
L: 291,
|
|
6171
|
-
S: void 0,
|
|
6172
|
-
A: [
|
|
6173
|
-
"parent",
|
|
6174
|
-
""
|
|
6175
|
-
]
|
|
6176
|
-
});
|
|
5997
|
+
invariant5(parent, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file14, L: 240, S: void 0, A: ["parent", ""] });
|
|
6177
5998
|
prevSiblings[level--] = void 0;
|
|
6178
5999
|
parent = parent.parent;
|
|
6179
6000
|
}
|
|
6180
6001
|
}
|
|
6181
6002
|
});
|
|
6182
|
-
invariant5(tree, void 0, {
|
|
6183
|
-
F: __dxlog_file14,
|
|
6184
|
-
L: 298,
|
|
6185
|
-
S: void 0,
|
|
6186
|
-
A: [
|
|
6187
|
-
"tree",
|
|
6188
|
-
""
|
|
6189
|
-
]
|
|
6190
|
-
});
|
|
6003
|
+
invariant5(tree, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file14, L: 246, S: void 0, A: ["tree", ""] });
|
|
6191
6004
|
return tree;
|
|
6192
6005
|
};
|
|
6193
6006
|
return [
|
|
@@ -6629,35 +6442,20 @@ var editor = () => [
|
|
|
6629
6442
|
text: insert.toString(),
|
|
6630
6443
|
length: insert.length
|
|
6631
6444
|
}
|
|
6632
|
-
}, {
|
|
6633
|
-
F: __dxlog_file15,
|
|
6634
|
-
L: 164,
|
|
6635
|
-
S: void 0,
|
|
6636
|
-
C: (f, a) => f(...a)
|
|
6637
|
-
});
|
|
6445
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file15, L: 174, S: void 0 });
|
|
6638
6446
|
}
|
|
6639
6447
|
});
|
|
6640
6448
|
if (changes.length > 0) {
|
|
6641
6449
|
log10("modified,", {
|
|
6642
6450
|
changes
|
|
6643
|
-
}, {
|
|
6644
|
-
F: __dxlog_file15,
|
|
6645
|
-
L: 175,
|
|
6646
|
-
S: void 0,
|
|
6647
|
-
C: (f, a) => f(...a)
|
|
6648
|
-
});
|
|
6451
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file15, L: 196, S: void 0 });
|
|
6649
6452
|
return [
|
|
6650
6453
|
{
|
|
6651
6454
|
changes
|
|
6652
6455
|
}
|
|
6653
6456
|
];
|
|
6654
6457
|
} else if (cancel) {
|
|
6655
|
-
log10("cancel", void 0, {
|
|
6656
|
-
F: __dxlog_file15,
|
|
6657
|
-
L: 178,
|
|
6658
|
-
S: void 0,
|
|
6659
|
-
C: (f, a) => f(...a)
|
|
6660
|
-
});
|
|
6458
|
+
log10("cancel", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file15, L: 205, S: void 0 });
|
|
6661
6459
|
return [];
|
|
6662
6460
|
}
|
|
6663
6461
|
return tr;
|
|
@@ -7098,12 +6896,69 @@ var replacer = ({ replacements = defaultReplacements } = {}) => {
|
|
|
7098
6896
|
});
|
|
7099
6897
|
};
|
|
7100
6898
|
|
|
6899
|
+
// src/extensions/snippets.ts
|
|
6900
|
+
import { keymap as keymap12 } from "@codemirror/view";
|
|
6901
|
+
var defaultItems = [
|
|
6902
|
+
"hello world!",
|
|
6903
|
+
"this is a test.",
|
|
6904
|
+
"this is [DXOS](https://dxos.org)"
|
|
6905
|
+
];
|
|
6906
|
+
var snippets2 = ({ delay = 75, items = defaultItems } = {}) => {
|
|
6907
|
+
let timer;
|
|
6908
|
+
let index = 0;
|
|
6909
|
+
return [
|
|
6910
|
+
keymap12.of([
|
|
6911
|
+
{
|
|
6912
|
+
// Reset.
|
|
6913
|
+
key: "alt-meta-'",
|
|
6914
|
+
run: () => {
|
|
6915
|
+
clearTimeout(timer);
|
|
6916
|
+
index = 0;
|
|
6917
|
+
return true;
|
|
6918
|
+
}
|
|
6919
|
+
},
|
|
6920
|
+
{
|
|
6921
|
+
// Next snippet.
|
|
6922
|
+
// TODO(burdon): Press 1-9 to select snippet?
|
|
6923
|
+
key: "Shift-Meta-'",
|
|
6924
|
+
run: (view) => {
|
|
6925
|
+
clearTimeout(timer);
|
|
6926
|
+
const text = items[index++];
|
|
6927
|
+
if (index === items?.length) {
|
|
6928
|
+
index = 0;
|
|
6929
|
+
}
|
|
6930
|
+
let offset = 0;
|
|
6931
|
+
const insert = (delayMs = 0) => {
|
|
6932
|
+
timer = setTimeout(() => {
|
|
6933
|
+
const pos = view.state.selection.main.head;
|
|
6934
|
+
view.dispatch({
|
|
6935
|
+
changes: {
|
|
6936
|
+
from: pos,
|
|
6937
|
+
insert: text[offset++]
|
|
6938
|
+
},
|
|
6939
|
+
selection: {
|
|
6940
|
+
anchor: pos + 1
|
|
6941
|
+
}
|
|
6942
|
+
});
|
|
6943
|
+
if (offset < text.length) {
|
|
6944
|
+
insert(Math.random() * delay * (text[offset] === " " ? 2 : 1));
|
|
6945
|
+
}
|
|
6946
|
+
}, delayMs);
|
|
6947
|
+
};
|
|
6948
|
+
insert();
|
|
6949
|
+
return true;
|
|
6950
|
+
}
|
|
6951
|
+
}
|
|
6952
|
+
])
|
|
6953
|
+
];
|
|
6954
|
+
};
|
|
6955
|
+
|
|
7101
6956
|
// src/extensions/submit.ts
|
|
7102
6957
|
import { Prec as Prec6 } from "@codemirror/state";
|
|
7103
|
-
import { keymap as
|
|
6958
|
+
import { keymap as keymap13 } from "@codemirror/view";
|
|
7104
6959
|
var submit = ({ fireIfEmpty = false, onSubmit } = {}) => {
|
|
7105
6960
|
return [
|
|
7106
|
-
Prec6.highest(
|
|
6961
|
+
Prec6.highest(keymap13.of([
|
|
7107
6962
|
{
|
|
7108
6963
|
key: "Enter",
|
|
7109
6964
|
preventDefault: true,
|
|
@@ -7429,36 +7284,46 @@ var fader = (options = {}) => {
|
|
|
7429
7284
|
];
|
|
7430
7285
|
};
|
|
7431
7286
|
|
|
7432
|
-
// src/extensions/tags/
|
|
7287
|
+
// src/extensions/tags/typewriter.ts
|
|
7433
7288
|
import { Annotation as Annotation3, ChangeSet as ChangeSet2, EditorState as EditorState3, StateEffect as StateEffect11, StateField as StateField13 } from "@codemirror/state";
|
|
7434
7289
|
import { Decoration as Decoration15, EditorView as EditorView30, ViewPlugin as ViewPlugin21, WidgetType as WidgetType9 } from "@codemirror/view";
|
|
7435
7290
|
import { Domino as Domino3 } from "@dxos/ui";
|
|
7436
|
-
var
|
|
7437
|
-
var
|
|
7291
|
+
var typewriterBypass = Annotation3.define();
|
|
7292
|
+
var typewriterDrainingEffect = StateEffect11.define();
|
|
7438
7293
|
var CURSOR_LINGER = 3e3;
|
|
7439
|
-
var
|
|
7440
|
-
|
|
7441
|
-
|
|
7294
|
+
var FRAME_BUDGET_MS = 4;
|
|
7295
|
+
var CHARS_PER_FRAME = 5;
|
|
7296
|
+
var FLUSH_THRESHOLD = 2e3;
|
|
7297
|
+
var COMPACT_HEAD_THRESHOLD = 4096;
|
|
7298
|
+
var typewriter = (options = {}) => {
|
|
7442
7299
|
const streamingTags = options.streamingTags ?? /* @__PURE__ */ new Set();
|
|
7300
|
+
const flushThreshold = options.flushThreshold ?? FLUSH_THRESHOLD;
|
|
7301
|
+
const frameBudgetMs = options.frameBudgetMs ?? FRAME_BUDGET_MS;
|
|
7302
|
+
const charsPerFrame = options.charsPerFrame ?? CHARS_PER_FRAME;
|
|
7443
7303
|
const suppressAppend = StateEffect11.define();
|
|
7444
7304
|
const insertChunk = StateEffect11.define();
|
|
7445
7305
|
const bufferField = StateField13.define({
|
|
7446
7306
|
create: () => ({
|
|
7447
7307
|
text: "",
|
|
7308
|
+
head: 0,
|
|
7448
7309
|
insertAt: 0
|
|
7449
7310
|
}),
|
|
7450
7311
|
update: (value, tr) => {
|
|
7451
|
-
let { text, insertAt } = value;
|
|
7312
|
+
let { text, head, insertAt } = value;
|
|
7452
7313
|
for (const effect of tr.effects) {
|
|
7453
7314
|
if (effect.is(suppressAppend)) {
|
|
7454
|
-
text
|
|
7455
|
-
if (text.length === effect.value.text.length) {
|
|
7315
|
+
if (text.length === head) {
|
|
7456
7316
|
insertAt = effect.value.from;
|
|
7457
7317
|
}
|
|
7318
|
+
text += effect.value.text;
|
|
7458
7319
|
}
|
|
7459
7320
|
if (effect.is(insertChunk)) {
|
|
7460
|
-
|
|
7321
|
+
head += effect.value.text.length;
|
|
7461
7322
|
insertAt = effect.value.from + effect.value.text.length;
|
|
7323
|
+
if (head >= COMPACT_HEAD_THRESHOLD || head > 0 && head * 2 >= text.length) {
|
|
7324
|
+
text = text.slice(head);
|
|
7325
|
+
head = 0;
|
|
7326
|
+
}
|
|
7462
7327
|
}
|
|
7463
7328
|
}
|
|
7464
7329
|
if (tr.docChanged) {
|
|
@@ -7473,6 +7338,7 @@ var wire = (options = {}) => {
|
|
|
7473
7338
|
if (isReset) {
|
|
7474
7339
|
return {
|
|
7475
7340
|
text: "",
|
|
7341
|
+
head: 0,
|
|
7476
7342
|
insertAt: 0
|
|
7477
7343
|
};
|
|
7478
7344
|
}
|
|
@@ -7482,6 +7348,7 @@ var wire = (options = {}) => {
|
|
|
7482
7348
|
}
|
|
7483
7349
|
return {
|
|
7484
7350
|
text,
|
|
7351
|
+
head,
|
|
7485
7352
|
insertAt
|
|
7486
7353
|
};
|
|
7487
7354
|
}
|
|
@@ -7490,7 +7357,7 @@ var wire = (options = {}) => {
|
|
|
7490
7357
|
if (!tr.docChanged) {
|
|
7491
7358
|
return tr;
|
|
7492
7359
|
}
|
|
7493
|
-
if (tr.annotation(
|
|
7360
|
+
if (tr.annotation(typewriterBypass) || tr.effects.some((effect) => effect.is(insertChunk))) {
|
|
7494
7361
|
return tr;
|
|
7495
7362
|
}
|
|
7496
7363
|
let appendedText = "";
|
|
@@ -7519,40 +7386,82 @@ var wire = (options = {}) => {
|
|
|
7519
7386
|
});
|
|
7520
7387
|
const drainPlugin = ViewPlugin21.fromClass(class {
|
|
7521
7388
|
view;
|
|
7522
|
-
|
|
7523
|
-
|
|
7389
|
+
_raf;
|
|
7390
|
+
_activeStreamTag = null;
|
|
7524
7391
|
constructor(view) {
|
|
7525
7392
|
this.view = view;
|
|
7526
|
-
this.#start();
|
|
7527
7393
|
}
|
|
7528
7394
|
update(update2) {
|
|
7529
|
-
const
|
|
7530
|
-
|
|
7531
|
-
|
|
7395
|
+
const { text, head } = update2.state.field(bufferField);
|
|
7396
|
+
const pending = text.length - head;
|
|
7397
|
+
if (pending === 0) {
|
|
7398
|
+
this._activeStreamTag = null;
|
|
7532
7399
|
}
|
|
7533
|
-
if (
|
|
7534
|
-
this
|
|
7400
|
+
if (pending > 0 && this._raf === void 0) {
|
|
7401
|
+
this._start();
|
|
7535
7402
|
}
|
|
7536
7403
|
}
|
|
7537
|
-
|
|
7538
|
-
|
|
7539
|
-
|
|
7540
|
-
|
|
7541
|
-
|
|
7542
|
-
|
|
7543
|
-
|
|
7544
|
-
|
|
7545
|
-
|
|
7404
|
+
_start() {
|
|
7405
|
+
queueMicrotask(() => {
|
|
7406
|
+
this.view.dispatch({
|
|
7407
|
+
effects: typewriterDrainingEffect.of(true),
|
|
7408
|
+
annotations: typewriterBypass.of(true)
|
|
7409
|
+
});
|
|
7410
|
+
});
|
|
7411
|
+
this._raf = requestAnimationFrame(this._tick);
|
|
7412
|
+
}
|
|
7413
|
+
_tick = () => {
|
|
7414
|
+
const { text, head, insertAt } = this.view.state.field(bufferField);
|
|
7415
|
+
const pending = text.length - head;
|
|
7416
|
+
if (pending === 0) {
|
|
7417
|
+
this.view.dispatch({
|
|
7418
|
+
effects: typewriterDrainingEffect.of(false),
|
|
7419
|
+
annotations: typewriterBypass.of(true)
|
|
7420
|
+
});
|
|
7421
|
+
this._raf = void 0;
|
|
7422
|
+
return;
|
|
7423
|
+
}
|
|
7424
|
+
if (pending > flushThreshold) {
|
|
7425
|
+
const chunk = text.slice(head);
|
|
7426
|
+
this._activeStreamTag = null;
|
|
7427
|
+
this.view.dispatch({
|
|
7428
|
+
changes: {
|
|
7429
|
+
from: insertAt,
|
|
7430
|
+
insert: chunk
|
|
7431
|
+
},
|
|
7432
|
+
effects: insertChunk.of({
|
|
7433
|
+
from: insertAt,
|
|
7434
|
+
text: chunk
|
|
7435
|
+
})
|
|
7436
|
+
});
|
|
7437
|
+
this._raf = requestAnimationFrame(this._tick);
|
|
7438
|
+
return;
|
|
7439
|
+
}
|
|
7440
|
+
const startTime = performance.now();
|
|
7441
|
+
let pos = head;
|
|
7442
|
+
let activeTag = this._activeStreamTag;
|
|
7443
|
+
let charsEmitted = 0;
|
|
7444
|
+
while (pos < text.length && performance.now() - startTime < frameBudgetMs) {
|
|
7445
|
+
const result = flushable(text, pos, streamingTags, activeTag);
|
|
7546
7446
|
if (result.count === 0) {
|
|
7547
|
-
|
|
7447
|
+
break;
|
|
7448
|
+
}
|
|
7449
|
+
if (charsEmitted > 0 && charsEmitted + result.count > charsPerFrame) {
|
|
7450
|
+
break;
|
|
7548
7451
|
}
|
|
7549
7452
|
if (result.enterTag) {
|
|
7550
|
-
|
|
7453
|
+
activeTag = result.enterTag;
|
|
7551
7454
|
}
|
|
7552
7455
|
if (result.exitTag) {
|
|
7553
|
-
|
|
7456
|
+
activeTag = null;
|
|
7554
7457
|
}
|
|
7555
|
-
|
|
7458
|
+
pos += result.count;
|
|
7459
|
+
charsEmitted += result.count;
|
|
7460
|
+
}
|
|
7461
|
+
const totalCount = pos - head;
|
|
7462
|
+
if (totalCount > 0) {
|
|
7463
|
+
const chunk = text.slice(head, head + totalCount);
|
|
7464
|
+
this._activeStreamTag = activeTag;
|
|
7556
7465
|
this.view.dispatch({
|
|
7557
7466
|
changes: {
|
|
7558
7467
|
from: insertAt,
|
|
@@ -7563,20 +7472,23 @@ var wire = (options = {}) => {
|
|
|
7563
7472
|
text: chunk
|
|
7564
7473
|
})
|
|
7565
7474
|
});
|
|
7566
|
-
}
|
|
7567
|
-
|
|
7475
|
+
}
|
|
7476
|
+
this._raf = requestAnimationFrame(this._tick);
|
|
7477
|
+
};
|
|
7568
7478
|
destroy() {
|
|
7569
|
-
|
|
7479
|
+
if (this._raf !== void 0) {
|
|
7480
|
+
cancelAnimationFrame(this._raf);
|
|
7481
|
+
}
|
|
7570
7482
|
}
|
|
7571
7483
|
});
|
|
7572
7484
|
return [
|
|
7573
7485
|
bufferField,
|
|
7574
7486
|
filter,
|
|
7575
7487
|
drainPlugin,
|
|
7576
|
-
options.cursor &&
|
|
7488
|
+
options.cursor && typewriterCursor(bufferField)
|
|
7577
7489
|
].filter(Boolean);
|
|
7578
7490
|
};
|
|
7579
|
-
var
|
|
7491
|
+
var typewriterCursor = (bufferField) => {
|
|
7580
7492
|
const hideCursor = StateEffect11.define();
|
|
7581
7493
|
const visibilityField = StateField13.define({
|
|
7582
7494
|
create: () => ({
|
|
@@ -7585,8 +7497,9 @@ var wireCursor = (bufferField) => {
|
|
|
7585
7497
|
lastNonWsAt: 0
|
|
7586
7498
|
}),
|
|
7587
7499
|
update: (value, tr) => {
|
|
7588
|
-
const { text, insertAt } = tr.state.field(bufferField);
|
|
7589
|
-
|
|
7500
|
+
const { text, head, insertAt } = tr.state.field(bufferField);
|
|
7501
|
+
const pending = text.length - head;
|
|
7502
|
+
if (pending > 0) {
|
|
7590
7503
|
let lastNonWsAt = tr.changes.mapPos(Math.min(value.lastNonWsAt, tr.startState.doc.length));
|
|
7591
7504
|
if (tr.docChanged) {
|
|
7592
7505
|
tr.changes.iterChanges((_fromA, _toA, _fromB, _toB, inserted) => {
|
|
@@ -7620,8 +7533,8 @@ var wireCursor = (bufferField) => {
|
|
|
7620
7533
|
if (!visible) {
|
|
7621
7534
|
return Decoration15.none;
|
|
7622
7535
|
}
|
|
7623
|
-
const { text } = tr.state.field(bufferField);
|
|
7624
|
-
const cursorAt = text.length >
|
|
7536
|
+
const { text, head } = tr.state.field(bufferField);
|
|
7537
|
+
const cursorAt = text.length > head ? insertAt : lastNonWsAt;
|
|
7625
7538
|
const pos = Math.min(cursorAt, tr.state.doc.length);
|
|
7626
7539
|
return Decoration15.set([
|
|
7627
7540
|
Decoration15.widget({
|
|
@@ -7634,27 +7547,28 @@ var wireCursor = (bufferField) => {
|
|
|
7634
7547
|
});
|
|
7635
7548
|
const timerPlugin = ViewPlugin21.fromClass(class {
|
|
7636
7549
|
view;
|
|
7637
|
-
|
|
7550
|
+
_timer;
|
|
7638
7551
|
constructor(view) {
|
|
7639
7552
|
this.view = view;
|
|
7640
7553
|
}
|
|
7641
7554
|
update(update2) {
|
|
7642
|
-
const { text } = update2.state.field(bufferField);
|
|
7555
|
+
const { text, head } = update2.state.field(bufferField);
|
|
7643
7556
|
const { visible } = update2.state.field(visibilityField);
|
|
7644
|
-
|
|
7645
|
-
|
|
7646
|
-
this
|
|
7647
|
-
|
|
7648
|
-
|
|
7557
|
+
const pending = text.length - head;
|
|
7558
|
+
if (pending > 0) {
|
|
7559
|
+
clearTimeout(this._timer);
|
|
7560
|
+
this._timer = void 0;
|
|
7561
|
+
} else if (visible && this._timer === void 0) {
|
|
7562
|
+
this._timer = setTimeout(() => {
|
|
7649
7563
|
this.view.dispatch({
|
|
7650
7564
|
effects: hideCursor.of(null)
|
|
7651
7565
|
});
|
|
7652
|
-
this
|
|
7566
|
+
this._timer = void 0;
|
|
7653
7567
|
}, CURSOR_LINGER);
|
|
7654
7568
|
}
|
|
7655
7569
|
}
|
|
7656
7570
|
destroy() {
|
|
7657
|
-
clearTimeout(this
|
|
7571
|
+
clearTimeout(this._timer);
|
|
7658
7572
|
}
|
|
7659
7573
|
});
|
|
7660
7574
|
return [
|
|
@@ -7663,7 +7577,12 @@ var wireCursor = (bufferField) => {
|
|
|
7663
7577
|
timerPlugin
|
|
7664
7578
|
];
|
|
7665
7579
|
};
|
|
7666
|
-
var CursorWidget = class extends WidgetType9 {
|
|
7580
|
+
var CursorWidget = class _CursorWidget extends WidgetType9 {
|
|
7581
|
+
// All instances are interchangeable — let CM reuse the existing DOM across drips so
|
|
7582
|
+
// the blink animation isn't restarted on every transaction.
|
|
7583
|
+
eq(other) {
|
|
7584
|
+
return other instanceof _CursorWidget;
|
|
7585
|
+
}
|
|
7667
7586
|
toDOM() {
|
|
7668
7587
|
const inner = Domino3.of("span").text("\u2217").style({
|
|
7669
7588
|
animation: "blink 1s infinite",
|
|
@@ -7675,35 +7594,37 @@ var CursorWidget = class extends WidgetType9 {
|
|
|
7675
7594
|
}
|
|
7676
7595
|
};
|
|
7677
7596
|
var OPENING_TAG_NAME = /^<([a-zA-Z][\w-]*)/;
|
|
7597
|
+
var TAG_NAME_PROBE = 64;
|
|
7678
7598
|
var escapeRegExpSource2 = (value) => value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
7679
|
-
var flushable = (buffer, streamingTags, activeStreamTag) => {
|
|
7680
|
-
if (buffer.length
|
|
7599
|
+
var flushable = (buffer, start, streamingTags, activeStreamTag) => {
|
|
7600
|
+
if (start >= buffer.length) {
|
|
7681
7601
|
return {
|
|
7682
7602
|
count: 0
|
|
7683
7603
|
};
|
|
7684
7604
|
}
|
|
7685
7605
|
if (activeStreamTag) {
|
|
7686
7606
|
const closeTag = `</${activeStreamTag}>`;
|
|
7687
|
-
if (buffer.startsWith(closeTag)) {
|
|
7607
|
+
if (buffer.startsWith(closeTag, start)) {
|
|
7688
7608
|
return {
|
|
7689
7609
|
count: closeTag.length,
|
|
7690
7610
|
exitTag: true
|
|
7691
7611
|
};
|
|
7692
7612
|
}
|
|
7693
|
-
if (buffer[
|
|
7613
|
+
if (buffer[start] === "<") {
|
|
7694
7614
|
return {
|
|
7695
|
-
count: xmlElementLength(buffer)
|
|
7615
|
+
count: xmlElementLength(buffer, start)
|
|
7696
7616
|
};
|
|
7697
7617
|
}
|
|
7698
7618
|
return {
|
|
7699
7619
|
count: 1
|
|
7700
7620
|
};
|
|
7701
7621
|
}
|
|
7702
|
-
const ch = buffer[
|
|
7622
|
+
const ch = buffer[start];
|
|
7703
7623
|
if (ch === "<") {
|
|
7704
|
-
const
|
|
7624
|
+
const probe = buffer.slice(start, start + TAG_NAME_PROBE);
|
|
7625
|
+
const nameMatch = probe.match(OPENING_TAG_NAME);
|
|
7705
7626
|
if (nameMatch && streamingTags.has(nameMatch[1])) {
|
|
7706
|
-
const close = buffer.indexOf(">");
|
|
7627
|
+
const close = buffer.indexOf(">", start);
|
|
7707
7628
|
if (close === -1) {
|
|
7708
7629
|
return {
|
|
7709
7630
|
count: 0
|
|
@@ -7711,62 +7632,64 @@ var flushable = (buffer, streamingTags, activeStreamTag) => {
|
|
|
7711
7632
|
}
|
|
7712
7633
|
if (buffer[close - 1] === "/") {
|
|
7713
7634
|
return {
|
|
7714
|
-
count: close + 1
|
|
7635
|
+
count: close + 1 - start
|
|
7715
7636
|
};
|
|
7716
7637
|
}
|
|
7717
7638
|
return {
|
|
7718
|
-
count: close + 1,
|
|
7639
|
+
count: close + 1 - start,
|
|
7719
7640
|
enterTag: nameMatch[1]
|
|
7720
7641
|
};
|
|
7721
7642
|
}
|
|
7722
7643
|
return {
|
|
7723
|
-
count: xmlElementLength(buffer)
|
|
7644
|
+
count: xmlElementLength(buffer, start)
|
|
7724
7645
|
};
|
|
7725
7646
|
}
|
|
7726
|
-
if (ch === "!" && buffer.length > 1 && buffer[1] === "[") {
|
|
7647
|
+
if (ch === "!" && buffer.length > start + 1 && buffer[start + 1] === "[") {
|
|
7727
7648
|
return {
|
|
7728
|
-
count: linkLength(buffer, 1)
|
|
7649
|
+
count: linkLength(buffer, start, start + 1)
|
|
7729
7650
|
};
|
|
7730
7651
|
}
|
|
7731
7652
|
if (ch === "[") {
|
|
7732
7653
|
return {
|
|
7733
|
-
count: linkLength(buffer,
|
|
7654
|
+
count: linkLength(buffer, start, start)
|
|
7734
7655
|
};
|
|
7735
7656
|
}
|
|
7736
7657
|
return {
|
|
7737
7658
|
count: 1
|
|
7738
7659
|
};
|
|
7739
7660
|
};
|
|
7740
|
-
var xmlElementLength = (buffer) => {
|
|
7741
|
-
const close = buffer.indexOf(">");
|
|
7661
|
+
var xmlElementLength = (buffer, start = 0) => {
|
|
7662
|
+
const close = buffer.indexOf(">", start);
|
|
7742
7663
|
if (close === -1) {
|
|
7743
7664
|
return 0;
|
|
7744
7665
|
}
|
|
7745
7666
|
if (buffer[close - 1] === "/") {
|
|
7746
|
-
return close + 1;
|
|
7667
|
+
return close + 1 - start;
|
|
7747
7668
|
}
|
|
7748
|
-
if (buffer[1] === "/") {
|
|
7749
|
-
return close + 1;
|
|
7669
|
+
if (buffer[start + 1] === "/") {
|
|
7670
|
+
return close + 1 - start;
|
|
7750
7671
|
}
|
|
7751
|
-
const
|
|
7672
|
+
const probe = buffer.slice(start, start + TAG_NAME_PROBE);
|
|
7673
|
+
const nameMatch = probe.match(OPENING_TAG_NAME);
|
|
7752
7674
|
if (!nameMatch) {
|
|
7753
7675
|
return 1;
|
|
7754
7676
|
}
|
|
7755
7677
|
const tagName = nameMatch[1];
|
|
7756
7678
|
let depth = 0;
|
|
7757
7679
|
const tagPattern = new RegExp(`<(/?)${escapeRegExpSource2(tagName)}(\\s[^>]*)?>`, "g");
|
|
7680
|
+
tagPattern.lastIndex = start;
|
|
7758
7681
|
let match;
|
|
7759
7682
|
while ((match = tagPattern.exec(buffer)) !== null) {
|
|
7760
7683
|
const isSelfClosing = match[0].endsWith("/>");
|
|
7761
7684
|
const isClosing = match[1] === "/";
|
|
7762
7685
|
if (isSelfClosing) {
|
|
7763
7686
|
if (depth === 0) {
|
|
7764
|
-
return match.index + match[0].length;
|
|
7687
|
+
return match.index + match[0].length - start;
|
|
7765
7688
|
}
|
|
7766
7689
|
} else if (isClosing) {
|
|
7767
7690
|
depth--;
|
|
7768
7691
|
if (depth === 0) {
|
|
7769
|
-
return match.index + match[0].length;
|
|
7692
|
+
return match.index + match[0].length - start;
|
|
7770
7693
|
}
|
|
7771
7694
|
} else {
|
|
7772
7695
|
depth++;
|
|
@@ -7774,8 +7697,8 @@ var xmlElementLength = (buffer) => {
|
|
|
7774
7697
|
}
|
|
7775
7698
|
return 0;
|
|
7776
7699
|
};
|
|
7777
|
-
var linkLength = (buffer,
|
|
7778
|
-
const bracketClose = buffer.indexOf("]",
|
|
7700
|
+
var linkLength = (buffer, start, bracketAt) => {
|
|
7701
|
+
const bracketClose = buffer.indexOf("]", bracketAt + 1);
|
|
7779
7702
|
if (bracketClose === -1) {
|
|
7780
7703
|
return 0;
|
|
7781
7704
|
}
|
|
@@ -7789,13 +7712,179 @@ var linkLength = (buffer, offset) => {
|
|
|
7789
7712
|
if (parenClose === -1) {
|
|
7790
7713
|
return 0;
|
|
7791
7714
|
}
|
|
7792
|
-
return parenClose + 1;
|
|
7715
|
+
return parenClose + 1 - start;
|
|
7716
|
+
};
|
|
7717
|
+
|
|
7718
|
+
// src/extensions/tags/xml-block-decoration.ts
|
|
7719
|
+
import { xmlLanguage as xmlLanguage2 } from "@codemirror/lang-xml";
|
|
7720
|
+
import { Decoration as Decoration16, ViewPlugin as ViewPlugin22 } from "@codemirror/view";
|
|
7721
|
+
var xmlBlockDecoration = ({ tag, lineClass, contentClass, hideTags }) => {
|
|
7722
|
+
const lineDecoration = lineClass ? Decoration16.line({
|
|
7723
|
+
class: lineClass
|
|
7724
|
+
}) : void 0;
|
|
7725
|
+
const contentDecoration = contentClass ? Decoration16.mark({
|
|
7726
|
+
class: contentClass
|
|
7727
|
+
}) : void 0;
|
|
7728
|
+
const hideDecoration = hideTags ? Decoration16.replace({}) : void 0;
|
|
7729
|
+
const buildDecorations5 = (view) => {
|
|
7730
|
+
const text = view.state.sliceDoc(0, view.state.doc.length);
|
|
7731
|
+
if (!text.includes(`<${tag}`)) {
|
|
7732
|
+
return Decoration16.none;
|
|
7733
|
+
}
|
|
7734
|
+
const tree = xmlLanguage2.parser.parse(text);
|
|
7735
|
+
const ranges = [];
|
|
7736
|
+
tree.iterate({
|
|
7737
|
+
enter: (node) => {
|
|
7738
|
+
if (node.type.name !== "Element") {
|
|
7739
|
+
return;
|
|
7740
|
+
}
|
|
7741
|
+
const openTag = node.node.getChild("OpenTag");
|
|
7742
|
+
const closeTag = node.node.getChild("CloseTag") ?? node.node.getChild("MismatchedCloseTag");
|
|
7743
|
+
const tagNameNode = openTag?.getChild("TagName");
|
|
7744
|
+
if (!openTag || !tagNameNode) {
|
|
7745
|
+
return;
|
|
7746
|
+
}
|
|
7747
|
+
if (text.slice(tagNameNode.from, tagNameNode.to) !== tag) {
|
|
7748
|
+
return;
|
|
7749
|
+
}
|
|
7750
|
+
const contentFrom = openTag.to;
|
|
7751
|
+
const contentTo = closeTag?.from ?? node.node.to;
|
|
7752
|
+
if (hideDecoration) {
|
|
7753
|
+
ranges.push(hideDecoration.range(openTag.from, openTag.to));
|
|
7754
|
+
if (closeTag) {
|
|
7755
|
+
ranges.push(hideDecoration.range(closeTag.from, closeTag.to));
|
|
7756
|
+
}
|
|
7757
|
+
}
|
|
7758
|
+
if (contentDecoration && contentFrom < contentTo) {
|
|
7759
|
+
ranges.push(contentDecoration.range(contentFrom, contentTo));
|
|
7760
|
+
}
|
|
7761
|
+
if (lineDecoration && contentFrom <= view.state.doc.length) {
|
|
7762
|
+
let pos = contentFrom;
|
|
7763
|
+
while (pos <= contentTo && pos <= view.state.doc.length) {
|
|
7764
|
+
const line = view.state.doc.lineAt(pos);
|
|
7765
|
+
ranges.push(lineDecoration.range(line.from));
|
|
7766
|
+
if (line.to >= contentTo) {
|
|
7767
|
+
break;
|
|
7768
|
+
}
|
|
7769
|
+
pos = line.to + 1;
|
|
7770
|
+
}
|
|
7771
|
+
}
|
|
7772
|
+
}
|
|
7773
|
+
});
|
|
7774
|
+
return Decoration16.set(ranges, true);
|
|
7775
|
+
};
|
|
7776
|
+
return ViewPlugin22.fromClass(class {
|
|
7777
|
+
decorations;
|
|
7778
|
+
constructor(view) {
|
|
7779
|
+
this.decorations = buildDecorations5(view);
|
|
7780
|
+
}
|
|
7781
|
+
update(update2) {
|
|
7782
|
+
if (update2.docChanged) {
|
|
7783
|
+
this.decorations = buildDecorations5(update2.view);
|
|
7784
|
+
}
|
|
7785
|
+
}
|
|
7786
|
+
}, {
|
|
7787
|
+
decorations: (instance) => instance.decorations
|
|
7788
|
+
});
|
|
7789
|
+
};
|
|
7790
|
+
|
|
7791
|
+
// src/extensions/tags/xml-formatting.ts
|
|
7792
|
+
import { xmlLanguage as xmlLanguage3 } from "@codemirror/lang-xml";
|
|
7793
|
+
import { Decoration as Decoration17, EditorView as EditorView31, ViewPlugin as ViewPlugin23 } from "@codemirror/view";
|
|
7794
|
+
var XML_TAG_NODES = /* @__PURE__ */ new Set([
|
|
7795
|
+
"OpenTag",
|
|
7796
|
+
"CloseTag",
|
|
7797
|
+
"SelfClosingTag",
|
|
7798
|
+
"MismatchedCloseTag"
|
|
7799
|
+
]);
|
|
7800
|
+
var xmlElementMark = Decoration17.mark({
|
|
7801
|
+
class: "cm-xml-element"
|
|
7802
|
+
});
|
|
7803
|
+
var xmlTagMark = Decoration17.mark({
|
|
7804
|
+
class: "cm-xml-tag"
|
|
7805
|
+
});
|
|
7806
|
+
var xmlContentMark = Decoration17.mark({
|
|
7807
|
+
class: "cm-xml-content"
|
|
7808
|
+
});
|
|
7809
|
+
var xmlFormatting = ({ skip } = {}) => {
|
|
7810
|
+
const skipSet = skip && skip.length > 0 ? new Set(skip) : void 0;
|
|
7811
|
+
const buildDecorations5 = (view) => {
|
|
7812
|
+
const text = view.state.sliceDoc(0, view.state.doc.length);
|
|
7813
|
+
if (!text.includes("<")) {
|
|
7814
|
+
return Decoration17.none;
|
|
7815
|
+
}
|
|
7816
|
+
const tagNameAt = (node) => text.slice(node.from, node.to);
|
|
7817
|
+
const tree = xmlLanguage3.parser.parse(text);
|
|
7818
|
+
const ranges = [];
|
|
7819
|
+
tree.iterate({
|
|
7820
|
+
enter: (node) => {
|
|
7821
|
+
const name = node.type.name;
|
|
7822
|
+
if (name === "SelfClosingTag" && node.from < node.to) {
|
|
7823
|
+
if (skipSet) {
|
|
7824
|
+
const tagNameNode = node.node.getChild("TagName");
|
|
7825
|
+
if (tagNameNode && skipSet.has(tagNameAt(tagNameNode))) {
|
|
7826
|
+
return false;
|
|
7827
|
+
}
|
|
7828
|
+
}
|
|
7829
|
+
ranges.push(xmlElementMark.range(node.from, node.to));
|
|
7830
|
+
ranges.push(xmlTagMark.range(node.from, node.to));
|
|
7831
|
+
return;
|
|
7832
|
+
}
|
|
7833
|
+
if (XML_TAG_NODES.has(name) && node.from < node.to) {
|
|
7834
|
+
ranges.push(xmlTagMark.range(node.from, node.to));
|
|
7835
|
+
return;
|
|
7836
|
+
}
|
|
7837
|
+
if (name === "Element" && node.from < node.to) {
|
|
7838
|
+
const openTag = node.node.getChild("OpenTag");
|
|
7839
|
+
if (openTag && skipSet) {
|
|
7840
|
+
const tagNameNode = openTag.getChild("TagName");
|
|
7841
|
+
if (tagNameNode && skipSet.has(tagNameAt(tagNameNode))) {
|
|
7842
|
+
return false;
|
|
7843
|
+
}
|
|
7844
|
+
}
|
|
7845
|
+
const closeTag = node.node.getChild("CloseTag") ?? node.node.getChild("MismatchedCloseTag");
|
|
7846
|
+
ranges.push(xmlElementMark.range(node.from, node.to));
|
|
7847
|
+
if (openTag && closeTag && openTag.to < closeTag.from) {
|
|
7848
|
+
ranges.push(xmlContentMark.range(openTag.to, closeTag.from));
|
|
7849
|
+
}
|
|
7850
|
+
}
|
|
7851
|
+
}
|
|
7852
|
+
});
|
|
7853
|
+
return Decoration17.set(ranges, true);
|
|
7854
|
+
};
|
|
7855
|
+
return [
|
|
7856
|
+
ViewPlugin23.fromClass(class {
|
|
7857
|
+
decorations;
|
|
7858
|
+
constructor(view) {
|
|
7859
|
+
this.decorations = buildDecorations5(view);
|
|
7860
|
+
}
|
|
7861
|
+
update(update2) {
|
|
7862
|
+
if (update2.docChanged) {
|
|
7863
|
+
this.decorations = buildDecorations5(update2.view);
|
|
7864
|
+
}
|
|
7865
|
+
}
|
|
7866
|
+
}, {
|
|
7867
|
+
decorations: (instance) => instance.decorations
|
|
7868
|
+
}),
|
|
7869
|
+
EditorView31.baseTheme({
|
|
7870
|
+
".cm-xml-element": {
|
|
7871
|
+
backgroundColor: "var(--color-active-surface)",
|
|
7872
|
+
borderRadius: "0.25rem",
|
|
7873
|
+
padding: "0.25rem"
|
|
7874
|
+
},
|
|
7875
|
+
".cm-xml-tag": {
|
|
7876
|
+
color: "var(--color-blue-500)",
|
|
7877
|
+
fontFamily: "var(--font-mono)"
|
|
7878
|
+
},
|
|
7879
|
+
".cm-xml-content": {}
|
|
7880
|
+
})
|
|
7881
|
+
];
|
|
7793
7882
|
};
|
|
7794
7883
|
|
|
7795
7884
|
// src/extensions/tags/xml-tags.ts
|
|
7796
7885
|
import { syntaxTree as syntaxTree11 } from "@codemirror/language";
|
|
7797
7886
|
import { Prec as Prec7, RangeSetBuilder as RangeSetBuilder7, StateEffect as StateEffect12, StateField as StateField14 } from "@codemirror/state";
|
|
7798
|
-
import { Decoration as
|
|
7887
|
+
import { Decoration as Decoration18, EditorView as EditorView32, ViewPlugin as ViewPlugin24, WidgetType as WidgetType10, keymap as keymap14 } from "@codemirror/view";
|
|
7799
7888
|
import { invariant as invariant7 } from "@dxos/invariant";
|
|
7800
7889
|
import { log as log11 } from "@dxos/log";
|
|
7801
7890
|
import { Domino as Domino4 } from "@dxos/ui";
|
|
@@ -7804,15 +7893,7 @@ import { Domino as Domino4 } from "@dxos/ui";
|
|
|
7804
7893
|
import { invariant as invariant6 } from "@dxos/invariant";
|
|
7805
7894
|
var __dxlog_file16 = "/__w/dxos/dxos/packages/ui/ui-editor/src/extensions/tags/xml-util.ts";
|
|
7806
7895
|
var nodeToJson = (state, node) => {
|
|
7807
|
-
invariant6(node.type.name === "Element", "Node is not an Element", {
|
|
7808
|
-
F: __dxlog_file16,
|
|
7809
|
-
L: 18,
|
|
7810
|
-
S: void 0,
|
|
7811
|
-
A: [
|
|
7812
|
-
"node.type.name === 'Element'",
|
|
7813
|
-
"'Node is not an Element'"
|
|
7814
|
-
]
|
|
7815
|
-
});
|
|
7896
|
+
invariant6(node.type.name === "Element", "Node is not an Element", { "~LogMeta": "~LogMeta", F: __dxlog_file16, L: 8, S: void 0, A: ["node.type.name === 'Element'", "'Node is not an Element'"] });
|
|
7816
7897
|
const openTag = node.node.getChild("OpenTag") || node.node.getChild("SelfClosingTag");
|
|
7817
7898
|
if (openTag) {
|
|
7818
7899
|
const tagName = openTag.getChild("TagName");
|
|
@@ -7844,13 +7925,23 @@ var nodeToJson = (state, node) => {
|
|
|
7844
7925
|
if (node.type.name === "Element" && openTag.type.name !== "SelfClosingTag") {
|
|
7845
7926
|
const children = [];
|
|
7846
7927
|
let child = node.node.firstChild;
|
|
7928
|
+
const appendText = (raw) => {
|
|
7929
|
+
if (raw.length === 0) {
|
|
7930
|
+
return;
|
|
7931
|
+
}
|
|
7932
|
+
const last = children[children.length - 1];
|
|
7933
|
+
if (typeof last === "string") {
|
|
7934
|
+
children[children.length - 1] = last + raw;
|
|
7935
|
+
} else {
|
|
7936
|
+
children.push(raw);
|
|
7937
|
+
}
|
|
7938
|
+
};
|
|
7847
7939
|
while (child) {
|
|
7848
7940
|
if (child.type.name !== "OpenTag" && child.type.name !== "CloseTag") {
|
|
7849
7941
|
if (child.type.name === "Text") {
|
|
7850
|
-
|
|
7851
|
-
|
|
7852
|
-
|
|
7853
|
-
}
|
|
7942
|
+
appendText(state.doc.sliceString(child.from, child.to));
|
|
7943
|
+
} else if (child.type.name === "EntityReference" || child.type.name === "CharacterReference") {
|
|
7944
|
+
appendText(decodeXmlEntity(state.doc.sliceString(child.from, child.to)));
|
|
7854
7945
|
} else if (child.type.name === "Element") {
|
|
7855
7946
|
const data = nodeToJson(state, child);
|
|
7856
7947
|
if (data) {
|
|
@@ -7860,13 +7951,48 @@ var nodeToJson = (state, node) => {
|
|
|
7860
7951
|
}
|
|
7861
7952
|
child = child.nextSibling;
|
|
7862
7953
|
}
|
|
7954
|
+
if (children.length > 0 && typeof children[0] === "string") {
|
|
7955
|
+
children[0] = children[0].trimStart();
|
|
7956
|
+
}
|
|
7863
7957
|
if (children.length > 0) {
|
|
7864
|
-
|
|
7958
|
+
const lastIndex = children.length - 1;
|
|
7959
|
+
const last = children[lastIndex];
|
|
7960
|
+
if (typeof last === "string") {
|
|
7961
|
+
children[lastIndex] = last.trimEnd();
|
|
7962
|
+
}
|
|
7963
|
+
}
|
|
7964
|
+
const trimmed = children.filter((value) => typeof value !== "string" || value.length > 0);
|
|
7965
|
+
if (trimmed.length > 0) {
|
|
7966
|
+
tag.children = trimmed;
|
|
7865
7967
|
}
|
|
7866
7968
|
}
|
|
7867
7969
|
return tag;
|
|
7868
7970
|
}
|
|
7869
7971
|
};
|
|
7972
|
+
var XML_NAMED_ENTITIES = {
|
|
7973
|
+
"<": "<",
|
|
7974
|
+
">": ">",
|
|
7975
|
+
"&": "&",
|
|
7976
|
+
""": '"',
|
|
7977
|
+
"'": "'"
|
|
7978
|
+
};
|
|
7979
|
+
var decodeXmlEntity = (raw) => {
|
|
7980
|
+
const named = XML_NAMED_ENTITIES[raw];
|
|
7981
|
+
if (named !== void 0) {
|
|
7982
|
+
return named;
|
|
7983
|
+
}
|
|
7984
|
+
const numeric = /^&#(x?)([0-9a-fA-F]+);$/.exec(raw);
|
|
7985
|
+
if (numeric) {
|
|
7986
|
+
const code = parseInt(numeric[2], numeric[1] ? 16 : 10);
|
|
7987
|
+
if (Number.isFinite(code)) {
|
|
7988
|
+
try {
|
|
7989
|
+
return String.fromCodePoint(code);
|
|
7990
|
+
} catch {
|
|
7991
|
+
}
|
|
7992
|
+
}
|
|
7993
|
+
}
|
|
7994
|
+
return raw;
|
|
7995
|
+
};
|
|
7870
7996
|
|
|
7871
7997
|
// src/extensions/tags/xml-tags.ts
|
|
7872
7998
|
var __dxlog_file17 = "/__w/dxos/dxos/packages/ui/ui-editor/src/extensions/tags/xml-tags.ts";
|
|
@@ -7904,12 +8030,7 @@ var widgetStateMapStateField = StateField14.define({
|
|
|
7904
8030
|
log11("widget updated", {
|
|
7905
8031
|
id,
|
|
7906
8032
|
value
|
|
7907
|
-
}, {
|
|
7908
|
-
F: __dxlog_file17,
|
|
7909
|
-
L: 184,
|
|
7910
|
-
S: void 0,
|
|
7911
|
-
C: (f, a) => f(...a)
|
|
7912
|
-
});
|
|
8033
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file17, L: 59, S: void 0 });
|
|
7913
8034
|
const state = typeof value === "function" ? value(map[id]) : value;
|
|
7914
8035
|
return {
|
|
7915
8036
|
...map,
|
|
@@ -7939,12 +8060,7 @@ var createWidgetMap = (setWidgets) => {
|
|
|
7939
8060
|
log11("widget mounted", {
|
|
7940
8061
|
id: state.id,
|
|
7941
8062
|
tag: state.props._tag
|
|
7942
|
-
}, {
|
|
7943
|
-
F: __dxlog_file17,
|
|
7944
|
-
L: 238,
|
|
7945
|
-
S: void 0,
|
|
7946
|
-
C: (f, a) => f(...a)
|
|
7947
|
-
});
|
|
8063
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file17, L: 101, S: void 0 });
|
|
7948
8064
|
widgets.set(state.id, state);
|
|
7949
8065
|
setWidgets?.([
|
|
7950
8066
|
...widgets.values()
|
|
@@ -7955,12 +8071,7 @@ var createWidgetMap = (setWidgets) => {
|
|
|
7955
8071
|
log11("widget unmounted", {
|
|
7956
8072
|
id,
|
|
7957
8073
|
tag: state?.props._tag
|
|
7958
|
-
}, {
|
|
7959
|
-
F: __dxlog_file17,
|
|
7960
|
-
L: 244,
|
|
7961
|
-
S: void 0,
|
|
7962
|
-
C: (f, a) => f(...a)
|
|
7963
|
-
});
|
|
8074
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file17, L: 112, S: void 0 });
|
|
7964
8075
|
widgets.delete(id);
|
|
7965
8076
|
setWidgets?.([
|
|
7966
8077
|
...widgets.values()
|
|
@@ -7969,7 +8080,7 @@ var createWidgetMap = (setWidgets) => {
|
|
|
7969
8080
|
};
|
|
7970
8081
|
return notifier;
|
|
7971
8082
|
};
|
|
7972
|
-
var keyHandlers =
|
|
8083
|
+
var keyHandlers = keymap14.of([
|
|
7973
8084
|
{
|
|
7974
8085
|
key: "Mod-ArrowUp",
|
|
7975
8086
|
run: (view) => {
|
|
@@ -7990,7 +8101,7 @@ var keyHandlers = keymap13.of([
|
|
|
7990
8101
|
}
|
|
7991
8102
|
]);
|
|
7992
8103
|
var createNavigationEffectPlugin = (widgetDecorationsField, bookmarks2) => {
|
|
7993
|
-
return
|
|
8104
|
+
return EditorView32.updateListener.of((update2) => {
|
|
7994
8105
|
update2.transactions.forEach((transaction) => {
|
|
7995
8106
|
for (const effect of transaction.effects) {
|
|
7996
8107
|
if (effect.is(navigatePreviousEffect)) {
|
|
@@ -8075,7 +8186,7 @@ var createNavigationEffectPlugin = (widgetDecorationsField, bookmarks2) => {
|
|
|
8075
8186
|
});
|
|
8076
8187
|
});
|
|
8077
8188
|
};
|
|
8078
|
-
var createWidgetUpdatePlugin = (widgetDecorationsField, notifier) =>
|
|
8189
|
+
var createWidgetUpdatePlugin = (widgetDecorationsField, notifier) => ViewPlugin24.fromClass(class {
|
|
8079
8190
|
update(update2) {
|
|
8080
8191
|
const widgetStateMap = update2.state.field(widgetStateMapStateField);
|
|
8081
8192
|
const { decorations: decorations2 } = update2.state.field(widgetDecorationsField);
|
|
@@ -8120,7 +8231,7 @@ var createWidgetDecorationsField = (registry = {}, notifier) => StateField14.def
|
|
|
8120
8231
|
}
|
|
8121
8232
|
return {
|
|
8122
8233
|
from: 0,
|
|
8123
|
-
decorations:
|
|
8234
|
+
decorations: Decoration18.none
|
|
8124
8235
|
};
|
|
8125
8236
|
}
|
|
8126
8237
|
}
|
|
@@ -8131,12 +8242,7 @@ var createWidgetDecorationsField = (registry = {}, notifier) => StateField14.def
|
|
|
8131
8242
|
log11("document reset", {
|
|
8132
8243
|
from,
|
|
8133
8244
|
to: state.doc.length
|
|
8134
|
-
}, {
|
|
8135
|
-
F: __dxlog_file17,
|
|
8136
|
-
L: 406,
|
|
8137
|
-
S: void 0,
|
|
8138
|
-
C: (f, a) => f(...a)
|
|
8139
|
-
});
|
|
8245
|
+
}, { "~LogMeta": "~LogMeta", F: __dxlog_file17, L: 298, S: void 0 });
|
|
8140
8246
|
return buildDecorations4(state, {
|
|
8141
8247
|
from: 0,
|
|
8142
8248
|
to: state.doc.length
|
|
@@ -8165,8 +8271,8 @@ var createWidgetDecorationsField = (registry = {}, notifier) => StateField14.def
|
|
|
8165
8271
|
};
|
|
8166
8272
|
},
|
|
8167
8273
|
provide: (field) => [
|
|
8168
|
-
|
|
8169
|
-
|
|
8274
|
+
EditorView32.decorations.from(field, (v) => v.decorations),
|
|
8275
|
+
EditorView32.atomicRanges.of((view) => view.state.field(field).decorations || Decoration18.none)
|
|
8170
8276
|
]
|
|
8171
8277
|
});
|
|
8172
8278
|
var buildDecorations4 = (state, range, registry, notifier) => {
|
|
@@ -8177,7 +8283,7 @@ var buildDecorations4 = (state, range, registry, notifier) => {
|
|
|
8177
8283
|
if (!tree || tree.type.name === "Program" && tree.length === 0) {
|
|
8178
8284
|
return {
|
|
8179
8285
|
from: range.from,
|
|
8180
|
-
decorations:
|
|
8286
|
+
decorations: Decoration18.none
|
|
8181
8287
|
};
|
|
8182
8288
|
}
|
|
8183
8289
|
let last = range.from;
|
|
@@ -8213,7 +8319,7 @@ var buildDecorations4 = (state, range, registry, notifier) => {
|
|
|
8213
8319
|
};
|
|
8214
8320
|
const widget = factory ? factory(props) ?? void 0 : Component ? new PlaceholderWidget2(widgetId, Component, props, notifier) : void 0;
|
|
8215
8321
|
if (widget) {
|
|
8216
|
-
builder.add(nodeRange.from, nodeRange.to,
|
|
8322
|
+
builder.add(nodeRange.from, nodeRange.to, Decoration18.replace({
|
|
8217
8323
|
widget,
|
|
8218
8324
|
block,
|
|
8219
8325
|
atomic: true,
|
|
@@ -8225,12 +8331,7 @@ var buildDecorations4 = (state, range, registry, notifier) => {
|
|
|
8225
8331
|
}
|
|
8226
8332
|
}
|
|
8227
8333
|
} catch (err) {
|
|
8228
|
-
log11.catch(err, void 0, {
|
|
8229
|
-
F: __dxlog_file17,
|
|
8230
|
-
L: 515,
|
|
8231
|
-
S: void 0,
|
|
8232
|
-
C: (f, a) => f(...a)
|
|
8233
|
-
});
|
|
8334
|
+
log11.catch(err, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file17, L: 401, S: void 0 });
|
|
8234
8335
|
}
|
|
8235
8336
|
return false;
|
|
8236
8337
|
}
|
|
@@ -8277,7 +8378,7 @@ var buildDecorations4 = (state, range, registry, notifier) => {
|
|
|
8277
8378
|
};
|
|
8278
8379
|
const widget = def.factory ? def.factory(mergedProps) ?? void 0 : def.Component ? new PlaceholderWidget2(widgetId, def.Component, mergedProps, notifier, true) : void 0;
|
|
8279
8380
|
if (widget) {
|
|
8280
|
-
builder.add(absoluteFrom, range.to,
|
|
8381
|
+
builder.add(absoluteFrom, range.to, Decoration18.replace({
|
|
8281
8382
|
widget,
|
|
8282
8383
|
block: def.block,
|
|
8283
8384
|
atomic: true,
|
|
@@ -8309,15 +8410,7 @@ var PlaceholderWidget2 = class extends WidgetType10 {
|
|
|
8309
8410
|
#view;
|
|
8310
8411
|
constructor(id, Component, props, notifier, streaming) {
|
|
8311
8412
|
super(), this.id = id, this.Component = Component, this.props = props, this.notifier = notifier, this.streaming = streaming;
|
|
8312
|
-
invariant7(id, void 0, {
|
|
8313
|
-
F: __dxlog_file17,
|
|
8314
|
-
L: 618,
|
|
8315
|
-
S: this,
|
|
8316
|
-
A: [
|
|
8317
|
-
"id",
|
|
8318
|
-
""
|
|
8319
|
-
]
|
|
8320
|
-
});
|
|
8413
|
+
invariant7(id, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file17, L: 488, S: this, A: ["id", ""] });
|
|
8321
8414
|
}
|
|
8322
8415
|
get root() {
|
|
8323
8416
|
return this.#root;
|
|
@@ -8364,71 +8457,10 @@ var PlaceholderWidget2 = class extends WidgetType10 {
|
|
|
8364
8457
|
this.#view = void 0;
|
|
8365
8458
|
}
|
|
8366
8459
|
};
|
|
8367
|
-
|
|
8368
|
-
// src/extensions/typewriter.ts
|
|
8369
|
-
import { keymap as keymap14 } from "@codemirror/view";
|
|
8370
|
-
var defaultItems = [
|
|
8371
|
-
"hello world!",
|
|
8372
|
-
"this is a test.",
|
|
8373
|
-
"this is [DXOS](https://dxos.org)"
|
|
8374
|
-
];
|
|
8375
|
-
var typewriter = ({ delay = 75, items = defaultItems } = {}) => {
|
|
8376
|
-
let t;
|
|
8377
|
-
let idx = 0;
|
|
8378
|
-
return [
|
|
8379
|
-
keymap14.of([
|
|
8380
|
-
{
|
|
8381
|
-
// Reset.
|
|
8382
|
-
key: "alt-meta-'",
|
|
8383
|
-
run: () => {
|
|
8384
|
-
clearTimeout(t);
|
|
8385
|
-
idx = 0;
|
|
8386
|
-
return true;
|
|
8387
|
-
}
|
|
8388
|
-
},
|
|
8389
|
-
{
|
|
8390
|
-
// Next prompt.
|
|
8391
|
-
// TODO(burdon): Press 1-9 to select prompt?
|
|
8392
|
-
key: "Shift-Meta-'",
|
|
8393
|
-
run: (view) => {
|
|
8394
|
-
clearTimeout(t);
|
|
8395
|
-
const text = items[idx++];
|
|
8396
|
-
if (idx === items?.length) {
|
|
8397
|
-
idx = 0;
|
|
8398
|
-
}
|
|
8399
|
-
let i = 0;
|
|
8400
|
-
const insert = (d = 0) => {
|
|
8401
|
-
t = setTimeout(() => {
|
|
8402
|
-
const pos = view.state.selection.main.head;
|
|
8403
|
-
view.dispatch({
|
|
8404
|
-
changes: {
|
|
8405
|
-
from: pos,
|
|
8406
|
-
insert: text[i++]
|
|
8407
|
-
},
|
|
8408
|
-
selection: {
|
|
8409
|
-
anchor: pos + 1
|
|
8410
|
-
}
|
|
8411
|
-
});
|
|
8412
|
-
if (i < text.length) {
|
|
8413
|
-
insert(Math.random() * delay * (text[i] === " " ? 2 : 1));
|
|
8414
|
-
}
|
|
8415
|
-
}, d);
|
|
8416
|
-
};
|
|
8417
|
-
insert();
|
|
8418
|
-
return true;
|
|
8419
|
-
}
|
|
8420
|
-
}
|
|
8421
|
-
])
|
|
8422
|
-
];
|
|
8423
|
-
};
|
|
8424
8460
|
export {
|
|
8425
8461
|
Cursor,
|
|
8426
|
-
EditorInputMode,
|
|
8427
|
-
EditorInputModes,
|
|
8428
8462
|
EditorState4 as EditorState,
|
|
8429
|
-
|
|
8430
|
-
EditorViewMode,
|
|
8431
|
-
EditorViewModes,
|
|
8463
|
+
EditorView33 as EditorView,
|
|
8432
8464
|
Inline,
|
|
8433
8465
|
InputModeExtensions,
|
|
8434
8466
|
List,
|
|
@@ -8557,6 +8589,7 @@ export {
|
|
|
8557
8589
|
setSelection,
|
|
8558
8590
|
setStyle,
|
|
8559
8591
|
singleValueFacet,
|
|
8592
|
+
snippets2 as snippets,
|
|
8560
8593
|
staticCompletion,
|
|
8561
8594
|
submit,
|
|
8562
8595
|
tabbable,
|
|
@@ -8576,10 +8609,12 @@ export {
|
|
|
8576
8609
|
treeFacet,
|
|
8577
8610
|
typeahead,
|
|
8578
8611
|
typewriter,
|
|
8579
|
-
|
|
8580
|
-
|
|
8612
|
+
typewriterBypass,
|
|
8613
|
+
typewriterDrainingEffect,
|
|
8581
8614
|
wrapWithCatch,
|
|
8615
|
+
xmlBlockDecoration,
|
|
8582
8616
|
xmlElementLength,
|
|
8617
|
+
xmlFormatting,
|
|
8583
8618
|
xmlTagContextEffect,
|
|
8584
8619
|
xmlTagResetEffect,
|
|
8585
8620
|
xmlTagUpdateEffect,
|