@dxos/react-ui-editor 0.8.3 → 0.8.4-main.28f8d3d
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 +790 -700
- 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/testing/index.mjs.map +2 -2
- 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 +789 -700
- 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/testing/index.mjs.map +2 -2
- 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/blocks.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/formatting.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/headings.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/lists.d.ts.map +1 -1
- 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/autocomplete.d.ts +1 -1
- package/dist/types/src/extensions/autocomplete.d.ts.map +1 -1
- package/dist/types/src/extensions/automerge/automerge.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/automerge/defs.d.ts +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/blast.d.ts.map +1 -1
- package/dist/types/src/extensions/command/action.d.ts +1 -1
- package/dist/types/src/extensions/command/action.d.ts.map +1 -1
- package/dist/types/src/extensions/command/command-menu.d.ts +1 -1
- package/dist/types/src/extensions/command/command-menu.d.ts.map +1 -1
- package/dist/types/src/extensions/command/command.d.ts.map +1 -1
- package/dist/types/src/extensions/command/hint.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/state.d.ts +1 -1
- package/dist/types/src/extensions/command/state.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/command/useCommandMenu.d.ts +1 -1
- package/dist/types/src/extensions/command/useCommandMenu.d.ts.map +1 -1
- package/dist/types/src/extensions/comments.d.ts +1 -1
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/dnd.d.ts.map +1 -1
- package/dist/types/src/extensions/factories.d.ts +19 -0
- package/dist/types/src/extensions/factories.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/action.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/changes.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 +1 -1
- package/dist/types/src/extensions/markdown/formatting.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/formatting.test.d.ts.map +1 -1
- package/dist/types/src/extensions/markdown/highlight.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/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 +1 -1
- package/dist/types/src/extensions/outliner/tree.d.ts.map +1 -1
- package/dist/types/src/hooks/useTextEditor.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/Command.stories.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/Comments.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/Experimental.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Markdown.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Outliner.stories.d.ts.map +1 -1
- package/dist/types/src/stories/Preview.stories.d.ts.map +1 -1
- package/dist/types/src/stories/TextEditor.stories.d.ts.map +1 -1
- package/dist/types/src/stories/components/EditorStory.d.ts +2 -2
- package/dist/types/src/stories/components/EditorStory.d.ts.map +1 -1
- package/dist/types/src/testing/util.d.ts +1 -0
- package/dist/types/src/testing/util.d.ts.map +1 -1
- 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/src/util/cursor.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +47 -41
- package/src/components/Editor/Editor.tsx +39 -0
- package/src/components/Editor/index.ts +5 -0
- package/src/components/EditorToolbar/EditorToolbar.tsx +1 -1
- package/src/components/EditorToolbar/blocks.ts +4 -3
- package/src/components/EditorToolbar/formatting.ts +3 -2
- package/src/components/EditorToolbar/headings.ts +2 -1
- package/src/components/EditorToolbar/lists.ts +3 -2
- package/src/components/EditorToolbar/util.ts +6 -5
- package/src/components/EditorToolbar/view-mode.ts +3 -2
- package/src/components/Popover/RefDropdownMenu.tsx +10 -4
- package/src/components/Popover/RefPopover.tsx +4 -4
- package/src/components/index.ts +1 -0
- package/src/extensions/autocomplete.ts +3 -3
- package/src/extensions/automerge/automerge.stories.tsx +8 -6
- package/src/extensions/automerge/automerge.ts +4 -3
- package/src/extensions/automerge/defs.ts +1 -1
- package/src/extensions/automerge/sync.ts +1 -1
- package/src/extensions/automerge/update-automerge.ts +1 -1
- package/src/extensions/awareness/awareness.ts +2 -2
- package/src/extensions/blast.ts +3 -16
- package/src/extensions/command/action.ts +1 -1
- package/src/extensions/command/command-menu.ts +4 -3
- package/src/extensions/command/command.ts +3 -3
- package/src/extensions/command/hint.ts +2 -1
- package/src/extensions/command/index.ts +1 -1
- package/src/extensions/command/placeholder.ts +1 -1
- package/src/extensions/command/state.ts +4 -3
- package/src/extensions/command/typeahead.ts +28 -15
- package/src/extensions/command/useCommandMenu.ts +2 -1
- package/src/extensions/comments.ts +7 -6
- package/src/extensions/dnd.ts +1 -1
- package/src/extensions/factories.ts +28 -8
- package/src/extensions/markdown/action.ts +2 -1
- package/src/extensions/markdown/bundle.ts +1 -1
- package/src/extensions/markdown/changes.ts +1 -1
- package/src/extensions/markdown/decorate.ts +7 -6
- package/src/extensions/markdown/formatting.test.ts +7 -7
- package/src/extensions/markdown/formatting.ts +16 -14
- package/src/extensions/markdown/highlight.ts +1 -1
- package/src/extensions/mention.ts +1 -1
- package/src/extensions/modes.ts +0 -9
- package/src/extensions/outliner/outliner.test.ts +3 -2
- package/src/extensions/outliner/outliner.ts +4 -3
- package/src/extensions/outliner/selection.ts +1 -1
- package/src/extensions/outliner/tree.test.ts +2 -1
- package/src/extensions/outliner/tree.ts +1 -1
- package/src/hooks/useTextEditor.ts +3 -3
- package/src/index.ts +1 -1
- package/src/stories/Command.stories.tsx +6 -5
- package/src/stories/CommandMenu.stories.tsx +7 -6
- package/src/stories/Comments.stories.tsx +3 -2
- package/src/stories/EditorToolbar.stories.tsx +6 -7
- package/src/stories/Experimental.stories.tsx +4 -3
- package/src/stories/Markdown.stories.tsx +3 -2
- package/src/stories/Outliner.stories.tsx +4 -3
- package/src/stories/Preview.stories.tsx +25 -26
- package/src/stories/TextEditor.stories.tsx +16 -15
- package/src/stories/components/EditorStory.tsx +5 -5
- package/src/styles/theme.ts +8 -8
- package/src/testing/util.ts +2 -0
- package/src/translations.ts +4 -2
- package/src/types/index.ts +5 -0
- package/src/types/types.ts +32 -0
- package/src/util/cursor.ts +2 -1
- 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({
|
@@ -81,9 +69,7 @@ var annotationMark = Decoration.mark({
|
|
81
69
|
var annotations = ({ match } = {}) => {
|
82
70
|
return [
|
83
71
|
ViewPlugin.fromClass(class {
|
84
|
-
|
85
|
-
this.decorations = Decoration.none;
|
86
|
-
}
|
72
|
+
decorations = Decoration.none;
|
87
73
|
update(update2) {
|
88
74
|
const builder = new RangeSetBuilder();
|
89
75
|
if (match) {
|
@@ -113,7 +99,7 @@ var annotations = ({ match } = {}) => {
|
|
113
99
|
];
|
114
100
|
};
|
115
101
|
|
116
|
-
//
|
102
|
+
// src/extensions/autocomplete.ts
|
117
103
|
import { autocompletion, completionKeymap } from "@codemirror/autocomplete";
|
118
104
|
import { markdownLanguage } from "@codemirror/lang-markdown";
|
119
105
|
import { keymap } from "@codemirror/view";
|
@@ -150,22 +136,179 @@ var autocomplete = ({ activateOnTyping, override, onSearch } = {}) => {
|
|
150
136
|
return extensions;
|
151
137
|
};
|
152
138
|
|
153
|
-
//
|
139
|
+
// src/extensions/automerge/automerge.ts
|
154
140
|
import { next as A3 } from "@automerge/automerge";
|
155
141
|
import { StateField } from "@codemirror/state";
|
156
142
|
import { EditorView as EditorView2, ViewPlugin as ViewPlugin2 } from "@codemirror/view";
|
157
143
|
|
158
|
-
//
|
144
|
+
// src/util/facet.ts
|
145
|
+
import { Facet } from "@codemirror/state";
|
146
|
+
var singleValueFacet = (defaultValue) => Facet.define({
|
147
|
+
// Called immediately.
|
148
|
+
combine: (providers) => {
|
149
|
+
return providers[0] ?? defaultValue;
|
150
|
+
}
|
151
|
+
});
|
152
|
+
|
153
|
+
// src/util/cursor.ts
|
154
|
+
var overlap = (a, b) => a.from <= b.to && a.to >= b.from;
|
155
|
+
var defaultCursorConverter = {
|
156
|
+
toCursor: (position) => position.toString(),
|
157
|
+
fromCursor: (cursor) => parseInt(cursor)
|
158
|
+
};
|
159
|
+
var Cursor = class _Cursor {
|
160
|
+
static converter = singleValueFacet(defaultCursorConverter);
|
161
|
+
static getCursorFromRange = (state, range) => {
|
162
|
+
const cursorConverter2 = state.facet(_Cursor.converter);
|
163
|
+
const from = cursorConverter2.toCursor(range.from);
|
164
|
+
const to = cursorConverter2.toCursor(range.to, -1);
|
165
|
+
return [
|
166
|
+
from,
|
167
|
+
to
|
168
|
+
].join(":");
|
169
|
+
};
|
170
|
+
static getRangeFromCursor = (state, cursor) => {
|
171
|
+
const cursorConverter2 = state.facet(_Cursor.converter);
|
172
|
+
const parts = cursor.split(":");
|
173
|
+
const from = cursorConverter2.fromCursor(parts[0]);
|
174
|
+
const to = cursorConverter2.fromCursor(parts[1]);
|
175
|
+
return from !== void 0 && to !== void 0 ? {
|
176
|
+
from,
|
177
|
+
to
|
178
|
+
} : void 0;
|
179
|
+
};
|
180
|
+
};
|
181
|
+
|
182
|
+
// src/util/debug.ts
|
159
183
|
import { log } from "@dxos/log";
|
184
|
+
var __dxlog_file = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/util/debug.ts";
|
185
|
+
var wrapWithCatch = (fn) => {
|
186
|
+
return (...args) => {
|
187
|
+
try {
|
188
|
+
return fn(...args);
|
189
|
+
} catch (err) {
|
190
|
+
log.catch(err, void 0, {
|
191
|
+
F: __dxlog_file,
|
192
|
+
L: 15,
|
193
|
+
S: void 0,
|
194
|
+
C: (f, a) => f(...a)
|
195
|
+
});
|
196
|
+
}
|
197
|
+
};
|
198
|
+
};
|
199
|
+
var callbackWrapper = (fn) => (...args) => {
|
200
|
+
try {
|
201
|
+
return fn(...args);
|
202
|
+
} catch (err) {
|
203
|
+
log.catch(err, void 0, {
|
204
|
+
F: __dxlog_file,
|
205
|
+
L: 29,
|
206
|
+
S: void 0,
|
207
|
+
C: (f, a) => f(...a)
|
208
|
+
});
|
209
|
+
}
|
210
|
+
};
|
211
|
+
var debugDispatcher = (trs, view) => {
|
212
|
+
logChanges(trs);
|
213
|
+
view.update(trs);
|
214
|
+
};
|
215
|
+
var logChanges = (trs) => {
|
216
|
+
const changes = trs.flatMap((tr) => {
|
217
|
+
if (tr.changes.empty) {
|
218
|
+
return void 0;
|
219
|
+
}
|
220
|
+
const changes2 = [];
|
221
|
+
tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) => changes2.push(JSON.stringify({
|
222
|
+
fromA,
|
223
|
+
toA,
|
224
|
+
fromB,
|
225
|
+
toB,
|
226
|
+
inserted: inserted.toString()
|
227
|
+
})));
|
228
|
+
return changes2;
|
229
|
+
}).filter(Boolean);
|
230
|
+
if (changes.length) {
|
231
|
+
log("changes", {
|
232
|
+
changes
|
233
|
+
}, {
|
234
|
+
F: __dxlog_file,
|
235
|
+
L: 62,
|
236
|
+
S: void 0,
|
237
|
+
C: (f, a) => f(...a)
|
238
|
+
});
|
239
|
+
}
|
240
|
+
};
|
241
|
+
|
242
|
+
// src/util/dom.ts
|
243
|
+
var flattenRect = (rect, left) => {
|
244
|
+
const x = left ? rect.left : rect.right;
|
245
|
+
return {
|
246
|
+
left: x,
|
247
|
+
right: x,
|
248
|
+
top: rect.top,
|
249
|
+
bottom: rect.bottom
|
250
|
+
};
|
251
|
+
};
|
252
|
+
var scratchRange;
|
253
|
+
var textRange = (node, from, to = from) => {
|
254
|
+
const range = scratchRange || (scratchRange = document.createRange());
|
255
|
+
range.setEnd(node, to);
|
256
|
+
range.setStart(node, from);
|
257
|
+
return range;
|
258
|
+
};
|
259
|
+
var clientRectsFor = (dom) => {
|
260
|
+
if (dom.nodeType === 3) {
|
261
|
+
return textRange(dom, 0, dom.nodeValue.length).getClientRects();
|
262
|
+
} else if (dom.nodeType === 1) {
|
263
|
+
return dom.getClientRects();
|
264
|
+
} else {
|
265
|
+
return [];
|
266
|
+
}
|
267
|
+
};
|
268
|
+
var createElement = (tag, options, children) => {
|
269
|
+
const el = document.createElement(tag);
|
270
|
+
if (options?.className) {
|
271
|
+
el.className = options.className;
|
272
|
+
}
|
273
|
+
if (options?.text) {
|
274
|
+
el.textContent = options.text;
|
275
|
+
}
|
276
|
+
if (children) {
|
277
|
+
el.append(...Array.isArray(children) ? children : [
|
278
|
+
children
|
279
|
+
]);
|
280
|
+
}
|
281
|
+
return el;
|
282
|
+
};
|
283
|
+
|
284
|
+
// src/util/react.tsx
|
285
|
+
import React from "react";
|
286
|
+
import { createRoot } from "react-dom/client";
|
287
|
+
import { ThemeProvider, Tooltip } from "@dxos/react-ui";
|
288
|
+
import { defaultTx } from "@dxos/react-ui-theme";
|
289
|
+
var renderRoot = (root, node) => {
|
290
|
+
createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
|
291
|
+
tx: defaultTx
|
292
|
+
}, node));
|
293
|
+
return root;
|
294
|
+
};
|
295
|
+
var createRenderer = (Component) => (el, props) => {
|
296
|
+
renderRoot(el, /* @__PURE__ */ React.createElement(ThemeProvider, {
|
297
|
+
tx: defaultTx
|
298
|
+
}, /* @__PURE__ */ React.createElement(Tooltip.Provider, null, /* @__PURE__ */ React.createElement(Component, props))));
|
299
|
+
};
|
300
|
+
|
301
|
+
// src/extensions/automerge/cursor.ts
|
302
|
+
import { log as log2 } from "@dxos/log";
|
160
303
|
import { fromCursor, toCursor } from "@dxos/react-client/echo";
|
161
|
-
var
|
304
|
+
var __dxlog_file2 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/automerge/cursor.ts";
|
162
305
|
var cursorConverter = (accessor) => ({
|
163
306
|
toCursor: (pos, assoc) => {
|
164
307
|
try {
|
165
308
|
return toCursor(accessor, pos, assoc);
|
166
309
|
} catch (err) {
|
167
|
-
|
168
|
-
F:
|
310
|
+
log2.catch(err, void 0, {
|
311
|
+
F: __dxlog_file2,
|
169
312
|
L: 15,
|
170
313
|
S: void 0,
|
171
314
|
C: (f, a) => f(...a)
|
@@ -177,8 +320,8 @@ var cursorConverter = (accessor) => ({
|
|
177
320
|
try {
|
178
321
|
return fromCursor(accessor, cursor);
|
179
322
|
} catch (err) {
|
180
|
-
|
181
|
-
F:
|
323
|
+
log2.catch(err, void 0, {
|
324
|
+
F: __dxlog_file2,
|
182
325
|
L: 24,
|
183
326
|
S: void 0,
|
184
327
|
C: (f, a) => f(...a)
|
@@ -188,7 +331,7 @@ var cursorConverter = (accessor) => ({
|
|
188
331
|
}
|
189
332
|
});
|
190
333
|
|
191
|
-
//
|
334
|
+
// src/extensions/automerge/defs.ts
|
192
335
|
import { Annotation, StateEffect } from "@codemirror/state";
|
193
336
|
var getPath = (state, field) => state.field(field).path;
|
194
337
|
var getLastHeads = (state, field) => state.field(field).lastHeads;
|
@@ -201,10 +344,10 @@ var isReconcile = (tr) => {
|
|
201
344
|
return !!tr.annotation(reconcileAnnotation);
|
202
345
|
};
|
203
346
|
|
204
|
-
//
|
347
|
+
// src/extensions/automerge/sync.ts
|
205
348
|
import { next as A2 } from "@automerge/automerge";
|
206
349
|
|
207
|
-
//
|
350
|
+
// src/extensions/automerge/update-automerge.ts
|
208
351
|
import { next as A } from "@automerge/automerge";
|
209
352
|
var updateAutomerge = (field, handle, transactions, state) => {
|
210
353
|
const { lastHeads, path } = state.field(field);
|
@@ -235,7 +378,7 @@ var updateAutomerge = (field, handle, transactions, state) => {
|
|
235
378
|
return newHeads ?? void 0;
|
236
379
|
};
|
237
380
|
|
238
|
-
//
|
381
|
+
// src/extensions/automerge/update-codemirror.ts
|
239
382
|
import { ChangeSet } from "@codemirror/state";
|
240
383
|
var updateCodeMirror = (view, selection, target, patches) => {
|
241
384
|
for (const patch of patches) {
|
@@ -342,8 +485,11 @@ var charPath = (textPath, candidatePath) => {
|
|
342
485
|
return null;
|
343
486
|
};
|
344
487
|
|
345
|
-
//
|
488
|
+
// src/extensions/automerge/sync.ts
|
346
489
|
var Syncer = class {
|
490
|
+
_handle;
|
491
|
+
_state;
|
492
|
+
_pending;
|
347
493
|
// prettier-ignore
|
348
494
|
constructor(_handle, _state) {
|
349
495
|
this._handle = _handle;
|
@@ -386,170 +532,7 @@ var Syncer = class {
|
|
386
532
|
}
|
387
533
|
};
|
388
534
|
|
389
|
-
//
|
390
|
-
import { Facet } from "@codemirror/state";
|
391
|
-
var singleValueFacet = (defaultValue) => Facet.define({
|
392
|
-
// Called immediately.
|
393
|
-
combine: (providers) => {
|
394
|
-
return providers[0] ?? defaultValue;
|
395
|
-
}
|
396
|
-
});
|
397
|
-
|
398
|
-
// packages/ui/react-ui-editor/src/util/cursor.ts
|
399
|
-
var overlap = (a, b) => a.from <= b.to && a.to >= b.from;
|
400
|
-
var defaultCursorConverter = {
|
401
|
-
toCursor: (position) => position.toString(),
|
402
|
-
fromCursor: (cursor) => parseInt(cursor)
|
403
|
-
};
|
404
|
-
var Cursor = class _Cursor {
|
405
|
-
static {
|
406
|
-
this.converter = singleValueFacet(defaultCursorConverter);
|
407
|
-
}
|
408
|
-
static {
|
409
|
-
this.getCursorFromRange = (state, range) => {
|
410
|
-
const cursorConverter2 = state.facet(_Cursor.converter);
|
411
|
-
const from = cursorConverter2.toCursor(range.from);
|
412
|
-
const to = cursorConverter2.toCursor(range.to, -1);
|
413
|
-
return [
|
414
|
-
from,
|
415
|
-
to
|
416
|
-
].join(":");
|
417
|
-
};
|
418
|
-
}
|
419
|
-
static {
|
420
|
-
this.getRangeFromCursor = (state, cursor) => {
|
421
|
-
const cursorConverter2 = state.facet(_Cursor.converter);
|
422
|
-
const parts = cursor.split(":");
|
423
|
-
const from = cursorConverter2.fromCursor(parts[0]);
|
424
|
-
const to = cursorConverter2.fromCursor(parts[1]);
|
425
|
-
return from !== void 0 && to !== void 0 ? {
|
426
|
-
from,
|
427
|
-
to
|
428
|
-
} : void 0;
|
429
|
-
};
|
430
|
-
}
|
431
|
-
};
|
432
|
-
|
433
|
-
// packages/ui/react-ui-editor/src/util/debug.ts
|
434
|
-
import { log as log2 } from "@dxos/log";
|
435
|
-
var __dxlog_file2 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/util/debug.ts";
|
436
|
-
var wrapWithCatch = (fn) => {
|
437
|
-
return (...args) => {
|
438
|
-
try {
|
439
|
-
return fn(...args);
|
440
|
-
} catch (err) {
|
441
|
-
log2.catch(err, void 0, {
|
442
|
-
F: __dxlog_file2,
|
443
|
-
L: 15,
|
444
|
-
S: void 0,
|
445
|
-
C: (f, a) => f(...a)
|
446
|
-
});
|
447
|
-
}
|
448
|
-
};
|
449
|
-
};
|
450
|
-
var callbackWrapper = (fn) => (...args) => {
|
451
|
-
try {
|
452
|
-
return fn(...args);
|
453
|
-
} catch (err) {
|
454
|
-
log2.catch(err, void 0, {
|
455
|
-
F: __dxlog_file2,
|
456
|
-
L: 29,
|
457
|
-
S: void 0,
|
458
|
-
C: (f, a) => f(...a)
|
459
|
-
});
|
460
|
-
}
|
461
|
-
};
|
462
|
-
var debugDispatcher = (trs, view) => {
|
463
|
-
logChanges(trs);
|
464
|
-
view.update(trs);
|
465
|
-
};
|
466
|
-
var logChanges = (trs) => {
|
467
|
-
const changes = trs.flatMap((tr) => {
|
468
|
-
if (tr.changes.empty) {
|
469
|
-
return void 0;
|
470
|
-
}
|
471
|
-
const changes2 = [];
|
472
|
-
tr.changes.iterChanges((fromA, toA, fromB, toB, inserted) => changes2.push(JSON.stringify({
|
473
|
-
fromA,
|
474
|
-
toA,
|
475
|
-
fromB,
|
476
|
-
toB,
|
477
|
-
inserted: inserted.toString()
|
478
|
-
})));
|
479
|
-
return changes2;
|
480
|
-
}).filter(Boolean);
|
481
|
-
if (changes.length) {
|
482
|
-
log2("changes", {
|
483
|
-
changes
|
484
|
-
}, {
|
485
|
-
F: __dxlog_file2,
|
486
|
-
L: 62,
|
487
|
-
S: void 0,
|
488
|
-
C: (f, a) => f(...a)
|
489
|
-
});
|
490
|
-
}
|
491
|
-
};
|
492
|
-
|
493
|
-
// packages/ui/react-ui-editor/src/util/dom.ts
|
494
|
-
var flattenRect = (rect, left) => {
|
495
|
-
const x = left ? rect.left : rect.right;
|
496
|
-
return {
|
497
|
-
left: x,
|
498
|
-
right: x,
|
499
|
-
top: rect.top,
|
500
|
-
bottom: rect.bottom
|
501
|
-
};
|
502
|
-
};
|
503
|
-
var scratchRange;
|
504
|
-
var textRange = (node, from, to = from) => {
|
505
|
-
const range = scratchRange || (scratchRange = document.createRange());
|
506
|
-
range.setEnd(node, to);
|
507
|
-
range.setStart(node, from);
|
508
|
-
return range;
|
509
|
-
};
|
510
|
-
var clientRectsFor = (dom) => {
|
511
|
-
if (dom.nodeType === 3) {
|
512
|
-
return textRange(dom, 0, dom.nodeValue.length).getClientRects();
|
513
|
-
} else if (dom.nodeType === 1) {
|
514
|
-
return dom.getClientRects();
|
515
|
-
} else {
|
516
|
-
return [];
|
517
|
-
}
|
518
|
-
};
|
519
|
-
var createElement = (tag, options, children) => {
|
520
|
-
const el = document.createElement(tag);
|
521
|
-
if (options?.className) {
|
522
|
-
el.className = options.className;
|
523
|
-
}
|
524
|
-
if (options?.text) {
|
525
|
-
el.textContent = options.text;
|
526
|
-
}
|
527
|
-
if (children) {
|
528
|
-
el.append(...Array.isArray(children) ? children : [
|
529
|
-
children
|
530
|
-
]);
|
531
|
-
}
|
532
|
-
return el;
|
533
|
-
};
|
534
|
-
|
535
|
-
// packages/ui/react-ui-editor/src/util/react.tsx
|
536
|
-
import React from "react";
|
537
|
-
import { createRoot } from "react-dom/client";
|
538
|
-
import { ThemeProvider, Tooltip } from "@dxos/react-ui";
|
539
|
-
import { defaultTx } from "@dxos/react-ui-theme";
|
540
|
-
var renderRoot = (root, node) => {
|
541
|
-
createRoot(root).render(/* @__PURE__ */ React.createElement(ThemeProvider, {
|
542
|
-
tx: defaultTx
|
543
|
-
}, node));
|
544
|
-
return root;
|
545
|
-
};
|
546
|
-
var createRenderer = (Component) => (el, props) => {
|
547
|
-
renderRoot(el, /* @__PURE__ */ React.createElement(ThemeProvider, {
|
548
|
-
tx: defaultTx
|
549
|
-
}, /* @__PURE__ */ React.createElement(Tooltip.Provider, null, /* @__PURE__ */ React.createElement(Component, props))));
|
550
|
-
};
|
551
|
-
|
552
|
-
// packages/ui/react-ui-editor/src/extensions/automerge/automerge.ts
|
535
|
+
// src/extensions/automerge/automerge.ts
|
553
536
|
var automerge = (accessor) => {
|
554
537
|
const syncState = StateField.define({
|
555
538
|
create: () => ({
|
@@ -587,6 +570,7 @@ var automerge = (accessor) => {
|
|
587
570
|
syncState,
|
588
571
|
// Reconcile external updates.
|
589
572
|
ViewPlugin2.fromClass(class {
|
573
|
+
_view;
|
590
574
|
constructor(_view) {
|
591
575
|
this._view = _view;
|
592
576
|
this._handleChange = () => {
|
@@ -597,6 +581,7 @@ var automerge = (accessor) => {
|
|
597
581
|
destroy() {
|
598
582
|
accessor.handle.removeListener("change", this._handleChange);
|
599
583
|
}
|
584
|
+
_handleChange;
|
600
585
|
}),
|
601
586
|
// Reconcile local updates.
|
602
587
|
EditorView2.updateListener.of(({ view, changes }) => {
|
@@ -607,12 +592,12 @@ var automerge = (accessor) => {
|
|
607
592
|
];
|
608
593
|
};
|
609
594
|
|
610
|
-
//
|
595
|
+
// src/extensions/awareness/awareness.ts
|
611
596
|
import { Annotation as Annotation2, RangeSet } from "@codemirror/state";
|
612
597
|
import { Decoration as Decoration2, EditorView as EditorView3, ViewPlugin as ViewPlugin3, WidgetType } from "@codemirror/view";
|
613
598
|
import { Event } from "@dxos/async";
|
614
599
|
import { Context } from "@dxos/context";
|
615
|
-
var __dxlog_file3 = "/
|
600
|
+
var __dxlog_file3 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/awareness/awareness.ts";
|
616
601
|
var dummyProvider = {
|
617
602
|
remoteStateChange: new Event(),
|
618
603
|
open: () => {
|
@@ -635,12 +620,16 @@ var awareness = (provider = dummyProvider) => {
|
|
635
620
|
];
|
636
621
|
};
|
637
622
|
var RemoteSelectionsDecorator = class {
|
623
|
+
_ctx = new Context(void 0, {
|
624
|
+
F: __dxlog_file3,
|
625
|
+
L: 80
|
626
|
+
});
|
627
|
+
_cursorConverter;
|
628
|
+
_provider;
|
629
|
+
_lastAnchor;
|
630
|
+
_lastHead;
|
631
|
+
decorations = RangeSet.of([]);
|
638
632
|
constructor(view) {
|
639
|
-
this._ctx = new Context(void 0, {
|
640
|
-
F: __dxlog_file3,
|
641
|
-
L: 80
|
642
|
-
});
|
643
|
-
this.decorations = RangeSet.of([]);
|
644
633
|
this._cursorConverter = view.state.facet(Cursor.converter);
|
645
634
|
this._provider = view.state.facet(awarenessProvider);
|
646
635
|
this._provider.open();
|
@@ -748,6 +737,8 @@ var RemoteSelectionsDecorator = class {
|
|
748
737
|
}
|
749
738
|
};
|
750
739
|
var RemoteCaretWidget = class extends WidgetType {
|
740
|
+
_name;
|
741
|
+
_color;
|
751
742
|
constructor(_name, _color) {
|
752
743
|
super(), this._name = _name, this._color = _color;
|
753
744
|
}
|
@@ -839,17 +830,24 @@ var styles = EditorView3.theme({
|
|
839
830
|
}
|
840
831
|
});
|
841
832
|
|
842
|
-
//
|
833
|
+
// src/extensions/awareness/awareness-provider.ts
|
843
834
|
import { DeferredTask, Event as Event2, sleep } from "@dxos/async";
|
844
835
|
import { Context as Context2 } from "@dxos/context";
|
845
836
|
import { invariant } from "@dxos/invariant";
|
846
837
|
import { log as log3 } from "@dxos/log";
|
847
|
-
var __dxlog_file4 = "/
|
838
|
+
var __dxlog_file4 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/awareness/awareness-provider.ts";
|
848
839
|
var DEBOUNCE_INTERVAL = 100;
|
849
840
|
var SpaceAwarenessProvider = class {
|
841
|
+
_remoteStates = /* @__PURE__ */ new Map();
|
842
|
+
_space;
|
843
|
+
_channel;
|
844
|
+
_peerId;
|
845
|
+
_info;
|
846
|
+
_ctx;
|
847
|
+
_postTask;
|
848
|
+
_localState;
|
849
|
+
remoteStateChange = new Event2();
|
850
850
|
constructor(params) {
|
851
|
-
this._remoteStates = /* @__PURE__ */ new Map();
|
852
|
-
this.remoteStateChange = new Event2();
|
853
851
|
this._space = params.space;
|
854
852
|
this._channel = params.channel;
|
855
853
|
this._peerId = params.peerId;
|
@@ -946,11 +944,12 @@ var SpaceAwarenessProvider = class {
|
|
946
944
|
}
|
947
945
|
};
|
948
946
|
|
949
|
-
//
|
947
|
+
// src/extensions/blast.ts
|
950
948
|
import { EditorView as EditorView4, keymap as keymap2 } from "@codemirror/view";
|
951
949
|
import defaultsDeep from "lodash.defaultsdeep";
|
950
|
+
import { throttle } from "@dxos/async";
|
952
951
|
import { invariant as invariant2 } from "@dxos/invariant";
|
953
|
-
var __dxlog_file5 = "/
|
952
|
+
var __dxlog_file5 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/blast.ts";
|
954
953
|
var defaultOptions = {
|
955
954
|
effect: 2,
|
956
955
|
maxParticles: 200,
|
@@ -1044,6 +1043,18 @@ var blast = (options = defaultOptions) => {
|
|
1044
1043
|
];
|
1045
1044
|
};
|
1046
1045
|
var Blaster = class {
|
1046
|
+
_node;
|
1047
|
+
_options;
|
1048
|
+
_effect;
|
1049
|
+
_canvas;
|
1050
|
+
_ctx;
|
1051
|
+
_running;
|
1052
|
+
_lastTime;
|
1053
|
+
_shakeTime;
|
1054
|
+
_shakeTimeMax;
|
1055
|
+
_particles;
|
1056
|
+
_particlePointer;
|
1057
|
+
_lastPoint;
|
1047
1058
|
constructor(_node, _options) {
|
1048
1059
|
this._node = _node;
|
1049
1060
|
this._options = _options;
|
@@ -1078,7 +1089,7 @@ var Blaster = class {
|
|
1078
1089
|
initialize() {
|
1079
1090
|
invariant2(!this._canvas && !this._ctx, void 0, {
|
1080
1091
|
F: __dxlog_file5,
|
1081
|
-
L:
|
1092
|
+
L: 142,
|
1082
1093
|
S: this,
|
1083
1094
|
A: [
|
1084
1095
|
"!this._canvas && !this._ctx",
|
@@ -1115,7 +1126,7 @@ var Blaster = class {
|
|
1115
1126
|
start() {
|
1116
1127
|
invariant2(this._canvas && this._ctx, void 0, {
|
1117
1128
|
F: __dxlog_file5,
|
1118
|
-
L:
|
1129
|
+
L: 181,
|
1119
1130
|
S: this,
|
1120
1131
|
A: [
|
1121
1132
|
"this._canvas && this._ctx",
|
@@ -1148,6 +1159,8 @@ var Blaster = class {
|
|
1148
1159
|
this.drawParticles();
|
1149
1160
|
requestAnimationFrame(this.loop.bind(this));
|
1150
1161
|
}
|
1162
|
+
shake;
|
1163
|
+
spawn;
|
1151
1164
|
drawParticles() {
|
1152
1165
|
for (let i = this._particles.length; i--; i > 0) {
|
1153
1166
|
const particle = this._particles[i];
|
@@ -1162,6 +1175,7 @@ var Blaster = class {
|
|
1162
1175
|
}
|
1163
1176
|
};
|
1164
1177
|
var Effect = class {
|
1178
|
+
_options;
|
1165
1179
|
constructor(_options) {
|
1166
1180
|
this._options = _options;
|
1167
1181
|
}
|
@@ -1219,18 +1233,6 @@ var Effect2 = class extends Effect {
|
|
1219
1233
|
ctx.fill();
|
1220
1234
|
}
|
1221
1235
|
};
|
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
1236
|
var getRGBComponents = (node, color) => {
|
1235
1237
|
if (typeof color === "function") {
|
1236
1238
|
return color();
|
@@ -1256,10 +1258,10 @@ var random = (min, max) => {
|
|
1256
1258
|
return min + ~~(Math.random() * (max - min + 1));
|
1257
1259
|
};
|
1258
1260
|
|
1259
|
-
//
|
1261
|
+
// src/extensions/command/action.ts
|
1260
1262
|
import { StateEffect as StateEffect2 } from "@codemirror/state";
|
1261
1263
|
|
1262
|
-
//
|
1264
|
+
// src/extensions/command/state.ts
|
1263
1265
|
import { StateField as StateField2 } from "@codemirror/state";
|
1264
1266
|
import { showTooltip } from "@codemirror/view";
|
1265
1267
|
var commandConfig = singleValueFacet();
|
@@ -1272,7 +1274,7 @@ var commandState = StateField2.define({
|
|
1272
1274
|
}
|
1273
1275
|
const { renderDialog } = tr.state.facet(commandConfig);
|
1274
1276
|
if (effect.is(openEffect) && renderDialog) {
|
1275
|
-
const { pos, fullWidth } = effect.value;
|
1277
|
+
const { pos, fullWidth: fullWidth2 } = effect.value;
|
1276
1278
|
const tooltip = {
|
1277
1279
|
pos,
|
1278
1280
|
above: false,
|
@@ -1283,7 +1285,7 @@ var commandState = StateField2.define({
|
|
1283
1285
|
const tooltipView = {
|
1284
1286
|
dom: root,
|
1285
1287
|
mount: (view2) => {
|
1286
|
-
if (
|
1288
|
+
if (fullWidth2) {
|
1287
1289
|
const parent = root.parentElement;
|
1288
1290
|
const { paddingLeft, paddingRight } = window.getComputedStyle(parent);
|
1289
1291
|
const widthWithoutPadding = parent.clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);
|
@@ -1329,7 +1331,7 @@ var commandState = StateField2.define({
|
|
1329
1331
|
]
|
1330
1332
|
});
|
1331
1333
|
|
1332
|
-
//
|
1334
|
+
// src/extensions/command/action.ts
|
1333
1335
|
var openEffect = StateEffect2.define();
|
1334
1336
|
var closeEffect = StateEffect2.define();
|
1335
1337
|
var openCommand = (view) => {
|
@@ -1369,19 +1371,18 @@ var commandKeyBindings = [
|
|
1369
1371
|
}
|
1370
1372
|
];
|
1371
1373
|
|
1372
|
-
//
|
1374
|
+
// src/extensions/command/command.ts
|
1373
1375
|
import { Prec } from "@codemirror/state";
|
1374
1376
|
import { EditorView as EditorView6, keymap as keymap3 } from "@codemirror/view";
|
1375
1377
|
import { isNonNullable } from "@dxos/util";
|
1376
1378
|
|
1377
|
-
//
|
1379
|
+
// src/extensions/command/hint.ts
|
1378
1380
|
import { RangeSetBuilder as RangeSetBuilder2 } from "@codemirror/state";
|
1379
1381
|
import { Decoration as Decoration3, EditorView as EditorView5, ViewPlugin as ViewPlugin4, WidgetType as WidgetType2 } from "@codemirror/view";
|
1380
1382
|
var hint = ({ delay = 3e3, onHint }) => {
|
1381
1383
|
return ViewPlugin4.fromClass(class {
|
1382
|
-
|
1383
|
-
|
1384
|
-
}
|
1384
|
+
decorations = Decoration3.none;
|
1385
|
+
timeout;
|
1385
1386
|
update(update2) {
|
1386
1387
|
if (this.timeout) {
|
1387
1388
|
clearTimeout(this.timeout);
|
@@ -1420,6 +1421,7 @@ var hint = ({ delay = 3e3, onHint }) => {
|
|
1420
1421
|
});
|
1421
1422
|
};
|
1422
1423
|
var Hint = class extends WidgetType2 {
|
1424
|
+
content;
|
1423
1425
|
constructor(content) {
|
1424
1426
|
super(), this.content = content;
|
1425
1427
|
}
|
@@ -1458,7 +1460,7 @@ var Hint = class extends WidgetType2 {
|
|
1458
1460
|
}
|
1459
1461
|
};
|
1460
1462
|
|
1461
|
-
//
|
1463
|
+
// src/extensions/command/command.ts
|
1462
1464
|
var command = (options = {}) => {
|
1463
1465
|
return [
|
1464
1466
|
Prec.highest(keymap3.of(commandKeyBindings)),
|
@@ -1474,17 +1476,16 @@ var command = (options = {}) => {
|
|
1474
1476
|
].filter(isNonNullable);
|
1475
1477
|
};
|
1476
1478
|
|
1477
|
-
//
|
1478
|
-
import {
|
1479
|
-
import {
|
1479
|
+
// src/extensions/command/command-menu.ts
|
1480
|
+
import { Prec as Prec2, RangeSetBuilder as RangeSetBuilder3, StateEffect as StateEffect3, StateField as StateField3 } from "@codemirror/state";
|
1481
|
+
import { Decoration as Decoration5, EditorView as EditorView8, ViewPlugin as ViewPlugin6, keymap as keymap4 } from "@codemirror/view";
|
1480
1482
|
|
1481
|
-
//
|
1482
|
-
import { Decoration as Decoration4, EditorView as EditorView7,
|
1483
|
+
// src/extensions/command/placeholder.ts
|
1484
|
+
import { Decoration as Decoration4, EditorView as EditorView7, ViewPlugin as ViewPlugin5, WidgetType as WidgetType3 } from "@codemirror/view";
|
1483
1485
|
var placeholder = ({ delay = 3e3, content }) => {
|
1484
1486
|
const plugin = ViewPlugin5.fromClass(class {
|
1485
|
-
|
1486
|
-
|
1487
|
-
}
|
1487
|
+
decorations = Decoration4.none;
|
1488
|
+
timeout;
|
1488
1489
|
update(update2) {
|
1489
1490
|
if (this.timeout) {
|
1490
1491
|
window.clearTimeout(this.timeout);
|
@@ -1526,6 +1527,7 @@ var placeholder = ({ delay = 3e3, content }) => {
|
|
1526
1527
|
] : plugin;
|
1527
1528
|
};
|
1528
1529
|
var Placeholder = class extends WidgetType3 {
|
1530
|
+
content;
|
1529
1531
|
constructor(content) {
|
1530
1532
|
super(), this.content = content;
|
1531
1533
|
}
|
@@ -1560,9 +1562,11 @@ var Placeholder = class extends WidgetType3 {
|
|
1560
1562
|
}
|
1561
1563
|
};
|
1562
1564
|
|
1563
|
-
//
|
1565
|
+
// src/extensions/command/command-menu.ts
|
1564
1566
|
var commandMenu = (options) => {
|
1565
1567
|
const commandMenuPlugin = ViewPlugin6.fromClass(class {
|
1568
|
+
view;
|
1569
|
+
decorations;
|
1566
1570
|
constructor(view) {
|
1567
1571
|
this.view = view;
|
1568
1572
|
this.decorations = Decoration5.none;
|
@@ -1717,11 +1721,15 @@ var commandMenuState = StateField3.define({
|
|
1717
1721
|
}
|
1718
1722
|
});
|
1719
1723
|
|
1720
|
-
//
|
1724
|
+
// src/extensions/command/floating-menu.ts
|
1721
1725
|
import { EditorView as EditorView9, ViewPlugin as ViewPlugin7 } from "@codemirror/view";
|
1722
1726
|
import { addEventListener } from "@dxos/async";
|
1723
1727
|
var floatingMenu = (options = {}) => [
|
1724
1728
|
ViewPlugin7.fromClass(class {
|
1729
|
+
view;
|
1730
|
+
tag;
|
1731
|
+
rafId;
|
1732
|
+
cleanup;
|
1725
1733
|
constructor(view) {
|
1726
1734
|
this.view = view;
|
1727
1735
|
const container = view.scrollDOM;
|
@@ -1803,11 +1811,94 @@ var floatingMenu = (options = {}) => [
|
|
1803
1811
|
width: "2rem",
|
1804
1812
|
height: "2rem"
|
1805
1813
|
}
|
1806
|
-
})
|
1807
|
-
];
|
1814
|
+
})
|
1815
|
+
];
|
1816
|
+
|
1817
|
+
// src/extensions/command/typeahead.ts
|
1818
|
+
import { EditorSelection, Prec as Prec3, RangeSetBuilder as RangeSetBuilder4 } from "@codemirror/state";
|
1819
|
+
import { Decoration as Decoration6, ViewPlugin as ViewPlugin8, keymap as keymap5 } from "@codemirror/view";
|
1820
|
+
var typeahead = ({ onComplete } = {}) => {
|
1821
|
+
let hint2;
|
1822
|
+
const complete = (view) => {
|
1823
|
+
if (!hint2) {
|
1824
|
+
return false;
|
1825
|
+
}
|
1826
|
+
const selection = view.state.selection.main;
|
1827
|
+
view.dispatch({
|
1828
|
+
changes: [
|
1829
|
+
{
|
1830
|
+
from: selection.from,
|
1831
|
+
to: selection.to,
|
1832
|
+
insert: hint2
|
1833
|
+
}
|
1834
|
+
],
|
1835
|
+
selection: EditorSelection.cursor(selection.from + hint2.length)
|
1836
|
+
});
|
1837
|
+
return true;
|
1838
|
+
};
|
1839
|
+
return [
|
1840
|
+
ViewPlugin8.fromClass(class {
|
1841
|
+
decorations = Decoration6.none;
|
1842
|
+
update(update2) {
|
1843
|
+
const builder = new RangeSetBuilder4();
|
1844
|
+
const selection = update2.view.state.selection.main;
|
1845
|
+
const line = update2.view.state.doc.lineAt(selection.from);
|
1846
|
+
if (selection.from === selection.to && selection.from === line.to) {
|
1847
|
+
const str = update2.state.sliceDoc(line.from, selection.from);
|
1848
|
+
hint2 = onComplete?.({
|
1849
|
+
line: str
|
1850
|
+
});
|
1851
|
+
if (hint2) {
|
1852
|
+
builder.add(selection.from, selection.to, Decoration6.widget({
|
1853
|
+
widget: new Hint(hint2)
|
1854
|
+
}));
|
1855
|
+
}
|
1856
|
+
}
|
1857
|
+
this.decorations = builder.finish();
|
1858
|
+
}
|
1859
|
+
}, {
|
1860
|
+
decorations: (v) => v.decorations
|
1861
|
+
}),
|
1862
|
+
// Keys.
|
1863
|
+
Prec3.highest(keymap5.of([
|
1864
|
+
{
|
1865
|
+
key: "Tab",
|
1866
|
+
preventDefault: true,
|
1867
|
+
run: complete
|
1868
|
+
},
|
1869
|
+
{
|
1870
|
+
key: "ArrowRight",
|
1871
|
+
preventDefault: true,
|
1872
|
+
run: complete
|
1873
|
+
}
|
1874
|
+
]))
|
1875
|
+
];
|
1876
|
+
};
|
1877
|
+
var staticCompletion = (completions, options = {}) => ({ line }) => {
|
1878
|
+
if (line.length === 0 && options.default) {
|
1879
|
+
return options.default;
|
1880
|
+
}
|
1881
|
+
const parts = line.split(/\s+/).filter(Boolean);
|
1882
|
+
if (parts.length) {
|
1883
|
+
const str = parts.at(-1);
|
1884
|
+
if (str.length >= (options.minLength ?? 0)) {
|
1885
|
+
for (const completion of completions) {
|
1886
|
+
const match = matchCompletion(completion, str);
|
1887
|
+
if (match) {
|
1888
|
+
return match;
|
1889
|
+
}
|
1890
|
+
}
|
1891
|
+
}
|
1892
|
+
}
|
1893
|
+
};
|
1894
|
+
var matchCompletion = (completion, str, minLength = 0) => {
|
1895
|
+
if (str.length >= minLength && completion.length > str.length && completion.startsWith(str)) {
|
1896
|
+
return completion.slice(str.length);
|
1897
|
+
}
|
1898
|
+
};
|
1808
1899
|
|
1809
|
-
//
|
1810
|
-
import { useCallback, useMemo
|
1900
|
+
// src/extensions/command/useCommandMenu.ts
|
1901
|
+
import { useCallback, useMemo, useRef, useState } from "react";
|
1811
1902
|
var useCommandMenu = ({ viewRef, trigger, placeholder: placeholder3, getMenu }) => {
|
1812
1903
|
const triggerRef = useRef(null);
|
1813
1904
|
const currentRef = useRef(null);
|
@@ -1855,7 +1946,7 @@ var useCommandMenu = ({ viewRef, trigger, placeholder: placeholder3, getMenu })
|
|
1855
1946
|
void item.onSelect?.(view, selection.head);
|
1856
1947
|
}, []);
|
1857
1948
|
const serializedTrigger = Array.isArray(trigger) ? trigger.join(",") : trigger;
|
1858
|
-
const _commandMenu =
|
1949
|
+
const _commandMenu = useMemo(() => {
|
1859
1950
|
return commandMenu({
|
1860
1951
|
trigger,
|
1861
1952
|
placeholder: placeholder3,
|
@@ -1907,106 +1998,23 @@ var useCommandMenu = ({ viewRef, trigger, placeholder: placeholder3, getMenu })
|
|
1907
1998
|
};
|
1908
1999
|
};
|
1909
2000
|
|
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
|
2001
|
+
// src/extensions/comments.ts
|
1994
2002
|
import { invertedEffects } from "@codemirror/commands";
|
1995
2003
|
import { StateEffect as StateEffect4, StateField as StateField4 } from "@codemirror/state";
|
1996
|
-
import {
|
2004
|
+
import { Decoration as Decoration7, EditorView as EditorView11, ViewPlugin as ViewPlugin9, hoverTooltip, keymap as keymap7 } from "@codemirror/view";
|
1997
2005
|
import sortBy from "lodash.sortby";
|
1998
2006
|
import { useEffect } from "react";
|
1999
2007
|
import { debounce as debounce2 } from "@dxos/async";
|
2000
2008
|
import { log as log4 } from "@dxos/log";
|
2001
2009
|
import { isNonNullable as isNonNullable2 } from "@dxos/util";
|
2002
2010
|
|
2003
|
-
//
|
2011
|
+
// src/extensions/selection.ts
|
2004
2012
|
import { Transaction } from "@codemirror/state";
|
2005
2013
|
import { EditorView as EditorView10, keymap as keymap6 } from "@codemirror/view";
|
2006
2014
|
import { debounce } from "@dxos/async";
|
2007
2015
|
import { invariant as invariant3 } from "@dxos/invariant";
|
2008
2016
|
import { isNotFalsy } from "@dxos/util";
|
2009
|
-
var __dxlog_file6 = "/
|
2017
|
+
var __dxlog_file6 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/selection.ts";
|
2010
2018
|
var documentId = singleValueFacet();
|
2011
2019
|
var stateRestoreAnnotation = "dxos.org/cm/state-restore";
|
2012
2020
|
var createEditorStateTransaction = ({ scrollTo, selection }) => {
|
@@ -2093,8 +2101,8 @@ var selectionState = ({ getState, setState } = {}) => {
|
|
2093
2101
|
].filter(isNotFalsy);
|
2094
2102
|
};
|
2095
2103
|
|
2096
|
-
//
|
2097
|
-
var __dxlog_file7 = "/
|
2104
|
+
// src/extensions/comments.ts
|
2105
|
+
var __dxlog_file7 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/comments.ts";
|
2098
2106
|
var setComments = StateEffect4.define();
|
2099
2107
|
var setSelection = StateEffect4.define();
|
2100
2108
|
var setCommentState = StateEffect4.define();
|
@@ -2165,7 +2173,7 @@ var commentsDecorations = EditorView11.decorations.compute([
|
|
2165
2173
|
if (!range) {
|
2166
2174
|
log4.warn("Invalid range:", range, {
|
2167
2175
|
F: __dxlog_file7,
|
2168
|
-
L:
|
2176
|
+
L: 136,
|
2169
2177
|
S: void 0,
|
2170
2178
|
C: (f, a) => f(...a)
|
2171
2179
|
});
|
@@ -2480,10 +2488,8 @@ var scrollThreadIntoView = (view, id, center = true) => {
|
|
2480
2488
|
}
|
2481
2489
|
};
|
2482
2490
|
var ExternalCommentSync = class {
|
2491
|
+
unsubscribe;
|
2483
2492
|
constructor(view, id, subscribe, getComments) {
|
2484
|
-
this.destroy = () => {
|
2485
|
-
this.unsubscribe();
|
2486
|
-
};
|
2487
2493
|
const updateComments = () => {
|
2488
2494
|
const comments2 = getComments();
|
2489
2495
|
if (id === view.state.facet(documentId)) {
|
@@ -2497,6 +2503,9 @@ var ExternalCommentSync = class {
|
|
2497
2503
|
};
|
2498
2504
|
this.unsubscribe = subscribe(updateComments);
|
2499
2505
|
}
|
2506
|
+
destroy = () => {
|
2507
|
+
this.unsubscribe();
|
2508
|
+
};
|
2500
2509
|
};
|
2501
2510
|
var createExternalCommentSync = (id, subscribe, getComments) => ViewPlugin9.fromClass(class {
|
2502
2511
|
constructor(view) {
|
@@ -2518,7 +2527,7 @@ var useComments = (view, id, comments2) => {
|
|
2518
2527
|
});
|
2519
2528
|
};
|
2520
2529
|
|
2521
|
-
//
|
2530
|
+
// src/extensions/debug.ts
|
2522
2531
|
import { syntaxTree } from "@codemirror/language";
|
2523
2532
|
import { StateField as StateField5 } from "@codemirror/state";
|
2524
2533
|
var debugNodeLogger = (log9 = console.log) => {
|
@@ -2531,8 +2540,8 @@ var debugNodeLogger = (log9 = console.log) => {
|
|
2531
2540
|
});
|
2532
2541
|
};
|
2533
2542
|
|
2534
|
-
//
|
2535
|
-
import {
|
2543
|
+
// src/extensions/dnd.ts
|
2544
|
+
import { EditorView as EditorView12, dropCursor } from "@codemirror/view";
|
2536
2545
|
var styles3 = EditorView12.theme({
|
2537
2546
|
".cm-dropCursor": {
|
2538
2547
|
borderLeft: "2px solid var(--dx-accentText)",
|
@@ -2567,7 +2576,7 @@ var dropFile = (options = {}) => {
|
|
2567
2576
|
];
|
2568
2577
|
};
|
2569
2578
|
|
2570
|
-
//
|
2579
|
+
// src/extensions/factories.ts
|
2571
2580
|
import { closeBrackets, closeBracketsKeymap } from "@codemirror/autocomplete";
|
2572
2581
|
import { defaultKeymap, history, historyKeymap, indentWithTab, standardKeymap } from "@codemirror/commands";
|
2573
2582
|
import { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from "@codemirror/language";
|
@@ -2581,42 +2590,11 @@ import { generateName } from "@dxos/display-name";
|
|
2581
2590
|
import { log as log5 } from "@dxos/log";
|
2582
2591
|
import { hexToHue, isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
2583
2592
|
|
2584
|
-
//
|
2585
|
-
import { StateEffect as StateEffect5, StateField as StateField6 } from "@codemirror/state";
|
2593
|
+
// src/defaults.ts
|
2586
2594
|
import { EditorView as EditorView13 } from "@codemirror/view";
|
2587
|
-
var focusEffect = StateEffect5.define();
|
2588
|
-
var focusField = StateField6.define({
|
2589
|
-
create: () => false,
|
2590
|
-
update: (value, tr) => {
|
2591
|
-
for (const effect of tr.effects) {
|
2592
|
-
if (effect.is(focusEffect)) {
|
2593
|
-
return effect.value;
|
2594
|
-
}
|
2595
|
-
}
|
2596
|
-
return value;
|
2597
|
-
}
|
2598
|
-
});
|
2599
|
-
var focus = [
|
2600
|
-
focusField,
|
2601
|
-
EditorView13.domEventHandlers({
|
2602
|
-
focus: (event, view) => {
|
2603
|
-
setTimeout(() => view.dispatch({
|
2604
|
-
effects: focusEffect.of(true)
|
2605
|
-
}));
|
2606
|
-
},
|
2607
|
-
blur: (event, view) => {
|
2608
|
-
setTimeout(() => view.dispatch({
|
2609
|
-
effects: focusEffect.of(false)
|
2610
|
-
}));
|
2611
|
-
}
|
2612
|
-
})
|
2613
|
-
];
|
2614
|
-
|
2615
|
-
// packages/ui/react-ui-editor/src/defaults.ts
|
2616
|
-
import { EditorView as EditorView14 } from "@codemirror/view";
|
2617
2595
|
import { mx as mx2 } from "@dxos/react-ui-theme";
|
2618
2596
|
|
2619
|
-
//
|
2597
|
+
// src/styles/markdown.ts
|
2620
2598
|
import { mx } from "@dxos/react-ui-theme";
|
2621
2599
|
var headings = {
|
2622
2600
|
1: "text-4xl",
|
@@ -2635,7 +2613,7 @@ var theme = {
|
|
2635
2613
|
}
|
2636
2614
|
};
|
2637
2615
|
|
2638
|
-
//
|
2616
|
+
// src/styles/tokens.ts
|
2639
2617
|
import { tokens } from "@dxos/react-ui-theme";
|
2640
2618
|
import { get } from "@dxos/util";
|
2641
2619
|
var getToken = (path, defaultValue) => {
|
@@ -2645,7 +2623,7 @@ var getToken = (path, defaultValue) => {
|
|
2645
2623
|
var fontBody = getToken("fontFamily.body");
|
2646
2624
|
var fontMono = getToken("fontFamily.mono");
|
2647
2625
|
|
2648
|
-
//
|
2626
|
+
// src/styles/theme.ts
|
2649
2627
|
var defaultTheme = {
|
2650
2628
|
"&": {},
|
2651
2629
|
"&.cm-focused": {
|
@@ -2680,18 +2658,17 @@ var defaultTheme = {
|
|
2680
2658
|
".cm-gutter": {},
|
2681
2659
|
".cm-gutter.cm-lineNumbers": {
|
2682
2660
|
paddingRight: "4px",
|
2683
|
-
borderRight: "1px solid var(--dx-
|
2661
|
+
borderRight: "1px solid var(--dx-subduedSeparator)"
|
2684
2662
|
},
|
2685
2663
|
".cm-gutter.cm-lineNumbers .cm-gutterElement": {
|
2686
|
-
minWidth: "40px"
|
2687
|
-
alignContent: "center"
|
2664
|
+
minWidth: "40px"
|
2688
2665
|
},
|
2689
2666
|
/**
|
2690
|
-
* Height is set to match the corresponding line.
|
2667
|
+
* Height is set to match the corresponding line (which may have wrapped).
|
2691
2668
|
*/
|
2692
2669
|
".cm-gutterElement": {
|
2693
|
-
|
2694
|
-
|
2670
|
+
fontSize: "12px",
|
2671
|
+
lineHeight: "24px"
|
2695
2672
|
},
|
2696
2673
|
/**
|
2697
2674
|
* Line.
|
@@ -2709,7 +2686,7 @@ var defaultTheme = {
|
|
2709
2686
|
borderLeft: "2px solid var(--dx-cmCursor)"
|
2710
2687
|
},
|
2711
2688
|
".cm-placeholder": {
|
2712
|
-
color: "var(--dx-
|
2689
|
+
color: "var(--dx-placeholder)"
|
2713
2690
|
},
|
2714
2691
|
/**
|
2715
2692
|
* Selection (layer).
|
@@ -2751,7 +2728,7 @@ var defaultTheme = {
|
|
2751
2728
|
* Tooltip.
|
2752
2729
|
*/
|
2753
2730
|
".cm-tooltip": {
|
2754
|
-
background: "var(--dx-
|
2731
|
+
background: "var(--dx-modalSurface)"
|
2755
2732
|
},
|
2756
2733
|
".cm-tooltip-below": {},
|
2757
2734
|
/**
|
@@ -2771,7 +2748,8 @@ var defaultTheme = {
|
|
2771
2748
|
padding: "4px"
|
2772
2749
|
},
|
2773
2750
|
".cm-tooltip.cm-tooltip-autocomplete > ul > li[aria-selected]": {
|
2774
|
-
background: "var(--dx-
|
2751
|
+
background: "var(--dx-accentSurface)",
|
2752
|
+
color: "var(--dx-accentSurfaceText)"
|
2775
2753
|
},
|
2776
2754
|
".cm-tooltip.cm-tooltip-autocomplete > ul > completion-section": {
|
2777
2755
|
paddingLeft: "4px !important",
|
@@ -2825,7 +2803,7 @@ var defaultTheme = {
|
|
2825
2803
|
outline: "1px solid transparent"
|
2826
2804
|
},
|
2827
2805
|
".cm-panel input, .cm-panel button": {
|
2828
|
-
backgroundColor: "var(--dx-
|
2806
|
+
backgroundColor: "var(--dx-inputSurface)"
|
2829
2807
|
},
|
2830
2808
|
".cm-panel input:focus, .cm-panel button:focus": {
|
2831
2809
|
outline: "1px solid var(--dx-neutralFocusIndicator)"
|
@@ -2857,7 +2835,7 @@ var defaultTheme = {
|
|
2857
2835
|
}
|
2858
2836
|
};
|
2859
2837
|
|
2860
|
-
//
|
2838
|
+
// src/defaults.ts
|
2861
2839
|
var editorWidth = "!mli-auto is-full max-is-[min(50rem,100%-4rem)]";
|
2862
2840
|
var editorSlots = {
|
2863
2841
|
scroll: {
|
@@ -2867,13 +2845,13 @@ var editorSlots = {
|
|
2867
2845
|
className: editorWidth
|
2868
2846
|
}
|
2869
2847
|
};
|
2870
|
-
var editorGutter =
|
2848
|
+
var editorGutter = EditorView13.theme({
|
2871
2849
|
".cm-gutters": {
|
2872
2850
|
background: "var(--dx-baseSurface)",
|
2873
2851
|
paddingRight: "1rem"
|
2874
2852
|
}
|
2875
2853
|
});
|
2876
|
-
var editorMonospace =
|
2854
|
+
var editorMonospace = EditorView13.theme({
|
2877
2855
|
".cm-content": {
|
2878
2856
|
fontFamily: fontMono
|
2879
2857
|
}
|
@@ -2881,8 +2859,39 @@ var editorMonospace = EditorView14.theme({
|
|
2881
2859
|
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
2882
2860
|
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
2861
|
|
2884
|
-
//
|
2885
|
-
|
2862
|
+
// src/extensions/focus.ts
|
2863
|
+
import { StateEffect as StateEffect5, StateField as StateField6 } from "@codemirror/state";
|
2864
|
+
import { EditorView as EditorView14 } from "@codemirror/view";
|
2865
|
+
var focusEffect = StateEffect5.define();
|
2866
|
+
var focusField = StateField6.define({
|
2867
|
+
create: () => false,
|
2868
|
+
update: (value, tr) => {
|
2869
|
+
for (const effect of tr.effects) {
|
2870
|
+
if (effect.is(focusEffect)) {
|
2871
|
+
return effect.value;
|
2872
|
+
}
|
2873
|
+
}
|
2874
|
+
return value;
|
2875
|
+
}
|
2876
|
+
});
|
2877
|
+
var focus = [
|
2878
|
+
focusField,
|
2879
|
+
EditorView14.domEventHandlers({
|
2880
|
+
focus: (event, view) => {
|
2881
|
+
setTimeout(() => view.dispatch({
|
2882
|
+
effects: focusEffect.of(true)
|
2883
|
+
}));
|
2884
|
+
},
|
2885
|
+
blur: (event, view) => {
|
2886
|
+
setTimeout(() => view.dispatch({
|
2887
|
+
effects: focusEffect.of(false)
|
2888
|
+
}));
|
2889
|
+
}
|
2890
|
+
})
|
2891
|
+
];
|
2892
|
+
|
2893
|
+
// src/extensions/factories.ts
|
2894
|
+
var __dxlog_file8 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/factories.ts";
|
2886
2895
|
var preventNewline = EditorState.transactionFilter.of((tr) => tr.newDoc.lines > 1 ? [] : tr);
|
2887
2896
|
var defaultBasicOptions = {
|
2888
2897
|
allowMultipleSelections: true,
|
@@ -2893,7 +2902,7 @@ var defaultBasicOptions = {
|
|
2893
2902
|
history: true,
|
2894
2903
|
keymap: "standard",
|
2895
2904
|
lineWrapping: true,
|
2896
|
-
search:
|
2905
|
+
search: false
|
2897
2906
|
};
|
2898
2907
|
var keymaps = {
|
2899
2908
|
// https://codemirror.net/docs/ref/#commands.standardKeymap
|
@@ -2908,7 +2917,7 @@ var createBasicExtensions = (_props) => {
|
|
2908
2917
|
EditorView15.exceptionSink.of((err) => {
|
2909
2918
|
log5.catch(err, void 0, {
|
2910
2919
|
F: __dxlog_file8,
|
2911
|
-
L:
|
2920
|
+
L: 101,
|
2912
2921
|
S: void 0,
|
2913
2922
|
C: (f, a) => f(...a)
|
2914
2923
|
});
|
@@ -2958,11 +2967,17 @@ var createBasicExtensions = (_props) => {
|
|
2958
2967
|
].filter(isNotFalsy2))
|
2959
2968
|
].filter(isNotFalsy2);
|
2960
2969
|
};
|
2961
|
-
var
|
2970
|
+
var grow = {
|
2962
2971
|
editor: {
|
2963
|
-
className: "
|
2972
|
+
className: "is-full bs-full"
|
2964
2973
|
}
|
2965
2974
|
};
|
2975
|
+
var fullWidth = {
|
2976
|
+
editor: {
|
2977
|
+
className: "is-full"
|
2978
|
+
}
|
2979
|
+
};
|
2980
|
+
var defaultThemeSlots = grow;
|
2966
2981
|
var createThemeExtensions = ({ themeMode, styles: styles4, syntaxHighlighting: _syntaxHighlighting, slots: _slots } = {}) => {
|
2967
2982
|
const slots = defaultsDeep2({}, _slots, defaultThemeSlots);
|
2968
2983
|
return [
|
@@ -2980,6 +2995,11 @@ var createThemeExtensions = ({ themeMode, styles: styles4, syntaxHighlighting: _
|
|
2980
2995
|
constructor(view) {
|
2981
2996
|
view.scrollDOM.classList.add(slots.scroll.className);
|
2982
2997
|
}
|
2998
|
+
}),
|
2999
|
+
slots.scroller?.className && ViewPlugin10.fromClass(class {
|
3000
|
+
constructor(view) {
|
3001
|
+
view.dom.querySelector(".cm-scroller")?.classList.add(...slots.scroller.className.split(" "));
|
3002
|
+
}
|
2983
3003
|
})
|
2984
3004
|
].filter(isNotFalsy2);
|
2985
3005
|
};
|
@@ -3005,7 +3025,7 @@ var createDataExtensions = ({ id, text, space, identity }) => {
|
|
3005
3025
|
return extensions;
|
3006
3026
|
};
|
3007
3027
|
|
3008
|
-
//
|
3028
|
+
// src/extensions/folding.tsx
|
3009
3029
|
import { codeFolding, foldGutter } from "@codemirror/language";
|
3010
3030
|
import { EditorView as EditorView16 } from "@codemirror/view";
|
3011
3031
|
import React2 from "react";
|
@@ -3043,10 +3063,11 @@ var folding = (_props = {}) => [
|
|
3043
3063
|
})
|
3044
3064
|
];
|
3045
3065
|
|
3046
|
-
//
|
3066
|
+
// src/extensions/hashtag.tsx
|
3047
3067
|
import { Decoration as Decoration8, EditorView as EditorView17, MatchDecorator, ViewPlugin as ViewPlugin11, WidgetType as WidgetType4 } from "@codemirror/view";
|
3048
3068
|
import { getHashColor, mx as mx3 } from "@dxos/react-ui-theme";
|
3049
3069
|
var TagWidget = class extends WidgetType4 {
|
3070
|
+
_text;
|
3050
3071
|
constructor(_text) {
|
3051
3072
|
super(), this._text = _text;
|
3052
3073
|
}
|
@@ -3065,6 +3086,7 @@ var tagMatcher = new MatchDecorator({
|
|
3065
3086
|
});
|
3066
3087
|
var hashtag = () => [
|
3067
3088
|
ViewPlugin11.fromClass(class {
|
3089
|
+
tags;
|
3068
3090
|
constructor(view) {
|
3069
3091
|
this.tags = tagMatcher.createDeco(view);
|
3070
3092
|
}
|
@@ -3086,7 +3108,7 @@ var hashtag = () => [
|
|
3086
3108
|
})
|
3087
3109
|
];
|
3088
3110
|
|
3089
|
-
//
|
3111
|
+
// src/extensions/json.ts
|
3090
3112
|
import { json, jsonParseLinter } from "@codemirror/lang-json";
|
3091
3113
|
import { linter } from "@codemirror/lint";
|
3092
3114
|
import Ajv from "ajv";
|
@@ -3131,7 +3153,7 @@ var schemaLinter = (validate) => (view) => {
|
|
3131
3153
|
}
|
3132
3154
|
};
|
3133
3155
|
|
3134
|
-
//
|
3156
|
+
// src/extensions/listener.ts
|
3135
3157
|
import { EditorView as EditorView18 } from "@codemirror/view";
|
3136
3158
|
var listener = ({ onFocus, onChange }) => {
|
3137
3159
|
const extensions = [];
|
@@ -3145,12 +3167,13 @@ var listener = ({ onFocus, onChange }) => {
|
|
3145
3167
|
return extensions;
|
3146
3168
|
};
|
3147
3169
|
|
3148
|
-
//
|
3170
|
+
// src/extensions/markdown/formatting.ts
|
3149
3171
|
import { snippet } from "@codemirror/autocomplete";
|
3150
3172
|
import { syntaxTree as syntaxTree2 } from "@codemirror/language";
|
3151
3173
|
import { EditorSelection as EditorSelection2 } from "@codemirror/state";
|
3152
3174
|
import { EditorView as EditorView19, keymap as keymap9 } from "@codemirror/view";
|
3153
|
-
import { useMemo as
|
3175
|
+
import { useCallback as useCallback2, useMemo as useMemo2 } from "react";
|
3176
|
+
import { debounceAndThrottle } from "@dxos/async";
|
3154
3177
|
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
3178
|
var Inline = /* @__PURE__ */ function(Inline2) {
|
3156
3179
|
Inline2[Inline2["Strong"] = 0] = "Strong";
|
@@ -4238,16 +4261,21 @@ var getFormatting = (state) => {
|
|
4238
4261
|
};
|
4239
4262
|
};
|
4240
4263
|
var useFormattingState = (state) => {
|
4241
|
-
|
4264
|
+
const handleUpdate = useCallback2(debounceAndThrottle((update2) => {
|
4242
4265
|
if (update2.docChanged || update2.selectionSet) {
|
4243
4266
|
Object.entries(getFormatting(update2.state)).forEach(([key, active]) => {
|
4244
4267
|
state[key] = active;
|
4245
4268
|
});
|
4246
4269
|
}
|
4247
|
-
}), [
|
4270
|
+
}, 100), [
|
4271
|
+
state
|
4272
|
+
]);
|
4273
|
+
return useMemo2(() => EditorView19.updateListener.of(handleUpdate), [
|
4274
|
+
handleUpdate
|
4275
|
+
]);
|
4248
4276
|
};
|
4249
4277
|
|
4250
|
-
//
|
4278
|
+
// src/extensions/markdown/action.ts
|
4251
4279
|
var processEditorPayload = (view, { type, data }) => {
|
4252
4280
|
let inlineType, listType;
|
4253
4281
|
switch (type) {
|
@@ -4296,19 +4324,19 @@ var processEditorPayload = (view, { type, data }) => {
|
|
4296
4324
|
});
|
4297
4325
|
};
|
4298
4326
|
|
4299
|
-
//
|
4327
|
+
// src/extensions/markdown/bundle.ts
|
4300
4328
|
import { completionKeymap as completionKeymap2 } from "@codemirror/autocomplete";
|
4301
4329
|
import { defaultKeymap as defaultKeymap2, indentWithTab as indentWithTab2 } from "@codemirror/commands";
|
4302
|
-
import { markdownLanguage as markdownLanguage3
|
4330
|
+
import { markdown, markdownLanguage as markdownLanguage3 } from "@codemirror/lang-markdown";
|
4303
4331
|
import { syntaxHighlighting as syntaxHighlighting2 } from "@codemirror/language";
|
4304
4332
|
import { languages } from "@codemirror/language-data";
|
4305
4333
|
import { keymap as keymap10 } from "@codemirror/view";
|
4306
4334
|
import { isNotFalsy as isNotFalsy3 } from "@dxos/util";
|
4307
4335
|
|
4308
|
-
//
|
4336
|
+
// src/extensions/markdown/highlight.ts
|
4309
4337
|
import { markdownLanguage as markdownLanguage2 } from "@codemirror/lang-markdown";
|
4310
4338
|
import { HighlightStyle } from "@codemirror/language";
|
4311
|
-
import {
|
4339
|
+
import { Tag, styleTags, tags } from "@lezer/highlight";
|
4312
4340
|
import { Table } from "@lezer/markdown";
|
4313
4341
|
var markdownTags = {
|
4314
4342
|
Blockquote: Tag.define(),
|
@@ -4484,7 +4512,7 @@ var markdownHighlightStyle = (_options = {}) => {
|
|
4484
4512
|
});
|
4485
4513
|
};
|
4486
4514
|
|
4487
|
-
//
|
4515
|
+
// src/extensions/markdown/bundle.ts
|
4488
4516
|
var createMarkdownExtensions = (options = {}) => {
|
4489
4517
|
return [
|
4490
4518
|
// Main extension.
|
@@ -4519,7 +4547,7 @@ var createMarkdownExtensions = (options = {}) => {
|
|
4519
4547
|
];
|
4520
4548
|
};
|
4521
4549
|
|
4522
|
-
//
|
4550
|
+
// src/extensions/markdown/debug.ts
|
4523
4551
|
import { syntaxTree as syntaxTree3 } from "@codemirror/language";
|
4524
4552
|
import { StateField as StateField7 } from "@codemirror/state";
|
4525
4553
|
var debugTree = (cb) => StateField7.define({
|
@@ -4546,14 +4574,14 @@ var convertTreeToJson = (state) => {
|
|
4546
4574
|
return treeToJson(syntaxTree3(state).cursor());
|
4547
4575
|
};
|
4548
4576
|
|
4549
|
-
//
|
4577
|
+
// src/extensions/markdown/decorate.ts
|
4550
4578
|
import { syntaxTree as syntaxTree7 } from "@codemirror/language";
|
4551
4579
|
import { RangeSetBuilder as RangeSetBuilder6, StateEffect as StateEffect6 } from "@codemirror/state";
|
4552
|
-
import {
|
4580
|
+
import { Decoration as Decoration11, EditorView as EditorView23, ViewPlugin as ViewPlugin13, WidgetType as WidgetType7 } from "@codemirror/view";
|
4553
4581
|
import { invariant as invariant4 } from "@dxos/invariant";
|
4554
4582
|
import { mx as mx4 } from "@dxos/react-ui-theme";
|
4555
4583
|
|
4556
|
-
//
|
4584
|
+
// src/extensions/markdown/changes.ts
|
4557
4585
|
import { syntaxTree as syntaxTree4 } from "@codemirror/language";
|
4558
4586
|
import { Transaction as Transaction2 } from "@codemirror/state";
|
4559
4587
|
import { ViewPlugin as ViewPlugin12 } from "@codemirror/view";
|
@@ -4697,7 +4725,7 @@ var getValidUrl = (str) => {
|
|
4697
4725
|
}
|
4698
4726
|
};
|
4699
4727
|
|
4700
|
-
//
|
4728
|
+
// src/extensions/markdown/image.ts
|
4701
4729
|
import { syntaxTree as syntaxTree5 } from "@codemirror/language";
|
4702
4730
|
import { StateField as StateField8 } from "@codemirror/state";
|
4703
4731
|
import { Decoration as Decoration9, EditorView as EditorView20, WidgetType as WidgetType5 } from "@codemirror/view";
|
@@ -4767,6 +4795,7 @@ var preloadImage = (url) => {
|
|
4767
4795
|
}
|
4768
4796
|
};
|
4769
4797
|
var ImageWidget = class extends WidgetType5 {
|
4798
|
+
_url;
|
4770
4799
|
constructor(_url) {
|
4771
4800
|
super(), this._url = _url;
|
4772
4801
|
}
|
@@ -4786,7 +4815,7 @@ var ImageWidget = class extends WidgetType5 {
|
|
4786
4815
|
}
|
4787
4816
|
};
|
4788
4817
|
|
4789
|
-
//
|
4818
|
+
// src/extensions/markdown/styles.ts
|
4790
4819
|
import { EditorView as EditorView21 } from "@codemirror/view";
|
4791
4820
|
var bulletListIndentationWidth = 24;
|
4792
4821
|
var orderedListIndentationWidth = 36;
|
@@ -4909,7 +4938,7 @@ var formattingStyles = EditorView21.theme({
|
|
4909
4938
|
}
|
4910
4939
|
});
|
4911
4940
|
|
4912
|
-
//
|
4941
|
+
// src/extensions/markdown/table.ts
|
4913
4942
|
import { syntaxTree as syntaxTree6 } from "@codemirror/language";
|
4914
4943
|
import { RangeSetBuilder as RangeSetBuilder5, StateField as StateField9 } from "@codemirror/state";
|
4915
4944
|
import { Decoration as Decoration10, EditorView as EditorView22, WidgetType as WidgetType6 } from "@codemirror/view";
|
@@ -4975,6 +5004,7 @@ var update = (state, _options) => {
|
|
4975
5004
|
return builder.finish();
|
4976
5005
|
};
|
4977
5006
|
var TableWidget = class extends WidgetType6 {
|
5007
|
+
_table;
|
4978
5008
|
constructor(_table) {
|
4979
5009
|
super(), this._table = _table;
|
4980
5010
|
}
|
@@ -5007,8 +5037,8 @@ var TableWidget = class extends WidgetType6 {
|
|
5007
5037
|
}
|
5008
5038
|
};
|
5009
5039
|
|
5010
|
-
//
|
5011
|
-
var __dxlog_file9 = "/
|
5040
|
+
// src/extensions/markdown/decorate.ts
|
5041
|
+
var __dxlog_file9 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts";
|
5012
5042
|
var Unicode = {
|
5013
5043
|
emDash: "\u2014",
|
5014
5044
|
bullet: "\u2022",
|
@@ -5023,6 +5053,8 @@ var HorizontalRuleWidget = class extends WidgetType7 {
|
|
5023
5053
|
}
|
5024
5054
|
};
|
5025
5055
|
var LinkButton = class extends WidgetType7 {
|
5056
|
+
url;
|
5057
|
+
render;
|
5026
5058
|
constructor(url, render) {
|
5027
5059
|
super(), this.url = url, this.render = render;
|
5028
5060
|
}
|
@@ -5039,6 +5071,7 @@ var LinkButton = class extends WidgetType7 {
|
|
5039
5071
|
}
|
5040
5072
|
};
|
5041
5073
|
var CheckboxWidget = class extends WidgetType7 {
|
5074
|
+
_checked;
|
5042
5075
|
constructor(_checked) {
|
5043
5076
|
super(), this._checked = _checked;
|
5044
5077
|
}
|
@@ -5083,6 +5116,8 @@ var CheckboxWidget = class extends WidgetType7 {
|
|
5083
5116
|
}
|
5084
5117
|
};
|
5085
5118
|
var TextWidget = class extends WidgetType7 {
|
5119
|
+
text;
|
5120
|
+
className;
|
5086
5121
|
constructor(text, className) {
|
5087
5122
|
super(), this.text = text, this.className = className;
|
5088
5123
|
}
|
@@ -5140,7 +5175,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5140
5175
|
const getHeaderLevels = (node, level) => {
|
5141
5176
|
invariant4(level > 0, void 0, {
|
5142
5177
|
F: __dxlog_file9,
|
5143
|
-
L:
|
5178
|
+
L: 180,
|
5144
5179
|
S: void 0,
|
5145
5180
|
A: [
|
5146
5181
|
"level > 0",
|
@@ -5179,7 +5214,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5179
5214
|
const getCurrentListLevel = () => {
|
5180
5215
|
invariant4(listLevels.length, void 0, {
|
5181
5216
|
F: __dxlog_file9,
|
5182
|
-
L:
|
5217
|
+
L: 202,
|
5183
5218
|
S: void 0,
|
5184
5219
|
A: [
|
5185
5220
|
"listLevels.length",
|
@@ -5419,6 +5454,9 @@ var forceUpdate = StateEffect6.define();
|
|
5419
5454
|
var decorateMarkdown = (options = {}) => {
|
5420
5455
|
return [
|
5421
5456
|
ViewPlugin13.fromClass(class {
|
5457
|
+
deco;
|
5458
|
+
atomicDeco;
|
5459
|
+
pendingUpdate;
|
5422
5460
|
constructor(view) {
|
5423
5461
|
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations2(view, options, view.hasFocus));
|
5424
5462
|
}
|
@@ -5462,7 +5500,7 @@ var decorateMarkdown = (options = {}) => {
|
|
5462
5500
|
];
|
5463
5501
|
};
|
5464
5502
|
|
5465
|
-
//
|
5503
|
+
// src/extensions/markdown/link.ts
|
5466
5504
|
import { syntaxTree as syntaxTree8 } from "@codemirror/language";
|
5467
5505
|
import { hoverTooltip as hoverTooltip2 } from "@codemirror/view";
|
5468
5506
|
import { tooltipContent } from "@dxos/react-ui-theme";
|
@@ -5504,10 +5542,10 @@ var linkTooltip = (renderTooltip) => {
|
|
5504
5542
|
});
|
5505
5543
|
};
|
5506
5544
|
|
5507
|
-
//
|
5545
|
+
// src/extensions/mention.ts
|
5508
5546
|
import { autocompletion as autocompletion2 } from "@codemirror/autocomplete";
|
5509
5547
|
import { log as log6 } from "@dxos/log";
|
5510
|
-
var __dxlog_file10 = "/
|
5548
|
+
var __dxlog_file10 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/mention.ts";
|
5511
5549
|
var mention = ({ debug, onSearch }) => {
|
5512
5550
|
return autocompletion2({
|
5513
5551
|
// TODO(burdon): Not working.
|
@@ -5542,23 +5580,10 @@ var mention = ({ debug, onSearch }) => {
|
|
5542
5580
|
});
|
5543
5581
|
};
|
5544
5582
|
|
5545
|
-
//
|
5583
|
+
// src/extensions/modes.ts
|
5546
5584
|
import { keymap as keymap11 } from "@codemirror/view";
|
5547
5585
|
import { vim } from "@replit/codemirror-vim";
|
5548
5586
|
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
5587
|
var editorInputMode = singleValueFacet({});
|
5563
5588
|
var InputModeExtensions = {
|
5564
5589
|
default: [],
|
@@ -5588,21 +5613,21 @@ var InputModeExtensions = {
|
|
5588
5613
|
]
|
5589
5614
|
};
|
5590
5615
|
|
5591
|
-
//
|
5616
|
+
// src/extensions/outliner/commands.ts
|
5592
5617
|
import { indentMore } from "@codemirror/commands";
|
5593
5618
|
import { getIndentUnit } from "@codemirror/language";
|
5594
5619
|
import { EditorSelection as EditorSelection3 } from "@codemirror/state";
|
5595
5620
|
import { keymap as keymap12 } from "@codemirror/view";
|
5596
5621
|
|
5597
|
-
//
|
5622
|
+
// src/extensions/outliner/selection.ts
|
5598
5623
|
import { Compartment, Facet as Facet3 } from "@codemirror/state";
|
5599
5624
|
|
5600
|
-
//
|
5625
|
+
// src/extensions/outliner/tree.ts
|
5601
5626
|
import { syntaxTree as syntaxTree9 } from "@codemirror/language";
|
5602
5627
|
import { StateField as StateField10 } from "@codemirror/state";
|
5603
5628
|
import { Facet as Facet2 } from "@codemirror/state";
|
5604
5629
|
import { invariant as invariant5 } from "@dxos/invariant";
|
5605
|
-
var __dxlog_file11 = "/
|
5630
|
+
var __dxlog_file11 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/outliner/tree.ts";
|
5606
5631
|
var itemToJSON = ({ type, index, level, lineRange, contentRange, children }) => {
|
5607
5632
|
return {
|
5608
5633
|
type,
|
@@ -5614,11 +5639,14 @@ var itemToJSON = ({ type, index, level, lineRange, contentRange, children }) =>
|
|
5614
5639
|
};
|
5615
5640
|
};
|
5616
5641
|
var Tree = class {
|
5642
|
+
type = "root";
|
5643
|
+
index = -1;
|
5644
|
+
level = -1;
|
5645
|
+
node;
|
5646
|
+
lineRange;
|
5647
|
+
contentRange;
|
5648
|
+
children = [];
|
5617
5649
|
constructor(node) {
|
5618
|
-
this.type = "root";
|
5619
|
-
this.index = -1;
|
5620
|
-
this.level = -1;
|
5621
|
-
this.children = [];
|
5622
5650
|
this.node = node;
|
5623
5651
|
this.lineRange = {
|
5624
5652
|
from: node.from,
|
@@ -5896,7 +5924,7 @@ var outlinerTree = (options = {}) => {
|
|
5896
5924
|
];
|
5897
5925
|
};
|
5898
5926
|
|
5899
|
-
//
|
5927
|
+
// src/extensions/outliner/selection.ts
|
5900
5928
|
var getSelection = (state) => state.selection.main;
|
5901
5929
|
var selectionEquals = (a, b) => a.length === b.length && a.every((i) => b.includes(i));
|
5902
5930
|
var selectionFacet = Facet3.define({
|
@@ -5926,7 +5954,7 @@ var selectDown = (view) => {
|
|
5926
5954
|
return true;
|
5927
5955
|
};
|
5928
5956
|
|
5929
|
-
//
|
5957
|
+
// src/extensions/outliner/commands.ts
|
5930
5958
|
var indentItemMore = (view) => {
|
5931
5959
|
const pos = getSelection(view.state).from;
|
5932
5960
|
const tree = view.state.facet(treeFacet);
|
@@ -6160,16 +6188,16 @@ var commands = () => keymap12.of([
|
|
6160
6188
|
}
|
6161
6189
|
]);
|
6162
6190
|
|
6163
|
-
//
|
6191
|
+
// src/extensions/outliner/outliner.ts
|
6164
6192
|
import { Prec as Prec4 } from "@codemirror/state";
|
6165
6193
|
import { Decoration as Decoration12, EditorView as EditorView24, ViewPlugin as ViewPlugin15 } from "@codemirror/view";
|
6166
6194
|
import { mx as mx5 } from "@dxos/react-ui-theme";
|
6167
6195
|
|
6168
|
-
//
|
6196
|
+
// src/extensions/outliner/editor.ts
|
6169
6197
|
import { EditorSelection as EditorSelection4, EditorState as EditorState2 } from "@codemirror/state";
|
6170
6198
|
import { ViewPlugin as ViewPlugin14 } from "@codemirror/view";
|
6171
6199
|
import { log as log7 } from "@dxos/log";
|
6172
|
-
var __dxlog_file12 = "/
|
6200
|
+
var __dxlog_file12 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/extensions/outliner/editor.ts";
|
6173
6201
|
var LIST_ITEM_REGEX = /^\s*- (\[ \]|\[x\])? /;
|
6174
6202
|
var initialize = () => {
|
6175
6203
|
return ViewPlugin14.fromClass(class {
|
@@ -6354,7 +6382,7 @@ var editor = () => [
|
|
6354
6382
|
})
|
6355
6383
|
];
|
6356
6384
|
|
6357
|
-
//
|
6385
|
+
// src/extensions/outliner/outliner.ts
|
6358
6386
|
var outliner = (options = {}) => [
|
6359
6387
|
// Commands.
|
6360
6388
|
Prec4.highest(commands()),
|
@@ -6379,8 +6407,8 @@ var outliner = (options = {}) => [
|
|
6379
6407
|
];
|
6380
6408
|
var decorations = () => [
|
6381
6409
|
ViewPlugin15.fromClass(class {
|
6410
|
+
decorations = Decoration12.none;
|
6382
6411
|
constructor(view) {
|
6383
|
-
this.decorations = Decoration12.none;
|
6384
6412
|
this.updateDecorations(view.state, view);
|
6385
6413
|
}
|
6386
6414
|
update(update2) {
|
@@ -6446,7 +6474,7 @@ var decorations = () => [
|
|
6446
6474
|
}))
|
6447
6475
|
];
|
6448
6476
|
|
6449
|
-
//
|
6477
|
+
// src/extensions/preview/preview.ts
|
6450
6478
|
import "@dxos/lit-ui/dx-ref-tag.pcss";
|
6451
6479
|
import { syntaxTree as syntaxTree10 } from "@codemirror/language";
|
6452
6480
|
import { RangeSetBuilder as RangeSetBuilder7, StateField as StateField11 } from "@codemirror/state";
|
@@ -6517,6 +6545,8 @@ var buildDecorations3 = (state, options) => {
|
|
6517
6545
|
return builder.finish();
|
6518
6546
|
};
|
6519
6547
|
var PreviewInlineWidget = class extends WidgetType8 {
|
6548
|
+
_options;
|
6549
|
+
_link;
|
6520
6550
|
constructor(_options, _link) {
|
6521
6551
|
super(), this._options = _options, this._link = _link;
|
6522
6552
|
}
|
@@ -6534,6 +6564,8 @@ var PreviewInlineWidget = class extends WidgetType8 {
|
|
6534
6564
|
}
|
6535
6565
|
};
|
6536
6566
|
var PreviewBlockWidget = class extends WidgetType8 {
|
6567
|
+
_options;
|
6568
|
+
_link;
|
6537
6569
|
constructor(_options, _link) {
|
6538
6570
|
super(), this._options = _options, this._link = _link;
|
6539
6571
|
}
|
@@ -6554,7 +6586,7 @@ var PreviewBlockWidget = class extends WidgetType8 {
|
|
6554
6586
|
}
|
6555
6587
|
};
|
6556
6588
|
|
6557
|
-
//
|
6589
|
+
// src/extensions/typewriter.ts
|
6558
6590
|
import { keymap as keymap13 } from "@codemirror/view";
|
6559
6591
|
var defaultItems = [
|
6560
6592
|
"hello world!",
|
@@ -6607,11 +6639,218 @@ var typewriter = ({ delay = 75, items = defaultItems } = {}) => {
|
|
6607
6639
|
return true;
|
6608
6640
|
}
|
6609
6641
|
}
|
6610
|
-
])
|
6611
|
-
];
|
6642
|
+
])
|
6643
|
+
];
|
6644
|
+
};
|
6645
|
+
|
6646
|
+
// src/hooks/useTextEditor.ts
|
6647
|
+
var __dxlog_file13 = "/__w/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
6648
|
+
var instanceCount = 0;
|
6649
|
+
var useTextEditor = (props = {}, deps = []) => {
|
6650
|
+
const { id, doc, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = useMemo3(() => getProviderValue(props), deps ?? []);
|
6651
|
+
const [instanceId] = useState2(() => `text-editor-${++instanceCount}`);
|
6652
|
+
const [view, setView] = useState2();
|
6653
|
+
const parentRef = useRef2(null);
|
6654
|
+
useEffect2(() => {
|
6655
|
+
let view2;
|
6656
|
+
if (parentRef.current) {
|
6657
|
+
log8("create", {
|
6658
|
+
id,
|
6659
|
+
instanceId,
|
6660
|
+
doc: initialValue?.length ?? 0
|
6661
|
+
}, {
|
6662
|
+
F: __dxlog_file13,
|
6663
|
+
L: 75,
|
6664
|
+
S: void 0,
|
6665
|
+
C: (f, a) => f(...a)
|
6666
|
+
});
|
6667
|
+
let initialSelection;
|
6668
|
+
if (selection?.anchor && initialValue?.length) {
|
6669
|
+
if (selection.anchor <= initialValue.length && (selection?.head ?? 0) <= initialValue.length) {
|
6670
|
+
initialSelection = selection;
|
6671
|
+
}
|
6672
|
+
} else if (moveToEndOfLine && selection === void 0) {
|
6673
|
+
const index = initialValue?.indexOf("\n");
|
6674
|
+
const anchor = !index || index === -1 ? 0 : index;
|
6675
|
+
initialSelection = {
|
6676
|
+
anchor
|
6677
|
+
};
|
6678
|
+
}
|
6679
|
+
const state = EditorState3.create({
|
6680
|
+
doc: doc ?? initialValue,
|
6681
|
+
// selection: initialSelection,
|
6682
|
+
extensions: [
|
6683
|
+
id && documentId.of(id),
|
6684
|
+
extensions,
|
6685
|
+
// NOTE: This doesn't catch errors in keymap functions.
|
6686
|
+
EditorView26.exceptionSink.of((err) => {
|
6687
|
+
log8.catch(err, void 0, {
|
6688
|
+
F: __dxlog_file13,
|
6689
|
+
L: 97,
|
6690
|
+
S: void 0,
|
6691
|
+
C: (f, a) => f(...a)
|
6692
|
+
});
|
6693
|
+
})
|
6694
|
+
].filter(isNotFalsy4)
|
6695
|
+
});
|
6696
|
+
view2 = new EditorView26({
|
6697
|
+
parent: parentRef.current,
|
6698
|
+
state,
|
6699
|
+
scrollTo: scrollTo ? EditorView26.scrollIntoView(scrollTo, {
|
6700
|
+
yMargin: 96
|
6701
|
+
}) : void 0,
|
6702
|
+
dispatchTransactions: debug ? debugDispatcher : void 0
|
6703
|
+
});
|
6704
|
+
if (moveToEndOfLine && !initialSelection) {
|
6705
|
+
const { to } = view2.state.doc.lineAt(0);
|
6706
|
+
if (to) {
|
6707
|
+
view2.dispatch({
|
6708
|
+
selection: {
|
6709
|
+
anchor: to
|
6710
|
+
}
|
6711
|
+
});
|
6712
|
+
}
|
6713
|
+
}
|
6714
|
+
setView(view2);
|
6715
|
+
}
|
6716
|
+
return () => {
|
6717
|
+
log8("destroy", {
|
6718
|
+
id
|
6719
|
+
}, {
|
6720
|
+
F: __dxlog_file13,
|
6721
|
+
L: 134,
|
6722
|
+
S: void 0,
|
6723
|
+
C: (f, a) => f(...a)
|
6724
|
+
});
|
6725
|
+
view2?.destroy();
|
6726
|
+
};
|
6727
|
+
}, deps);
|
6728
|
+
useEffect2(() => {
|
6729
|
+
if (view) {
|
6730
|
+
if (scrollTo || selection) {
|
6731
|
+
if (selection && selection.anchor > view.state.doc.length) {
|
6732
|
+
log8.warn("invalid selection", {
|
6733
|
+
length: view.state.doc.length,
|
6734
|
+
scrollTo,
|
6735
|
+
selection
|
6736
|
+
}, {
|
6737
|
+
F: __dxlog_file13,
|
6738
|
+
L: 143,
|
6739
|
+
S: void 0,
|
6740
|
+
C: (f, a) => f(...a)
|
6741
|
+
});
|
6742
|
+
return;
|
6743
|
+
}
|
6744
|
+
view.dispatch(createEditorStateTransaction({
|
6745
|
+
scrollTo,
|
6746
|
+
selection
|
6747
|
+
}));
|
6748
|
+
}
|
6749
|
+
}
|
6750
|
+
}, [
|
6751
|
+
view,
|
6752
|
+
scrollTo,
|
6753
|
+
selection
|
6754
|
+
]);
|
6755
|
+
useEffect2(() => {
|
6756
|
+
if (view && autoFocus) {
|
6757
|
+
view.focus();
|
6758
|
+
}
|
6759
|
+
}, [
|
6760
|
+
autoFocus,
|
6761
|
+
view
|
6762
|
+
]);
|
6763
|
+
const focusableGroupAttrs = useFocusableGroup({
|
6764
|
+
tabBehavior: "limited",
|
6765
|
+
ignoreDefaultKeydown: {
|
6766
|
+
Escape: view?.state.facet(editorInputMode).noTabster
|
6767
|
+
}
|
6768
|
+
});
|
6769
|
+
const handleKeyUp = useCallback3((event) => {
|
6770
|
+
const { key, target, currentTarget } = event;
|
6771
|
+
if (target === currentTarget) {
|
6772
|
+
switch (key) {
|
6773
|
+
case "Enter": {
|
6774
|
+
view?.focus();
|
6775
|
+
break;
|
6776
|
+
}
|
6777
|
+
}
|
6778
|
+
}
|
6779
|
+
}, [
|
6780
|
+
view
|
6781
|
+
]);
|
6782
|
+
return {
|
6783
|
+
parentRef,
|
6784
|
+
view,
|
6785
|
+
focusAttributes: {
|
6786
|
+
tabIndex: 0,
|
6787
|
+
...focusableGroupAttrs,
|
6788
|
+
onKeyUp: handleKeyUp
|
6789
|
+
}
|
6790
|
+
};
|
6791
|
+
};
|
6792
|
+
|
6793
|
+
// src/components/Editor/Editor.tsx
|
6794
|
+
var Editor = /* @__PURE__ */ forwardRef(({ classNames, id, text, ...props }, forwardedRef) => {
|
6795
|
+
var _effect = _useSignals();
|
6796
|
+
try {
|
6797
|
+
const { themeMode } = useThemeContext();
|
6798
|
+
const { parentRef, focusAttributes, view } = useTextEditor(() => ({
|
6799
|
+
id,
|
6800
|
+
initialValue: text.content,
|
6801
|
+
...props
|
6802
|
+
}), [
|
6803
|
+
id,
|
6804
|
+
text,
|
6805
|
+
themeMode
|
6806
|
+
]);
|
6807
|
+
useImperativeHandle(forwardedRef, () => view, [
|
6808
|
+
view
|
6809
|
+
]);
|
6810
|
+
return /* @__PURE__ */ React3.createElement("div", {
|
6811
|
+
ref: parentRef,
|
6812
|
+
className: mx6(classNames),
|
6813
|
+
...focusAttributes
|
6814
|
+
});
|
6815
|
+
} finally {
|
6816
|
+
_effect.f();
|
6817
|
+
}
|
6818
|
+
});
|
6819
|
+
|
6820
|
+
// src/components/EditorToolbar/EditorToolbar.tsx
|
6821
|
+
import { useSignals as _useSignals2 } from "@preact-signals/safe-react/tracking";
|
6822
|
+
import { Rx } from "@effect-rx/rx-react";
|
6823
|
+
import React4, { memo, useMemo as useMemo5 } from "react";
|
6824
|
+
import { rxFromSignal } from "@dxos/app-graph";
|
6825
|
+
import { ElevationProvider } from "@dxos/react-ui";
|
6826
|
+
import { MenuProvider, ToolbarMenu, createGapSeparator, useMenuActions } from "@dxos/react-ui-menu";
|
6827
|
+
|
6828
|
+
// src/components/EditorToolbar/util.ts
|
6829
|
+
import { useMemo as useMemo4 } from "react";
|
6830
|
+
import { live } from "@dxos/live-object";
|
6831
|
+
import { createMenuAction, createMenuItemGroup } from "@dxos/react-ui-menu";
|
6832
|
+
var useEditorToolbarState = (initialState = {}) => {
|
6833
|
+
return useMemo4(() => live(initialState), []);
|
6834
|
+
};
|
6835
|
+
var createEditorAction = (id, invoke, properties) => {
|
6836
|
+
const { label = [
|
6837
|
+
`${id} label`,
|
6838
|
+
{
|
6839
|
+
ns: translationKey
|
6840
|
+
}
|
6841
|
+
], ...rest } = properties;
|
6842
|
+
return createMenuAction(id, invoke, {
|
6843
|
+
label,
|
6844
|
+
...rest
|
6845
|
+
});
|
6612
6846
|
};
|
6847
|
+
var createEditorActionGroup = (id, props, icon) => createMenuItemGroup(id, {
|
6848
|
+
icon,
|
6849
|
+
iconOnly: true,
|
6850
|
+
...props
|
6851
|
+
});
|
6613
6852
|
|
6614
|
-
//
|
6853
|
+
// src/components/EditorToolbar/blocks.ts
|
6615
6854
|
var createBlockGroupAction = (value) => createEditorActionGroup("block", {
|
6616
6855
|
variant: "toggleGroup",
|
6617
6856
|
selectCardinality: "single",
|
@@ -6669,7 +6908,7 @@ var createBlocks = (state, getView) => {
|
|
6669
6908
|
};
|
6670
6909
|
};
|
6671
6910
|
|
6672
|
-
//
|
6911
|
+
// src/components/EditorToolbar/formatting.ts
|
6673
6912
|
var formats = {
|
6674
6913
|
strong: "ph--text-b--regular",
|
6675
6914
|
emphasis: "ph--text-italic--regular",
|
@@ -6721,7 +6960,7 @@ var createFormatting = (state, getView) => {
|
|
6721
6960
|
};
|
6722
6961
|
};
|
6723
6962
|
|
6724
|
-
//
|
6963
|
+
// src/components/EditorToolbar/headings.ts
|
6725
6964
|
var createHeadingGroupAction = (value) => createEditorActionGroup("heading", {
|
6726
6965
|
variant: "dropdownMenu",
|
6727
6966
|
applyActive: true,
|
@@ -6776,7 +7015,7 @@ var createHeadings = (state, getView) => {
|
|
6776
7015
|
};
|
6777
7016
|
};
|
6778
7017
|
|
6779
|
-
//
|
7018
|
+
// src/components/EditorToolbar/image.ts
|
6780
7019
|
var createImageUploadAction = (onImageUpload) => createEditorAction("image", onImageUpload, {
|
6781
7020
|
testId: "editor.toolbar.image",
|
6782
7021
|
icon: "ph--image-square--regular"
|
@@ -6793,7 +7032,7 @@ var createImageUpload = (onImageUpload) => ({
|
|
6793
7032
|
]
|
6794
7033
|
});
|
6795
7034
|
|
6796
|
-
//
|
7035
|
+
// src/components/EditorToolbar/lists.ts
|
6797
7036
|
var listStyles = {
|
6798
7037
|
bullet: "ph--list-bullets--regular",
|
6799
7038
|
ordered: "ph--list-numbers--regular",
|
@@ -6844,7 +7083,7 @@ var createLists = (state, getView) => {
|
|
6844
7083
|
};
|
6845
7084
|
};
|
6846
7085
|
|
6847
|
-
//
|
7086
|
+
// src/components/EditorToolbar/search.ts
|
6848
7087
|
import { openSearchPanel } from "@codemirror/search";
|
6849
7088
|
var createSearchAction = (getView) => createEditorAction("search", () => openSearchPanel(getView()), {
|
6850
7089
|
testId: "editor.toolbar.search",
|
@@ -6862,7 +7101,7 @@ var createSearch = (getView) => ({
|
|
6862
7101
|
]
|
6863
7102
|
});
|
6864
7103
|
|
6865
|
-
//
|
7104
|
+
// src/components/EditorToolbar/view-mode.ts
|
6866
7105
|
var createViewModeGroupAction = (value) => createEditorActionGroup("viewMode", {
|
6867
7106
|
variant: "dropdownMenu",
|
6868
7107
|
applyActive: true,
|
@@ -6908,7 +7147,7 @@ var createViewMode = (state, onViewModeChange) => {
|
|
6908
7147
|
};
|
6909
7148
|
};
|
6910
7149
|
|
6911
|
-
//
|
7150
|
+
// src/components/EditorToolbar/EditorToolbar.tsx
|
6912
7151
|
var createToolbar = ({ getView, state, customActions, ...features }) => {
|
6913
7152
|
return Rx.make((get2) => {
|
6914
7153
|
const nodes = [];
|
@@ -6963,7 +7202,7 @@ var createToolbar = ({ getView, state, customActions, ...features }) => {
|
|
6963
7202
|
});
|
6964
7203
|
};
|
6965
7204
|
var useEditorToolbarActionGraph = (props) => {
|
6966
|
-
const menuCreator =
|
7205
|
+
const menuCreator = useMemo5(() => createToolbar({
|
6967
7206
|
getView: props.getView,
|
6968
7207
|
state: props.state,
|
6969
7208
|
customActions: props.customActions,
|
@@ -6989,15 +7228,15 @@ var useEditorToolbarActionGraph = (props) => {
|
|
6989
7228
|
return useMenuActions(menuCreator);
|
6990
7229
|
};
|
6991
7230
|
var EditorToolbar = /* @__PURE__ */ memo(({ classNames, attendableId, role, ...props }) => {
|
6992
|
-
var _effect =
|
7231
|
+
var _effect = _useSignals2();
|
6993
7232
|
try {
|
6994
7233
|
const menuProps = useEditorToolbarActionGraph(props);
|
6995
|
-
return /* @__PURE__ */
|
7234
|
+
return /* @__PURE__ */ React4.createElement(ElevationProvider, {
|
6996
7235
|
elevation: role === "section" ? "positioned" : "base"
|
6997
|
-
}, /* @__PURE__ */
|
7236
|
+
}, /* @__PURE__ */ React4.createElement(MenuProvider, {
|
6998
7237
|
...menuProps,
|
6999
7238
|
attendableId
|
7000
|
-
}, /* @__PURE__ */
|
7239
|
+
}, /* @__PURE__ */ React4.createElement(ToolbarMenu, {
|
7001
7240
|
classNames,
|
7002
7241
|
textBlockWidth: true
|
7003
7242
|
})));
|
@@ -7006,16 +7245,16 @@ var EditorToolbar = /* @__PURE__ */ memo(({ classNames, attendableId, role, ...p
|
|
7006
7245
|
}
|
7007
7246
|
});
|
7008
7247
|
|
7009
|
-
//
|
7010
|
-
import { useSignals as
|
7011
|
-
import
|
7012
|
-
import { Icon as Icon2, Popover, toLocalizedString, useThemeContext, useTranslation } from "@dxos/react-ui";
|
7248
|
+
// src/components/Popover/CommandMenu.tsx
|
7249
|
+
import { useSignals as _useSignals3 } from "@preact-signals/safe-react/tracking";
|
7250
|
+
import React5, { useCallback as useCallback4, useEffect as useEffect3, useRef as useRef3 } from "react";
|
7251
|
+
import { Icon as Icon2, Popover, toLocalizedString, useThemeContext as useThemeContext2, useTranslation } from "@dxos/react-ui";
|
7013
7252
|
var CommandMenu = ({ groups, currentItem, onSelect }) => {
|
7014
|
-
var _effect =
|
7253
|
+
var _effect = _useSignals3();
|
7015
7254
|
try {
|
7016
|
-
const { tx } =
|
7255
|
+
const { tx } = useThemeContext2();
|
7017
7256
|
const groupsWithItems = groups.filter((group) => group.items.length > 0);
|
7018
|
-
return /* @__PURE__ */
|
7257
|
+
return /* @__PURE__ */ React5.createElement(Popover.Portal, null, /* @__PURE__ */ React5.createElement(Popover.Content, {
|
7019
7258
|
align: "start",
|
7020
7259
|
onOpenAutoFocus: (event) => event.preventDefault(),
|
7021
7260
|
classNames: tx("menu.content", "menu--exotic-unfocusable", {
|
@@ -7023,15 +7262,15 @@ var CommandMenu = ({ groups, currentItem, onSelect }) => {
|
|
7023
7262
|
}, [
|
7024
7263
|
"max-h-[300px] overflow-y-auto"
|
7025
7264
|
])
|
7026
|
-
}, /* @__PURE__ */
|
7265
|
+
}, /* @__PURE__ */ React5.createElement(Popover.Viewport, {
|
7027
7266
|
classNames: tx("menu.viewport", "menu__viewport--exotic-unfocusable", {})
|
7028
|
-
}, /* @__PURE__ */
|
7267
|
+
}, /* @__PURE__ */ React5.createElement("ul", null, groupsWithItems.map((group, index) => /* @__PURE__ */ React5.createElement(React5.Fragment, {
|
7029
7268
|
key: group.id
|
7030
|
-
}, /* @__PURE__ */
|
7269
|
+
}, /* @__PURE__ */ React5.createElement(CommandGroup, {
|
7031
7270
|
group,
|
7032
7271
|
currentItem,
|
7033
7272
|
onSelect
|
7034
|
-
}), index < groupsWithItems.length - 1 && /* @__PURE__ */
|
7273
|
+
}), index < groupsWithItems.length - 1 && /* @__PURE__ */ React5.createElement("div", {
|
7035
7274
|
className: tx("menu.separator", "menu__item", {})
|
7036
7275
|
})))))));
|
7037
7276
|
} finally {
|
@@ -7039,13 +7278,13 @@ var CommandMenu = ({ groups, currentItem, onSelect }) => {
|
|
7039
7278
|
}
|
7040
7279
|
};
|
7041
7280
|
var CommandGroup = ({ group, currentItem, onSelect }) => {
|
7042
|
-
var _effect =
|
7281
|
+
var _effect = _useSignals3();
|
7043
7282
|
try {
|
7044
|
-
const { tx } =
|
7283
|
+
const { tx } = useThemeContext2();
|
7045
7284
|
const { t } = useTranslation();
|
7046
|
-
return /* @__PURE__ */
|
7285
|
+
return /* @__PURE__ */ React5.createElement(React5.Fragment, null, group.label && /* @__PURE__ */ React5.createElement("div", {
|
7047
7286
|
className: tx("menu.groupLabel", "menu__group__label", {})
|
7048
|
-
}, /* @__PURE__ */
|
7287
|
+
}, /* @__PURE__ */ React5.createElement("span", null, toLocalizedString(group.label, t))), group.items.map((item) => /* @__PURE__ */ React5.createElement(CommandItem, {
|
7049
7288
|
key: item.id,
|
7050
7289
|
item,
|
7051
7290
|
current: currentItem === item.id,
|
@@ -7056,16 +7295,16 @@ var CommandGroup = ({ group, currentItem, onSelect }) => {
|
|
7056
7295
|
}
|
7057
7296
|
};
|
7058
7297
|
var CommandItem = ({ item, current, onSelect }) => {
|
7059
|
-
var _effect =
|
7298
|
+
var _effect = _useSignals3();
|
7060
7299
|
try {
|
7061
|
-
const ref =
|
7062
|
-
const { tx } =
|
7300
|
+
const ref = useRef3(null);
|
7301
|
+
const { tx } = useThemeContext2();
|
7063
7302
|
const { t } = useTranslation();
|
7064
|
-
const handleSelect =
|
7303
|
+
const handleSelect = useCallback4(() => onSelect(item), [
|
7065
7304
|
item,
|
7066
7305
|
onSelect
|
7067
7306
|
]);
|
7068
|
-
|
7307
|
+
useEffect3(() => {
|
7069
7308
|
if (current && ref.current) {
|
7070
7309
|
ref.current.scrollIntoView({
|
7071
7310
|
behavior: "smooth",
|
@@ -7075,16 +7314,16 @@ var CommandItem = ({ item, current, onSelect }) => {
|
|
7075
7314
|
}, [
|
7076
7315
|
current
|
7077
7316
|
]);
|
7078
|
-
return /* @__PURE__ */
|
7317
|
+
return /* @__PURE__ */ React5.createElement("li", {
|
7079
7318
|
ref,
|
7080
7319
|
className: tx("menu.item", "menu__item--exotic-unfocusable", {}, [
|
7081
7320
|
current && "bg-hoverSurface"
|
7082
7321
|
]),
|
7083
7322
|
onClick: handleSelect
|
7084
|
-
}, item.icon && /* @__PURE__ */
|
7323
|
+
}, item.icon && /* @__PURE__ */ React5.createElement(Icon2, {
|
7085
7324
|
icon: item.icon,
|
7086
7325
|
size: 5
|
7087
|
-
}), /* @__PURE__ */
|
7326
|
+
}), /* @__PURE__ */ React5.createElement("span", {
|
7088
7327
|
className: "grow truncate"
|
7089
7328
|
}, toLocalizedString(item.label, t)));
|
7090
7329
|
} finally {
|
@@ -7271,21 +7510,21 @@ var linkSlashCommands = {
|
|
7271
7510
|
]
|
7272
7511
|
};
|
7273
7512
|
|
7274
|
-
//
|
7275
|
-
import { useSignals as
|
7513
|
+
// src/components/Popover/RefPopover.tsx
|
7514
|
+
import { useSignals as _useSignals4 } from "@preact-signals/safe-react/tracking";
|
7276
7515
|
import { createContext } from "@radix-ui/react-context";
|
7277
|
-
import
|
7516
|
+
import React6, { forwardRef as forwardRef2, useCallback as useCallback5, useEffect as useEffect4, useRef as useRef4, useState as useState3 } from "react";
|
7278
7517
|
import { addEventListener as addEventListener2 } from "@dxos/async";
|
7279
7518
|
import { Popover as Popover2 } from "@dxos/react-ui";
|
7280
7519
|
var customEventOptions = {
|
7281
7520
|
capture: true,
|
7282
7521
|
passive: false
|
7283
7522
|
};
|
7284
|
-
var RefPopover = /* @__PURE__ */
|
7285
|
-
var _effect =
|
7523
|
+
var RefPopover = /* @__PURE__ */ forwardRef2(({ children, open, onOpenChange, modal, onActivate }, ref) => {
|
7524
|
+
var _effect = _useSignals4();
|
7286
7525
|
try {
|
7287
|
-
const [rootRef, setRootRef] =
|
7288
|
-
|
7526
|
+
const [rootRef, setRootRef] = useState3(null);
|
7527
|
+
useEffect4(() => {
|
7289
7528
|
if (!rootRef || !onActivate) {
|
7290
7529
|
return;
|
7291
7530
|
}
|
@@ -7294,13 +7533,13 @@ var RefPopover = /* @__PURE__ */ forwardRef(({ children, open, onOpenChange, mod
|
|
7294
7533
|
rootRef,
|
7295
7534
|
onActivate
|
7296
7535
|
]);
|
7297
|
-
return /* @__PURE__ */
|
7536
|
+
return /* @__PURE__ */ React6.createElement(Popover2.Root, {
|
7298
7537
|
open,
|
7299
7538
|
onOpenChange,
|
7300
7539
|
modal
|
7301
|
-
}, /* @__PURE__ */
|
7540
|
+
}, /* @__PURE__ */ React6.createElement(Popover2.VirtualTrigger, {
|
7302
7541
|
virtualRef: ref
|
7303
|
-
}), /* @__PURE__ */
|
7542
|
+
}), /* @__PURE__ */ React6.createElement("div", {
|
7304
7543
|
role: "none",
|
7305
7544
|
className: "contents",
|
7306
7545
|
ref: setRootRef
|
@@ -7312,12 +7551,12 @@ var RefPopover = /* @__PURE__ */ forwardRef(({ children, open, onOpenChange, mod
|
|
7312
7551
|
var REF_POPOVER = "RefPopover";
|
7313
7552
|
var [RefPopoverContextProvider, useRefPopover] = createContext(REF_POPOVER, {});
|
7314
7553
|
var PreviewProvider = ({ children, onLookup }) => {
|
7315
|
-
var _effect =
|
7554
|
+
var _effect = _useSignals4();
|
7316
7555
|
try {
|
7317
|
-
const trigger =
|
7318
|
-
const [value, setValue] =
|
7319
|
-
const [open, setOpen] =
|
7320
|
-
const handleDxRefTagActivate =
|
7556
|
+
const trigger = useRef4(null);
|
7557
|
+
const [value, setValue] = useState3({});
|
7558
|
+
const [open, setOpen] = useState3(false);
|
7559
|
+
const handleDxRefTagActivate = useCallback5((event) => {
|
7321
7560
|
const { refId, label, trigger: dxTrigger } = event;
|
7322
7561
|
setValue((value2) => ({
|
7323
7562
|
...value2,
|
@@ -7340,11 +7579,11 @@ var PreviewProvider = ({ children, onLookup }) => {
|
|
7340
7579
|
}, [
|
7341
7580
|
onLookup
|
7342
7581
|
]);
|
7343
|
-
return /* @__PURE__ */
|
7582
|
+
return /* @__PURE__ */ React6.createElement(RefPopoverContextProvider, {
|
7344
7583
|
pending: value.pending,
|
7345
7584
|
link: value.link,
|
7346
7585
|
target: value.target
|
7347
|
-
}, /* @__PURE__ */
|
7586
|
+
}, /* @__PURE__ */ React6.createElement(RefPopover, {
|
7348
7587
|
ref: trigger,
|
7349
7588
|
open,
|
7350
7589
|
onOpenChange: setOpen,
|
@@ -7355,10 +7594,10 @@ var PreviewProvider = ({ children, onLookup }) => {
|
|
7355
7594
|
}
|
7356
7595
|
};
|
7357
7596
|
|
7358
|
-
//
|
7359
|
-
import { useSignals as
|
7597
|
+
// src/components/Popover/RefDropdownMenu.tsx
|
7598
|
+
import { useSignals as _useSignals5 } from "@preact-signals/safe-react/tracking";
|
7360
7599
|
import { createContext as createContext2 } from "@radix-ui/react-context";
|
7361
|
-
import
|
7600
|
+
import React7, { useCallback as useCallback6, useEffect as useEffect5, useRef as useRef5, useState as useState4 } from "react";
|
7362
7601
|
import { addEventListener as addEventListener3 } from "@dxos/async";
|
7363
7602
|
import { DropdownMenu } from "@dxos/react-ui";
|
7364
7603
|
var customEventOptions2 = {
|
@@ -7368,13 +7607,13 @@ var customEventOptions2 = {
|
|
7368
7607
|
var REF_DROPDOWN_MENU = "RefDropdownMenu";
|
7369
7608
|
var [RefDropdownMenuContextProvider, useRefDropdownMenu] = createContext2(REF_DROPDOWN_MENU, {});
|
7370
7609
|
var RefDropdownMenuProvider = ({ children, onLookup }) => {
|
7371
|
-
var _effect =
|
7610
|
+
var _effect = _useSignals5();
|
7372
7611
|
try {
|
7373
|
-
const trigger =
|
7374
|
-
const [value, setValue] =
|
7375
|
-
const [rootRef, setRootRef] =
|
7376
|
-
const [open, setOpen] =
|
7377
|
-
const handleDxRefTagActivate =
|
7612
|
+
const trigger = useRef5(null);
|
7613
|
+
const [value, setValue] = useState4({});
|
7614
|
+
const [rootRef, setRootRef] = useState4(null);
|
7615
|
+
const [open, setOpen] = useState4(false);
|
7616
|
+
const handleDxRefTagActivate = useCallback6((event) => {
|
7378
7617
|
const { refId, label, trigger: dxTrigger } = event;
|
7379
7618
|
setValue((value2) => ({
|
7380
7619
|
...value2,
|
@@ -7397,7 +7636,7 @@ var RefDropdownMenuProvider = ({ children, onLookup }) => {
|
|
7397
7636
|
}, [
|
7398
7637
|
onLookup
|
7399
7638
|
]);
|
7400
|
-
|
7639
|
+
useEffect5(() => {
|
7401
7640
|
if (!rootRef) {
|
7402
7641
|
return;
|
7403
7642
|
}
|
@@ -7405,16 +7644,16 @@ var RefDropdownMenuProvider = ({ children, onLookup }) => {
|
|
7405
7644
|
}, [
|
7406
7645
|
rootRef
|
7407
7646
|
]);
|
7408
|
-
return /* @__PURE__ */
|
7647
|
+
return /* @__PURE__ */ React7.createElement(RefDropdownMenuContextProvider, {
|
7409
7648
|
pending: value.pending,
|
7410
7649
|
link: value.link,
|
7411
7650
|
target: value.target
|
7412
|
-
}, /* @__PURE__ */
|
7651
|
+
}, /* @__PURE__ */ React7.createElement(DropdownMenu.Root, {
|
7413
7652
|
open,
|
7414
7653
|
onOpenChange: setOpen
|
7415
|
-
}, /* @__PURE__ */
|
7654
|
+
}, /* @__PURE__ */ React7.createElement(DropdownMenu.VirtualTrigger, {
|
7416
7655
|
virtualRef: trigger
|
7417
|
-
}), /* @__PURE__ */
|
7656
|
+
}), /* @__PURE__ */ React7.createElement("div", {
|
7418
7657
|
role: "none",
|
7419
7658
|
className: "contents",
|
7420
7659
|
ref: setRootRef
|
@@ -7426,162 +7665,10 @@ var RefDropdownMenuProvider = ({ children, onLookup }) => {
|
|
7426
7665
|
var RefDropdownMenu = {
|
7427
7666
|
Provider: RefDropdownMenuProvider
|
7428
7667
|
};
|
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
7668
|
export {
|
7583
7669
|
CommandMenu,
|
7584
7670
|
Cursor,
|
7671
|
+
Editor,
|
7585
7672
|
EditorInputMode,
|
7586
7673
|
EditorInputModes,
|
7587
7674
|
EditorState4 as EditorState,
|
@@ -7642,6 +7729,7 @@ export {
|
|
7642
7729
|
debugTree,
|
7643
7730
|
decorateMarkdown,
|
7644
7731
|
defaultOptions,
|
7732
|
+
defaultThemeSlots,
|
7645
7733
|
deleteItem,
|
7646
7734
|
documentId,
|
7647
7735
|
dropFile,
|
@@ -7659,6 +7747,7 @@ export {
|
|
7659
7747
|
folding,
|
7660
7748
|
formattingEquals,
|
7661
7749
|
formattingKeymap,
|
7750
|
+
fullWidth,
|
7662
7751
|
getFormatting,
|
7663
7752
|
getItem,
|
7664
7753
|
getLinkRef,
|
@@ -7666,6 +7755,7 @@ export {
|
|
7666
7755
|
getNextItem,
|
7667
7756
|
getPreviousItem,
|
7668
7757
|
getRange,
|
7758
|
+
grow,
|
7669
7759
|
hashtag,
|
7670
7760
|
image,
|
7671
7761
|
indentItemLess,
|
@@ -7723,7 +7813,7 @@ export {
|
|
7723
7813
|
toggleStrong,
|
7724
7814
|
toggleStyle,
|
7725
7815
|
toggleTask,
|
7726
|
-
|
7816
|
+
translations,
|
7727
7817
|
traverse,
|
7728
7818
|
treeFacet,
|
7729
7819
|
typeahead,
|