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