@dxos/react-ui-editor 0.8.1-staging.391c573 → 0.8.1-staging.97aedb1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/lib/browser/index.mjs +383 -255
- package/dist/lib/browser/index.mjs.map +4 -4
- package/dist/lib/browser/meta.json +1 -1
- package/dist/lib/node/index.cjs +415 -290
- package/dist/lib/node/index.cjs.map +4 -4
- package/dist/lib/node/meta.json +1 -1
- package/dist/lib/node-esm/index.mjs +383 -255
- package/dist/lib/node-esm/index.mjs.map +4 -4
- package/dist/lib/node-esm/meta.json +1 -1
- package/dist/types/src/InputMode.stories.d.ts +2 -2
- package/dist/types/src/TextEditor.stories.d.ts +5 -40
- package/dist/types/src/TextEditor.stories.d.ts.map +1 -1
- package/dist/types/src/components/EditorToolbar/EditorToolbar.d.ts.map +1 -1
- package/dist/types/src/defaults.d.ts +2 -0
- package/dist/types/src/defaults.d.ts.map +1 -1
- package/dist/types/src/extensions/command/command.d.ts +4 -2
- 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/menu.d.ts +12 -0
- package/dist/types/src/extensions/command/menu.d.ts.map +1 -0
- package/dist/types/src/extensions/command/preview.d.ts +12 -0
- package/dist/types/src/extensions/command/preview.d.ts.map +1 -0
- package/dist/types/src/extensions/command/state.d.ts.map +1 -1
- package/dist/types/src/extensions/comments.d.ts +3 -3
- package/dist/types/src/extensions/comments.d.ts.map +1 -1
- package/dist/types/src/extensions/factories.d.ts +2 -1
- package/dist/types/src/extensions/factories.d.ts.map +1 -1
- package/dist/types/src/extensions/folding.d.ts +2 -8
- package/dist/types/src/extensions/folding.d.ts.map +1 -1
- package/dist/types/src/extensions/selection.d.ts +6 -1
- package/dist/types/src/extensions/selection.d.ts.map +1 -1
- package/dist/types/src/{styles/stack-item-content-class-names.d.ts → fragments.d.ts} +1 -1
- package/dist/types/src/fragments.d.ts.map +1 -0
- package/dist/types/src/index.d.ts +0 -1
- package/dist/types/src/index.d.ts.map +1 -1
- package/dist/types/src/styles/theme.d.ts.map +1 -1
- package/package.json +27 -27
- package/src/InputMode.stories.tsx +4 -4
- package/src/TextEditor.stories.tsx +183 -61
- package/src/components/EditorToolbar/EditorToolbar.tsx +4 -5
- package/src/defaults.ts +12 -0
- package/src/extensions/command/command.ts +21 -2
- package/src/extensions/command/hint.ts +3 -0
- package/src/extensions/command/menu.ts +100 -0
- package/src/extensions/command/preview.ts +79 -0
- package/src/extensions/command/state.ts +9 -4
- package/src/extensions/comments.ts +6 -10
- package/src/extensions/factories.ts +4 -3
- package/src/extensions/folding.tsx +30 -73
- package/src/extensions/selection.ts +41 -21
- package/src/{styles/stack-item-content-class-names.ts → fragments.ts} +4 -2
- package/src/index.ts +0 -4
- package/src/styles/theme.ts +6 -1
- package/src/util/debug.ts +1 -1
- package/dist/types/src/styles/stack-item-content-class-names.d.ts.map +0 -1
@@ -35,14 +35,14 @@ var translations_default = [
|
|
35
35
|
|
36
36
|
// packages/ui/react-ui-editor/src/index.ts
|
37
37
|
import { EditorState as EditorState3 } from "@codemirror/state";
|
38
|
-
import { EditorView as
|
38
|
+
import { EditorView as EditorView22, keymap as keymap11 } from "@codemirror/view";
|
39
39
|
import { tags as tags2 } from "@lezer/highlight";
|
40
40
|
import { TextKind } from "@dxos/protocols/proto/dxos/echo/model/text";
|
41
41
|
|
42
42
|
// packages/ui/react-ui-editor/src/components/EditorToolbar/EditorToolbar.tsx
|
43
43
|
import React, { useCallback } from "react";
|
44
44
|
import { ElevationProvider } from "@dxos/react-ui";
|
45
|
-
import { ToolbarMenu,
|
45
|
+
import { MenuProvider, ToolbarMenu, createGapSeparator, useMenuActions } from "@dxos/react-ui-menu";
|
46
46
|
import { textBlockWidth } from "@dxos/react-ui-theme";
|
47
47
|
|
48
48
|
// packages/ui/react-ui-editor/src/components/EditorToolbar/util.ts
|
@@ -311,9 +311,8 @@ var createViewMode = (state) => {
|
|
311
311
|
};
|
312
312
|
};
|
313
313
|
|
314
|
-
// packages/ui/react-ui-editor/src/
|
314
|
+
// packages/ui/react-ui-editor/src/fragments.ts
|
315
315
|
import { mx } from "@dxos/react-ui-theme";
|
316
|
-
var stackItemContentEditorClassNames = (role) => mx("dx-focus-ring-inset data-[toolbar=disabled]:pbs-2 attention-surface", role === "article" ? "min-bs-0" : "[&_.cm-scroller]:overflow-hidden [&_.cm-scroller]:min-bs-24");
|
317
316
|
var stackItemContentToolbarClassNames = (role) => mx("attention-surface is-full border-be !border-separator", role === "section" && "sticky block-start-0 z-[1] -mbe-px min-is-0");
|
318
317
|
|
319
318
|
// packages/ui/react-ui-editor/src/components/EditorToolbar/EditorToolbar.tsx
|
@@ -465,6 +464,10 @@ var defaultTheme = {
|
|
465
464
|
background: "transparent"
|
466
465
|
},
|
467
466
|
".cm-gutter": {},
|
467
|
+
".cm-gutter.cm-lineNumbers": {
|
468
|
+
paddingRight: "4px",
|
469
|
+
borderRight: "1px solid var(--dx-separator)"
|
470
|
+
},
|
468
471
|
".cm-gutter.cm-lineNumbers .cm-gutterElement": {
|
469
472
|
minWidth: "40px",
|
470
473
|
alignContent: "center"
|
@@ -474,7 +477,7 @@ var defaultTheme = {
|
|
474
477
|
*/
|
475
478
|
".cm-gutterElement": {
|
476
479
|
alignItems: "center",
|
477
|
-
fontSize: "
|
480
|
+
fontSize: "12px"
|
478
481
|
},
|
479
482
|
/**
|
480
483
|
* Line.
|
@@ -520,6 +523,7 @@ var defaultTheme = {
|
|
520
523
|
".cm-link": {
|
521
524
|
textDecorationLine: "underline",
|
522
525
|
textDecorationThickness: "1px",
|
526
|
+
textDecorationColor: "var(--dx-separator)",
|
523
527
|
textUnderlineOffset: "2px",
|
524
528
|
borderRadius: ".125rem"
|
525
529
|
},
|
@@ -648,6 +652,8 @@ var editorMonospace = EditorView.theme({
|
|
648
652
|
}
|
649
653
|
});
|
650
654
|
var editorWithToolbarLayout = "grid grid-cols-1 grid-rows-[min-content_1fr] data-[toolbar=disabled]:grid-rows-[1fr] justify-center content-start overflow-hidden";
|
655
|
+
var stackItemContentEditorClassNames = (role) => mx3("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");
|
656
|
+
var stackItemContentToolbarClassNames2 = (role) => mx3("attention-surface is-full border-be !border-separator", role === "section" && "sticky block-start-0 z-[1] -mbe-px min-is-0");
|
651
657
|
|
652
658
|
// packages/ui/react-ui-editor/src/extensions/annotations.ts
|
653
659
|
import { StateField } from "@codemirror/state";
|
@@ -747,7 +753,7 @@ var logChanges = (trs) => {
|
|
747
753
|
return changes2;
|
748
754
|
}).filter(Boolean);
|
749
755
|
if (changes.length) {
|
750
|
-
log
|
756
|
+
log("changes", {
|
751
757
|
changes
|
752
758
|
}, {
|
753
759
|
F: __dxlog_file,
|
@@ -1852,7 +1858,7 @@ var random = (min, max) => {
|
|
1852
1858
|
};
|
1853
1859
|
|
1854
1860
|
// packages/ui/react-ui-editor/src/extensions/command/command.ts
|
1855
|
-
import { EditorView as
|
1861
|
+
import { EditorView as EditorView8, keymap as keymap3 } from "@codemirror/view";
|
1856
1862
|
|
1857
1863
|
// packages/ui/react-ui-editor/src/extensions/command/hint.ts
|
1858
1864
|
import { RangeSetBuilder } from "@codemirror/state";
|
@@ -1888,18 +1894,19 @@ var commandState = StateField3.define({
|
|
1888
1894
|
const widthWithoutPadding = parent.clientWidth - parseFloat(paddingLeft) - parseFloat(paddingRight);
|
1889
1895
|
dom.style.width = `${widthWithoutPadding}px`;
|
1890
1896
|
}
|
1891
|
-
options.
|
1897
|
+
options.onRenderDialog(dom, (action) => {
|
1892
1898
|
view2.dispatch({
|
1893
1899
|
effects: closeEffect.of(null)
|
1894
1900
|
});
|
1895
1901
|
if (action?.insert?.length) {
|
1902
|
+
const text = action.insert + "\n";
|
1896
1903
|
view2.dispatch({
|
1897
1904
|
changes: {
|
1898
1905
|
from: pos,
|
1899
|
-
insert:
|
1906
|
+
insert: text
|
1900
1907
|
},
|
1901
1908
|
selection: {
|
1902
|
-
anchor: pos +
|
1909
|
+
anchor: pos + text.length
|
1903
1910
|
}
|
1904
1911
|
});
|
1905
1912
|
}
|
@@ -2026,23 +2033,156 @@ var hintViewPlugin = ({ onHint }) => ViewPlugin3.fromClass(class {
|
|
2026
2033
|
]
|
2027
2034
|
});
|
2028
2035
|
|
2036
|
+
// packages/ui/react-ui-editor/src/extensions/command/menu.ts
|
2037
|
+
import { ViewPlugin as ViewPlugin4 } from "@codemirror/view";
|
2038
|
+
var floatingMenu = (options) => ViewPlugin4.fromClass(class {
|
2039
|
+
constructor(view) {
|
2040
|
+
this.rafId = null;
|
2041
|
+
this.view = view;
|
2042
|
+
const container = view.scrollDOM;
|
2043
|
+
if (getComputedStyle(container).position === "static") {
|
2044
|
+
container.style.position = "relative";
|
2045
|
+
}
|
2046
|
+
this.button = document.createElement("div");
|
2047
|
+
this.button.style.position = "absolute";
|
2048
|
+
this.button.style.zIndex = "10";
|
2049
|
+
this.button.style.display = "none";
|
2050
|
+
options.onRenderMenu(this.button, () => {
|
2051
|
+
openCommand(view);
|
2052
|
+
});
|
2053
|
+
container.appendChild(this.button);
|
2054
|
+
container.addEventListener("scroll", this.scheduleUpdate);
|
2055
|
+
this.scheduleUpdate();
|
2056
|
+
}
|
2057
|
+
update(update2) {
|
2058
|
+
if (update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(openEffect)))) {
|
2059
|
+
this.button.style.display = "none";
|
2060
|
+
} else if (update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(closeEffect)))) {
|
2061
|
+
this.button.style.display = "block";
|
2062
|
+
} else if (update2.selectionSet || update2.viewportChanged || update2.docChanged || update2.geometryChanged) {
|
2063
|
+
this.scheduleUpdate();
|
2064
|
+
}
|
2065
|
+
}
|
2066
|
+
scheduleUpdate() {
|
2067
|
+
if (this.rafId != null) {
|
2068
|
+
cancelAnimationFrame(this.rafId);
|
2069
|
+
}
|
2070
|
+
this.rafId = requestAnimationFrame(() => this.updateButtonPosition());
|
2071
|
+
}
|
2072
|
+
updateButtonPosition() {
|
2073
|
+
const pos = this.view.state.selection.main.head;
|
2074
|
+
const lineBlock = this.view.lineBlockAt(pos);
|
2075
|
+
const domInfo = this.view.domAtPos(lineBlock.from);
|
2076
|
+
let node = domInfo.node;
|
2077
|
+
while (node && !(node instanceof HTMLElement)) {
|
2078
|
+
node = node.parentNode;
|
2079
|
+
}
|
2080
|
+
if (!node) {
|
2081
|
+
this.button.style.display = "none";
|
2082
|
+
return;
|
2083
|
+
}
|
2084
|
+
const lineRect = node.getBoundingClientRect();
|
2085
|
+
const containerRect = this.view.scrollDOM.getBoundingClientRect();
|
2086
|
+
const offsetTop = lineRect.top - containerRect.top + this.view.scrollDOM.scrollTop;
|
2087
|
+
const offsetLeft = this.view.scrollDOM.clientWidth + this.view.scrollDOM.scrollLeft - lineRect.x;
|
2088
|
+
this.button.style.top = `${offsetTop}px`;
|
2089
|
+
this.button.style.left = `${offsetLeft}px`;
|
2090
|
+
this.button.style.display = "block";
|
2091
|
+
}
|
2092
|
+
destroy() {
|
2093
|
+
this.button.remove();
|
2094
|
+
if (this.rafId != null) {
|
2095
|
+
cancelAnimationFrame(this.rafId);
|
2096
|
+
}
|
2097
|
+
}
|
2098
|
+
});
|
2099
|
+
|
2100
|
+
// packages/ui/react-ui-editor/src/extensions/command/preview.ts
|
2101
|
+
import { syntaxTree } from "@codemirror/language";
|
2102
|
+
import { RangeSetBuilder as RangeSetBuilder2, StateField as StateField4 } from "@codemirror/state";
|
2103
|
+
import { Decoration as Decoration4, EditorView as EditorView7, WidgetType as WidgetType3 } from "@codemirror/view";
|
2104
|
+
var preview = (options) => {
|
2105
|
+
return [
|
2106
|
+
StateField4.define({
|
2107
|
+
create: (state) => buildDecorations(state, options),
|
2108
|
+
update: (_, tr) => buildDecorations(tr.state, options),
|
2109
|
+
// TODO(burdon): Make atomic.
|
2110
|
+
provide: (field) => EditorView7.decorations.from(field)
|
2111
|
+
})
|
2112
|
+
];
|
2113
|
+
};
|
2114
|
+
var buildDecorations = (state, options) => {
|
2115
|
+
const builder = new RangeSetBuilder2();
|
2116
|
+
syntaxTree(state).iterate({
|
2117
|
+
enter: (node) => {
|
2118
|
+
if (node.name === "Link") {
|
2119
|
+
const urlNode = node.node.getChild("URL");
|
2120
|
+
if (urlNode) {
|
2121
|
+
const text = state.sliceDoc(node.from + 1, urlNode.from - 2);
|
2122
|
+
const url = state.sliceDoc(urlNode.from, urlNode.to);
|
2123
|
+
builder.add(node.from, node.to, Decoration4.replace({
|
2124
|
+
block: true,
|
2125
|
+
widget: new PreviewWidget(options.onRenderPreview, url, text)
|
2126
|
+
}));
|
2127
|
+
}
|
2128
|
+
}
|
2129
|
+
}
|
2130
|
+
});
|
2131
|
+
return builder.finish();
|
2132
|
+
};
|
2133
|
+
var PreviewWidget = class extends WidgetType3 {
|
2134
|
+
constructor(_onRenderPreview, _url, _text) {
|
2135
|
+
super();
|
2136
|
+
this._onRenderPreview = _onRenderPreview;
|
2137
|
+
this._url = _url;
|
2138
|
+
this._text = _text;
|
2139
|
+
}
|
2140
|
+
eq(other) {
|
2141
|
+
return this._url === other._url;
|
2142
|
+
}
|
2143
|
+
toDOM(view) {
|
2144
|
+
const root = document.createElement("div");
|
2145
|
+
root.classList.add("cm-preview");
|
2146
|
+
this._onRenderPreview(root, {
|
2147
|
+
url: this._url,
|
2148
|
+
text: this._text
|
2149
|
+
});
|
2150
|
+
return root;
|
2151
|
+
}
|
2152
|
+
};
|
2153
|
+
|
2029
2154
|
// packages/ui/react-ui-editor/src/extensions/command/command.ts
|
2030
2155
|
var command = (options) => {
|
2031
2156
|
return [
|
2032
2157
|
commandConfig.of(options),
|
2033
2158
|
commandState,
|
2034
2159
|
keymap3.of(commandKeyBindings),
|
2160
|
+
preview(options),
|
2161
|
+
floatingMenu(options),
|
2035
2162
|
hintViewPlugin(options),
|
2036
|
-
|
2163
|
+
EditorView8.focusChangeEffect.of((_, focusing) => {
|
2037
2164
|
return focusing ? closeEffect.of(null) : null;
|
2165
|
+
}),
|
2166
|
+
EditorView8.theme({
|
2167
|
+
".cm-tooltip": {
|
2168
|
+
background: "transparent"
|
2169
|
+
},
|
2170
|
+
".cm-preview": {
|
2171
|
+
marginLeft: "-1rem",
|
2172
|
+
marginRight: "-1rem",
|
2173
|
+
padding: "1rem",
|
2174
|
+
borderRadius: "1rem",
|
2175
|
+
background: "var(--dx-modalSurface)",
|
2176
|
+
border: "1px solid var(--dx-separator)"
|
2177
|
+
}
|
2038
2178
|
})
|
2039
2179
|
];
|
2040
2180
|
};
|
2041
2181
|
|
2042
2182
|
// packages/ui/react-ui-editor/src/extensions/comments.ts
|
2043
2183
|
import { invertedEffects } from "@codemirror/commands";
|
2044
|
-
import { StateEffect as StateEffect3, StateField as
|
2045
|
-
import { hoverTooltip, keymap as keymap5, Decoration as
|
2184
|
+
import { StateEffect as StateEffect3, StateField as StateField5 } from "@codemirror/state";
|
2185
|
+
import { hoverTooltip, keymap as keymap5, Decoration as Decoration5, EditorView as EditorView10, ViewPlugin as ViewPlugin5 } from "@codemirror/view";
|
2046
2186
|
import sortBy from "lodash.sortby";
|
2047
2187
|
import { useEffect, useMemo as useMemo2 } from "react";
|
2048
2188
|
import { debounce as debounce2 } from "@dxos/async";
|
@@ -2051,24 +2191,51 @@ import { isNonNullable } from "@dxos/util";
|
|
2051
2191
|
|
2052
2192
|
// packages/ui/react-ui-editor/src/extensions/selection.ts
|
2053
2193
|
import { Transaction } from "@codemirror/state";
|
2054
|
-
import { EditorView as
|
2194
|
+
import { EditorView as EditorView9, keymap as keymap4 } from "@codemirror/view";
|
2055
2195
|
import { debounce } from "@dxos/async";
|
2196
|
+
import { invariant as invariant3 } from "@dxos/invariant";
|
2197
|
+
import { isNotFalsy as isNotFalsy2 } from "@dxos/util";
|
2198
|
+
var __dxlog_file6 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/selection.ts";
|
2056
2199
|
var documentId = singleValueFacet();
|
2057
2200
|
var stateRestoreAnnotation = "dxos.org/cm/state-restore";
|
2058
2201
|
var createEditorStateTransaction = ({ scrollTo, selection }) => {
|
2059
2202
|
return {
|
2060
2203
|
selection,
|
2061
2204
|
scrollIntoView: !scrollTo,
|
2062
|
-
effects: scrollTo ?
|
2205
|
+
effects: scrollTo ? EditorView9.scrollIntoView(scrollTo, {
|
2063
2206
|
yMargin: 96
|
2064
2207
|
}) : void 0,
|
2065
2208
|
annotations: Transaction.userEvent.of(stateRestoreAnnotation)
|
2066
2209
|
};
|
2067
2210
|
};
|
2068
|
-
var
|
2069
|
-
|
2070
|
-
|
2071
|
-
|
2211
|
+
var createEditorStateStore = (keyPrefix) => ({
|
2212
|
+
getState: (id) => {
|
2213
|
+
invariant3(id, void 0, {
|
2214
|
+
F: __dxlog_file6,
|
2215
|
+
L: 47,
|
2216
|
+
S: void 0,
|
2217
|
+
A: [
|
2218
|
+
"id",
|
2219
|
+
""
|
2220
|
+
]
|
2221
|
+
});
|
2222
|
+
const state = localStorage.getItem(`${keyPrefix}/${id}`);
|
2223
|
+
return state ? JSON.parse(state) : void 0;
|
2224
|
+
},
|
2225
|
+
setState: (id, state) => {
|
2226
|
+
invariant3(id, void 0, {
|
2227
|
+
F: __dxlog_file6,
|
2228
|
+
L: 53,
|
2229
|
+
S: void 0,
|
2230
|
+
A: [
|
2231
|
+
"id",
|
2232
|
+
""
|
2233
|
+
]
|
2234
|
+
});
|
2235
|
+
localStorage.setItem(`${keyPrefix}/${id}`, JSON.stringify(state));
|
2236
|
+
}
|
2237
|
+
});
|
2238
|
+
var selectionState = ({ getState, setState } = {}) => {
|
2072
2239
|
const setStateDebounced = debounce(setState, 1e3);
|
2073
2240
|
return [
|
2074
2241
|
// TODO(burdon): Track scrolling (currently only updates when cursor moves).
|
@@ -2077,48 +2244,50 @@ var selectionState = (state = {}) => {
|
|
2077
2244
|
// setStateDebounced(id, {});
|
2078
2245
|
// },
|
2079
2246
|
// }),
|
2080
|
-
|
2247
|
+
EditorView9.updateListener.of(({ view, transactions }) => {
|
2081
2248
|
const id = view.state.facet(documentId);
|
2082
2249
|
if (!id || transactions.some((tr) => tr.isUserEvent(stateRestoreAnnotation))) {
|
2083
2250
|
return;
|
2084
2251
|
}
|
2085
|
-
|
2086
|
-
|
2087
|
-
|
2088
|
-
|
2089
|
-
|
2090
|
-
if (pos !== null) {
|
2091
|
-
const { anchor, head } = view.state.selection.main;
|
2092
|
-
setStateDebounced(id, {
|
2093
|
-
scrollTo: pos,
|
2094
|
-
selection: {
|
2095
|
-
anchor,
|
2096
|
-
head
|
2097
|
-
}
|
2252
|
+
if (setState) {
|
2253
|
+
const { scrollTop } = view.scrollDOM;
|
2254
|
+
const pos = view.posAtCoords({
|
2255
|
+
x: 0,
|
2256
|
+
y: scrollTop
|
2098
2257
|
});
|
2258
|
+
if (pos !== null) {
|
2259
|
+
const { anchor, head } = view.state.selection.main;
|
2260
|
+
setStateDebounced(id, {
|
2261
|
+
scrollTo: pos,
|
2262
|
+
selection: {
|
2263
|
+
anchor,
|
2264
|
+
head
|
2265
|
+
}
|
2266
|
+
});
|
2267
|
+
}
|
2099
2268
|
}
|
2100
2269
|
}),
|
2101
|
-
keymap4.of([
|
2270
|
+
getState && keymap4.of([
|
2102
2271
|
{
|
2103
2272
|
key: "ctrl-r",
|
2104
2273
|
run: (view) => {
|
2105
|
-
const
|
2106
|
-
if (
|
2107
|
-
view.dispatch(createEditorStateTransaction(
|
2274
|
+
const state = getState(view.state.facet(documentId));
|
2275
|
+
if (state) {
|
2276
|
+
view.dispatch(createEditorStateTransaction(state));
|
2108
2277
|
}
|
2109
2278
|
return true;
|
2110
2279
|
}
|
2111
2280
|
}
|
2112
2281
|
])
|
2113
|
-
];
|
2282
|
+
].filter(isNotFalsy2);
|
2114
2283
|
};
|
2115
2284
|
|
2116
2285
|
// packages/ui/react-ui-editor/src/extensions/comments.ts
|
2117
|
-
var
|
2286
|
+
var __dxlog_file7 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/comments.ts";
|
2118
2287
|
var setComments = StateEffect3.define();
|
2119
2288
|
var setSelection = StateEffect3.define();
|
2120
2289
|
var setCommentState = StateEffect3.define();
|
2121
|
-
var commentsState =
|
2290
|
+
var commentsState = StateField5.define({
|
2122
2291
|
create: (state) => ({
|
2123
2292
|
id: state.facet(documentId),
|
2124
2293
|
comments: [],
|
@@ -2156,7 +2325,7 @@ var commentsState = StateField4.define({
|
|
2156
2325
|
return value;
|
2157
2326
|
}
|
2158
2327
|
});
|
2159
|
-
var styles3 =
|
2328
|
+
var styles3 = EditorView10.theme({
|
2160
2329
|
".cm-comment, .cm-comment-current": {
|
2161
2330
|
margin: "0 -3px",
|
2162
2331
|
padding: "3px",
|
@@ -2169,14 +2338,14 @@ var styles3 = EditorView9.theme({
|
|
2169
2338
|
textDecoration: "underline"
|
2170
2339
|
}
|
2171
2340
|
});
|
2172
|
-
var createCommentMark = (id, isCurrent) =>
|
2341
|
+
var createCommentMark = (id, isCurrent) => Decoration5.mark({
|
2173
2342
|
class: isCurrent ? "cm-comment-current" : "cm-comment",
|
2174
2343
|
attributes: {
|
2175
2344
|
"data-testid": "cm-comment",
|
2176
2345
|
"data-comment-id": id
|
2177
2346
|
}
|
2178
2347
|
});
|
2179
|
-
var commentsDecorations =
|
2348
|
+
var commentsDecorations = EditorView10.decorations.compute([
|
2180
2349
|
commentsState
|
2181
2350
|
], (state) => {
|
2182
2351
|
const { selection: { current }, comments: comments2 } = state.field(commentsState);
|
@@ -2184,7 +2353,7 @@ var commentsDecorations = EditorView9.decorations.compute([
|
|
2184
2353
|
const range = comment.range;
|
2185
2354
|
if (!range) {
|
2186
2355
|
log4.warn("Invalid range:", range, {
|
2187
|
-
F:
|
2356
|
+
F: __dxlog_file7,
|
2188
2357
|
L: 144,
|
2189
2358
|
S: void 0,
|
2190
2359
|
C: (f, a) => f(...a)
|
@@ -2196,10 +2365,10 @@ var commentsDecorations = EditorView9.decorations.compute([
|
|
2196
2365
|
const mark = createCommentMark(comment.comment.id, comment.comment.id === current);
|
2197
2366
|
return mark.range(range.from, range.to);
|
2198
2367
|
}).filter(isNonNullable);
|
2199
|
-
return
|
2368
|
+
return Decoration5.set(decorations);
|
2200
2369
|
});
|
2201
2370
|
var commentClickedEffect = StateEffect3.define();
|
2202
|
-
var handleCommentClick =
|
2371
|
+
var handleCommentClick = EditorView10.domEventHandlers({
|
2203
2372
|
click: (event, view) => {
|
2204
2373
|
let target = event.target;
|
2205
2374
|
const editorRoot = view.dom;
|
@@ -2238,7 +2407,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2238
2407
|
}
|
2239
2408
|
};
|
2240
2409
|
return [
|
2241
|
-
|
2410
|
+
EditorView10.domEventHandlers({
|
2242
2411
|
cut: handleTrack,
|
2243
2412
|
copy: handleTrack
|
2244
2413
|
}),
|
@@ -2260,7 +2429,7 @@ var trackPastedComments = (onUpdate) => {
|
|
2260
2429
|
return effects;
|
2261
2430
|
}),
|
2262
2431
|
// Handle paste or the undo of comment deletion.
|
2263
|
-
|
2432
|
+
EditorView10.updateListener.of((update2) => {
|
2264
2433
|
const restore = [];
|
2265
2434
|
for (let i = 0; i < update2.transactions.length; i++) {
|
2266
2435
|
const tr = update2.transactions[i];
|
@@ -2400,7 +2569,7 @@ var comments = (options = {}) => {
|
|
2400
2569
|
//
|
2401
2570
|
// Track deleted ranges and update ranges for decorations.
|
2402
2571
|
//
|
2403
|
-
|
2572
|
+
EditorView10.updateListener.of(({ view, state, changes }) => {
|
2404
2573
|
let mod = false;
|
2405
2574
|
const { comments: comments2, ...value } = state.field(commentsState);
|
2406
2575
|
changes.iterChanges((from, to, from2, to2) => {
|
@@ -2432,7 +2601,7 @@ var comments = (options = {}) => {
|
|
2432
2601
|
//
|
2433
2602
|
// Track selection/proximity.
|
2434
2603
|
//
|
2435
|
-
|
2604
|
+
EditorView10.updateListener.of(({ view, state }) => {
|
2436
2605
|
let min = Infinity;
|
2437
2606
|
const { selection: { current, closest }, comments: comments2 } = state.field(commentsState);
|
2438
2607
|
const { head } = state.selection.main;
|
@@ -2486,7 +2655,7 @@ var scrollThreadIntoView = (view, id, center = true) => {
|
|
2486
2655
|
anchor: range.from
|
2487
2656
|
} : void 0,
|
2488
2657
|
effects: [
|
2489
|
-
needsScroll ?
|
2658
|
+
needsScroll ? EditorView10.scrollIntoView(range.from, center ? {
|
2490
2659
|
y: "center"
|
2491
2660
|
} : void 0) : [],
|
2492
2661
|
needsSelectionUpdate ? setSelection.of({
|
@@ -2532,13 +2701,13 @@ var ExternalCommentSync = class {
|
|
2532
2701
|
this.unsubscribe = subscribe(updateComments);
|
2533
2702
|
}
|
2534
2703
|
};
|
2535
|
-
var createExternalCommentSync = (id, subscribe, getComments) =>
|
2704
|
+
var createExternalCommentSync = (id, subscribe, getComments) => ViewPlugin5.fromClass(class {
|
2536
2705
|
constructor(view) {
|
2537
2706
|
return new ExternalCommentSync(view, id, subscribe, getComments);
|
2538
2707
|
}
|
2539
2708
|
});
|
2540
2709
|
var useCommentState = (state) => {
|
2541
|
-
return useMemo2(() =>
|
2710
|
+
return useMemo2(() => EditorView10.updateListener.of((update2) => {
|
2542
2711
|
if (update2.docChanged || update2.selectionSet) {
|
2543
2712
|
state.comment = selectionOverlapsComment(update2.state);
|
2544
2713
|
state.selection = hasActiveSelection(update2.state);
|
@@ -2562,7 +2731,7 @@ var useComments = (view, id, comments2) => {
|
|
2562
2731
|
});
|
2563
2732
|
};
|
2564
2733
|
var useCommentClickListener = (onCommentClick) => {
|
2565
|
-
return useMemo2(() =>
|
2734
|
+
return useMemo2(() => EditorView10.updateListener.of((update2) => {
|
2566
2735
|
update2.transactions.forEach((transaction) => {
|
2567
2736
|
transaction.effects.forEach((effect) => {
|
2568
2737
|
if (effect.is(commentClickedEffect)) {
|
@@ -2576,21 +2745,21 @@ var useCommentClickListener = (onCommentClick) => {
|
|
2576
2745
|
};
|
2577
2746
|
|
2578
2747
|
// packages/ui/react-ui-editor/src/extensions/debug.ts
|
2579
|
-
import { syntaxTree } from "@codemirror/language";
|
2580
|
-
import { StateField as
|
2748
|
+
import { syntaxTree as syntaxTree2 } from "@codemirror/language";
|
2749
|
+
import { StateField as StateField6 } from "@codemirror/state";
|
2581
2750
|
var debugNodeLogger = (log8 = console.log) => {
|
2582
|
-
const logTokens = (state) =>
|
2751
|
+
const logTokens = (state) => syntaxTree2(state).iterate({
|
2583
2752
|
enter: (node) => log8(node.type)
|
2584
2753
|
});
|
2585
|
-
return
|
2754
|
+
return StateField6.define({
|
2586
2755
|
create: (state) => logTokens(state),
|
2587
2756
|
update: (_, tr) => logTokens(tr.state)
|
2588
2757
|
});
|
2589
2758
|
};
|
2590
2759
|
|
2591
2760
|
// packages/ui/react-ui-editor/src/extensions/dnd.ts
|
2592
|
-
import { dropCursor, EditorView as
|
2593
|
-
var styles4 =
|
2761
|
+
import { dropCursor, EditorView as EditorView11 } from "@codemirror/view";
|
2762
|
+
var styles4 = EditorView11.theme({
|
2594
2763
|
".cm-dropCursor": {
|
2595
2764
|
borderLeft: "2px solid var(--dx-accentText)",
|
2596
2765
|
color: "var(--dx-accentText)",
|
@@ -2604,7 +2773,7 @@ var dropFile = (options = {}) => {
|
|
2604
2773
|
return [
|
2605
2774
|
styles4,
|
2606
2775
|
dropCursor(),
|
2607
|
-
|
2776
|
+
EditorView11.domEventHandlers({
|
2608
2777
|
drop: (event, view) => {
|
2609
2778
|
event.preventDefault();
|
2610
2779
|
const files = event.dataTransfer?.files;
|
@@ -2631,18 +2800,18 @@ import { bracketMatching, defaultHighlightStyle, syntaxHighlighting } from "@cod
|
|
2631
2800
|
import { searchKeymap } from "@codemirror/search";
|
2632
2801
|
import { EditorState } from "@codemirror/state";
|
2633
2802
|
import { oneDarkHighlightStyle } from "@codemirror/theme-one-dark";
|
2634
|
-
import { EditorView as
|
2803
|
+
import { EditorView as EditorView13, drawSelection, dropCursor as dropCursor2, highlightActiveLine, keymap as keymap6, lineNumbers, placeholder, scrollPastEnd } from "@codemirror/view";
|
2635
2804
|
import defaultsDeep2 from "lodash.defaultsdeep";
|
2636
2805
|
import merge from "lodash.merge";
|
2637
2806
|
import { generateName } from "@dxos/display-name";
|
2638
2807
|
import { log as log5 } from "@dxos/log";
|
2639
|
-
import { hexToHue, isNotFalsy as
|
2808
|
+
import { hexToHue, isNotFalsy as isNotFalsy3 } from "@dxos/util";
|
2640
2809
|
|
2641
2810
|
// packages/ui/react-ui-editor/src/extensions/focus.ts
|
2642
|
-
import { StateEffect as StateEffect4, StateField as
|
2643
|
-
import { EditorView as
|
2811
|
+
import { StateEffect as StateEffect4, StateField as StateField7 } from "@codemirror/state";
|
2812
|
+
import { EditorView as EditorView12 } from "@codemirror/view";
|
2644
2813
|
var focusEffect = StateEffect4.define();
|
2645
|
-
var focusField =
|
2814
|
+
var focusField = StateField7.define({
|
2646
2815
|
create: () => false,
|
2647
2816
|
update: (value, tr) => {
|
2648
2817
|
for (const effect of tr.effects) {
|
@@ -2655,7 +2824,7 @@ var focusField = StateField6.define({
|
|
2655
2824
|
});
|
2656
2825
|
var focus = [
|
2657
2826
|
focusField,
|
2658
|
-
|
2827
|
+
EditorView12.domEventHandlers({
|
2659
2828
|
focus: (event, view) => {
|
2660
2829
|
setTimeout(() => view.dispatch({
|
2661
2830
|
effects: focusEffect.of(true)
|
@@ -2670,14 +2839,13 @@ var focus = [
|
|
2670
2839
|
];
|
2671
2840
|
|
2672
2841
|
// packages/ui/react-ui-editor/src/extensions/factories.ts
|
2673
|
-
var
|
2842
|
+
var __dxlog_file8 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/factories.ts";
|
2674
2843
|
var preventNewline = EditorState.transactionFilter.of((tr) => tr.newDoc.lines > 1 ? [] : tr);
|
2675
2844
|
var defaultBasicOptions = {
|
2676
2845
|
allowMultipleSelections: true,
|
2677
2846
|
bracketMatching: true,
|
2678
2847
|
closeBrackets: true,
|
2679
2848
|
drawSelection: true,
|
2680
|
-
editable: true,
|
2681
2849
|
focus: true,
|
2682
2850
|
history: true,
|
2683
2851
|
keymap: "standard",
|
@@ -2694,9 +2862,9 @@ var createBasicExtensions = (_props) => {
|
|
2694
2862
|
const props = defaultsDeep2({}, _props, defaultBasicOptions);
|
2695
2863
|
return [
|
2696
2864
|
// NOTE: Doesn't catch errors in keymap functions.
|
2697
|
-
|
2865
|
+
EditorView13.exceptionSink.of((err) => {
|
2698
2866
|
log5.catch(err, void 0, {
|
2699
|
-
F:
|
2867
|
+
F: __dxlog_file8,
|
2700
2868
|
L: 96,
|
2701
2869
|
S: void 0,
|
2702
2870
|
C: (f, a) => f(...a)
|
@@ -2709,16 +2877,14 @@ var createBasicExtensions = (_props) => {
|
|
2709
2877
|
props.drawSelection && drawSelection({
|
2710
2878
|
cursorBlinkRate: 1200
|
2711
2879
|
}),
|
2880
|
+
props.editable !== void 0 && EditorView13.editable.of(props.editable),
|
2712
2881
|
props.focus && focus,
|
2713
2882
|
props.highlightActiveLine && highlightActiveLine(),
|
2714
2883
|
props.history && history(),
|
2715
2884
|
props.lineNumbers && lineNumbers(),
|
2716
|
-
props.lineWrapping &&
|
2885
|
+
props.lineWrapping && EditorView13.lineWrapping,
|
2717
2886
|
props.placeholder && placeholder(props.placeholder),
|
2718
|
-
props.
|
2719
|
-
EditorState.readOnly.of(true),
|
2720
|
-
EditorView12.editable.of(false)
|
2721
|
-
],
|
2887
|
+
props.readOnly !== void 0 && EditorState.readOnly.of(props.readOnly),
|
2722
2888
|
props.scrollPastEnd && scrollPastEnd(),
|
2723
2889
|
props.tabSize && EditorState.tabSize.of(props.tabSize),
|
2724
2890
|
// https://codemirror.net/docs/ref/#view.KeyBinding
|
@@ -2742,8 +2908,8 @@ var createBasicExtensions = (_props) => {
|
|
2742
2908
|
preventDefault: true,
|
2743
2909
|
run: () => true
|
2744
2910
|
}
|
2745
|
-
].filter(
|
2746
|
-
].filter(
|
2911
|
+
].filter(isNotFalsy3))
|
2912
|
+
].filter(isNotFalsy3);
|
2747
2913
|
};
|
2748
2914
|
var defaultThemeSlots = {
|
2749
2915
|
editor: {
|
@@ -2753,17 +2919,17 @@ var defaultThemeSlots = {
|
|
2753
2919
|
var createThemeExtensions = ({ themeMode, styles: styles5, syntaxHighlighting: _syntaxHighlighting, slots: _slots } = {}) => {
|
2754
2920
|
const slots = defaultsDeep2({}, _slots, defaultThemeSlots);
|
2755
2921
|
return [
|
2756
|
-
|
2757
|
-
|
2922
|
+
EditorView13.darkTheme.of(themeMode === "dark"),
|
2923
|
+
EditorView13.baseTheme(styles5 ? merge({}, defaultTheme, styles5) : defaultTheme),
|
2758
2924
|
// https://github.com/codemirror/theme-one-dark
|
2759
2925
|
_syntaxHighlighting && (themeMode === "dark" ? syntaxHighlighting(oneDarkHighlightStyle) : syntaxHighlighting(defaultHighlightStyle)),
|
2760
|
-
slots.editor?.className &&
|
2926
|
+
slots.editor?.className && EditorView13.editorAttributes.of({
|
2761
2927
|
class: slots.editor.className
|
2762
2928
|
}),
|
2763
|
-
slots.content?.className &&
|
2929
|
+
slots.content?.className && EditorView13.contentAttributes.of({
|
2764
2930
|
class: slots.content.className
|
2765
2931
|
})
|
2766
|
-
].filter(
|
2932
|
+
].filter(isNotFalsy3);
|
2767
2933
|
};
|
2768
2934
|
var createDataExtensions = ({ id, text, space, identity }) => {
|
2769
2935
|
const extensions = [];
|
@@ -2788,91 +2954,52 @@ var createDataExtensions = ({ id, text, space, identity }) => {
|
|
2788
2954
|
};
|
2789
2955
|
|
2790
2956
|
// packages/ui/react-ui-editor/src/extensions/folding.tsx
|
2791
|
-
import { codeFolding, foldGutter
|
2792
|
-
import { EditorView as
|
2957
|
+
import { codeFolding, foldGutter } from "@codemirror/language";
|
2958
|
+
import { EditorView as EditorView14 } from "@codemirror/view";
|
2793
2959
|
import React3 from "react";
|
2794
|
-
import { debounce as debounce3 } from "@dxos/async";
|
2795
2960
|
import { Icon } from "@dxos/react-ui";
|
2796
|
-
var folding = (
|
2797
|
-
|
2798
|
-
|
2799
|
-
|
2800
|
-
|
2801
|
-
|
2802
|
-
|
2803
|
-
|
2804
|
-
|
2805
|
-
|
2806
|
-
}
|
2807
|
-
}),
|
2808
|
-
foldGutter({
|
2809
|
-
markerDOM: (open) => {
|
2810
|
-
const el = createElement("div", {
|
2811
|
-
className: "flex h-full items-center"
|
2812
|
-
});
|
2813
|
-
return renderRoot(el, /* @__PURE__ */ React3.createElement(Icon, {
|
2814
|
-
icon: "ph--caret-right--regular",
|
2815
|
-
size: 3,
|
2816
|
-
classNames: [
|
2817
|
-
"mx-3 cursor-pointer",
|
2818
|
-
open && "rotate-90"
|
2819
|
-
]
|
2820
|
-
}));
|
2821
|
-
}
|
2822
|
-
}),
|
2823
|
-
EditorView13.theme({
|
2824
|
-
".cm-foldGutter": {
|
2825
|
-
opacity: 0.3,
|
2826
|
-
transition: "opacity 0.3s",
|
2827
|
-
width: "32px"
|
2828
|
-
},
|
2829
|
-
".cm-foldGutter:hover": {
|
2830
|
-
opacity: 1
|
2831
|
-
}
|
2832
|
-
}),
|
2833
|
-
EditorView13.updateListener.of(({ view }) => {
|
2834
|
-
const id = view.state.facet(documentId);
|
2835
|
-
if (!id) {
|
2836
|
-
return;
|
2837
|
-
}
|
2838
|
-
if (!initialized) {
|
2839
|
-
initialized = true;
|
2840
|
-
const foldState2 = state[id];
|
2841
|
-
if (foldState2?.foldedRanges?.length) {
|
2842
|
-
view.dispatch({
|
2843
|
-
effects: foldState2.foldedRanges.map((range) => foldEffect.of({
|
2844
|
-
from: range.from,
|
2845
|
-
to: range.to
|
2846
|
-
}))
|
2847
|
-
});
|
2848
|
-
}
|
2849
|
-
return;
|
2850
|
-
}
|
2851
|
-
const decorations = foldedRanges(view.state);
|
2852
|
-
const ranges = [];
|
2853
|
-
decorations.between(0, view.state.doc.length, (from, to) => {
|
2854
|
-
ranges.push({
|
2855
|
-
from,
|
2856
|
-
to
|
2857
|
-
});
|
2961
|
+
var folding = (_props = {}) => [
|
2962
|
+
codeFolding({
|
2963
|
+
placeholderDOM: () => {
|
2964
|
+
return document.createElement("span");
|
2965
|
+
}
|
2966
|
+
}),
|
2967
|
+
foldGutter({
|
2968
|
+
markerDOM: (open) => {
|
2969
|
+
const el = createElement("div", {
|
2970
|
+
className: "flex h-full items-center"
|
2858
2971
|
});
|
2859
|
-
|
2860
|
-
|
2861
|
-
|
2862
|
-
|
2863
|
-
|
2864
|
-
|
2865
|
-
|
2972
|
+
return renderRoot(el, /* @__PURE__ */ React3.createElement(Icon, {
|
2973
|
+
icon: "ph--caret-right--regular",
|
2974
|
+
size: 3,
|
2975
|
+
classNames: [
|
2976
|
+
"mx-3 cursor-pointer",
|
2977
|
+
open && "rotate-90"
|
2978
|
+
]
|
2979
|
+
}));
|
2980
|
+
}
|
2981
|
+
}),
|
2982
|
+
EditorView14.theme({
|
2983
|
+
".cm-foldGutter": {
|
2984
|
+
opacity: 0.3,
|
2985
|
+
transition: "opacity 0.3s",
|
2986
|
+
width: "32px"
|
2987
|
+
},
|
2988
|
+
".cm-foldGutter:hover": {
|
2989
|
+
opacity: 1
|
2990
|
+
}
|
2991
|
+
})
|
2992
|
+
];
|
2866
2993
|
|
2867
2994
|
// packages/ui/react-ui-editor/src/extensions/listener.ts
|
2868
|
-
import { EditorView as
|
2995
|
+
import { EditorView as EditorView15 } from "@codemirror/view";
|
2869
2996
|
var listener = ({ onFocus, onChange }) => {
|
2870
2997
|
const extensions = [];
|
2871
|
-
onFocus && extensions.push(
|
2998
|
+
onFocus && extensions.push(EditorView15.focusChangeEffect.of((_, focusing) => {
|
2872
2999
|
onFocus(focusing);
|
2873
3000
|
return null;
|
2874
3001
|
}));
|
2875
|
-
onChange && extensions.push(
|
3002
|
+
onChange && extensions.push(EditorView15.updateListener.of((update2) => {
|
2876
3003
|
onChange(update2.state.doc.toString(), update2.state.facet(documentId));
|
2877
3004
|
}));
|
2878
3005
|
return extensions;
|
@@ -2880,9 +3007,9 @@ var listener = ({ onFocus, onChange }) => {
|
|
2880
3007
|
|
2881
3008
|
// packages/ui/react-ui-editor/src/extensions/markdown/formatting.ts
|
2882
3009
|
import { snippet } from "@codemirror/autocomplete";
|
2883
|
-
import { syntaxTree as
|
3010
|
+
import { syntaxTree as syntaxTree3 } from "@codemirror/language";
|
2884
3011
|
import { EditorSelection } from "@codemirror/state";
|
2885
|
-
import { EditorView as
|
3012
|
+
import { EditorView as EditorView16, keymap as keymap7 } from "@codemirror/view";
|
2886
3013
|
import { useMemo as useMemo3 } from "react";
|
2887
3014
|
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;
|
2888
3015
|
var Inline;
|
@@ -2905,7 +3032,7 @@ var setHeading = (level) => {
|
|
2905
3032
|
let prevBlock = -1;
|
2906
3033
|
for (const range of ranges) {
|
2907
3034
|
let sawBlock = false;
|
2908
|
-
|
3035
|
+
syntaxTree3(state).iterate({
|
2909
3036
|
from: range.from,
|
2910
3037
|
to: range.to,
|
2911
3038
|
enter: (node) => {
|
@@ -3014,7 +3141,7 @@ var setStyle = (type, enable) => {
|
|
3014
3141
|
let startCovered = false;
|
3015
3142
|
let endCovered = false;
|
3016
3143
|
let { from, to } = range;
|
3017
|
-
|
3144
|
+
syntaxTree3(state).iterate({
|
3018
3145
|
from,
|
3019
3146
|
to,
|
3020
3147
|
enter: (node) => {
|
@@ -3217,7 +3344,7 @@ var insertTable = (view) => {
|
|
3217
3344
|
snippets.table(view, null, from, from);
|
3218
3345
|
};
|
3219
3346
|
var removeLinkInner = (from, to, changes, state) => {
|
3220
|
-
|
3347
|
+
syntaxTree3(state).iterate({
|
3221
3348
|
from,
|
3222
3349
|
to,
|
3223
3350
|
enter: (node) => {
|
@@ -3262,7 +3389,7 @@ var addLink = ({ url, image: image2 } = {}) => {
|
|
3262
3389
|
let { from, to } = range;
|
3263
3390
|
const cutStyles = [];
|
3264
3391
|
let okay = null;
|
3265
|
-
|
3392
|
+
syntaxTree3(state).iterate({
|
3266
3393
|
from,
|
3267
3394
|
to,
|
3268
3395
|
enter: (node) => {
|
@@ -3357,7 +3484,7 @@ var addList = (type) => {
|
|
3357
3484
|
let parentColumn = null;
|
3358
3485
|
const blocks = [];
|
3359
3486
|
for (const { from, to } of state.selection.ranges) {
|
3360
|
-
|
3487
|
+
syntaxTree3(state).iterate({
|
3361
3488
|
from,
|
3362
3489
|
to,
|
3363
3490
|
enter: (node) => {
|
@@ -3492,7 +3619,7 @@ var removeList = (type) => {
|
|
3492
3619
|
const stack = [];
|
3493
3620
|
const targetNodeType = type === 0 ? "OrderedList" : type === 1 ? "BulletList" : "TaskList";
|
3494
3621
|
for (const { from, to } of state.selection.ranges) {
|
3495
|
-
|
3622
|
+
syntaxTree3(state).iterate({
|
3496
3623
|
from,
|
3497
3624
|
to,
|
3498
3625
|
enter: (node) => {
|
@@ -3579,7 +3706,7 @@ var setBlockquote = (enable) => {
|
|
3579
3706
|
let lastBlock = -1;
|
3580
3707
|
for (const { from, to } of state.selection.ranges) {
|
3581
3708
|
const sawBlock = false;
|
3582
|
-
|
3709
|
+
syntaxTree3(state).iterate({
|
3583
3710
|
from,
|
3584
3711
|
to,
|
3585
3712
|
enter: (node) => {
|
@@ -3669,7 +3796,7 @@ var addCodeblock = (target) => {
|
|
3669
3796
|
for (const { from, to } of selection.ranges) {
|
3670
3797
|
let blockFrom = from;
|
3671
3798
|
let blockTo = to;
|
3672
|
-
|
3799
|
+
syntaxTree3(state).iterate({
|
3673
3800
|
from,
|
3674
3801
|
to,
|
3675
3802
|
enter: (node) => {
|
@@ -3720,7 +3847,7 @@ var removeCodeblock = ({ state, dispatch }) => {
|
|
3720
3847
|
let lastBlock = -1;
|
3721
3848
|
const changes = [];
|
3722
3849
|
for (const { from, to } of state.selection.ranges) {
|
3723
|
-
|
3850
|
+
syntaxTree3(state).iterate({
|
3724
3851
|
from,
|
3725
3852
|
to,
|
3726
3853
|
enter: (node) => {
|
@@ -3882,7 +4009,7 @@ var getFormatting = (state) => {
|
|
3882
4009
|
}
|
3883
4010
|
}
|
3884
4011
|
}
|
3885
|
-
|
4012
|
+
syntaxTree3(state).iterate({
|
3886
4013
|
from: range.from,
|
3887
4014
|
to: range.to,
|
3888
4015
|
enter: (node) => {
|
@@ -3971,7 +4098,7 @@ var getFormatting = (state) => {
|
|
3971
4098
|
};
|
3972
4099
|
};
|
3973
4100
|
var useFormattingState = (state) => {
|
3974
|
-
return useMemo3(() =>
|
4101
|
+
return useMemo3(() => EditorView16.updateListener.of((update2) => {
|
3975
4102
|
if (update2.docChanged || update2.selectionSet) {
|
3976
4103
|
Object.entries(getFormatting(update2.state)).forEach(([key, active]) => {
|
3977
4104
|
state[key] = active;
|
@@ -4254,9 +4381,9 @@ var createMarkdownExtensions = ({ themeMode } = {}) => {
|
|
4254
4381
|
};
|
4255
4382
|
|
4256
4383
|
// packages/ui/react-ui-editor/src/extensions/markdown/debug.ts
|
4257
|
-
import { syntaxTree as
|
4258
|
-
import { StateField as
|
4259
|
-
var debugTree = (cb) =>
|
4384
|
+
import { syntaxTree as syntaxTree4 } from "@codemirror/language";
|
4385
|
+
import { StateField as StateField8 } from "@codemirror/state";
|
4386
|
+
var debugTree = (cb) => StateField8.define({
|
4260
4387
|
create: (state) => cb(convertTreeToJson(state)),
|
4261
4388
|
update: (value, tr) => cb(convertTreeToJson(tr.state))
|
4262
4389
|
});
|
@@ -4277,24 +4404,24 @@ var convertTreeToJson = (state) => {
|
|
4277
4404
|
}
|
4278
4405
|
return node;
|
4279
4406
|
};
|
4280
|
-
return treeToJson(
|
4407
|
+
return treeToJson(syntaxTree4(state).cursor());
|
4281
4408
|
};
|
4282
4409
|
|
4283
4410
|
// packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts
|
4284
|
-
import { syntaxTree as
|
4285
|
-
import { RangeSetBuilder as
|
4286
|
-
import { EditorView as
|
4287
|
-
import { invariant as
|
4411
|
+
import { syntaxTree as syntaxTree8 } from "@codemirror/language";
|
4412
|
+
import { RangeSetBuilder as RangeSetBuilder4, StateEffect as StateEffect5 } from "@codemirror/state";
|
4413
|
+
import { EditorView as EditorView20, Decoration as Decoration8, WidgetType as WidgetType6, ViewPlugin as ViewPlugin7 } from "@codemirror/view";
|
4414
|
+
import { invariant as invariant4 } from "@dxos/invariant";
|
4288
4415
|
import { mx as mx4 } from "@dxos/react-ui-theme";
|
4289
4416
|
|
4290
4417
|
// packages/ui/react-ui-editor/src/extensions/markdown/changes.ts
|
4291
|
-
import { syntaxTree as
|
4418
|
+
import { syntaxTree as syntaxTree5 } from "@codemirror/language";
|
4292
4419
|
import { Transaction as Transaction2 } from "@codemirror/state";
|
4293
|
-
import { ViewPlugin as
|
4420
|
+
import { ViewPlugin as ViewPlugin6 } from "@codemirror/view";
|
4294
4421
|
var adjustChanges = () => {
|
4295
|
-
return
|
4422
|
+
return ViewPlugin6.fromClass(class {
|
4296
4423
|
update(update2) {
|
4297
|
-
const tree =
|
4424
|
+
const tree = syntaxTree5(update2.state);
|
4298
4425
|
const adjustments = [];
|
4299
4426
|
for (const tr of update2.transactions) {
|
4300
4427
|
const event = tr.annotation(Transaction2.userEvent);
|
@@ -4432,14 +4559,14 @@ var getValidUrl = (str) => {
|
|
4432
4559
|
};
|
4433
4560
|
|
4434
4561
|
// packages/ui/react-ui-editor/src/extensions/markdown/image.ts
|
4435
|
-
import { syntaxTree as
|
4436
|
-
import { StateField as
|
4437
|
-
import { Decoration as
|
4562
|
+
import { syntaxTree as syntaxTree6 } from "@codemirror/language";
|
4563
|
+
import { StateField as StateField9 } from "@codemirror/state";
|
4564
|
+
import { Decoration as Decoration6, EditorView as EditorView17, WidgetType as WidgetType4 } from "@codemirror/view";
|
4438
4565
|
var image = (_options = {}) => {
|
4439
4566
|
return [
|
4440
|
-
|
4567
|
+
StateField9.define({
|
4441
4568
|
create: (state) => {
|
4442
|
-
return
|
4569
|
+
return Decoration6.set(buildDecorations2(0, state.doc.length, state));
|
4443
4570
|
},
|
4444
4571
|
update: (value, tr) => {
|
4445
4572
|
if (!tr.docChanged && !tr.selection) {
|
@@ -4459,10 +4586,10 @@ var image = (_options = {}) => {
|
|
4459
4586
|
filterFrom: from,
|
4460
4587
|
filterTo: to,
|
4461
4588
|
filter: () => false,
|
4462
|
-
add:
|
4589
|
+
add: buildDecorations2(from, to, tr.state)
|
4463
4590
|
});
|
4464
4591
|
},
|
4465
|
-
provide: (field) =>
|
4592
|
+
provide: (field) => EditorView17.decorations.from(field)
|
4466
4593
|
})
|
4467
4594
|
];
|
4468
4595
|
};
|
@@ -4474,10 +4601,10 @@ var preloadImage = (url) => {
|
|
4474
4601
|
preloaded.add(url);
|
4475
4602
|
}
|
4476
4603
|
};
|
4477
|
-
var
|
4604
|
+
var buildDecorations2 = (from, to, state) => {
|
4478
4605
|
const decorations = [];
|
4479
4606
|
const cursor = state.selection.main.head;
|
4480
|
-
|
4607
|
+
syntaxTree6(state).iterate({
|
4481
4608
|
enter: (node) => {
|
4482
4609
|
if (node.name === "Image") {
|
4483
4610
|
const urlNode = node.node.getChild("URL");
|
@@ -4488,7 +4615,7 @@ var buildDecorations = (from, to, state) => {
|
|
4488
4615
|
return;
|
4489
4616
|
}
|
4490
4617
|
preloadImage(url);
|
4491
|
-
decorations.push(
|
4618
|
+
decorations.push(Decoration6.replace({
|
4492
4619
|
block: true,
|
4493
4620
|
widget: new ImageWidget(url)
|
4494
4621
|
}).range(hide2 ? node.from : node.to, node.to));
|
@@ -4500,7 +4627,7 @@ var buildDecorations = (from, to, state) => {
|
|
4500
4627
|
});
|
4501
4628
|
return decorations;
|
4502
4629
|
};
|
4503
|
-
var ImageWidget = class extends
|
4630
|
+
var ImageWidget = class extends WidgetType4 {
|
4504
4631
|
constructor(_url) {
|
4505
4632
|
super();
|
4506
4633
|
this._url = _url;
|
@@ -4522,10 +4649,10 @@ var ImageWidget = class extends WidgetType3 {
|
|
4522
4649
|
};
|
4523
4650
|
|
4524
4651
|
// packages/ui/react-ui-editor/src/extensions/markdown/styles.ts
|
4525
|
-
import { EditorView as
|
4652
|
+
import { EditorView as EditorView18 } from "@codemirror/view";
|
4526
4653
|
var bulletListIndentationWidth = 24;
|
4527
4654
|
var orderedListIndentationWidth = 36;
|
4528
|
-
var formattingStyles =
|
4655
|
+
var formattingStyles = EditorView18.theme({
|
4529
4656
|
/**
|
4530
4657
|
* Horizontal rule.
|
4531
4658
|
*/
|
@@ -4644,18 +4771,18 @@ var formattingStyles = EditorView17.theme({
|
|
4644
4771
|
});
|
4645
4772
|
|
4646
4773
|
// packages/ui/react-ui-editor/src/extensions/markdown/table.ts
|
4647
|
-
import { syntaxTree as
|
4648
|
-
import { RangeSetBuilder as
|
4649
|
-
import { Decoration as
|
4774
|
+
import { syntaxTree as syntaxTree7 } from "@codemirror/language";
|
4775
|
+
import { RangeSetBuilder as RangeSetBuilder3, StateField as StateField10 } from "@codemirror/state";
|
4776
|
+
import { Decoration as Decoration7, EditorView as EditorView19, WidgetType as WidgetType5 } from "@codemirror/view";
|
4650
4777
|
var table = (options = {}) => {
|
4651
|
-
return
|
4778
|
+
return StateField10.define({
|
4652
4779
|
create: (state) => update(state, options),
|
4653
4780
|
update: (_, tr) => update(tr.state, options),
|
4654
|
-
provide: (field) =>
|
4781
|
+
provide: (field) => EditorView19.decorations.from(field)
|
4655
4782
|
});
|
4656
4783
|
};
|
4657
4784
|
var update = (state, _options) => {
|
4658
|
-
const builder = new
|
4785
|
+
const builder = new RangeSetBuilder3();
|
4659
4786
|
const cursor = state.selection.main.head;
|
4660
4787
|
const tables = [];
|
4661
4788
|
const getTable = () => tables[tables.length - 1];
|
@@ -4663,7 +4790,7 @@ var update = (state, _options) => {
|
|
4663
4790
|
const table2 = getTable();
|
4664
4791
|
return table2.rows?.[table2.rows.length - 1];
|
4665
4792
|
};
|
4666
|
-
|
4793
|
+
syntaxTree7(state).iterate({
|
4667
4794
|
enter: (node) => {
|
4668
4795
|
switch (node.name) {
|
4669
4796
|
case "Table": {
|
@@ -4696,19 +4823,19 @@ var update = (state, _options) => {
|
|
4696
4823
|
tables.forEach((table2) => {
|
4697
4824
|
const replace = state.readOnly || cursor < table2.from || cursor > table2.to;
|
4698
4825
|
if (replace) {
|
4699
|
-
builder.add(table2.from, table2.to,
|
4826
|
+
builder.add(table2.from, table2.to, Decoration7.replace({
|
4700
4827
|
block: true,
|
4701
4828
|
widget: new TableWidget(table2)
|
4702
4829
|
}));
|
4703
4830
|
} else {
|
4704
|
-
builder.add(table2.from, table2.to,
|
4831
|
+
builder.add(table2.from, table2.to, Decoration7.mark({
|
4705
4832
|
class: "cm-table"
|
4706
4833
|
}));
|
4707
4834
|
}
|
4708
4835
|
});
|
4709
4836
|
return builder.finish();
|
4710
4837
|
};
|
4711
|
-
var TableWidget = class extends
|
4838
|
+
var TableWidget = class extends WidgetType5 {
|
4712
4839
|
constructor(_table) {
|
4713
4840
|
super();
|
4714
4841
|
this._table = _table;
|
@@ -4743,21 +4870,21 @@ var TableWidget = class extends WidgetType4 {
|
|
4743
4870
|
};
|
4744
4871
|
|
4745
4872
|
// packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts
|
4746
|
-
var
|
4873
|
+
var __dxlog_file9 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/markdown/decorate.ts";
|
4747
4874
|
var Unicode = {
|
4748
4875
|
emDash: "\u2014",
|
4749
4876
|
bullet: "\u2022",
|
4750
4877
|
bulletSmall: "\u2219",
|
4751
4878
|
bulletSquare: "\u2B1D"
|
4752
4879
|
};
|
4753
|
-
var HorizontalRuleWidget = class extends
|
4880
|
+
var HorizontalRuleWidget = class extends WidgetType6 {
|
4754
4881
|
toDOM() {
|
4755
4882
|
const el = document.createElement("span");
|
4756
4883
|
el.className = "cm-hr";
|
4757
4884
|
return el;
|
4758
4885
|
}
|
4759
4886
|
};
|
4760
|
-
var LinkButton = class extends
|
4887
|
+
var LinkButton = class extends WidgetType6 {
|
4761
4888
|
constructor(url, render) {
|
4762
4889
|
super();
|
4763
4890
|
this.url = url;
|
@@ -4773,7 +4900,7 @@ var LinkButton = class extends WidgetType5 {
|
|
4773
4900
|
return el;
|
4774
4901
|
}
|
4775
4902
|
};
|
4776
|
-
var CheckboxWidget = class extends
|
4903
|
+
var CheckboxWidget = class extends WidgetType6 {
|
4777
4904
|
constructor(_checked) {
|
4778
4905
|
super();
|
4779
4906
|
this._checked = _checked;
|
@@ -4818,7 +4945,7 @@ var CheckboxWidget = class extends WidgetType5 {
|
|
4818
4945
|
return false;
|
4819
4946
|
}
|
4820
4947
|
};
|
4821
|
-
var TextWidget = class extends
|
4948
|
+
var TextWidget = class extends WidgetType6 {
|
4822
4949
|
constructor(text, className) {
|
4823
4950
|
super();
|
4824
4951
|
this.text = text;
|
@@ -4833,29 +4960,29 @@ var TextWidget = class extends WidgetType5 {
|
|
4833
4960
|
return el;
|
4834
4961
|
}
|
4835
4962
|
};
|
4836
|
-
var hide =
|
4837
|
-
var blockQuote =
|
4963
|
+
var hide = Decoration8.replace({});
|
4964
|
+
var blockQuote = Decoration8.line({
|
4838
4965
|
class: mx4("cm-blockquote")
|
4839
4966
|
});
|
4840
|
-
var fencedCodeLine =
|
4967
|
+
var fencedCodeLine = Decoration8.line({
|
4841
4968
|
class: mx4("cm-code cm-codeblock-line")
|
4842
4969
|
});
|
4843
|
-
var fencedCodeLineFirst =
|
4970
|
+
var fencedCodeLineFirst = Decoration8.line({
|
4844
4971
|
class: mx4("cm-code cm-codeblock-line", "cm-codeblock-first")
|
4845
4972
|
});
|
4846
|
-
var fencedCodeLineLast =
|
4973
|
+
var fencedCodeLineLast = Decoration8.line({
|
4847
4974
|
class: mx4("cm-code cm-codeblock-line", "cm-codeblock-last")
|
4848
4975
|
});
|
4849
4976
|
var commentBlockLine = fencedCodeLine;
|
4850
4977
|
var commentBlockLineFirst = fencedCodeLineFirst;
|
4851
4978
|
var commentBlockLineLast = fencedCodeLineLast;
|
4852
|
-
var horizontalRule =
|
4979
|
+
var horizontalRule = Decoration8.replace({
|
4853
4980
|
widget: new HorizontalRuleWidget()
|
4854
4981
|
});
|
4855
|
-
var checkedTask =
|
4982
|
+
var checkedTask = Decoration8.replace({
|
4856
4983
|
widget: new CheckboxWidget(true)
|
4857
4984
|
});
|
4858
|
-
var uncheckedTask =
|
4985
|
+
var uncheckedTask = Decoration8.replace({
|
4859
4986
|
widget: new CheckboxWidget(false)
|
4860
4987
|
});
|
4861
4988
|
var editingRange = (state, range, focus2) => {
|
@@ -4870,14 +4997,14 @@ var autoHideTags = /* @__PURE__ */ new Set([
|
|
4870
4997
|
"SubscriptMark",
|
4871
4998
|
"SuperscriptMark"
|
4872
4999
|
]);
|
4873
|
-
var
|
4874
|
-
const deco = new
|
4875
|
-
const atomicDeco = new
|
5000
|
+
var buildDecorations3 = (view, options, focus2) => {
|
5001
|
+
const deco = new RangeSetBuilder4();
|
5002
|
+
const atomicDeco = new RangeSetBuilder4();
|
4876
5003
|
const { state } = view;
|
4877
5004
|
const headerLevels = [];
|
4878
5005
|
const getHeaderLevels = (node, level) => {
|
4879
|
-
|
4880
|
-
F:
|
5006
|
+
invariant4(level > 0, void 0, {
|
5007
|
+
F: __dxlog_file9,
|
4881
5008
|
L: 178,
|
4882
5009
|
S: void 0,
|
4883
5010
|
A: [
|
@@ -4915,8 +5042,8 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
4915
5042
|
listLevels.pop();
|
4916
5043
|
};
|
4917
5044
|
const getCurrentListLevel = () => {
|
4918
|
-
|
4919
|
-
F:
|
5045
|
+
invariant4(listLevels.length, void 0, {
|
5046
|
+
F: __dxlog_file9,
|
4920
5047
|
L: 200,
|
4921
5048
|
S: void 0,
|
4922
5049
|
A: [
|
@@ -4959,7 +5086,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
4959
5086
|
} else {
|
4960
5087
|
const num = headers.slice(from - 1).map((level2) => level2?.number ?? 0).join(".") + " ";
|
4961
5088
|
if (num.length) {
|
4962
|
-
atomicDeco.add(mark.from, mark.from + len,
|
5089
|
+
atomicDeco.add(mark.from, mark.from + len, Decoration8.replace({
|
4963
5090
|
widget: new TextWidget(num, theme.heading(level))
|
4964
5091
|
}));
|
4965
5092
|
}
|
@@ -4984,7 +5111,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
4984
5111
|
if (node.from === line.to - 1) {
|
4985
5112
|
return false;
|
4986
5113
|
}
|
4987
|
-
deco.add(line.from, line.from,
|
5114
|
+
deco.add(line.from, line.from, Decoration8.line({
|
4988
5115
|
class: "cm-list-item",
|
4989
5116
|
attributes: {
|
4990
5117
|
style: `padding-left: ${offset}px; text-indent: -${width}px;`
|
@@ -5001,7 +5128,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5001
5128
|
const label = list.type === "OrderedList" ? `${++list.number}.` : Unicode.bulletSmall;
|
5002
5129
|
const line = state.doc.lineAt(node.from);
|
5003
5130
|
const to = state.doc.sliceString(node.to, node.to + 1) === " " ? node.to + 1 : node.to;
|
5004
|
-
atomicDeco.add(line.from, to,
|
5131
|
+
atomicDeco.add(line.from, to, Decoration8.replace({
|
5005
5132
|
widget: new TextWidget(label, list.type === "OrderedList" ? "cm-list-mark cm-list-mark-ordered" : "cm-list-mark cm-list-mark-bullet")
|
5006
5133
|
}));
|
5007
5134
|
break;
|
@@ -5088,7 +5215,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5088
5215
|
if (!editing) {
|
5089
5216
|
atomicDeco.add(node.from, marks[0].to, hide);
|
5090
5217
|
}
|
5091
|
-
deco.add(marks[0].to, marks[1].from,
|
5218
|
+
deco.add(marks[0].to, marks[1].from, Decoration8.mark({
|
5092
5219
|
tagName: "a",
|
5093
5220
|
attributes: {
|
5094
5221
|
class: "cm-link",
|
@@ -5098,7 +5225,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5098
5225
|
}
|
5099
5226
|
}));
|
5100
5227
|
if (!editing) {
|
5101
|
-
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ?
|
5228
|
+
atomicDeco.add(marks[1].from, node.to, options.renderLinkButton ? Decoration8.replace({
|
5102
5229
|
widget: new LinkButton(url, options.renderLinkButton)
|
5103
5230
|
}) : hide);
|
5104
5231
|
}
|
@@ -5132,7 +5259,7 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5132
5259
|
}
|
5133
5260
|
}
|
5134
5261
|
};
|
5135
|
-
const tree =
|
5262
|
+
const tree = syntaxTree8(state);
|
5136
5263
|
if (options.numberedHeadings?.from === void 0) {
|
5137
5264
|
for (const { from, to } of view.visibleRanges) {
|
5138
5265
|
tree.iterate({
|
@@ -5156,13 +5283,13 @@ var buildDecorations2 = (view, options, focus2) => {
|
|
5156
5283
|
var forceUpdate = StateEffect5.define();
|
5157
5284
|
var decorateMarkdown = (options = {}) => {
|
5158
5285
|
return [
|
5159
|
-
|
5286
|
+
ViewPlugin7.fromClass(class {
|
5160
5287
|
constructor(view) {
|
5161
|
-
({ deco: this.deco, atomicDeco: this.atomicDeco } =
|
5288
|
+
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations3(view, options, view.hasFocus));
|
5162
5289
|
}
|
5163
5290
|
update(update2) {
|
5164
5291
|
if (update2.docChanged || update2.viewportChanged || update2.focusChanged || update2.transactions.some((tr) => tr.effects.some((effect) => effect.is(forceUpdate))) || update2.selectionSet && !options.selectionChangeDelay) {
|
5165
|
-
({ deco: this.deco, atomicDeco: this.atomicDeco } =
|
5292
|
+
({ deco: this.deco, atomicDeco: this.atomicDeco } = buildDecorations3(update2.view, options, update2.view.hasFocus));
|
5166
5293
|
this.clearUpdate();
|
5167
5294
|
} else if (update2.selectionSet) {
|
5168
5295
|
this.scheduleUpdate(update2.view);
|
@@ -5188,9 +5315,9 @@ var decorateMarkdown = (options = {}) => {
|
|
5188
5315
|
}
|
5189
5316
|
}, {
|
5190
5317
|
provide: (plugin) => [
|
5191
|
-
|
5192
|
-
|
5193
|
-
|
5318
|
+
EditorView20.atomicRanges.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration8.none),
|
5319
|
+
EditorView20.decorations.of((view) => view.plugin(plugin)?.atomicDeco ?? Decoration8.none),
|
5320
|
+
EditorView20.decorations.of((view) => view.plugin(plugin)?.deco ?? Decoration8.none)
|
5194
5321
|
]
|
5195
5322
|
}),
|
5196
5323
|
image(),
|
@@ -5201,12 +5328,12 @@ var decorateMarkdown = (options = {}) => {
|
|
5201
5328
|
};
|
5202
5329
|
|
5203
5330
|
// packages/ui/react-ui-editor/src/extensions/markdown/link.ts
|
5204
|
-
import { syntaxTree as
|
5331
|
+
import { syntaxTree as syntaxTree9 } from "@codemirror/language";
|
5205
5332
|
import { hoverTooltip as hoverTooltip2 } from "@codemirror/view";
|
5206
5333
|
import { tooltipContent } from "@dxos/react-ui-theme";
|
5207
5334
|
var linkTooltip = (render) => {
|
5208
5335
|
return hoverTooltip2((view, pos, side) => {
|
5209
|
-
const syntax =
|
5336
|
+
const syntax = syntaxTree9(view.state).resolveInner(pos, side);
|
5210
5337
|
let link = null;
|
5211
5338
|
for (let i = 0, node = syntax; !link && node && i < 5; node = node.parent, i++) {
|
5212
5339
|
link = node.name === "Link" ? node : null;
|
@@ -5239,7 +5366,7 @@ var linkTooltip = (render) => {
|
|
5239
5366
|
// packages/ui/react-ui-editor/src/extensions/mention.ts
|
5240
5367
|
import { autocompletion as autocompletion2 } from "@codemirror/autocomplete";
|
5241
5368
|
import { log as log6 } from "@dxos/log";
|
5242
|
-
var
|
5369
|
+
var __dxlog_file10 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/extensions/mention.ts";
|
5243
5370
|
var mention = ({ debug, onSearch }) => {
|
5244
5371
|
return autocompletion2({
|
5245
5372
|
// TODO(burdon): Not working.
|
@@ -5254,7 +5381,7 @@ var mention = ({ debug, onSearch }) => {
|
|
5254
5381
|
log6.info("completion context", {
|
5255
5382
|
context
|
5256
5383
|
}, {
|
5257
|
-
F:
|
5384
|
+
F: __dxlog_file10,
|
5258
5385
|
L: 27,
|
5259
5386
|
S: void 0,
|
5260
5387
|
C: (f, a) => f(...a)
|
@@ -5387,12 +5514,12 @@ var useActionHandler = (view) => {
|
|
5387
5514
|
|
5388
5515
|
// packages/ui/react-ui-editor/src/hooks/useTextEditor.ts
|
5389
5516
|
import { EditorState as EditorState2 } from "@codemirror/state";
|
5390
|
-
import { EditorView as
|
5517
|
+
import { EditorView as EditorView21 } from "@codemirror/view";
|
5391
5518
|
import { useFocusableGroup } from "@fluentui/react-tabster";
|
5392
5519
|
import { useCallback as useCallback3, useEffect as useEffect2, useMemo as useMemo4, useRef, useState } from "react";
|
5393
5520
|
import { log as log7 } from "@dxos/log";
|
5394
|
-
import { getProviderValue, isNotFalsy as
|
5395
|
-
var
|
5521
|
+
import { getProviderValue, isNotFalsy as isNotFalsy4 } from "@dxos/util";
|
5522
|
+
var __dxlog_file11 = "/home/runner/work/dxos/dxos/packages/ui/react-ui-editor/src/hooks/useTextEditor.ts";
|
5396
5523
|
var instanceCount = 0;
|
5397
5524
|
var useTextEditor = (props = {}, deps = []) => {
|
5398
5525
|
const { id, initialValue, extensions, autoFocus, scrollTo, selection, moveToEndOfLine, debug } = useMemo4(() => getProviderValue(props), deps ?? []);
|
@@ -5407,7 +5534,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5407
5534
|
instanceId,
|
5408
5535
|
doc: initialValue?.length ?? 0
|
5409
5536
|
}, {
|
5410
|
-
F:
|
5537
|
+
F: __dxlog_file11,
|
5411
5538
|
L: 75,
|
5412
5539
|
S: void 0,
|
5413
5540
|
C: (f, a) => f(...a)
|
@@ -5431,20 +5558,20 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5431
5558
|
id && documentId.of(id),
|
5432
5559
|
extensions,
|
5433
5560
|
// NOTE: This doesn't catch errors in keymap functions.
|
5434
|
-
|
5561
|
+
EditorView21.exceptionSink.of((err) => {
|
5435
5562
|
log7.catch(err, void 0, {
|
5436
|
-
F:
|
5563
|
+
F: __dxlog_file11,
|
5437
5564
|
L: 97,
|
5438
5565
|
S: void 0,
|
5439
5566
|
C: (f, a) => f(...a)
|
5440
5567
|
});
|
5441
5568
|
})
|
5442
|
-
].filter(
|
5569
|
+
].filter(isNotFalsy4)
|
5443
5570
|
});
|
5444
|
-
view2 = new
|
5571
|
+
view2 = new EditorView21({
|
5445
5572
|
parent: parentRef.current,
|
5446
5573
|
state,
|
5447
|
-
scrollTo: scrollTo ?
|
5574
|
+
scrollTo: scrollTo ? EditorView21.scrollIntoView(scrollTo, {
|
5448
5575
|
yMargin: 96
|
5449
5576
|
}) : void 0,
|
5450
5577
|
dispatchTransactions: debug ? debugDispatcher : void 0
|
@@ -5465,7 +5592,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5465
5592
|
log7("destroy", {
|
5466
5593
|
id
|
5467
5594
|
}, {
|
5468
|
-
F:
|
5595
|
+
F: __dxlog_file11,
|
5469
5596
|
L: 134,
|
5470
5597
|
S: void 0,
|
5471
5598
|
C: (f, a) => f(...a)
|
@@ -5482,7 +5609,7 @@ var useTextEditor = (props = {}, deps = []) => {
|
|
5482
5609
|
scrollTo,
|
5483
5610
|
selection
|
5484
5611
|
}, {
|
5485
|
-
F:
|
5612
|
+
F: __dxlog_file11,
|
5486
5613
|
L: 143,
|
5487
5614
|
S: void 0,
|
5488
5615
|
C: (f, a) => f(...a)
|
@@ -5543,7 +5670,7 @@ export {
|
|
5543
5670
|
EditorInputModes,
|
5544
5671
|
EditorState3 as EditorState,
|
5545
5672
|
EditorToolbar,
|
5546
|
-
|
5673
|
+
EditorView22 as EditorView,
|
5547
5674
|
EditorViewMode,
|
5548
5675
|
EditorViewModes,
|
5549
5676
|
Inline,
|
@@ -5574,6 +5701,7 @@ export {
|
|
5574
5701
|
createDataExtensions,
|
5575
5702
|
createEditorAction,
|
5576
5703
|
createEditorActionGroup,
|
5704
|
+
createEditorStateStore,
|
5577
5705
|
createEditorStateTransaction,
|
5578
5706
|
createElement,
|
5579
5707
|
createExternalCommentSync,
|
@@ -5628,7 +5756,7 @@ export {
|
|
5628
5756
|
setStyle,
|
5629
5757
|
singleValueFacet,
|
5630
5758
|
stackItemContentEditorClassNames,
|
5631
|
-
stackItemContentToolbarClassNames,
|
5759
|
+
stackItemContentToolbarClassNames2 as stackItemContentToolbarClassNames,
|
5632
5760
|
table,
|
5633
5761
|
tags2 as tags,
|
5634
5762
|
textRange,
|