@dxos/react-ui-editor 0.8.3 → 0.8.4-main.84f28bd
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/chunk-22UMM3QJ.mjs +22 -0
- package/dist/lib/browser/chunk-22UMM3QJ.mjs.map +7 -0
- package/dist/lib/browser/index.mjs +566 -525
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/browser/testing/index.mjs +1 -1
- package/dist/lib/browser/types/index.mjs +13 -0
- package/dist/lib/browser/types/index.mjs.map +7 -0
- package/dist/lib/node-esm/chunk-YXYQPV6R.mjs +24 -0
- package/dist/lib/node-esm/chunk-YXYQPV6R.mjs.map +7 -0
- package/dist/lib/node-esm/index.mjs +566 -526
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/lib/node-esm/testing/index.mjs +1 -1
- package/dist/lib/node-esm/types/index.mjs +14 -0
- package/dist/lib/node-esm/types/index.mjs.map +7 -0
- package/dist/types/src/components/Editor/Editor.d.ts +19 -0
- package/dist/types/src/components/Editor/Editor.d.ts.map +1 -0
- package/dist/types/src/components/Editor/index.d.ts +2 -0
- package/dist/types/src/components/Editor/index.d.ts.map +1 -0
- package/dist/types/src/components/EditorToolbar/util.d.ts +4 -3
- package/dist/types/src/components/EditorToolbar/util.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/view-mode.d.ts +1 -1
- package/dist/types/src/components/EditorToolbar/view-mode.d.ts.map +1 -1
- package/dist/types/src/components/Popover/RefDropdownMenu.d.ts.map +1 -1
- package/dist/types/src/components/index.d.ts +1 -0
- package/dist/types/src/components/index.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/automerge.stories.d.ts +28 -28
- package/dist/types/src/extensions/automerge/automerge.stories.d.ts.map +1 -1
- package/dist/types/src/extensions/blast.d.ts.map +1 -1
- package/dist/types/src/extensions/command/index.d.ts +1 -1
- package/dist/types/src/extensions/command/index.d.ts.map +1 -1
- package/dist/types/src/extensions/command/typeahead.d.ts +7 -2
- package/dist/types/src/extensions/command/typeahead.d.ts.map +1 -1
- package/dist/types/src/extensions/factories.d.ts +18 -0
- package/dist/types/src/extensions/factories.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
- package/dist/types/src/extensions/modes.d.ts +0 -7
- package/dist/types/src/extensions/modes.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/stories/CommandMenu.stories.d.ts +1 -1
- package/dist/types/src/stories/CommandMenu.stories.d.ts.map +1 -1
- package/dist/types/src/stories/EditorToolbar.stories.d.ts +1 -1
- package/dist/types/src/stories/EditorToolbar.stories.d.ts.map +1 -1
- package/dist/types/src/stories/components/EditorStory.d.ts +2 -2
- package/dist/types/src/translations.d.ts +28 -29
- package/dist/types/src/translations.d.ts.map +1 -1
- package/dist/types/src/types/index.d.ts +2 -0
- package/dist/types/src/types/index.d.ts.map +1 -0
- package/dist/types/src/types/types.d.ts +21 -0
- package/dist/types/src/types/types.d.ts.map +1 -0
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +44 -41
- package/src/components/Editor/Editor.tsx +39 -0
- package/src/components/Editor/index.ts +5 -0
- package/src/components/EditorToolbar/util.ts +5 -4
- package/src/components/EditorToolbar/view-mode.ts +1 -1
- package/src/components/Popover/RefDropdownMenu.tsx +9 -3
- package/src/components/index.ts +1 -0
- package/src/extensions/automerge/automerge.stories.tsx +4 -2
- package/src/extensions/blast.ts +3 -16
- package/src/extensions/command/index.ts +1 -1
- package/src/extensions/command/typeahead.ts +26 -13
- package/src/extensions/factories.ts +24 -5
- package/src/extensions/markdown/formatting.test.ts +1 -1
- package/src/extensions/markdown/formatting.ts +14 -12
- package/src/extensions/modes.ts +0 -9
- package/src/index.ts +1 -1
- package/src/stories/CommandMenu.stories.tsx +1 -1
- package/src/stories/EditorToolbar.stories.tsx +3 -4
- package/src/stories/Preview.stories.tsx +4 -4
- package/src/stories/TextEditor.stories.tsx +1 -1
- package/src/styles/theme.ts +1 -1
- package/src/translations.ts +4 -2
- package/src/types/index.ts +5 -0
- package/src/types/types.ts +32 -0
- package/dist/lib/node/index.cjs +0 -7754
- package/dist/lib/node/index.cjs.map +0 -7
- package/dist/lib/node/meta.json +0 -1
- package/dist/lib/node/testing/index.cjs +0 -29
- package/dist/lib/node/testing/index.cjs.map +0 -7
- package/dist/types/src/types.d.ts +0 -14
- package/dist/types/src/types.d.ts.map +0 -1
- package/src/types.ts +0 -23
@@ -1,6 +1,13 @@
|
|
1
|
-
|
1
|
+
import {
|
2
|
+
EditorInputMode,
|
3
|
+
EditorInputModes,
|
4
|
+
EditorViewMode,
|
5
|
+
EditorViewModes
|
6
|
+
} from "./chunk-22UMM3QJ.mjs";
|
7
|
+
|
8
|
+
// src/translations.ts
|
2
9
|
var translationKey = "react-ui-editor";
|
3
|
-
var
|
10
|
+
var translations = [
|
4
11
|
{
|
5
12
|
"en-US": {
|
6
13
|
[translationKey]: {
|
@@ -33,46 +40,27 @@ var translations_default = [
|
|
33
40
|
}
|
34
41
|
];
|
35
42
|
|
36
|
-
//
|
43
|
+
// src/index.ts
|
37
44
|
import { EditorState as EditorState4 } from "@codemirror/state";
|
38
45
|
import { EditorView as EditorView27, keymap as keymap14 } from "@codemirror/view";
|
39
46
|
import { tags as tags2 } from "@lezer/highlight";
|
40
47
|
import { TextKind } from "@dxos/protocols/proto/dxos/echo/model/text";
|
41
48
|
|
42
|
-
//
|
49
|
+
// src/components/Editor/Editor.tsx
|
43
50
|
import { useSignals as _useSignals } from "@preact-signals/safe-react/tracking";
|
44
|
-
import {
|
45
|
-
import
|
46
|
-
import {
|
47
|
-
import { ElevationProvider } from "@dxos/react-ui";
|
48
|
-
import { MenuProvider, ToolbarMenu, createGapSeparator, useMenuActions } from "@dxos/react-ui-menu";
|
51
|
+
import React3, { forwardRef, useImperativeHandle } from "react";
|
52
|
+
import { useThemeContext } from "@dxos/react-ui";
|
53
|
+
import { mx as mx6 } from "@dxos/react-ui-theme";
|
49
54
|
|
50
|
-
//
|
51
|
-
import {
|
52
|
-
import {
|
53
|
-
import {
|
54
|
-
|
55
|
-
|
56
|
-
};
|
57
|
-
var createEditorAction = (id, invoke, properties) => {
|
58
|
-
const { label = [
|
59
|
-
`${id} label`,
|
60
|
-
{
|
61
|
-
ns: translationKey
|
62
|
-
}
|
63
|
-
], ...rest } = properties;
|
64
|
-
return createMenuAction(id, invoke, {
|
65
|
-
label,
|
66
|
-
...rest
|
67
|
-
});
|
68
|
-
};
|
69
|
-
var createEditorActionGroup = (id, props, icon) => createMenuItemGroup(id, {
|
70
|
-
icon,
|
71
|
-
iconOnly: true,
|
72
|
-
...props
|
73
|
-
});
|
55
|
+
// src/hooks/useTextEditor.ts
|
56
|
+
import { EditorState as EditorState3 } from "@codemirror/state";
|
57
|
+
import { EditorView as EditorView26 } from "@codemirror/view";
|
58
|
+
import { useFocusableGroup } from "@fluentui/react-tabster";
|
59
|
+
import { useCallback as useCallback3, useEffect as useEffect2, useMemo as useMemo3, useRef as useRef2, useState as useState2 } from "react";
|
60
|
+
import { log as log8 } from "@dxos/log";
|
61
|
+
import { getProviderValue, isNotFalsy as isNotFalsy4 } from "@dxos/util";
|
74
62
|
|
75
|
-
//
|
63
|
+
// src/extensions/annotations.ts
|
76
64
|
import { RangeSetBuilder } from "@codemirror/state";
|
77
65
|
import { Decoration, EditorView, ViewPlugin } from "@codemirror/view";
|
78
66
|
var annotationMark = Decoration.mark({
|
@@ -113,7 +101,7 @@ var annotations = ({ match } = {}) => {
|
|
113
101
|
];
|
114
102
|
};
|
115
103
|
|
116
|
-
//
|
104
|
+
// src/extensions/autocomplete.ts
|
117
105
|
import { autocompletion, completionKeymap } from "@codemirror/autocomplete";
|
118
106
|
import { markdownLanguage } from "@codemirror/lang-markdown";
|
119
107
|
import { keymap } from "@codemirror/view";
|
@@ -150,15 +138,15 @@ var autocomplete = ({ activateOnTyping, override, onSearch } = {}) => {
|
|
150
138
|
return extensions;
|
151
139
|
};
|
152
140
|
|
153
|
-
//
|
141
|
+
// src/extensions/automerge/automerge.ts
|
154
142
|
import { next as A3 } from "@automerge/automerge";
|
155
143
|
import { StateField } from "@codemirror/state";
|
156
144
|
import { EditorView as EditorView2, ViewPlugin as ViewPlugin2 } from "@codemirror/view";
|
157
145
|
|
158
|
-
//
|
146
|
+
// src/extensions/automerge/cursor.ts
|
159
147
|
import { log } from "@dxos/log";
|
160
148
|
import { fromCursor, toCursor } from "@dxos/react-client/echo";
|
161
|
-
var __dxlog_file = "/
|
149
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/automerge/cursor.ts";
|
162
150
|
var cursorConverter = (accessor) => ({
|
163
151
|
toCursor: (pos, assoc) => {
|
164
152
|
try {
|
@@ -188,7 +176,7 @@ var cursorConverter = (accessor) => ({
|
|
188
176
|
}
|
189
177
|
});
|
190
178
|
|
191
|
-
//
|
179
|
+
// src/extensions/automerge/defs.ts
|
192
180
|
import { Annotation, StateEffect } from "@codemirror/state";
|
193
181
|
var getPath = (state, field) => state.field(field).path;
|
194
182
|
var getLastHeads = (state, field) => state.field(field).lastHeads;
|
@@ -201,10 +189,10 @@ var isReconcile = (tr) => {
|
|
201
189
|
return !!tr.annotation(reconcileAnnotation);
|
202
190
|
};
|
203
191
|
|
204
|
-
//
|
192
|
+
// src/extensions/automerge/sync.ts
|
205
193
|
import { next as A2 } from "@automerge/automerge";
|
206
194
|
|
207
|
-
//
|
195
|
+
// src/extensions/automerge/update-automerge.ts
|
208
196
|
import { next as A } from "@automerge/automerge";
|
209
197
|
var updateAutomerge = (field, handle, transactions, state) => {
|
210
198
|
const { lastHeads, path } = state.field(field);
|
@@ -235,7 +223,7 @@ var updateAutomerge = (field, handle, transactions, state) => {
|
|
235
223
|
return newHeads ?? void 0;
|
236
224
|
};
|
237
225
|
|
238
|
-
//
|
226
|
+
// src/extensions/automerge/update-codemirror.ts
|
239
227
|
import { ChangeSet } from "@codemirror/state";
|
240
228
|
var updateCodeMirror = (view, selection, target, patches) => {
|
241
229
|
for (const patch of patches) {
|
@@ -342,7 +330,7 @@ var charPath = (textPath, candidatePath) => {
|
|
342
330
|
return null;
|
343
331
|
};
|
344
332
|
|
345
|
-
//
|
333
|
+
// src/extensions/automerge/sync.ts
|
346
334
|
var Syncer = class {
|
347
335
|
// prettier-ignore
|
348
336
|
constructor(_handle, _state) {
|
@@ -386,7 +374,7 @@ var Syncer = class {
|
|
386
374
|
}
|
387
375
|
};
|
388
376
|
|
389
|
-
//
|
377
|
+
// src/util/facet.ts
|
390
378
|
import { Facet } from "@codemirror/state";
|
391
379
|
var singleValueFacet = (defaultValue) => Facet.define({
|
392
380
|
// Called immediately.
|
@@ -395,7 +383,7 @@ var singleValueFacet = (defaultValue) => Facet.define({
|
|
395
383
|
}
|
396
384
|
});
|
397
385
|
|
398
|
-
//
|
386
|
+
// src/util/cursor.ts
|
399
387
|
var overlap = (a, b) => a.from <= b.to && a.to >= b.from;
|
400
388
|
var defaultCursorConverter = {
|
401
389
|
toCursor: (position) => position.toString(),
|
@@ -430,9 +418,9 @@ var Cursor = class _Cursor {
|
|
430
418
|
}
|
431
419
|
};
|
432
420
|
|
433
|
-
//
|
421
|
+
// src/util/debug.ts
|
434
422
|
import { log as log2 } from "@dxos/log";
|
435
|
-
var __dxlog_file2 = "/
|
423
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/util/debug.ts";
|
436
424
|
var wrapWithCatch = (fn) => {
|
437
425
|
return (...args) => {
|
438
426
|
try {
|
@@ -490,7 +478,7 @@ var logChanges = (trs) => {
|
|
490
478
|
}
|
491
479
|
};
|
492
480
|
|
493
|
-
//
|
481
|
+
// src/util/dom.ts
|
494
482
|
var flattenRect = (rect, left) => {
|
495
483
|
const x = left ? rect.left : rect.right;
|
496
484
|
return {
|
@@ -532,7 +520,7 @@ var createElement = (tag, options, children) => {
|
|
532
520
|
return el;
|
533
521
|
};
|
534
522
|
|
535
|
-
//
|
523
|
+
// src/util/react.tsx
|
536
524
|
import React from "react";
|
537
525
|
import { createRoot } from "react-dom/client";
|
538
526
|
import { ThemeProvider, Tooltip } from "@dxos/react-ui";
|
@@ -549,7 +537,7 @@ var createRenderer = (Component) => (el, props) => {
|
|
549
537
|
}, /* @__PURE__ */ React.createElement(Tooltip.Provider, null, /* @__PURE__ */ React.createElement(Component, props))));
|
550
538
|
};
|
551
539
|
|
552
|
-
//
|
540
|
+
// src/extensions/automerge/automerge.ts
|
553
541
|
var automerge = (accessor) => {
|
554
542
|
const syncState = StateField.define({
|
555
543
|
create: () => ({
|
@@ -607,12 +595,12 @@ var automerge = (accessor) => {
|
|
607
595
|
];
|
608
596
|
};
|
609
597
|
|
610
|
-
//
|
598
|
+
// src/extensions/awareness/awareness.ts
|
611
599
|
import { Annotation as Annotation2, RangeSet } from "@codemirror/state";
|
612
600
|
import { Decoration as Decoration2, EditorView as EditorView3, ViewPlugin as ViewPlugin3, WidgetType } from "@codemirror/view";
|
613
601
|
import { Event } from "@dxos/async";
|
614
602
|
import { Context } from "@dxos/context";
|
615
|
-
var __dxlog_file3 = "/
|
603
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/awareness/awareness.ts";
|
616
604
|
var dummyProvider = {
|
617
605
|
remoteStateChange: new Event(),
|
618
606
|
open: () => {
|
@@ -839,12 +827,12 @@ var styles = EditorView3.theme({
|
|
839
827
|
}
|
840
828
|
});
|
841
829
|
|
842
|
-
//
|
830
|
+
// src/extensions/awareness/awareness-provider.ts
|
843
831
|
import { DeferredTask, Event as Event2, sleep } from "@dxos/async";
|
844
832
|
import { Context as Context2 } from "@dxos/context";
|
845
833
|
import { invariant } from "@dxos/invariant";
|
846
834
|
import { log as log3 } from "@dxos/log";
|
847
|
-
var __dxlog_file4 = "/
|
835
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/awareness/awareness-provider.ts";
|
848
836
|
var DEBOUNCE_INTERVAL = 100;
|
849
837
|
var SpaceAwarenessProvider = class {
|
850
838
|
constructor(params) {
|
@@ -946,11 +934,12 @@ var SpaceAwarenessProvider = class {
|
|
946
934
|
}
|
947
935
|
};
|
948
936
|
|
949
|
-
//
|
937
|
+
// src/extensions/blast.ts
|
950
938
|
import { EditorView as EditorView4, keymap as keymap2 } from "@codemirror/view";
|
951
939
|
import defaultsDeep from "lodash.defaultsdeep";
|
940
|
+
import { throttle } from "@dxos/async";
|
952
941
|
import { invariant as invariant2 } from "@dxos/invariant";
|
953
|
-
var __dxlog_file5 = "/
|
942
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/blast.ts";
|
954
943
|
var defaultOptions = {
|
955
944
|
effect: 2,
|
956
945
|
maxParticles: 200,
|
@@ -1078,7 +1067,7 @@ var Blaster = class {
|
|
1078
1067
|
initialize() {
|
1079
1068
|
invariant2(!this._canvas && !this._ctx, void 0, {
|
1080
1069
|
F: __dxlog_file5,
|
1081
|
-
L:
|
1070
|
+
L: 142,
|
1082
1071
|
S: this,
|
1083
1072
|
A: [
|
1084
1073
|
"!this._canvas && !this._ctx",
|
@@ -1115,7 +1104,7 @@ var Blaster = class {
|
|
1115
1104
|
start() {
|
1116
1105
|
invariant2(this._canvas && this._ctx, void 0, {
|
1117
1106
|
F: __dxlog_file5,
|
1118
|
-
L:
|
1107
|
+
L: 181,
|
1119
1108
|
S: this,
|
1120
1109
|
A: [
|
1121
1110
|
"this._canvas && this._ctx",
|
@@ -1219,18 +1208,6 @@ var Effect2 = class extends Effect {
|
|
1219
1208
|
ctx.fill();
|
1220
1209
|
}
|
1221
1210
|
};
|
1222
|
-
function throttle(callback, limit) {
|
1223
|
-
let wait = false;
|
1224
|
-
return function(...args) {
|
1225
|
-
if (!wait) {
|
1226
|
-
callback.apply(this, args);
|
1227
|
-
wait = true;
|
1228
|
-
setTimeout(() => {
|
1229
|
-
wait = false;
|
1230
|
-
}, limit);
|
1231
|
-
}
|
1232
|
-
};
|
1233
|
-
}
|
1234
1211
|
var getRGBComponents = (node, color) => {
|
1235
1212
|
if (typeof color === "function") {
|
1236
1213
|
return color();
|
@@ -1256,10 +1233,10 @@ var random = (min, max) => {
|
|
1256
1233
|
return min + ~~(Math.random() * (max - min + 1));
|
1257
1234
|
};
|
1258
1235
|
|
1259
|
-
//
|
1236
|
+
// src/extensions/command/action.ts
|
1260
1237
|
import { StateEffect as StateEffect2 } from "@codemirror/state";
|
1261
1238
|
|
1262
|
-
//
|
1239
|
+
// src/extensions/command/state.ts
|
1263
1240
|
import { StateField as StateField2 } from "@codemirror/state";
|
1264
1241
|
import { showTooltip } from "@codemirror/view";
|
1265
1242
|
var commandConfig = singleValueFacet();
|
@@ -1272,7 +1249,7 @@ var commandState = StateField2.define({
|
|
1272
1249
|
}
|
1273
1250
|
const { renderDialog } = tr.state.facet(commandConfig);
|
1274
1251
|
if (effect.is(openEffect) && renderDialog) {
|
1275
|
-
const { pos, fullWidth } = effect.value;
|
1252
|
+
const { pos, fullWidth: fullWidth2 } = effect.value;
|
1276
1253
|
const tooltip = {
|
1277
1254
|
pos,
|
1278
1255
|
above: false,
|
@@ -1283,7 +1260,7 @@ var commandState = StateField2.define({
|
|
1283
1260
|
const tooltipView = {
|
1284
1261
|
dom: root,
|
1285
1262
|
mount: (view2) => {
|
1286
|
-
if (
|
1263
|
+
if (fullWidth2) {
|
1287
1264
|
const parent = root.parentElement;
|
1288
1265
|
const { paddingLeft, paddingRight } = window.getComputedStyle(parent);
|
1289
1266
|
const widthWithoutPadding = parent.clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);
|
@@ -1329,7 +1306,7 @@ var commandState = StateField2.define({
|
|
1329
1306
|
]
|
1330
1307
|
});
|
1331
1308
|
|
1332
|
-
//
|
1309
|
+
// src/extensions/command/action.ts
|
1333
1310
|
var openEffect = StateEffect2.define();
|
1334
1311
|
var closeEffect = StateEffect2.define();
|
1335
1312
|
var openCommand = (view) => {
|
@@ -1369,12 +1346,12 @@ var commandKeyBindings = [
|
|
1369
1346
|
}
|
1370
1347
|
];
|
1371
1348
|
|
1372
|
-
//
|
1349
|
+
// src/extensions/command/command.ts
|
1373
1350
|
import { Prec } from "@codemirror/state";
|
1374
1351
|
import { EditorView as EditorView6, keymap as keymap3 } from "@codemirror/view";
|
1375
1352
|
import { isNonNullable } from "@dxos/util";
|
1376
1353
|
|
1377
|
-
//
|
1354
|
+
// src/extensions/command/hint.ts
|
1378
1355
|
import { RangeSetBuilder as RangeSetBuilder2 } from "@codemirror/state";
|
1379
1356
|
import { Decoration as Decoration3, EditorView as EditorView5, ViewPlugin as ViewPlugin4, WidgetType as WidgetType2 } from "@codemirror/view";
|
1380
1357
|
var hint = ({ delay = 3e3, onHint }) => {
|
@@ -1458,7 +1435,7 @@ var Hint = class extends WidgetType2 {
|
|
1458
1435
|
}
|
1459
1436
|
};
|
1460
1437
|
|
1461
|
-
//
|
1438
|
+
// src/extensions/command/command.ts
|
1462
1439
|
var command = (options = {}) => {
|
1463
1440
|
return [
|
1464
1441
|
Prec.highest(keymap3.of(commandKeyBindings)),
|
@@ -1474,11 +1451,11 @@ var command = (options = {}) => {
|
|
1474
1451
|
].filter(isNonNullable);
|
1475
1452
|
};
|
1476
1453
|
|
1477
|
-
//
|
1454
|
+
// src/extensions/command/command-menu.ts
|
1478
1455
|
import { RangeSetBuilder as RangeSetBuilder3, StateField as StateField3, StateEffect as StateEffect3, Prec as Prec2 } from "@codemirror/state";
|
1479
1456
|
import { EditorView as EditorView8, ViewPlugin as ViewPlugin6, Decoration as Decoration5, keymap as keymap4 } from "@codemirror/view";
|
1480
1457
|
|
1481
|
-
//
|
1458
|
+
// src/extensions/command/placeholder.ts
|
1482
1459
|
import { Decoration as Decoration4, EditorView as EditorView7, WidgetType as WidgetType3, ViewPlugin as ViewPlugin5 } from "@codemirror/view";
|
1483
1460
|
var placeholder = ({ delay = 3e3, content }) => {
|
1484
1461
|
const plugin = ViewPlugin5.fromClass(class {
|
@@ -1560,7 +1537,7 @@ var Placeholder = class extends WidgetType3 {
|
|
1560
1537
|
}
|
1561
1538
|
};
|
1562
1539
|
|
1563
|
-
//
|
1540
|
+
// src/extensions/command/command-menu.ts
|
1564
1541
|
var commandMenu = (options) => {
|
1565
1542
|
const commandMenuPlugin = ViewPlugin6.fromClass(class {
|
1566
1543
|
constructor(view) {
|
@@ -1717,7 +1694,7 @@ var commandMenuState = StateField3.define({
|
|
1717
1694
|
}
|
1718
1695
|
});
|
1719
1696
|
|
1720
|
-
//
|
1697
|
+
// src/extensions/command/floating-menu.ts
|
1721
1698
|
import { EditorView as EditorView9, ViewPlugin as ViewPlugin7 } from "@codemirror/view";
|
1722
1699
|
import { addEventListener } from "@dxos/async";
|
1723
1700
|
var floatingMenu = (options = {}) => [
|
@@ -1806,8 +1783,93 @@ var floatingMenu = (options = {}) => [
|
|
1806
1783
|
})
|
1807
1784
|
];
|
1808
1785
|
|
1809
|
-
//
|
1810
|
-
import {
|
1786
|
+
// src/extensions/command/typeahead.ts
|
1787
|
+
import { EditorSelection, Prec as Prec3, RangeSetBuilder as RangeSetBuilder4 } from "@codemirror/state";
|
1788
|
+
import { Decoration as Decoration6, keymap as keymap5, ViewPlugin as ViewPlugin8 } from "@codemirror/view";
|
1789
|
+
var typeahead = ({ onComplete } = {}) => {
|
1790
|
+
let hint2;
|
1791
|
+
const complete = (view) => {
|
1792
|
+
if (!hint2) {
|
1793
|
+
return false;
|
1794
|
+
}
|
1795
|
+
const selection = view.state.selection.main;
|
1796
|
+
view.dispatch({
|
1797
|
+
changes: [
|
1798
|
+
{
|
1799
|
+
from: selection.from,
|
1800
|
+
to: selection.to,
|
1801
|
+
insert: hint2
|
1802
|
+
}
|
1803
|
+
],
|
1804
|
+
selection: EditorSelection.cursor(selection.from + hint2.length)
|
1805
|
+
});
|
1806
|
+
return true;
|
1807
|
+
};
|
1808
|
+
return [
|
1809
|
+
ViewPlugin8.fromClass(class {
|
1810
|
+
constructor() {
|
1811
|
+
this.decorations = Decoration6.none;
|
1812
|
+
}
|
1813
|
+
update(update2) {
|
1814
|
+
const builder = new RangeSetBuilder4();
|
1815
|
+
const selection = update2.view.state.selection.main;
|
1816
|
+
const line = update2.view.state.doc.lineAt(selection.from);
|
1817
|
+
if (selection.from === selection.to && selection.from === line.to) {
|
1818
|
+
const str = update2.state.sliceDoc(line.from, selection.from);
|
1819
|
+
hint2 = onComplete?.({
|
1820
|
+
line: str
|
1821
|
+
});
|
1822
|
+
if (hint2) {
|
1823
|
+
builder.add(selection.from, selection.to, Decoration6.widget({
|
1824
|
+
widget: new Hint(hint2)
|
1825
|
+
}));
|
1826
|
+
}
|
1827
|
+
}
|
1828
|
+
this.decorations = builder.finish();
|
1829
|
+
}
|
1830
|
+
}, {
|
1831
|
+
decorations: (v) => v.decorations
|
1832
|
+
}),
|
1833
|
+
// Keys.
|
1834
|
+
Prec3.highest(keymap5.of([
|
1835
|
+
{
|
1836
|
+
key: "Tab",
|
1837
|
+
preventDefault: true,
|
1838
|
+
run: complete
|
1839
|
+
},
|
1840
|
+
{
|
1841
|
+
key: "ArrowRight",
|
1842
|
+
preventDefault: true,
|
1843
|
+
run: complete
|
1844
|
+
}
|
1845
|
+
]))
|
1846
|
+
];
|
1847
|
+
};
|
1848
|
+
var staticCompletion = (completions, options = {}) => ({ line }) => {
|
1849
|
+
if (line.length === 0 && options.default) {
|
1850
|
+
return options.default;
|
1851
|
+
}
|
1852
|
+
const parts = line.split(/\s+/).filter(Boolean);
|
1853
|
+
if (parts.length) {
|
1854
|
+
const str = parts.at(-1);
|
1855
|
+
if (str.length >= (options.minLength ?? 0)) {
|
1856
|
+
for (const completion of completions) {
|
1857
|
+
const match = matchCompletion(completion, str);
|
1858
|
+
if (match) {
|
1859
|
+
return match;
|
1860
|
+
}
|
1861
|
+
}
|
1862
|
+
}
|
1863
|
+
}
|
1864
|
+
};
|
1865
|
+
var matchCompletion = (completion, str, minLength = 0) => {
|
1866
|
+
if (str.length >= minLength && completion.length > str.length && completion.startsWith(str)) {
|
1867
|
+
return completion.slice(str.length);
|
1868
|
+
}
|
1869
|
+
};
|
1870
|
+
|
1871
|
+
// src/extensions/command/useCommandMenu.ts
|
1872
|
+
import { useCallback, useMemo, useRef, useState } from "react";
|
1811
1873
|
var useCommandMenu = ({ viewRef, trigger, placeholder: placeholder3, getMenu }) => {
|
1812
1874
|
const triggerRef = useRef(null);
|
1813
1875
|
const currentRef = useRef(null);
|
@@ -1855,7 +1917,7 @@ var useCommandMenu = ({ viewRef, trigger, placeholder: placeholder3, getMenu })
|
|
1855
1917
|
void item.onSelect?.(view, selection.head);
|
1856
1918
|
}, []);
|
1857
1919
|
const serializedTrigger = Array.isArray(trigger) ? trigger.join(",") : trigger;
|
1858
|
-
const _commandMenu =
|
1920
|
+
const _commandMenu = useMemo(() => {
|
1859
1921
|
return commandMenu({
|
1860
1922
|
trigger,
|
1861
1923
|
placeholder: placeholder3,
|
@@ -1907,90 +1969,7 @@ var useCommandMenu = ({ viewRef, trigger, placeholder: placeholder3, getMenu })
|
|
1907
1969
|
};
|
1908
1970
|
};
|
1909
1971
|
|
1910
|
-
//
|
1911
|
-
import { EditorSelection, Prec as Prec3, RangeSetBuilder as RangeSetBuilder4 } from "@codemirror/state";
|
1912
|
-
import { Decoration as Decoration6, keymap as keymap5, ViewPlugin as ViewPlugin8 } from "@codemirror/view";
|
1913
|
-
var typeahead = ({ onComplete } = {}) => {
|
1914
|
-
let hint2;
|
1915
|
-
const complete = (view) => {
|
1916
|
-
if (!hint2) {
|
1917
|
-
return false;
|
1918
|
-
}
|
1919
|
-
const selection = view.state.selection.main;
|
1920
|
-
view.dispatch({
|
1921
|
-
changes: [
|
1922
|
-
{
|
1923
|
-
from: selection.from,
|
1924
|
-
to: selection.to,
|
1925
|
-
insert: hint2
|
1926
|
-
}
|
1927
|
-
],
|
1928
|
-
selection: EditorSelection.cursor(selection.from + hint2.length)
|
1929
|
-
});
|
1930
|
-
return true;
|
1931
|
-
};
|
1932
|
-
return [
|
1933
|
-
ViewPlugin8.fromClass(class {
|
1934
|
-
constructor() {
|
1935
|
-
this.decorations = Decoration6.none;
|
1936
|
-
}
|
1937
|
-
update(update2) {
|
1938
|
-
const builder = new RangeSetBuilder4();
|
1939
|
-
const selection = update2.view.state.selection.main;
|
1940
|
-
const line = update2.view.state.doc.lineAt(selection.from);
|
1941
|
-
if (selection.from === selection.to && selection.from === line.to) {
|
1942
|
-
const str = update2.state.sliceDoc(line.from, selection.from);
|
1943
|
-
hint2 = onComplete?.({
|
1944
|
-
line: str
|
1945
|
-
});
|
1946
|
-
if (hint2) {
|
1947
|
-
builder.add(selection.from, selection.to, Decoration6.widget({
|
1948
|
-
widget: new Hint(hint2)
|
1949
|
-
}));
|
1950
|
-
}
|
1951
|
-
}
|
1952
|
-
this.decorations = builder.finish();
|
1953
|
-
}
|
1954
|
-
}, {
|
1955
|
-
decorations: (v) => v.decorations
|
1956
|
-
}),
|
1957
|
-
// Keys.
|
1958
|
-
Prec3.highest(keymap5.of([
|
1959
|
-
{
|
1960
|
-
key: "Tab",
|
1961
|
-
preventDefault: true,
|
1962
|
-
run: complete
|
1963
|
-
},
|
1964
|
-
{
|
1965
|
-
key: "ArrowRight",
|
1966
|
-
preventDefault: true,
|
1967
|
-
run: complete
|
1968
|
-
}
|
1969
|
-
]))
|
1970
|
-
];
|
1971
|
-
};
|
1972
|
-
var staticCompletion = (completions, defaultCompletion) => ({ line }) => {
|
1973
|
-
if (line.length === 0 && defaultCompletion) {
|
1974
|
-
return defaultCompletion;
|
1975
|
-
}
|
1976
|
-
const words = line.split(/\s+/).filter(Boolean);
|
1977
|
-
if (words.length) {
|
1978
|
-
const word = words.at(-1);
|
1979
|
-
for (const completion of completions) {
|
1980
|
-
const match = matchCompletion(completion, word);
|
1981
|
-
if (match) {
|
1982
|
-
return match;
|
1983
|
-
}
|
1984
|
-
}
|
1985
|
-
}
|
1986
|
-
};
|
1987
|
-
var matchCompletion = (completion, word) => {
|
1988
|
-
if (completion.length > word.length && completion.startsWith(word)) {
|
1989
|
-
return completion.slice(word.length);
|
1990
|
-
}
|
1991
|
-
};
|
1992
|
-
|
1993
|
-
// packages/ui/react-ui-editor/src/extensions/comments.ts
|
1972
|
+
// src/extensions/comments.ts
|
1994
1973
|
import { invertedEffects } from "@codemirror/commands";
|
1995
1974
|
import { StateEffect as StateEffect4, StateField as StateField4 } from "@codemirror/state";
|
1996
1975
|
import { hoverTooltip, keymap as keymap7, Decoration as Decoration7, EditorView as EditorView11, ViewPlugin as ViewPlugin9 } from "@codemirror/view";
|
@@ -2000,13 +1979,13 @@ import { debounce as debounce2 } from "@dxos/async";
|
|
2000
1979
|
import { log as log4 } from "@dxos/log";
|
2001
1980
|
import { isNonNullable as isNonNullable2 } from "@dxos/util";
|
2002
1981
|
|
2003
|
-
//
|
1982
|
+
// src/extensions/selection.ts
|
2004
1983
|
import { Transaction } from "@codemirror/state";
|
2005
1984
|
import { EditorView as EditorView10, keymap as keymap6 } from "@codemirror/view";
|
2006
1985
|
import { debounce } from "@dxos/async";
|
2007
1986
|
import { invariant as invariant3 } from "@dxos/invariant";
|
2008
1987
|
import { isNotFalsy } from "@dxos/util";
|
2009
|
-
var __dxlog_file6 = "/
|
1988
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/selection.ts";
|
2010
1989
|
var documentId = singleValueFacet();
|
2011
1990
|
var stateRestoreAnnotation = "dxos.org/cm/state-restore";
|
2012
1991
|
var createEditorStateTransaction = ({ scrollTo, selection }) => {
|
@@ -2093,8 +2072,8 @@ var selectionState = ({ getState, setState } = {}) => {
|
|
2093
2072
|
].filter(isNotFalsy);
|
2094
2073
|
};
|
2095
2074
|
|
2096
|
-
//
|
2097
|
-
var __dxlog_file7 = "/
|
2075
|
+
// src/extensions/comments.ts
|
2076
|
+
var __dxlog_file7 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/comments.ts";
|
2098
2077
|
var setComments = StateEffect4.define();
|
2099
2078
|
var setSelection = StateEffect4.define();
|
2100
2079
|
var setCommentState = StateEffect4.define();
|
@@ -2518,7 +2497,7 @@ var useComments = (view, id, comments2) => {
|
|
2518
2497
|
});
|
2519
2498
|
};
|
2520
2499
|
|
2521
|
-
//
|
2500
|
+
// src/extensions/debug.ts
|
2522
2501
|
import { syntaxTree } from "@codemirror/language";
|
2523
2502
|
import { StateField as StateField5 } from "@codemirror/state";
|
2524
2503
|
var debugNodeLogger = (log9 = console.log) => {
|
@@ -2531,7 +2510,7 @@ var debugNodeLogger = (log9 = console.log) => {
|
|
2531
2510
|
});
|
2532
2511
|
};
|
2533
2512
|
|
2534
|
-
//
|
2513
|
+
// src/extensions/dnd.ts
|
2535
2514
|
import { dropCursor, EditorView as EditorView12 } from "@codemirror/view";
|
2536
2515
|
var styles3 = EditorView12.theme({
|
2537
2516
|
".cm-dropCursor": {
|
@@ -2567,7 +2546,7 @@ var dropFile = (options = {}) => {
|
|
2567
2546
|
];
|
2568
2547
|
};
|
2569
2548
|
|
2570
|
-
//
|
2549
|
+
// src/extensions/factories.ts
|
2571
2550
|
import { closeBrackets, closeBracketsKeymap } from "@codemirror/autocomplete";
|
2572
2551
|
import { defaultKeymap, history, historyKeymap, indentWithTab, standardKeymap } from "@codemirror/commands";
|
2573
2552
|
import { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from "@codemirror/language";
|
@@ -2581,7 +2560,7 @@ import { generateName } from "@dxos/display-name";
|
|
2581
2560
|
import { log as log5 } from "@dxos/log";
|
2582
2561
|
import { hexToHue, isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
2583
2562
|
|
2584
|
-
//
|
2563
|
+
// src/extensions/focus.ts
|
2585
2564
|
import { StateEffect as StateEffect5, StateField as StateField6 } from "@codemirror/state";
|
2586
2565
|
import { EditorView as EditorView13 } from "@codemirror/view";
|
2587
2566
|
var focusEffect = StateEffect5.define();
|
@@ -2612,11 +2591,11 @@ var focus = [
|
|
2612
2591
|
})
|
2613
2592
|
];
|
2614
2593
|
|
2615
|
-
//
|
2594
|
+
// src/defaults.ts
|
2616
2595
|
import { EditorView as EditorView14 } from "@codemirror/view";
|
2617
2596
|
import { mx as mx2 } from "@dxos/react-ui-theme";
|
2618
2597
|
|
2619
|
-
//
|
2598
|
+
// src/styles/markdown.ts
|
2620
2599
|
import { mx } from "@dxos/react-ui-theme";
|
2621
2600
|
var headings = {
|
2622
2601
|
1: "text-4xl",
|
@@ -2635,7 +2614,7 @@ var theme = {
|
|
2635
2614
|
}
|
2636
2615
|
};
|
2637
2616
|
|
2638
|
-
//
|
2617
|
+
// src/styles/tokens.ts
|
2639
2618
|
import { tokens } from "@dxos/react-ui-theme";
|
2640
2619
|
import { get } from "@dxos/util";
|
2641
2620
|
var getToken = (path, defaultValue) => {
|
@@ -2645,7 +2624,7 @@ var getToken = (path, defaultValue) => {
|
|
2645
2624
|
var fontBody = getToken("fontFamily.body");
|
2646
2625
|
var fontMono = getToken("fontFamily.mono");
|
2647
2626
|
|
2648
|
-
//
|
2627
|
+
// src/styles/theme.ts
|
2649
2628
|
var defaultTheme = {
|
2650
2629
|
"&": {},
|
2651
2630
|
"&.cm-focused": {
|
@@ -2709,7 +2688,7 @@ var defaultTheme = {
|
|
2709
2688
|
borderLeft: "2px solid var(--dx-cmCursor)"
|
2710
2689
|
},
|
2711
2690
|
".cm-placeholder": {
|
2712
|
-
color: "var(--dx-
|
2691
|
+
color: "var(--dx-placeholder)"
|
2713
2692
|
},
|
2714
2693
|
/**
|
2715
2694
|
* Selection (layer).
|
@@ -2857,7 +2836,7 @@ var defaultTheme = {
|
|
2857
2836
|
}
|
2858
2837
|
};
|
2859
2838
|
|
2860
|
-
//
|
2839
|
+
// src/defaults.ts
|
2861
2840
|
var editorWidth = "!mli-auto is-full max-is-[min(50rem,100%-4rem)]";
|
2862
2841
|
var editorSlots = {
|
2863
2842
|
scroll: {
|
@@ -2881,8 +2860,8 @@ var editorMonospace = EditorView14.theme({
|
|
2881
2860
|
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
2882
2861
|
var stackItemContentEditorClassNames = (role) => mx2("attention-surface dx-focus-ring-inset data-[toolbar=disabled]:pbs-2", role === "section" ? "[&_.cm-scroller]:overflow-hidden [&_.cm-scroller]:min-bs-24" : "min-bs-0");
|
2883
2862
|
|
2884
|
-
//
|
2885
|
-
var __dxlog_file8 = "/
|
2863
|
+
// src/extensions/factories.ts
|
2864
|
+
var __dxlog_file8 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/factories.ts";
|
2886
2865
|
var preventNewline = EditorState.transactionFilter.of((tr) => tr.newDoc.lines > 1 ? [] : tr);
|
2887
2866
|
var defaultBasicOptions = {
|
2888
2867
|
allowMultipleSelections: true,
|
@@ -2958,11 +2937,17 @@ var createBasicExtensions = (_props) => {
|
|
2958
2937
|
].filter(isNotFalsy2))
|
2959
2938
|
].filter(isNotFalsy2);
|
2960
2939
|
};
|
2961
|
-
var
|
2940
|
+
var grow = {
|
2941
|
+
editor: {
|
2942
|
+
className: "is-full bs-full"
|
2943
|
+
}
|
2944
|
+
};
|
2945
|
+
var fullWidth = {
|
2962
2946
|
editor: {
|
2963
|
-
className: "
|
2947
|
+
className: "is-full"
|
2964
2948
|
}
|
2965
2949
|
};
|
2950
|
+
var defaultThemeSlots = grow;
|
2966
2951
|
var createThemeExtensions = ({ themeMode, styles: styles4, syntaxHighlighting: _syntaxHighlighting, slots: _slots } = {}) => {
|
2967
2952
|
const slots = defaultsDeep2({}, _slots, defaultThemeSlots);
|
2968
2953
|
return [
|
@@ -2980,6 +2965,11 @@ var createThemeExtensions = ({ themeMode, styles: styles4, syntaxHighlighting: _
|
|
2980
2965
|
constructor(view) {
|
2981
2966
|
view.scrollDOM.classList.add(slots.scroll.className);
|
2982
2967
|
}
|
2968
|
+
}),
|
2969
|
+
slots.scroller?.className && ViewPlugin10.fromClass(class {
|
2970
|
+
constructor(view) {
|
2971
|
+
view.dom.querySelector(".cm-scroller")?.classList.add(...slots.scroller.className.split(" "));
|
2972
|
+
}
|
2983
2973
|
})
|
2984
2974
|
].filter(isNotFalsy2);
|
2985
2975
|
};
|
@@ -3005,7 +2995,7 @@ var createDataExtensions = ({ id, text, space, identity }) => {
|
|
3005
2995
|
return extensions;
|
3006
2996
|
};
|
3007
2997
|
|
3008
|
-
//
|
2998
|
+
// src/extensions/folding.tsx
|
3009
2999
|
import { codeFolding, foldGutter } from "@codemirror/language";
|
3010
3000
|
import { EditorView as EditorView16 } from "@codemirror/view";
|
3011
3001
|
import React2 from "react";
|
@@ -3043,7 +3033,7 @@ var folding = (_props = {}) => [
|
|
3043
3033
|
})
|
3044
3034
|
];
|
3045
3035
|
|
3046
|
-
//
|
3036
|
+
// src/extensions/hashtag.tsx
|
3047
3037
|
import { Decoration as Decoration8, EditorView as EditorView17, MatchDecorator, ViewPlugin as ViewPlugin11, WidgetType as WidgetType4 } from "@codemirror/view";
|
3048
3038
|
import { getHashColor, mx as mx3 } from "@dxos/react-ui-theme";
|
3049
3039
|
var TagWidget = class extends WidgetType4 {
|
@@ -3086,7 +3076,7 @@ var hashtag = () => [
|
|
3086
3076
|
})
|
3087
3077
|
];
|
3088
3078
|
|
3089
|
-
//
|
3079
|
+
// src/extensions/json.ts
|
3090
3080
|
import { json, jsonParseLinter } from "@codemirror/lang-json";
|
3091
3081
|
import { linter } from "@codemirror/lint";
|
3092
3082
|
import Ajv from "ajv";
|
@@ -3131,7 +3121,7 @@ var schemaLinter = (validate) => (view) => {
|
|
3131
3121
|
}
|
3132
3122
|
};
|
3133
3123
|
|
3134
|
-
//
|
3124
|
+
// src/extensions/listener.ts
|
3135
3125
|
import { EditorView as EditorView18 } from "@codemirror/view";
|
3136
3126
|
var listener = ({ onFocus, onChange }) => {
|
3137
3127
|
const extensions = [];
|
@@ -3145,12 +3135,13 @@ var listener = ({ onFocus, onChange }) => {
|
|
3145
3135
|
return extensions;
|
3146
3136
|
};
|
3147
3137
|
|
3148
|
-
//
|
3138
|
+
// src/extensions/markdown/formatting.ts
|
3149
3139
|
import { snippet } from "@codemirror/autocomplete";
|
3150
3140
|
import { syntaxTree as syntaxTree2 } from "@codemirror/language";
|
3151
3141
|
import { EditorSelection as EditorSelection2 } from "@codemirror/state";
|
3152
3142
|
import { EditorView as EditorView19, keymap as keymap9 } from "@codemirror/view";
|
3153
|
-
import { useMemo as
|
3143
|
+
import { useCallback as useCallback2, useMemo as useMemo2 } from "react";
|
3144
|
+
import { debounceAndThrottle } from "@dxos/async";
|
3154
3145
|
var formattingEquals = (a, b) => a.blockType === b.blockType && a.strong === b.strong && a.emphasis === b.emphasis && a.strikethrough === b.strikethrough && a.code === b.code && a.link === b.link && a.listStyle === b.listStyle && a.blockQuote === b.blockQuote;
|
3155
3146
|
var Inline = /* @__PURE__ */ function(Inline2) {
|
3156
3147
|
Inline2[Inline2["Strong"] = 0] = "Strong";
|
@@ -4238,16 +4229,21 @@ var getFormatting = (state) => {
|
|
4238
4229
|
};
|
4239
4230
|
};
|
4240
4231
|
var useFormattingState = (state) => {
|
4241
|
-
|
4232
|
+
const handleUpdate = useCallback2(debounceAndThrottle((update2) => {
|
4242
4233
|
if (update2.docChanged || update2.selectionSet) {
|
4243
4234
|
Object.entries(getFormatting(update2.state)).forEach(([key, active]) => {
|
4244
4235
|
state[key] = active;
|
4245
4236
|
});
|
4246
4237
|
}
|
4247
|
-
}), [
|
4238
|
+
}, 100), [
|
4239
|
+
state
|
4240
|
+
]);
|
4241
|
+
return useMemo2(() => EditorView19.updateListener.of(handleUpdate), [
|
4242
|
+
handleUpdate
|
4243
|
+
]);
|
4248
4244
|
};
|
4249
4245
|
|
4250
|
-
//
|
4246
|
+
// src/extensions/markdown/action.ts
|
4251
4247
|
var processEditorPayload = (view, { type, data }) => {
|
4252
4248
|
let inlineType, listType;
|
4253
4249
|
switch (type) {
|
@@ -4296,7 +4292,7 @@ var processEditorPayload = (view, { type, data }) => {
|
|
4296
4292
|
});
|
4297
4293
|
};
|
4298
4294
|
|
4299
|
-
//
|
4295
|
+
// src/extensions/markdown/bundle.ts
|
4300
4296
|
import { completionKeymap as completionKeymap2 } from "@codemirror/autocomplete";
|
4301
4297
|
import { defaultKeymap as defaultKeymap2, indentWithTab as indentWithTab2 } from "@codemirror/commands";
|
4302
4298
|
import { markdownLanguage as markdownLanguage3, markdown } from "@codemirror/lang-markdown";
|
@@ -4305,7 +4301,7 @@ import { languages } from "@codemirror/language-data";
|
|
4305
4301
|
import { keymap as keymap10 } from "@codemirror/view";
|
4306
4302
|
import { isNotFalsy as isNotFalsy3 } from "@dxos/util";
|
4307
4303
|
|
4308
|
-
//
|
4304
|
+
// src/extensions/markdown/highlight.ts
|
4309
4305
|
import { markdownLanguage as markdownLanguage2 } from "@codemirror/lang-markdown";
|
4310
4306
|
import { HighlightStyle } from "@codemirror/language";
|
4311
4307
|
import { tags, styleTags, Tag } from "@lezer/highlight";
|
@@ -4484,7 +4480,7 @@ var markdownHighlightStyle = (_options = {}) => {
|
|
4484
4480
|
});
|
4485
4481
|
};
|
4486
4482
|
|
4487
|
-
//
|
4483
|
+
// src/extensions/markdown/bundle.ts
|
4488
4484
|
var createMarkdownExtensions = (options = {}) => {
|
4489
4485
|
return [
|
4490
4486
|
// Main extension.
|
@@ -4519,7 +4515,7 @@ var createMarkdownExtensions = (options = {}) => {
|
|
4519
4515
|
];
|
4520
4516
|
};
|
4521
4517
|
|
4522
|
-
//
|
4518
|
+
// src/extensions/markdown/debug.ts
|
4523
4519
|
import { syntaxTree as syntaxTree3 } from "@codemirror/language";
|
4524
4520
|
import { StateField as StateField7 } from "@codemirror/state";
|
4525
4521
|
var debugTree = (cb) => StateField7.define({
|
@@ -4546,14 +4542,14 @@ var convertTreeToJson = (state) => {
|
|
4546
4542
|
return treeToJson(syntaxTree3(state).cursor());
|
4547
4543
|
};
|
4548
4544
|
|
4549
|
-
//
|
4545
|
+
// src/extensions/markdown/decorate.ts
|
4550
4546
|
import { syntaxTree as syntaxTree7 } from "@codemirror/language";
|
4551
4547
|
import { RangeSetBuilder as RangeSetBuilder6, StateEffect as StateEffect6 } from "@codemirror/state";
|
4552
4548
|
import { EditorView as EditorView23, Decoration as Decoration11, WidgetType as WidgetType7, ViewPlugin as ViewPlugin13 } from "@codemirror/view";
|
4553
4549
|
import { invariant as invariant4 } from "@dxos/invariant";
|
4554
4550
|
import { mx as mx4 } from "@dxos/react-ui-theme";
|
4555
4551
|
|
4556
|
-
//
|
4552
|
+
// src/extensions/markdown/changes.ts
|
4557
4553
|
import { syntaxTree as syntaxTree4 } from "@codemirror/language";
|
4558
4554
|
import { Transaction as Transaction2 } from "@codemirror/state";
|
4559
4555
|
import { ViewPlugin as ViewPlugin12 } from "@codemirror/view";
|
@@ -4697,7 +4693,7 @@ var getValidUrl = (str) => {
|
|
4697
4693
|
}
|
4698
4694
|
};
|
4699
4695
|
|
4700
|
-
//
|
4696
|
+
// src/extensions/markdown/image.ts
|
4701
4697
|
import { syntaxTree as syntaxTree5 } from "@codemirror/language";
|
4702
4698
|
import { StateField as StateField8 } from "@codemirror/state";
|
4703
4699
|
import { Decoration as Decoration9, EditorView as EditorView20, WidgetType as WidgetType5 } from "@codemirror/view";
|
@@ -4786,7 +4782,7 @@ var ImageWidget = class extends WidgetType5 {
|
|
4786
4782
|
}
|
4787
4783
|
};
|
4788
4784
|
|
4789
|
-
//
|
4785
|
+
// src/extensions/markdown/styles.ts
|
4790
4786
|
import { EditorView as EditorView21 } from "@codemirror/view";
|
4791
4787
|
var bulletListIndentationWidth = 24;
|
4792
4788
|
var orderedListIndentationWidth = 36;
|
@@ -4909,7 +4905,7 @@ var formattingStyles = EditorView21.theme({
|
|
4909
4905
|
}
|
4910
4906
|
});
|
4911
4907
|
|
4912
|
-
//
|
4908
|
+
// src/extensions/markdown/table.ts
|
4913
4909
|
import { syntaxTree as syntaxTree6 } from "@codemirror/language";
|
4914
4910
|
import { RangeSetBuilder as RangeSetBuilder5, StateField as StateField9 } from "@codemirror/state";
|
4915
4911
|
import { Decoration as Decoration10, EditorView as EditorView22, WidgetType as WidgetType6 } from "@codemirror/view";
|
@@ -5007,8 +5003,8 @@ var TableWidget = class extends WidgetType6 {
|
|
5007
5003
|
}
|
5008
5004
|
};
|
5009
5005
|
|
5010
|
-
//
|
5011
|
-
var __dxlog_file9 = "/
|
5006
|
+
// src/extensions/markdown/decorate.ts
|
5007
|
+
var __dxlog_file9 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts";
|
5012
5008
|
var Unicode = {
|
5013
5009
|
emDash: "\u2014",
|
5014
5010
|
bullet: "\u2022",
|
@@ -5462,7 +5458,7 @@ var decorateMarkdown = (options = {}) => {
|
|
5462
5458
|
];
|
5463
5459
|
};
|
5464
5460
|
|
5465
|
-
//
|
5461
|
+
// src/extensions/markdown/link.ts
|
5466
5462
|
import { syntaxTree as syntaxTree8 } from "@codemirror/language";
|
5467
5463
|
import { hoverTooltip as hoverTooltip2 } from "@codemirror/view";
|
5468
5464
|
import { tooltipContent } from "@dxos/react-ui-theme";
|
@@ -5504,10 +5500,10 @@ var linkTooltip = (renderTooltip) => {
|
|
5504
5500
|
});
|
5505
5501
|
};
|
5506
5502
|
|
5507
|
-
//
|
5503
|
+
// src/extensions/mention.ts
|
5508
5504
|
import { autocompletion as autocompletion2 } from "@codemirror/autocomplete";
|
5509
5505
|
import { log as log6 } from "@dxos/log";
|
5510
|
-
var __dxlog_file10 = "/
|
5506
|
+
var __dxlog_file10 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/mention.ts";
|
5511
5507
|
var mention = ({ debug, onSearch }) => {
|
5512
5508
|
return autocompletion2({
|
5513
5509
|
// TODO(burdon): Not working.
|
@@ -5542,23 +5538,10 @@ var mention = ({ debug, onSearch }) => {
|
|
5542
5538
|
});
|
5543
5539
|
};
|
5544
5540
|
|
5545
|
-
//
|
5541
|
+
// src/extensions/modes.ts
|
5546
5542
|
import { keymap as keymap11 } from "@codemirror/view";
|
5547
5543
|
import { vim } from "@replit/codemirror-vim";
|
5548
5544
|
import { vscodeKeymap } from "@replit/codemirror-vscode-keymap";
|
5549
|
-
import { Schema } from "effect";
|
5550
|
-
var EditorViewModes = [
|
5551
|
-
"preview",
|
5552
|
-
"readonly",
|
5553
|
-
"source"
|
5554
|
-
];
|
5555
|
-
var EditorViewMode = Schema.Union(...EditorViewModes.map((mode) => Schema.Literal(mode)));
|
5556
|
-
var EditorInputModes = [
|
5557
|
-
"default",
|
5558
|
-
"vim",
|
5559
|
-
"vscode"
|
5560
|
-
];
|
5561
|
-
var EditorInputMode = Schema.Union(...EditorInputModes.map((mode) => Schema.Literal(mode)));
|
5562
5545
|
var editorInputMode = singleValueFacet({});
|
5563
5546
|
var InputModeExtensions = {
|
5564
5547
|
default: [],
|
@@ -5588,21 +5571,21 @@ var InputModeExtensions = {
|
|
5588
5571
|
]
|
5589
5572
|
};
|
5590
5573
|
|
5591
|
-
//
|
5574
|
+
// src/extensions/outliner/commands.ts
|
5592
5575
|
import { indentMore } from "@codemirror/commands";
|
5593
5576
|
import { getIndentUnit } from "@codemirror/language";
|
5594
5577
|
import { EditorSelection as EditorSelection3 } from "@codemirror/state";
|
5595
5578
|
import { keymap as keymap12 } from "@codemirror/view";
|
5596
5579
|
|
5597
|
-
//
|
5580
|
+
// src/extensions/outliner/selection.ts
|
5598
5581
|
import { Compartment, Facet as Facet3 } from "@codemirror/state";
|
5599
5582
|
|
5600
|
-
//
|
5583
|
+
// src/extensions/outliner/tree.ts
|
5601
5584
|
import { syntaxTree as syntaxTree9 } from "@codemirror/language";
|
5602
5585
|
import { StateField as StateField10 } from "@codemirror/state";
|
5603
5586
|
import { Facet as Facet2 } from "@codemirror/state";
|
5604
5587
|
import { invariant as invariant5 } from "@dxos/invariant";
|
5605
|
-
var __dxlog_file11 = "/
|
5588
|
+
var __dxlog_file11 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/outliner/tree.ts";
|
5606
5589
|
var itemToJSON = ({ type, index, level, lineRange, contentRange, children }) => {
|
5607
5590
|
return {
|
5608
5591
|
type,
|
@@ -5896,7 +5879,7 @@ var outlinerTree = (options = {}) => {
|
|
5896
5879
|
];
|
5897
5880
|
};
|
5898
5881
|
|
5899
|
-
//
|
5882
|
+
// src/extensions/outliner/selection.ts
|
5900
5883
|
var getSelection = (state) => state.selection.main;
|
5901
5884
|
var selectionEquals = (a, b) => a.length === b.length && a.every((i) => b.includes(i));
|
5902
5885
|
var selectionFacet = Facet3.define({
|
@@ -5926,7 +5909,7 @@ var selectDown = (view) => {
|
|
5926
5909
|
return true;
|
5927
5910
|
};
|
5928
5911
|
|
5929
|
-
//
|
5912
|
+
// src/extensions/outliner/commands.ts
|
5930
5913
|
var indentItemMore = (view) => {
|
5931
5914
|
const pos = getSelection(view.state).from;
|
5932
5915
|
const tree = view.state.facet(treeFacet);
|
@@ -6160,16 +6143,16 @@ var commands = () => keymap12.of([
|
|
6160
6143
|
}
|
6161
6144
|
]);
|
6162
6145
|
|
6163
|
-
//
|
6146
|
+
// src/extensions/outliner/outliner.ts
|
6164
6147
|
import { Prec as Prec4 } from "@codemirror/state";
|
6165
6148
|
import { Decoration as Decoration12, EditorView as EditorView24, ViewPlugin as ViewPlugin15 } from "@codemirror/view";
|
6166
6149
|
import { mx as mx5 } from "@dxos/react-ui-theme";
|
6167
6150
|
|
6168
|
-
//
|
6151
|
+
// src/extensions/outliner/editor.ts
|
6169
6152
|
import { EditorSelection as EditorSelection4, EditorState as EditorState2 } from "@codemirror/state";
|
6170
6153
|
import { ViewPlugin as ViewPlugin14 } from "@codemirror/view";
|
6171
6154
|
import { log as log7 } from "@dxos/log";
|
6172
|
-
var __dxlog_file12 = "/
|
6155
|
+
var __dxlog_file12 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/outliner/editor.ts";
|
6173
6156
|
var LIST_ITEM_REGEX = /^\s*- (\[ \]|\[x\])? /;
|
6174
6157
|
var initialize = () => {
|
6175
6158
|
return ViewPlugin14.fromClass(class {
|
@@ -6354,7 +6337,7 @@ var editor = () => [
|
|
6354
6337
|
})
|
6355
6338
|
];
|
6356
6339
|
|
6357
|
-
//
|
6340
|
+
// src/extensions/outliner/outliner.ts
|
6358
6341
|
var outliner = (options = {}) => [
|
6359
6342
|
// Commands.
|
6360
6343
|
Prec4.highest(commands()),
|
@@ -6446,7 +6429,7 @@ var decorations = () => [
|
|
6446
6429
|
}))
|
6447
6430
|
];
|
6448
6431
|
|
6449
|
-
//
|
6432
|
+
// src/extensions/preview/preview.ts
|
6450
6433
|
import "@dxos/lit-ui/dx-ref-tag.pcss";
|
6451
6434
|
import { syntaxTree as syntaxTree10 } from "@codemirror/language";
|
6452
6435
|
import { RangeSetBuilder as RangeSetBuilder7, StateField as StateField11 } from "@codemirror/state";
|
@@ -6554,7 +6537,7 @@ var PreviewBlockWidget = class extends WidgetType8 {
|
|
6554
6537
|
}
|
6555
6538
|
};
|
6556
6539
|
|
6557
|
-
//
|
6540
|
+
// src/extensions/typewriter.ts
|
6558
6541
|
import { keymap as keymap13 } from "@codemirror/view";
|
6559
6542
|
var defaultItems = [
|
6560
6543
|
"hello world!",
|
@@ -6611,76 +6594,283 @@ var typewriter = ({ delay = 75, items = defaultItems } = {}) => {
|
|
6611
6594
|
];
|
6612
6595
|
};
|
6613
6596
|
|
6614
|
-
//
|
6615
|
-
var
|
6616
|
-
|
6617
|
-
|
6618
|
-
|
6619
|
-
});
|
6620
|
-
|
6621
|
-
|
6622
|
-
|
6623
|
-
|
6624
|
-
|
6625
|
-
|
6626
|
-
|
6627
|
-
|
6628
|
-
|
6629
|
-
|
6630
|
-
|
6631
|
-
|
6632
|
-
|
6633
|
-
|
6634
|
-
|
6635
|
-
|
6636
|
-
|
6637
|
-
|
6638
|
-
|
6639
|
-
|
6640
|
-
|
6641
|
-
|
6642
|
-
|
6643
|
-
|
6644
|
-
|
6645
|
-
|
6646
|
-
|
6647
|
-
|
6648
|
-
|
6649
|
-
|
6650
|
-
|
6651
|
-
|
6652
|
-
|
6653
|
-
|
6654
|
-
|
6655
|
-
|
6656
|
-
|
6657
|
-
|
6658
|
-
|
6659
|
-
|
6660
|
-
|
6661
|
-
|
6662
|
-
|
6663
|
-
}
|
6664
|
-
|
6665
|
-
|
6666
|
-
|
6667
|
-
|
6668
|
-
|
6669
|
-
|
6670
|
-
|
6671
|
-
|
6672
|
-
|
6673
|
-
|
6674
|
-
|
6675
|
-
|
6676
|
-
|
6677
|
-
|
6678
|
-
|
6679
|
-
};
|
6680
|
-
|
6681
|
-
|
6682
|
-
|
6683
|
-
|
6597
|
+
// src/hooks/useTextEditor.ts
|
6598
|
+
var __dxlog_file13 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
6599
|
+
var instanceCount = 0;
|
6600
|
+
var useTextEditor = (props = {}, deps = []) => {
|
6601
|
+
const { id, doc, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = useMemo3(() => getProviderValue(props), deps ?? []);
|
6602
|
+
const [instanceId] = useState2(() => `text-editor-${++instanceCount}`);
|
6603
|
+
const [view, setView] = useState2();
|
6604
|
+
const parentRef = useRef2(null);
|
6605
|
+
useEffect2(() => {
|
6606
|
+
let view2;
|
6607
|
+
if (parentRef.current) {
|
6608
|
+
log8("create", {
|
6609
|
+
id,
|
6610
|
+
instanceId,
|
6611
|
+
doc: initialValue?.length ?? 0
|
6612
|
+
}, {
|
6613
|
+
F: __dxlog_file13,
|
6614
|
+
L: 75,
|
6615
|
+
S: void 0,
|
6616
|
+
C: (f, a) => f(...a)
|
6617
|
+
});
|
6618
|
+
let initialSelection;
|
6619
|
+
if (selection?.anchor && initialValue?.length) {
|
6620
|
+
if (selection.anchor <= initialValue.length && (selection?.head ?? 0) <= initialValue.length) {
|
6621
|
+
initialSelection = selection;
|
6622
|
+
}
|
6623
|
+
} else if (moveToEndOfLine && selection === void 0) {
|
6624
|
+
const index = initialValue?.indexOf("\n");
|
6625
|
+
const anchor = !index || index === -1 ? 0 : index;
|
6626
|
+
initialSelection = {
|
6627
|
+
anchor
|
6628
|
+
};
|
6629
|
+
}
|
6630
|
+
const state = EditorState3.create({
|
6631
|
+
doc: doc ?? initialValue,
|
6632
|
+
// selection: initialSelection,
|
6633
|
+
extensions: [
|
6634
|
+
id && documentId.of(id),
|
6635
|
+
extensions,
|
6636
|
+
// NOTE: This doesn't catch errors in keymap functions.
|
6637
|
+
EditorView26.exceptionSink.of((err) => {
|
6638
|
+
log8.catch(err, void 0, {
|
6639
|
+
F: __dxlog_file13,
|
6640
|
+
L: 97,
|
6641
|
+
S: void 0,
|
6642
|
+
C: (f, a) => f(...a)
|
6643
|
+
});
|
6644
|
+
})
|
6645
|
+
].filter(isNotFalsy4)
|
6646
|
+
});
|
6647
|
+
view2 = new EditorView26({
|
6648
|
+
parent: parentRef.current,
|
6649
|
+
state,
|
6650
|
+
scrollTo: scrollTo ? EditorView26.scrollIntoView(scrollTo, {
|
6651
|
+
yMargin: 96
|
6652
|
+
}) : void 0,
|
6653
|
+
dispatchTransactions: debug ? debugDispatcher : void 0
|
6654
|
+
});
|
6655
|
+
if (moveToEndOfLine && !initialSelection) {
|
6656
|
+
const { to } = view2.state.doc.lineAt(0);
|
6657
|
+
if (to) {
|
6658
|
+
view2.dispatch({
|
6659
|
+
selection: {
|
6660
|
+
anchor: to
|
6661
|
+
}
|
6662
|
+
});
|
6663
|
+
}
|
6664
|
+
}
|
6665
|
+
setView(view2);
|
6666
|
+
}
|
6667
|
+
return () => {
|
6668
|
+
log8("destroy", {
|
6669
|
+
id
|
6670
|
+
}, {
|
6671
|
+
F: __dxlog_file13,
|
6672
|
+
L: 134,
|
6673
|
+
S: void 0,
|
6674
|
+
C: (f, a) => f(...a)
|
6675
|
+
});
|
6676
|
+
view2?.destroy();
|
6677
|
+
};
|
6678
|
+
}, deps);
|
6679
|
+
useEffect2(() => {
|
6680
|
+
if (view) {
|
6681
|
+
if (scrollTo || selection) {
|
6682
|
+
if (selection && selection.anchor > view.state.doc.length) {
|
6683
|
+
log8.warn("invalid selection", {
|
6684
|
+
length: view.state.doc.length,
|
6685
|
+
scrollTo,
|
6686
|
+
selection
|
6687
|
+
}, {
|
6688
|
+
F: __dxlog_file13,
|
6689
|
+
L: 143,
|
6690
|
+
S: void 0,
|
6691
|
+
C: (f, a) => f(...a)
|
6692
|
+
});
|
6693
|
+
return;
|
6694
|
+
}
|
6695
|
+
view.dispatch(createEditorStateTransaction({
|
6696
|
+
scrollTo,
|
6697
|
+
selection
|
6698
|
+
}));
|
6699
|
+
}
|
6700
|
+
}
|
6701
|
+
}, [
|
6702
|
+
view,
|
6703
|
+
scrollTo,
|
6704
|
+
selection
|
6705
|
+
]);
|
6706
|
+
useEffect2(() => {
|
6707
|
+
if (view && autoFocus) {
|
6708
|
+
view.focus();
|
6709
|
+
}
|
6710
|
+
}, [
|
6711
|
+
autoFocus,
|
6712
|
+
view
|
6713
|
+
]);
|
6714
|
+
const focusableGroupAttrs = useFocusableGroup({
|
6715
|
+
tabBehavior: "limited",
|
6716
|
+
ignoreDefaultKeydown: {
|
6717
|
+
Escape: view?.state.facet(editorInputMode).noTabster
|
6718
|
+
}
|
6719
|
+
});
|
6720
|
+
const handleKeyUp = useCallback3((event) => {
|
6721
|
+
const { key, target, currentTarget } = event;
|
6722
|
+
if (target === currentTarget) {
|
6723
|
+
switch (key) {
|
6724
|
+
case "Enter": {
|
6725
|
+
view?.focus();
|
6726
|
+
break;
|
6727
|
+
}
|
6728
|
+
}
|
6729
|
+
}
|
6730
|
+
}, [
|
6731
|
+
view
|
6732
|
+
]);
|
6733
|
+
return {
|
6734
|
+
parentRef,
|
6735
|
+
view,
|
6736
|
+
focusAttributes: {
|
6737
|
+
tabIndex: 0,
|
6738
|
+
...focusableGroupAttrs,
|
6739
|
+
onKeyUp: handleKeyUp
|
6740
|
+
}
|
6741
|
+
};
|
6742
|
+
};
|
6743
|
+
|
6744
|
+
// src/components/Editor/Editor.tsx
|
6745
|
+
var Editor = /* @__PURE__ */ forwardRef(({ classNames, id, text, ...props }, forwardedRef) => {
|
6746
|
+
var _effect = _useSignals();
|
6747
|
+
try {
|
6748
|
+
const { themeMode } = useThemeContext();
|
6749
|
+
const { parentRef, focusAttributes, view } = useTextEditor(() => ({
|
6750
|
+
id,
|
6751
|
+
initialValue: text.content,
|
6752
|
+
...props
|
6753
|
+
}), [
|
6754
|
+
id,
|
6755
|
+
text,
|
6756
|
+
themeMode
|
6757
|
+
]);
|
6758
|
+
useImperativeHandle(forwardedRef, () => view, [
|
6759
|
+
view
|
6760
|
+
]);
|
6761
|
+
return /* @__PURE__ */ React3.createElement("div", {
|
6762
|
+
ref: parentRef,
|
6763
|
+
className: mx6(classNames),
|
6764
|
+
...focusAttributes
|
6765
|
+
});
|
6766
|
+
} finally {
|
6767
|
+
_effect.f();
|
6768
|
+
}
|
6769
|
+
});
|
6770
|
+
|
6771
|
+
// src/components/EditorToolbar/EditorToolbar.tsx
|
6772
|
+
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
6773
|
+
import { Rx } from "@effect-rx/rx-react";
|
6774
|
+
import React4, { memo, useMemo as useMemo5 } from "react";
|
6775
|
+
import { rxFromSignal } from "@dxos/app-graph";
|
6776
|
+
import { ElevationProvider } from "@dxos/react-ui";
|
6777
|
+
import { MenuProvider, ToolbarMenu, createGapSeparator, useMenuActions } from "@dxos/react-ui-menu";
|
6778
|
+
|
6779
|
+
// src/components/EditorToolbar/util.ts
|
6780
|
+
import { useMemo as useMemo4 } from "react";
|
6781
|
+
import { live } from "@dxos/live-object";
|
6782
|
+
import { createMenuAction, createMenuItemGroup } from "@dxos/react-ui-menu";
|
6783
|
+
var useEditorToolbarState = (initialState = {}) => {
|
6784
|
+
return useMemo4(() => live(initialState), []);
|
6785
|
+
};
|
6786
|
+
var createEditorAction = (id, invoke, properties) => {
|
6787
|
+
const { label = [
|
6788
|
+
`${id} label`,
|
6789
|
+
{
|
6790
|
+
ns: translationKey
|
6791
|
+
}
|
6792
|
+
], ...rest } = properties;
|
6793
|
+
return createMenuAction(id, invoke, {
|
6794
|
+
label,
|
6795
|
+
...rest
|
6796
|
+
});
|
6797
|
+
};
|
6798
|
+
var createEditorActionGroup = (id, props, icon) => createMenuItemGroup(id, {
|
6799
|
+
icon,
|
6800
|
+
iconOnly: true,
|
6801
|
+
...props
|
6802
|
+
});
|
6803
|
+
|
6804
|
+
// src/components/EditorToolbar/blocks.ts
|
6805
|
+
var createBlockGroupAction = (value) => createEditorActionGroup("block", {
|
6806
|
+
variant: "toggleGroup",
|
6807
|
+
selectCardinality: "single",
|
6808
|
+
value
|
6809
|
+
});
|
6810
|
+
var createBlockActions = (value, getView, blankLine) => Object.entries({
|
6811
|
+
blockquote: "ph--quotes--regular",
|
6812
|
+
codeblock: "ph--code-block--regular",
|
6813
|
+
table: "ph--table--regular"
|
6814
|
+
}).map(([type, icon]) => {
|
6815
|
+
const checked = type === value;
|
6816
|
+
return createEditorAction(type, () => {
|
6817
|
+
const view = getView();
|
6818
|
+
if (!view) {
|
6819
|
+
return;
|
6820
|
+
}
|
6821
|
+
switch (type) {
|
6822
|
+
case "blockquote":
|
6823
|
+
checked ? removeBlockquote(view) : addBlockquote(view);
|
6824
|
+
break;
|
6825
|
+
case "codeblock":
|
6826
|
+
checked ? removeCodeblock(view) : addCodeblock(view);
|
6827
|
+
break;
|
6828
|
+
case "table":
|
6829
|
+
insertTable(view);
|
6830
|
+
break;
|
6831
|
+
}
|
6832
|
+
}, {
|
6833
|
+
checked,
|
6834
|
+
...type === "table" && {
|
6835
|
+
disabled: !!blankLine
|
6836
|
+
},
|
6837
|
+
icon
|
6838
|
+
});
|
6839
|
+
});
|
6840
|
+
var createBlocks = (state, getView) => {
|
6841
|
+
const value = state?.blockQuote ? "blockquote" : state.blockType ?? "";
|
6842
|
+
const blockGroupAction = createBlockGroupAction(value);
|
6843
|
+
const blockActions = createBlockActions(value, getView, state.blankLine);
|
6844
|
+
return {
|
6845
|
+
nodes: [
|
6846
|
+
blockGroupAction,
|
6847
|
+
...blockActions
|
6848
|
+
],
|
6849
|
+
edges: [
|
6850
|
+
{
|
6851
|
+
source: "root",
|
6852
|
+
target: "block"
|
6853
|
+
},
|
6854
|
+
...blockActions.map(({ id }) => ({
|
6855
|
+
source: blockGroupAction.id,
|
6856
|
+
target: id
|
6857
|
+
}))
|
6858
|
+
]
|
6859
|
+
};
|
6860
|
+
};
|
6861
|
+
|
6862
|
+
// src/components/EditorToolbar/formatting.ts
|
6863
|
+
var formats = {
|
6864
|
+
strong: "ph--text-b--regular",
|
6865
|
+
emphasis: "ph--text-italic--regular",
|
6866
|
+
strikethrough: "ph--text-strikethrough--regular",
|
6867
|
+
code: "ph--code--regular",
|
6868
|
+
link: "ph--link--regular"
|
6869
|
+
};
|
6870
|
+
var createFormattingGroup = (formatting) => createEditorActionGroup("formatting", {
|
6871
|
+
variant: "toggleGroup",
|
6872
|
+
selectCardinality: "multiple",
|
6873
|
+
value: Object.keys(formats).filter((key) => !!formatting[key])
|
6684
6874
|
});
|
6685
6875
|
var createFormattingActions = (formatting, getView) => Object.entries(formats).map(([type, icon]) => {
|
6686
6876
|
const checked = !!formatting[type];
|
@@ -6721,7 +6911,7 @@ var createFormatting = (state, getView) => {
|
|
6721
6911
|
};
|
6722
6912
|
};
|
6723
6913
|
|
6724
|
-
//
|
6914
|
+
// src/components/EditorToolbar/headings.ts
|
6725
6915
|
var createHeadingGroupAction = (value) => createEditorActionGroup("heading", {
|
6726
6916
|
variant: "dropdownMenu",
|
6727
6917
|
applyActive: true,
|
@@ -6776,7 +6966,7 @@ var createHeadings = (state, getView) => {
|
|
6776
6966
|
};
|
6777
6967
|
};
|
6778
6968
|
|
6779
|
-
//
|
6969
|
+
// src/components/EditorToolbar/image.ts
|
6780
6970
|
var createImageUploadAction = (onImageUpload) => createEditorAction("image", onImageUpload, {
|
6781
6971
|
testId: "editor.toolbar.image",
|
6782
6972
|
icon: "ph--image-square--regular"
|
@@ -6793,7 +6983,7 @@ var createImageUpload = (onImageUpload) => ({
|
|
6793
6983
|
]
|
6794
6984
|
});
|
6795
6985
|
|
6796
|
-
//
|
6986
|
+
// src/components/EditorToolbar/lists.ts
|
6797
6987
|
var listStyles = {
|
6798
6988
|
bullet: "ph--list-bullets--regular",
|
6799
6989
|
ordered: "ph--list-numbers--regular",
|
@@ -6844,7 +7034,7 @@ var createLists = (state, getView) => {
|
|
6844
7034
|
};
|
6845
7035
|
};
|
6846
7036
|
|
6847
|
-
//
|
7037
|
+
// src/components/EditorToolbar/search.ts
|
6848
7038
|
import { openSearchPanel } from "@codemirror/search";
|
6849
7039
|
var createSearchAction = (getView) => createEditorAction("search", () => openSearchPanel(getView()), {
|
6850
7040
|
testId: "editor.toolbar.search",
|
@@ -6862,7 +7052,7 @@ var createSearch = (getView) => ({
|
|
6862
7052
|
]
|
6863
7053
|
});
|
6864
7054
|
|
6865
|
-
//
|
7055
|
+
// src/components/EditorToolbar/view-mode.ts
|
6866
7056
|
var createViewModeGroupAction = (value) => createEditorActionGroup("viewMode", {
|
6867
7057
|
variant: "dropdownMenu",
|
6868
7058
|
applyActive: true,
|
@@ -6908,7 +7098,7 @@ var createViewMode = (state, onViewModeChange) => {
|
|
6908
7098
|
};
|
6909
7099
|
};
|
6910
7100
|
|
6911
|
-
//
|
7101
|
+
// src/components/EditorToolbar/EditorToolbar.tsx
|
6912
7102
|
var createToolbar = ({ getView, state, customActions, ...features }) => {
|
6913
7103
|
return Rx.make((get2) => {
|
6914
7104
|
const nodes = [];
|
@@ -6963,7 +7153,7 @@ var createToolbar = ({ getView, state, customActions, ...features }) => {
|
|
6963
7153
|
});
|
6964
7154
|
};
|
6965
7155
|
var useEditorToolbarActionGraph = (props) => {
|
6966
|
-
const menuCreator =
|
7156
|
+
const menuCreator = useMemo5(() => createToolbar({
|
6967
7157
|
getView: props.getView,
|
6968
7158
|
state: props.state,
|
6969
7159
|
customActions: props.customActions,
|
@@ -6989,15 +7179,15 @@ var useEditorToolbarActionGraph = (props) => {
|
|
6989
7179
|
return useMenuActions(menuCreator);
|
6990
7180
|
};
|
6991
7181
|
var EditorToolbar = /* @__PURE__ */ memo(({ classNames, attendableId, role, ...props }) => {
|
6992
|
-
var _effect =
|
7182
|
+
var _effect = _useSignals2();
|
6993
7183
|
try {
|
6994
7184
|
const menuProps = useEditorToolbarActionGraph(props);
|
6995
|
-
return /* @__PURE__ */
|
7185
|
+
return /* @__PURE__ */ React4.createElement(ElevationProvider, {
|
6996
7186
|
elevation: role === "section" ? "positioned" : "base"
|
6997
|
-
}, /* @__PURE__ */
|
7187
|
+
}, /* @__PURE__ */ React4.createElement(MenuProvider, {
|
6998
7188
|
...menuProps,
|
6999
7189
|
attendableId
|
7000
|
-
}, /* @__PURE__ */
|
7190
|
+
}, /* @__PURE__ */ React4.createElement(ToolbarMenu, {
|
7001
7191
|
classNames,
|
7002
7192
|
textBlockWidth: true
|
7003
7193
|
})));
|
@@ -7006,16 +7196,16 @@ var EditorToolbar = /* @__PURE__ */ memo(({ classNames, attendableId, role, ...p
|
|
7006
7196
|
}
|
7007
7197
|
});
|
7008
7198
|
|
7009
|
-
//
|
7010
|
-
import { useSignals as
|
7011
|
-
import
|
7012
|
-
import { Icon as Icon2, Popover, toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
|
7199
|
+
// src/components/Popover/CommandMenu.tsx
|
7200
|
+
import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
|
7201
|
+
import React5, { useCallback as useCallback4, useEffect as useEffect3, useRef as useRef3 } from "react";
|
7202
|
+
import { Icon as Icon2, Popover, toLocalizedString, useThemeContext as useThemeContext2, useTranslation } from "@dxos/react-ui";
|
7013
7203
|
var CommandMenu = ({ groups, currentItem, onSelect }) => {
|
7014
|
-
var _effect =
|
7204
|
+
var _effect = _useSignals3();
|
7015
7205
|
try {
|
7016
|
-
const { tx } =
|
7206
|
+
const { tx } = useThemeContext2();
|
7017
7207
|
const groupsWithItems = groups.filter((group) => group.items.length > 0);
|
7018
|
-
return /* @__PURE__ */
|
7208
|
+
return /* @__PURE__ */ React5.createElement(Popover.Portal, null, /* @__PURE__ */ React5.createElement(Popover.Content, {
|
7019
7209
|
align: "start",
|
7020
7210
|
onOpenAutoFocus: (event) => event.preventDefault(),
|
7021
7211
|
classNames: tx("menu.content", "menu--exotic-unfocusable", {
|
@@ -7023,15 +7213,15 @@ var CommandMenu = ({ groups, currentItem, onSelect }) => {
|
|
7023
7213
|
}, [
|
7024
7214
|
"max-h-[300px] overflow-y-auto"
|
7025
7215
|
])
|
7026
|
-
}, /* @__PURE__ */
|
7216
|
+
}, /* @__PURE__ */ React5.createElement(Popover.Viewport, {
|
7027
7217
|
classNames: tx("menu.viewport", "menu__viewport--exotic-unfocusable", {})
|
7028
|
-
}, /* @__PURE__ */
|
7218
|
+
}, /* @__PURE__ */ React5.createElement("ul", null, groupsWithItems.map((group, index) => /* @__PURE__ */ React5.createElement(React5.Fragment, {
|
7029
7219
|
key: group.id
|
7030
|
-
}, /* @__PURE__ */
|
7220
|
+
}, /* @__PURE__ */ React5.createElement(CommandGroup, {
|
7031
7221
|
group,
|
7032
7222
|
currentItem,
|
7033
7223
|
onSelect
|
7034
|
-
}), index < groupsWithItems.length - 1 && /* @__PURE__ */
|
7224
|
+
}), index < groupsWithItems.length - 1 && /* @__PURE__ */ React5.createElement("div", {
|
7035
7225
|
className: tx("menu.separator", "menu__item", {})
|
7036
7226
|
})))))));
|
7037
7227
|
} finally {
|
@@ -7039,13 +7229,13 @@ var CommandMenu = ({ groups, currentItem, onSelect }) => {
|
|
7039
7229
|
}
|
7040
7230
|
};
|
7041
7231
|
var CommandGroup = ({ group, currentItem, onSelect }) => {
|
7042
|
-
var _effect =
|
7232
|
+
var _effect = _useSignals3();
|
7043
7233
|
try {
|
7044
|
-
const { tx } =
|
7234
|
+
const { tx } = useThemeContext2();
|
7045
7235
|
const { t } = useTranslation();
|
7046
|
-
return /* @__PURE__ */
|
7236
|
+
return /* @__PURE__ */ React5.createElement(React5.Fragment, null, group.label && /* @__PURE__ */ React5.createElement("div", {
|
7047
7237
|
className: tx("menu.groupLabel", "menu__group__label", {})
|
7048
|
-
}, /* @__PURE__ */
|
7238
|
+
}, /* @__PURE__ */ React5.createElement("span", null, toLocalizedString(group.label, t))), group.items.map((item) => /* @__PURE__ */ React5.createElement(CommandItem, {
|
7049
7239
|
key: item.id,
|
7050
7240
|
item,
|
7051
7241
|
current: currentItem === item.id,
|
@@ -7056,16 +7246,16 @@ var CommandGroup = ({ group, currentItem, onSelect }) => {
|
|
7056
7246
|
}
|
7057
7247
|
};
|
7058
7248
|
var CommandItem = ({ item, current, onSelect }) => {
|
7059
|
-
var _effect =
|
7249
|
+
var _effect = _useSignals3();
|
7060
7250
|
try {
|
7061
|
-
const ref =
|
7062
|
-
const { tx } =
|
7251
|
+
const ref = useRef3(null);
|
7252
|
+
const { tx } = useThemeContext2();
|
7063
7253
|
const { t } = useTranslation();
|
7064
|
-
const handleSelect =
|
7254
|
+
const handleSelect = useCallback4(() => onSelect(item), [
|
7065
7255
|
item,
|
7066
7256
|
onSelect
|
7067
7257
|
]);
|
7068
|
-
|
7258
|
+
useEffect3(() => {
|
7069
7259
|
if (current && ref.current) {
|
7070
7260
|
ref.current.scrollIntoView({
|
7071
7261
|
behavior: "smooth",
|
@@ -7075,16 +7265,16 @@ var CommandItem = ({ item, current, onSelect }) => {
|
|
7075
7265
|
}, [
|
7076
7266
|
current
|
7077
7267
|
]);
|
7078
|
-
return /* @__PURE__ */
|
7268
|
+
return /* @__PURE__ */ React5.createElement("li", {
|
7079
7269
|
ref,
|
7080
7270
|
className: tx("menu.item", "menu__item--exotic-unfocusable", {}, [
|
7081
7271
|
current && "bg-hoverSurface"
|
7082
7272
|
]),
|
7083
7273
|
onClick: handleSelect
|
7084
|
-
}, item.icon && /* @__PURE__ */
|
7274
|
+
}, item.icon && /* @__PURE__ */ React5.createElement(Icon2, {
|
7085
7275
|
icon: item.icon,
|
7086
7276
|
size: 5
|
7087
|
-
}), /* @__PURE__ */
|
7277
|
+
}), /* @__PURE__ */ React5.createElement("span", {
|
7088
7278
|
className: "grow truncate"
|
7089
7279
|
}, toLocalizedString(item.label, t)));
|
7090
7280
|
} finally {
|
@@ -7271,21 +7461,21 @@ var linkSlashCommands = {
|
|
7271
7461
|
]
|
7272
7462
|
};
|
7273
7463
|
|
7274
|
-
//
|
7275
|
-
import { useSignals as
|
7464
|
+
// src/components/Popover/RefPopover.tsx
|
7465
|
+
import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
|
7276
7466
|
import { createContext } from "@radix-ui/react-context";
|
7277
|
-
import
|
7467
|
+
import React6, { useRef as useRef4, useState as useState3, useEffect as useEffect4, useCallback as useCallback5, forwardRef as forwardRef2 } from "react";
|
7278
7468
|
import { addEventListener as addEventListener2 } from "@dxos/async";
|
7279
7469
|
import { Popover as Popover2 } from "@dxos/react-ui";
|
7280
7470
|
var customEventOptions = {
|
7281
7471
|
capture: true,
|
7282
7472
|
passive: false
|
7283
7473
|
};
|
7284
|
-
var RefPopover = /* @__PURE__ */
|
7285
|
-
var _effect =
|
7474
|
+
var RefPopover = /* @__PURE__ */ forwardRef2(({ children, open, onOpenChange, modal, onActivate }, ref) => {
|
7475
|
+
var _effect = _useSignals4();
|
7286
7476
|
try {
|
7287
|
-
const [rootRef, setRootRef] =
|
7288
|
-
|
7477
|
+
const [rootRef, setRootRef] = useState3(null);
|
7478
|
+
useEffect4(() => {
|
7289
7479
|
if (!rootRef || !onActivate) {
|
7290
7480
|
return;
|
7291
7481
|
}
|
@@ -7294,13 +7484,13 @@ var RefPopover = /* @__PURE__ */ forwardRef(({ children, open, onOpenChange, mod
|
|
7294
7484
|
rootRef,
|
7295
7485
|
onActivate
|
7296
7486
|
]);
|
7297
|
-
return /* @__PURE__ */
|
7487
|
+
return /* @__PURE__ */ React6.createElement(Popover2.Root, {
|
7298
7488
|
open,
|
7299
7489
|
onOpenChange,
|
7300
7490
|
modal
|
7301
|
-
}, /* @__PURE__ */
|
7491
|
+
}, /* @__PURE__ */ React6.createElement(Popover2.VirtualTrigger, {
|
7302
7492
|
virtualRef: ref
|
7303
|
-
}), /* @__PURE__ */
|
7493
|
+
}), /* @__PURE__ */ React6.createElement("div", {
|
7304
7494
|
role: "none",
|
7305
7495
|
className: "contents",
|
7306
7496
|
ref: setRootRef
|
@@ -7312,12 +7502,12 @@ var RefPopover = /* @__PURE__ */ forwardRef(({ children, open, onOpenChange, mod
|
|
7312
7502
|
var REF_POPOVER = "RefPopover";
|
7313
7503
|
var [RefPopoverContextProvider, useRefPopover] = createContext(REF_POPOVER, {});
|
7314
7504
|
var PreviewProvider = ({ children, onLookup }) => {
|
7315
|
-
var _effect =
|
7505
|
+
var _effect = _useSignals4();
|
7316
7506
|
try {
|
7317
|
-
const trigger =
|
7318
|
-
const [value, setValue] =
|
7319
|
-
const [open, setOpen] =
|
7320
|
-
const handleDxRefTagActivate =
|
7507
|
+
const trigger = useRef4(null);
|
7508
|
+
const [value, setValue] = useState3({});
|
7509
|
+
const [open, setOpen] = useState3(false);
|
7510
|
+
const handleDxRefTagActivate = useCallback5((event) => {
|
7321
7511
|
const { refId, label, trigger: dxTrigger } = event;
|
7322
7512
|
setValue((value2) => ({
|
7323
7513
|
...value2,
|
@@ -7340,11 +7530,11 @@ var PreviewProvider = ({ children, onLookup }) => {
|
|
7340
7530
|
}, [
|
7341
7531
|
onLookup
|
7342
7532
|
]);
|
7343
|
-
return /* @__PURE__ */
|
7533
|
+
return /* @__PURE__ */ React6.createElement(RefPopoverContextProvider, {
|
7344
7534
|
pending: value.pending,
|
7345
7535
|
link: value.link,
|
7346
7536
|
target: value.target
|
7347
|
-
}, /* @__PURE__ */
|
7537
|
+
}, /* @__PURE__ */ React6.createElement(RefPopover, {
|
7348
7538
|
ref: trigger,
|
7349
7539
|
open,
|
7350
7540
|
onOpenChange: setOpen,
|
@@ -7355,10 +7545,10 @@ var PreviewProvider = ({ children, onLookup }) => {
|
|
7355
7545
|
}
|
7356
7546
|
};
|
7357
7547
|
|
7358
|
-
//
|
7359
|
-
import { useSignals as
|
7548
|
+
// src/components/Popover/RefDropdownMenu.tsx
|
7549
|
+
import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
|
7360
7550
|
import { createContext as createContext2 } from "@radix-ui/react-context";
|
7361
|
-
import
|
7551
|
+
import React7, { useRef as useRef5, useState as useState4, useEffect as useEffect5, useCallback as useCallback6 } from "react";
|
7362
7552
|
import { addEventListener as addEventListener3 } from "@dxos/async";
|
7363
7553
|
import { DropdownMenu } from "@dxos/react-ui";
|
7364
7554
|
var customEventOptions2 = {
|
@@ -7368,13 +7558,13 @@ var customEventOptions2 = {
|
|
7368
7558
|
var REF_DROPDOWN_MENU = "RefDropdownMenu";
|
7369
7559
|
var [RefDropdownMenuContextProvider, useRefDropdownMenu] = createContext2(REF_DROPDOWN_MENU, {});
|
7370
7560
|
var RefDropdownMenuProvider = ({ children, onLookup }) => {
|
7371
|
-
var _effect =
|
7561
|
+
var _effect = _useSignals5();
|
7372
7562
|
try {
|
7373
|
-
const trigger =
|
7374
|
-
const [value, setValue] =
|
7375
|
-
const [rootRef, setRootRef] =
|
7376
|
-
const [open, setOpen] =
|
7377
|
-
const handleDxRefTagActivate =
|
7563
|
+
const trigger = useRef5(null);
|
7564
|
+
const [value, setValue] = useState4({});
|
7565
|
+
const [rootRef, setRootRef] = useState4(null);
|
7566
|
+
const [open, setOpen] = useState4(false);
|
7567
|
+
const handleDxRefTagActivate = useCallback6((event) => {
|
7378
7568
|
const { refId, label, trigger: dxTrigger } = event;
|
7379
7569
|
setValue((value2) => ({
|
7380
7570
|
...value2,
|
@@ -7397,7 +7587,7 @@ var RefDropdownMenuProvider = ({ children, onLookup }) => {
|
|
7397
7587
|
}, [
|
7398
7588
|
onLookup
|
7399
7589
|
]);
|
7400
|
-
|
7590
|
+
useEffect5(() => {
|
7401
7591
|
if (!rootRef) {
|
7402
7592
|
return;
|
7403
7593
|
}
|
@@ -7405,16 +7595,16 @@ var RefDropdownMenuProvider = ({ children, onLookup }) => {
|
|
7405
7595
|
}, [
|
7406
7596
|
rootRef
|
7407
7597
|
]);
|
7408
|
-
return /* @__PURE__ */
|
7598
|
+
return /* @__PURE__ */ React7.createElement(RefDropdownMenuContextProvider, {
|
7409
7599
|
pending: value.pending,
|
7410
7600
|
link: value.link,
|
7411
7601
|
target: value.target
|
7412
|
-
}, /* @__PURE__ */
|
7602
|
+
}, /* @__PURE__ */ React7.createElement(DropdownMenu.Root, {
|
7413
7603
|
open,
|
7414
7604
|
onOpenChange: setOpen
|
7415
|
-
}, /* @__PURE__ */
|
7605
|
+
}, /* @__PURE__ */ React7.createElement(DropdownMenu.VirtualTrigger, {
|
7416
7606
|
virtualRef: trigger
|
7417
|
-
}), /* @__PURE__ */
|
7607
|
+
}), /* @__PURE__ */ React7.createElement("div", {
|
7418
7608
|
role: "none",
|
7419
7609
|
className: "contents",
|
7420
7610
|
ref: setRootRef
|
@@ -7426,162 +7616,10 @@ var RefDropdownMenuProvider = ({ children, onLookup }) => {
|
|
7426
7616
|
var RefDropdownMenu = {
|
7427
7617
|
Provider: RefDropdownMenuProvider
|
7428
7618
|
};
|
7429
|
-
|
7430
|
-
// packages/ui/react-ui-editor/src/hooks/useTextEditor.ts
|
7431
|
-
import { EditorState as EditorState3 } from "@codemirror/state";
|
7432
|
-
import { EditorView as EditorView26 } from "@codemirror/view";
|
7433
|
-
import { useFocusableGroup } from "@fluentui/react-tabster";
|
7434
|
-
import { useCallback as useCallback5, useEffect as useEffect5, useMemo as useMemo5, useRef as useRef5, useState as useState4 } from "react";
|
7435
|
-
import { log as log8 } from "@dxos/log";
|
7436
|
-
import { getProviderValue, isNotFalsy as isNotFalsy4 } from "@dxos/util";
|
7437
|
-
var __dxlog_file13 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
7438
|
-
var instanceCount = 0;
|
7439
|
-
var useTextEditor = (props = {}, deps = []) => {
|
7440
|
-
const { id, doc, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = useMemo5(() => getProviderValue(props), deps ?? []);
|
7441
|
-
const [instanceId] = useState4(() => `text-editor-${++instanceCount}`);
|
7442
|
-
const [view, setView] = useState4();
|
7443
|
-
const parentRef = useRef5(null);
|
7444
|
-
useEffect5(() => {
|
7445
|
-
let view2;
|
7446
|
-
if (parentRef.current) {
|
7447
|
-
log8("create", {
|
7448
|
-
id,
|
7449
|
-
instanceId,
|
7450
|
-
doc: initialValue?.length ?? 0
|
7451
|
-
}, {
|
7452
|
-
F: __dxlog_file13,
|
7453
|
-
L: 75,
|
7454
|
-
S: void 0,
|
7455
|
-
C: (f, a) => f(...a)
|
7456
|
-
});
|
7457
|
-
let initialSelection;
|
7458
|
-
if (selection?.anchor && initialValue?.length) {
|
7459
|
-
if (selection.anchor <= initialValue.length && (selection?.head ?? 0) <= initialValue.length) {
|
7460
|
-
initialSelection = selection;
|
7461
|
-
}
|
7462
|
-
} else if (moveToEndOfLine && selection === void 0) {
|
7463
|
-
const index = initialValue?.indexOf("\n");
|
7464
|
-
const anchor = !index || index === -1 ? 0 : index;
|
7465
|
-
initialSelection = {
|
7466
|
-
anchor
|
7467
|
-
};
|
7468
|
-
}
|
7469
|
-
const state = EditorState3.create({
|
7470
|
-
doc: doc ?? initialValue,
|
7471
|
-
// selection: initialSelection,
|
7472
|
-
extensions: [
|
7473
|
-
id && documentId.of(id),
|
7474
|
-
extensions,
|
7475
|
-
// NOTE: This doesn't catch errors in keymap functions.
|
7476
|
-
EditorView26.exceptionSink.of((err) => {
|
7477
|
-
log8.catch(err, void 0, {
|
7478
|
-
F: __dxlog_file13,
|
7479
|
-
L: 97,
|
7480
|
-
S: void 0,
|
7481
|
-
C: (f, a) => f(...a)
|
7482
|
-
});
|
7483
|
-
})
|
7484
|
-
].filter(isNotFalsy4)
|
7485
|
-
});
|
7486
|
-
view2 = new EditorView26({
|
7487
|
-
parent: parentRef.current,
|
7488
|
-
state,
|
7489
|
-
scrollTo: scrollTo ? EditorView26.scrollIntoView(scrollTo, {
|
7490
|
-
yMargin: 96
|
7491
|
-
}) : void 0,
|
7492
|
-
dispatchTransactions: debug ? debugDispatcher : void 0
|
7493
|
-
});
|
7494
|
-
if (moveToEndOfLine && !initialSelection) {
|
7495
|
-
const { to } = view2.state.doc.lineAt(0);
|
7496
|
-
if (to) {
|
7497
|
-
view2.dispatch({
|
7498
|
-
selection: {
|
7499
|
-
anchor: to
|
7500
|
-
}
|
7501
|
-
});
|
7502
|
-
}
|
7503
|
-
}
|
7504
|
-
setView(view2);
|
7505
|
-
}
|
7506
|
-
return () => {
|
7507
|
-
log8("destroy", {
|
7508
|
-
id
|
7509
|
-
}, {
|
7510
|
-
F: __dxlog_file13,
|
7511
|
-
L: 134,
|
7512
|
-
S: void 0,
|
7513
|
-
C: (f, a) => f(...a)
|
7514
|
-
});
|
7515
|
-
view2?.destroy();
|
7516
|
-
};
|
7517
|
-
}, deps);
|
7518
|
-
useEffect5(() => {
|
7519
|
-
if (view) {
|
7520
|
-
if (scrollTo || selection) {
|
7521
|
-
if (selection && selection.anchor > view.state.doc.length) {
|
7522
|
-
log8.warn("invalid selection", {
|
7523
|
-
length: view.state.doc.length,
|
7524
|
-
scrollTo,
|
7525
|
-
selection
|
7526
|
-
}, {
|
7527
|
-
F: __dxlog_file13,
|
7528
|
-
L: 143,
|
7529
|
-
S: void 0,
|
7530
|
-
C: (f, a) => f(...a)
|
7531
|
-
});
|
7532
|
-
return;
|
7533
|
-
}
|
7534
|
-
view.dispatch(createEditorStateTransaction({
|
7535
|
-
scrollTo,
|
7536
|
-
selection
|
7537
|
-
}));
|
7538
|
-
}
|
7539
|
-
}
|
7540
|
-
}, [
|
7541
|
-
view,
|
7542
|
-
scrollTo,
|
7543
|
-
selection
|
7544
|
-
]);
|
7545
|
-
useEffect5(() => {
|
7546
|
-
if (view && autoFocus) {
|
7547
|
-
view.focus();
|
7548
|
-
}
|
7549
|
-
}, [
|
7550
|
-
autoFocus,
|
7551
|
-
view
|
7552
|
-
]);
|
7553
|
-
const focusableGroupAttrs = useFocusableGroup({
|
7554
|
-
tabBehavior: "limited",
|
7555
|
-
ignoreDefaultKeydown: {
|
7556
|
-
Escape: view?.state.facet(editorInputMode).noTabster
|
7557
|
-
}
|
7558
|
-
});
|
7559
|
-
const handleKeyUp = useCallback5((event) => {
|
7560
|
-
const { key, target, currentTarget } = event;
|
7561
|
-
if (target === currentTarget) {
|
7562
|
-
switch (key) {
|
7563
|
-
case "Enter": {
|
7564
|
-
view?.focus();
|
7565
|
-
break;
|
7566
|
-
}
|
7567
|
-
}
|
7568
|
-
}
|
7569
|
-
}, [
|
7570
|
-
view
|
7571
|
-
]);
|
7572
|
-
return {
|
7573
|
-
parentRef,
|
7574
|
-
view,
|
7575
|
-
focusAttributes: {
|
7576
|
-
tabIndex: 0,
|
7577
|
-
...focusableGroupAttrs,
|
7578
|
-
onKeyUp: handleKeyUp
|
7579
|
-
}
|
7580
|
-
};
|
7581
|
-
};
|
7582
7619
|
export {
|
7583
7620
|
CommandMenu,
|
7584
7621
|
Cursor,
|
7622
|
+
Editor,
|
7585
7623
|
EditorInputMode,
|
7586
7624
|
EditorInputModes,
|
7587
7625
|
EditorState4 as EditorState,
|
@@ -7642,6 +7680,7 @@ export {
|
|
7642
7680
|
debugTree,
|
7643
7681
|
decorateMarkdown,
|
7644
7682
|
defaultOptions,
|
7683
|
+
defaultThemeSlots,
|
7645
7684
|
deleteItem,
|
7646
7685
|
documentId,
|
7647
7686
|
dropFile,
|
@@ -7659,6 +7698,7 @@ export {
|
|
7659
7698
|
folding,
|
7660
7699
|
formattingEquals,
|
7661
7700
|
formattingKeymap,
|
7701
|
+
fullWidth,
|
7662
7702
|
getFormatting,
|
7663
7703
|
getItem,
|
7664
7704
|
getLinkRef,
|
@@ -7666,6 +7706,7 @@ export {
|
|
7666
7706
|
getNextItem,
|
7667
7707
|
getPreviousItem,
|
7668
7708
|
getRange,
|
7709
|
+
grow,
|
7669
7710
|
hashtag,
|
7670
7711
|
image,
|
7671
7712
|
indentItemLess,
|
@@ -7723,7 +7764,7 @@ export {
|
|
7723
7764
|
toggleStrong,
|
7724
7765
|
toggleStyle,
|
7725
7766
|
toggleTask,
|
7726
|
-
|
7767
|
+
translations,
|
7727
7768
|
traverse,
|
7728
7769
|
treeFacet,
|
7729
7770
|
typeahead,
|